zend framework 2在onBootstrap中设置TextDomain

时间:2012-10-24 21:56:00

标签: internationalization zend-framework2 translation view-helpers zend-app-bootstrap

我成功地遵循了此link的说明,现在我的网络是多语言,而不需要在“traslate()”调用中输入“locale”。 但是每次我调用它时都必须放置TextDomain。

    $this->traslate("Hello", __NAMESPACE__) //where __NAMESPACE__ is the text domain.

我想在onBootstrap方法中设置TextDomain,而不是将它放在“traslate()”帮助器的每次调用中。 我尝试过使用setTextDomain方法,但它不存在。 有人知道怎么做?

onBootStrap代码如下:

   .....//Code for define $locale.
   $sm = $e->getApplication()->getServiceManager();
   $translator = $sm->get('translator');
   $translator->setLocale($locale);
   $traslator->SetTextDomain($textdomain);   //This line not work!!!!!

2 个答案:

答案 0 :(得分:1)

第一次没看错。通过DASPRIDS Presentation about ZF2 I18N,正确的调用函数是:

$this->plugin('translate')->setTranslatorTextDomain('module-b');

虽然如果我正确地看到了这一点,那就是在视图脚本中。从ServiceManager获取翻译器 - 我还没有测试过 - 但请尝试以下方法:

$translator->getPluginManager()->get('translate')->setTranslatorTextDomain('foo');

答案 1 :(得分:0)

奥基。我们已经迈出了一步。

第一个解决方案正常(视图解决方案),现在我的网页仅使用此帮助程序参数来描述文本,即由配置定义的Locale和TextDomain:

$这 - >翻译( '你好');

但第二种解决方案不起作用。我不明白,因为视图中接受相同的插件,而当名称相同时,不在onBootstrap中。

我在下面重写了我的onBootstrap代码:

    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $pm = $translator->getPluginManager();   //until here works ok.
    $pm->get('translate');   //this throws an error message how if 'translate' not found.