Header Ads Widget

Đa ngôn ngữ trong CodeIgniter

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
<?php
$lang["msg_first_name"] = "Họ tên";
Tạo Controller TestLanguage để chạy
<?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>
<a href='<?php echo $base_url; ?>langswitch/switchLanguage/vietnamese'>Vietnamese</a>
sửa lại file LanguageLoader.php để thay đổi ngôn ngữ khi session thay đổi

<?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