カテゴリ: 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で動的な翻訳文字列(パラメータ付き)を完全解説!初心者でもわかる国際化とローカリゼーション
New2
Symfony
Symfonyでテンプレートを使う方法!初心者向けTwig入門ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Laravel
Laravelのabort()関数でエラーを返す方法!初心者向け完全ガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelの環境別設定とは?local・productionの違いと.envの管理
No.2
Java&Spring記事人気No2
Laravel
Laravelでビューを表示する方法!Bladeテンプレートの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.4
Java&Spring記事人気No4
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.5
Java&Spring記事人気No5
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.6
Java&Spring記事人気No6
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ
No.7
Java&Spring記事人気No7
Symfony
Symfonyのローカリゼーションとは?i18n対応の基本を初心者向けに解説
No.8
Java&Spring記事人気No8
Symfony
Symfonyプロジェクトのディレクトリ構造を完全ガイド!初心者でもわかる仕組みをやさしく解説