Trong CodeIgniter 3, tính năng đa ngôn ngữ được hỗ trợ thông qua thư viện Language Class. Thư viện này cho phép bạn tạo các tệp ngôn ngữ để chứa các đoạn văn bản, sau đó nạp chúng vào trong các file Controller hoặc View. Việc này rất hữu ích khi bạn muốn xây dựng một ứng dụng web hỗ trợ nhiều ngôn ngữ.

Dưới đây là hướng dẫn chi tiết về cách sử dụng đa ngôn ngữ trong CodeIgniter 3:

1. Cấu hình Đa ngôn ngữ

Đầu tiên, bạn cần cấu hình ngôn ngữ mặc định và thư mục chứa các tệp ngôn ngữ.

Thiết lập ngôn ngữ mặc định:

  • Mở file application/config/config.php.

  • Tìm dòng $config['language'] và thiết lập ngôn ngữ mặc định. Ví dụ:

$config['language'] = 'english'; // Thiết lập ngôn ngữ mặc định là tiếng Anh

Cấu hình thư mục ngôn ngữ:

Các tệp ngôn ngữ nằm trong thư mục application/language/.

Trong thư mục này, mỗi ngôn ngữ sẽ có một thư mục riêng, ví dụ: english, vietnamese, french, v.v.

2. Tạo Tệp Ngôn ngữ

  1. Tạo thư mục ngôn ngữ:
    • Nếu bạn muốn thêm hỗ trợ cho tiếng Việt, tạo thư mục vietnamese trong application/language/.
  2. Tạo tệp ngôn ngữ:
    • Trong thư mục application/language/vietnamese/, tạo một file PHP với tên tệp tương ứng với tên nhóm ngôn ngữ mà bạn muốn quản lý, ví dụ: message_lang.php.
  3. Định nghĩa các chuỗi ngôn ngữ:
    • Mỗi tệp ngôn ngữ chứa một mảng với các cặp khóa-giá trị, trong đó khóa là tên chuỗi và giá trị là văn bản dịch.

Ví dụ:

Tạo file message_lang.php trong application/language/vietnamese/:

<?php
$lang['welcome_message'] = 'Chào mừng đến với trang web của chúng tôi!';
$lang['login_message'] = 'Vui lòng đăng nhập để tiếp tục.';
$lang['logout_message'] = 'Bạn đã đăng xuất thành công.';

Tương tự, bạn tạo file message_lang.php trong application/language/english/:

<?php
$lang['welcome_message'] = 'Welcome to our website!';
$lang['login_message'] = 'Please log in to continue.';
$lang['logout_message'] = 'You have successfully logged out.';

3. Nạp và Sử dụng Tệp Ngôn ngữ trong Controller

Để sử dụng các chuỗi ngôn ngữ trong Controller, bạn cần nạp tệp ngôn ngữ và gọi các chuỗi thông qua thư viện ngôn ngữ.

Ví dụ:

Trong Controller Welcome.php:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function index() {
        // Nạp tệp ngôn ngữ 'message_lang'
        $this->lang->load('message', 'vietnamese');

        // Lấy chuỗi ngôn ngữ từ tệp ngôn ngữ đã nạp
        $data['welcome_message'] = $this->lang->line('welcome_message');

        // Nạp View và truyền dữ liệu
        $this->load->view('welcome_view', $data);
    }
}

4. Sử dụng Tệp Ngôn ngữ trong View

Trong View, bạn có thể sử dụng các chuỗi ngôn ngữ đã nạp bằng cách truy cập vào biến $this->lang->line().

Ví dụ:

Trong View welcome_view.php:

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <title>Trang chào mừng</title>
</head>
<body>
    <h1><?php echo $this->lang->line('welcome_message'); ?></h1>
</body>
</html>

5. Thay Đổi Ngôn ngữ Tùy Theo Người Dùng

Bạn có thể cho phép người dùng chọn ngôn ngữ họ muốn sử dụng và lưu lựa chọn này vào session hoặc cookie.

Ví dụ:

Trong Controller LanguageSwitcher.php:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class LanguageSwitcher extends CI_Controller {

    public function switchLang($language = "") {
        // Kiểm tra ngôn ngữ và thiết lập session
        $language = ($language != "") ? $language : "english";
        $this->session->set_userdata('site_lang', $language);
        
        // Quay lại trang trước đó
        redirect($_SERVER['HTTP_REFERER']);
    }
}

Để thay đổi ngôn ngữ, bạn tạo liên kết tới hàm switchLang:

<a href="<?php echo base_url('languageswitcher/switchLang/english'); ?>">English</a>
<a href="<?php echo base_url('languageswitcher/switchLang/vietnamese'); ?>">Tiếng Việt</a>

6. Sử Dụng Middleware để Tự Động Nạp Ngôn ngữ

Bạn có thể sử dụng một Middleware hoặc hook để tự động nạp ngôn ngữ dựa trên lựa chọn của người dùng.

Ví dụ về Hook để tự động nạp ngôn ngữ:

Cấu hình hook:

Mở file application/config/hooks.php và thêm cấu hình sau:

$hook['post_controller_constructor'][] = array(
    'class'    => '',
    'function' => 'set_language',
    'filename' => 'set_language.php',
    'filepath' => 'hooks'
);

Tạo file hook:

Tạo file set_language.php trong application/hooks/:

<?php
function set_language() {
    $CI =& get_instance();
    $siteLang = $CI->session->userdata('site_lang');

    if ($siteLang) {
        $CI->lang->load('message', $siteLang);
    } else {
        $CI->lang->load('message', 'english');
    }
}

7. Kiểm tra và Debug

  • Kiểm tra file ngôn ngữ: Đảm bảo tất cả các file ngôn ngữ đã được tạo đúng đường dẫn và có định dạng chính xác.
  • Kiểm tra việc nạp ngôn ngữ: Đảm bảo rằng các file ngôn ngữ được nạp đúng cách trong controller và được sử dụng trong view.

Kết luận

Việc sử dụng đa ngôn ngữ trong CodeIgniter 3 rất linh hoạt và mạnh mẽ, giúp bạn xây dựng các ứng dụng web hỗ trợ nhiều ngôn ngữ một cách dễ dàng. Bằng cách nắm vững cách tạo và sử dụng các tệp ngôn ngữ, cũng như các phương pháp chuyển đổi ngôn ngữ, bạn có thể cung cấp trải nghiệm người dùng tốt hơn cho nhiều đối tượng sử dụng khác nhau. Nếu có thêm câu hỏi hoặc cần hỗ trợ, hãy cho mình biết nhé!