翻译不工作在ZF2


Translations not working in ZF2

我知道这已经发布了多次,但我已经通过了每个答案,发现没有一个适合我…

模块。配置文件

'service_manager' => array(
    'abstract_factories' => array(
        'Zend'Db'Adapter'AdapterAbstractServiceFactory',
    ),
    'factories' => array(
        'translator'                    => 'Zend'I18n'Translator'TranslatorServiceFactory',
        // various app services, but only listing first one
        'Application'Service'Fetch'     => 'Application'Factory'Service'FetchServiceFactory',
    ),
),
'translator' => array(
    'translation_file_patterns' => array(
        array(
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
        ),
    ),
),
module/Application/language/文件夹中,我有这些。mo和。po文件:
  • de.mo
  • de.po
  • en.mo
  • en.po
  • es.mo
  • es.po
  • it.mo
  • it.po

在一个模板视图文件中:

<div id="l_activite" class="homeTitle">
    <?php echo $this->translate('Activités', __NAMESPACE__);?>
</div>
在Module.php

我已经把它剪短了,以显示如何调用setProjectName(它处理语言翻译和其他事情…)

public function onBootstrap(MvcEvent $e)
{
    $application          = $e->getApplication();
    $eventManager         = $application->getEventManager();
    $moduleRouteListener  = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
    $eventManager->attach(MvcEvent::EVENT_ROUTE, array($this, 'setProjectName'));
}

我把这个函数删减了一点,只显示与语言有关的行…

public function setProjectName(MvcEvent $e)
{
    // Session (lang & background)
    $session        = new Session();
    $request        = $e->getRequest();
    $lang = null;
    if (!$request instanceof 'Zend'Console'Request) {
        $rm             = $request->getQuery();
        $lang           = $rm->get('lang');
    }
    $session->lang        = $lang        ?: $session->lang ?: 'fr';
    $lang                 = $session->lang;
    $session->langLocale  = strtolower($session->lang) . '_' . strtoupper($session->lang) . '.UTF-8';
    if ($lang == 'en') {
        $session->langLocale  = strtolower($session->lang) . '_' . strtoupper('US') . '.UTF-8';
    }
    $loc = setlocale(LC_ALL, $session->langLocale);
    // for Windows
    if (!$loc) {
        switch ($session->lang) {
            case 'en':
                $session->langLocale = 'eng';
            break;
            case 'de':
                $session->langLocale = 'deu';
            break;
            case 'fr':
                $session->langLocale = 'fra';
            break;
            case 'it':
                $session->langLocale = 'ita';
            break;
            case 'es':
                $session->langLocale = 'esn';
            break;
        }
        setlocale(LC_ALL, $session->langLocale);
    }
    'Locale::setDefault($session->langLocale);
    $translator          = $e->getApplication()->getServiceManager()->get('translator');
    $langLocale          = $translator->getLocale();

    $e->setParam('lang', $langLocale);
}

我猜我在Module.php中做的事情需要以某种方式修复?我有那块Windows代码,因为我们计划在一些"离线"机器上本地运行应用程序,但也在服务器上运行应用程序(运行linux)。

我们使用$lang作为fr/de/en/it/es,因为数据库(sqlite)文件存储为_fr。sqlite _de。sqlite 等。

尝试重命名。莫,。阿宝文件一样的‘中’,‘德吴’,‘联邦铁路局’,‘ita’,"特别是"。

哪个版本的ZF2。翻译接口在2.3

更改

In模块。配置文件你正在使用这个转换器

   'translator' => 'Zend'I18n'Translator'TranslatorServiceFactory',

我认为问题是您如何导入或使用旧的翻译命名空间(路径)文件。

您需要在其中查找要导入zend转换器的文件,例如listener,该文件可以位于listener/ApplicationListener.php

你可能会看到这样的东西。

你需要激活第一个并注释第二个

use Zend'I18n'Translator'Translator; //use this namespace, it fits your configs.

//使用Zend'Mvc'I18n'Translator;

希望能给一些指导。