CodeIgniterの多言語対応を完全攻略!Language機能の使い方を初心者向けに解説
生徒
「CodeIgniterで作ったWebサイトを、日本人には日本語、海外の人には英語で表示させたいんですが、そんな魔法みたいなことできますか?」
先生
「もちろんです。CodeIgniterには『Language(ランゲージ)機能』という、言葉を切り替える仕組みが標準で備わっていますよ。」
生徒
「それって、ページを丸ごと英語用と日本語用に2つ作らなきゃいけないってことですか?」
先生
「いいえ、そんな大変なことはしなくて大丈夫です。中身の文字だけを『翻訳データ』として用意しておいて、パズルみたいに入れ替えるだけなんです。一緒にその仕組みを学んでいきましょう!」
1. CodeIgniterの多言語対応(Language)とは?
CodeIgniter(コードイグナイター)というシステムを使ってWebサイトを作るとき、一番の悩みどころは「世界中の人に使ってもらうにはどうすればいいか」という点です。そこで登場するのがLanguage機能(多言語対応)です。これは、サイト内で使う挨拶やボタンの文字などを、閲覧者の設定に合わせて自動で「日本語」や「英語」に書き換えてくれる便利な機能のことです。
例えば、日本のユーザーには「こんにちは」と表示し、アメリカのユーザーには「Hello」と表示したい場面があります。もしこの機能がなければ、英語用のページと日本語用のページを別々に100枚ずつ作らなければならず、修正が必要になったら200枚全部直すという地獄のような作業が待っています。しかし、多言語対応を使えば、中身の「言葉」だけを別ファイルに保存しておき、表示する瞬間にシュッと入れ替えることができるのです。
プログラミング未経験の方にとって「多言語化」と聞くと難しく感じるかもしれませんが、要するに「言葉の着せ替え人形」だと考えてください。体(プログラムの構造)は一つですが、服(言葉)だけをその場に合わせて着せ替えるイメージです。これにより、一つのシステムで世界中に向けたサービスを展開することが可能になります。
2. 多言語機能を使うための準備(ファイルの配置)
CodeIgniterで言葉を切り替えるには、まず「どこの引き出しにどの言語を入れるか」というルールを知る必要があります。パソコンを触り始めたばかりの方でも分かるように説明すると、パソコンの中に「日本語用のフォルダ」と「英語用のフォルダ」を作る作業から始めます。
具体的には、CodeIgniterのプロジェクトの中に app/Language というフォルダがあります。その中に、言語ごとのフォルダを作成します。例えば、日本語なら ja、英語なら en といった具合です。このフォルダ名は、一般的に「言語コード」と呼ばれる国際的な決まりに従って付けるのが一般的です。
ここで重要なのは、フォルダを分けることで、プログラムが「今は日本語モードだから、この ja フォルダの中を見ればいいんだな!」と迷わずに判断できるようになることです。この準備をしっかりしておくことが、スムーズな多言語サイト制作の第一歩となります。難しく考えず、まずは「言語ごとに部屋を用意してあげる」という感覚で進めていきましょう。
3. 言語ファイルを作成してみよう(仕組みの解説)
フォルダの準備ができたら、次は実際に表示したい「言葉」を書き込んだファイルを作ります。このファイルを言語ファイルと呼びます。PHPのコードで書きますが、内容は非常にシンプルで、「ラベル名」と「表示したい文字」をセットで登録するだけです。
例えば、サイトのタイトルを多言語化したい場合、Title.php というファイルを作ります。この中には、「名前は『site_title』、中身は『私のブログ』」といった形式で情報を書き込みます。これを専門用語で連想配列(れんそうはいれつ)と呼びます。連想配列とは、「キー(名前)」と「値(中身)」がペアになったデータの並びのことです。
それでは、実際に日本語用の言語ファイルを作成してみましょう。以下のコードは、挨拶やボタンの文字を定義した例です。初心者の方でも、どこに何が書いてあるか直感的にわかるはずです。
// app/Language/ja/Greetings.php の内容
return [
'welcome_message' => 'ようこそ、私たちのWebサイトへ!',
'login_button' => 'ログインする',
'contact_us' => 'お問い合わせはこちら',
];
このように、左側に「プログラムで使うための短い名前(キー)」を書き、右側に「実際に画面に出したい日本語(値)」を書きます。これだけで、言葉の定義は完了です。英語用を作りたいときは、app/Language/en/Greetings.php を作り、右側を英語に書き換えるだけです。簡単だと思いませんか?
4. ビュー(画面)で翻訳された文字を表示する方法
言葉の定義が終わったら、いよいよそれをWebサイトの画面上に表示させてみましょう。CodeIgniterには、言語ファイルから文字を呼び出すための専用の命令(関数)が用意されています。それが lang() 関数です。
lang() 関数を使うときは、先ほど決めた「ファイル名」と「ラベル名」をドット(.)でつないで指定します。例えば、Greetings.php というファイルの welcome_message を表示したいときは、lang('Greetings.welcome_message') と書きます。これにより、プログラムが自動的に設定されている言語を読み取り、適切な文字を表示してくれます。
ここでは、HTMLというWebの骨組みを作る言葉と一緒に、PHPでメッセージを表示させる例を見てみましょう。初心者の方でも分かりやすいように、ログイン画面の一部を想定したコードを用意しました。
<?= lang('Greetings.welcome_message') ?>
以下のボタンをクリックしてください。
この <?= ... ?> という記号は、PHPで文字を画面に出力するための合言葉のようなものです。これを使うことで、プログラムが裏側で「今は日本語設定だから、日本語の歓迎メッセージを出そう!」と判断し、画面に文字を表示してくれるのです。もし設定を英語に変えれば、コードを一切触ることなく、ボタンの文字が「Log In」に変わります。
5. 言語を切り替える設定(設定ファイルの変更)
さて、ファイルを作って表示するコードも書きましたが、そもそも「今は日本語を表示するのか、英語を表示するのか」をどこで決めているのでしょうか?それは、CodeIgniterの設定ファイルの中にあります。
app/Config/App.php というファイルを探してみてください。この中には、Webサイトの基本設定が詰まっています。その中の $defaultLocale という項目が、標準で使う言語を指定する場所です。ここが 'en' になっていれば英語、'ja' になっていれば日本語が優先的に使われます。
また、閲覧しているユーザーが使っているブラウザの言語を自動で判定して切り替える $negotiateLocale という設定もあります。これを「真(true)」に設定すると、アメリカの人がアクセスすれば英語、日本の人がアクセスすれば日本語、と自動で空気を読んでくれるようになります。なんて賢いんでしょう!設定の書き方は以下の通りです。
// app/Config/App.php の設定例
public string $defaultLocale = 'ja'; // デフォルトを日本語に設定
public bool $negotiateLocale = true; // ブラウザの言語設定を優先して切り替える
このように設定を少し変えるだけで、サイト全体の言語の振る舞いをコントロールできます。プログラミング未経験の方は「ファイルを書き換えるのは怖い」と思うかもしれませんが、指定された文字を少し修正するだけなので、落ち着いて作業すれば大丈夫です。
6. 動的な文字を多言語化する方法(プレースホルダ)
多言語対応をしていると、どうしても避けられないのが「〇〇さん、こんにちは!」のように、名前などの一部が変わる文章です。人によって名前は違うので、あらかじめ言語ファイルにすべての名前を登録しておくことは不可能です。そんなときに使うのがプレースホルダというテクニックです。
プレースホルダとは、後から文字を入れるための「予約席」のようなものです。言語ファイルの中に {0} や {1} という記号を入れておくと、そこに好きな文字を後からはめ込むことができます。これにより、「こんにちは」という挨拶部分は翻訳しつつ、名前の部分だけを自由に差し替えることが可能になります。
具体的な書き方を見てみましょう。言語ファイルに予約席を作り、それをプログラムから呼び出す方法です。これを覚えると、一気にプログラマーらしい高度なことができるようになりますよ。
// 言語ファイル(app/Language/ja/User.php)での定義
// 'greeting' => '{0}さん、こんにちは!現在のポイントは{1}点です。'
// 実行時の表示方法(コントローラーやビューで使用)
echo lang('User.greeting', ['田中', 500]);
実行結果は以下のようになります。
田中さん、こんにちは!現在のポイントは500点です。
このように、第2引数(二番目のカッコの中のデータ)に渡した値が、順番に {0} や {1} に吸い込まれていきます。これなら、何千人ユーザーがいても、一つの翻訳データで全員に対応できますね。この柔軟性が多言語機能の素晴らしいところです。
7. 言語ファイルが読み込まれる優先順位と注意点
最後に、少しだけプログラミングらしい重要なルールについてお話しします。それは、同じ名前のファイルやラベルがあったときに、どれが優先されるかという話です。CodeIgniterは、非常に几帳面なシステムなので、探す場所の順番がしっかり決まっています。
もし自分で作った app/Language/ja の中にファイルが見当たらない場合、システムは「CodeIgniter本体が持っている標準の翻訳ファイル」を探しに行きます。例えば、データの入力エラーを表示する「この項目は必須です」といったメッセージは、最初からシステム側で用意されていることが多いです。これを知っておくと、「自分で作っていないのに、なぜか日本語が出るぞ?」という不思議な現象の謎が解けます。
注意点としては、ファイル名やキーの名前を間違えないことです。一文字でもスペルミスがあると、システムは「そんなラベル知らないよ!」とへそを曲げてしまい、翻訳されずにラベル名がそのまま画面に出てしまいます。特に、大文字と小文字を区別する場合があるので、パソコン操作に慣れていない方は、コピー&ペーストを活用して正確に名前を管理するようにしましょう。丁寧な作業が、エラーのない素晴らしい多言語サイトを作るコツです。