ZF2、I18n 和动态语言环境在更新后不再工作
ZF2, I18n and dynamic locale not working anymore after update
最终更新 Apache 2.2 -> 2.4 和 php 5.4 -> 5.5 后,视图中的翻译不再是动态的。我的应用程序是双语的,以英语为后备。
区域设置即通过用户的配置文件使用 ::onBootstrap
class 模块
{
public 函数 onBootstrap($events)
{
$translator = $events->getApplication()->getServiceManager()->get(
'translator'
);
$authSvc = $events->getApplication()->getServiceManager()->get('Zend\Authentication\AuthenticationService');
$locale = $this->getLocale($authService);
$translator->setLocale(
\Locale::acceptFromHttp($locale)
);
}
更新 Apache 和 php 后,翻译仍然有效,但视图中的翻译使用系统的默认语言环境。如果我将语言环境放在 $this->translate('MY TXT', NAMESPACE, 'en_US') 中,它会起作用,但这不是重点。即使经过调试,我也无法确定问题的根源。它以 2 年多前的预期方式运作。欢迎任何帮助。
找到问题了。您必须将语言环境的翻译器设置为视图助手:
public function onBootstrap($events)
{
....
$viewRenderer = $events->getApplication()->getServiceManager()->get('ViewRenderer');
$plugIn = $viewRenderer->plugin('translate');
$plugIn->setTranslator($translator, __NAMESPACE__);
...
}
否则,语言环境会从 config.global 那里获取(如我的情况)。不知道为什么它以前工作了这么久...
最终更新 Apache 2.2 -> 2.4 和 php 5.4 -> 5.5 后,视图中的翻译不再是动态的。我的应用程序是双语的,以英语为后备。 区域设置即通过用户的配置文件使用 ::onBootstrap
class 模块 { public 函数 onBootstrap($events) {
$translator = $events->getApplication()->getServiceManager()->get(
'translator'
);
$authSvc = $events->getApplication()->getServiceManager()->get('Zend\Authentication\AuthenticationService');
$locale = $this->getLocale($authService);
$translator->setLocale(
\Locale::acceptFromHttp($locale)
);
}
更新 Apache 和 php 后,翻译仍然有效,但视图中的翻译使用系统的默认语言环境。如果我将语言环境放在 $this->translate('MY TXT', NAMESPACE, 'en_US') 中,它会起作用,但这不是重点。即使经过调试,我也无法确定问题的根源。它以 2 年多前的预期方式运作。欢迎任何帮助。
找到问题了。您必须将语言环境的翻译器设置为视图助手:
public function onBootstrap($events)
{
....
$viewRenderer = $events->getApplication()->getServiceManager()->get('ViewRenderer');
$plugIn = $viewRenderer->plugin('translate');
$plugIn->setTranslator($translator, __NAMESPACE__);
...
}
否则,语言环境会从 config.global 那里获取(如我的情况)。不知道为什么它以前工作了这么久...