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

Symfonyで複数言語に対応するルーティングを設定する方法|初心者向け国際化(i18n)完全ガイド

Symfonyで複数言語に対応するルーティングを設定する方法
Symfonyで複数言語に対応するルーティングを設定する方法

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

生徒

「日本語と英語でURLを切り替えるサイトって、どうやって作っているんですか?」

先生

「Symfonyでは、ルーティングに言語情報を持たせることで、簡単に多言語対応ができます」

生徒

「プログラミングをやったことがなくても理解できますか?」

先生

「大丈夫です。URLを日本語用と英語用に分けるイメージから説明していきましょう」

1. Symfonyのルーティングとは?

1. Symfonyのルーティングとは?
1. Symfonyのルーティングとは?

Symfonyのルーティングとは、「このURLにアクセスされたら、この処理を実行する」という道案内の仕組みです。たとえば、/aboutにアクセスしたら「会社紹介ページ」を表示する、といった対応付けを行います。

パソコン初心者の方は、ルーティングを住所録のように考えてください。住所(URL)を見て、どの家(ページ)に行くかを決めているイメージです。

2. 複数言語対応(国際化・ローカリゼーション)とは?

2. 複数言語対応(国際化・ローカリゼーション)とは?
2. 複数言語対応(国際化・ローカリゼーション)とは?

国際化(i18n)とは、最初から多言語に対応できる仕組みを作ることです。ローカリゼーション(l10n)は、日本語や英語など、実際の言語を当てはめる作業を指します。

Symfonyでは、この国際化とローカリゼーションを組み合わせて、「URLに言語を含める」方法がよく使われます。これにより、検索エンジンにもやさしい多言語サイトを作れます。

3. ロケール(locale)という考え方

3. ロケール(locale)という考え方
3. ロケール(locale)という考え方

ロケールとは、「どの言語・地域向けか」を表す情報です。日本語ならja、英語ならenがよく使われます。

Symfonyの複数言語ルーティングでは、このロケールをURLに含めて、/ja//en/のように切り替えます。

4. URLに言語を含めた基本的なルーティング設定

4. URLに言語を含めた基本的なルーティング設定
4. URLに言語を含めた基本的なルーティング設定

まずは、一番シンプルな例です。URLの先頭に言語コードを入れることで、表示言語を切り替えます。


#[Route('/{_locale}/hello', name: 'hello_page')]
public function hello(): Response
{
    return new Response('こんにちは / Hello');
}

この設定により、/ja/hello/en/helloのどちらでも同じページにアクセスできます。SymfonyがURLからロケールを読み取ってくれます。

5. デフォルト言語を設定する方法

5. デフォルト言語を設定する方法
5. デフォルト言語を設定する方法

毎回言語を指定するのが大変な場合は、デフォルト言語を決めておくと便利です。設定ファイルで、最初に使う言語を指定できます。


framework:
    default_locale: 'ja'

これで、言語指定がない場合でも日本語として扱われます。初心者の方は、「最初に表示する言語を決めている」と覚えてください。

6. 言語ごとにURLを分ける実践例

6. 言語ごとにURLを分ける実践例
6. 言語ごとにURLを分ける実践例

実際のWebサイトでは、トップページも言語別に分けることが多いです。


#[Route('/{_locale}/', name: 'top_page')]
public function index(): Response
{
    return new Response('トップページ');
}

このようにすると、/ja/は日本語トップ、/en/は英語トップとして扱えます。検索エンジンにも「別の言語ページ」として認識されやすくなります。

7. 対応する言語を制限する方法

7. 対応する言語を制限する方法
7. 対応する言語を制限する方法

対応していない言語が指定されるのを防ぐために、使用できる言語を制限できます。


#[Route(
    '/{_locale}/contact',
    name: 'contact_page',
    requirements: ['_locale' => 'ja|en']
)]
public function contact(): Response
{
    return new Response('お問い合わせ');
}

この設定では、日本語と英語以外のURLはエラーになります。初心者の方は、「使える言語を決めている」と考えると分かりやすいです。

8. 複数言語ルーティングがSEOに強い理由

8. 複数言語ルーティングがSEOに強い理由
8. 複数言語ルーティングがSEOに強い理由

URLに言語を含めると、検索エンジンは「このページは日本語用」「このページは英語用」と判断しやすくなります。その結果、Symfonyで作った多言語サイトが、Google検索でも見つかりやすくなります。

特に、Symfony 多言語対応Symfony ルーティング 国際化Symfony i18nといったキーワードで検索される可能性が高まります。

カテゴリの一覧へ
新着記事
New2
Symfony
Symfonyのコントローラで404・403エラーを制御する方法を初心者向けに解説!
New3
Symfony
Symfonyで独自イベント(カスタムイベント)を作成する方法をやさしく解説
New4
Laravel
Laravel Sailとは?初心者でもわかるDocker環境構築と使い方の基本
人気記事
No.2
Java&Spring記事人気No2
Laravel
LaravelでReactコンポーネントを組み込む方法完全ガイド!JSX対応でフロントエンド連携を学ぼう
No.3
Java&Spring記事人気No3
CodeIgniter
CodeIgniterのCSRF対策を完全解説!フォーム処理のセキュリティ手順
No.4
Java&Spring記事人気No4
Laravel
Laravelのリレーションを使った検索条件の書き方(whereHas)
No.5
Java&Spring記事人気No5
Symfony
Symfonyでバリデーションをコントローラに組み込む方法を徹底解説!初心者にもやさしい入力チェックの基本
No.6
Java&Spring記事人気No6
Laravel
LaravelのRESTfulコントローラ設計のベストプラクティスを初心者向けにわかりやすく解説
No.7
Java&Spring記事人気No7
Laravel
Laravelのold()関数でフォーム再表示時に値を保持する方法
No.8
Java&Spring記事人気No8
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