【问题标题】:How to translate form labels in Zend Framework 2?如何在 Zend Framework 2 中翻译表单标签?
【发布时间】:2013-04-04 09:45:11
【问题描述】:

我没有收到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/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(行116-120)——似乎没问题。

但是还是不行。


编辑

我手动添加到de_DE.po 文件中的标签(测试)项目已被翻译。 ZF2 方面的问题实际上是,我在视图脚本中使用 $form-&gt;get('city')-&gt;getLabel() 而不是 $this-&gt;formlabel($form-&gt;get('city'))

现在的问题是,标签没有添加到de_DE.po 文件中。但这不再是 ZF2 问题,所以我接受了 Ruben 的回答并打开了一个新的 Poedit 问题。

【问题讨论】:

  • 请添加一些您当前拥有的代码。它将更容易帮助您并查看问题所在。
  • 感谢您的快速回复!我现在添加了相关代码。

标签: label zend-framework2 translation translate zend-form2


【解决方案1】:

所有解决方案都没有使用 ZF2 的力量。您必须正确配置您的 poedit:

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

【讨论】:

    【解决方案2】:

    我认为您的问题是 poedit(或类似工具)未检测到您的标签,因此您必须手动将它们添加到您的 poedit 目录(.po)中

    要让 poedit 等工具检测到您的标签字符串,您的字符串需要在 translate() 函数或 _() 中使用(可以添加其他函数在目录/属性/来源关键字中)

    因为 _() 函数不是 ZF2 中的用户(今天)所以一个小技巧就是在你的 index.php 中添加一个这样的函数(不需要修改任何东西,这样,在 poedit 参数中):

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

    【讨论】:

    • 嗨 @aromatix 我在使用 zend 2 学习项目时使用语言翻译 $this->add(array( 'name' => "username", 'type' => 'Zend\ Form\Element\Text', 'options' => array( 'label' => _('Your Username'), // 我在这个位置发现了致命错误 ), ));致命错误:调用未定义函数 Incuser\Form_() _() 以翻译表单标签给我致命错误,我现在正在使用 php 5.3.1。请帮助我,我无法弄清楚这个问题。
    【解决方案3】:

    @Ruben 说得对!

    我我使用PoEdit 来生成我的 *.mo 文件并确保在文件中获得所有翻译,我在某处(例如在视图中)创建了一个名为 的文件_lan.phtml 包含所有要翻译的文本:

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

    当然,必须配置 Poedit 才能找到我的关键字。检查这个to how to configure it

    【讨论】:

    • 不错的简单解决方法。谢谢!这个案子的好主意,如果我不能让它工作的话。
    • 我使用 Poedit 做了类似的事情,但不需要额外的文件:coderwall.com/p/atvtbw
    【解决方案4】:

    而不是使用:

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

    【讨论】:

    • module.config.php 已配置,现在我还编辑了我的视图并使用了FormLabel 视图助手。我已经在使用翻译器的地方调试了FormLabel(行116-120)——似乎没问题。但它仍然无法正常工作。
    • 您确定翻译在您的 .po 文件中吗?您是否检查过 PoEdit 是否解析了标签的值,并且您是否在您使用的特定语言环境中翻译了它们?
    • 没错,就是问题所在。请参阅上面的更新答案和我的其他答案here
    • 对不起,我错过了编辑部分。 ;) 太好了,你解决了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多