问题

我想让设计师尽可能轻松地在视图中本地化字符串,这意味着我想这样做:

...
<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,但我知道如何执行此操作的唯一方法是使视图中的代码更加冗长。任何指针(不,不是那种)将非常感激。谢谢!

有帮助吗?

解决方案

显然忽略了我自己的路径......

  1. 扩展 Zend_View
  2. 将您的方法放在此扩展类
  3. 实例化该类(例如在您的引导程序中)
  4. 将其分配给ViewRenderer
  5. 将该viewrenderer传递给 Zend_Controller_Action_HelperBroker的 addHelper方法
  6. 在您的视图中使用
  7. 在/ 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>
    

    我相信会做你想做的事,是吗?

其他提示

我认为您正在寻找一种方法来创建自定义视图助手

示例:

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!");

虽然我认为使用视图助手是正确的“Zend-Framework” - 这样做,你可以扩展 Zend_View 并实现你想要的所有其他方法 - 这个这样你就不会失去 Zend_View 的功能。

class My_View extends Zend_View
{
    public function _($string)
    {
        return Zend_Registry::get('Zend_Translate')->_($string);
    }
}

然后,您只需确保实例化新视图类并将其注册为 controller (将 Zend_Controller_Action :: $ view 实例变量设置为您的类的实例)并在您的< a href =“http://framework.zend.com/manual/en/zend.layout.options.html”rel =“nofollow noreferrer”> Zend_Layout (使用布局时;在不使用 ViewRenderer view 将视图作为配置选项传递en / zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer“rel =”nofollow noreferrer“> ViewRenderer 使用 ViewRenderer 时使用<代码> Zend_Controller_Action_Helper_ViewRenderer ::的setView()

如果配置正确,Poedit可以自动从_()。

以外的函数中提取字符串
许可以下: CC-BY-SA归因
不隶属于 StackOverflow