在地化
介紹
Laravel 的 Lang
facade 提供方便的方法來取得多種語言的字串,讓你簡單地在應用程式裡支援多種語言。
語言檔
語言字串儲存在 resources/lang
資料夾的檔案裡。在這個資料夾裡應該要給每一個應用程式支援的語言一個子資料夾。
/resources
/lang
/en
messages.php
/es
messages.php
語言檔範例
語言檔簡單地回傳鍵跟字串的陣列。例如:
<?php
return [
'welcome' => 'Welcome to our application'
];
在執行時變換預設語言
應用程式的預設語言被儲存在 config/app.php
設定檔。你可以在任何時候用 App::setLocale
方法變換現行語言:
App::setLocale('es');
設定備用語言
你也可以設定「備用語言」,它將會在當現行語言沒有給定的語句時被使用。就像預設語言,備用語言也可以在 config/app.php
設定檔設定:
'fallback_locale' => 'en',
基本用法
從語言檔取得句子
echo Lang::get('messages.welcome');
傳遞給 get
方法的字串的第一個部分是語言檔的名稱,第二個部分是應該被取得的句子的名稱。
注意: 如果語句不存在,
get
方法將會回傳鍵的名稱。
你也可以使用 trans
輔助方法,它是 Lang::get
方法的別名。
echo trans('messages.welcome');
在句子中做替代
你也可以在語句中定義佔位符:
'welcome' => 'Welcome, :name',
接著,傳遞替代用的第二個參數給 Lang::get
方法:
echo Lang::get('messages.welcome', ['name' => 'Dayle']);
判斷語言檔是否有指定的句子
if (Lang::has('messages.welcome'))
{
//
}
複數
複數是個複雜的問題,不同語言對於複數有很多種複雜的規則。你可以簡單地在你的語言檔裡管理它。你可以用「管道」字元區分字串的單數和複數形態:
'apples' => 'There is one apple|There are many apples',
接著你可以用 Lang::choice
方法取得語句:
echo Lang::choice('messages.apples', 10);
你也可以提供一個地區參數來指定語言。舉個例,如果你想要使用俄語 (ru):
echo Lang::choice('товар|товара|товаров', $count, [], 'ru');
因為 Laravel 的翻譯器由 Symfony 翻譯元件提供,你也可以很容易地建立更明確的複數規則:
'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',
驗證
要驗證在地化的錯誤和訊息,可以看一下驗證的文件。
覆寫套件的語言檔
許多套件附帶它們自有的語句。你可以借由放置檔案在 resources/lang/packages/{locale}/{package}
資料夾來覆寫它們,而不是改變套件的核心檔案來調整這些句子。所以,舉個例子,如果你需要覆寫 skyrim/hearthfire
套件在 messages.php
的英文語句,你可以放置語言檔在: resources/lang/packages/en/hearthfire/messages.php
。你可以只定義你想要覆寫的語句在這個檔案裡,任何你沒有覆寫的語句將會仍從套件的語言檔載入。