Symfonyで複数言語に対応するルーティングを設定する方法|初心者向け国際化(i18n)完全ガイド
生徒
「日本語と英語でURLを切り替えるサイトって、どうやって作っているんですか?」
先生
「Symfonyでは、ルーティングに言語情報を持たせることで、簡単に多言語対応ができます」
生徒
「プログラミングをやったことがなくても理解できますか?」
先生
「大丈夫です。URLを日本語用と英語用に分けるイメージから説明していきましょう」
1. Symfonyのルーティングとは?
Symfonyのルーティングとは、「このURLにアクセスされたら、この処理を実行する」という道案内の仕組みです。たとえば、/aboutにアクセスしたら「会社紹介ページ」を表示する、といった対応付けを行います。
パソコン初心者の方は、ルーティングを住所録のように考えてください。住所(URL)を見て、どの家(ページ)に行くかを決めているイメージです。
2. 複数言語対応(国際化・ローカリゼーション)とは?
国際化(i18n)とは、最初から多言語に対応できる仕組みを作ることです。ローカリゼーション(l10n)は、日本語や英語など、実際の言語を当てはめる作業を指します。
Symfonyでは、この国際化とローカリゼーションを組み合わせて、「URLに言語を含める」方法がよく使われます。これにより、検索エンジンにもやさしい多言語サイトを作れます。
3. ロケール(locale)という考え方
ロケールとは、「どの言語・地域向けか」を表す情報です。日本語ならja、英語ならenがよく使われます。
Symfonyの複数言語ルーティングでは、このロケールをURLに含めて、/ja/や/en/のように切り替えます。
4. URLに言語を含めた基本的なルーティング設定
まずは、一番シンプルな例です。URLの先頭に言語コードを入れることで、表示言語を切り替えます。
#[Route('/{_locale}/hello', name: 'hello_page')]
public function hello(): Response
{
return new Response('こんにちは / Hello');
}
この設定により、/ja/helloと/en/helloのどちらでも同じページにアクセスできます。SymfonyがURLからロケールを読み取ってくれます。
5. デフォルト言語を設定する方法
毎回言語を指定するのが大変な場合は、デフォルト言語を決めておくと便利です。設定ファイルで、最初に使う言語を指定できます。
framework:
default_locale: 'ja'
これで、言語指定がない場合でも日本語として扱われます。初心者の方は、「最初に表示する言語を決めている」と覚えてください。
6. 言語ごとにURLを分ける実践例
実際のWebサイトでは、トップページも言語別に分けることが多いです。
#[Route('/{_locale}/', name: 'top_page')]
public function index(): Response
{
return new Response('トップページ');
}
このようにすると、/ja/は日本語トップ、/en/は英語トップとして扱えます。検索エンジンにも「別の言語ページ」として認識されやすくなります。
7. 対応する言語を制限する方法
対応していない言語が指定されるのを防ぐために、使用できる言語を制限できます。
#[Route(
'/{_locale}/contact',
name: 'contact_page',
requirements: ['_locale' => 'ja|en']
)]
public function contact(): Response
{
return new Response('お問い合わせ');
}
この設定では、日本語と英語以外のURLはエラーになります。初心者の方は、「使える言語を決めている」と考えると分かりやすいです。
8. 複数言語ルーティングがSEOに強い理由
URLに言語を含めると、検索エンジンは「このページは日本語用」「このページは英語用」と判断しやすくなります。その結果、Symfonyで作った多言語サイトが、Google検索でも見つかりやすくなります。
特に、Symfony 多言語対応、Symfony ルーティング 国際化、Symfony i18nといったキーワードで検索される可能性が高まります。