Я пытаюсь понять, как JavaScript, работающий в различных браузерах, определяет локаль, которая будет использоваться JavaScript Date
возразите при использовании метода toLocaleString()
.
Я изменил язык и настройки локали моей системы через панель управления Windows, и я также изменил настройки языка каждого браузера к тому же. Функция все еще возвратила английскую дату.
Существует ли установка реестра на окнах, которые необходимо вручную установить? Я пропускал некоторую установку где-нибудь? Или я должен получить диск установки Windows для конкретных регионов?
Отличная статья из одного из моих любимых блогов о поведении JScript:
Я полагаю, что сейчас мы находимся в режиме "всегда по умолчанию для US-English" в IE. Это сбивает с толку, потому что движки сценариев имеют возможность изменять локаль, используемую для сообщений об ошибках, независимо от локали, используемой для форматирования дат, чисел и т. д.
и
Date.prototype.toLocaleDateString, toLocaleTimeString, и toLocaleString осложнены некоторыми странными странностями в Win32 NLS API. Чтобы обойти различные проблемы, локализуются только даты между 1600 и 10000 годами нашей эры. Еврейские форматы дат для годов после 2240 года нашей эры также не поддерживаются. Как только мы преодолеваем эти препятствия, для форматирования строк используются API Win32 GetDateFormat и GetTimeFormat. (Я смутно припоминаю, что там также была ошибка, связанная с тайским календарем, но подробностей не помню).
И из MDC (Mozilla Developer Center):
Метод toLocaleString полагается на базовую операционную систему при форматировании дат. Он преобразует дату в строку, используя соглашение о форматировании операционной системы, в которой запущен сценарий. Например, в США месяц появляется перед датой (04/15/98), тогда как в Германии дата появляется перед месяцем (15.04.98). Если операционная система не совместима с годом 2000 и не использует полный год для годов до 1900 или более 2000, toLocaleString возвращает строку, которая не совместима с годом 2000. toLocaleString ведет себя аналогично toString при преобразовании года, который операционная система неправильно форматирует.
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 . Он говорит, что использует язык операционной системы.
Возможно, потребуется перезагрузить операционную систему, чтобы изменения языковых стандартов вступили в силу.
Хотя реализация браузера обычно зависит от процедур ОС для выполнения форматирования, я не думаю, что в спецификации есть что-то, что определяет, как происходит форматирование или что выводится, только то, что это соответствует локали.
Я думаю, что вопрос был о том, как определяется локаль. По крайней мере, Firefox рассматривает это как фиксированное значение, зависящее от установки. Его нельзя изменить через настройки ОС или даже браузера (языковые/региональные настройки, которые вы видите в Firefox, относятся к другой настройке локали, используемой только в транзакциях HTTP)
Чтобы действительно управлять форматированием даты в произвольных локалях, кроме той, которую ваш браузер считает установленной локалью, вам понадобится JS-библиотека вроде jsdate или dojo.date.