我正在运行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