1

Метод JavaScript String toLocaleUpperCase() должен учитывать отображение случаев в разных локалях, например, турецкий (i не является сопоставимым с точками I, а точками İ на турецком языке).String.toLocaleUpperCase(): Установить языковой стандарт на Node.js

Однако, похоже, что локаль захвачена только из ОС: я не вижу способа настроить языковой стандарт. Так что, если я использую систему под управлением США и хочу, чтобы турецкая строка в «tr» была загружена турецкой строкой, она вернет версию в США (без пауз I, а не пунктир İ).

Предполагая, что я использую Node.js, скомпилированный с INTL (https://github.com/nodejs/node/wiki/Intl), как я могу определить локаль до toLocaleUpperCase()?

+1

Обратите внимание, что вы можете иметь различную локаль для каждого процесса, например, LOCALE = tr_TR.UTF-8. Рассматривая документацию для 'Intl', было неясно, является ли это объектом, который может быть создан и использован как контекст для строковых операций ... но это, вероятно, направление, в котором вы хотите посмотреть. – david

+0

Спасибо @david, I Я проверю это. Однако я хочу иметь возможность переключать локали в соответствии с клиентскими запросами. Установив языковой стандарт для каждого процесса, он будет работать постоянно с этой локалью. Для должным образом интернационализированного sw, необходимо будет использовать 'toLocaleUpperCase()' в соответствии с различными пользовательскими запросами. Я посмотрю, будет ли это динамически изменяться во время выполнения. – noderman

ответ

2

Это не совсем ответ прямо сейчас. Но ECMA-402 теперь указывает (по второму выпуску spec) поведение String.prototype.toLocaleUpperCase. ECMA-402 изменяет функцию для принятия аргумента locale (undefined, строки или массива локалей) - аналогично тому, что Number.prototype.toLocaleString и различные другие чувствительные к региону функции в ECMA-262 принимают при изменении ECMA-402 - и ведет себя в соответствии с этим языком. После того, как узел реализует этот (it doesn't right now), вы можете просто изменить

var str = "bira"; 
str.toLocaleUpperCase(); // "BIRA" 

к

var str = "bira"; 
str.toLocaleUpperCase("tr-TR"); // BİRA 

и быть на вашем пути.

(Отказ от ответственности: я не знаю турецкого вообще, я просто взял слово, содержащее «я» от турецкого списка слов, и я предполагая локализованную чувствительного верхнего регистра работает так, как я ожидаю, что делает, для целей вышеприведенного примера.)

+0

Спасибо, я отмечу как ответ. – noderman

+0

Это работает, спасибо большое – dreampowder

Смежные вопросы