カテゴリ: 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
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.8
Java&Spring記事人気No8
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方