Как объект JavaScript «Дата» определяет локаль браузера пользователя? - PullRequest
14 голосов
/ 20 февраля 2010

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

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

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

Ответы [ 3 ]

8 голосов
/ 20 февраля 2010

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

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

и

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

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

2 голосов
/ 20 февраля 2010

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

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

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

1 голос
/ 26 февраля 2010

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

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

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

...