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

Symfonyで動的な翻訳文字列(パラメータ付き)を完全解説!初心者でもわかる国際化とローカリゼーション

Symfonyで動的な翻訳文字列(パラメータ付き)を扱う方法
Symfonyで動的な翻訳文字列(パラメータ付き)を扱う方法

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

生徒

「Symfonyで日本語と英語を切り替えるのは何となく分かったんですが、名前とか数字を入れ替える翻訳はどうするんですか?」

先生

「Symfonyでは、パラメータ付きの翻訳文字列を使うことで、名前や数値を自由に差し替えられます。」

生徒

「文章の一部だけ変えられるってことですか?」

先生

「その通りです。掲示板や会員サイトでよく使われる重要な仕組みなので、順番に見ていきましょう。」

1. Symfonyの動的な翻訳文字列とは?

1. Symfonyの動的な翻訳文字列とは?
1. Symfonyの動的な翻訳文字列とは?

Symfonyの国際化(i18n)ローカリゼーションでは、文章を言語ごとに切り替えるだけでなく、文章の中に変数のような値を埋め込むことができます。これを動的な翻訳文字列パラメータ付き翻訳と呼びます。

たとえば「こんにちは、〇〇さん」という文章で、〇〇の部分だけをユーザー名に置き換えたい場合があります。このような場面で、動的な翻訳文字列が活躍します。

2. 翻訳ファイルにプレースホルダーを書く

2. 翻訳ファイルにプレースホルダーを書く
2. 翻訳ファイルにプレースホルダーを書く

まずは翻訳ファイルに、差し替え用の目印を書きます。この目印をプレースホルダーと呼びます。Symfonyでは、%name%のようにパーセント記号で囲んで書くのが基本です。


# translations/messages.ja.yaml
greeting.message: "こんにちは、%name%さん"

この状態では、まだ%name%は文字のままです。後からプログラム側で値を渡して完成させます。

3. コントローラーでパラメータを渡す方法

3. コントローラーでパラメータを渡す方法
3. コントローラーでパラメータを渡す方法

次に、Symfonyのコントローラーから翻訳を呼び出します。コントローラーとは、画面表示の指示を出す場所だと考えてください。


$message = $translator->trans(
    'greeting.message',
    ['%name%' => '太郎']
);

ここでは、%name%の部分に「太郎」という文字を渡しています。これにより、翻訳結果は完成した文章になります。


こんにちは、太郎さん

4. Twigテンプレートで使う場合

4. Twigテンプレートで使う場合
4. Twigテンプレートで使う場合

Symfonyでは、画面表示にTwig(トゥイッグ)というテンプレートを使います。Twigでも、同じようにパラメータ付き翻訳を扱えます。


{{ 'greeting.message'|trans({'%name%': '花子'}) }}

このように書くと、テンプレート上で直接名前を差し替えた翻訳が表示されます。HTMLの中に自然に組み込めるのが特徴です。

5. 数字や回数を埋め込む翻訳例

5. 数字や回数を埋め込む翻訳例
5. 数字や回数を埋め込む翻訳例

動的な翻訳は、名前だけでなく数字にも使えます。たとえば「あなたは3回ログインしました」というような文章です。


login.count: "あなたは%count%回ログインしました"

$message = $translator->trans(
    'login.count',
    ['%count%' => 3]
);

あなたは3回ログインしました

この仕組みを使うことで、管理画面や通知メッセージも柔軟に多言語対応できます。

6. 複数のパラメータを使う方法

6. 複数のパラメータを使う方法
6. 複数のパラメータを使う方法

プレースホルダーは1つだけでなく、複数使うことも可能です。文章の中にいくつも変数を入れたいときに便利です。


order.info: "%name%さんの注文は%price%円です"

$message = $translator->trans(
    'order.info',
    [
        '%name%' => '次郎',
        '%price%' => 1200
    ]
);

次郎さんの注文は1200円です

7. 動的翻訳を使うときの注意点

7. 動的翻訳を使うときの注意点
7. 動的翻訳を使うときの注意点

パラメータ付き翻訳を使うときは、翻訳ファイル側とプログラム側で名前を完全に一致させる必要があります。%name%と%username%のように少しでも違うと、置き換えが行われません。

また、文章の形は言語ごとに違うため、日本語と英語でプレースホルダーの順番が変わっても問題ないように設計されています。これがSymfonyの国際化が強い理由の一つです。

8. 初心者でも安心して使える理由

8. 初心者でも安心して使える理由
8. 初心者でも安心して使える理由

Symfonyの動的な翻訳文字列は、「文章の型」と「差し込む値」を分けて考えられる仕組みです。これは、紙の案内文に名前を書き込む感覚に近く、プログラミング未経験の人でも理解しやすい考え方です。

一度覚えてしまえば、日本語サイトを英語サイトに変えるときも、文章を丸ごと書き直す必要がなくなります。結果として、保守しやすく、長く使えるWebアプリケーションを作れるようになります。

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