• home > php > base >

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

    Author:zhoulujun@live.cn Date:

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

     

     

     


    转载本站文章《网站国际化之如何判断用户语言》,
    请注明出处:https://www.zhoulujun.cn/html/php/phpBase/2015_0729_202.html