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;
    ...