gpt4 book ai didi

codeigniter - 表单验证在运行时更改时忽略语言

转载 作者:行者123 更新时间:2023-12-04 19:58:29 25 4
gpt4 key购买 nike

我正在使用 CodeIgniter 构建多语言 Web 应用程序。我在 /system/languages/ 下有英语和其他语言文件夹,我创建了一个模型,负责在运行时更改工作语言。

默认情况下,CodeIgniter 使用法语工作,定义在 /application/config/config.php$config['language'] = 'french';
后来,根据一个 URI 段,模型相应地改变了语言,简化的例子如下:

class multilang extends CI_Model {
public function __construct() {
parent::__construct();
if ($this->uri->segment(1) == 'en') {
$this->config->set_item('language', 'english');
}
}
}

此模型是 /application/config/autoload.php 中自动加载设置下列出的第一个模型。我可以通过调用来确认语言确实是动态改变的:
echo $this->config->item('language');
然而,内置的表单验证库不考虑更改的语言,而是仅显示来自设置文件中硬编码的语言的错误消息 /application/config/config.php在这种情况下是法语。

起初我认为这是因为表单验证是在 multilang 之前加载的。模型。为了确保首先加载模型,我修改了表单验证构造函数以在其他任何事情之前加载模型,如下所示:
public function __construct($rules = array())
{
$this->CI =& get_instance();
$this->CI->load->model('multilang');
// normal code after....
}

这确保在表单验证之前加载模型。不幸的是,这还不够,当在运行时更改时,表单验证仍然会忽略语言。有谁知道为什么会这样?

谢谢你。

最佳答案

问题是我在做 AJAX 请求时没有考虑包含语言缩写的 URI 段,因为 AJAX 请求的 URI 首先不需要语言段,所以我完全忘记了它。

因此我使用 session cookie 来存储语言。将 multilang 构造函数更改为:

class multilang extends CI_Model {
public function __construct() {
parent::__construct();

# store lang between session
$data = $this->session->all_userdata();

if (isset($data['language'])) {
$lang = $data['language'];
# if lang was changed between sessions
if ($this->uri->segment(1) == 'fr'){
$lang = 'french';
} else if ($this->uri->segment(1) == 'en'){
$lang = 'english';
}

# if lang was changed using one of the lang abbreviations
# overule session setting
if ($this->uri->segment(1) == 'en') {
$lang = 'english';
} else if ($this->uri->segment(1) == 'fr') {
$lang = 'french';
}

$this->config->set_item('language', $lang);
$this->session->set_userdata('language', $lang);
} else {
if ($this->uri->segment(1) == 'en') {
$this->config->set_item('language', 'english');
$this->session->set_userdata('language', 'english');
} else if ($this->uri->segment(1) == 'fr') {
$this->config->set_item('language', 'french');
$this->session->set_userdata('language', 'french');
}
}
}
}

注意:不需要更改 form_validation 构造函数。

答案供日后引用,并提醒人们我们错过的小事。太明显了吧!那么这可能会帮助下一个忘记的人。

结题。

关于codeigniter - 表单验证在运行时更改时忽略语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31005736/

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