phpBB3.2 自動檢測瀏覽器語言
阿新 • • 發佈:2018-11-27
這是根據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; } } } }
可以自行調節邏輯