我是Zend框架的新人,目前我正在研究Zend2 ...我想问一下Zend表格中的译者用法....如果我想使用翻译我直接用于表格视图中的标签ieform_view.php像
$this->formLabel()->setTranslator($translator, 'date_of_birth');
但我想在表单中添加翻译器iein src / my_module / Form / UserForm.php 像
$this->add(array(
'name' => 'date_of_birth',
'attributes' => array(
'type' => 'text',
'id' => 'date_of_birth',
),
'options' => array(
'label' => 'DateOfBirth',
), //Here there is any option to put translator
));
请帮助我......任何答案对我都有帮助,就像我问的那样
提前致谢
答案 0 :(得分:2)
你真的不需要这样做。由于使用工厂密钥translator
设置的转换程序将自动注入表单。
最好的方法(在我看来)是广泛使用翻译text_domain
:
'translator' => array(
'locale' => 'de_DE',
'translation_file_patterns' => array(
array(
'type' => 'phparray',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.php',
'text_domain' => 'MyModuleTextDomain'
),
),
),
通过此设置,模块的文件将自动插入到每个Zend \ Form都知道的默认TranslatorService中。
因此,最终您所要做的就是让ViewHelpers
知道您正在使用的TextDomain
。这是通过以下方式完成的:
$this->formLabel()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formButton()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formElementErrors()->setTranslatorTextDomain('MyModuleTextDomain');
您需要在使用view.phtml
或$this->formElement($element)
$this->formCollection($form)
内进行此操作
这就是它的全部内容。我记得曾经在某处讨论过如何更容易地传递Text-Domain-Data,但我现在无法找到它。因此,将来可能会变得更容易一些;)现在,只需要3行就可以了!
答案 1 :(得分:1)
上面的答案是非常不必要的...因为您的翻译器被自动添加到zend表单以呈现表单标签和.... 只在模块配置中使用此代码:
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'phparray',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.php',
),
),
),
如果您使用正确的视图助手来渲染表单元素(或整个表单),它将自动翻译
答案 2 :(得分:0)
这不是推荐的方法,因为如果您配置了翻译器(如果您使用的是Skeleton应用程序,则会自动翻译表单)。但是,由于您询问了如何直接在表单中使用翻译器,我将向您展示如何进行翻译。请仔细考虑一下你是否真的想要这样做,因为我无法想象一个必要的用例。
要完全按照您的要求行事,您可以将翻译人员注入您的表单。您可以在控制器或工厂中执行此操作。我将在此示例中使用工厂,因为它更多DRY。
// In your module's config file
'service_manager' => array(
'factories' => array(
'YourModule\Form\YourForm' => function($sm) {
$translator = $sm->get('Translator');
return new \YourModule\Form\YourForm($translator);
},
),
),
然后在你的表单类中,你可以这样做:
namespace YourModule\Form;
class RegisterForm extends \Zend\Form\Form {
public function __construct($translator) {
// Do something
$translated_string = $translator->translate('string to translate');
}
}
然后在你的控制器中,你可以这样做:
$your_form = $this->servicelocator->get('YourModule\Form\YourForm');
或者如果你不想使用工厂,你可以选择不添加它,而是这样做:
$your_form = new \YourModule\Form\YourForm($this->servicelocator->get('Translator'));
我建议去工厂。