Как интернационализация работает в JavaScript? - PullRequest
139 голосов
/ 21 июня 2010

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

  • Есть ли в JavaScript встроенная поддержка интернационализации?
  • Что такое i18n в JavaScript?
  • Как обращаться с календарями, валютами, датами и т. Д .?

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

Ответы [ 4 ]

157 голосов
/ 21 июня 2010

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

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

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

Для современных сред , спецификация Интернационализации API *1017* 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 Интернационализации, которые автоматически выберут лучший (или первый поддерживаемый) языковой стандарт.

Короче говоря, вы должны выполнить большую часть работы самостоятельно или использовать framework / library , потому что вы не можете полагаться на браузер, чтобы сделать это за вас.

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

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

11 голосов
/ 24 июня 2013

Mozilla недавно выпустила потрясающий L20n или локализацию 2.0.По их собственным словам, L20n является

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

Их реализация js находится в репозитории github L20n.

0 голосов
/ 15 ноября 2012

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

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

0 голосов
/ 21 июня 2010

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

Например, Datejs - хорошая международная библиотека дат.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...