1

我想根据用户设置本地化我的应用程序,如果没有设置回退到默认设置。

为了实现这一点,我编写了以下钩子到 Zend\Mvc\Application 引导钩子的方法:

$translator = $e->getApplication()->getServiceManager()->get('translator');
$translator->setLocale(Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));

$lang = 'en_US';

if(isset($lang)) {
    $translator->setLocale($customerSession->customerData->sprache);
}

我的浏览器配置为发送 de_DE。

当我尝试在控制器中获取翻译器并使用它来翻译字符串时,一切都按预期工作。

但是,一旦我尝试在视图中使用翻译助手,它就会退回到我模块的配置文件中设置的默认配置。

知道如何修改翻译助手使用的类而不是翻译服务类吗?

仅供参考:出于测试目的,默认配置表示意大利语。

编辑: 我发现视图插件管理器使用具有基本配置的翻译对象的新实例创建翻译对象。知道如何使更改后的翻译器类全球化吗?

4

2 回答 2

1

从 2.2.0 开始有一个新的 MvcTranslator,但你不必单独初始化它。只需在你的 module.conf.php 中为它创建一个别名:

'service_manager' => array(
    'aliases' => array(
        'translator' => 'MvcTranslator',
    ),
),

请参阅ZendSkeletonApplication

于 2014-01-03T12:42:18.203 回答
0

您还需要设置 MvcTranslator 的语言环境:

$mvctranslator = $e->getApplication()->getServiceManager()->get('MvcTranslator');
$mvctranslator->setLocale($locale);
于 2013-09-19T19:23:47.390 回答