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

Language name from ISO 639-1 code in Javascript

本文关键字:语言 代码 639-1 Javascript ISO 来自      更新时间:2023-09-26

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

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

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

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

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

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

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

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

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

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

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

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

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

另一种解决方案是使用 iso-639-1 封装。

安装:

npm install iso-639-1

在节点.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>

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

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'

最佳方法:

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