【问题标题】:Get a country code from 'navigator.languages' in a browser从浏览器中的“navigator.languages”获取国家代码
【发布时间】:2021-06-30 02:53:57
【问题描述】:

我正在使用navigator.languages 来检测浏览器的language & country 代码,格式为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 Documentation,在脚本地址中放入ja_JP是实现显示语言变化的唯一途径。

我想根据用户的浏览器语言设置更改显示语言。 (例如,日语、韩语等)

那么我应该如何从浏览器获取国家代码JP

在一对一的情况下,我正在考虑创建一个表格以将语言与国家/地区代码匹配,但我很好奇是否有更好的方法来解决这个问题。

提前感谢您的帮助。

【问题讨论】:

  • 这个broswer.languages是怎么定义的?我的浏览器中当然没有这样的属性
  • 哦,我没有注意到错字(我只是不假思索地复制粘贴)......但我的浏览器中也没有 browser.languages - 这是某种浏览器网络扩展你在说什么?
  • 我的错。它是navigator.languages。我也更新了标题。谢谢
  • 你不能没有用户许可。您可以尝试使用地理编码从 IP 派生它,但它不是超级可靠的。如果用户允许您使用 html5 地理定位 API developer.mozilla.org/en-US/docs/Web/API/Geolocation_API
  • @Matt 在大多数情况下可能会起作用。但在某些情况下,地理位置不一定与用户的浏览器语言国家代码相同。

标签: javascript browser locale


【解决方案1】:

navigator.language(在 BCP 47 中指定)为您提供的是国际标准化组织的 ISO 639-1 语言代码,它主要是两个字母的代码。 (如en 用于英语和jp 用于日语)

具有方言、版本或变体的语言需要另一种指定的语言代码。 (例如美国版英语的 en-us 与英国版英语 (en-gb) 不同。

您看到的是语言代码组合与语言和国家代码组合之间令人困惑的重叠。

为了满足language-country代码格式,您需要引用ISO-639-1ISO-3166或方便地将两者结合起来的网站,例如here

这是我编写的一些应该可以工作的代码。 手指交叉这是我第一次写答案,如果我做错了什么,请告诉我。

/// 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>

【讨论】:

  • 使用IP地址扣除国家代码可能大部分都可以。但是,它不考虑浏览器的语言设置,这是我感兴趣的关键信息。例如,我的浏览器认为我唯一的语言是en_US,我希望它保持这种状态,即使我不在美国的地理位置。
猜你喜欢
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
相关资源
最近更新 更多