カテゴリ: Laravel 更新日: 2026/06/18

Laravelのローカリゼーション完全ガイド!動的翻訳文字列と置換の使い方

Laravelで動的翻訳文字列を使う方法(置換対応)
Laravelで動的翻訳文字列を使う方法(置換対応)

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

生徒

「Laravelで作ったサイトを、英語や日本語に切り替えたいのですが、メッセージの中にユーザーの名前を入れることはできますか?」

先生

「それはローカリゼーションの動的翻訳文字列という機能を使えば解決しますよ。特定の場所に、後から好きな文字を当てはめることができるんです。」

生徒

「名前や数字が状況によって変わる場合でも、多言語対応できるということですね!どうやって設定するんですか?」

先生

「では、初心者の方でも分かりやすいように、一歩ずつ解説していきますね!」

1. ローカリゼーションと動的翻訳とは?

1. ローカリゼーションと動的翻訳とは?
1. ローカリゼーションと動的翻訳とは?

プログラミングの世界でローカリゼーション(Localization)とは、作成したWebサイトやアプリケーションを、世界中のさまざまな言語や地域に合わせて表示を変える仕組みのことを指します。略して「L10n」と呼ばれることもあります。Laravelには、この多言語対応を簡単に行うための機能が標準で備わっています。

通常、固定の文章であればあらかじめ翻訳を用意しておけば良いのですが、実際のアプリでは「ようこそ、〇〇さん!」のように、一部の文字が状況によって変化することがよくあります。このように、文章の一部をプログラムから渡された値に置き換えて表示する仕組みを、動的翻訳文字列、またはプレースホルダ(置換)と呼びます。

2. 言語ファイルの準備とプレースホルダの書き方

2. 言語ファイルの準備とプレースホルダの書き方
2. 言語ファイルの準備とプレースホルダの書き方

まずは、翻訳の元となる「言葉の辞書」を作りましょう。Laravelでは、langというフォルダの中に、言語ごとの設定ファイルを保存します。日本語ならja、英語ならenというフォルダを作ります。パソコンの操作に慣れていない方でも、フォルダの中に「言葉のリスト」を並べたファイルを作ると考えれば簡単です。

動的な値を入れたい場所には、コロン(:)を頭に付けたキーワードを書きます。これが「後でここに文字が入るよ」という目印になります。これをプレースホルダと言います。例えば、:nameと書けば、そこが名前を入れる予約席になります。


// resources/lang/ja/messages.php の中身
return [
    'welcome' => 'ようこそ、:nameさん!',
    'status' => '現在は :count 件の通知があります。',
];

この設定ファイルでは、左側に「プログラムで使うための合言葉(キー)」を書き、右側に「実際に表示したい文章」を書きます。:nameの部分が、後ほどプログラムによって書き換えられる魔法の言葉です。

3. プログラムから値を渡して表示する方法

3. プログラムから値を渡して表示する方法
3. プログラムから値を渡して表示する方法

設定した辞書を画面に呼び出すには、Laravelの便利な命令である__(アンダーバー二つ)という関数を使います。この関数の中に、先ほど決めた「合言葉」と、実際に当てはめたい「具体的な文字」をセットにして渡します。

パソコン初心者の方にとって「関数」という言葉は難しく感じるかもしれませんが、これは「何かを頼むためのボタン」のようなものです。「この合言葉の文章を出して!ちなみに、名前の部分はこの人の名前でね!」とお願いするイメージです。


// PHPプログラムの中で翻訳を表示する例
$userName = '田中';
echo __('messages.welcome', ['name' => $userName]);

実行結果は以下のようになります。


ようこそ、田中さん!

ここで、['name' => $userName]という部分は配列と呼ばれる書き方です。プレースホルダの:nameに対して、変数に入っている「田中」という値を紐付けています。矢印のような記号は、左の場所に右の内容を入れるという約束事です。

4. 複数の値を同時に置き換える応用テクニック

4. 複数の値を同時に置き換える応用テクニック
4. 複数の値を同時に置き換える応用テクニック

動的な値は一つだけとは限りません。一つの文章の中に、名前と日付、あるいは数量など、複数の情報を入れたい場合も多々あります。その場合は、配列の中に複数のセットを並べるだけで対応できます。

