Как найти имя cldr от Microsoft CultureInfo в JavaScript?
Я хочу знать, существует ли где-то определенное сопоставление от Microsoft CultureInfo (которое можно посмотреть здесь: MS-LCID (идентификатор кода языка Windows)) к языковому коду Unicode cldr.
В настоящее время я использую jQuery и globalize.js для проверки пользовательского ввода нашего сайта asp.net-core. Наша реализация выглядит аналогично этому примеру validationScript.cshtml (код asp.net-core)
Нам нужно было только изменить раздел скрипта следующим образом:
<script type="text/javascript">
var culture = "@System.Globalization.CultureInfo.CurrentUICulture";
$.when(
$.get("/lib/newTestLocalization/cldr-core/supplemental/likelySubtags.json"),
$.get("/lib/newTestLocalization/cldr-numbers-modern/main/" + culture + "/numbers.json"),
$.get("/lib/newTestLocalization/cldr-core/supplemental/numberingSystems.json"),
$.get("/lib/newTestLocalization/cldr-core/supplemental/timeData.json"),
$.get("/lib/newTestLocalization/cldr-core/supplemental/weekData.json")
).then(function() {
console.log("sucessfully loaded cldr data");
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply(arguments, [0]).map(function(result) {
return result[0];
});
},
function() { console.log("Error loading cldr data!"); }
).then(Globalize.load, function ()
{ console.log("Error loading cldr data!"); }
).then(function () {
Globalize.locale(culture);
console.log("finished Globalize.locale !");
});
</script>
Если я переключаю сайт на один из следующих:
- CultureInfo ("ж-CHS")
- CultureInfo ("ZH-СНТ")
- CultureInfo ("де-DE")
- CultureInfo ("JA-JP")
- CultureInfo ("EN-US")
globalize.js не работает, потому что нет папки cldr для любого из идентификаторов языка выше.
Я посмотрел здесь cldr-numbers-full/main/ (данные JSON для выпуска CLDR 33), но не смог найти ни один из идентификаторов выше.
Итак, мой вопрос: "Есть ли где-то определенное сопоставление MS-LCID с cldr-ID, если это правильный вопрос?
И мой второй вопрос: какой текущий стандарт / передовой опыт использовать?
1 ответ
Наконец-то нашел решение здесь
В конце _ValidationScriptsPartial.cshtml добавьте следующий код.
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment HostingEnvironment
@{
string GetDefaultLocale()
{
const string localePattern = "lib\\cldr-data\\main\\{0}";
var currentCulture = System.Globalization.CultureInfo.CurrentCulture;
var cultureToUse = "en-GB"; //Default regionalisation to use
if (System.IO.Directory.Exists(System.IO.Path.Combine(HostingEnvironment.WebRootPath, string.Format(localePattern, currentCulture.Name))))
cultureToUse = currentCulture.Name;
else if (System.IO.Directory.Exists(System.IO.Path.Combine(HostingEnvironment.WebRootPath, string.Format(localePattern, currentCulture.TwoLetterISOLanguageName))))
cultureToUse = currentCulture.TwoLetterISOLanguageName;
return cultureToUse;
}
}
<script type="text/javascript">
var culture = "@GetDefaultLocale()";
$.when(
$.get("/lib/cldr-data/supplemental/likelySubtags.json"),
$.get("/lib/cldr-data/main/" + culture + "/numbers.json"),
$.get("/lib/cldr-data/supplemental/numberingSystems.json"),
$.get("/lib/cldr-data/main/" + culture + "/ca-gregorian.json"),
$.get("/lib/cldr-data/main/" + culture +"/timeZoneNames.json"),
$.get("/lib/cldr-data/supplemental/timeData.json"),
$.get("/lib/cldr-data/supplemental/weekData.json")
).then(function () {
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply(arguments, [0]).map(function (result) {
return result[0];
});
}).then(Globalize.load).then(function () {
Globalize.locale(culture);
});
</script>