Pergunta

Eu quero torná-lo tão fácil quanto possível para os nossos designers para localizar strings em vista, o que significa que eu quero fazer isso:

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

A notação sublinhado aqui é necessário para permitir Poedit para extrair automagicamente todas as cordas para a localização. A implementação é trivial:

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

No momento, eu coloquei isso diretamente no Zend_View_Abstract, o que é ruim (eu não quero fazer isso modificando qualquer da biblioteca Zend). Idealmente, então, eu estender Zend_View_Abstract para me permitir implementar outras funções concretas de que precisamos, mas eu não sei como configurar isso. Uma alternativa poderia ser a de implementar um ajudante View, mas a única maneira que eu sei como fazer isso torna o código na visualização mais detalhada. Os ponteiros (não, não esse tipo) seria muito apreciado. Obrigado!

Foi útil?

Solução

Obviamente ignorar os meus caminhos para o seu próprio ...

  1. Estender Zend_View
  2. Coloque o seu método nesta classe estendida
  3. instanciar a classe (em seu bootstrap por exemplo)
  4. atribuí-lo ao ViewRenderer
  5. Passe que ViewRenderer ao método Zend_Controller_Action_HelperBroker's addHelper
  6. Use-o em sua vista

em / Library / MegaHAL / Zend / criar view.php:

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

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

Na sua opinião:

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

Eu acredito que vai fazer o que quiser, sim?

Outras dicas

Eu acho que você está procurando uma maneira de criar exibição personalizado ajudantes .

Exemplo:

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

...

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

...

Então, em seus pontos de vista que você pode usá-lo:

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

Embora eu acho que o uso de vista ajudantes seria o correto "Zend-Quadro" de direcções de fazer isso, você pode estender Zend_View e implementar todos os métodos adicionais que você gostaria de ter - desta forma você não perde as características de Zend_View.

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

Você, então, só tem que se certificar de que sua nova classe vista é instanciado e registrado como o modo de exibição padrão no controlador (definindo a variável de instância Zend_Controller_Action::$view a uma instância de sua classe) e na sua Zend_Layout (quando se utiliza layouts; passando sua visão como uma opção de configuração com view chave) quando não utilizar o ViewRenderer ou em ViewRenderer ao usar o ViewRenderer usando Zend_Controller_Action_Helper_ViewRenderer::setView().

Se configurado corretamente Poedit pode extrair automaticamente seqüências de diferentes funções _ ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top