我有一个国家代码列表和一个语言代码列表,如何将国家代码映射到语言代码?

11
当用户访问网站时,我可以获取他们所在的国家代码。我想使用这个代码来设置默认语言(如果需要,他们以后可以修改语言),仅基于他们所在国家来猜测可能会说的语言。
是否有一个确切的从国家代码到语言代码的映射存在于某处?我找不到。我知道并非每个国家的人都说同一种语言,但我只需要一个大致的映射,用户可以稍后手动选择他们的语言。

我在维基百科上找到了一些相关的内容:http://en.wikipedia.org/wiki/List_of_official_languages_by_state。显然,这需要与国家名称和代码列表进行交叉索引:http://www.nationsonline.org/oneworld/country_code_list.htm ...以及语言代码:http://www.ethnologue.com/codes/LanguageCodes.tab 哎呀...我认为最后一个链接基本上满足了您的要求。看一下吧! - Carl Smotricz
http://en.wikipedia.org/wiki/List_of_official_languages 或 http://www.infoplease.com/ipa/A0855611.html - Richard H
2
我建议您使用“Accept-Language” HTTP请求头来确定用户喜欢的语言。为什么要猜测用户明确请求的内容呢? - andcoz
我一直在寻找完全相同的东西。奇怪的是这么难找到。最终我找到了这个:<br> http://download.geonames.org/export/dump/countryInfo.txt<br> 里面包含了所有信息。非常感谢这位发布者:<br> http://gis.stackexchange.com/questions/1514/list-of-language-codes-by-country - Cosmicnet
2个回答

9
一个搜索"country language mapping"会出现这个Languages by Countries表格,你可以通过一些努力将其转换为语言代码。(不到200个国家。)
但是需要警告的是:这样做几乎肯定会惹恼许多多语言国家的用户,比如瑞士或加拿大。对于这样的国家,通常应该在UI的主页面上让用户选择他们的语言。请参见Google SwitzerlandBest Buy Canada等一些示例。这也会惹恼外籍人士和旅行者。
更好的方法是,为什么不使用Accept-Language HTTP头来确定要使用哪种语言?Accept-Language头是查看用户语言时正确的方法。它甚至会按优先顺序给您一个列表,因此如果用户最擅长的语言是您不支持的某种语言,但在其他您支持的某种语言中相对流利,则可以正确地回退。 Accept-Language的唯一问题是大多数用户将其保留在默认设置。但是,大多数浏览器应默认为平台语言设置,因此情况并不太糟糕。(一些较旧的浏览器会默认为英语,这是一种灾难,因为"en"实际上意味着Accept-Language未设置。)

1
“Accept-Language HTTP header” 是正确的方式,而不是其他方式。如果您能编辑您的答案并解释一下,那就太好了。根据国家选择语言是非常错误的方式。 - sorin
1
@Sorin 我以为已经说过了,但好吧,我编辑了一下,详细说明了为什么 Accept-Language 是上帝,而国家映射不是。 - Laurence Gonsalves
1
我只是在请求一些加粗来使得主要信息更容易阅读,方便那些懒得读完整篇文章的人 ;) - sorin

4
虽然将国家(或国家内的特定位置/区域)映射到语言可能有好的理由,但对于您的目的而言,使用HTTP请求头Accept-Language可能是一个简单且安全的选择,即使只作为您的语言选择启发式算法中的一个元素(连同国家代码)。这种方法偶尔会出错,因为给定的Web浏览器安装与默认语言(当底层用户没有花时间选择首选自然语言的安装程序/设置时)相关联。另一方面,它也为许多外籍人士提供了更好的语言提示(他们根据首选语言安装/设置了浏览器),即使地理位置/语言关联完全错误。总的来说,在许多国家(如瑞士、卢森堡...)以及许多大都市地区(例如纽约、日内瓦或迈阿密)等地,这种方法应该优于仅基于地理位置(和查找表)的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接