phpBB3.2.X 游客状态自动检测浏览器语言

在这里讨论PHPBB3.2.X相关的使用、安装等话题
Forum rules
再次重申: 请不要用站内信件问问题, 有问题直接发到相应版面上, 今后任何此类信件恕不回复.
Post Reply
User avatar
IOsetting
论坛管理员
论坛管理员
Posts: 3644
Joined: 2006-10-17 1:48

phpBB3.2.X 游客状态自动检测浏览器语言

Post by IOsetting » 2018-11-27 11:06

这是根据HTTP request header里的Accept-Language信息来处理的.
首先看一下Accept-Language的格式

Code: Select all

Accept-Language: <language>
Accept-Language: <locale>
Accept-Language: *
 
// Multiple types, weighted with the quality value syntax:
Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
各部分的说明

Code: Select all

<language>
  用含有两到三个字符的字符串表示的语言码。
<locale>
  完整的语言标签。除了语言本身之外,还会包含其他方面的信息,显示在中划线("-")后面。最常见的额外信息是国家或地区变种(如"en-US")或者表示所用的字母系统(如"sr-Lat")。其他变种诸如拼字法("de-DE-1996")等通常不被应用在这种场合。
*
  任意语言;"*"表示通配符。
;q= (q-factor weighting)
  值代表优先顺序,用相对质量价值 表示,又称为权重。
因为phpBB3的语言命名方式不同, 需要一些hard code. 因为我们安装的语言包是固定的, 所以只需要处理对应的 zh_cmn_hans, zh_cmn_hant, en 就可以. 对应的修改在 phpbb/user.php 文件
找到

Code: Select all

if ($lang_override)
{
    $use_lang = basename($lang_override);
    $user_lang_name = (file_exists($this->lang_path . $use_lang . "/common.$phpEx")) ? $use_lang : basename($config['default_lang']);
    $this->data['user_lang'] = $user_lang_name;
}
else
{
    $user_lang_name = basename($config['default_lang']);
}
替换为

Code: Select all

if ($lang_override)
{
    $use_lang = basename($lang_override);
    $user_lang_name = (file_exists($this->lang_path . $use_lang . "/common.$phpEx")) ? $use_lang : basename($config['default_lang']);
    $this->data['user_lang'] = $user_lang_name;
}
else
{
    $user_lang_name = basename($config['default_lang']);
 
    if ($request->header('Accept-Language'))
    {
        $accept_lang_header_ary = explode(',', $request->header('Accept-Language'));
 
        foreach ($accept_lang_header_ary as $accept_lang_header)
        {
            $accept_lang_ary = explode(';', $accept_lang_header);
            $accept_lang = $accept_lang_ary[0];
            // Because we know which languages we have, so just hard code it
            if ($accept_lang == 'zh' || $accept_lang == 'zh-CN' || $accept_lang == 'zh-SG') {
                $accept_lang = 'zh_cmn_hans';
            } elseif (strpos($accept_lang, 'zh') === 0) {
                $accept_lang = 'zh_cmn_hant';
            } elseif (strpos($accept_lang, 'en') === 0) {
                $accept_lang = 'en';
            }
            if (file_exists($this->lang_path . $accept_lang . "/common.$phpEx"))
            {
                $user_lang_name = $config['default_lang'] = $accept_lang;
                break;
            }
        }
    }
}

gbeee
新手入门
新手入门
Posts: 26
Joined: 2018-11-27 1:34

phpBB3.2.X 游客状态自动检测浏览器语言

Post by gbeee » 2018-12-01 1:33

这个自动检测浏览器语言是干什么用的?

Post Reply