Zend Framework 2 - 翻译标准表格验证和错误消息

时间:2012-12-19 09:30:37

标签: php validation zend-form zend-framework2 zend-translate

我正在编写一个完整的德语应用程序,因此需要将所有内容设置为德语。

我的问题:将表单验证设置为德语的最佳和最简单的方法是什么?

我找到this page但无法弄清楚如何使这段代码正常工作:

Zend_Validate_Abstract::setDefaultTranslator($translate);

有人可以给我一些建议吗?

修改

感谢@Gordon我将以下内容放入我的Application / Module.php:

use Zend\I18n\Translator\Translator;
use Zend\Validator\AbstractValidator;

class Module
{
public function onBootstrap(MvcEvent $e)
{
    ...

     $translator = new Translator();
     $translator->addTranslationFile(
      'phpArray',
      'resources/languages/de.php',
      'default',
      'de_DE'
     );
         AbstractValidator::setDefaultTranslator($translator);
    ...
}

编辑2: 好吧,这很奇怪。当我设置de_DE时,我收到无法打开de.php文件的消息 - 这是正确的,因为“de”是包含两个其他PHP文件的文件夹。

  

无法打开文件资源/ languages / de.php进行阅读

更改文件夹或其中任何现有文件的路径不会有帮助......

当我将“de_DE”更改为“de”或“de_de”时,没有任何反应。没有错误和英语验证错误。有线索吗?

5 个答案:

答案 0 :(得分:8)

对我而言,它适用于

public function onBootstrap(MvcEvent $e)
{
    $translator=$e->getApplication()->getServiceManager()->get('translator');
    $translator->addTranslationFile(
        'phpArray',
        './vendor/zendframework/zendframework/resources/languages/it/Zend_Validate.php'

    );
    AbstractValidator::setDefaultTranslator($translator);
   // \Zend\Debug\Debug::dump($application);
}

'./供应商/ zendframework / zendframework /资源/语言/ langfolderyouwant / Zend_Validate.php'

答案 1 :(得分:4)

最后我在@Gordon的帮助下找到了答案!

我将以下内容放入我的Application / Module.php:

use Zend\I18n\Translator\Translator;
use Zend\Validator\AbstractValidator;

class Module
{
public function onBootstrap(MvcEvent $e)
{
    ...

     $translator = new Translator();
     $translator->addTranslationFile(
      'phpArray',
      'vendor/zendframework/zendframework/resources/languages/Zend_Validate.php',
      'default',
      'de_DE'
     );
     AbstractValidator::setDefaultTranslator($translator);
    ...
}

然后你需要启用php5-intl。转到php.ini并启用extension=php_intl.dll

最后,我需要在Gordon和文档提供的功能中添加完整路径(从供应商开始)。

答案 2 :(得分:4)

Zend FW的更高版本必须具有特定接口的翻译器。

use Zend\I18n\Translator\Translator;
use Zend\Validator\AbstractValidator;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        //...

        $translator = new Translator();
        $translator->addTranslationFile(
            'phpArray',
            'vendor/zendframework/zendframework/resources/languages/Zend_Validate.php',
            'default',
            'de_DE'
        );
        AbstractValidator::setDefaultTranslator($translator);
        //...
    }
}

会变成:

use Zend\I18n\Translator\Translator;
use Zend\Validator\AbstractValidator;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
    //...

        $translator = new Translator();
        $translator->addTranslationFile(
            'phpArray',
            'vendor/zendframework/zendframework/resources/languages/Zend_Validate.php',
            'default',
            'de_DE'
        );
        AbstractValidator::setDefaultTranslator(
            new \Zend\Mvc\I18n\Translator($translator)
        );
        //...
    }
}

请注意new \Zend\Mvc\I18n\Translator($translator)

答案 3 :(得分:1)

如果您不想将代码汇总到onBootstrap中而您只需要一种语言,则可以使用配置文件:

'translator' => array (
    'locale' => 'ru',
    'translation_files' => [
        [
            'type' => 'phparray',
            'filename' => 'path/to/ru/directory/Zend_Validate.php'
        ]
    ],
),

把它放进你module.config.php

答案 4 :(得分:1)

对于最新的zf2版本(2.5.0),您必须将Zend_Validate.php的路径更改为./vendor/zendframework/zend-i18n-resources/languages/de/Zend_Validate.php

$translator->addTranslationFile(
    'phpArray',
    './vendor/zendframework/zend-i18n-resources/languages/de/Zend_Validate.php',
    'default',
    'de_DE'
);