composerでインストールするとZF2の本体は
vendor/zendframework/zendframework/library/Zend
とかいう変な場所に置かれてしまうわけですが、その近くに
vendor/zendframework/zendframework/resources/languages/ja/Zend_Validate.php
という謎のファイルを発見しました。
中身は単なる配列で、Zend_Validatorなどで使える値が入っているようです。
なんだこれ。
おそらくどこかでオートロードするような機能があるのでしょうが、どうやって使うのが正解なのか全くわかりません。
とりあえず無理矢理読み込んでみます。
Fatal error: Class 'Locale' not found in path\to\channel\vendor\zendframework\zendframework\library\Zend\I18n\Translator\Translator.php on line 228
あふん。
Localeは国際化関数に含まれるクラスです。
http://php.net/manual/ja/intl.installation.php
> PHP 5.3.0 以降には同梱されています
php.iniに
;extension=php_intl.dll
という行があり、デフォルトで無効化されていました。
ところがこの行を有効化したら、実際にはファイルが存在するのに「icuuc46.dllが見つからない」とか言われて起動しなくなりました。
原因は不明ですが、xampp\phpにあったicuuc*.dllを片端からxampp\apache\binにコピペしたらなおった。
実行結果。
いやまあ、filenameを直接指定するとか明らかに変なので、ここらへんオートロードでどうにかなるとは思うのですが、よくわかりません。
Zend_ValidateというよりZend\I18nの話だなこりゃ。
vendor/zendframework/zendframework/library/Zend
とかいう変な場所に置かれてしまうわけですが、その近くに
vendor/zendframework/zendframework/resources/languages/ja/Zend_Validate.php
という謎のファイルを発見しました。
中身は単なる配列で、Zend_Validatorなどで使える値が入っているようです。
なんだこれ。
おそらくどこかでオートロードするような機能があるのでしょうが、どうやって使うのが正解なのか全くわかりません。
とりあえず無理矢理読み込んでみます。
<?php require_once('path/to/channel/vendor/autoload.php'); //設定 $validatorOptions = array( 'translatorTextDomain'=>'ja' ); $translatorOptions = array( 'translation_files' =>array( array( 'type' => 'phparray' ,'text_domain'=>'ja' ,'filename'=>'path/to/channel/vendor/zendframework/zendframework/resources/languages/ja/Zend_Validate.php' ) ) ); //Ipバリデータ $validator = new Zend\Validator\Ip($validatorOptions); //有効なIPアドレスか $isValid = $validator->isValid('192.168.0.256'); //発生したエラーメッセージを取得 $errorMessages = $validator->getMessages(); //Translatorをセット $translator = Zend\I18n\Translator\Translator::factory($translatorOptions); $validator->setTranslator($translator); //再度チェック $isValid = $validator->isValid('192.168.0.256'); $errorMessagesJp = $validator->getMessages();
Fatal error: Class 'Locale' not found in path\to\channel\vendor\zendframework\zendframework\library\Zend\I18n\Translator\Translator.php on line 228
あふん。
Localeは国際化関数に含まれるクラスです。
http://php.net/manual/ja/intl.installation.php
> PHP 5.3.0 以降には同梱されています
php.iniに
;extension=php_intl.dll
という行があり、デフォルトで無効化されていました。
ところがこの行を有効化したら、実際にはファイルが存在するのに「icuuc46.dllが見つからない」とか言われて起動しなくなりました。
原因は不明ですが、xampp\phpにあったicuuc*.dllを片端からxampp\apache\binにコピペしたらなおった。
実行結果。
array(1) { ["notIpAddress"]=> string(50) "The input does not appear to be a valid IP address" } array(1) { ["notIpAddress"]=> string(53) " 入力値は IP アドレスではないようです" }無事日本語化されました。
いやまあ、filenameを直接指定するとか明らかに変なので、ここらへんオートロードでどうにかなるとは思うのですが、よくわかりません。
Zend_ValidateというよりZend\I18nの話だなこりゃ。
PR