Skip to main content

什麼是在地化

Laravel 的在地化功能提供便利機制,讓你能以多語言方式取得翻譯字串。 用於在應用程式中支援多語言。 翻譯字串有兩種管理方式:
Laravel 預設沒有 lang 目錄。要自訂請以 lang:publish Artisan 指令發布。

語系設定

預設語系

應用程式的預設語言於 config/app.phplocale 設定。 通常會使用 .envAPP_LOCALE 環境變數。
fallback_locale 是在指定語言沒有對應翻譯時的備援語言。

執行期切換語系

透過 App Facade 的 setLocale(),可在每次請求中變更語系。

檢查目前語系

建立語言檔

PHP 檔案格式

lang/{語言代碼}/ 目錄下建立 PHP 檔案,回傳 key/value 陣列。
具有地域差異的語言請依 ISO 15897 命名。例如英式英文為 en_GB 而非 en-gb

JSON 格式

翻譯字串量大時建議使用 JSON 格式。 於 lang/ 目錄建立以語言代碼命名的 JSON 檔。
以預設翻譯字串(英語)作為 key 定義。
JSON 格式將英文原句本身當作 key,因此在英文預設顯示時自然可用。若沒有對應的翻譯檔,key(英文原句)會直接顯示。

PHP 與 JSON 的取捨

  • 想按功能整理,像驗證錯誤訊息
  • 想覆寫 Laravel 內建翻譯(validation.phpauth.php 等)
  • 需要階層式的 key 管理
  • UI 文案眾多,不想額外設計 key
  • 樣板中直接以英文書寫,其他語言以翻譯檔應對
  • 之後才加入國際化的應用程式

取得翻譯字串

__() 輔助函式

最常用的方式。PHP 檔案格式時以「檔名.key」形式指定。
若翻譯字串不存在,指定的 key 會被原樣回傳。

在 Blade 樣板中的使用

在 Blade 樣板中使用 {{ __() }}
@lang 指令不建議使用,現在建議使用 {{ __() }}

佔位符

可在翻譯字串中嵌入 :名稱 形式的佔位符。
__() 的第 2 個參數傳入替換值陣列。
在 Blade 樣板中同樣可以使用:

複數形式

不同語言有不同複數規則。Laravel 可用 | 區隔單數與複數形。

基本複數

JSON 格式也可如此定義:
trans_choice() 傳入數量取得:

指定範圍的複數

可以更細緻地依範圍區隔:

複數中的佔位符

:count 會顯示數量。也可在第 3 個參數傳入額外替換值。

覆寫套件的語言檔

若第三方套件擁有自己的語言檔,可將同名檔案放至 lang/vendor/{套件名稱}/{語言代碼}/ 進行覆寫。 例如要客製化 skyrim/hearthfire 套件的英文訊息:

實戰範例:中英切換的中介軟體

以下是根據 URL 路徑、session 或使用者設定自動切換語系的中介軟體實作。
1

建立中介軟體

2

實作中介軟體

3

註冊中介軟體

bootstrap/app.php 中註冊中介軟體。
4

加入語系切換路由

5

在 Blade 樣板加入切換按鈕

翻譯檔的組織範例

總結

最後修改於 2026年8月2日