首页 > php > base > > 正文

网站国际化之如何判断用户语言

发布人:zhoulujun@live.cn    点击:

网站国际化中不可避免的要涉及多语言的问题,那么PHP代码中怎么样来判断用户的语言才更合理呢?方案1:根据用户的IP地址,猜测国家

网站国际化中不可避免的要涉及多语言的问题,那么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 即可。