カテゴリ: Symfony 更新日: 2025/12/10

Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本

Symfonyで翻訳(i18n)機能を使う方法
Symfonyで翻訳(i18n)機能を使う方法

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

生徒

「Symfonyで多言語対応のホームページを作ることはできますか?」

先生

「はい、Symfonyには翻訳(いわゆるi18n)という機能があって、簡単に言語を切り替えられるようにできます。」

生徒

「i18nってなんですか?難しそうですね…」

先生

「大丈夫です。i18nは『インターナショナライゼーション』の略で、多言語対応を意味します。初心者でも理解できるよう、ゆっくり解説していきましょう!」

1. Symfonyの翻訳(i18n)とは?

1. Symfonyの翻訳(i18n)とは?
1. Symfonyの翻訳(i18n)とは?

Symfony(シンフォニー)では、翻訳(Translation)機能を使って、英語・日本語など複数の言語に対応したアプリケーションを作ることができます。

i18n(アイ・エイティーン・エヌ)とは「internationalization(インターナショナライゼーション)」の略で、単語の最初の「i」と最後の「n」の間に18文字あることからこのように略されます。

Webサイトをいろいろな国の人が見ても使えるようにしたいときに、このi18n機能が使われます。

2. 翻訳ファイルの作成と命名ルール

2. 翻訳ファイルの作成と命名ルール
2. 翻訳ファイルの作成と命名ルール

Symfonyでは、言語ごとに翻訳ファイルを用意します。翻訳ファイルは、通常translations/フォルダに保存されます。

例えば、日本語の翻訳ファイルは次のように作ります。


# translations/messages.ja.yaml
greeting: 'こんにちは'
farewell: 'さようなら'

英語版はこうです:


# translations/messages.en.yaml
greeting: 'Hello'
farewell: 'Goodbye'

ファイル名の.ja.enは、それぞれの言語コードです。これはロケールと呼ばれ、日本語はja、英語はenです。

3. コントローラから翻訳する方法

3. コントローラから翻訳する方法
3. コントローラから翻訳する方法

Symfonyでは、コントローラ(Controller)という部分で表示する文章を翻訳できます。以下は翻訳を使う基本的な方法です。


// src/Controller/HelloController.php
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;

class HelloController extends AbstractController
{
    public function index(TranslatorInterface $translator): Response
    {
        $message = $translator->trans('greeting');

        return new Response($message);
    }
}

TranslatorInterfaceという翻訳の機能をコントローラに渡して、trans()メソッドを使って「greeting」というキーの言葉を表示します。

日本語の環境でアクセスすると「こんにちは」、英語環境では「Hello」となります。

4. Twigテンプレートで翻訳する

4. Twigテンプレートで翻訳する
4. Twigテンプレートで翻訳する

画面に表示される文字(HTML)も翻訳できます。SymfonyではテンプレートエンジンとしてTwig(トゥイッグ)を使います。Twigではtransフィルターを使って簡単に翻訳できます。


<!-- templates/hello/index.html.twig -->
<p>{{ 'greeting'|trans }}</p>
<p>{{ 'farewell'|trans }}</p>

このように書くことで、messages.ja.yamlなどに書かれた内容が反映されます。

5. 言語を切り替える方法(ロケールの変更)

5. 言語を切り替える方法(ロケールの変更)
5. 言語を切り替える方法(ロケールの変更)

表示言語を変更したいときは、Symfonyの設定でロケール(言語の指定)を切り替えます。ロケールとは、どの国の言葉を使うかを表すものです。

.envファイルでデフォルトのロケールを設定できます。


# .env
APP_LOCALE=ja

また、URLにパラメータをつけて切り替える方法もあります。


/hello?_locale=en

このようにすると、英語表示に切り替わります。これはルーティング_localeを含めることで機能します。

6. 翻訳ファイルの更新を反映するには?

6. 翻訳ファイルの更新を反映するには?
6. 翻訳ファイルの更新を反映するには?

翻訳ファイルを書き換えたあと、Symfonyのキャッシュに古い情報が残っていると新しい翻訳が反映されないことがあります。

その場合は、以下のコマンドでキャッシュをクリアしましょう。


php bin/console cache:clear

これで新しい翻訳がすぐに反映されるようになります。

7. 翻訳の対象を整理しておこう

7. 翻訳の対象を整理しておこう
7. 翻訳の対象を整理しておこう

翻訳に使うキー(例:greeting)は、自分で管理する必要があります。たくさん増えてくると分かりにくくなるので、ファイルを分けたり、わかりやすい名前をつけると良いでしょう。

たとえば:

  • messages.ja.yaml:全体的な共通翻訳
  • homepage.ja.yaml:トップページ専用
  • error.ja.yaml:エラーメッセージ専用

