0

我成功地遵循了这个链接的说明,现在我的网站是多语言的,不需要在“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!!!!!
4

2 回答 2

1

第一次没看错。通过关于 ZF2 I18N的DASPRIDS演示,正确调用的函数是:

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

虽然如果我没看错,那是在视图脚本中。但是,从 ServiceManager 获取翻译器 - 我还没有测试过 - 但请尝试以下操作:

$translator->getPluginManager()->get('translate')->setTranslatorTextDomain('foo');
于 2012-10-25T08:23:35.600 回答
0

好的。我们已经前进了一步。

第一个解决方案可以正常工作(视图解决方案),现在我的网页仅使用此帮助器参数引用文本,即由配置定义的 Locale 和 TextDomain:

$this->translate('HELLO');

但是第二种解决方案不起作用。我不明白,因为当名称相同时,视图中接受了相同的插件,而不是 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.
于 2012-10-25T18:57:00.580 回答