2013-10-08 109 views
0

比方說,我有一個控制器,我想定義一些const變量來保存一些消息(例如錯誤消息等)。在zend框架中翻譯控制器類變量2

有沒有辦法讓它翻譯? 一個例子類波紋管所:

<?php 
namespace Test\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

class AccountController extends AbstractActionController 
{ 
    protected $testError = 'There was an error while testing some stuff'; 

    public function testAction(){ 

     // I know i can use the following approach but I don't want to 
     // since I want to use a variable for readability issues. 
     // $testError = $this->getTranslator()->translate('There was an error..'); 

     return new ViewModel(); 
    } 

    /** 
    * Retrieve the translator 
    * 
    * @return \Zend\I18n\Translator\Translator 
    */ 
    public function getTranslator() 
    { 
     if (!$this->translator) { 
      $this->setTranslator($this->getServiceLocator()->get('translator')); 
     } 
     return $this->translator; 
    } 

    /** 
    * Set the translator 
    * 
    * @param $translator 
    */ 
    public function setTranslator($translator) 
    { 
     $this->translator = $translator; 
    } 
} 

所以我希望能有翻譯是testError。我知道我可以只使用消息並通過zend翻譯器翻譯它,而不使用變量,但我仍然希望將其存儲在變量中以解決可讀性問題。任何幫助或其他方法呢?

回答

1

在您的項目根只需創建一個translations.phtml文件中的任何目錄並填寫類似的東西:

<?php 

// Colors 
_('Black'); 
_('White'); 
_('Green'); 
_('Light Green'); 
_('Blue'); 
_('Orange'); 
_('Red'); 
_('Pink'); 

在poEdit的,檢查目錄屬性>來源的關鍵字列表中一定_性格存在。 (方法的別名gettext)。在應用中,例如使用$this->translate($colorName)

當poedit掃描您的項目目錄以找到需要翻譯的關鍵字時,translations.phtml文件也會被掃描。

另一個方便的方法是使用_方法(gettext別名)來提高代碼的可讀性。例如:

$this->errorMsg = _('There was an error..'); 

但是不要忘記設置的全球Locale object默認語言環境太超值了,當你在模塊的TranslatorServiceFactory或onBootstrap方法初始化您的翻譯實例第一次:

... 
    $translator = \Zend\Mvc\I18n\Translator\Translator::factory($config['translator']); 
    $locale = 'en_US'; 
    $translator->setLocale($locale); 
    \Locale::setDefault($translator->getLocale()); 
    return $translator; 
    ... 
1

我不太明白你的意思:

$errorMessage = 'FooBarBazBat"; 

return new ViewModel(array(
    'error' => $this->getTranslator()->translate($errorMessage) 
)); 

將信息存儲在變量中的一種方式。但我真的不明白你的問題在哪裏。

或者你的意思是讓譯員變量?

$translator = $this->getServiceLocator()->get('viewhelpermanager')->get('translate'); 
$errorMessage = $translator('FooBarBazBat'); 
+0

我希望將其存儲在類變量中,而不僅僅是函數中的變量。 正如在我的例子中,我想要翻譯類變量$ testError。它會像局部變量一樣工作嗎? – Systemfreak

+0

哦,geez,是啊,ZF2不會改變原生PHP,所以當然你可以做'$ translator-> translate($ this-> someClassVar)' – Sam

+0

'然後我的問題是我不能讓它成爲「讀」poedit,我應該手動添加它,它會工作好嗎?任何不便敬請諒解。 – Systemfreak