Laravel 5.6, 5.7 言語ファイル設置、読み込みで多言語サイトを構築しよう

Laravel 5.6, 5.7 言語ファイル設置、読み込みで多言語サイトを構築しよう

こんにちはこんばんは、最近肩こりがやばいのるぼるのんです。

最近の記事ではバリデーションメッセージを日本語化したり、Voyagerから日本語ファイルをアップロードしたりしました。

ですが自分でもLaravelの言語ファイル関係は使いこなせていないなと思うので、言語ファイル、locale関連をもう一度ゆるく確認ようと思った次第です。

 

ということでプロジェクト作成直後のLaravelからちゃちい多言語サイトを作ってみようと思います。

ホーム画面以外の文章は言語ファイルに設定し、日本語サイトと英語サイトを作ります。それではやっていきましょう!

 

下準備(Laravelデフォ言語ファイルをコピー)※今回はやらん

まずは下準備として、resources/lang以下にjaディレクトリを作成し、Laravelに標準で設置されているresources/lang/en/言語ファイル.php達をコピーしていきます

作成したresources/lang/ja/filesにlaravel公式docsに記載されている翻訳内容(リンクの他にも3つあるよ)をコピーしておきます。

 

config/app.php

ローケルを設定します。今回は第一言語を日本語とし、第一言語の翻訳が見つからない時は英語から翻訳文字列を探します。

 

resources/views/welcome.blade.php

今回は簡易的に、welcome.blade.phpのリンク部分を日本語サイト、英語サイトのトップへのリンクに変更します。

 

web.php

ルーティングを設定します。この時、使用するローケルをprefix毎に設定します。

$localeにprefix(ローケルディレクトリ名)を取得保存、リクエストURIが/ja/…の時は日本語に、/en/…の時は英語にsetLocaleします。

HelloController.php

dumpはただ今のローケルを確認しているだけです。やっていることはindex.blade.phpを呼び出しているだけ。

 

Index.blade.php

これだけ!w

@langディレクティブを使用すると、現在のローケル以下にある言語ファイルを読み込んで翻訳してくれます。今回のターゲットはmessage.phpの’hello’です。

 

resources/views/lang

・en/message.php

・ja/message.php

@lang(‘message.hello’)で呼ぶ翻訳文書を記述しています。

 

以上で簡単ですが、多言語化が終了しました!実際の挙動を確認しましょう!

 

挙動確認

ホーム画面

画面下にリンクがあります。日本語サイトへ行ってみます。

@langディレクティブからja/message.phpに記述した文字列が表示されています(下半分の驚きの白さ)。今度は英語サイトに行ってみます

こちらも無事、英語翻訳されました。また、画面上部にはdump()で取得したlocale設定値が表示されています。それぞれ’ja’, ‘en’となっています。

 

コントローラーでsetLocaleした方が確実に簡単だったんですけど、記述が多くなること、prefixの中で一発で決めたかったので、web.phpで色々やってみました。(prefix, urlの取得で地味に時間使ってしまいました、しょうもないっすね)

 

jsで色々やる時も同じようにprefixでグループ分けて、リダイレクトさせれば良さそうですね。

結構雑にやってしまいましたが、他にもっとこういう方法あるよ!って方、是非教えていただけると幸いです。

 

以下雑談

あと地味にLaravelがアップデートして5.7 ver.になりましたね!僕のブログでも、時間のあるときにLaravel5.7 の機能を紹介できれば、と思います。認証関連がまた便利になったみたいですので、触るのが楽しみですね!

Laravelカテゴリの最新記事