gpt4 book ai didi

php - CodeIgniter 2.1 国际化 i18n - 如果用户数据存在则覆盖默认语言

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:42 25 4
gpt4 key购买 nike

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

提前致谢!


在这里回答:


发现您可以使用 native 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];
}

最佳答案

如果是我,我会使用 cookie 而不是将其存储在数据库中。它会更快、更容易管理。

大多数用户不会删除 cookie,至少不会经常删除。它会解决您的问题:“我无法加载数据库以查找用户是否有首选语言”。

如果您需要数据库存储,您可以尝试使用 Hook: http://codeigniter.com/user_guide/general/hooks.html

在“post_controller_constructor” Hook 中,加载用于语言存储的数据库模型,获取用户设置的语言并加载所需的语言文件。

关于php - CodeIgniter 2.1 国际化 i18n - 如果用户数据存在则覆盖默认语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com