Zend 2翻译setFallbackLocale

时间:2016-01-26 09:47:08

标签: php internationalization zend-framework2 locale translation

en_USde_DE

存在语言文件

在我定义的Module.php方法onBootstrap中:

    $oTranslator = $oServiceManager->get('translator');
    $oTranslator->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));
    $oTranslator->setFallbackLocale('de_DE');

如果我进入包含HTTP_ACCEPT_LANGUAGE的页面:en-US,en;q=0.9,de-DE;q=0.8,de;q=0.6,pl-PL;q=0.5,pl;q=0.4,pt-PT;q=0.3,pt;q=0.1

Zend使用定义的fallbackLocale de_DE - 但为什么?

如果我没有设置fallbackLocale Zend使用正确的en_US语言环境。

我希望Zend使用给定的Locale OR,如果没有找到,则回退到de_DE - 但是如果定义了fallbackLocale,他总是使用{{1} locale

我怎样摆脱这种行为?

修改

我的module.config.php的翻译内容是:

de_DE

修改2

Zend 2 Skelleten应用程序没有en_US Locale的任何转换 - 因此我对该语言的所有翻译请求都会导致空字符串返回,这将导致使用默认语言环境。

1 个答案:

答案 0 :(得分:1)

Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']有可能不会返回en-US,而是返回其他内容,例如en

如果是这种情况,则设置后备de_DE

您确定返回的值是否正确?试着先检查一下......

the language header definition中写道:

  

每个语言范围可以被赋予相关的质量值,该值表示用户对该范围指定的语言的偏好的估计。质量值默认为“q = 1”。

您使用en设置q=0.9,但这不可用。 然后de-DEq=0.8

可能由于en不可用,因此会使用de-DE

另一方面,它应为q=1字段设置默认en-US。尝试使用简单的内容进行测试,例如单个值en-USde-DEpt-PT