Zend FrameworkのZend_Validateについては、以前書いた記事
http://blog3.logosware.com/archives/600
のようにiniファイルを利用し、メッセージを日本語化していました。
しかし、Zend Frameworkが1.10にバージョンアップしてから、
英語のメッセージが一部変わり、以前のiniファイルでは一部のメッセージが日本語化されません。
また、Zend Framework 1.10のfullパッケージには、リソースファイルが追加されました。
(resources/languages/ja/Zend_Validate.php)
ただ、記述が古いのか、うまく変換されなかったので、
1.10.8のZend_Validate.phpを元に、MessageKeyをベースにして翻訳用ファイルを作成しました。
以下のようにすることで、メッセージが日本語化されました。
$translator = new Zend_Translate(
'array',
'resources/languages/ja/Zend_Validate.php', // ファイルのパス
'ja',
array('scan' => Zend_Translate::LOCALE_FILENAME)
);
// デフォルトのトランスレータを設定
Zend_Validate_Abstract::setDefaultTranslator($translator);
Tags: ZendFramework, Zend_Validate
以前からZend_Validateを使っていたのですが、本格的な翻訳は行わず、手元で強引に日本語メッセージを作成していました。
しかし、開発規模が大きくなってくると対応が難しくなってきます。
ZendFrameworkにはZend_Translateという多言語に対応したアプリケーションを作るためのパッケージが用意されています。
このZend_Translateを使うとZend_Validateのメッセージを多言語に対応させることが可能です。
※ZendFrameworkのバージョンは1.9.6を使っています。
■Zend_Translateの使い方
Zend_Translateでは設定ファイルを、配列、CSV、ini、Gettextなど各種入力ファイルをサポートしていますが、ZendFrameworkのドキュメントに記載されている例を使って、簡単な配列で説明いたします。
$english = array(
'message1' => 'message1',
'message2' => 'message2',
'message3' => 'message3');
$japanese = array(
'message1' => 'メッセージ1',
'message2' => 'メッセージ2',
'message3' => 'メッセージ3');
$translate = new Zend_Translate('array', $english, 'en');
$translate->addTranslation($japanese, 'jp');
print $translate->_("message1");
// 結果:メッセージ1
このようにとても簡単に翻訳ができます。
■Zend_Validateの翻訳
Zend_Validateの翻訳は量が多いため、配列ではなく、ini形式で翻訳ファイルを用意しました。以下は、翻訳ファイルの記載例です。
; Alnum Invalid type given, value should be float, string, or integer = "不正な値です。小数、文字列、又はは数字を入力して下さい。" '%value%' has not only alphabetic and digit characters = "'%value%'にアルファベットと数字以外の文字が含まれています。" '%value%' is an empty string = "'%value%'が入力されていません。"
どのメッセージを日本語化すべきかは、Zend_Validateのドキュメントに記載されています。
http://framework.zend.com/manual/ja/zend.validate.messages.html
次に作成した翻訳ファイルをZend_Validateにあてます。
$translate = new Zend_Translate('ini', '/filepath/validate.jp.ini', 'jp');
Zend_Validate_Abstract::setDefaultTranslator($translate);
これでValidateを行うとメッセージは用意した翻訳ファイルにしたがって日本語化されます。
Tags: PHP, ZendFramework, Zend_Validate