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

Я на Rails 5.1.6. Я была такая же проблема. Как было рекомендовано выше, я деградировал драгоценный камень с кофе-сценарием, который решил проблему.

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2' # <-- This existed already
gem 'coffee-script-source', '1.8.0' # <-- Adding this line solved the problem

Примечание: я не изменял файл application.html.rb

139
задан 6 revs, 4 users 41% 23 May 2017 в 11:54
поделиться

2 ответа

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

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

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

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

  • 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 интернационализации, которые автоматически выберут лучшую (или поддерживаемую первой) локаль.

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

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

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

157
ответ дан 23 November 2019 в 23:16
поделиться

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

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

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

0
ответ дан 23 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: