我知道这已经发布了多次,但我已经通过了每个答案,发现没有一个适合我…
模块。配置文件
'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;
希望能给一些指导。