Zend Translation和View Scripts

时间:2014-06-03 11:52:20

标签: zend-framework zend-form zend-translate

自动翻译表单标签和错误消息。但是视图脚本中的字符串不是。我必须在每个phtml文件中使用$this->translate("text to transfer");。我不想使用这个$this->translate("text to transfer");方法。如何在表格的情况下自动翻译视图脚本。我的代码是

protected function _initTranslation() { 
    $langNamespace = new Zend_Session_Namespace('language_sess');
    $lang           = $langNamespace->lang;
    $registry = Zend_Registry::getInstance();
    $tr = new Zend_Translate(
        array(
            'adapter' => 'array',
            'content' => APPLICATION_PATH . "/languages/$lang/$lang.php",
            'locale'  => "ar",
            'scan' => Zend_Translate::LOCALE_DIRECTORY
        )
    );
    $registry->set('Zend_Translate', $tr);
    return $registry;
}

1 个答案:

答案 0 :(得分:2)

好的,为了说清楚,我们需要了解一些事情:

  • Zend_Translate应该只翻译您网站的一部分,与内容无关。这是菜单项,部分名称,标题等。您可能有该规则的例外,特别是如果您使用Zend_Translate_Adapter_Gettext。
  • 对于内容,您应该使用其他内容来提供翻译。通常,例如,如果它是静态文章,则从DB获取该数据,而不是语言文件。

在你的情况下,如果你可以稍微好一点"机器"翻译,你应该使用谷歌翻译引擎的网站

https://translate.google.com/manager/website/

至于删除$this->translate("text to transfer");部分,您可以尝试翻译控制器中的所有数据,但这是一个相当糟糕的建议,我会建议您做其他事情。当您将数据传递给视图时,您可以遍历它并为每个内部和everystring进行翻译:

foreach($data as $key => $string) {
    $data[$key] = $tr->translate($string);
}

或类似的东西。由于几个原因,这是不好的方法。但最重要的是,你没有将你的表现与你的逻辑分开,这就是为什么最好的地方是View。

所以我的总结:

  • 尝试继续使用$ this-> translate()
  • 如果这对您不起作用,请尝试使用谷歌翻译引擎
  • 如果这对您不利,请尝试Zend_Translate_Adapter_Gettext。
  • 请不要为您的内容使用语言文件。