カテゴリ: Symfony 更新日: 2026/03/01

Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本

Symfonyでバリデーションメッセージを多言語対応する方法
Symfonyでバリデーションメッセージを多言語対応する方法

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

生徒

「Symfonyでフォームのエラーメッセージを日本語で表示させたいんですが、英語のまま出てきます…」

先生

「Symfonyではバリデーションメッセージを多言語対応させる仕組みがあるので、日本語にも対応できますよ。」

生徒

「それって、外国語のユーザーにも自動で言語を切り替えて表示できるってことですか?」

先生

「そのとおりです。Symfonyの翻訳機能を使えば、1つのアプリケーションで複数の言語に対応できますよ。早速やってみましょう!」

1. 多言語対応(国際化)とは?

1. 多言語対応(国際化)とは?
1. 多言語対応(国際化)とは?

多言語対応とは、Webサイトやアプリを利用するユーザーの言語設定(国や地域)に合わせて、画面に表示されるメッセージやテキストを自動的に切り替える仕組みのことです。ITの専門用語では、国際化(Internationalization)や、その略称であるi18n(アイ・エイティーン・エヌ)とも呼ばれます。

例えば、入力フォームで「名前」が未入力だった場合、ユーザーの環境に応じて以下のように出し分けを行います。

  • 日本語設定のユーザー: 「この項目は必須です」
  • 英語設定のユーザー: 「This field is required」

Symfonyには、この切り替えを非常に効率的に行えるTranslationコンポーネントという強力なツールが標準で備わっています。これを使うことで、プログラム本体のコードを書き換えることなく、翻訳データが入ったファイル(辞書のようなもの)を準備するだけで、世界中のユーザーに対応したアプリを作ることが可能になります。

イメージしてみよう

多言語対応は、アプリの中に「通訳さん」を雇うようなものです。プログラムが「エラーだよ!」と叫ぶと、通訳さんがユーザーの言語を確認して、適切な翻訳カードをサッと提示してくれる。そんな役割をSymfonyの機能が担ってくれます。

プログラミング未経験の方でも、「どの言語のときに、どの言葉を表示するか」というルールを1つずつ決めていくだけなので、難しく考える必要はありません。次の章から、具体的な設定方法を一緒に見ていきましょう。

2. 翻訳ファイルを用意しよう

2. 翻訳ファイルを用意しよう
2. 翻訳ファイルを用意しよう

Symfonyでは、翻訳メッセージは translations フォルダに置く「YAMLファイル」で管理されます。

バリデーションメッセージ用には validators.{言語}.yaml という名前にします。

たとえば日本語にしたいなら、次のようなファイルを作成します。


# translations/validators.ja.yaml
Symfony:
  This value should not be blank: 'この項目は必須です'
  This value is not a valid email address: '有効なメールアドレスを入力してください'

同様に、英語用のファイルも用意しておくと切り替えができます。


# translations/validators.en.yaml
Symfony:
  This value should not be blank: 'This field is required'
  This value is not a valid email address: 'Please enter a valid email address'

3. ロケール(言語設定)を変更する

3. ロケール(言語設定)を変更する
3. ロケール(言語設定)を変更する

Symfonyでは、使用する言語を ロケール(locale) という設定で決めます。

.env ファイルで、以下のように初期設定します。


APP_LOCALE=ja

これで、アプリケーション全体の言語が「日本語」になります。

4. コントローラやセッションで動的に切り替える

4. コントローラやセッションで動的に切り替える
4. コントローラやセッションで動的に切り替える

ユーザーがサイト上で言語を切り替えられるようにしたい場合は、コントローラでロケールを動的に変更することもできます。


use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

public function changeLanguage(string $locale, Request $request, SessionInterface $session)
{
    $session->set('_locale', $locale);
    return $this->redirectToRoute('homepage');
}

このようにすれば、「日本語」「英語」など、ボタンで言語を切り替えることも可能です。

5. 自作メッセージも多言語対応できる

5. 自作メッセージも多言語対応できる
5. 自作メッセージも多言語対応できる

バリデーションアノテーションで、メッセージキーを指定して、翻訳ファイルで対応させる方法もあります。


#[Assert\NotBlank(message: 'user.name.required')]
private string $name;

# translations/validators.ja.yaml
user:
  name:
    required: '名前を入力してください'

# translations/validators.en.yaml
user:
  name:
    required: 'Please enter your name'

この方法なら、複雑なシステムでもメッセージの管理がしやすくなります。

6. 実行して表示されるエラーメッセージを確認しよう

6. 実行して表示されるエラーメッセージを確認しよう
6. 実行して表示されるエラーメッセージを確認しよう

最後に、バリデーションを実行して、指定した言語でエラーメッセージが表示されるか確認しましょう。


$errors = $validator->validate($user);

foreach ($errors as $error) {
    echo $error->getMessage();
}

名前を入力してください

ロケールがenなら


Please enter your name

といった具合に、言語が自動で切り替わります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyでテンプレートを使う方法!初心者向けTwig入門ガイド
New2
Symfony
Symfonyのルーティングの基本を完全ガイド!YAML・PHP・アノテーションの違いもわかりやすく解説
New3
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New4
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.6
Java&Spring記事人気No6
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方