いま時の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ファイルの完成です。
ここまででデフォルトのエラーメッセージを日本語へ変更できました。
あくまでデフォルトメッセージの変更なので
さらにカスタマイズが必要になる可能性がありますね
ま!そこは使うときになったらまた考えますよ