我正在使用navigator.languages
来检测浏览器的语言&国家代码,格式为en-US
。
如果我将浏览器语言设置为英语,则会得到en-US
,但如果我将其设置为日语,则只返回ja
,而不返回国家/地区代码JP
。很明显,全世界都只在日本说日语,所以他们一定忽略了它。韩语也是如此,因为我得到的是ko
而不是ko_KR
。
但我需要这两个信息,因为我正在加载的Facebook SDK脚本需要ll_cc
格式的信息,如下所示:
https://connect.facebook.net/en_US/sdk.js
https://connect.facebook.net/ja_JP/sdk.js
根据Facebook文档,将ja_JP
放入脚本地址是实现显示语言更改的唯一方法。
我想根据用户的浏览器语言设置更改显示语言。(例如,日语、韩语等(
那么,我应该如何从浏览器中获取国家代码JP
呢?
我曾考虑在一对一的情况下创建一个表来匹配语言和国家代码,但我很好奇是否有更好的方法来实现这一点。
感谢您提前提供的帮助。
BCP47中指定的navigator.language
为您提供的是国际标准组织的ISO 639-1语言代码,该代码主要是两个字母的代码。(如英语en
和日语jp
(
有方言、语言版本或变体的语言需要另一个指定的语言代码,这是一个例外。(例如,美国英语版本的en-us
不同于英国英语版本(en-gb
(。
语言代码的组合与语言和国家代码的组合之间存在令人困惑的重叠。
为了满足language-country
的代码格式,您需要参考ISO-639-1和ISO-3166或方便地将两者结合在一起的网站,例如这里。
这是我写的一些应该有效的代码<这是我第一次写答案,所以如果我做错了什么,请告诉我。>
/// Note the l2.io and jQuery script tag
/// From Xposedbones (https://stackoverflow.com/questions/35999265/get-country-code-using-javascript)
var country_code = null;
$.getJSON('http://ipinfo.io/' + userip, function(data){
country_code = data.country;
console.log(country_code)
/// Modified From MDN Web Docs (https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language)
var language_code = navigator.language.split("-")[0] /// There is probably a better way for this
/// Combine country and language
const combined = `${language_code}-${country_code}`
alert(combined)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://l2.io/ip.js?var=userip"></script>