如何将翻译器放在Zend2表格中

时间:2013-02-08 05:00:03

标签: zend-framework2

我是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
    ));

请帮助我......任何答案对我都有帮助,就像我问的那样

提前致谢

3 个答案:

答案 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)

之类的ViewHelper之前(!)之前在$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'));

我建议去工厂。