感谢您抽出宝贵的时间来帮助我。
我一直在关注本教程:
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] 删除。
我来说两句