Laravel多言語対応入門!翻訳文字列を表示する__()と@langの使い方
生徒
「Laravelで作ったサイトを、日本語だけじゃなくて英語でも表示したいんです。場所によって言葉を切り替える良い方法はありますか?」
先生
「それならLaravelのローカリゼーション(多言語対応)という機能がぴったりです。特定の記号を使うだけで、表示する言語を自動で切り替えられますよ。」
生徒
「難しそうですね。プログラムの中に全部の言葉を書かないといけないんですか?」
先生
「いいえ、専用の翻訳ファイルを用意して、表示したい場所で簡単な命令を出すだけです。まずは基本の表示方法から学んでいきましょう!」
1. Laravelのローカリゼーションとは?
ローカリゼーション(Localization)とは、アプリケーションを特定の国や地域の言語に対応させることを指します。略して「L10n」と呼ばれることもあります。 例えば、日本人がアクセスしたときは「こんにちは」、アメリカ人がアクセスしたときは「Hello」と表示される仕組みのことです。
Laravelでは、この多言語対応が非常に簡単にできるよう設計されています。ソースコードの中に直接「こんにちは」と書いてしまうと、後から英語に変えるのが大変ですが、 Laravelの翻訳機能を使えば、一つの命令で複数の言語を管理できるようになります。これにより、世界中のユーザーに使ってもらえるグローバルなWebサービスを作成することが可能になります。
2. 言語ファイル(翻訳ファイル)の準備
翻訳機能を使うためには、まず「どの言葉をどの言語に変換するか」という辞書のようなファイルを作る必要があります。
Laravelでは、プロジェクトの中にある lang というフォルダの中にファイルを保存します。
例えば、日本語なら lang/ja.json 、英語なら lang/en.json という名前でファイルを作成し、その中に「キー(元の言葉)」と「値(表示する言葉)」をペアにして書き込んでいきます。
JSON(ジェイソン)とは、データの書き方のルールのひとつで、プログラミングの世界では非常によく使われる形式です。
この辞書ファイルがあることで、プログラム本体を書き換えることなく、辞書の中身を増やすだけで新しい言語を追加できるようになります。
3. __()関数を使って翻訳を表示する方法
Laravelで最もよく使われる翻訳の表示方法が、ヘルパ関数と呼ばれる __() です。
これはアンダースコア(記号の _ )を二つ並べて、その後にカッコを書く特殊な書き方です。
PHPのプログラムの中で「この言葉を翻訳して表示してね」と命令を出すときに使います。 例えば、コントローラーやBlade(ブレード)テンプレートと呼ばれる画面を作るファイルの中で使用します。
// PHPのコードの中で翻訳を表示する例
echo __('Welcome to our application');
このコードが実行されると、Laravelは設定されている言語(例えば日本語)の辞書ファイルを見に行きます。 もし辞書に「Welcome to our application」に対応する日本語があればそれを表示し、なければそのまま英語が表示されます。
実行結果は以下のようになります(日本語設定の場合)。
私たちのアプリケーションへようこそ
4. Bladeテンプレートで便利な@langディレクティブ
Laravelには、HTMLを効率よく書くためのBlade(ブレード)という仕組みがあります。
このBladeの中で翻訳文字列を表示するときに便利なのが @lang です。
先ほどの __() と役割は同じですが、 @lang を使うとHTMLの中にスッキリと記述することができます。
「@」マークで始まる命令は「ディレクティブ」と呼ばれ、LaravelがHTMLに変換する際の手助けをしてくれます。
<!-- Bladeテンプレート(HTML)の中での書き方 -->
<div class="alert alert-info">
<h1>@lang('Login')</h1>
<p>@lang('Please enter your email and password.')</p>
</div>
このように書くことで、ログイン画面を日本語で表示したり、英語で表示したりといった切り替えが非常にスムーズになります。 パソコンの操作に慣れていない方でも、この一文を覚えるだけでウェブサイトの国際化ができるようになります。
5. 変数を翻訳の中に組み込む方法
単なる挨拶だけでなく、「こんにちは、田中さん」のように、一部の言葉が状況によって変わる場合もありますよね。
そのようなときは、翻訳ファイルの中に :name のような目印(プレースホルダ)を付けておき、 __() の第二引数にデータを渡します。
引数(ひきすう)とは、関数という命令に渡す追加情報の材料のようなものです。 これを使うことで、文章の一部だけを動的に入れ替えることができます。
// ユーザー名を変数に入れて翻訳に渡す
$userName = '田中';
echo __('Hello, :name', ['name' => $userName]);
このコードを実行すると、辞書ファイルの :name の部分が「田中」に置き換わって表示されます。
こんにちは、田中さん
これにより、一人ひとりのユーザーに合わせた丁寧なメッセージを表示させることが可能になります。
6. 翻訳ファイルの具体的な中身(JSON形式)
ここで、実際に lang/ja.json というファイルにどのような内容を書けばよいのか見てみましょう。
JSON形式は、中括弧 { } の中に「"キー": "翻訳後の値"」という形式で記述します。
複数の言葉を登録するときは、行の終わりにカンマ , を付けるのがルールです。
最後の行にはカンマを付けないように注意してください。
{
"Welcome to our application": "私たちのアプリケーションへようこそ",
"Login": "ログイン",
"Please enter your email and password.": "メールアドレスとパスワードを入力してください。",
"Hello, :name": "こんにちは、:nameさん"
}
このファイルを用意しておくだけで、Laravelは @lang('Login') という記述を見つけると、自動的に「ログイン」という言葉を探し出して画面に出してくれます。
非常に賢い仕組みですね。
7. アプリケーションの言語設定を切り替える
翻訳ファイルを作っても、Laravelが「今は何語で表示すればいいのか」を知らなければ意味がありません。
基本の設定は、 config/app.php という設定ファイルの中にあります。
このファイルの中にある 'locale' => 'en' という部分を 'ja' に書き換えることで、サイト全体が日本語モードになります。
ロケール(Locale)とは、言語や国を示す設定値のことです。
また、プログラムの途中で一時的に言語を変えたい場合は、 App::setLocale('en') のように命令を出すこともできます。
これにより、ユーザーがボタン一つで「日本語」と「英語」を切り替えられるような便利な機能も作れるようになります。
8. 複数形に対応する翻訳の書き方
英語などの言語では、リンゴが1個なら「apple」、2個以上なら「apples」と形が変わります。
これを多言語対応で扱うには trans_choice() という関数や、 @choice という命令を使います。
翻訳ファイルの中でパイプ記号 | を使って区切ることで、「1つの時」と「それ以外の時」の文章を分けることができます。
// 数によって表示を変える例
echo trans_choice('{0} No apples|{1} One apple|[2,*] :count apples', 3, ['count' => 3]);
実行結果は以下のようになります。
3 apples
日本語ではあまり意識しない複数形ですが、海外向けのサイトを作る際には欠かせないテクニックです。 Laravelならこうした細かい文法の違いもスマートに解決できます。
9. 翻訳機能を使うメリット
最後に、なぜ面倒でもこのような翻訳機能を使うのか、その理由を整理しましょう。 第一に、メンテナンスが楽になるからです。全てのメッセージが一箇所にまとまっていれば、誤字脱字を見つけたときも修正が簡単です。
第二に、プログラムが読みやすくなるからです。HTMLの中に日本語が混ざっていると、どこがプログラムでどこが文章か分かりにくくなります。 翻訳用の記号に置き換えることで、コードが整理され、プログラミング初心者でも構造を理解しやすくなります。
Laravelの多言語対応は、単に言葉を入れ替えるだけでなく、効率的な開発をサポートするための強力なツールなのです。 少しずつ触ってみて、その便利さを体感してみてくださいね。
まとめ
今回の記事では、Laravelにおける多言語対応の基本から応用までを詳しく解説してきました。Webアプリケーションを世界中のユーザーに届けるためには、言語の壁を乗り越えるローカリゼーションの技術が欠かせません。Laravelが提供する翻訳機能は、単に文字列を置き換えるだけでなく、開発効率やメンテナンス性を劇的に向上させる強力な仕組みです。
翻訳機能の核心と実装のポイント
多言語対応の第一歩は、翻訳ファイルの準備です。langディレクトリ内に配置するJSON形式のファイルは、キーと値のペアで構成されるシンプルな辞書となります。この辞書があることで、プログラムのロジックと表示される文言を完全に分離できるのが最大のメリットです。例えば、サイト内の文言を一斉に変更したい場合、PHPファイルを一つずつ探す必要はなく、翻訳用のJSONファイルを修正するだけで完結します。
実際のコード実装では、__()関数やBladeテンプレートの@langディレクティブを使い分けます。これらはどちらも「指定されたキーに対応する翻訳文字列を辞書から探して表示する」という動作をしますが、文脈に合わせて最適な書き方を選ぶことが大切です。
実践的な動的翻訳のサンプル
ユーザー名や数値など、状況によって変化する値を翻訳メッセージに組み込む手法は非常に実用的です。プレースホルダ(:nameなど)を活用することで、定型文の一部だけを動的に差し替えることができます。
// 複数の変数を組み込んだ高度な翻訳の例
$appName = 'ララベル学習システム';
$status = '完了';
echo __('Welcome to :app. Your registration is :status.', [
'app' => $appName,
'status' => $status,
]);
上記のプログラムを実行した際の出力結果は以下のようになります。
ララベル学習システムへようこそ。登録は完了です。
このように、配列形式でデータを渡すだけで、複雑なメッセージもスマートに多言語化できます。また、英語圏などの対応で必須となる複数形(Pluralization)についても、trans_choiceを使用することで、数値に応じた適切な文法表現を自動で選択させることが可能です。
設定と運用のコツ
アプリケーションのデフォルト言語はconfig/app.phpで一括管理されますが、ユーザーのブラウザ設定やプロフィール情報に基づいて動的にApp::setLocale()を呼び出すことで、よりパーソナライズされたユーザー体験を提供できます。
SEOの観点からも、多言語対応は非常に有効です。適切な言語タグ(lang属性)と組み合わせて、各言語に対応したコンテンツを提供することで、検索エンジンは「このサイトは多言語のユーザーに配慮している」と評価します。結果として、グローバルな検索結果での露出が増え、より多くのアクセスを期待できるようになります。
Laravelの翻訳機能を使いこなすことは、プロのWeb開発者への近道です。最初はJSONの書き方や関数の使い方に戸惑うかもしれませんが、一度仕組みを理解してしまえば、これほど心強い味方はありません。今回学んだ基礎を土台にして、ぜひ多言語対応の素晴らしいプロジェクトを立ち上げてみてください。
生徒
「先生、まとめを読んで多言語対応の全体像がやっと見えてきました!プログラムの中に直接日本語を書かないほうがいい理由が、メンテナンス性の面からもよく分かりました。」
先生
「その通りですね。コードがスッキリするだけでなく、将来的に他の言語を追加したくなったときも、翻訳ファイルを追加するだけで対応できるのが大きな魅力なんです。」
生徒
「JSONファイルの中で、最後にカンマを付けないといった細かいルールも気をつけないといけませんね。あと、:nameみたいな変数を使う方法は、ユーザーの名前を出すときにすぐ使えそうです!」
先生
「素晴らしい気づきです。変数の埋め込みは、通知メールやマイページなど、あらゆる場所で活躍します。実際に手を動かして、自分専用の辞書を作ってみるとさらに理解が深まりますよ。」
生徒
「はい!まずは自分のプロフィール画面を日本語と英語で切り替えられるように改造してみます。Laravelの機能って、初心者の私でも使いやすいように工夫されているんですね。」
先生
「そう言ってもらえると嬉しいです。Laravelは開発者が楽しくコードを書けることを大切にしているフレームワークですからね。この調子で、世界に発信できるアプリを目指して頑張りましょう!」