Как объект “Даты” JavaScript определяет локаль браузера пользователя?

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

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

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

14
задан hippietrail 6 August 2012 в 10:25
поделиться

3 ответа

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

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

и

Date.prototype.toLocaleDateString, toLocaleTimeString, и toLocaleString осложнены некоторыми странными странностями в Win32 NLS API. Чтобы обойти различные проблемы, локализуются только даты между 1600 и 10000 годами нашей эры. Еврейские форматы дат для годов после 2240 года нашей эры также не поддерживаются. Как только мы преодолеваем эти препятствия, для форматирования строк используются API Win32 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 при преобразовании года, который операционная система неправильно форматирует.

8
ответ дан 1 December 2019 в 15:01
поделиться
var category = [ 
        { name: "Cat1", elements : [ 
            { name: name, id: id } ] 
        },
        { name: "Cat2", elements : [ 
            { name: name, id: id },
            { name: name, id: id },
            { name: name, id: id } ] 
        }, 
        { name: "Cat3", elements : [ 
            { name: name, id: id },
            { name: name, id: id } ] 
        }
];

function myAbcSort(a, b){
    if(a.elements.length > b.elements.length) {
        return -1;
    } else {
        return 1;
    }
}
category.sort(myAbcSort);
-121--4648261-

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

PS Ответ будет заключаться в том, что Fortran, C и C++ потребляют более 95% циклов ЦП.

-121--4460097-

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

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

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

2
ответ дан 1 December 2019 в 15:01
поделиться

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

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

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

1
ответ дан 1 December 2019 в 15:01
поделиться
Другие вопросы по тегам:

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