例えば、ネットショッピングのサイトで「〇〇様、合計金額は△△円です」と表示したい場合、辞書ファイルには二つのプレースホルダを用意します。プログラム側でも、二つの値を準備して渡してあげます。これにより、複雑なメッセージも多言語で柔軟に管理できるようになります。


// 辞書ファイルの設定例
// 'order_msg' => ':user様、注文合計は :price 円です。'

$user = '佐藤';
$total = 5000;

echo __('messages.order_msg', [
    'user' => $user,
    'price' => $total,
]);

実行結果を見てみましょう。


佐藤様、注文合計は 5000 円です。

このように、カンマ(,)で区切って情報を増やすことで、いくつでも値を差し替えることが可能です。これは「置換対応」という技術の基本であり、非常に強力な機能です。

5. HTMLの画面(Bladeテンプレート)で使う方法

5. HTMLの画面(Bladeテンプレート)で使う方法
5. HTMLの画面(Bladeテンプレート)で使う方法

Laravelで画面を作る際は、Blade(ブレイド)という仕組みを使います。ここではPHPの命令をより簡単に書くための専用の記法が用意されています。二重の波括弧{{ }}を使うことで、翻訳された文字を安全に画面に表示できます。

Webサイトの制作において、プログラムのコードと見た目のデザインを分けることは非常に重要です。Bladeを使うことで、デザイン担当者にとっても見やすく、かつ多言語対応がバッチリ行えるコードを書くことができます。初心者の方は、まずはこの波括弧の書き方に慣れていきましょう。


<div class="alert alert-info">
    {{ __('messages.welcome', ['name' => '鈴木']) }}
</div>
<p>
    {{ __('messages.status', ['count' => 5]) }}
</p>

実行結果はブラウザ上でこのように見えます。


ようこそ、鈴木さん!
現在は 5 件の通知があります。

__関数の役割は、ただ翻訳するだけでなく、指定した値を正しく埋め込んでくれる便利な翻訳機だと考えてください。これだけで、世界中のユーザーにパーソナライズされたメッセージを届けることができます。

6. 大文字への自動変換など高度なプレースホルダ

6. 大文字への自動変換など高度なプレースホルダ
6. 大文字への自動変換など高度なプレースホルダ

英語などの言語に対応する場合、名前の最初の文字を大文字にしたい、あるいはすべて大文字で強調したいという要望があります。Laravelの翻訳機能は、プレースホルダの書き方を変えるだけで、自動的に文字の形式(大文字・小文字)を調整してくれる賢い機能を持っています。

例えば、辞書ファイルで:NAMEとすべて大文字で書くと、渡した値もすべて大文字に変換されます。:Nameと書けば、最初の文字だけが大文字になります。これは英語対応をする際に非常に役立つ機能です。日本語ではあまり意識しませんが、グローバルなアプリを作る上では欠かせない知識です。


// 辞書ファイル (en/messages.php)
// 'greet' => 'HELLO, :NAME!'

echo __('messages.greet', ['name' => 'tanaka']);

実行結果はこちらです。


HELLO, TANAKA!

このように、プログラミング側で加工しなくても、翻訳の定義側で見栄えを制御できるのがLaravelの素晴らしいところです。初心者の方は、まず基本の小文字から始めて、必要に応じてこの機能を思い出してみてください。

7. JSONファイルを使った翻訳管理

7. JSONファイルを使った翻訳管理
7. JSONファイルを使った翻訳管理

これまではphpというファイル形式での管理を説明しましたが、LaravelではJSON(ジェイソン)という形式のファイルを使って翻訳を管理することもできます。これは、短い単語ではなく、文章そのものを合言葉(キー)にしたい場合に非常に便利です。

JSON形式でも、プレースホルダの使い方は全く同じです。:nameのような目印を文章の中に入れておき、プログラムから値を渡します。大きなプロジェクトや、翻訳する文章が非常に多い場合は、このJSON形式が好まれることもあります。どちらの方法を使っても、動的な置換ができることに変わりはありません。


