Как работает интернационализация в JavaScript?

Мне интересно, как бороться с интернационализацией в JavaScript. Я погуглил, но я не получаю убедительный ответ на:

  • имеет ли JavaScript встроенную поддержку интернационализации?
  • что такое i18n в JavaScript?
  • как работать с календарями, валютами, датами и т. д.?

Я уже прочитала интернационализация внутри JavaScript.

4 ответов


поддержка локализации в устаревших браузерах плохой. Первоначально это было связано с фразами в спецификации языка ECMAScript, которые выглядят следующим образом:

количество.прототип.методом tolocalestring()
Создает строковое значение, представляющее значение числа, отформатированного в соответствии с соглашения текущей локали среды хоста. Эта функция зависит от реализации, и это допустимо, но не поощряется, чтобы он возвращал то же самое вещь как toString.

каждый метод локализации, определенный в спецификации, определяется как" зависящий от реализации", что приводит к множеству несоответствий. В этом случае Chrome Opera и Safari вернут то же самое, что и .toString(). Firefox и IE вернут строки в формате locale, а IE даже включает разделитель тысяч (идеально подходит для строк валюты). Chrome был недавно обновлен, чтобы вернуть строку, разделенную тысячами, хотя и без исправлений десятичный.

для современных сред на спецификации API интернационализации ECMAScript, новый стандарт, который дополняет спецификацию языка ECMAScript, обеспечивает гораздо лучшую поддержку сравнения строк, форматирования чисел и форматирования даты и времени; он также исправляет соответствующие функции в спецификации языка. Введение можно найти здесь. Реализации доступны в:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Опера 15

существует также реализация совместимости, Intl.js, который предоставит API в средах, где он еще не существует.

определение предпочтительного языка пользователя остается проблемой, так как нет спецификации для получения текущего языка. Каждый браузер реализует метод для получения языковой строки, но это может быть на основе языка операционной системы пользователя или только языка браузера:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

хорошим обходным путем для этого является сброс заголовка Accept-Language с сервера на клиент. Если он отформатирован как JavaScript, его можно передать конструкторам API интернационализации, которые автоматически выберут лучший (или первый Поддерживаемый) язык.

короче говоря, вы должны положить в много работы самостоятельно, или использовать фреймворк/библиотека, потому что нельзя полагаться на браузер сделает это за вас.

различные библиотеки и плагины для локализации:

Не стесняйтесь добавлять/редактировать.


Mozilla недавно выпустила удивительный L20n или локализации 2.0. Своими словами L20n составляет

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

их реализация js находится на репозиторий GitHub L20n.


некоторые из них родные, остальные доступны через библиотеки.

Datejs хорошая Международного дня библиотек.

в остальном речь идет только о переводе языка, а JavaScript изначально совместим с Unicode (а также со всеми основными браузерами).


вы также можете попробовать другую библиотеку - https://github.com/wikimedia/jquery.i18n .

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