Symfonyで動的な翻訳文字列(パラメータ付き)を完全解説!初心者でもわかる国際化とローカリゼーション
生徒
「Symfonyで日本語と英語を切り替えるのは何となく分かったんですが、名前とか数字を入れ替える翻訳はどうするんですか?」
先生
「Symfonyでは、パラメータ付きの翻訳文字列を使うことで、名前や数値を自由に差し替えられます。」
生徒
「文章の一部だけ変えられるってことですか?」
先生
「その通りです。掲示板や会員サイトでよく使われる重要な仕組みなので、順番に見ていきましょう。」
1. Symfonyの動的な翻訳文字列とは?
Symfonyの国際化(i18n)とローカリゼーションでは、文章を言語ごとに切り替えるだけでなく、文章の中に変数のような値を埋め込むことができます。これを動的な翻訳文字列やパラメータ付き翻訳と呼びます。
たとえば「こんにちは、〇〇さん」という文章で、〇〇の部分だけをユーザー名に置き換えたい場合があります。このような場面で、動的な翻訳文字列が活躍します。
2. 翻訳ファイルにプレースホルダーを書く
まずは翻訳ファイルに、差し替え用の目印を書きます。この目印をプレースホルダーと呼びます。Symfonyでは、%name%のようにパーセント記号で囲んで書くのが基本です。
# translations/messages.ja.yaml
greeting.message: "こんにちは、%name%さん"
この状態では、まだ%name%は文字のままです。後からプログラム側で値を渡して完成させます。
3. コントローラーでパラメータを渡す方法
次に、Symfonyのコントローラーから翻訳を呼び出します。コントローラーとは、画面表示の指示を出す場所だと考えてください。
$message = $translator->trans(
'greeting.message',
['%name%' => '太郎']
);
ここでは、%name%の部分に「太郎」という文字を渡しています。これにより、翻訳結果は完成した文章になります。
こんにちは、太郎さん
4. Twigテンプレートで使う場合
Symfonyでは、画面表示にTwig(トゥイッグ)というテンプレートを使います。Twigでも、同じようにパラメータ付き翻訳を扱えます。
{{ 'greeting.message'|trans({'%name%': '花子'}) }}
このように書くと、テンプレート上で直接名前を差し替えた翻訳が表示されます。HTMLの中に自然に組み込めるのが特徴です。
5. 数字や回数を埋め込む翻訳例
動的な翻訳は、名前だけでなく数字にも使えます。たとえば「あなたは3回ログインしました」というような文章です。
login.count: "あなたは%count%回ログインしました"
$message = $translator->trans(
'login.count',
['%count%' => 3]
);
あなたは3回ログインしました
この仕組みを使うことで、管理画面や通知メッセージも柔軟に多言語対応できます。
6. 複数のパラメータを使う方法
プレースホルダーは1つだけでなく、複数使うことも可能です。文章の中にいくつも変数を入れたいときに便利です。
order.info: "%name%さんの注文は%price%円です"
$message = $translator->trans(
'order.info',
[
'%name%' => '次郎',
'%price%' => 1200
]
);
次郎さんの注文は1200円です
7. 動的翻訳を使うときの注意点
パラメータ付き翻訳を使うときは、翻訳ファイル側とプログラム側で名前を完全に一致させる必要があります。%name%と%username%のように少しでも違うと、置き換えが行われません。
また、文章の形は言語ごとに違うため、日本語と英語でプレースホルダーの順番が変わっても問題ないように設計されています。これがSymfonyの国際化が強い理由の一つです。
8. 初心者でも安心して使える理由
Symfonyの動的な翻訳文字列は、「文章の型」と「差し込む値」を分けて考えられる仕組みです。これは、紙の案内文に名前を書き込む感覚に近く、プログラミング未経験の人でも理解しやすい考え方です。
一度覚えてしまえば、日本語サイトを英語サイトに変えるときも、文章を丸ごと書き直す必要がなくなります。結果として、保守しやすく、長く使えるWebアプリケーションを作れるようになります。