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

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

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

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

3 ответов


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

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

и

дата.прототип.вывод tolocaledatestring, toLocaleTimeString, и методом tolocalestring осложнены какой-то странной weirdnesses в Win32 API многоязыковой. Чтобы обойти различные проблемы, локализуются только даты между 1600 и 10000 AD. Иврит форматы даты в течение многих лет после 2240 AD также не поддерживаются. Как только мы преодолеем эти препятствия, Win32 APIs GetDateFormat и GetTimeFormat используются для форматирования строк. (Я смутно припоминаю, что там также была ошибка, связанная с тайским календарем, но я не помню деталей.)

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

и MDC (Mozilla Developer Center):

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


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

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

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


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

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

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