Как объект JavaScript "Дата" определяет локаль пользовательского браузера?
Я пытаюсь понять, как JavaScript, запущенный в разных браузерах, определяет язык, который будет использоваться объектом JavaScript Date
при использовании метода toLocaleString()
.
Я изменил настройки языка и локали моей системы с помощью панели управления Windows, и я также изменил все настройки языка браузера на то же самое. Функция все еще вернула английскую дату.
Есть ли параметр реестра в Windows, который вы должны вручную установить? Я где-то пропустил какую-то настройку? Или мне нужно установить установочный диск Windows для определенных регионов?
Ответы
Ответ 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.