• phpBB3.2 自动检测浏览器语言


    这是根据HTTP request header里的Accept-Language信息来处理的. 

    首先看一下Accept-Language的格式

    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
    

    各部分的说明

    <language>
      用含有两到三个字符的字符串表示的语言码。
    <locale>
      完整的语言标签。除了语言本身之外,还会包含其他方面的信息,显示在中划线("-")后面。最常见的额外信息是国家或地区变种(如"en-US")或者表示所用的字母系统(如"sr-Lat")。其他变种诸如拼字法("de-DE-1996")等通常不被应用在这种场合。
    *
      任意语言;"*"表示通配符。
    ;q= (q-factor weighting)
      值代表优先顺序,用相对质量价值 表示,又称为权重。
    

    因为phpBB3的语言命名方式不同, 需要一些hard code. 因为我们安装的语言包是固定的, 所以只需要处理对应的 zh_cmn_hans, zh_cmn_hant, en 就可以.

    对应在phpBB3.2的修改在 phpbb/user.php 文件

    找到

    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 ($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;
                }
            }
        }
    }
    

    可以自行调节逻辑

  • 相关阅读:
    IDEA手动创建JFinal项目(404问题处理)
    php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十
    模仿console自写函数打印js的对象
    每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒? php
    js-Event构造函数,也许你需要
    js将金额专成每隔3位数加逗号
    js-PC版监听键盘大小写事件
    用php脚本给html中引用的js和css路径打上版本
    通过js的console优雅的将php调试信息输出
    android中加载的html获取的宽高不正确
  • 原文地址:https://www.cnblogs.com/milton/p/10025066.html
Copyright © 2020-2023  润新知