什麼是在地化
Laravel 的在地化功能提供便利機制,讓你能以多語言方式取得翻譯字串。 用於在應用程式中支援多語言。 翻譯字串有兩種管理方式:Laravel 預設沒有
lang 目錄。要自訂請以 lang:publish Artisan 指令發布。語系設定
預設語系
應用程式的預設語言於config/app.php 的 locale 設定。
通常會使用 .env 的 APP_LOCALE 環境變數。
fallback_locale 是在指定語言沒有對應翻譯時的備援語言。
執行期切換語系
透過App Facade 的 setLocale(),可在每次請求中變更語系。
檢查目前語系
建立語言檔
PHP 檔案格式
在lang/{語言代碼}/ 目錄下建立 PHP 檔案,回傳 key/value 陣列。
JSON 格式
翻譯字串量大時建議使用 JSON 格式。 於lang/ 目錄建立以語言代碼命名的 JSON 檔。
PHP 與 JSON 的取捨
適合 PHP 檔案的情境
適合 PHP 檔案的情境
- 想按功能整理,像驗證錯誤訊息
- 想覆寫 Laravel 內建翻譯(
validation.php、auth.php等) - 需要階層式的 key 管理
適合 JSON 檔案的情境
適合 JSON 檔案的情境
- UI 文案眾多,不想額外設計 key
- 樣板中直接以英文書寫,其他語言以翻譯檔應對
- 之後才加入國際化的應用程式
取得翻譯字串
__() 輔助函式
最常用的方式。PHP 檔案格式時以「檔名.key」形式指定。
在 Blade 樣板中的使用
在 Blade 樣板中使用{{ __() }}。
佔位符
可在翻譯字串中嵌入:名稱 形式的佔位符。
__() 的第 2 個參數傳入替換值陣列。
複數形式
不同語言有不同複數規則。Laravel 可用| 區隔單數與複數形。
基本複數
trans_choice() 傳入數量取得:
指定範圍的複數
可以更細緻地依範圍區隔:複數中的佔位符
:count 會顯示數量。也可在第 3 個參數傳入額外替換值。
覆寫套件的語言檔
若第三方套件擁有自己的語言檔,可將同名檔案放至lang/vendor/{套件名稱}/{語言代碼}/ 進行覆寫。
例如要客製化 skyrim/hearthfire 套件的英文訊息:
實戰範例:中英切換的中介軟體
以下是根據 URL 路徑、session 或使用者設定自動切換語系的中介軟體實作。1
建立中介軟體
2
實作中介軟體
3
註冊中介軟體
在
bootstrap/app.php 中註冊中介軟體。4
加入語系切換路由
5
在 Blade 樣板加入切換按鈕
翻譯檔的組織範例
總結
翻譯字串的定義方式
翻譯字串的定義方式
常用函式 / Facade
常用函式 / Facade
在 Blade 中的使用
在 Blade 中的使用