如何从 javascript 中的 Microsoft CultureInfo 中查找 cldr 名称?
How to find the cldr name from Microsoft CultureInfo in javascript?
我想知道是否有从 Microsoft CultureInfo(可以在此处查找 MS-LCID (Windows Language Code ID))到 Unicode cldr 语言代码的已定义映射。
我目前正在使用 jQuery 和 globalize.js 来验证我们 asp.net 核心站点的用户输入。我们的实现看起来类似于此示例 validationScript.cshtml (asp.net-core code)
我们只需要像这样更改脚本部分:
<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>
如果我将站点切换到以下之一:
- 文化信息("zh-CHS")
- 文化信息("zh-CHT")
- 文化信息("de-DE")
- 文化信息("ja-JP")
- 文化信息("en-US")
globalize.js 不工作,因为上面的任何语言 ID 都没有 cldr 文件夹。
我在这里 cldr-numbers-full/main/ (JSON data for CLDR 33 release) 查找过,但找不到上面的任何 ID。
所以我的问题是:
“是否有从 MS-LCID 到 cldr-ID 的定义映射,如果这是一个正确的问题?
我的第二个问题是:当前 standard/best-practice 要使用什么?
终于找到解决方法here
在_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>
我想知道是否有从 Microsoft CultureInfo(可以在此处查找 MS-LCID (Windows Language Code ID))到 Unicode cldr 语言代码的已定义映射。
我目前正在使用 jQuery 和 globalize.js 来验证我们 asp.net 核心站点的用户输入。我们的实现看起来类似于此示例 validationScript.cshtml (asp.net-core code)
我们只需要像这样更改脚本部分:
<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>
如果我将站点切换到以下之一:
- 文化信息("zh-CHS")
- 文化信息("zh-CHT")
- 文化信息("de-DE")
- 文化信息("ja-JP")
- 文化信息("en-US")
globalize.js 不工作,因为上面的任何语言 ID 都没有 cldr 文件夹。
我在这里 cldr-numbers-full/main/ (JSON data for CLDR 33 release) 查找过,但找不到上面的任何 ID。
所以我的问题是: “是否有从 MS-LCID 到 cldr-ID 的定义映射,如果这是一个正确的问题?
我的第二个问题是:当前 standard/best-practice 要使用什么?
终于找到解决方法here
在_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>