Tôi đang sử dụng CodeIgniter để tạo ứng dụng web đa ngôn ngữ. Tôi có tiếng Anh và các ngôn ngữ khác theo thư mục /system/languages/
và tôi đã tạo một mô hình chịu trách nhiệm thay đổi ngôn ngữ làm việc trong thời gian chạy.Xác thực biểu mẫu bỏ qua ngôn ngữ khi được thay đổi trong thời gian chạy
Theo mặc định CodeIgniter đang làm việc tại Pháp theo quy định tại /application/config/config.php
$config['language'] = 'french';
Sau đó, theo một phân khúc URI mô hình thay đổi ngôn ngữ cho phù hợp, ví dụ đơn giản dưới đây:
class multilang extends CI_Model {
public function __construct() {
parent::__construct();
if ($this->uri->segment(1) == 'en') {
$this->config->set_item('language', 'english');
}
}
}
này là mô hình đầu tiên được liệt kê trong cài đặt tải tự động trong /application/config/autoload.php
và tôi có thể xác nhận rằng ngôn ngữ thực sự được thay đổi động bằng cách gọi:
echo $this->config->item('language');
Tuy nhiên việc xây dựng trong thư viện hình thức xác nhận không đưa vào tài khoản các ngôn ngữ đã thay đổi, thay vì chỉ cho thấy các thông báo lỗi từ ngôn ngữ cứng mã hoá trong các thiết lập nộp /application/config/config.php
trong trường hợp này người Pháp.
Lúc đầu, tôi giả định điều này là do xác thực biểu mẫu đã được tải trước mẫu multilang
. Để đảm bảo mô hình được tải trước, tôi đã sửa đổi hàm tạo hợp lệ biểu mẫu để tải mô hình trước bất cứ điều gì khác như thế này:
public function __construct($rules = array())
{
$this->CI =& get_instance();
$this->CI->load->model('multilang');
// normal code after....
}
Điều này đảm bảo mô hình được tải trước khi xác thực biểu mẫu. Thật không may điều này là không đủ và xác nhận mẫu vẫn bỏ qua ngôn ngữ khi thay đổi trong thời gian chạy. Có ai biết tại sao điều này xảy ra không?
Cảm ơn bạn.