Frage

Ich mag es so einfach wie möglich machen für unsere Designer Strings in Ansichten zu lokalisieren, was bedeutet, dass ich mag, dies zu tun:

...
<p><?php echo $this->_("Hello, world!"); ?></p>
...

Der Unterstrich-Schreibweise ist hier notwendig Poedit, damit automatisch alle Zeichenfolgen für die Lokalisierung extrahieren. Die Implementierung ist trivial:

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

Im Moment habe ich diese direkt in Zend_View_Abstract setzen, was schlecht ist (ich will nicht, dies zu tun durch eine der Zend-Bibliothek zu ändern). Idealerweise dann würde ich verlängern Zend_View_Abstract mir zu erlauben, andere konkrete Funktionen zu implementieren, die wir benötigen, aber ich weiß nicht, wie dies einzurichten. Eine Alternative könnte sein, einen View Helfer zu implementieren, aber der einzige Weg, ich weiß, wie dies der Code in der Ansicht ausführlicher macht zu tun. Alle Zeiger (nein, nicht jene Art) würde sehr geschätzt werden. Dank!

War es hilfreich?

Lösung

Offensichtlich meine Pfade für Ihre eigenen ignorieren ...

  1. Extend Zend_View
  2. Legen Sie Ihre Methode in dieser erweiterten Klasse
  3. Instanziieren der Klasse (in der Bootstrap zum Beispiel)
  4. Weisen Sie auf die Viewrenderer
  5. übergibt, den Viewrenderer addHelper Methode Zend_Controller_Action_HelperBroker's
  6. Verwenden Sie es in der Ansicht

/ library / MegaHAL / Zend / erstellen view.php:

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

In der Bootstrap:

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

In Ihrer Ansicht:

<p><?php echo $this->_("Hello");?></p>

Ich glaube, dass das tun, was Sie wollen, nicht wahr?

Andere Tipps

Ich denke, dass Sie nach einer Möglichkeit, sich auf eine href zu erstellen <= „http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.custom“ rel = "nofollow noreferrer"> benutzerdefinierte Ansicht Helfer .

Beispiel:

class My_View_Helper extends Zend_View_Helper_Abstract
{
    public function translate($string)
    {
        //...
    }
}

...

$view->setHelperPath('/path/to/helpers', 'My_View_Helper');

...

Dann in Ihren Ansichten können Sie es verwenden:

echo $this->translate("Hello, World!");

Obwohl ich glaube, dass View Helfer verwenden wäre der richtige „Zend-Framework“ -Wege, dies zu tun, Sie Zend_View erweitern können und implementieren alle weiteren Methoden, die Sie würde gerne haben - diese Weise können Sie nicht verlieren die Eigenschaften von Zend_View.

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

Sie müssen dann nur sicherstellen, dass Ihre neue Ansicht Klasse instanziiert wird und als Standardansicht in der Controller (Einstellung der Zend_Controller_Action::$view Instanzvariable auf eine Instanz der Klasse) und in der Zend_Layout (wenn Layouts, Ihre Ansicht nach als Konfigurationsoption mit Schlüsseln view vorbei), wenn nicht den ViewRenderer mit oder in der ViewRenderer bei der Verwendung von die ViewRenderer mit Zend_Controller_Action_Helper_ViewRenderer::setView().

konfiguriert Wenn richtig Poedit automatisch Strings aus Funktionen extrahiert andere als _ ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top