2014-01-17 77 views
0

感謝您的時間試圖幫助我。翻譯不適用於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')?> 

加入之後,翻譯工作正常。

回答

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__); 
?> 

經過這些更改後,它爲我工作。

希望幫助, 亞歷

+0

您好,感謝您的意見,我需要的textDomain添加到轉換鏈......看看到編輯。 – manou

+0

嗨!使用__NAMESPACE__作爲textDomain似乎更容易,因爲這是模塊名稱。你只需要提醒自己將'namespace [MODULENAME];'添加到你的所有視圖中。由於可譯文本不應該出現在其他任何地方,所以這種方式工作得很好。 – AlexWerz