Skip to content

Đa ngôn ngữ (Localization)

Giới thiệu (Introduction)

Laravel hỗ trợ đa ngôn ngữ (localization) giúp dịch strings trong ứng dụng sang nhiều ngôn ngữ. Translation strings được lưu trong thư mục lang.

Publishing Language Files

bash
php artisan lang:publish

Cấu hình Locale

Cấu hình trong config/app.php:

php
'locale' => env('APP_LOCALE', 'en'),
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),

Thay đổi Locale tại Runtime

php
use Illuminate\Support\Facades\App;

App::setLocale('vi');

$locale = App::currentLocale();

if (App::isLocale('vi')) {
    // ...
}

Định nghĩa Translation Strings

Sử dụng Short Keys

Lưu translations trong files PHP trong lang/:

/lang
    /en
        messages.php
    /vi
        messages.php
php
// lang/vi/messages.php
return [
    'welcome' => 'Chào mừng bạn đến với ứng dụng!',
];

Sử dụng Translation Strings làm Keys

Lưu trong JSON files:

/lang
    en.json
    vi.json
json
// lang/vi.json
{
    "I love programming.": "Tôi yêu lập trình.",
    "Welcome to :app": "Chào mừng đến với :app"
}

Truy xuất Translation Strings

Dùng hàm __() hoặc directive @lang:

php
echo __('messages.welcome');
echo __('I love programming.');

Trong Blade:

blade
{{ __('messages.welcome') }}

@lang('messages.welcome')

Nếu key không tồn tại, trả về key gốc.

Thay thế Parameters

php
// 'welcome' => 'Welcome, :name'
echo __('messages.welcome', ['name' => 'Taylor']);
// "Welcome, Taylor"

// UPPER_CASE: 'welcome' => 'Welcome, :NAME'
// Title Case: 'welcome' => 'Welcome, :Name'

Pluralization (Số nhiều)

Dùng ký tự | để phân tách:

php
// 'apples' => 'There is one apple|There are many apples'
echo trans_choice('messages.apples', 1);
// "There is one apple"

echo trans_choice('messages.apples', 10);
// "There are many apples"

Quy tắc phức tạp hơn:

php
'minutes_ago' => '{1} :value phút trước|[2,*] :value phút trước',
php
echo trans_choice('messages.minutes_ago', 5, ['value' => 5]);
// "5 phút trước"

Override Package Language Files

Override bằng cách đặt file tại lang/vendor/{package}/{locale}:

/lang
    /vendor
        /courier
            /vi
                messages.php

Chỉ cần override lines bạn muốn thay đổi — phần còn lại load từ package gốc.