Конкат строки для языка справа налево в JavaScript - PullRequest
1 голос
/ 15 августа 2011

Кажется, + не является правильным оператором для обработки конкатенации строк в JavaScript. Какие есть альтернативы для обработки случаев ltr и rtl?

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Проблема в том, что + не является правильным оператором для объединения строк вообще. Или, может быть, это так, но объединение строк - это ошибка интернационализации.

Вместо того, чтобы просто объединять их, нужно на самом деле отформатировать их. Итак, что вы должны сделать, это использовать заполнители:

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, то есть знак сильной направленности справа налево.

0 голосов
/ 17 января 2015

На самом деле, при условии, что обе строки локализованы, и вы хотите, чтобы строка справа логически отображалась после строки слева, тогда + иногда работает нормально. Строки на таких языках, как арабский, должны отображаться RTL (справа налево) на экране, но порядок символов по-прежнему должен быть LTR (слева направо) в памяти. Таким образом, оператор + логически согласован для использования для создания «упорядоченного списка» терминов на любом языке.

Но есть также сценарии, в которых + не решает проблему правильно. Есть сценарии, в которых правильное решение состоит в том, чтобы следовать грамматике содержащего языка. Например, вы действительно встраиваете английское слово в арабское предложение? Или наоборот? В любом случае, решение здесь состоит в том, чтобы выполнить форматирование строки, где локализованное предложение содержит заполнитель для иностранного термина, например {0}.

Третий случай: что если нет грамматических отношений, потому что это всего лишь два отдельных предложения? В этом случае - это без правильного заказа. Например. если у вас есть предложение на английском языке перед арабским предложением. Носитель английского языка, вероятно, прочтет предложения LTR (сначала слева, затем справа). Арабский спикер, вероятно, будет читать предложения RTL. В любом случае, всем непонятно, в каком порядке автор намеревался прочитать предложения. :)

...