首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javascript中从Microsoft CultureInfo中找到cldr名称?

如何在javascript中从Microsoft CultureInfo中找到cldr名称?
EN

Stack Overflow用户
提问于 2018-08-06 15:31:33
回答 1查看 700关注 0票数 1

我想知道是否存在从Microsoft语言代码(可以在这里查找CultureInfo )到Unicode语言代码的定义映射。

我目前正在使用jQuery和globalize.js来验证ASP.NET核心站点的用户输入。我们的实现类似于这个示例validationScript.cshtml (ASP.NET核心代码)

我们只需像这样更改脚本部分:

代码语言:javascript
复制
<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>

如果我将站点切换到以下内容之一:

  1. CultureInfo("zh-CHS")
  2. CultureInfo("zh-CHT")
  3. CultureInfo("de-DE")
  4. CultureInfo("ja-JP")
  5. CultureInfo("en-US")

globalize.js无法工作,因为上面的任何语言ID都没有cldr文件夹。

我在这里查找了CLDR 33发行版的完整/主/ (JSON数据),但是找不到上面的任何it。

所以我的问题是:“如果这是一个正确的问题,是否存在从MS-LCID到cldr- is的定义映射?

我的第二个问题是:目前的标准/最佳实践是什么?

  1. MS-LCID
  2. cldr ID
  3. 或者其中一个这里 (IETF语言标记)
  4. 这些 (ISO 639)
  5. 或者..。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 09:22:42

最终找到了解决方案这里

在_ValidationScriptsPartial.cshtml末尾添加以下代码。

代码语言:javascript
复制
@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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51711087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档