感謝您的時間試圖幫助我。翻譯不適用於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文件並上傳到服務器的正確位置。
[email protected]:/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
例如這是可能發生平移一個視圖的snipset:
<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"
I'checked什麼$ _ 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上,因爲我將它們設置在相應的元標記上,它也是我在poedit中爲字符集和源字符集選擇的編碼。
[email protected]:/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')?>
加入之後,翻譯工作正常。
您好,感謝您的意見,我需要的textDomain添加到轉換鏈......看看到編輯。 – manou
嗨!使用__NAMESPACE__作爲textDomain似乎更容易,因爲這是模塊名稱。你只需要提醒自己將'namespace [MODULENAME];'添加到你的所有視圖中。由於可譯文本不應該出現在其他任何地方,所以這種方式工作得很好。 – AlexWerz