LoginSignup
4
4

More than 5 years have passed since last update.

Zend Framework 2 で Validatorのメッセージを変更する

Last updated at Posted at 2012-12-14

ZF2では、ZF1と同様にAbstractValidatorがTranslatorAwareですので、Zend\I18nコンポーネントに含まれるTranslatorをセットし、メッセージの変更を摘要します。なお、I18nコンポーネントはext-intlが必要です。

<?php
use Zend\Loader\StandardAutoloader;

require_once __DIR__.'/library/Zend/Loader/StandardAutoloader.php';
$dir = __DIR__.'/library/Zend/Validator';

$autoloader = new StandardAutoloader(array('autoregister_zf' => true));
$autoloader->register();

$digits = new Zend\Validator\Digits;
$digits->setTranslatorTextDomain('validator');

$translator = new Zend\I18n\Translator\Translator;
$file = __DIR__.'/resources/languages/ja/Zend_Validate.php';
$translator->addTranslationFile('phparray', $file, 'validator', 'ja_JP');
$digits->setTranslator($translator);
$digits->isValid("string");
var_dump($digits->getMessages()); // 上記ファイルにて英語キーにヒットする訳があった場合に翻訳が摘要されています。

実際にZendSkeletonApplicationを用いたアプリケーションでは、TranslatorServiceFactoryを通じてTranslatorをサービスとしてもっているためそちらを使うことになるでしょう。

参照 ZF2 Translating http://framework.zend.com/manual/2.0/en/modules/zend.i18n.translating.html

// 追記 12月15日
2.0.4では、zf2用の日本語リソースが利用可能になりました。

また、translatorTextDomainのデフォルトは"default"であるため、
上の例は以下の通り置き換えられます。

<?php
$translator = new Zend\I18n\Translator\Translator;
$file = __DIR__.'/resources/languages/ja/Zend_Validate.php';
$translator->addTranslationFile('phparray', $file, 'default', 'ja_JP');

$digits = new Zend\Validator\Digits;
$digits->setTranslator($translator);
$digits->isValid("string");
var_dump($digits->getMessages()); 

また、ZF2のモジュール機構を用いる場合は、ServiceManagerのインスタンスを利用することになるでしょう。ZF2では、ZF1でのPluginLoaderからServiceLocatorを利用した形態へとアップデートされたPluginManagerがあるのでそちらを利用します。

<?php
$sm = new Zend\ServiceManager\ServiceManager;
$sm->setService('translator', $translator);
$validatorPluginManager = new Zend\Validator\ValidatorPluginManager();
$validatorPluginManager->setServiceLocator($sm);

$digits = $validatorPluginManager->get('digits');
$digits->isValid("string");
var_dump($digits->getMessages());
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4