Skip to main content

ローカライゼーションとは

Laravelのローカライゼーション機能は、複数の言語で翻訳文字列を取得する便利な仕組みを提供します。 アプリケーション内で複数言語をサポートするために使います。 翻訳文字列の管理方法は2種類あります。
デフォルトのLaravelアプリケーションには lang ディレクトリが含まれていません。カスタマイズするには lang:publish Artisanコマンドで公開します。

ロケールの設定

デフォルトロケール

アプリケーションのデフォルト言語は config/app.phplocale で設定します。 通常は .env ファイルの APP_LOCALE 環境変数を使います。
fallback_locale は、指定した言語に翻訳文字列が存在しない場合のフォールバック言語です。

実行時のロケール変更

App ファサードの setLocale() メソッドで、リクエスト単位にロケールを変更できます。

現在のロケールを確認する

言語ファイルの作成

PHPファイル形式

lang/{言語コード}/ ディレクトリにPHPファイルを作成します。キー・バリュー形式の配列を返します。
地域差のある言語は ISO 15897 に従ってディレクトリ名を付けます。たとえばイギリス英語は en-gb ではなく en_GB です。

JSON形式

翻訳する文字列が多い場合は、JSON形式が推奨されます。 lang/ ディレクトリに言語コード名のJSONファイルを作成します。
デフォルトの翻訳文字列(英語)をキーとして定義します。
JSON形式では英語の文章そのものがキーになるため、英語のデフォルト表示が自動で機能します。翻訳ファイルがない言語ではキー(英語原文)がそのまま表示されます。

PHPファイル形式とJSON形式の使い分け

  • バリデーションエラーメッセージなど機能ごとに整理したい場合
  • Laravelの組み込み翻訳(validation.phpauth.php など)を上書きする場合
  • 階層的なキー管理が必要な場合
  • UIの文言が多く、キーを考えるのが煩わしい場合
  • テンプレートに英語をそのまま書いておき、他言語は翻訳ファイルで対応する場合
  • 国際化対応が後から追加になったアプリケーション

翻訳文字列の取得

__() ヘルパー

最もよく使う方法です。PHPファイル形式では「ファイル名.キー」形式で指定します。
翻訳文字列が存在しない場合は、指定したキーがそのまま返ります。

Bladeテンプレートでの使用

Bladeテンプレートでは {{ __() }} を使います。
@lang ディレクティブは非推奨です。現在は {{ __() }} を使うことが推奨されています。

プレースホルダー

翻訳文字列に :名前 形式のプレースホルダーを埋め込めます。
__() の第2引数に置換値の配列を渡します。
Bladeテンプレートでも同様に使えます。

複数形

言語によって複数形のルールが異なります。Laravelは | 記号で単数形と複数形を切り替えられます。

基本的な複数形

JSON形式でも同様に定義できます。
trans_choice() 関数で数量を渡して取得します。

範囲を指定した複数形

より詳細な範囲指定ができます。

複数形でのプレースホルダー

:count で数量を表示できます。第3引数に追加の置換値を渡せます。

パッケージの言語ファイルをオーバーライド

サードパーティパッケージが独自の言語ファイルを持っている場合、lang/vendor/{パッケージ名}/{言語コード}/ に同名ファイルを置くことで上書きできます。 たとえば skyrim/hearthfire パッケージの英語メッセージをカスタマイズするには。

実践例: 日英切り替えミドルウェア

URLパスやセッション、ユーザー設定に基づいてロケールを自動切り替えするミドルウェアの実装例です。
1

ミドルウェアを作成する

2

ミドルウェアを実装する

3

ミドルウェアを登録する

bootstrap/app.php でミドルウェアを登録します。
4

ロケール切り替えルートを追加する

5

Bladeテンプレートに切り替えボタンを追加する

翻訳ファイルの構成例

まとめ

最終更新日 2026年3月29日