【问题标题】:Language name from ISO 639-1 code in JavascriptJavascript 中 ISO 639-1 代码中的语言名称
【发布时间】:2012-06-15 08:42:41
【问题描述】:

我正在建立一个网站,人们可以在其中将语言信息与内容相关联。

网站大量使用 Javascript,与各种元素相关的语言信息在内部被视为 ISO 639-1 代码。

如何以用户的语言显示语言名称列表?

【问题讨论】:

标签: javascript internationalization


【解决方案1】:

在新的(ish)Intl API 中有对此的本机支持:

let languageNames = new Intl.DisplayNames(['en'], {type: 'language'});
languageNames.of('fr');      // "French"
languageNames.of('de');      // "German"
languageNames.of('fr-CA');   // "Canadian French"

【讨论】:

    【解决方案2】:

    如果您想要任意语言中任意语言的名称(例如,如何用日语说“韩语”),您可以使用Unicode CLDRdata。

    要在 JavaScript 中使用它,你可以使用 cldr NPM package 像:

    cldr.extractLanguageDisplayNames('it').en;
    # => 'inglese'
    

    但不确定该包是仅支持 Node.js 还是还支持浏览器。如果没有,您可以搜索其他库或编写自己的代码来直接解析 CLDR。

    【讨论】:

      【解决方案3】:

      另一种解决方案是使用iso-639-1 package

      安装:

      npm install iso-639-1
      

      在 Node.js 中的使用:

      const ISO6391 = require('iso-639-1')
      console.log(ISO6391.getAllCodes())  // ['aa', 'ab', ...]
      console.log(ISO6391.getName('cv'))  // 'Chuvash'
      console.log(ISO6391.getNativeName('cv'))  // 'чӑваш чӗлхи'
      

      在浏览器中的使用:

      <script type="text/javascript" src="./node_modules/iso-639-1/build/index.js"></script>
      <script>
        console.log(ISO6391.getAllCodes())  // ['aa', 'ab', ...]
        console.log(ISO6391.getName('cv'))  // 'Chuvash'
        console.log(ISO6391.getNativeName('cv'))  // 'чӑваш чӗлхи'
      </script>
      

      【讨论】:

      • 很好,但不幸的是仍然不允许用德语显示“中文”,那就是“Chinesisch”。这个库只允许获取英语(出于某种原因)和母语的语言名称。
      【解决方案4】:

      stackoverflow 上有一些类似的问题。我需要一个 javascript 函数来获取不同语言的英文名称和本地名称。我找到了一个不错的json formatted list of ISO 693-1 language codes on stackoverflow(基于wikipedia)并创建了一个gist with two functions getLanguageName and getLanguageNativeName。使用方法如下:

      getLanguageNativeName("cv"); // --> "чӑваш чӗлхи"
      getLanguageName("cv"); // --> "Chuvash"
      getLanguageNativeName("cv-RU"); // --> "чӑваш чӗлхи"
      getLanguageName("cv-RU"); // --> "Chuvash"
      

      我用它来回答另一个类似的问题:generate a list of localized language names with links to google translate

      【讨论】:

      • 差不多了。但它只显示两种语言的语言名称。例如,我的网站上有一个下拉菜单,可以将语言与某些内容相关联。如果一个法国人使用我的网站并想选择“德语”,它应该显示“allemand”(德语的法语名称)。中国游客等也一样。
      【解决方案5】:

      最佳方式:

       <script>
          var language = window.navigator.userLanguage || window.navigator.language; 
          alert(language);
          </script>
      

      【讨论】:

        【解决方案6】:

        我认为您必须为您希望支持的每种语言维护自己的本地语言名称映射列表。但看起来维基百科有just what you need

        【讨论】:

        • 我需要的是某种 Web API 或 JS 库。维基百科列表没有提供不同语言的语言名称 :-(
        • 啊,我明白了,对不起,我误读并认为您想要相应语言的名称(维基百科有)。不过,以这种方式呈现它们似乎相当普遍。但是根据您的要求,我想您必须本地化语言列表,就像您本地化任何其他 UI 一样。
        猜你喜欢
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-22
        • 1970-01-01
        • 2015-05-30
        • 2011-07-06
        • 2013-05-03
        • 2011-09-20
        相关资源
        最近更新 更多