1

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

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

一些想法:

  1. 创建一个包含此类字符串列表的文件。示例:我们创建文件navigation.i18nforms.i18n(或仅一个文件),在我们添加到列表的通用 Poedit 语法中定义我们需要的所有字符串Source keywords(例如,使用translate:translate('my label foo'), translate('my label bar')等),最后添加i18n为源路径([Poedit menu] -> Catalogue -> Properties... -> Source paths)。我们还可以使用已经定义为“源路径”的扩展。

  2. 一个类,它提供一个(静态)方法translate(...)而没有任何功能。示例:而不是'label' => 'foo'我们使用'label' => \MyNamespace\Util\Translator::translate('foo')

我认为,第二种方法更干净,我更喜欢。我不需要写两次我的钥匙串并记住已经翻译/更新的内容。但也许有更好的想法?

4

3 回答 3

1

只需将关键字添加_到 Poedit ( [Poedit menu] -> Catalogue -> Properties... -> Source keywords)。然后用这个标签代替标签使用函数_。例如改变

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

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

并在 Poedit 从源更新目录。就是这样——现在你在 Poedit 中有了你的标签。

于 2014-08-10T21:40:11.373 回答
0

我仍然不明白你的问题出在哪里:S 从我能说的一切来看,你正在尝试翻译模型/实体的输出。这是 View 的典型关注点!

如果主要关注的是“如何将所有这些模型输出放入 PoEdit?”,那么我只能告诉您:手动或实现 DB-Translation ......

将 ServiceManager 注入到基本上遵循以下语法的所有内容中getServiceConfig()

return array( 'factories' => array(
    'my-service' => function ($sm) {
        $class = new ServiceClass();
        $class->setServiceManager($sm);
        return $class;
    }
));

在上面的例子$class中几乎可以是一切。模型/实体、TableGateway 或任何您想要的。

于 2013-04-13T08:03:41.733 回答
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”作为关键字,它会选择标签文本进行翻译。

于 2013-07-26T09:35:57.607 回答