Domanda

Voglio rendere più semplice possibile per i nostri designer localizzare le stringhe nelle viste, il che significa che voglio farlo:

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

La notazione di sottolineatura qui è necessaria per consentire a Poedit di estrarre automagicamente tutte le stringhe per la localizzazione. L'implementazione è banale:

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

Al momento, l'ho inserito direttamente in Zend_View_Abstract , il che è negativo (non voglio farlo modificando nessuna libreria Zend). Idealmente, estenderei Zend_View_Abstract per consentirmi di implementare altre funzioni concrete di cui abbiamo bisogno, ma non so come impostarlo. Un'alternativa potrebbe essere quella di implementare un View Helper, ma l'unico modo in cui so come fare ciò rende il codice nella vista più dettagliato. Qualsiasi suggerimento (no, non quel tipo) sarebbe molto apprezzato. Grazie!

È stato utile?

Soluzione

Ovviamente ignora i miei percorsi per il tuo ...

  1. Estendi Zend_View
  2. Inserisci il tuo metodo in questa classe estesa
  3. Crea un'istanza della classe (ad esempio nel tuo bootstrap)
  4. Assegnalo al ViewRenderer
  5. Passa quel viewrenderer al metodo Zend_Controller_Action_HelperBroker addHelper
  6. Usalo nella tua vista

In / library / MegaHAL / Zend / create View.php:

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

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

A tuo avviso:

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

Credo che farà quello che vuoi, sì?

Altri suggerimenti

Penso che tu stia cercando un modo per creare helper di visualizzazione personalizzati .

Esempio:

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

...

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

...

Quindi nelle tue viste puoi usarlo:

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

Anche se penso che l'uso degli helper di visualizzazione sia la corretta modalità "Zend-Framework" per farlo, puoi estendere Zend_View e implementare tutti i metodi aggiuntivi che vorresti avere - questo in modo da non perdere le funzionalità di Zend_View .

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

Devi solo assicurarti che la tua nuova classe di vista sia istanziata e registrata come vista predefinita in controller (impostando la variabile di istanza Zend_Controller_Action :: $ view su un'istanza della tua classe) e nella tua < a href = "http://framework.zend.com/manual/en/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout (quando si utilizzano layout; passando la vista come opzione di configurazione con il tasto view ) quando non si utilizza ViewRenderer o in ViewRenderer quando si utilizza ViewRenderer utilizzando < code> Zend_Controller_Action_Helper_ViewRenderer :: setview () .

Se configurato correttamente, Poedit può estrarre automaticamente stringhe da funzioni diverse da _ ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top