Xem thêm

Đa ngôn ngữ trong Laravel (I18n)

Huy Erick
Chào bạn! Hôm nay chúng ta sẽ cùng tìm hiểu về cách cài đặt đa ngôn ngữ cho một trang web sử dụng Laravel framework. Website đa ngôn ngữ là gì? Website đa ngôn ngữ...

Chào bạn! Hôm nay chúng ta sẽ cùng tìm hiểu về cách cài đặt đa ngôn ngữ cho một trang web sử dụng Laravel framework.

Website đa ngôn ngữ là gì?

Website đa ngôn ngữ là những trang web cho phép người dùng chuyển đổi giữa các ngôn ngữ khác nhau, chẳng hạn từ tiếng Việt sang tiếng Anh hoặc ngược lại. Để cài đặt tính năng này, chúng ta có thể làm như sau.

Cài đặt và sử dụng

Trong Laravel, chúng ta có 2 cách để thực hiện đa ngôn ngữ, đó là sử dụng file PHP hoặc file JSON.

1. Sử dụng file PHP

Ví dụ, chúng ta muốn cài đặt ngôn ngữ tiếng Việt và tiếng Anh cho trang web của mình. Đầu tiên, chúng ta tạo 2 thư mục "en" và "vi" trong thư mục "resources/lang". Trong mỗi thư mục, chúng ta tạo file "messages.php" để viết các label hiển thị trên trang web.

Ví dụ: resources/lang/en/messages.phpresources/lang/vi/messages.php

Sau khi đã thiết lập xong, để hiển thị label, chúng ta sử dụng hàm trans() như sau:

trans('messages.login')

Ví dụ trên làm cho nút "Login" có label là "Đăng nhập" khi chọn ngôn ngữ tiếng Việt, hoặc là "Login" khi chọn ngôn ngữ tiếng Anh.

Nếu muốn in ra cùng một label với một tham số, chẳng hạn như tên người dùng, chúng ta chỉ việc thêm tham số vào file messages.php. Ví dụ:

trans('messages.welcome', ['name' => 'Ha Ha'])

Kết quả sẽ là "Xin chào: Ha Ha".

2. Sử dụng file JSON

Đối với cách này, chúng ta không cần tạo các thư mục "en" và "vi" như trên. Thay vào đó, chúng ta chỉ cần sử dụng file JSON như sau:

Ví dụ: resources/lang/en.json

{
  "Welcome to Website": "Welcome to Website!",
  "Welcome to Website, :name": "Welcome to Website, :name"
}

Với cách này, chúng ta sử dụng hàm __('keyword') hoặc @lang('keyword') để lấy chuỗi đó ra. Ví dụ:

{{ __('Welcome to Website') }}
{{ __('Welcome to Website, :name', ['name' => 'Ha Ha']) }}

Như vậy, chúng ta đã thiết lập và sử dụng đa ngôn ngữ trong Laravel. Bây giờ, hãy tiến hành thiết lập để có thể chuyển đổi linh hoạt giữa các ngôn ngữ trên website.

Đổi ngôn ngữ cho website

Đầu tiên, chúng ta cần quan tâm đến 2 tham số sau trong file config/app.php:

'locale' => 'en', // ngôn ngữ mặc định
'fallback_locale' => 'en', // được sử dụng khi không tìm thấy config locale

Tiếp theo, chúng ta tạo một controller có tên là LangController. Trong controller này, chúng ta lắng nghe yêu cầu thay đổi ngôn ngữ và tạo một session để lưu giá trị ngôn ngữ.

langActive)) {
            $request->session()->put(['lang' => $lang]);
            return redirect()->back();
        }
    }
}

Tiếp theo, chúng ta tạo một Middleware có tên là LangMiddleware. Middleware này giúp chúng ta gán giá trị ngôn ngữ đã lưu trong session cho biến locale mỗi khi có yêu cầu.

setLocale($request->session()->get('lang', config('app.locale')));
        return $next($request);
    }
}

Cuối cùng, chúng ta chỉ cần thiết lập route và thêm đoạn mã sau vào file view để tạo các link chuyển đổi ngôn ngữ:

VI
EN

Với những bước trên, chúng ta đã hoàn tất việc cài đặt đa ngôn ngữ trong Laravel. Chúc bạn thành công!

Tài liệu tham khảo

Đa ngôn ngữ trong Laravel (I18n)

Ảnh minh họa: Đa ngôn ngữ trong Laravel (I18n)

1