假设我有一个控制器,我想定义一些包含某些消息的const变量(例如错误消息等)。
有没有办法让它们被翻译? 下面定义了一个示例类:
<?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转换器将其翻译而不使用变量,但我仍然希望将其存储在变量中以便于读取性问题。有任何帮助或其他方法吗?
答案 0 :(得分:1)
我不太明白你的意思:
$errorMessage = 'FooBarBazBat";
return new ViewModel(array(
'error' => $this->getTranslator()->translate($errorMessage)
));
是一种将消息存储在变量中的方法。但我真的不明白你的问题在哪里。
或者您的意思是将翻译器变为变量吗?
$translator = $this->getServiceLocator()->get('viewhelpermanager')->get('translate');
$errorMessage = $translator('FooBarBazBat');
答案 1 :(得分:1)
只需在项目根目录的任何目录中创建一个translations.phtml
文件,并填写类似的内容:
<?php
// Colors
_('Black');
_('White');
_('Green');
_('Light Green');
_('Blue');
_('Orange');
_('Red');
_('Pink');
在poedit中,检查目录属性&gt;源关键字列表确保_
字符存在。 (gettext方法的别名)。在应用程序中,例如使用$this->translate($colorName)
。
当poedit扫描您的项目目录以查找需要翻译的关键字时,也会扫描translations.phtml
文件。
另一种方便的方法是使用_
方法(gettext别名)来提高代码可读性。例如:
$this->errorMsg = _('There was an error..');
但是,当你第一次在TranslatorServiceFactory或模块的onBootstrap方法中初始化你的翻译器实例时,不要忘记设置全局Locale object的默认语言环境值:
...
$translator = \Zend\Mvc\I18n\Translator\Translator::factory($config['translator']);
$locale = 'en_US';
$translator->setLocale($locale);
\Locale::setDefault($translator->getLocale());
return $translator;
...