laravel12.laravel_101
R e i - D r e a m
for Laravel
TOP > Laravel Ver.12 > その他中間モジュール(多言語化)
Guest
login

最終投稿日:2026年3月15日

多言語化
はじめに
多言語化とは、よくWebページの右上辺りに【Japanese】【English】のリンクがあり、クリックすると画面が日本語になったり、英語になったりするあれです。
またLaravelはアメリカ生まれのフレームワークでもあるので、デフォルトのエラーメッセージが英語だったりします。
それらの内容を日本語に変換させる仕組みでもあります。
多言語化設定
『.env』ファイル内の《APP_LOCALE=en》を《APP_LOCALE=ja》へ変更します。
Laravel」ルートディレクトリ([artisan]ファイルがある場所)から以下を叩きます。
以下を叩く

C:\~\laravel_12>php artisan lang:publish
    INFO Language files published successfully.

C:\~\laravel_12>

『laravel_12\lang\en』に数種類のファイルが作成されるので【ja】ディレクトリを作成し《validation.php》をコピーします。
それでは前準備として任意のビューに以下を追記します。
任意のビュー

<form>
    @error('name')
        <span class="error text-danger">{{ $message }}</span>
    @enderror
    <BR />
    <input type="text" name="name" value="">
    <button type="submit">送信</button>
</form>

次に対応するコントローラ内の対応メソッドに以下を追記します。
対応メソッド

public function index(Request $request) {
    $request->validate([
        'name' => 'required',
    ]);
    return view('hoge/index', []);
}

ビューへアクセスし、空のまま「送信」ボタンを押下すると。。
『The name field is required.』と表示されます。
これはコントローラ側の以下設定で属性[name]を必須としているためです。
    'name' => 'required',
そして、エラーメッセージに対応するのが、先ほどコピーした「validation.php」ファイルとなります。
例えば必須項目の内容を変更したい場合、ファイル内にある『'required' => 'The :attribute field is required.',』を編集します。
例)
    'required' => ':attributeは必須項目です。',
『:attribute』はファイルの最後にある『'attributes' => [],』を参照しています。
よって、ここも以下の様に変更します。
例)
    'attributes' => [
        'name' => 'お名前',
    ],
再度ビューへアクセスし、空のまま「送信」ボタンを押下すると。。
今度は『お名前は必須項目です。』と表示されるハズです。
言語を切り替える方法
お手軽なのは親クラスである『Controllers/Controller.php』を利用する方法です。
例えば任意の画面に言語の切り替え画面(共通ヘッダ辺り)を作成し、セッションに以下の様に保存します。
    $request->session()->put('locale', 'en');
後は『Controller.php』を以下の様に修正すれば切り替わります。
Controller.php

<?php
namespace App\Http\Controllers;
abstract class Controller {

    public function __construct() {
        // CLI(php artisan)時はスキップ
        if (app()->runningInConsole()) {
            return;
        }
        // 言語設定
        $locale = session('locale', config('app.locale'));
        if (in_array($locale, ['en', 'ja'])) {
            app()->setLocale($locale);
        }
    }
}

任意の文字を多言語化する
今までの内容は、バリデーションにおける多言語化対応でした。
では任意の文字についてはどうするか?
実はこっちが多言語化の最も基本的な内容となります。
以下の2箇所にファイルを作成します。
~\lang\en\messages.php
~\lang\ja\messages.php
それぞれのファイルを以下の内容とします。
en\messages.php

<?php
    return [
        'welcome' => 'Welcome',
        'submit' => 'Submit',
    ];

ja\messages.php

<?php
    return [
        'welcome' => 'ようこそ',
        'submit' => '送信',
    ];

最後にビューの送信ボタンのコードを以下の様に修正してみましょう。
任意のビュー

<button type="submit">{{ __('messages.submit')}}</button>

これで設定は完了です。
送信ボタンの文字が多言語対応されたハズです。
書式
     __('{~\lang\en\ファイル名}.{配列KEY名}')
関数「__()」を記述する事で、「~\lang\{現在のロケール}」が参照されます。
引数「ファイル名」の部分は「messages.php」に対応
引数「配列KEY名」の部分はファイル内の連想配列KEY名に対応
ポイント

ファイル名は任意の名前でも問題ありません。
引数はドットで複数繋ぐ事でn次元配列に対応できます。

ログインしてコメントを残そう!!


きっぷる