1

根据用户角色,我需要在 Zend 项目中显示不同的文本。

  • 对于普通用户,我使用“en”语言。
  • 对于新用户,我想要“en_new”之类的东西。

但是,语言“en_new”总是恢复为“en”。

我正在使用 locale_directory 扫描系统来自动检测语言。

4

2 回答 2

1

翻译适配器Zend_Locale::findLocale()在内部调用addTranslation()(至少在 ZF 1.1x 中)。这反过来检查语言环境是否在白名单上。显然,你的不是。我没有深入研究代码,但下一步很可能是恢复en_xxxen您的案例中发生的情况。

查看来源:

  • library/Zend/Translate/Adapter.php-addTranslation方法
  • library/Zend/Locale.php-findLocale方法
于 2012-01-27T15:10:40.633 回答
0

我目前正在评估类似的内容,对于某些用户,我希望对某些文本进行不同的翻译。而且我还遇到了无法创建自定义语言环境值的问题。我在测试中发现的艰难似乎可以解决/解决问题。

另请参阅:组合多个翻译源

我正在做的只是将自定义翻译添加到我的默认翻译中。

$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它似乎覆盖了现有的,因此对于您的新用户,您可以添加具有正确翻译的自定义文件夹。对于我的测试,到目前为止这工作,但还没有深入评估它。

于 2012-02-15T13:05:38.707 回答