Laravel

多言語化

イントロダクション

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')) {
    //
}

言語行の取得

言語ファイルから行を取得するにはtransヘルパ関数を使用します。transメソッドはファイルと言語行を第1引数として受け取ります。たとえばresources/lang/messages.php言語ファイルのwelcome言語行を取得してみましょう。

echo trans('messages.welcome');

もちろん、Bladeテンプレートエンジンを使っていれば、翻訳行を表示するために{{ }}記法が使えますし、さらに@langも使用できます。

{{ trans('messages.welcome') }}

@lang('messages.welcome')

指定した言語行が存在していない場合、trans関数はただ言語行のキーを返します。ですから前記の例で言語行が存在していなければ、trans関数はmessages.welcomeをリターンします。

言語行のパラメータ置換

お望みなら言語行でプレースホルダを定義することもできます。全プレースホルダは:のプレフィックスが付きます。たとえばnameプレースホルダ付きの歓迎メッセージの例をご覧ください。

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

取得する言語行のプレースホルダを置き換えるには、trans関数の第2引数に対象の配列を指定してください。

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

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

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

複数形化

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

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

言語行に複数形化オプションが存在する場合は、trans_choice関数に「数」を指定し、行を取得します。以下の例では数が1より大きので、複数形の言語行が返されます。

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

Laravelの翻訳にはパワフルなSymfony Translationコンポーネントを使用しているため、複数の範囲を言語行に指定することで、もっと便利な複数形化のルールも簡単に作成できます。

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

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

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

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

ドキュメント章別ページ

開発環境
ビューとテンプレート
Artisanコンソール
公式パッケージ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる