【发布时间】:2012-02-14 19:26:01
【问题描述】:
我正在运行 CI 版本 2.1,并且我最近安装了 CodeIgniter 2.1 国际化 i18n(原作者:Jérôme Jaglale)。代码说明在这里:http://codeigniter.com/wiki/URI_Language_Identifier/
它运行良好,但如果用户在之前访问网站时设置了他的语言偏好,我想覆盖默认语言(这将存储在数据库中的一个表中)。
我的问题是,你是怎么做到的?
我相信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 cookie 来读取 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 的代码。
标签: php codeigniter