我使用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 ..例如,vendor/zendframework/zendframework/library/Zend/Validator/NotEmpty.php
显示的消息“值是必填项且不能为空”,并且未从vendor/zendframework/zendframework/resources/languages/de/Zend_Validate.php
翻译
没有错误......
是的,有人可以帮助我吗?这对我来说非常重要......答案 0 :(得分:2)
翻译人员仍指向EN的语言环境。您要做的是根据用户设置或甚至路由参数设置转换器区域设置。为此,请使用setLocale($locale)
上的Translator
。
所以你可以在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();
}
答案 1 :(得分:0)
哈,它在我使用下面的代码时有效:
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);
}
我不明白为什么以前没有工作..