ZF 2表格验证翻译

时间:2016-12-29 09:17:46

标签: zend-framework zend-framework2 translation

我使用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翻译

没有错误......

是的,有人可以帮助我吗?这对我来说非常重要......

2 个答案:

答案 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);
}

我不明白为什么以前没有工作..