我想让设计师尽可能轻松地在视图中本地化字符串,这意味着我想这样做:
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
这里的下划线表示法是必要的,以允许Poedit自动提取所有字符串以进行本地化。实施是微不足道的:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
目前,我已将此直接放在Zend_View_Abstract
中,这很糟糕(我不想通过修改任何Zend库来实现此目的)。理想情况下,我会扩展Zend_View_Abstract
以允许我实现我们需要的其他具体功能,但我不知道如何设置它。另一种方法可能是实现View Helper,但我知道如何执行此操作的唯一方法是使视图中的代码更加冗长。任何指针(不,不是那种)将非常感激。谢谢!
答案 0 :(得分:14)
显然忽略了我自己的路径......
Zend_View
Zend_Controller_Action_HelperBroker's
addHelper方法在/ library / MegaHAL / Zend / create View.php:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
在你的引导程序中:
require_once APPLICATION_PATH.'../library/MegaHAL/Zend/View.php';
$view = new MegaHAL_Zend_View();
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
在您看来:
<p><?php echo $this->_("Hello");?></p>
我相信会做你想做的事,是吗?
答案 1 :(得分:2)
我认为您正在寻找创建custom view helpers的方法。
示例:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
然后在你的观点中你可以使用它:
echo $this->translate("Hello, World!");
答案 2 :(得分:1)
虽然我认为使用视图帮助程序是正确的“Zend-Framework” - 这样做,你可以扩展Zend_View
并实现你想要的所有其他方法 - 这样你就不会t松散了Zend_View
。
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
然后,您只需确保实例化新视图类并将其注册为controller中的默认视图(将Zend_Controller_Action::$view
实例变量设置为您的类的实例)并在您的Zend_Layout
(使用布局时;在不使用view
时使用键ViewRenderer
传递视图作为配置选项)或使用ViewRenderer
时ViewRenderer
使用Zend_Controller_Action_Helper_ViewRenderer::setView()
。
答案 3 :(得分:0)
如果配置正确,Poedit可以自动从_()。
以外的函数中提取字符串