当用户访问网站时,我可以获取他们所在的国家代码。我想使用这个代码来设置默认语言(如果需要,他们以后可以修改语言),仅基于他们所在国家来猜测可能会说的语言。是否有一个确切的从国家代码到语言代码的映射存在于某处?我找不到。我知道并非每个国家的人都说同一种语言,但我只需要一个大致的映射,用户可以稍后手动选择他们的语言。
一个搜索"country language mapping"会出现这个Languages by Countries表格,你可以通过一些努力将其转换为语言代码。(不到200个国家。)但是需要警告的是:这样做几乎肯定会惹恼许多多语言国家的用户,比如瑞士或加拿大。对于这样的国家,通常应该在UI的主页面上让用户选择他们的语言。请参见Google Switzerland或Best Buy Canada等一些示例。这也会惹恼外籍人士和旅行者。更好的方法是,为什么不使用Accept-Language HTTP头来确定要使用哪种语言?Accept-Language头是查看用户语言时正确的方法。它甚至会按优先顺序给您一个列表,因此如果用户最擅长的语言是您不支持的某种语言,但在其他您支持的某种语言中相对流利,则可以正确地回退。 Accept-Language的唯一问题是大多数用户将其保留在默认设置。但是,大多数浏览器应默认为平台语言设置,因此情况并不太糟糕。(一些较旧的浏览器会默认为英语,这是一种灾难,因为"en"实际上意味着Accept-Language未设置。)
虽然将国家(或国家内的特定位置/区域)映射到语言可能有好的理由,但对于您的目的而言,使用HTTP请求头Accept-Language可能是一个简单且安全的选择,即使只作为您的语言选择启发式算法中的一个元素(连同国家代码)。这种方法偶尔会出错,因为给定的Web浏览器安装与默认语言(当底层用户没有花时间选择首选自然语言的安装程序/设置时)相关联。另一方面,它也为许多外籍人士提供了更好的语言提示(他们根据首选语言安装/设置了浏览器),即使地理位置/语言关联完全错误。总的来说,在许多国家(如瑞士、卢森堡...)以及许多大都市地区(例如纽约、日内瓦或迈阿密)等地,这种方法应该优于仅基于地理位置(和查找表)的方法。