Laravel5.5 LTS 日本語ドキュメント

このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。

This project is maintained by okinaka

多言語化

イントロダクション

Laravelのローカリゼーション機能はアプリケーションで多言語をサポートできるように、様々な言語の文字列を便利に取得できる方法を提供します。 言語の文字列はresources/langディレクトリ下のファイルに保存します。このディレクトリの中にアプリケーションでサポートする言語のディレクトリを設置します。

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

全ての言語ファイルはシンプルにキーと文字列の配列をリターンします。例を見てください。

<?php

return [
    'welcome' => 'Welcome to our application'
];

ロケールの設定

アプリケーションのデフォルト言語はconfig/app.php設定ファイルで指定します。もちろんこの値はアプリケーションに合うように変更できます。さらにAppファサードのsetLocaleメソッドを使い、実行時にアクティブな言語を変更することもできます。

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

現時点のロケールとして指定した言語の翻訳文字列が存在しない場合に使用される、「フォールバック言語」を設定することもできます。デフォルト言語と同様に、フォールバック言語もconfig/app.php設定ファイルで指定されます。

'fallback_locale' => 'en',

現在のロケール判定

現在のロケールを調べたり、特定のロケールであるかを判定したりするには、AppファサードのgetLocaleisLocaleを使います。

$locale = App::getLocale();

if (App::isLocale('en')) {
    //
}

翻訳文字列の定義

短縮キーの使用

通常、翻訳文字列はresources/langディレクトリ下のファイルに保存されています。このディレクトにはアプリケーションでサポートする各言語のサブディレクトリを用意します。

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

全ての言語ファイルはシンプルにキーと文字列の配列をリターンします。例を見てください。

<?php

// resources/lang/en/messages.php

return [
    'welcome' => 'Welcome to our application'
];

翻訳文字列のキー使用

たくさんの翻訳が必要なアプリケーションでは、全ての文字列に「短いキー」を付けようとすると、ビューで参照する際、すぐにこんがらがってきます。そのため、Laravelでは翻訳文字列を「デフォルト」翻訳の文字列をキーとして利用できます。

翻訳文字列をキーとして使用する翻訳ファイルは、resources/langディレクトリ下にJSONファイルとして保存します。たとえば、アプリケーションにスペイン語の翻訳がある場合、resources/lang/es.jsonファイルを作成します。

{
    "I love programming.": "Me encanta programar."
}

翻訳文字列の取得

言語ファイルから行を取得するには、__ヘルパ関数を使用します。__メソッドは、最初の引数として翻訳文字列のファイルとキーを受け付けます。例として、resources/lang/messages.php原語ファイルからwelcome翻訳文字列を取得してみましょう。

echo __('messages.welcome');

echo __('I love programming.');

もちろん、Bladeテンプレートエンジンを使用している場合は、``記法で翻訳文字列をechoするか、@langディレクティブを使用します。

@lang('messages.welcome')

指定した翻訳文字列が存在しない場合、__関数は翻訳文字列キーをそのまま返します。そのため、上記の例で__関数は、翻訳文字列がない場合にmessages.welcomeを返します。

翻訳文字列中のパラメータ置換

お望みならば、翻訳文字列にプレースホルダを定義できます。全プレースホルダは:のプレフィックスを付けます。例として、welcomeメッセージにnameプレースホルダを定義してみましょう。

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

翻訳文字列を取得する時に、プレースホルダを置き換えるには、__関数の第2引数として、置換文字の配列を渡します。

echo __('messages.welcome', ['name' => 'dayle']);

プレースホルダを全部大文字にするか、最初の一文字を大文字にすると、その方法に合わせて値が大文字に変換されます。

'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

複数形化

複数形化は複雑な問題であり、異なった言語において多種複雑な複数形化のルールが存在しています。「パイプ」記号の縦線を使うことで、単数形の文字列と複数形の文字列を分けることができます。

'apples' => 'There is one apple|There are many apples',

複数の範囲を翻訳行に指定することで、もっと便利な複数形化のルールも簡単に作成できます。

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

複数形化オプションの翻訳文字列を定義したら、trans_choice関数に「数」を指定し、行を取得します。以下の例では数が1より大きので、複数形の翻訳行が返されます。

echo trans_choice('messages.apples', 10);

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

いくつかのパッケージではそれ自身の言語ファイルが提供されています。出力される文言を調整するためパッケージのコアをハックする代わりに、resources/lang/vendor/{パッケージ}/{ロケールコード}ディレクトリにファイルを設置することで、オーバーライドできます。

たとえばskyrim/hearthfireという名前のパッケージが持っているmessages.phpの英語の翻訳行をオーバーライドする必要があるなら、resources/lang/vendor/hearthfire/en/messages.phpに言語ファイルを設置します。このファイルには置き換えたい翻訳行の定義だけを設置することができます。オーバーライドしなかった翻訳行は、パッケージのオリジナルな言語ファイル中の定義のままロードされます。