如何在Zend框架2表单标签翻译?(How to translate form labels in

2019-08-22 04:10发布

我没有得到它 !..可以请人讲解,如何表单标签翻译? 一个简单的例子将是巨大的。

先感谢您!


类搜索\表格\ 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/sea​​rch/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>

此外,我调试的FormLabel的地方,在那里使用tranlator(线116-120 ) -似乎是确定。

但它仍然没有工作。


编辑

的(试验)项的标签,我加入到de_DE.po文件手动,被tranlated。 该ZF2端问题实际上,我是用$form->get('city')->getLabel()代替$this->formlabel($form->get('city'))在日视图脚本。

问题是现在,该标签不添加到de_DE.po文件。 但它不是一个问题ZF2了,所以我接受鲁本的答案,并打开一个新的poEdit的问题。

Answer 1:

而不是使用:

<?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文件。



Answer 2:

我觉得你的问题是,你的标签没有被poEdit的(或类似工具)来检测,所以你必须手动添加到您的poEdit的目录(的.po)

使通过像poEdit的工具检测到您的标签字符串,你的字符串需要一个translate()函数或_((其它功能可在目录/属性/来源关键字添加)内使用

_()函数不是用户ZF2(今天)这样一个微小的黑客是增加这样的功能在你的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',
        ),


Answer 3:

@Ruben说对了!

我用我PoEdit软件生成我*的.mo文件,并一定要得到该文件中所有的翻译,我创造的地方(鉴于例如)一个名为_lan.phtml所有文本文件中进行翻译:

<?php echo $this->translate("My label"); 
... ?>

当然,poEdit的必须配置找到我的关键字。 检查该如何配置它



Answer 4:

所有的解决方案不使用ZF2的力量。 你必须正确地配置您的poEdit的:

所有的东西都在这里: http://circlical.com/blog/2013/11/5/localizing-your-twig-using-zend-framework-2-applications



文章来源: How to translate form labels in Zend Framework 2?