Laravelで多言語対応フォームを作成する方法
先生と生徒の会話形式で理解しよう
生徒
「Laravelで作ったフォームを日本語だけでなく英語や他の言語でも使えるようにしたいです。」
先生
「それならLaravelの多言語機能であるローカライゼーションを使うと便利です。」
生徒
「ローカライゼーションって何ですか?」
先生
「アプリケーション内の文字列を複数の言語に対応させる仕組みです。これで同じフォームを使ってユーザーが選んだ言語で表示できます。」
1. 言語ファイルの準備
Laravelではresources/langディレクトリに言語ごとのフォルダを作成します。例えば日本語と英語の場合、jaとenを作ります。
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での表示
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. 言語切替のルーティング
ユーザーが言語を切り替えられるようにルートとコントローラを設定します。
Route::get('lang/{locale}', function ($locale) {
if (in_array($locale, ['ja','en'])) {
session(['locale' => $locale]);
}
return redirect()->back();
});
このルートでユーザーの希望言語をセッションに保存します。
4. ミドルウェアで言語設定
言語をセッションから読み込み、アプリ全体で反映させるためのミドルウェアを作成します。
public function handle($request, Closure $next)
{
if (session()->has('locale')) {
app()->setLocale(session('locale'));
}
return $next($request);
}
Kernel.phpにミドルウェアを登録することで全ページで言語が反映されます。
5. バリデーションメッセージの多言語化
フォームのバリデーションメッセージも多言語対応できます。resources/lang/ja/validation.phpやen/validation.phpを編集します。
// 例:requiredのメッセージ
'required' => ':attribute は必須です。',
Bladeで@error('name')を使うと、言語ごとのエラーメッセージを表示できます。
6. ベストプラクティス
- フォームラベルやプレースホルダーは必ず言語ファイルに分離する
- バリデーションメッセージも多言語化して一貫性を保つ
- 言語切替用のセッションとミドルウェアで全ページ対応を行う
- 新しい言語を追加する場合は、既存の配列構造をコピーして翻訳するだけで簡単に拡張可能