Foros del Web » Programando para Internet » PHP » Zend »

Problema con Zend_Translate, Bootstrap y $this

Estas en el tema de Problema con Zend_Translate, Bootstrap y $this en el foro de Zend en Foros del Web. Hola que tal, os cuento un caso que no se resolver. Estoy iniciándome con Zend_framework, pero no consigo poder usar el "translate" desde cualquier punto ...
  #1 (permalink)  
Antiguo 26/08/2010, 12:27
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 20 años, 2 meses
Puntos: 71
Problema con Zend_Translate, Bootstrap y $this

Hola que tal, os cuento un caso que no se resolver.

Estoy iniciándome con Zend_framework, pero no consigo poder usar el "translate" desde cualquier punto de la aplicación (controladores, db_table, etc...)

Ahora mismo tengo esto en el Bootstrap
Código PHP:
  protected function _initLang(){
    
//Traduccion
    
$translate = new Zend_Translate('array'APPLICATION_PATH DS 'resources' DS 'languages' DS 'es' DS'es');
    
$registry Zend_Registry::getInstance();
    
$registry->set('Zend_Translate'$translate);
  } 
Pero si, por ejemplo, en una clase Db_Table, hago esto:
Código PHP:
    public function getCategory($id)
    {
      
$row $this->fetchRow('id_category = '. (int)$id);
      if (!
$row) {
        throw new 
Exception($this->translate("Categoria no encontrada"));
      }
      return 
$row->toArray();
    } 
Al saltar la excepción, me sale el siguiente error:
Código:
Fatal error: Call to undefined method Application_Model_DbTable_Categories::translate() in /application/models/DbTable/Categories.php on line 12
(Sí, la línea 12 de ese fichero es la del throw)

En este momento, para usar las traducciones desde los controladores, lo tengo puesto así (creo que no es lo más correcto):
Código PHP:
    protected $lang;

    public function 
init()
    {
        
/* Initialize action controller here */
      
$this->lang Zend_Registry::get('Zend_Translate');
    } 
Y lo uso así (por poner un ejemplo):
Código PHP:
$this->view->msg sprintf($this->lang->translate("Categoria actualizada"), $datos['name_category']); 
Cómo puedo hacer para usar en cualquier controlador, formulario, db_table el traductor de este modo:
Código PHP:
$this->_("Traduce esto"); 
Un saludo compañeros!
  #2 (permalink)  
Antiguo 26/08/2010, 14:09
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 9 meses
Puntos: 45
Respuesta: Problema con Zend_Translate, Bootstrap y $this

Hola
Yo hice esto

Dentro de la carpeta library cree un clase llamda T (T.php)
Código PHP:
Ver original
  1. class T
  2. {
  3.     private static $_traslate  = null;
  4.    
  5.     public static function setTranslate (Zend_Translate $translate)
  6.     {
  7.         self::$_traslate = $translate;
  8.     }
  9.  
  10.     public static function _($value)
  11.     {
  12.         if (empty(self::$_traslate)) {
  13.             throw new Zend_Exception('traslate object not initialized');
  14.         }
  15.         return self::$_traslate->_($value);
  16.     }
  17. }

En el BooStratp lo inicialize

Código PHP:
Ver original
  1. protected function _initLang ()
  2.     {
  3.         $translate = new Zend_Translate('Array', realpath(APPLICATION_PATH . '/../') . '/languages', 'auto');
  4.         include_once('T.php');
  5.         T::setTranslate($translate);
  6.     }

Esto se puede usar el cualquier lado.

Asi lo uso dentro de un controlador
Código PHP:
Ver original
  1. $this->view->alert =   T::_('Error al cargar datos');

Espero te sirva

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 27/08/2010, 08:03
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 20 años, 2 meses
Puntos: 71
Respuesta: Problema con Zend_Translate, Bootstrap y $this

Cita:
Iniciado por Genetix Ver Mensaje
Hola
Yo hice esto

Dentro de la carpeta library cree un clase llamda T (T.php)
Código PHP:
Ver original
  1. class T
  2. {
  3.     private static $_traslate  = null;
  4.    
  5.     public static function setTranslate (Zend_Translate $translate)
  6.     {
  7.         self::$_traslate = $translate;
  8.     }
  9.  
  10.     public static function _($value)
  11.     {
  12.         if (empty(self::$_traslate)) {
  13.             throw new Zend_Exception('traslate object not initialized');
  14.         }
  15.         return self::$_traslate->_($value);
  16.     }
  17. }

En el BooStratp lo inicialize

Código PHP:
Ver original
  1. protected function _initLang ()
  2.     {
  3.         $translate = new Zend_Translate('Array', realpath(APPLICATION_PATH . '/../') . '/languages', 'auto');
  4.         include_once('T.php');
  5.         T::setTranslate($translate);
  6.     }

Esto se puede usar el cualquier lado.

Asi lo uso dentro de un controlador
Código PHP:
Ver original
  1. $this->view->alert =   T::_('Error al cargar datos');

Espero te sirva

Saludos!
Perfecto. Muchas gracias.

Etiquetas: php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:17.