Zend Translate 自定义语言

发布于 2024-12-28 13:16:27 字数 185 浏览 2 评论 0原文

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

  • 对于普通用户,我使用“en”语言。
  • 对于新用户,我想要类似“en_new”的内容。

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

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

Depending on the user role, I need to show different texts in my Zend project.

  • For normal users I'm using the "en" language.
  • For new users I want something like "en_new".

However, the language "en_new" always reverts to just "en".

I'm using the locale_directory scan system to automatically detect languages.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷荒 2025-01-04 13:16:27

翻译适配器在 addTranslation() 内部调用 Zend_Locale::findLocale()(至少在 ZF 1.1x 中)。这反过来会检查区域设置是否在白名单上。显然,你的不是。我没有深入研究代码,但下一步很可能是从 en_xxx 恢复为 en 这就是您的情况所发生的情况。

请参阅来源:

  • library/Zend/Translate/Adapter.php - addTranslation 方法
  • library/Zend/Locale.php - findLocale< /代码> 方法

The translate adapter calls Zend_Locale::findLocale() internally in addTranslation() (at least in ZF 1.1x). This in turn checks whether the locale is on a whitelist. Yours is not, obviously. I didn't dig too deep into the code, but it's quite probable that the next step is to revert from en_xxx to just en which is what happens in your case.

See the sources:

  • library/Zend/Translate/Adapter.php - addTranslation method
  • library/Zend/Locale.php - findLocale method
镜花水月 2025-01-04 13:16:27

我目前正在评估类似的东西,对于某些用户,我希望对某些文本进行不同的翻译。我还遇到了无法创建自定义区域设置值的问题。
我在测试中发现的困难似乎可以解决/解决该问题。

另请参见此处:组合多个翻译源< /a>

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

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

I am currently evaluating something similar, for some users I want some texts to be differently translated. And I also ran into the problem to not be able to create a custom locale value.
Tough what I found out in my tests seems to solve/work around the problem.

See also here: Combining multiple translation sources

What I am doing is to just add a custom translation to my default ones.

$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
    )
);

And the folder structure looks like this:

locale/
       default/
               de
               en
       custom/
               de
               en

So when doing the addTranslation it seems to overvwrites the existing ones, so for your new users, you could add custom folder with the proper translations.
For my tests this worked so far, but haven't evaluated it in depth yet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文