たきゃはしです

Webとかデザインとかプログラムとか

CakePHP - バリデーションのエラーメッセージをシンプルに国際化(i18n)する方法



いま時のWeb開発で「i18n」は基本である。どうやら(謎の倒置法


まず、CakePHPでの一般的な国際化(i18n)については
CakePHP1.2の簡単国際化 」がとても参考になりました。(1.3でも問題なかったです


上記の記事内のステップがすべて完了すれば
コントローラ内の"__()"で囲まれた部分はすべて国際化されます。


しかしモデル内、特にバリデーションのエラーメッセージには
"__()"が使用できないため"cake i18n"コマンドで抽出できずに英語のままです。


今回はこの部分をシンプルに日本語化する方法を書きます。
 色々やれば抽出させることも可能ですが、色々やらなくてはなりません。


はじめにapp_model.phpに数行のソースを追加しておきます。

//app_model.php
function invalidate($field, $value = true) {
    return parent::invalidate($field, __($value, true));
}


次はpoファイルの作成ですが、作業は単純。


下記ソースをpoファイルの後ろにでもコピペした後
"msgstr" の値を適宜編集してください。

#: Validation :
#: notEmpty
msgid "notempty"
msgstr "必須項目です"

#: Validation :
#: alphaNumeric
msgid "alphanumeric"
msgstr "半角英数字ではありません"

#: Validation :
#: between
msgid "between"
msgstr "文字数が指定範囲内ではありません"

#: Validation :
#: blank
msgid "blank"
msgstr "空白ではありません"

#: validation :
#: cc
msgid "cc"
msgstr "クレジットカード番号ではありません"

#: Validation :
#: comparison
msgid "comparison"
msgstr "比較結果が正しい値ではありません"

#: Validation :
#: custom
msgid "custom"
msgstr "マッチした結果が正しい値ではありません"

#: Validation :
#: date
msgid "date"
msgstr "日付ではありません"

#: Validation :
#: time
msgid "time"
msgstr "時間ではありません"

#: Validation :
#: boolean
msgid "boolean"
msgstr "論理値ではありません"

#: Validation :
#: decimal
msgid "decimal"
msgstr "十進数の数値ではありません"

#: Validation :
#: email
msgid "email"
msgstr "メールアドレスではありません"

#: Validation :
#: equalTo
msgid "equalto"
msgstr "チェック値と同じではありません"

#: Validation :
#: extension
msgid "extension"
msgstr "拡張子が対象ではありません"

#: Validation :
#: ip
msgid "ip"
msgstr "IPアドレスではありません"

#: Validation :
#: minLength
msgid "minlength"
msgstr "指定以上の長さの文字列ではありません"

#: Validation :
#: maxLength
msgid "maxlength"
msgstr "指定以下の長さの文字列ではありません"

#: Validation :
#: money
msgid "money"
msgstr "金額ではありません"

#: Validation :
#: multiple
msgid "multiple"
msgstr "選択されたアイテムの個数、または内容が正しい値ではありません"

#: Validation :
#: numeric
msgid "numeric"
msgstr "数値ではありません"

#: Validation :
#: phone
msgid "phone"
msgstr "電話番号ではありません"

#: Validation :
#: postal
msgid "postal"
msgstr "郵便番号ではありません"

#: Validation :
#: range
msgid "range"
msgstr "数値が指定範囲内ではありません"

#: Validation :
#: ssn
msgid "ssn"
msgstr "社会保障番号ではありません"

#: Validation :
#: uuid
msgid "uuid"
msgstr "ユニークではありません"

#: Validation :
#: url
msgid "url"
msgstr "URLではありません"

#: Validation :
#: inList
msgid "inlist"
msgstr "リストに含まれた値ではありません"

#: Validation :
#: userDefined
msgid "userdefined"
msgstr "定義した内容ではありません"


最後にPoeditなどでコンパイルしてもらえばmoファイルの完成です。
ここまででデフォルトのエラーメッセージを日本語へ変更できました。


あくまでデフォルトメッセージの変更なので
さらにカスタマイズが必要になる可能性がありますね


ま!そこは使うときになったらまた考えますよ


    • -

PHP 5.3
CakePHP 1.3.8