Question

Je souhaite simplifier au maximum la localisation de chaînes de caractères dans les vues pour nos concepteurs. Par conséquent, je souhaite effectuer cette opération:

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

La notation de soulignement ici est nécessaire pour permettre à Poedit d’extraire automatiquement toutes les chaînes à des fins de localisation. La mise en œuvre est triviale:

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

Pour le moment, j'ai mis cela directement dans Zend_View_Abstract , ce qui est mauvais (je ne veux pas le faire en modifiant l'une quelconque de la bibliothèque Zend). Idéalement, dans ce cas, j'étendrais Zend_View_Abstract pour me permettre de mettre en œuvre d'autres fonctions concrètes dont nous avons besoin, mais je ne sais pas comment le configurer. Une alternative pourrait consister à implémenter View Helper, mais la seule façon pour moi de procéder consiste à rendre le code de la vue plus détaillé. Tous les indicateurs (non, pas ceux-là) seraient très appréciés. Merci!

Était-ce utile?

La solution

Évidemment, ignorez mes chemins pour le vôtre ...

  1. Étendre Zend_View
  2. Mettez votre méthode dans cette classe étendue
  3. Instanciez la classe (dans votre bootstrap par exemple)
  4. Attribuez-le à ViewRenderer
  5. Transmettez ce créateur de vue à sur la méthode addHelper de Zend_Controller_Action_HelperBroker
  6. Utilisez-le dans votre vue

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

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

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

Selon vous:

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

Je crois que cela fera ce que vous voulez, oui?

Autres conseils

Je pense que vous cherchez un moyen de créer aides à la vue personnalisées .

Exemple:

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

...

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

...

Ensuite, dans vos vues, vous pouvez l'utiliser:

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

Bien que je pense que l'utilisation des aides à la visualisation serait la "voie Zend-Framework" appropriée, vous pouvez étendre Zend_View et implémenter toutes les méthodes supplémentaires de votre choix - ceci vous ne perdez pas les fonctionnalités de Zend_View .

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

Vous devez ensuite uniquement vous assurer que votre nouvelle classe de vue est instanciée et enregistrée comme vue par défaut dans contrôleur (définition de la variable d'instance Zend_Controller_Action :: $ view dans une instance de votre classe) et dans votre < a href = "http://framework.zend.com/manual/fr/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout (lors de l'utilisation de layouts; passer votre vue en tant qu'option de configuration avec la touche view ) lorsque vous n'utilisez pas ViewRenderer ou dans l'élément ViewRenderer lors de l'utilisation de ViewRenderer à l'aide de < code> Zend_Controller_Action_Helper_ViewRenderer :: setView () .

Si configuré correctement, Poedit peut extraire automatiquement les chaînes de fonctions autres que _ ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top