Poedit在没有源关键字的情况下翻译字符串的推荐方法/最佳做法是什么?

时间:2013-04-12 10:58:59

标签: zend-framework2 translation translate poedit

我正在开发一个有翻译问题的Zend Framework 2应用程序。实际上在视图脚本中,a可以使用视图助手Translate。由于我在Poedit([Poedit menu] -> Catalogue -> Properties... -> Source keywords)中将“translate”定义为源关键字,因此工具会识别字符串并将其添加到转换列表中。

但是在其他地方也有一些字符串,我不能使用/ a视图助手,例如在表单类或导航中。该如何管理?

一些想法:

  1. 创建一个包含此类字符串列表的文件。示例:我们创建文件navigation.i18nforms.i18n等(或只是一个文件),在我们添加到Source keywords列表的公共Poedit语法中定义我们需要的所有字符串(例如{ {1}}:translate等),最后添加translate('my label foo'), translate('my label bar')作为源路径(i18n)。我们也可以使用已经定义为“源路径”的扩展。

  2. 一个类,它提供一个没有任何功能的(静态)方法[Poedit menu] -> Catalogue -> Properties... -> Source paths。示例:我们使用translate(...)

  3. 代替'label' => 'foo'

    我认为,第二个应用程序更清晰,我更喜欢。我不需要两次写我的密钥,并保持头部,已经翻译/更新的内容。但也许有更好的想法?

3 个答案:

答案 0 :(得分:1)

只需将关键字_添加到Poedit([Poedit menu] -> Catalogue -> Properties... -> Source keywords)即可。然后使用带有此标签的标签使用函数_而不是标签。 例如改变

        'options' => array(
            'label' => 'Username',
        ),

        'options' => array(
            'label' => _('Username'),
        ),

并在Poedit中更新Catalog From Sources。就是这样 - 现在你在Poedit中有你的标签。

答案 1 :(得分:0)

我仍然不明白你的问题在哪里:S从我能说的一切,你都试图翻译模型/实体的输出。这是View的一个典型问题!

如果主要关注的是“如何将所有模型输出转换为PoEdit?”,那么我可以告诉你的是:手动或实现数据库翻译......

按照getServiceConfig()

的语法,将ServiceManager注入基本上所有内容
return array( 'factories' => array(
    'my-service' => function ($sm) {
        $class = new ServiceClass();
        $class->setServiceManager($sm);
        return $class;
    }
));

在上面的示例中,$class几乎可以成为一切。模型/实体,TableGateway或任何你想要的东西。

答案 2 :(得分:0)

如果您以不同的方式构建表单,请执行以下操作:

$name = new \Zend\Form\Element('name');
$name->setLabel('Your name');
$name->setAttributes(array(
    'type'  => 'text'
));
$this->add($name);

http://framework.zend.com/manual/2.0/en/modules/zend.form.quick-start.html

然后你可以在poedit中注册“setLabel”作为关键字,它会选择标签文本进行翻译。