From 7c697759e9da678cee23561ce413da0d75f7bc64 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Thu, 1 Dec 2016 17:06:53 -0700
Subject: [PATCH] Escape and ignore `%` and `\,` in translator args
---
public/src/modules/translator.js | 5 +++--
test/translator.js | 7 +++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js
index a876dba44c..e60385ed79 100644
--- a/public/src/modules/translator.js
+++ b/public/src/modules/translator.js
@@ -105,7 +105,7 @@
} else if (text.slice(i, i + 2) === ']]') {
level -= 1;
i += 1;
- } else if (level === 0 && text[i] === ',') {
+ } else if (level === 0 && text[i] === ',' && text[i - 1] !== '\\') {
arr.push(text.slice(brk, i).trim());
i += 1;
brk = i;
@@ -260,7 +260,8 @@
}
var out = translated;
translatedArgs.forEach(function (arg, i) {
- out = out.replace(new RegExp('%' + (i + 1), 'g'), arg);
+ var escaped = arg.replace(/%/g, '%').replace(/\\,/g, ',');
+ out = out.replace(new RegExp('%' + (i + 1), 'g'), escaped);
});
return out;
});
diff --git a/test/translator.js b/test/translator.js
index 91fbf8f696..f52fd7c79c 100644
--- a/test/translator.js
+++ b/test/translator.js
@@ -127,14 +127,13 @@ describe('new Translator(language)', function () {
});
});
- it('should properly escape % and ,', function (done) {
+ it('should properly escape and ignore % and \\, in arguments', function (done) {
var translator = Translator.create('en-GB');
- var title = 'Test 1, 2, 3 % salmon';
- title = title.replace(/%/g, '%').replace(/,/g, ',');
+ var title = 'Test 1\\, 2\\, 3 % salmon';
var key = "[[topic:composer.replying_to, " + title + "]]";
translator.translate(key).then(function (translated) {
- assert.strictEqual(translated, 'Replying to Test 1, 2, 3 % salmon');
+ assert.strictEqual(translated, 'Replying to Test 1, 2, 3 % salmon');
done();
});
});