<!-- resources/lang/ja.json のイメージ -->
{
    "Welcome to our site, :name": ":name さん、私たちのサイトへようこそ!"
}

<!-- 表示の呼び出し -->
{{ __("Welcome to our site, :name", ["name" => "山田"]) }}

初心者の方は、最初はphpファイル形式の方がエラーを見つけやすいのでおすすめです。慣れてきたら、自分が管理しやすい方法を選べるようになります。大切なのは「合言葉」と「プレースホルダ」のセットで文章が作られているという仕組みを理解することです。

8. 置換機能を使う際の注意点とエラー対策

8. 置換機能を使う際の注意点とエラー対策
8. 置換機能を使う際の注意点とエラー対策

最後に、よくある失敗とその対策についてお話しします。一番多い間違いは、辞書ファイルで作った「予約席の目印(プレースホルダ名)」と、プログラムで渡す「名前」が一致していないケースです。例えば、辞書では:userとしているのに、プログラムで'name' => '田中'と渡しても、正しく置き換わりません。

また、コロン(:)を忘れてしまったり、全角のコロンを使ってしまったりすることも、初心者の方が陥りやすいポイントです。プログラミングは非常に繊細で、一文字の間違いでも動かなくなります。もし文字が置き換わらずに、そのまま:nameと表示されてしまったら、この名前の不一致を疑ってみてください。

さらに、セキュリティの面でもLaravelは優秀です。渡された値の中に悪意のあるコードが含まれていても、{{ }}を使って表示していれば、自動的に安全な文字として処理(エスケープ)してくれます。安心して多言語対応にチャレンジしてください。一つずつ丁寧に確認しながら進めれば、必ず思い通りの表示ができるようになります。

まとめ

まとめ
まとめ

今回の記事では、Laravelにおけるローカリゼーション機能の核心とも言える「動的翻訳文字列」と「プレースホルダによる置換」について詳しく解説してきました。Webアプリケーションを世界中のユーザーに届けるためには、単に静的な文章を翻訳するだけでは不十分です。ユーザー名、注文番号、日付、あるいはシステムから通知される動的な数値など、その時々の状況に応じて変化する情報を、翻訳テキストの中に自然に組み込む技術が不可欠となります。

Laravelが提供する多言語対応の仕組みは、開発者にとって非常に直感的でありながら、強力なカスタマイズ性を秘めています。resources/langディレクトリ内に配置されるPHPファイルやJSONファイルは、いわば「翻訳のデータベース」として機能します。ここで重要なのは、コロン(:)を用いたプレースホルダの記法です。この記法を用いることで、文章の中に「値の予約席」を確保し、プログラム側から連想配列の形式で値を流し込むことができます。

また、実務レベルで非常に役立つのが、プレースホルダの大文字・小文字制御機能です。英語圏などの言語では、文頭や強調したい単語のケース(Case)を厳密に管理する必要がありますが、Laravelでは翻訳ファイル側の記述を:name:Name:NAMEと使い分けるだけで、PHP側で面倒な文字列操作関数を呼び出すことなく、自動的に適切なフォーマットで表示してくれます。これにより、ビジネスロジックと表示ロジックを明確に分離することができ、コードの保守性が飛躍的に向上します。

動的翻訳と置換の重要ポイントをおさらい

多言語化対応を成功させるための秘訣は、単なる直訳ではなく、その言語の文脈に合わせた自然な文章構成にあります。動的翻訳を利用する際は、以下のステップを意識することで、スムーズな実装が可能になります。

  • 翻訳ファイル(PHPまたはJSON)で、動かしたい部分にコロン付きのプレースホルダを定義する。
  • __ヘルパ関数やBladeの@langディレクティブを使用して、キーと置換データの配列を渡す。
  • 複数の値を置換する場合は、配列の要素をカンマで区切って指定する。
  • ユーザー入力値を扱う際は、Bladeの二重波括弧を使用してセキュリティ(XSS対策)を確保する。

さらに応用的な使い方として、バリデーションメッセージのカスタマイズにおいても、この置換機能は頻繁に利用されます。「入力された :attribute は正しくありません」といった標準的なエラーメッセージも、今回学んだ仕組みと同じ原理で動いています。この基礎をマスターすることで、Laravelのフレームワーク全体に対する理解がより深まるはずです。

