Подтвердить что ты не робот

Как объект JavaScript "Дата" определяет локаль пользовательского браузера?

Я пытаюсь понять, как JavaScript, запущенный в разных браузерах, определяет язык, который будет использоваться объектом JavaScript Date при использовании метода toLocaleString().

Я изменил настройки языка и локали моей системы с помощью панели управления Windows, и я также изменил все настройки языка браузера на то же самое. Функция все еще вернула английскую дату.

Есть ли параметр реестра в Windows, который вы должны вручную установить? Я где-то пропустил какую-то настройку? Или мне нужно установить установочный диск Windows для определенных регионов?

4b9b3361

Ответ 1

Отличная статья из одного из моих любимых блогов о поведении JScript:

Я считаю, что мы сейчас в режиме "всегда по умолчанию для США-англичан" в IE. Это сбивает с толку, поскольку двигатели script имеют возможность изменять языковой стандарт, используемый для сообщений об ошибках, независимо от языка, используемого для форматирования дат, чисел и т.д.

и

Date.prototype.toLocaleDateString, toLocaleTimeString и toLocaleString сложны причудливыми странностями в API Win32 NLS. Для решения различных проблем локализуются только даты между 1600 и 10000 годами нашей эры. Форматы дат иврита в течение многих лет после 2240 г. н.э. также не поддерживаются. Как только мы преодолеем эти препятствия, Win32 API GetDateFormat и GetTimeFormat используются для форматирования строк. (Я смутно вспоминаю, что там была ошибка, связанная с тайским календарем, но я не помню подробностей.)

https://blogs.msdn.com/ericlippert/archive/2004/05/18/jscript-localization-and-those-wacky-newfoundlanders.aspx

И из MDC (Центр разработчиков Mozilla):

Метод toLocaleString полагается на базовую операционную систему в датах форматирования. Он преобразует дату в строку, используя соглашение о форматировании операционной системы, в которой запущен script. Например, в Соединенных Штатах месяц появляется до даты (04/15/98), тогда как в Германии дата появляется до месяца (15.04.98). Если операционная система не соответствует требованиям 2000 года и не использует весь год в течение многих лет до 1900 года или более 2000 года, toLocaleString возвращает строку, не совместимую с 2000 годом. toLocaleString ведет себя аналогично toString при преобразовании года, который операционная система не форматирует.

Ответ 2

Это от часового пояса от системных часов, а не от локали.

[ Изменить] Теперь, когда я перечитал вопрос, вы говорите о форматировании даты, не так ли? (15 февраля - 15 февраля) Вот ссылка на метод Firefox: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date/toLocaleString. В нем говорится, что он использует локаль операционной системы.

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

Ответ 3

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

Я думаю, вопрос был о том, как определяется локаль. По крайней мере, Firefox рассматривает это как фиксированное значение в зависимости от установки. Он не может быть изменен с помощью ОС или даже настроек браузера (языковые/региональные настройки, которые вы видите в Firefox, относятся к другому языку, используемому только в транзакциях HTTP)

Чтобы фактически управлять форматированием даты в произвольных локалях, помимо того, что ваш браузер предполагает установленный язык, вам понадобится библиотека JS, такая как jsdate или dojo.date.