簡體   English   中英

ZF2無法使用翻譯

[英]Translation is not working with 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM