CatalystでFormValidator::SimpleとI18Nプラグインを使ってエラーメッセージを国際化対応
適当なやり方なのかはわかりませんが、うまくいったのでやり方を書きます。
それぞれのプラグインについては特に説明しません。
要は、
- FormValidatorのメッセージに言語リソースのキーを指定する
- その値を使って、フォーム側でI18Nのlocalizeメソッドを呼んで、テキストを取得する
っていうだけです。
以下にそれぞれの設定ファイルの例を。
messages.yml(FormValidator::Simple のメッセージ設定ファイル)
sample_page: keyword01: NOT_BLANK: e_keyword01
ja.pm(I18Nの日本語言語リソース)
package MyApp::I18N::ja; use utf8; use base 'MyApp::I18N'; our %Lexicon = ( 'e_keyword01' => 'キーワード1が空です', ); 1;
en.pm(I18Nの英語言語リソース)
package MyApp::I18N::en; use base 'MyApp::I18N'; our %Lexicon = ( 'e_keyword01' => 'Keyword1 is empty', ); 1;
実際に動かすときは、こんな感じ。
コントローラ
sub sample_page :Local { my ($self, $c) = @_; if ($c->req->method eq 'POST' ) { if ( $c->form->has_error ) { $c->stash->{error} = $c->form; } else { #エラーじゃなかったときの処理 } } }
TT
[% IF error.has_error %] <ul> [% FOREACH message IN error.messages('sample_page') %] <li>[% c.localize(message) %]</li> [% END %] </ul> [% END %]
これでいけます。