以前から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