2010-06-21 4 views
134

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

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

Я уже читал Internationalization inside JavaScript.

+0

Microsoft недавно выпустила плагин JQuery глобализации. Подробности [здесь] (http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx) – Adeel

ответ

149

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

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

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

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

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Opera 15

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

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

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

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

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

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

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

+10

Спасибо всем, кто вносит свой вклад; Я никогда бы не подумал, что смогу чему-то научиться, прочитав мои старые ответы. Я рад видеть обновление для спецификации API интернационализации, это действительно потрясающе, и мне просто нужно проверить его в Chrome. –

+0

Спасибо за отличную компиляцию. С положительной стороны, похоже, что Mozilla вскоре может отправить современный toLocaleString() - возможно, FF28: https://bugzilla.mozilla.org/show_bug.cgi?id=769871 –

+0

http://i18next.com теперь поставляется с руководство по переводу, построенное на основе http://locize.com - это может быть большой победой, если вам нужно решить полный процесс перевода, а не только инструмент для вашего кода для i18n. Плюс имеет приятный редактор Incontext Editor ... – jamuhl

0

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

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

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

+2

Datejs устарел. Лучше попробуйте http://momentjs.com/ – jamuhl

0

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

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

10

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

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

Их реализация JS находится на github L20n repository.

+0

Я начал проект, который нуждается в локализации, и мы решили использовать L20n тоже;). Поэтому у меня есть первая версия L20n Plugin для RequireJS (https://github.com/fernandogmar/L20n-RequireJS), если вы используете RequireJS. Я надеюсь, что это будет полезно и вам. Любое предложение будет приветствоваться. –

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