我有不同语言的 .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
并将 ServiceManager
或 ServiceLocator
注入(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/