【发布时间】:2012-06-15 08:42:41
【问题描述】:
我正在建立一个网站,人们可以在其中将语言信息与内容相关联。
网站大量使用 Javascript,与各种元素相关的语言信息在内部被视为 ISO 639-1 代码。
如何以用户的语言显示语言名称列表?
【问题讨论】:
标签: javascript internationalization
我正在建立一个网站,人们可以在其中将语言信息与内容相关联。
网站大量使用 Javascript,与各种元素相关的语言信息在内部被视为 ISO 639-1 代码。
如何以用户的语言显示语言名称列表?
【问题讨论】:
标签: javascript internationalization
在新的(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"
【讨论】:
如果您想要任意语言中任意语言的名称(例如,如何用日语说“韩语”),您可以使用Unicode CLDRdata。
要在 JavaScript 中使用它,你可以使用 cldr NPM package 像:
cldr.extractLanguageDisplayNames('it').en;
# => 'inglese'
但不确定该包是仅支持 Node.js 还是还支持浏览器。如果没有,您可以搜索其他库或编写自己的代码来直接解析 CLDR。
【讨论】:
另一种解决方案是使用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>
【讨论】:
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
【讨论】:
最佳方式:
<script>
var language = window.navigator.userLanguage || window.navigator.language;
alert(language);
</script>
【讨论】:
我认为您必须为您希望支持的每种语言维护自己的本地语言名称映射列表。但看起来维基百科有just what you need。
【讨论】: