Hỗ trợ đa ngôn ngữ mà tính năng quan trọng của mọi ứng dụng web hiện đại. Hầu hết các full-stack framework PHP đi kèm với hỗ trợ đa ngôn ngữ cho phép chúng ta tự động trình bày giao diện ứng dụng theo các ngôn ngữ khác nhau mà không trùng lặp mã nguồn hiện có cho từng ngôn ngữ. Dưới đây là cách thức tuỳ biến ngôn ngữ trong CodeIgniter
Hỗ trợ cấu hình đa ngôn ngữ
Trước tiên chúng ta cần phải cấu hình các tập tin cần thiết trước khi chúng ta có thể bắt đầu sử dụng ngôn ngữ hỗ trợ, trong thư mục application/config có một tùy chọn ngôn ngữ mặc định của hệ thống.
$config['language'] = 'english';
Chúng ta cũng cần phải tạo ra các tập tin chứa ngôn ngữ khác nhau. Những tập tin cần phải được đặt trong thư mục application/language với một thư mục riêng biệt cho từng ngôn ngữ.
Ví dụ, các tập tin ngôn ngữ tiếng Anh phải được để trong application/language/english và các tập tin ngôn ngữ tiếng Việt được đặt trong application/language/vietnamese
VD: tạo tập tin message_lang.php trong thư mục english
<?php
$lang["msg_first_name"] = "First Name";
Tạo tập tin message_lang.php trong thư mục vietnamese
<?phpTạo Controller TestLanguage để chạy
$lang["msg_first_name"] = "Họ tên";
<?php
class TestLanguage extends CI_Controller
{
public function __construct() {
parent::__construct();
$this->lang->load("message","english");
}
function index() {
$data["language_msg"] = $this->lang->line("msg_first_name");
$this->load->view('language_view', $data);
}
}
lang->line() phương thức gọi tham số ngôn ngữ
Ngoài ra còn có thể load ngôn ngữ trực tiếp trong view bằng:
lang("msg_first_name");
Sử dụng Hooks Language Loading Responsibilities
CodeIgniter gọi một vài built-in Hooks như một phần của quá trình thực hiện, sử dụng post_controller_constructor khởi động
Mở cấu hình Hook trong file config.php tại thư mục application/config
$config['enable_hooks'] = TRUE;
Tại thư mục application/config mở file hooks.php và thêm vào đoạn code bên dưới
<?php
$hook['post_controller_constructor'] = array( 'class' => 'LanguageLoader', 'function' => 'initialize', 'filename' => 'LanguageLoader.php', 'filepath' => 'hooks');
Tiếp theo tạo file LanguageLoader.php trong thư mục application/hooks với nội dung:
<?php
class LanguageLoader
{
function initialize() {
$ci =& get_instance();
$ci->load->helper('language');
$ci->lang->load('message','english');
}
}
Cấu hình đa ngôn ngữ
Tạo controller Languageswitch.php trong thư mục application/controllers với nội dung
<?php
class LangSwitch extends CI_Controller
{
public function __construct() {
parent::__construct();
$this->load->helper('url');
}
function switchLanguage($language = "") {
$language = ($language != "") ? $language : "english";
$this->session->set_userdata('lang', $language);
redirect(base_url());
}
}
Tạo đường dẫn đến controller để thay đổi ngôn ngữ
<a href='<?php echo $base_url; ?>langswitch/switchLanguage/english'>English</a>sửa lại file LanguageLoader.php để thay đổi ngôn ngữ khi session thay đổi
<a href='<?php echo $base_url; ?>langswitch/switchLanguage/vietnamese'>Vietnamese</a>
<?php
class LanguageLoader
{
function initialize() {
$ci =& get_instance();
$ci->load->helper('language');
$site_lang = $ci->session->userdata('lang');
if ($site_lang) {
$ci->lang->load('message',$ci->session->userdata('lang'));
} else {
$ci->lang->load('message','english');
}
}
}
Vậy là xong :)
Nhận xét
Đăng nhận xét