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; } } } }
可以自行调节逻辑