2013-10-08 2 views
0

Предположим, у меня есть контроллер, и я хочу определить некоторые константные переменные, которые содержат некоторые сообщения (например, сообщения об ошибках и т. Д.).Переведите переменные класса контроллера в zend framework 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 alias) для улучшения удобочитаемости кода. Пример:

$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

I хотите сохранить его в переменной класса, а не просто переменной в функции. Как и в моем примере, я хочу перевести переменную класса $ testError. Будет ли он работать так же, как локальная переменная? – Systemfreak

+0

О, geez, да, ZF2 не меняет родной PHP, поэтому, конечно, вы можете сделать что-то вроде '$ translator-> translate ($ this-> someClassVar)' – Sam

+0

. Моя проблема в том, что я не могу заставить это быть «читать» poedit, должен ли я вручную добавить его, и все будет хорошо? Извините за неудобства. – Systemfreak

Смежные вопросы