在地化

簡介

Laravel 的在地化功能提供方便的方法來取得多語系的字串,讓你的網站可以簡單的支援多語系。

語系檔存放在 resources/lang 資料夾的檔案裡。在此資料夾內,應該要有網站支援的語系並對應到每一個子目錄。:

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

語系檔簡單地回傳鍵值和字串陣列,例如:

<?php

return [
    'welcome' => 'Welcome to our application'
];

切換語系

網站的預設語系儲存在 config/app.php 設定檔。您可以在任何時後使用 App facade 的 setLocale 方法動態地變換現行語系:

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

您也可以設定 "備用語系",它將會在當現行語言沒有給定的語句時被使用。就像預設語言,備用語言也可以在 config/app.php 設定檔設定:

'fallback_locale' => 'en',

基本用法

您可以使用 trans 輔助函式來取得語系字串,trans 函式的第一個參數接受檔名和鍵值名稱,例如,從 resources/lang/messages.php 語言檔取得名稱為 welcome 的句子:

echo trans('messages.welcome');

當然,若您使用 Blade 樣版引擎, 您可以使用 {{ }} 來輸出句子:

{{ trans('messages.welcome') }}

如果句子不存在, trans 方法將會回傳鍵值的名稱,如上範例會回傳 messages.welcome

在句子中做替代

如果需要,你也可以在語系檔中定義佔位符,佔位符使用 : 開頭,例如,您可以定義一則歡迎訊息的佔位符:

'welcome' => 'Welcome, :name',

接著,傳入替代用的第二個參數給 trans 方法:

echo trans('messages.welcome', ['name' => 'Dayle']);

複數

複數是個複雜的問題,不同語言對於複數有不同的規則,使用 "管線" 字元,可以區分單複數字串格式:

'apples' => 'There is one apple|There are many apples',

接著,可以使用 trans_choice 方法來設定總數,例如,當總數大於一將會取得複數句子:

echo trans_choice('messages.apples', 10);

由於 Laravel 的翻譯器是來自於 Symfony 翻譯套件,您甚至可以使用更複雜的複數規則:

'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',

覆寫套件的語言檔

部分套件帶有自己的語系檔,您可以藉由放置檔案在 resources/lang/vendor/{package}/{locale} 來複寫它們,而不是直接修改套件的核心檔案。

例如,您需要複寫 skyrim/hearthfire 套件的英文語系檔 messages.php,您需要把檔案放置在 resources/lang/vendor/hearthfire/en/messages.php。這個檔案內,只要去定義需要覆寫的語句,任何沒有覆寫的語句將會仍從套件的語言檔載入。