めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

CakePHP(1.2)でのエラーメッセージを日本語化する

CakePHPでお問い合わせフォームを作ってみたりします。CakePHPでは、ValidateをModelに書きます。Validateのルールを、Model側に書くのですが、そのときに一緒にmessageを設定できます。これを、エラーなどがあったときに表示をして、エラーの内容を伝える事が出来ます。

Modelのmessageに日本語を書けば、日本語でエラーが返ってきます。Modelが一つで済みそうなお問い合わせフォームなどは、運用時にも大きな問題にならないと思います。ただ、いくつものModelの存在や、複数人での作業時においてのメッセージの共通化、国際化...などなどModelにそのままmessageを書いていていいのか?と思う時があります。

Model

  • app_model.php
  • invalidate()をオーバーライド
    • __()で元から置き換えちゃいます
<?php
function invalidate($field, $value = true) {
	return parent::invalidate($field, __($value, true));
}
?>

Controller

  • app_contrller.php
  • 言語設定をします。ここでは日本語を
<?php
class AppController extends Controller {
    function beforeFilter(){
        Configure::write('Config.language', 'ja');
    }
}
?>

.poファイル

  • 国際化ファイル
  • app/locale/jpn/LC_MESSAGES/default.po
  • UTF-8で、改行はLFで、値はダブルクォーテーションで
    • 制約が結構厳しい...
  • msgidは、Modelに書いたmessageと同じにします
  • msgtrが出力されます
msgid "notEmpty message"
msgstr "入力されていません"
msgid "email message"
msgstr "正しくありません"

テンプレートとヘルパー

<?php
$form->error('hogehoge')
?>

マニュアル

参考

CakePHPによる実践Webアプリケーション開発

CakePHPによる実践Webアプリケーション開発