【问题标题】:How can I find out which Language was used by Translator in ZF2?如何找出 ZF2 中 Translator 使用的语言?
【发布时间】:2012-09-24 15:11:36
【问题描述】:

在我的 ZF2 应用程序中,我想检索用于翻译页面的语言。我使用ZendSkeletonApplication 作为基础。在 Module.php 我设置 Locale 像这样:

public function onBootstrap($e){
  $translator = $e->getApplication()->getServiceManager()->get('translator');
  $translator->setLocale(
      Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE'])
    )
    ->setFallbackLocale('en_US');
}

我可以从 Zend\I18n\Translator\Translator 中检索 localefallbackLocale,但是我仍然不知道哪一个用于翻译。因为也没有办法(就我没有找到)找出实际加载到翻译器中的语言。如果 locale 存在翻译,我什至无法测试自己。

也许我在这里遗漏了一些东西。我希望有人能指出这一点。

【问题讨论】:

  • 您可以扩展Translator 类,覆盖translate() 方法并将使用的语言键保存在属性中。
  • @DanielM 这是一个选项,但我想检查 onBootstrap 事件中的语言,并且该视图可能未呈现。不管怎样,谢谢你的评论。

标签: zend-framework2 zend-translate


【解决方案1】:

一个选项可能是检索缓存对象并通过重新创建缓存键来检查主要区域设置是否存在。查看loadMessages() 方法,似乎缓存结果将包含可用消息的列表。

否则,翻译函数似乎只是尝试第一个语言环境,然后是后备。

【讨论】:

  • 是的 translate 只是尝试语言环境然后回退,但我必须这样做。我使用正则表达式来选择正确的语言文件,这意味着我必须复制翻译器自己所做的一切(从 php Locale 获取语言环境,转到语言目录,检查所需的语言是否可用,否则采取回退。)它付出了很多努力。但无论如何,我给你 +1 的答案。
  • 是否可以在非默认翻译文件中设置一个虚拟翻译键并检查该翻译是否可翻译——假设您知道主要语言环境和备用语言环境,您就可以知道是什么文件用过。
  • 如果我理解正确,这就是我所做的。看我的回答。
【解决方案2】:

我决定采用最简单的方法。我也翻译该语言的文本。

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多