Як працює інтернаціоналізація в JavaScript?


143

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

  • Чи підтримує JavaScript підтримку інтернаціоналізації?
  • Що таке i18n у JavaScript?
  • Як поводитися з календарями, валютами, датами тощо?

Я вже читав Інтернаціоналізацію всередині JavaScript .


Microsoft нещодавно випустила плагін для глобалізації jquery. Подробиці тут
Адель

Відповіді:


161

Підтримка локалізації в застарілих браузерах погана. Спочатку це було пов’язано з фразами в ECMAScriptмовній специфікації, які виглядають приблизно так:

Number.prototype.toLocaleString () Получає
значення рядка, що представляє значення числа, відформатованого відповідно до умов поточного локального середовища хост-середовища. Ця функція залежить від реалізації, і це дозволяється, але не рекомендується, щоб вона повертала те саме, що і дляString .

Кожен метод локалізації, визначений у специфікації, визначається як "залежний від реалізації", що призводить до безлічі невідповідностей. У цьому випадку Chrome Opera і Safari повернуть те саме, що і .toString(). Firefox та IE повернуть рядки, відформатовані локально, а IE навіть містить роздільник тисячі (ідеально підходить для валютних рядків). Нещодавно Chrome було оновлено, щоб повернути відокремлений тисячами рядок, хоча без фіксованої десяткової точки.

Для сучасних умов , то API специфікація ECMAScript Інтернаціоналізації , новий стандарт , який доповнює ECMAScript мову специфікація, забезпечує набагато кращу підтримку для порівняння рядків, форматування чисел, а також дата і час форматування; він також фіксує відповідні функції в Spec. Вступ можна знайти тут . Реалізація доступна на:

  • 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, які автоматично виберуть найкращий (або першу підтримку).

Коротше кажучи, вам доведеться самостійно вкласти багато робіт або використовувати рамку / бібліотеку , тому що ви не можете розраховувати на браузер, щоб зробити це за вас.

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

  • Інші:

Не соромтеся додавати / редагувати.


13
Дякуємо всім людям, які беруть участь у цьому; Ніколи б не думав, що можу щось навчитися, читаючи свої старі відповіді. Я радий побачити оновлення специфікації інтернаціоналізації API там, це справді приголомшливо, і я щойно повинен перевірити його в Chrome.
Енді Е

1
Дякую за відмінну компіляцію. З позитивної ноти, схоже, Mozilla незабаром може доставити сучасний ToLocaleString () - можливо FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Кріс Адамс

1
i18next.com тепер оснащений управлінням перекладом, побудованим на топі locize.com - це може бути великим виграшем, якщо вам потрібно вирішити повний процес перекладу - не просто ввести код для i18n. Плюс має приємну функцію редактора Incontext ...
jamuhl

12

Нещодавно Mozilla випустила дивовижний L20n або локалізацію 2.0. За їх власними словами, L20n є

відкритим кодом, мовою сценаріїв, що залежить від локалізації, що використовується для обробки статі, множини, сполучень та більшості інших химерних елементів природної мови.

Їх реалізація js знаходиться у сховищі github L20n.


Я розпочав проект, який потребує локалізації, і ми вирішили також використовувати L20n;). Тому я розізлив першу версію плагіна L20n для RequireJS ( github.com/fernandogmar/L20n-RequireJS ), якщо ви використовуєте RequireJS, я сподіваюся, що він буде корисним і для вас. Будь-яка пропозиція буде вітатися.
Fernando Gm

0

Частина його є рідною, решта доступна через бібліотеки.

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

В іншому, мова йде лише про переклад мови, а JavaScript є сумісно Unicode (як і всі основні браузери).


0

Ви також можете спробувати іншу бібліотеку - https://github.com/wikimedia/jquery.i18n .

Окрім заміни параметрів та декількох форм множини, він підтримує ґендер - досить унікальну особливість спеціальних граматичних правил, які потрібні деяким мовам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.