CodeIgniterのバリデーションを完全日本語化!エラーメッセージのカスタマイズ方法
生徒
「CodeIgniterでお問い合わせフォームを作っているのですが、入力エラーが英語で出てしまいます。これを日本語にする方法ってありますか?」
先生
「CodeIgniterにはバリデーションという入力チェック機能があります。デフォルトは英語ですが、設定を変えるだけで簡単に日本語に変えることができますよ。」
生徒
「バリデーション……?難しい言葉ですね。初心者でも一人で設定できますか?」
先生
「大丈夫です!バリデーションは、日本語で言うと『入力内容が正しいか確認する作業』のことです。その手順をこれから順番に解説しますね。」
1. バリデーションとエラーメッセージの基本
プログラミングの世界にはバリデーション(Validation)という言葉があります。これは、ユーザーが入力したデータが「決められたルールに合っているか」をチェックする仕組みのことです。例えば、メールアドレスの欄に名前が書いてあったり、数字を入れる場所に文字が入っていたりすると、プログラムが「それは違いますよ!」と教えてくれます。この教えてくれる文章をエラーメッセージと呼びます。
PHPの人気フレームワークであるCodeIgniter(コードイグナイター)は、最初からこのチェック機能が備わっています。しかし、世界中で使われているツールなので、標準の状態ではエラーメッセージがすべて「The Username field is required.」のように英語で表示されてしまいます。日本のユーザー向けにサイトを作るなら、これを「ユーザー名は必須入力です」のように日本語で表示させたいですよね。これが今回のメインテーマです。
2. 日本語化ファイルの準備と配置場所
CodeIgniterでメッセージを日本語にするには、まず「日本語の翻訳データ」を用意する必要があります。専門用語で言語パックやランゲージファイルと言ったりします。このファイルは、システムの中にある特定のフォルダに配置します。
通常、CodeIgniterのフォルダ構成の中には system/language/english というフォルダがあり、そこに英語のメッセージが入っています。日本語にするには、新しく application/language/japanese というフォルダを作成し、その中に翻訳されたファイルを保存するのが一般的なルールです。パソコンの操作に慣れていない方は、フォルダを新しく作る作業を「新しい引き出しを準備する」イメージで捉えてみてください。
3. 翻訳用ファイルのコードを書いてみよう
では、実際に日本語のメッセージを定義するコードを書いてみましょう。このファイルは form_validation_lang.php という名前にする必要があります。以下のコードは、入力が空っぽだった時や、文字数が足りない時に表示されるメッセージを設定する例です。$langという変数(データを入れる箱のようなもの)に、日本語をどんどん詰め込んでいくイメージです。
// application/language/japanese/form_validation_lang.php として保存します
$lang['form_validation_required'] = '{field}は必ず入力してください。';
$lang['form_validation_valid_email'] = '{field}には正しいメールアドレスの形式を入力してください。';
$lang['form_validation_min_length'] = '{field}は{param}文字以上で入力してください。';
$lang['form_validation_numeric'] = '{field}には数字だけを入力してください。';
コードの中にある {field} という部分は、後から「名前」や「メールアドレス」といった項目名に自動的に置き換わる便利な魔法の記号です。このように設定しておけば、どんな入力項目でも使い回すことができます。
4. 設定ファイル(config.php)を書き換える
ファイルを置いただけでは、プログラムはまだ「英語のファイルを使おう」としたままです。そこで、システムの全体設定を決めるconfig.phpというファイルを編集して、「これからは日本語のファイルを見てね!」と命令を出します。これを設定の反映と呼びます。
設定ファイルを開くと、言語の設定をしている箇所があります。そこを 'english' から 'japanese' に書き換えるだけです。これで、システム全体が日本語モードに切り替わります。
// application/config/config.php の中身を探してください
// $config['language'] = 'english'; ←これを下のように書き換えます
$config['language'] = 'japanese';
この一行を変えるだけで、CodeIgniterは先ほど作った japanese フォルダの中身を探しに行ってくれるようになります。非常にシンプルで分かりやすい仕組みですね。
5. コントローラーでバリデーションを実行する
準備ができたら、実際に入力チェックを行うプログラム(コントローラー)を書いてみましょう。ここでは「名前」の入力が空っぽでないか、5文字以上入っているかをチェックする例を紹介します。コントローラーとは、ユーザーの操作を受け取って、どう動くかを決める「司令塔」の役割をするプログラムのことです。
public function register() {
// 1. バリデーションのルールを決める(名前は必須、5文字以上)
$this->form_validation->set_rules('username', 'ユーザー名', 'required|min_length[5]');
if ($this->form_validation->run() == FALSE) {
// 2. チェックに失敗した場合、入力画面に戻る
$this->load->view('my_form_view');
} else {
// 3. チェックに成功した場合、完了画面へ
$this->load->view('success_view');
}
}
このプログラムの中で set_rules という命令を使っていますね。ここで「ユーザー名」という日本語を指定しています。もし入力が空だった場合、先ほどの翻訳ファイルと組み合わさって、「ユーザー名は必ず入力してください。」という完璧な日本語メッセージが生成されます。
6. 画面(ビュー)に日本語エラーを表示する
最後に、ユーザーが見る画面(ビュー)にエラーメッセージを表示させるHTMLを書きましょう。CodeIgniterには、発生したすべてのエラーをまとめて表示してくれる validation_errors() という便利な機能があります。これを使うだけで、難しい条件分岐を書かなくても画面に警告を出してくれます。
<!-- ビューファイル my_form_view.php -->
<div class="alert alert-danger">
<?php echo validation_errors(); ?>
</div>
<form action="register" method="post">
<label>ユーザー名</label>
<input type="text" name="username" value="">
<input type="submit" value="送信する">
</form>
もしユーザーが何も入力せずに「送信する」ボタンを押すと、画面には次のような結果が表示されます。パソコンを触ったことがない人でも、赤い文字で日本語の警告が出れば「あ、入力を忘れたんだな」とすぐに分かりますね。
ユーザー名は必ず入力してください。
ユーザー名は5文字以上で入力してください。
7. 個別にメッセージをカスタマイズする方法
「全体の設定は日本語にしたけれど、このフォームの時だけは特別なメッセージを出したい!」という場合もあります。例えば、会員登録の時だけは「名前を忘れずに入れてね!」という親しみやすい言葉にしたい時です。その場合は、プログラムの中で直接メッセージを指定することも可能です。
$this->form_validation->set_rules(
'username',
'ユーザー名',
'required',
array('required' => '%sを忘れずに入れてね!')
);
このように書くと、特定の項目だけオリジナルのメッセージに変えることができます。%s という記号は、項目名の「ユーザー名」に置き換わります。基本は一括で日本語化しておき、こだわりたい場所だけこの方法を使うのが、プロのエンジニアもよく使うテクニックです。
8. エラーメッセージの見た目を整える
メッセージの内容だけでなく、見た目も重要です。ただの文字が表示されるよりも、枠線で囲まれていたり、アイコンがついていたりする方がユーザーにとって親切です。CodeIgniterでは、エラーメッセージを囲むHTMLタグを自由に設定することができます。これをデリミタ(区切り文字)の設定と言います。
// メッセージの前後を <p> タグで囲み、赤文字にする設定
$this->form_validation->set_error_delimiters('<p class="text-danger">', '</p>');
このように設定すると、出力されるエラーメッセージが自動的に <p class="text-danger">~</p> で包まれます。CSSというデザインの知識を使えば、もっとキラキラさせたり目立たせたりすることも可能です。初心者の方は、まずはこの「自動で包んでくれる機能」があることだけ覚えておけば十分です。
9. 日本語化がうまくいかない時のチェックリスト
「設定したはずなのに、英語のまま変わらない!」というトラブルは、初心者の方によくあります。そんな時は、焦らずに次の3点を確認してみてください。まず、フォルダ名の japanese がスペルミスしていないか。次に、config.php の設定が正しく 'japanese' になっているか。最後に、ファイル名が form_validation_lang.php と一文字も間違えずに保存されているかです。
プログラミングは、たった一文字の間違い(例えば languge と書いてしまうなど)でも動かなくなってしまうほど繊細です。でも、裏を返せば、その間違いさえ直せば必ず動きます。もしエラーが出ても「自分には向いていないんだ」と思わずに、間違い探しゲームを楽しむくらいの気持ちで挑戦してみてください。日本語化ができるようになると、自分が作ったシステムが急に「日本で動く本物のアプリ」らしく見えてきて、とても感動しますよ。