Laravelで使われる「__( )」について【多言語対応】

※当サイトは、アフィリエイト広告を利用しています
Laravel
スポンサーリンク

今回はLaravelで使われる「__( )」についてです。

「__( )」は、Laravelで翻訳に使われる関数です。

多言語化されたWebアプリケーションを開発する場合、多言語対応が必要になります。

その際に、「__( )」関数を使うことで、簡単に翻訳を実装することができます。

この記事を読むと、Laravelでの多言語対応のやり方と、「__( )」の使い方を理解できます。

スポンサーリンク

短縮キーを使った定義方法

まずは「短縮キーを使った定義方法」です。

流れはこのようになります。

  1. resources/langディレクトリに言語別のディレクトリを作成する。
  2. 言語別のディレクトリの中に、言語ファイルを作成する。
  3. 言語ファイル内に、翻訳する文字列と翻訳文を記述する。

例えば日本語と英語で多言語対応したい場合は以下のような言語別のディレクトリ構成にします。

/resources
    /lang
        /ja
            messages.php
        /en
            messages.php

それぞれjaフォルダとenフォルダを作成し、その中に言語ファイルを作成します。

ファイル内に、キーを指定してそれに対応する言語ごとの値を指定します。

日本語の場合はこちら。

<?php
// resources/lang/ja/messages.php

return [
    'welcome' => 'ようこそ「test」アプリへ!!',
];

英語の場合はこちら。

<?php
// resources/lang/en/messages.php

return [
    'welcome' => 'Welcome to 「test」application!!',
];

これで翻訳の準備は完了です。

これをbladeで表示させる場合はこのようになります。

{{ __('messages.welocme') }}

日本語では「ようこそ「test」アプリへ!!」、英語では「Welcome to 「test」application!!」と表示されるようになります。

スポンサーリンク

翻訳文字列をキーとして定義する方法(json)

続いては翻訳文字列をキーとして定義する方法です。

この方法は言語ごとのjsonファイルを使用します。

// resources/lang/ja.json
{
    "Hello World": "こんにちは、世界",
    "Login": "ログイン",
    "Logout": "ログアウト",
}

上記の例では、「Hello World」、「Login」、「Logout」という文字列に対して、それぞれ日本語の翻訳文を記述しています。

こうすることで、以下のようにbladeで書くことで日本語に翻訳されるようになります。

{{ __('Hello World') }}
{{ __('Login') }}
{{ __('Logout') }}

変数を追加して動的に変更もできる

今までは単に翻訳対象テキストを用意して表示させるだけでしたが、そのテキストに変数を追加することもできます。

以下がその一例です。

<?php
// resources/lang/ja/messages.php

return [
    'welcome' => ':nameさん、ようこそ「test」アプリへ!!',
];

このように、「:変数名」とすることで、その部分だけを変更した翻訳テキストを作成できます。

blade側で表示させるには、以下のようにします。

{{ __('messages.welocme', ['name' => $user->name]) }}

第二引数を追加し、言語ファイルで設定した変数をキーとバリューで指定してあげます。

これでログインしたユーザーごとにメッセージを変更することができるようになります。

まとめ

Laravelで多言語対応を実装する場合、「__( )」関数を使うことで簡単に翻訳を実現することができます。

また、今回の紹介ではblade側(ビュー)で文字列を表示する場合でしたが、もちろんコントローラーで取得することも可能です。

効率的に多言語対応を実現することができるので活用してみてください。

エンジニアにおすすめ書籍

エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!

Laravel
シェアする
エンせいをフォローする
スポンサーリンク
タイトルとURLをコピーしました