Zend翻译自定义语言


Zend Translate custom language

根据用户角色的不同,我需要在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时,它似乎会过度渲染现有的文件夹,所以对于您的新用户,您可以添加具有适当翻译的自定义文件夹。对于我的测试来说,到目前为止这是有效的,但还没有深入评估。