CodeIgniter 4で多言語対応!日本語と英語を簡単に切り替える方法を徹底解説
生徒
「CodeIgniterで作ったWebサイトを、日本語だけじゃなくて英語でも表示できるようにしたいです!どうすればいいですか?」
先生
「それは『多言語対応』という機能を使えば実現できますよ。CodeIgniterには、表示するメッセージを言語ごとに自動で切り替える便利な仕組みが備わっています。」
生徒
「難しそうに聞こえますが、初心者でも設定できますか?」
先生
「大丈夫です。設定ファイルの書き方や、言葉を保存する場所の決まりを覚えれば、誰でも簡単に切り替えられるようになります。一緒に見ていきましょう!」
1. CodeIgniterの多言語対応(Language)とは?
Webサイトを見ていると、ボタン一つで「日本語」から「English」に切り替わるサイトがありますよね。これをプログラミングの世界では「多言語対応(たげんごたいおう)」や「国際化(i18n)」と呼びます。CodeIgniter(コードイグナイター)というPHPのフレームワークには、この機能を簡単に実装するための「Language(ランゲージ)機能」が標準で備わっています。
フレームワークとは、Webアプリを効率よく作るための「道具箱」のようなものです。CodeIgniterはその中でも軽量で、初心者にも扱いやすいのが特徴です。多言語対応を使うと、例えば「こんにちは」という言葉をプログラムの中に直接書くのではなく、専用の辞書ファイルに「日本語なら『こんにちは』、英語なら『Hello』」と登録しておき、状況に合わせて自動で呼び出すことができるようになります。
2. まずは基本の設定!「今何語なのか」を決めよう
プログラムが「今は日本語で表示すべきか、英語で表示すべきか」を判断するためには、まず設定ファイルを編集する必要があります。CodeIgniter 4では、app/Config/App.php というファイルがその役割を担っています。
このファイルの中にある $defaultLocale という項目を探してみましょう。ここがWebサイトの「標準の言語」になります。日本向けのサイトであれば、ここを「ja(日本語)」に設定するのが一般的です。
// app/Config/App.php の中身を書き換えます
public string $defaultLocale = 'ja'; // 初期設定を日本語にする
public array $supportedLocales = ['ja', 'en']; // 対応する言語を登録する
ロケール(Locale)とは、言語や地域の設定を指す言葉です。日本語は「ja」、英語は「en」という短い記号で表されます。このように設定しておくことで、システム全体が「まずは日本語を基本として動くんだな」と理解してくれます。
3. 言葉の辞書「言語ファイル」を作ってみよう
設定が終わったら、次は実際に表示したい言葉をまとめた「辞書」を作ります。CodeIgniterでは、app/Language というフォルダの中に言語ごとのフォルダを作って管理します。
例えば、日本語用の辞書は app/Language/ja、英語用の辞書は app/Language/en という場所に保存します。その中に、PHPのファイルを作成します。今回は「メッセージ」を管理する Msg.php というファイルを作ってみましょう。
日本語用ファイルの内容(app/Language/ja/Msg.php):
return [
'welcome' => 'ようこそ!私たちのサイトへ',
'login' => 'ログインしてください',
'logout' => 'ログアウト',
];
英語用ファイルの内容(app/Language/en/Msg.php):
return [
'welcome' => 'Welcome to our website!',
'login' => 'Please login',
'logout' => 'Logout',
];
このように、「キー(名前)」と「値(実際の言葉)」をセットにして書くのがルールです。'welcome' という名前を呼べば、日本語なら「ようこそ!」、英語なら「Welcome!」が取り出せるという仕組みです。パソコンを初めて触る方でも、エクセルの表のように左側に名前、右側に言葉を書くと考えれば分かりやすいはずです。
4. 画面に翻訳された言葉を表示する方法(lang関数)
辞書ができたら、いよいよ画面(ビュー)にその言葉を表示させてみましょう。CodeIgniterでは lang() という特別な命令を使います。これを関数(かんすう)と呼び、特定の仕事をしてくれる便利な魔法のようなものです。
使い方はとても簡単です。lang('ファイル名.キー名') という形式で書きます。先ほど作った Msg.php の welcome を表示したい場合は、次のようになります。
<h1><?= lang('Msg.welcome') ?></h1>
<p><?= lang('Msg.login') ?></p>
このコードを書いてブラウザで実行すると、現在の設定が日本語なら「ようこそ!」と表示されます。HTML(エイチティーエムエル)はWebページの骨組みを作る言葉で、その中に = ... ?> というPHPの書き方を混ぜることで、中身を動的に変えることができます。
5. 言語を切り替えるプログラムの仕組み
サイトを訪れた人が「英語で見たい!」と思った時、どうやって切り替えればいいのでしょうか。一番簡単な方法は、URL(サイトの住所)に言語の情報を混ぜることです。例えば example.com/en/home のように、先頭に「en」を付ける方法です。
プログラムの中で一時的に言語を切り替えたい場合は、サービスロケールを操作します。これをコントローラーという、全体の司令塔の役割をするファイルで行います。コントローラーは、ユーザーからの命令を受け取って、どの画面を出すか判断する重要な場所です。
// 言語を強制的に切り替える例
$language = \Config\Services::language();
$language->setLocale('en'); // ここで英語にセット!
echo lang('Msg.welcome'); // 出力結果は「Welcome to our website!」
実行結果は以下のようになります。
Welcome to our website!
このように setLocale(セット・ロケール)という命令を使うと、その瞬間からプログラムが参照する辞書が英語に切り替わります。スイッチをパチっと切り替えるようなイメージですね。
6. 複雑な文章に対応する「変数」の使い方
時には、「〇〇さん、こんにちは!」のように、一部だけ名前を入れたい場合もありますよね。多言語対応では、文章の中に変数(へんすう)を埋め込むこともできます。変数とは、値を入れておくための「箱」のことです。
まず、辞書ファイルの方に {0} という記号を書いておきます。これが「ここに後で何か入れるよ」という目印になります。
// app/Language/ja/Msg.php の中に追記
'hello_user' => '{0}さん、こんにちは!',
// app/Language/en/Msg.php の中に追記
'hello_user' => 'Hello, {0}!',
表示する時は、lang() 関数の2番目の引数に、入れたい名前を渡します。プログラミングでは、カンマ , で区切って情報を追加することを「引数(ひきすう)を渡す」と言います。
// 「田中さん」という名前を入れて表示する
echo lang('Msg.hello_user', ['田中']);
実行結果(日本語設定の場合):
田中さん、こんにちは!
これなら、ユーザーごとに名前を変えつつ、言語も自動で切り替えることができるので、とてもスマートなプログラムになります。
7. ブラウザの言語を自動で判別する機能
最新のWebサイトでは、ユーザーが何も設定しなくても、ブラウザの設定を見て自動で「この人は英語圏の人だな」と判断してくれることがあります。CodeIgniter 4にもその機能があります。
再び app/Config/App.php を開いてみましょう。その中にある $negotiateLocale という項目を true に書き換えるだけです。Boolean(ブーリアン)という型で、true は「はい(有効)」、false は「いいえ(無効)」を意味します。
// ブラウザの言語設定を自動で読み取る
public bool $negotiateLocale = true;
これを有効にすると、アメリカのブラウザを使っている人には英語、日本のブラウザを使っている人には日本語が、最初から選ばれた状態で表示されます。おもてなしの心が詰まった機能ですね!
8. フォルダ構造を整理してミスを防ごう
最後に、多言語対応を進める上での注意点をお話しします。多言語サイトは、ページ数が増えるほど管理が大変になります。ファイル名やフォルダ名が一文字でも違うと、パソコンは「辞書が見つかりません!」と機嫌を損ねてエラーを出してしまいます。
ディレクトリ(フォルダ)の構造をもう一度確認しましょう。
app/Language/ja/(日本語用のファイル置き場)app/Language/en/(英語用のファイル置き場)app/Language/zh-CN/(中国語など、他の言語を増やす時も同様)
このように、決められた場所に正しく配置することが、プログラミング未経験から上達するための第一歩です。パソコン操作に慣れていない方は、まず「大文字と小文字を間違えない」「半角英数字で書く」という基本を意識してみてください。これだけで、エラーの半分以上は防ぐことができます。CodeIgniterのLanguage機能を使って、世界中の人に届くWebサイト制作に挑戦してみましょう!