最後に、開発効率を高めるための実践的なコード例をもう一度確認しておきましょう。複数の属性を動的に変更し、かつBootstrap 5のクラスを適用して装飾するような場面は、実際の現場でも非常によくあります。


// 言語ファイル resources/lang/ja/shop.php
return [
    'cart_summary' => ':name様、現在のカートには合計 :count 個の商品が入っており、総額は :amount 円です。',
];

// コントローラまたはビューでの呼び出し例
$params = [
    'name' => '佐藤',
    'count' => 3,
    'amount' => 12800,
];

echo __('shop.cart_summary', $params);

このように記述することで、出力結果は以下のようになります。


佐藤様、現在のカートには合計 3 個の商品が入っており、総額は 12800 円です。

Laravelのローカリゼーション機能を使いこなすことは、プロフェッショナルなWeb開発者への第一歩です。ユーザーにとって親切で、かつグローバルに通用するアプリケーションを目指して、積極的にこの機能を活用していきましょう。最初は小さな単語の置き換えから始め、徐々に複雑なメッセージ構築に挑戦してみてください。一歩ずつ確実に進むことで、フレームワークの便利さと美しさを実感できるはずです。

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

生徒

「先生、まとめまで読んで、動的翻訳の使い方がかなりクリアになりました!プレースホルダを使えば、あらかじめ決まった文章の中に、その都度変わる名前や数字を自由に埋め込めるんですね。」

先生

「その通りです。素晴らしい理解ですね。特に、プレースホルダの名前(キー)と、プログラム側で渡す配列のキーを一致させることが、エラーを防ぐ最大のコツですよ。」

生徒

「はい、そこは気を付けます。あと、英語の時に大文字にする機能が面白いなと思いました。:NAMEと書くだけで、わざわざPHP側で大文字変換しなくていいのは、コードがスッキリして助かりますね。」

先生

「そうでしょう。Laravelは、開発者が本来やりたいこと、つまり『ユーザーに適切な情報を届けること』に集中できるように設計されているんです。JSON形式での管理も紹介しましたが、どちらの形式が使いやすいと感じましたか?」

生徒

「初心者のうちは、PHPファイルの方が構造が分かりやすくて安心な気がします。でも、文章そのものをキーにできるJSONも、プロジェクトが大きくなったら便利そうですね。状況に応じて使い分けられるようになりたいです!」

先生

「素晴らしい意気込みです。もし表示がうまくいかない時は、まずはコロンを忘れていないか、配列の書き方が間違っていないかを確認しましょう。セキュリティ面でもLaravelがしっかり守ってくれるので、どんどんコードを書いて練習してみてくださいね。」

生徒

「ありがとうございます!これで多言語対応のサイトも怖くありません。ユーザー一人ひとりに合わせた丁寧なメッセージを表示できるように頑張ります!」

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelでリダイレクトやフラッシュメッセージをテストする方法を完全解説!初心者向けLaravelテスト入門
New3
CodeIgniter
CodeIgniterのセキュリティ対策を完全ガイド!初心者が守るべき基本設定
New4
Symfony
SymfonyのEventSubscriberとEventListenerの違いを初心者向けにやさしく解説
人気記事
No.2
Java&Spring記事人気No2
Laravel
LaravelでReactコンポーネントを組み込む方法完全ガイド!JSX対応でフロントエンド連携を学ぼう
No.3
Java&Spring記事人気No3
Laravel
LaravelのRESTfulコントローラ設計のベストプラクティスを初心者向けにわかりやすく解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのold()関数でフォーム再表示時に値を保持する方法
No.5
Java&Spring記事人気No5
Laravel
LaravelをDockerで動かすメリットと導入の全体像を徹底解説!初心者向け入門ガイド
No.6
Java&Spring記事人気No6
Symfony
Symfonyでバリデーションをコントローラに組み込む方法を徹底解説!初心者にもやさしい入力チェックの基本
No.7
Java&Spring記事人気No7
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ
No.8
Java&Spring記事人気No8
CodeIgniter
CodeIgniterのルーティングを徹底解説!ルートパラメータの使い方入門