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

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