网站国际化之如何判断用户语言
Author:[email protected] Date:
网站国际化中不可避免的要涉及多语言的问题,那么PHP代码中怎么样来判断用户的语言才更合理呢?
方案1:根据用户的IP地址,猜测国家,然后给国家定义一个默认语言列表,这样对于单语言国家,定位会非常准确,缺点就是最后结果取决于IP地址猜测国家的准确度。另外对于多语言国家,给出的语言会不准。
方案2:根据用户的浏览器语言设置,判断用户的语言,这个需要借助于http协议中的Accept-Language字段来完成。
方案3:方案1,方案2的结合
下面给出方案2的PHP解决方案
function get_browser_language() { // 默认的返回值 $language_code_info = 'en'; $extra_browser_language_config = array( 'ar' => 'ar([-_][[:alpha:]]{2})?|arabic', 'bg' => 'bg|bulgarian', 'br' => 'pt[-_]br|brazilian portuguese', 'ca' => 'ca|catalan', 'cs' => 'cs|czech', 'da' => 'da|danish', 'de' => 'de([-_][[:alpha:]]{2})?|german', 'el' => 'el|greek', 'en' => 'en([-_][[:alpha:]]{2})?|english', 'es' => 'es([-_][[:alpha:]]{2})?|spanish', 'et' => 'et|estonian', 'fi' => 'fi|finnish', 'fr' => 'fr([-_][[:alpha:]]{2})?|french', 'gl' => 'gl|galician', 'he' => 'he|hebrew', 'hu' => 'hu|hungarian', 'id' => 'id|indonesian', 'it' => 'it|italian', 'ja' => 'ja|japanese', 'ko' => 'ko|korean', 'ka' => 'ka|georgian', 'lt' => 'lt|lithuanian', 'lv' => 'lv|latvian', 'nl' => 'nl([-_][[:alpha:]]{2})?|dutch', 'no' => 'no|norwegian', 'pl' => 'pl|polish', 'pt' => 'pt([-_][[:alpha:]]{2})?|portuguese', 'ro' => 'ro|romanian', 'ru' => 'ru|russian', 'sk' => 'sk|slovak', 'sr' => 'sr|serbian', 'sv' => 'sv|swedish', 'ko' => 'ko|korean', 'fi' => 'fi|finnish', 'he' => 'he|hebrew', 'th' => 'th|thai', 'tr' => 'tr|turkish', 'uk' => 'uk|ukrainian', 'tw' => 'zh[-_]tw|chinese traditional', 'zh' => 'zh|chinese simplified' ); //处理头信息 $browser_languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); for ($i=0, $n=sizeof($browser_languages); $i<$n; $i++) { foreach($extra_browser_language_config as $key=>$value) { if (eregi('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $browser_languages[$i]) && (isset($extra_language_code_config[$key]))) { $language_code_info = $key; break 2; } }//end foreach }//end for return $language_code_info; }
使用上面的方法之后,即可根据浏览器的头信息返回对应的语言缩写,上面列出了常用的一些语言,如果还需要其他的语言,自己扩充$extra_language_code_config 即可。
转载本站文章《网站国际化之如何判断用户语言》,
请注明出处:https://www.zhoulujun.cn/html/php/phpBase/2015_0729_202.html