php - ZF2 - 如何翻译 Zend 表单验证错误消息?

标签 php zend-framework2

我有不同语言的 .po 和编译的 .mo 语言文件。 但是语言翻译不适用于 zend 表单验证错误消息。 我不想为此使用额外的 .php 文件,例如 fr.php。

我从 click here 得到了这段代码

$translator = new Zend\I18n\Translator\Translator();
$translator->addTranslationFile(
    'phpArray'
    'resources/languages/en.php',
    'default',
    'en_US'
);

Zend\Validator\AbstractValidator::setDefaultTranslator($translator);

如何在 ZF2 中实现它的任何解决方案。

最佳答案

我不赞成所选答案:P

在您的配置中添加新的翻译器时,请不要使用默认的翻译器文本域。语法如下:

$translator->addTranslationFile(
    $type,
    $resource,
    $textDomain, //<-- this is the important one
    $lang
);

在您的示例中,您已将文件添加到默认文本域。不幸的是,这给它带来了很多麻烦,因为它并不总是按预期工作。每当您添加翻译文件时,请将它们添加到您自己的文本域中!

之后,您需要做的就是为 Zend\Form\View\Helper 分配您的文本域。这是通过以下方式完成的:

// For Labels
$this->formLabel()->setTranslatorTextDomain('your-textdomain');

// For Buttons (input type submit)
$this->formButton()->setTranslatorTextDomain('your-textdomain');

// For Error-Messages
$this->formElementErrors()->setTranslatorTextDomain('your-textdomain');

如何让ServiceManager进入Form?

这也很简单。最简单的方法是使用 constructor-injection 并将 ServiceManagerServiceLocator 注入(inject)到您的 __construct() 中形式。在 Controller 级别,这看起来像这样:

$serviceLocator = $this->getServiceLocator();
$form           = new My\Form($serviceLocator);

更深入的Form-Dependencies介绍可以看on my Blog ,其中我说明了依赖数据库连接的 Zend\Form\Element\Select-Element 的数量。

关于翻译器本身

另一件需要注意的事情是:只要有一个名为 translator 的翻译服务附加到您的配置中,它就会自 Action 为默认翻译附加到表单中。这是我经常在我的模块中使用的示例配置:

'translator' => array(
    'locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type'     => 'phparray',
            'base_dir' => __DIR__ . '/lang',
            'pattern'  => '%s.php',
            'text_domain' => __NAMESPACE__,
        ),
    ),
),

关于php - ZF2 - 如何翻译 Zend 表单验证错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782558/

相关文章:

php - Javascript/HTML 表单字段命名问题

php - 如何通过键的一部分过滤数组?

php - zend Framework 2 Db 选择列分组

routes - Zend Framework 中不同类型的路由

php - 使用 Doctrine 和 ZF2 进行分页

javascript - 序列化表单并将 ajax 发布到函数

php - Android - 连接到 wamp = 服务器问候错误

php - 对预检请求的响应未通过访问控制检查 : It does not have HTTP ok status. => Cors/Laravel

zend-framework - 想要在没有文本框的弹出窗口中查看信息

php - ZF2 - 使用导航 View 助手的多个导航菜单