イントロダクション

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

言語ファイル

ある言語の文字列はapp/langディレクトリー下のファイルに保存されます。このディレクトリーの中にアプリケーションでサポートする言語のディレクトリーを設置します。

/app
    /lang
        /en
            messages.php
        /es
            messages.php

言語ファイルのサンプル

言語ファイルはキーと文字列の配列をリターンします。例えば:

<?php

return array(
    'welcome' => 'Welcome to our application'
);

実行中にデフォルト言語を切り換える

デフォルトの言語はapp/config/app.php設定ファイルで指定されています。App::setLocaleメソッドを使用し、現在有効な言語を変更することができます。

App::setLocale('es');

フォールバック言語の設定

指定された言語行に、アクティブな言語では存在しない場合に使用される、「フォールバック言語」を設定することもできます。デフォルト言語と同様に、フォールバック言語もapp/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', array('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, array(), 'ru');

Laravelの翻訳にはSymfony Translation componentを使用しているため、もっと便利な複数形化のルールも簡単に作成できます。

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

バリデーションのローカリゼーション

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

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

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