8. Symfony翻訳機能の特徴とポイント

8. Symfony翻訳機能の特徴とポイント
8. Symfony翻訳機能の特徴とポイント

Symfonyの翻訳機能は、コントローラでもTwigテンプレートでも簡単に使える点が特徴です。

特に以下の点が初心者におすすめです:

  • 設定ファイルを書くだけで使える
  • URLで言語を切り替えられる
  • 英語・日本語だけでなく他の言語にも対応可能

翻訳対応を早いうちから考えることで、あとからサイトを多言語にしたい時にも対応しやすくなります。

まとめ

まとめ
まとめ

Symfonyの翻訳機能は、国際化を考えたウェブアプリケーションづくりに欠かせない重要な要素であり、さまざまな国や地域の利用者に自然な表現で情報を届けるための基本的な仕組みです。翻訳ファイルをロケールごとに整理し、キーと文章を紐づけて管理する方法は、とても柔軟で扱いやすく、規模が大きくなるほどその利点が実感できます。特に、コントローラでのtrans()の利用や、Twigでのtransフィルターなどは、自然な形で翻訳を埋め込めるため、文章ごとに細かな制御ができ、読み手に合わせたコンテンツを無理なく提供できます。 また、ロケール切り替えの仕組みは、アプリケーションの動作を大きく変えることなく言語表示を変更できるため、多言語サイト運営における負担を軽減し、訪れる人々にとって使いやすい環境を整える一助となります。翻訳ファイルの構成を用途ごとに分割する工夫や、キャッシュクリアによる反映確認など、細やかな作業とともに全体像が整理されていく感覚は、Symfonyの開発に慣れていく上で非常に大きな収穫となるでしょう。 実際の開発では、文章量が多くなるほど管理の工夫が求められますが、Symfonyの翻訳仕組みはその負担を最小限に抑えるための道具がそろっており、世界中のユーザーに向けた情報発信に適した形を整えてくれます。ここでは振り返りも兼ねて、基本的な構文やテンプレート内での利用例とともに、より実務で使いやすいサンプルも整理しておきます。

サンプルプログラムで確認しておこう

以下は翻訳キーを複数ページで共有しながら、柔軟に文章を切り替えるための復習用サンプルです。


# translations/common.ja.yaml
header.title: '多言語サイトへようこそ'
header.subtitle: '翻訳機能で表示を切り替えることができます'

# translations/common.en.yaml
header.title: 'Welcome to the Multilingual Site'
header.subtitle: 'You can switch the language easily'

// src/Controller/PageController.php
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class PageController extends AbstractController
{
    public function header(TranslatorInterface $translator): Response
    {
        $title = $translator->trans('header.title');
        $subtitle = $translator->trans('header.subtitle');

        return $this->render('header.html.twig', [
            'title' => $title,
            'subtitle' => $subtitle
        ]);
    }
}

<!-- templates/header.html.twig -->
<h1 class="fw-bold">{{ title }}</h1>
<p class="text-muted">{{ subtitle }}</p>

このように、翻訳キーを用途ごとに用意しておくことで、複数の画面で自然な文章表現を保ちながら統一感のある表示ができます。ロケールを切り替えるだけで全体の表示が変わるため、利用する人の環境に合わせたコンテンツをスムーズに届けられます。文章管理をわかりやすく保つためには、ページ単位・役割単位で翻訳ファイルを構成していく工夫が効果的です。

先生と生徒の振り返り会話

生徒

「今日の翻訳機能の話、実際にやってみると仕組みがよくわかりました。特に翻訳ファイルが言語ごとに分かれているのは整理しやすいですね。」

先生

「その感覚はとても大切ですよ。翻訳キーをしっかり管理すると、あとから文章を増やすときにも迷わず対応できますからね。」

生徒

「Twigでの翻訳も思ったより自然に書けるので、実際の画面づくりでも役立てやすいと思いました。」

先生

「ええ、テンプレート側で扱えるのは大きな強みです。文章の調整もしやすくなりますよ。」

生徒

「ロケール切り替えも意外と簡単でした。世界の人に見てもらえるホームページが作れそうでわくわくします。」

先生

「その気持ちを忘れないように、少しずつ応用へ挑戦していきましょう。翻訳の仕組みは使うほど理解が深まりますよ。」

生徒

「はい!また別のページでも試してみます。ありがとうございました!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Symfonyの翻訳機能i18nとは何ですか?初心者でも使えますか?

Symfonyの翻訳機能i18nとは、多言語対応を行うための仕組みで、英語や日本語など複数の言語でメッセージを表示できる機能です。初心者でも翻訳ファイルを用意するだけで簡単に使えます。
関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド