Zend framework2 如何找出ZF2中的翻译人员使用的语言?

Zend framework2 如何找出ZF2中的翻译人员使用的语言?,zend-framework2,zend-translate,Zend Framework2,Zend Translate,在我的ZF2应用程序中,我希望检索用于翻译页面的语言。我用这个作为基础。在Module.php中,我将区域设置如下: public function onBootstrap($e){ $translator = $e->getApplication()->getServiceManager()->get('translator'); $translator->setLocale( Locale::acceptFromHttp($_SERVER['HTT

在我的ZF2应用程序中,我希望检索用于翻译页面的语言。我用这个作为基础。在Module.php中,我将区域设置如下:

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中检索区域设置和后备区域设置,但是我仍然不知道哪一个用于翻译。因为也没有办法(据我所知)找出哪些语言实际加载到了翻译器中。我甚至无法测试自己是否存在该地区的翻译


也许我错过了什么。我希望有人能指出这一点。

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


否则,translate函数似乎只是尝试第一个区域设置,然后是回退。

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

您可以扩展
Translator
类,覆盖
translate()
方法,并将使用的语言键保存在属性中。@DanielM这是一个选项,但我想在onBootstrap事件中检查该语言,因此可能无法呈现视图。无论如何,谢谢你的评论。是的,翻译只是尝试区域设置,然后回退,但我也必须这样做。我使用Regex来选择合适的语言文件,这意味着我必须复制翻译器本身所做的一切(从php语言环境中获取语言环境,转到语言目录,检查所需的语言是否可用,否则采取回退措施)。这需要很大的努力。但不管怎样,我给你+1作为你的答案。我想在非默认翻译文件中设置一个虚拟翻译键,并检查该翻译是否可翻译——假设你知道主要语言环境和后备语言环境,你可以告诉我正在使用什么文件。如果我理解正确,这就是我所做的。看看我的答案。