我没有得到it!..可以请某人解释一下,如何翻译表格标签?一个简单的例子就是很棒。
提前谢谢!
类Search \ Form \ CourseSearchForm
...
class CourseSearchForm extends Form {
...
public function __construct(array $cities) {
parent::__construct('courseSearch');
...
$this->add(array(
'name' => 'city',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Stadt',
'value_options' => $this->cities,
'id' => 'searchFormCity',
),
));
...
}
}
查看脚本/module/Search/view/search/search/search-form.phtml
<?php echo $this->form()->openTag($form); ?>
<dl>
...
<dt><label><?php echo $form->get('city')->getLabel(); ?></label></dt>
<dd><?php echo $this->formRow($form->get('city'), null, false, false); ?></dd>
...
</dl>
<?php echo $this->form()->closeTag(); ?>
<!-- The formRow(...) is my MyNamespace\Form\View\Helper (extends Zend\Form\View\Helper\FormRow); the fourth argument of it disables the label. -->
module/Application/config/module.config.php
已配置:
return array(
'router' => ...
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'translator' => array(
'locale' => 'de_DE',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
'controllers' => ...
'view_manager' => ...
);
我还编辑了我的视图并使用FormLabel
视图助手:
<dt><label><?php echo $this->formLabel($form->get('city')); ?></label></dt>
此外,我在使用转换器的地方(行116-120)调试FormLabel
- 似乎没问题。
但它仍无效。
修改
我手动添加到de_DE.po
文件的标签的(测试)项目已经过翻译。实际上,ZF2方面的问题是我在视图脚本中使用$form->get('city')->getLabel()
而不是$this->formlabel($form->get('city'))
。
问题是,标签未添加到de_DE.po
文件中。但它不再是ZF2问题了,所以我接受了Ruben的回答并开了一个新的Poedit问题。
答案 0 :(得分:9)
而不是使用:
<?php echo $form->get('city')->getLabel(); ?>
您应该使用formlabel视图助手。如果已将其插入ServiceManager,则此助手会在渲染过程中自动使用您的翻译器。很可能你会在你的应用程序模块module.config.php中找到它:
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
一旦使用了formlabel视图助手:
echo $this->formLabel($form->get('city'));
当然要确保您的翻译在.po文件中。
答案 1 :(得分:5)
我认为您的问题是您的标签未被poedit(或类似工具)检测到,因此您必须手动将它们添加到您的poedit目录(.po)
要使用像poedit这样的工具检测标签字符串,您的字符串需要在 translate()函数或 _()中使用(可以添加其他函数)在目录/ properties / sources关键字)
因为 _()函数不是ZF2中的用户(今天)所以一个小小的hack就是在你的index.php中添加这样的函数(不需要修改任何东西,这样,在poedit params):
// in index.php
function _($str)
{
return $str;
}
并且在您的代码中,只需在字符串超出翻译功能时使用它
//...
$this->add(array(
'name' => 'city',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => _('myLabel') , // <------ will be detected by poedit
'value_options' => $this->cities,
'id' => 'searchFormCity',
),
));
//...
或者喜欢这个,如果你愿意的话
$myLabel = _('any label string'); // <--- added to poedit catalog
//...
'options' => array(
'label' => $myLabel ,
'value_options' => $this->cities,
'id' => 'searchFormCity',
),
答案 2 :(得分:1)
@Ruben说对了!
我使用PoEdit生成我的 *。mo 文件,并确保获取文件中的所有翻译,我在某处(例如在视图中)创建一个名为<的文件strong> _lan.phtml 包含要翻译的所有文字:
<?php echo $this->translate("My label");
... ?>
当然, Poedit 必须配置为查找我的关键字。检查此to how to configure it
答案 3 :(得分:0)
所有解决方案都不使用ZF2的强大功能。您必须正确配置您的poedit:
一切都在这里: http://circlical.com/blog/2013/11/5/localizing-your-twig-using-zend-framework-2-applications