我正在運行CI版本2.1,並且最近安裝了CodeIgniter 2.1國際化i18n(原作者:JérômeJaglale)。代碼說明在這裏:http://codeigniter.com/wiki/URI_Language_Identifier/CodeIgniter 2.1國際化i18n - 如果用戶數據存在,則覆蓋默認語言
它運行良好,但我想重寫默認語言,如果用戶在上次訪問網站時設置他的語言偏好(這將存儲在數據庫中的表中)。
我的問題是,你是如何做到這一點的?
我相信MY_Lang.php
(其中默認語言被加載)實際上被加載之前CodeIgniter MY_Controller
所以我無法加載數據庫,以查找用戶是否有首選語言。
默認語言設置在這裏MY_Lang.php
:
function default_lang()
{
$browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : '';
$browser_lang = substr($browser_lang, 0,2);
$default_lang = array_splice(array_keys($this->languages), 0,1);
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
}
但是,我無法超越它,因爲在這裏我必須提前我$this->session->userdata('language')
感謝進不去!
答案這裏:
發現,你可以使用本機PHP cookies讀取裏面MY_Lang.php
文件中的cookie。如果您嘗試使用cookie助手,它將無法工作,因此請確保您使用$ _COOKIE,並在獲取內容之前運行適當的過濾器。
然後,在MY_Lang.php
只是改變這一點:
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
要這樣:
if($_COOKIE['int_lang']) {
$preferred_lang = filter_var($_COOKIE['int_lang'], FILTER_SANITIZE_STRING);
return (array_key_exists($preferred_lang, $this->languages)) ? $preferred_lang : $default_lang[0];
}
else
{
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
}
請記住,在lang()方法中,必須添加用於發送包含所選「lang」值的cookie的代碼。 – Henry8 2014-03-24 19:04:27