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