感谢您抽出时间帮助我。
我一直在关注本教程:
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上,因为我将它们设置在相应的元标记上,以及它也是我为charset为charset和source charset选择的字符集的编码。
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')?>
添加后,翻译工作正常。
答案 0 :(得分:1)
我遇到了同样的问题。也许我的解决方案也可以帮到你。
在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__);
?>
经过这些改变后,它对我有用。
希望有所帮助, 亚历