ZF 2 表单验证翻译
ZF 2 Form Validation Translations
我使用 ZF 2.4,我想将表单验证消息更改为德语,因此我使用了与 doc 兼容的代码 - https://framework.zend.com/manual/2.4/en/modules/zend.validator.messages.html
$translator = new \Zend\Mvc\I18n\Translator();
$translator->addTranslationFile(
'phpArray',
'./vendor/zendframework/zendframework/resources/languages/en/Zend_Validate.php', //or Zend_Captcha
'default',
'de_DE'
);
\Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
不幸的是,EN 仍在使用中。例如消息 "Value is required and can't be empty" 显示自 vendor/zendframework/zendframework/library/Zend/Validator/NotEmpty.php
而不是从 vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php
翻译而来
没有错误...
有人可以帮帮我吗?这对我来说很重要...
翻译器仍然指向 EN 的 Locale。您要做的是根据用户设置或什至是路由参数来设置翻译器区域设置。为此,请在 Translator
.
上使用 setLocale($locale)
因此您可以在 Application\Module.php
:
中执行此操作
$language = $event->getRouteMatch()->getParam('language', 'en_US');
$serviceManager = $event->getApplication()->getServiceManager();
$translator = $serviceManager->get('translator');
$translator
->setLocale($language)
->setFallbackLocale('en_US')
->addTranslationFilePattern(
'phpArray',
\Zend\I18n\Translator\Resources::getBasePath(),
\Zend\I18n\Translator\Resources::getPatternForValidator()
);
AbstractValidator::setDefaultTranslator($translator);
这取决于您从哪里获得语言环境。如果您没有为该语言定义路由参数,但想使用用户设置,例如:
$language = 'en_US';
$authService = $auth = $serviceManager->get('zfcuser_auth_service');
if ($authService->hasIdentity()) {
$language = $authService->getIdentity()->getUserSettings()->getLanguage();
}
哈,当我使用下面的代码时它起作用了:
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$serviceManager = $e->getApplication()->getServiceManager();
$translator = $serviceManager->get('translator');
//$locale = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$locale = 'de_DE';
//$locale = 'en_US';
$translator->setLocale(\Locale::acceptFromHttp($locale));
$translator->addTranslationFile(
'phpArray',
'./vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
'default',
'de_DE'
);
\Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
}
我不明白为什么它以前不工作..
我使用 ZF 2.4,我想将表单验证消息更改为德语,因此我使用了与 doc 兼容的代码 - https://framework.zend.com/manual/2.4/en/modules/zend.validator.messages.html
$translator = new \Zend\Mvc\I18n\Translator();
$translator->addTranslationFile(
'phpArray',
'./vendor/zendframework/zendframework/resources/languages/en/Zend_Validate.php', //or Zend_Captcha
'default',
'de_DE'
);
\Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
不幸的是,EN 仍在使用中。例如消息 "Value is required and can't be empty" 显示自 vendor/zendframework/zendframework/library/Zend/Validator/NotEmpty.php
而不是从 vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php
没有错误...
有人可以帮帮我吗?这对我来说很重要...
翻译器仍然指向 EN 的 Locale。您要做的是根据用户设置或什至是路由参数来设置翻译器区域设置。为此,请在 Translator
.
setLocale($locale)
因此您可以在 Application\Module.php
:
$language = $event->getRouteMatch()->getParam('language', 'en_US');
$serviceManager = $event->getApplication()->getServiceManager();
$translator = $serviceManager->get('translator');
$translator
->setLocale($language)
->setFallbackLocale('en_US')
->addTranslationFilePattern(
'phpArray',
\Zend\I18n\Translator\Resources::getBasePath(),
\Zend\I18n\Translator\Resources::getPatternForValidator()
);
AbstractValidator::setDefaultTranslator($translator);
这取决于您从哪里获得语言环境。如果您没有为该语言定义路由参数,但想使用用户设置,例如:
$language = 'en_US';
$authService = $auth = $serviceManager->get('zfcuser_auth_service');
if ($authService->hasIdentity()) {
$language = $authService->getIdentity()->getUserSettings()->getLanguage();
}
哈,当我使用下面的代码时它起作用了:
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$serviceManager = $e->getApplication()->getServiceManager();
$translator = $serviceManager->get('translator');
//$locale = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$locale = 'de_DE';
//$locale = 'en_US';
$translator->setLocale(\Locale::acceptFromHttp($locale));
$translator->addTranslationFile(
'phpArray',
'./vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php',
'default',
'de_DE'
);
\Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
}
我不明白为什么它以前不工作..