カテゴリ: 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といったキーワードで検索される可能性が高まります。

カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.2
Java&Spring記事人気No2
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.3
Java&Spring記事人気No3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
No.4
Java&Spring記事人気No4
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.5
Java&Spring記事人気No5
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.6
Java&Spring記事人気No6
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniter(コードイグナイター)入門!どんな開発案件に向いている?利用シーン別解説
No.8
Java&Spring記事人気No8
Laravel
Laravelのview()関数の使い方を完全ガイド!初心者でもわかるBladeテンプレート表示と画面作成