cakePHPでvalidationのエラーメッセージを国際化

2013-12-09

cakePHPでvalidationのエラーメッセージを国際化

ちょっくら仕事で必要だったもので調べてみた。 通常、validationのエラーメッセージは、↓みたいな感じでModelの$validateというメンバ変数に設定を書く。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class User extends AppModel {
public $validate = array(
'mailaddress' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Email Format Error'
),
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'mailaddress must not be empty'
)
)
);
}

これだと、バリデーションのエラーメッセージがModelに埋め込まれるので、(*ノωノ) イヤン っていうか、これは設計ミスなんじゃね?っていう気もするが・・・。   単純にgetText形式にしても上手くいかない。 【駄目な例】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class User extends AppModel {
public $validate = array(
'mailaddress' => array(
'email' => array(
'rule' => array('email'),
'message' => __('mailFormatError')
),
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => __('notEmpty')
)
)
);
}

  これを回避する方法は、色々と見つかったけど、一番のお勧めは今のところconstructorで宣言する方法。 【出来たコード例】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class User extends AppModel {
public function __construct(){
parent::__construct();
$this->validate = array(
'mailaddress' => array(
'email' => array(
'rule' => array('email'),
'message' => __('mailFormatError')
),
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => __('notEmpty')
)
)
);
}
}

この方法なら、あとでもっと良い方法が見つかった時でも後戻りも楽そう。 単純に考えると、constructor実行時にはgetText関数が参照出来て、validationErrorのメッセージ表示時には参照出来ないということかな。   cake歴浅いので、もう少し理解したら、さらに良い方法を探してみます。