0

假设我有一个控制器,我想定义一些 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 翻译器翻译它而不使用变量,但我仍然想将它存储在一个变量中以解决可读性问题。对此有任何帮助或其他方法吗?

4

2 回答 2

1

我不太明白你的意思:

$errorMessage = 'FooBarBazBat";

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

将是一种将消息存储在变量中的方法。但我真的不明白你的问题出在哪里。

还是您的意思是将翻译器作为变量?

$translator = $this->getServiceLocator()->get('viewhelpermanager')->get('translate');
$errorMessage = $translator('FooBarBazBat');
于 2013-10-08T16:18:55.473 回答
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..');

但是,当您第一次在模块的 TranslatorServiceFactory 或 onBootstrap 方法中初始化翻译器实例时,不要忘记设置全局Locale 对象的默认语言环境值:

    ...
    $translator = \Zend\Mvc\I18n\Translator\Translator::factory($config['translator']);
    $locale = 'en_US';
    $translator->setLocale($locale);
    \Locale::setDefault($translator->getLocale());
    return $translator;
    ...
于 2013-10-10T19:36:46.927 回答