Javascript 中 ISO 639-1 代码的语言名称

问题描述 投票:0回答:7

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

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

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

javascript internationalization
7个回答
27
投票

新的(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"

15
投票

stackoverflow上有一些类似的问题。我需要一个 javascript 函数来获取不同语言的英文名称和本机名称。我在 stackoverflow(基于 wikipedia)上找到了一个很好的 json 格式的 ISO 693-1 语言代码列表,并创建了一个包含两个函数 getLanguageName 和 getLanguageNativeNamegist。使用方法如下:

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

我用它来回答另一个类似的问题:生成本地化语言名称列表,其中包含谷歌翻译的链接


4
投票

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

要在 JavaScript 中使用它,您可以使用 cldr NPM 包,例如:

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

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


3
投票

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


2
投票

另一个解决方案是使用 iso-639-1 包

安装:

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>

1
投票

Michal Bryxí 的答案相反,使用 Intl.DisplayNames 从语言名称中获取 ISO 639-1 代码(例如

English
en
):

function generateLangMap () {
  const langNames = new Intl.DisplayNames(['en'], {type: 'language'})
  const langMap = {}
  for (let i = 0; i < 26; i++) {
    for (let j = 0; j < 26; j++) {
      let code = String.fromCharCode(97 + i) + String.fromCharCode(97 + j)
      let name = langNames.of(code)
      if (name !== code) {
        langMap[name] = code
      }
    }
  }
  const langMap2 = {
    // Avoid using deprecated codes:
    'Akan': 'ak',
    'Hebrew': 'he',
    'Indonesian': 'id',
    'Javanese': 'jv',
    'Romanian': 'ro',
    'Yiddish': 'yi',
    // Optional extras:
    'Tagalog': 'tl',
  }
  return { ...langMap, ...langMap2 }
}

// Usage:
const langMap = generateLangMap()
console.log(langMap['English']) // 'en'
console.log(langMap['Chinese']) // 'zh'
console.log(langMap['Spanish']) // 'es'


-2
投票

最好的方法:

 <script>
    var language = window.navigator.userLanguage || window.navigator.language; 
    alert(language);
    </script>
© www.soinside.com 2019 - 2024. All rights reserved.