Internationalization 在zend framework 2中转换控制器类变量
假设我有一个控制器,我想定义一些常量变量来保存一些消息(如错误消息等) 有没有办法把它们翻译出来? 下面定义了一个示例类:Internationalization 在zend framework 2中转换控制器类变量,internationalization,zend-framework2,Internationalization,Zend Framework2,假设我有一个控制器,我想定义一些常量变量来保存一些消息(如错误消息等) 有没有办法把它们翻译出来? 下面定义了一个示例类: <?php namespace Test\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class AccountController extends AbstractActionController { protec
<?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;
}
}
我不太明白你的意思:
$errorMessage = 'FooBarBazBat";
return new ViewModel(array(
'error' => $this->getTranslator()->translate($errorMessage)
));
将是一种将消息存储在变量中的方法。但我真的不明白你的问题在哪里
或者你的意思是把翻译器作为变量
$translator = $this->getServiceLocator()->get('viewhelpermanager')->get('translate');
$errorMessage = $translator('FooBarBazBat');
只需在项目根目录中的任何目录中创建一个
translations.phtml
文件,并将其填充如下:
<?php
// Colors
_('Black');
_('White');
_('Green');
_('Light Green');
_('Blue');
_('Orange');
_('Red');
_('Pink');
但在TranslatorServiceFactory或模块的onBootstrap方法中首次初始化translator实例时,不要忘记设置全局的默认区域设置值:
...
$translator = \Zend\Mvc\I18n\Translator\Translator::factory($config['translator']);
$locale = 'en_US';
$translator->setLocale($locale);
\Locale::setDefault($translator->getLocale());
return $translator;
...
我想将其存储在类变量中,而不仅仅是函数中的变量。在我的示例中,我希望类变量$testError被翻译。它会像局部变量一样工作吗?哦,天哪,是的,ZF2不会改变本机PHP,所以当然你可以做一些类似于
$translator->translate($this->someClassVar)
的事情,那么我的问题是我不能让poedit“读取”它,我应该手动添加它,它会正常工作吗?很抱歉给您带来不便。
...
$translator = \Zend\Mvc\I18n\Translator\Translator::factory($config['translator']);
$locale = 'en_US';
$translator->setLocale($locale);
\Locale::setDefault($translator->getLocale());
return $translator;
...