网站国际化之如何判断用户语言
Author:zhoulujun@live.cn 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