en_US
和de_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的任何转换 - 因此我对该语言的所有翻译请求都会导致空字符串返回,这将导致使用默认语言环境。
答案 0 :(得分:1)
Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']
有可能不会返回en-US
,而是返回其他内容,例如en
。
如果是这种情况,则设置后备de_DE
。
您确定返回的值是否正确?试着先检查一下......
在the language header definition中写道:
每个语言范围可以被赋予相关的质量值,该值表示用户对该范围指定的语言的偏好的估计。质量值默认为“q = 1”。
您使用en
设置q=0.9
,但这不可用。
然后de-DE
与q=0.8
。
可能由于en
不可用,因此会使用de-DE
。
另一方面,它应为q=1
字段设置默认en-US
。尝试使用简单的内容进行测试,例如单个值en-US
,de-DE
或pt-PT
。