Ответ 1
Поддержка локализации в старых браузерах оставляет желать лучшего. Первоначально это происходило из-за фраз в спецификации языка ECMAScript, которые выглядят так:
Number.prototype.toLocaleString()
Создает строковое значение, представляющее значение числа, отформатированное в соответствии с соглашениями текущей локали среды хоста. Эта функция зависит от реализации, и для нее допустимо, но не рекомендуется, возвращать то же самое, что и toString.
Каждый метод локализации, определенный в спецификации, определяется как "зависящий от реализации", что приводит к множеству несоответствий. В этом случае Chrome Opera и Safari возвращают то же самое, что и .toString()
. Firefox и IE будут возвращать строки в формате локали, а 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 Интернационализации, которые автоматически выберут лучший (или первый поддерживаемый) языковой стандарт.
Короче говоря, вы должны выполнить большую часть работы самостоятельно или использовать фреймворк/библиотеку, потому что вы не можете полагаться на браузер, который сделает это за вас.
Различные библиотеки и плагины для локализации:
-
Поддерживается открытым сообществом (без заказа):
- Polyglot.js - библиотека интернационализации AirBnb
- Intl.js - совместимая реализация Интернационализации API
- i18next (home) для i18n (включая плагин jquery, перевод интерфейса,...)
- момент .js (домой) для дат
- numbro.js (home) (был цифрой .js (home)) для чисел и валюты
- l10n.js (дома)
- L10ns (домашний) инструмент для рабочего процесса i18n и сложного форматирования строк
- Локализация jQuery (плагин) (дома)
- Поддержка интернационализации YUI
- jquery.i18На сегодняшний день
- browser-i18n с поддержкой плюрализации
- Вдохновлен аналог Ruby знаменитой жемчужиной I18n
- jQuery Globalize jQuery собственная библиотека i18n
- js-lingui - реализация MessageFormat для JS (ES2016) и React
- Другие:
- JQuery Глобализация (плагин)
- requirejs-i18n Определите комплект I18N с помощью RequireJS.
Не стесняйтесь добавлять/редактировать.