Zend framework2 如何将翻译人员设置为Zend2格式

Zend framework2 如何将翻译人员设置为Zend2格式,zend-framework2,Zend Framework2,我是Zend框架的新成员,目前我正在Zend2上工作……我想问一下Zend表单中的转换器用法……如果我想使用转换器,我会直接在表单视图中使用标签,例如form_view.php $this->formLabel()->setTranslator($translator, 'date_of_birth'); 但是我只想在表单中添加转换器,即在src/my_module/form/UserForm.php中 像 请帮帮我…任何回答都会像我要求的那样对我有帮助 提前感谢这不是推荐的方法,

我是Zend框架的新成员,目前我正在Zend2上工作……我想问一下Zend表单中的转换器用法……如果我想使用转换器,我会直接在表单视图中使用标签,例如form_view.php

$this->formLabel()->setTranslator($translator, 'date_of_birth');
但是我只想在表单中添加转换器,即在src/my_module/form/UserForm.php中 像

请帮帮我…任何回答都会像我要求的那样对我有帮助


提前感谢

这不是推荐的方法,因为如果您配置了转换器(如果您使用的是框架应用程序,则会自动翻译表单)。但是,由于您询问如何在表单中直接使用翻译器,因此我将向您展示如何做到这一点。请仔细考虑,如果你真的想这样做,因为我无法想象一个用例,这是必要的。< /强>

要完全按照您的要求执行,您可以将翻译器注入到表单中。您可以在控制器中或在工厂中执行此操作。在本例中,我将使用工厂,因为它更简单

然后在form类中,您可以这样做:

namespace YourModule\Form;

class RegisterForm extends \Zend\Form\Form {
    public function __construct($translator) {
        // Do something

        $translated_string = $translator->translate('string to translate');
    }
}
然后在控制器中,可以执行以下操作:

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'))


不过,我建议使用工厂。

这不是推荐的方法,因为如果您配置了转换器(如果您使用的是框架应用程序,则会自动翻译表单)。但是,由于您询问如何在表单中直接使用翻译器,因此我将向您展示如何做到这一点。请仔细考虑,如果你真的想这样做,因为我无法想象一个用例,这是必要的。< /强>

要完全按照您的要求执行,您可以将翻译器注入到表单中。您可以在控制器中或在工厂中执行此操作。在本例中,我将使用工厂,因为它更简单

然后在form类中,您可以这样做:

namespace YourModule\Form;

class RegisterForm extends \Zend\Form\Form {
    public function __construct($translator) {
        // Do something

        $translated_string = $translator->translate('string to translate');
    }
}
然后在控制器中,可以执行以下操作:

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'))


不过,我还是建议你去工厂。

上面的答案完全没有必要。。。因为您的翻译器已自动添加到zend表单,用于呈现表单标签和。。。。 仅在模块配置中使用此代码:

'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'phparray',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.php',
            ),
        ),
    ),

如果您使用正确的视图帮助程序来呈现表单元素(或整个表单),它将自动转换为上面的答案,这是非常不必要的。。。因为您的翻译器已自动添加到zend表单,用于呈现表单标签和。。。。 仅在模块配置中使用此代码:

'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'phparray',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.php',
            ),
        ),
    ),

如果您使用正确的视图帮助程序来呈现表单元素(或整个表单),它将自动转换

您实际上不需要这样做。因为使用工厂键设置的转换器将自动注入表单中

在我看来,最好的方法是广泛使用译者
text\u域

'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

因此,最终你所要做的就是让查看帮助者知道你正在使用的
TextDomain
。这是通过以下方式实现的:

$this->formLabel()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formButton()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formElementErrors()->setTranslatorTextDomain('MyModuleTextDomain');
在(!)之前,您需要在各自的
视图.phtml中执行此操作一次,然后使用视图帮助程序,如
$this->formElement($element)
$this->formCollection($form)


这就是一切。我记得在某处看到过一次讨论,讨论如何使文本域数据更容易传递,但我现在找不到。所以将来事情可能会变得容易一点;)现在,3行是所有需要的,虽然

你真的不需要这么做。因为使用工厂键设置的转换器将自动注入表单中

在我看来,最好的方法是广泛使用译者
text\u域

'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

因此,最终你所要做的就是让查看帮助者知道你正在使用的
TextDomain
。这是通过以下方式实现的:

$this->formLabel()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formButton()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formElementErrors()->setTranslatorTextDomain('MyModuleTextDomain');
在(!)之前,您需要在各自的
视图.phtml中执行此操作一次,然后使用视图帮助程序,如
$this->formElement($element)
$this->formCollection($form)


这就是一切。我记得在某处看到过一次讨论,讨论如何使文本域数据更容易传递,但我现在找不到。所以将来事情可能会变得容易一点;)现在,3行是所有需要的,虽然

是@ubercooluk我知道po编辑器,我在VIEW.phtml文件中使用过它,但我希望它以表单(比如src/my_module/form/UserForm.php)而不是表单的形式添加它view@Gautam3164我不明白我的回答怎么不再回答你的问题了。它完全符合你的要求。作为一个回答者,这是否是一个好的练习并不是我的问题。如果你不想得到你所问问题的答案,也许你不应该问这个问题。Gautam3164你打开了一个悬赏,希望得到更好的答案。显然没有一个答案符合你的标准。你能提供一些关于我缺少什么的反馈吗