ZF2无法使用翻译

马努

感谢您抽出宝贵的时间来帮助我。

我一直在关注本教程:

http://samminds.com/2012/09/zend-framework-2-translate-i18n-locale/

http://samminds.com/2012/09/create-po-language-files-using-poedit/

而且我认为我已经按照所有步骤操作,但是翻译机制无法正常工作。

INLT扩展已安装并在系统上处于活动状态。

在模块配置中,我添加了:

'translator' => array(
    'locale' => 'es_ES',
    'translation_file_patterns' => array(
        array(
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
            'text_domain' => __NAMESPACE__,
        ),
    ),
),

在Module.php内添加了一行以定义翻译方法。

public function onBootstrap(MvcEvent $e)
{
    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $translator
        ->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']))
        ->setFallbackLocale('fr_FR');

    ...
    ...

我已经成功创建了po和mo文件,并将其上传到正确位置的服务器。

vmamp@AMP30:/users/p0100/web/module/Application/language> ls -l
total 20
-rw-r--r-- 1 vmamp users 2652 Jan 16 23:46 es_ES.mo
-rw-r--r-- 1 vmamp users 4582 Jan 16 23:46 es_ES.po

例如,这是可能发生翻译的视图的一个片段:

            <li class="moteur"><?php echo $this->translate('Moteur')?></li>
            <li class="couleur"><?php echo $this->translate('Couleur')?></li>
            <?php if (count($this->universeData['garnissage']) > 1):?>
            <li class="selle"><?php echo $this->translate('Selle')?></li>
            <?php endif;?>
            <?php if (count($this->universeData['jonc']) > 1):?>
            <li class="jonc"><?php echo $this->translate('Jonc')?></li>
            <?php endif;?>
            <?php if (count($this->universeData['retros']) > 1):?>
            <li class="retros"><?php echo $this->translate('Retros')?></li>
            <?php endif;?>
            <?php if (count($this->universeData['signature']) > 1):?>
            <li class="signature"><?php echo $this->translate('Signature')?></li>
            <?php endif;?>
            <li class="rangement"><?php echo $this->translate('Rangement')?></li>
            <li class="confort"><?php echo $this->translate('Confort')?></li>
            <li class="perso"><?php echo $this->translate('Perso')?></li>

这是.po文件(es_ES.po)内容的一部分

msgid "Couleur"
msgstr "Color"

#: view/application/application/configure.phtml:56
msgid "Selle"
msgstr "Asiento"

#: view/application/application/configure.phtml:59
msgid "Jonc"
msgstr "Embellecedores"

#: view/application/application/configure.phtml:62
msgid "Retros"
msgstr "Retrovisores"

#: view/application/application/configure.phtml:65
msgid "Signature"
msgstr "Luminosidad"

#: view/application/application/configure.phtml:67
msgid "Rangement"
msgstr "Orden"

#: view/application/application/configure.phtml:68
msgid "Confort"
msgstr "Confort"

我检查了$ _SERVER ['HTTP_ACCEPT_LANGUAGE']返回的内容,这是什么:

es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3

所以我认为字符串可能会翻译成西班牙语,但事实却并非如此。由于翻译文件被命名为es_ES,并且我看到HTTP_ACCEPT_LANGUAGE返回的密钥为es-ES,所以我尝试将它们重命名为es-ES,但这并不能解决问题。

考虑到编码问题,我检查了文件的字符集,并将它们放在utf8上,因为我将它们设置在对应的metatag上,这也是我在poedit上为字符集和源字符集在poedit上为字符集选择的编码。

vmamp@AMP30:/users/p0100/web/module/Application/language> file -i es_ES.po
es_ES.po: text/x-po charset=utf-8

顺便说一句,当我从服务器端显示文件时,我会欣赏到字符集错误(如果我从自己的位置进行编辑(例如,使用记事本+进行编辑,则会对特殊字符进行正确编码))。为什么我遇到这个问题,我该如何解决?

无论如何,我在这里显示了那些没有特殊字符的字符串,我想如果我正确地执行该过程,它们可能会被很好地翻译,但是看来我缺少了一些东西...

有这个领域的经验吗?

应用程序行为就像没有添加翻译机制一样,没有任何错误。

在此先感谢您的时间和精力。

最好的祝福。

编辑:

我需要将文本域添加到翻译行:

<?php echo $this->translate('Moteur', 'Application')?>

添加后,翻译效果很好。

亚历克斯·韦尔兹

我有同样的问题。也许我的解决方案也可以为您提供帮助。

在module.config.php中,我有:

...
'translator' => array(
    'translation_file_patterns' => array(
        array(
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
            'text_domain' => __NAMESPACE__,
        ),
    ),
),
...

确保必须创建* .mo文件(如您已经显示的那样。不过我还是写它来帮助其他人。)。我读过一篇教程,在保存poedit时应该禁用自动创建mo文件的功能。事实证明,我根本没有Mo文件。我的代码中的第二个错误是以下内容。我建立了一个测试页面以显示调试消息。在这里您可以输出使用的语言环境。这样就可以查看您是否获取了正确的文件。在底部,我添加了一个小的翻译测试,看它是否按预期工作:

<?php
    echo "<br /><h1>DEBUG</h1><br />";
    echo "Translator-Textdomain: " . $this->formLabel()->getTranslatorTextDomain() . "<br />";
    echo "Translator-Locale: " . $this->formLabel()->getTranslator()->getLocale() . "<br />";
    echo "Translator->FallbackLocale: " . $this->formLabel()->getTranslator()->getFallbackLocale() . "<br />";
    echo "Translate-Test: Password -> ". $this->translate('Password');
?>

不用说它没有用。我搜索了两天的错误。看到错误了吗?我忘了把__NAMESPACE__要翻译的文字放在后面。更正它应为:

<?php
    echo "<br /><h1>DEBUG</h1><br />";
    echo "Translator-Textdomain: " . $this->formLabel()->getTranslatorTextDomain() . "<br />";
    echo "Translator-Locale: " . $this->formLabel()->getTranslator()->getLocale() . "<br />";
    echo "Translator->FallbackLocale: " . $this->formLabel()->getTranslator()->getFallbackLocale() . "<br />";
    echo "Translate-Test: Password -> ". $this->translate('Password', __NAMESPACE__);
?>

这些更改后,它为我工作。

希望能有所帮助,Alex

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZF2翻译

来自分类Dev

ZF2:如何翻译表单注释?

来自分类Dev

无法在ZF2中使用控制台

来自分类Dev

ZF2 setCookie无法正常工作

来自分类Dev

如何使用wordpress运行zf2?

来自分类Dev

ZF2不推荐使用:ServiceManagerAwareInterface

来自分类Dev

使用REGEXP的ZF2查询

来自分类Dev

ZF2本地化翻译器

来自分类Dev

无法在ZF2中注册模块

来自分类Dev

无法在ZF2中获得Logger服务

来自分类Dev

无法使用ZF2中的Pdo_Mysql通过Google App Engine连接到Google Cloud SQL

来自分类Dev

无法使用ZF2中的Pdo_Mysql通过Google App Engine连接到Google Cloud SQL

来自分类Dev

如何使用Composer安装PayumModule(ZF2)

来自分类Dev

ZF2:使用Zend \ View呈现电子邮件

来自分类Dev

ZF2 Sql使用命名参数

来自分类Dev

如何在ZF2中的tableGateway中使用hading()

来自分类Dev

如何在zf2中使用辅助类?

来自分类Dev

如何在视图中使用zf2 hasRoute()

来自分类Dev

如何使用zf2创建上传表单?

来自分类Dev

如何使用ZF2 Firebird_PDO执行查询

来自分类Dev

使用ZF2更改Doctrine上的DefaultEntityListenerResolver

来自分类Dev

如何在ZF2 FlashMessenger中使用HTML

来自分类Dev

为什么要在ZF2上使用服务?

来自分类Dev

ZF2重定向时不使用参数

来自分类Dev

在zf2上使用会话(恢复容器)

来自分类Dev

如何使用zf2将数据插入mysql?

来自分类Dev

使用ZF2生成XML文件

来自分类Dev

如何使用zf2创建上传表单?

来自分类Dev

如何使用zf2做ajax + json?