Zend framework2 如何将翻译人员设置为Zend2格式
我是Zend框架的新成员,目前我正在Zend2上工作……我想问一下Zend表单中的转换器用法……如果我想使用转换器,我会直接在表单视图中使用标签,例如form_view.phpZend 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中 像 请帮帮我…任何回答都会像我要求的那样对我有帮助 提前感谢这不是推荐的方法,
$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你打开了一个悬赏,希望得到更好的答案。显然没有一个答案符合你的标准。你能提供一些关于我缺少什么的反馈吗