根据用户角色的不同,我需要在Zend项目中显示不同的文本。
- 对于普通用户,我使用的是"en"语言
- 对于新用户,我想要类似"en_new"的内容
但是,语言"en_new"总是恢复为仅"en"。
我使用locale_directory扫描系统来自动检测语言。
翻译适配器在addTranslation()
内部调用Zend_Locale::findLocale()
(至少在ZF 1.1x中)。这反过来检查语言环境是否在白名单上。显然,你的不是。我没有深入研究代码,但下一步很可能是从en_xxx
恢复到en
,这就是您的情况。
参见来源:
library/Zend/Translate/Adapter.php
-addTranslation
方法library/Zend/Locale.php
-findLocale
方法
我目前正在评估类似的内容,对于一些用户,我希望对一些文本进行不同的翻译。我还遇到了无法创建自定义区域设置值的问题。我在测试中发现的困难似乎解决了这个问题。
另请参阅此处:组合多个翻译源
我所做的只是在我的默认翻译中添加一个自定义翻译。
$translateDef = new Zend_Translate(
array(
'adapter' => 'gettext',
'content' => 'locale/default/',
'locale' => 'auto',
'scan' => Zend_Translate::LOCALE_DIRECTORY
)
);
$translateCust = new Zend_Translate(
array(
'adapter' => 'gettext',
'content' => 'locale/custom/',
'locale' => 'auto',
'scan' => Zend_Translate::LOCALE_DIRECTORY
)
);
$translateDef->addTranslation(array(
'content' => $translateCust
)
);
文件夹结构如下:
locale/
default/
de
en
custom/
de
en
所以,当执行addTranslation
时,它似乎会过度渲染现有的文件夹,所以对于您的新用户,您可以添加具有适当翻译的自定义文件夹。对于我的测试来说,到目前为止这是有效的,但还没有深入评估。