Pregunta

Quiero que sea lo más fácil posible para nuestros diseñadores localizar las cadenas en las vistas, lo que significa que quiero hacer esto:

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

La notación de subrayado aquí es necesaria para permitir que Poedit extraiga automáticamente todas las cadenas para su localización. La implementación es trivial:

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

En este momento, he puesto esto directamente en Zend_View_Abstract , lo cual es malo (no quiero hacer esto modificando ninguna de la biblioteca de Zend). Idealmente, entonces, extendería Zend_View_Abstract para que pueda implementar otras funciones concretas que necesitamos, pero no sé cómo configurar esto. Una alternativa podría ser implementar un Asistente de visualización, pero la única forma en que sé cómo hacerlo hace que el código de la vista sea más detallado. Cualquier puntero (no, no ese tipo) sería muy apreciado. Gracias!

¿Fue útil?

Solución

Obviamente ignora mis caminos para los tuyos ...

  1. Extender Zend_View
  2. Ponga su método en esta clase extendida
  3. Crea una instancia de la clase (en tu bootstrap, por ejemplo)
  4. Asignarlo al ViewRenderer
  5. Pase ese espectador a Zend_Controller_Action_HelperBroker addHelper method
  6. Úsalo en tu vista

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

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

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

En su opinión:

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

Creo que va a hacer lo que quieras, ¿sí?

Otros consejos

Creo que estás buscando una forma de crear ayudantes de vista personalizados .

Ejemplo:

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

...

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

...

Luego, en tus vistas puedes usarlo:

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

Aunque creo que usar los ayudantes de visualización sería la forma correcta de " Zend-Framework "; de esta manera, puede extender Zend_View e implementar todos los métodos adicionales que le gustaría tener, esto De esta forma no perderá las características de Zend_View .

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

Entonces, solo tiene que asegurarse de que su nueva clase de vista esté instanciada y registrada como la vista predeterminada en controller (configurando la variable de instancia Zend_Controller_Action :: $ view en una instancia de su clase) y en su < a href = "http://framework.zend.com/manual/en/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout (cuando se usan diseños; pasando su vista como una opción de configuración con la tecla view ) cuando no use ViewRenderer o en ViewRenderer al usar el ViewRenderer usando < código> Zend_Controller_Action_Helper_ViewRenderer :: setView () .

Si está configurado correctamente, Poedit puede extraer cadenas automáticamente de funciones que no sean _ ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top