カテゴリ: Laravel 更新日: 2025/12/19

Laravelで多言語対応フォームを作成する方法

Laravelで多言語対応フォームを作成する方法
Laravelで多言語対応フォームを作成する方法

先生と生徒の会話形式で理解しよう

生徒

「Laravelで作ったフォームを日本語だけでなく英語や他の言語でも使えるようにしたいです。」

先生

「それならLaravelの多言語機能であるローカライゼーションを使うと便利です。」

生徒

「ローカライゼーションって何ですか?」

先生

「アプリケーション内の文字列を複数の言語に対応させる仕組みです。これで同じフォームを使ってユーザーが選んだ言語で表示できます。」

1. 言語ファイルの準備

1. 言語ファイルの準備
1. 言語ファイルの準備

Laravelではresources/langディレクトリに言語ごとのフォルダを作成します。例えば日本語と英語の場合、jaenを作ります。


resources/lang/ja/form.php
resources/lang/en/form.php

それぞれのファイルにフォームで使う文字列を配列形式で定義します。


// resources/lang/ja/form.php
return [
    'name' => 'お名前',
    'email' => 'メールアドレス',
    'message' => 'お問い合わせ内容',
    'submit' => '送信',
];

// resources/lang/en/form.php
return [
    'name' => 'Name',
    'email' => 'Email',
    'message' => 'Message',
    'submit' => 'Submit',
];

2. フォームBladeでの表示

2. フォームBladeでの表示
2. フォームBladeでの表示

Bladeテンプレートでは__()ヘルパー関数を使って言語ファイルの文字列を表示します。


<form action="{{ route('contact.send') }}" method="POST">
    @csrf
    <input type="text" name="name" placeholder="{{ __('form.name') }}">
    <input type="email" name="email" placeholder="{{ __('form.email') }}">
    <textarea name="message" placeholder="{{ __('form.message') }}"></textarea>
    <button type="submit">{{ __('form.submit') }}</button>
</form>

これにより、アプリケーションの言語設定に応じてフォームのラベルが自動で切り替わります。

3. 言語切替のルーティング

3. 言語切替のルーティング
3. 言語切替のルーティング

ユーザーが言語を切り替えられるようにルートとコントローラを設定します。


Route::get('lang/{locale}', function ($locale) {
    if (in_array($locale, ['ja','en'])) {
        session(['locale' => $locale]);
    }
    return redirect()->back();
});

このルートでユーザーの希望言語をセッションに保存します。

4. ミドルウェアで言語設定

4. ミドルウェアで言語設定
4. ミドルウェアで言語設定

言語をセッションから読み込み、アプリ全体で反映させるためのミドルウェアを作成します。


public function handle($request, Closure $next)
{
    if (session()->has('locale')) {
        app()->setLocale(session('locale'));
    }
    return $next($request);
}

Kernel.phpにミドルウェアを登録することで全ページで言語が反映されます。

5. バリデーションメッセージの多言語化

5. バリデーションメッセージの多言語化
5. バリデーションメッセージの多言語化

フォームのバリデーションメッセージも多言語対応できます。resources/lang/ja/validation.phpen/validation.phpを編集します。


// 例:requiredのメッセージ
'required' => ':attribute は必須です。',

Bladeで@error('name')を使うと、言語ごとのエラーメッセージを表示できます。

6. ベストプラクティス

6. ベストプラクティス
6. ベストプラクティス
  • フォームラベルやプレースホルダーは必ず言語ファイルに分離する
  • バリデーションメッセージも多言語化して一貫性を保つ
  • 言語切替用のセッションとミドルウェアで全ページ対応を行う
  • 新しい言語を追加する場合は、既存の配列構造をコピーして翻訳するだけで簡単に拡張可能
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド