Проблема в том, что + не является правильным оператором для объединения строк вообще. Или, может быть, это так, но объединение строк - это ошибка интернационализации.
Вместо того, чтобы просто объединять их, нужно на самом деле отформатировать их. Итак, что вы должны сделать, это использовать заполнители:
var somePattern = "This language is written {0}.";
var someMessage = somePattern.format("LTR");
Таким образом, переводчик сможет изменить порядок предложений, включая порядок слов. И я верю, что это решит твою проблему.
Для функции форматирования, позвольте мне процитировать этот отличный ответ :
String.prototype.format = function() {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function() {
return args[arguments[1]];
});
};
РЕДАКТИРОВАТЬ: Добавление информации о метках направленности.
Иногда, когда у вас есть несколько заполнителей, вы можете потерять контроль над направлением строки, т.е. {0}/{1}
будет по-прежнему отображаться как первая / вторая вместо желаемой второй / последней. Чтобы исправить это, вы должны добавить к шаблону знак сильной направленности, т.е. {0}‏/{1}
. ‏
- это HTML-сущность, которая преобразуется в кодовую точку Unicode U + 200F, то есть знак сильной направленности справа налево.