Symfonyで言語別ルーティングを完全解説!初心者でもわかるロケール付きURL設計
生徒
「Webサイトを日本語と英語で切り替えたいんですが、URLはどうなるんですか?」
先生
「Symfonyでは、URLの中に言語情報を入れる“ロケール付きURL”で管理できます。」
生徒
「ロケールって何ですか?難しそうです…」
先生
「大丈夫ですよ。言語を表す短い記号だと思えばOKです。順番に見ていきましょう。」
1. Symfonyのルーティングとは?
Symfonyのルーティングとは、ブラウザからアクセスされたURLと、プログラムの処理を結びつける仕組みです。たとえば「/about」というURLにアクセスしたら、自己紹介ページを表示する、といった対応表のようなものです。
初心者の方は、ルーティングを住所と目的地を結ぶ地図だと考えると分かりやすいです。住所がURL、目的地がプログラムの処理です。
2. ロケールとは何かをやさしく解説
ロケール(locale)とは、言語や地域を表す情報のことです。日本語なら「ja」、英語なら「en」といった短い文字で表します。
Symfonyでは、このロケールをURLに含めることで、「/ja/page」「/en/page」のように言語別のページを作れます。これを言語別ルーティングや多言語対応URLと呼びます。
3. ロケール付きURLの基本構造
ロケール付きURLは、とてもシンプルな形をしています。URLの最初に言語コードを入れるだけです。
/ja/
/en/
/fr/
これだけで、「どの言語で表示するか」をSymfonyが判断できます。まるで本の表紙に「日本語版」「英語版」と書いてあるようなイメージです。
4. routes.yamlでロケール付きルーティングを書く
Symfonyでは、routes.yamlという設定ファイルにルーティングを書きます。まずは、ロケールをURLに含めた基本形を見てみましょう。
home:
path: /{_locale}/
controller: App\Controller\HomeController::index
{_locale}の部分が、言語を受け取る場所です。ここに「ja」や「en」が入ります。
5. 対応する言語を制限する方法
どんな文字でもロケールとして受け取れると困る場合があります。そのときは、使える言語を指定します。
home:
path: /{_locale}/
controller: App\Controller\HomeController::index
requirements:
_locale: ja|en
これで、日本語と英語だけが有効になります。不要な言語を防ぐ安全装置のような役割です。
6. デフォルト言語を設定する
「言語が指定されていない場合は日本語にしたい」というケースもよくあります。その場合は、デフォルト値を設定します。
home:
path: /{_locale}/
controller: App\Controller\HomeController::index
defaults:
_locale: ja
これで「/」にアクセスした場合でも、日本語ページが表示されます。
7. コントローラーでロケールを使う
コントローラーでは、現在のロケールを簡単に取得できます。表示する文章を切り替えるときに使います。
public function index(Request $request)
{
$locale = $request->getLocale();
return $this->render('home.html.twig', [
'locale' => $locale
]);
}
これで、今どの言語で表示しているかが分かります。
8. SEOに強い多言語URL設計の考え方
ロケール付きURLは、SEO対策にも有効です。検索エンジンは「/ja/」と「/en/」を別ページとして認識します。
そのため、Symfony 多言語対応、ロケール付きURL、言語別ルーティングといったキーワードで検索されやすくなります。
URLで言語が分かる構造は、ユーザーにも検索エンジンにも親切な設計です。