ローカライゼーションとは
Laravelのローカライゼーション機能は、複数の言語で翻訳文字列を取得する便利な仕組みを提供します。 アプリケーション内で複数言語をサポートするために使います。 翻訳文字列の管理方法は2種類あります。デフォルトのLaravelアプリケーションには
lang ディレクトリが含まれていません。カスタマイズするには lang:publish Artisanコマンドで公開します。ロケールの設定
デフォルトロケール
アプリケーションのデフォルト言語はconfig/app.php の locale で設定します。
通常は .env ファイルの APP_LOCALE 環境変数を使います。
fallback_locale は、指定した言語に翻訳文字列が存在しない場合のフォールバック言語です。
実行時のロケール変更
App ファサードの setLocale() メソッドで、リクエスト単位にロケールを変更できます。
現在のロケールを確認する
言語ファイルの作成
PHPファイル形式
lang/{言語コード}/ ディレクトリにPHPファイルを作成します。キー・バリュー形式の配列を返します。
JSON形式
翻訳する文字列が多い場合は、JSON形式が推奨されます。lang/ ディレクトリに言語コード名のJSONファイルを作成します。
PHPファイル形式とJSON形式の使い分け
PHPファイル形式が向いているケース
PHPファイル形式が向いているケース
- バリデーションエラーメッセージなど機能ごとに整理したい場合
- Laravelの組み込み翻訳(
validation.php、auth.phpなど)を上書きする場合 - 階層的なキー管理が必要な場合
JSON形式が向いているケース
JSON形式が向いているケース
- UIの文言が多く、キーを考えるのが煩わしい場合
- テンプレートに英語をそのまま書いておき、他言語は翻訳ファイルで対応する場合
- 国際化対応が後から追加になったアプリケーション
翻訳文字列の取得
__() ヘルパー
最もよく使う方法です。PHPファイル形式では「ファイル名.キー」形式で指定します。
Bladeテンプレートでの使用
Bladeテンプレートでは{{ __() }} を使います。
プレースホルダー
翻訳文字列に:名前 形式のプレースホルダーを埋め込めます。
__() の第2引数に置換値の配列を渡します。
複数形
言語によって複数形のルールが異なります。Laravelは| 記号で単数形と複数形を切り替えられます。
基本的な複数形
trans_choice() 関数で数量を渡して取得します。
範囲を指定した複数形
より詳細な範囲指定ができます。複数形でのプレースホルダー
:count で数量を表示できます。第3引数に追加の置換値を渡せます。
パッケージの言語ファイルをオーバーライド
サードパーティパッケージが独自の言語ファイルを持っている場合、lang/vendor/{パッケージ名}/{言語コード}/ に同名ファイルを置くことで上書きできます。
たとえば skyrim/hearthfire パッケージの英語メッセージをカスタマイズするには。
実践例: 日英切り替えミドルウェア
URLパスやセッション、ユーザー設定に基づいてロケールを自動切り替えするミドルウェアの実装例です。1
ミドルウェアを作成する
2
ミドルウェアを実装する
3
ミドルウェアを登録する
bootstrap/app.php でミドルウェアを登録します。4
ロケール切り替えルートを追加する
5
Bladeテンプレートに切り替えボタンを追加する
翻訳ファイルの構成例
まとめ
翻訳文字列の定義方法
翻訳文字列の定義方法
よく使う関数・ファサード
よく使う関数・ファサード
Bladeでの使い方
Bladeでの使い方