イントロダクション

LaravelのLangファサードは、アプリケーションを多言語に対応させるため、様々な言語の翻訳済み文字列を取得する方法を提供します。

言語ファイル

言語の文字列は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メソッドに渡している文字列の、最初の部分は言語ファイルの名前です。2番めの部分は取得しようとしている行の名前です。

注目: もし言語行が存在していない場合、getメソッドはキーの値をリターンします。

Lang::getメソッドのエイリアスである、transヘルパー関数も使用できます。

echo trans('messages.welcome');

行の一部の置き換え

言語行の中にプレースホルダーを定義することもできます。

'welcome' => 'Welcome, :name',

それから、Lang::getメソッドの第2引数として置換文字列を渡してください。

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 Translationコンポーネントを使用しているため、もっと便利な複数形化のルールも簡単に作成できます。

'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',

バリデーション

バリデーションのエラーとメッセージをローカライズする方法は、バリデーションのドキュメントを参照してください。

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

多くのパッケージがそれ自身の言語ファイルと共に提供されています。出力される文言を調整するために、パッケージのコアをハックする代わりに、resources/lang/packages/{ロケールコード}/{パッケージ}ディレクトリーにファイルを設置することで、オーバーライドできます。例えば、skyrim/hearthfireパッケージの英語の言語行をオーバーライドする必要があるなら、resources/lang/packages/en/hearthfire/messages.phpに言語ファイルを設置します。このファイルには置き換えたい言語行の定義だけを設置することができます。オーバーライドしなかった言語行は、パッケージの言語ファイル中の定義のままロードされます。