Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Traducir breadcrumb

Estas en el tema de Traducir breadcrumb en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos... He seguido el siguiente tutorial para crear un breadcrumb: http://blog.ekini.net/2009/06/10/zen...file-in-zf-18/ Todo funciona correctamente pero me gustaría traducirlo según el idioma en el cual ...
  #1 (permalink)  
Antiguo 24/07/2011, 13:28
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Traducir breadcrumb

Hola amigos...

He seguido el siguiente tutorial para crear un breadcrumb:
http://blog.ekini.net/2009/06/10/zen...file-in-zf-18/

Todo funciona correctamente pero me gustaría traducirlo según el idioma en el cual estoy visualizando la web. ¿Hay alguna forma de traducirlo según el valor registrado en el Zend_Translate?

Saludos.
  #2 (permalink)  
Antiguo 24/07/2011, 14:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

Eso tu lo haces en el archivo, no en zend_translate. Es decir solo tienes (en el caso que estás usando un xml) en el label colocar el nombre como tu lo quieres, algo así
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configdata>
  3.     <nav>
  4.         <label>Inicio</label>
  5.         <controller>dashboard</controller>
  6.         <action>index</action>
  7.         <pages>
  8.             <query>
  9.                 <label>Consultas</label>
  10.                 <controller>query</controller>
  11.                 <action>index</action>
  12.                 <pages>
  13.                     <mydrafts>
  14.                         <label>Mi proyecto</label>
  15.                         <controller>query</controller>
  16.                         <action>index</action>
  17.                         <params>
  18.                             <queryname>mydrafts</queryname>
  19.                         </params>
  20.                     </mydrafts>
  21.                     <myorders>
  22.                         <label>Mis ordenes</label>
  23.                         <controller>query</controller>
  24.                         <action>index</action>
  25.                         <params>
  26.                             <queryname>myorders</queryname>
  27.                         </params>
  28.                     </myorders>
  29.                     <allopenorders>
  30.                         <label>Todas las ordenes abiertas</label>
  31.                         <controller>query</controller>
  32.                         <action>index</action>
  33.                         <params>
  34.                             <queryname>allopenorders</queryname>
  35.                         </params>
  36.                     </allopenorders>
  37.                 </pages>
  38.             </query>
  39.             <reports>
  40.                 <label>Reportes</label>
  41.                 <controller>report</controller>
  42.                 <action>index</action>
  43.                 <pages>
  44.                     <country>
  45.                         <label>Pais</label>
  46.                         <controller>report</controller>
  47.                         <action>country</action>
  48.                     </country>
  49.                     <countryrevenue>
  50.                         <label>Paises de ingreso</label>
  51.                         <controller>report</controller>
  52.                         <action>countryrevenue</action>
  53.                     </countryrevenue>
  54.                 </pages>
  55.             </reports>
  56.         </pages>
  57.     </nav>
  58. </configdata>
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 24/07/2011, 16:18
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

Hola abimaelrc,

Gracias por tu respuesta. Creo que me he explicado mal jejeje. Tengo instalado un plugin que me traduce la página web según escriba http://es.midominio.com o http://en.midominio.com entre algunas cosas lo que hace es registrar el idioma en el cual se está visualizando la web. A mi lo que me gustaría saber es si es posible meter alguna etiqueta o atributo en el archivo XML para que me discriminara los "label" por idiomas. He intentado con algo similar a esto:
<label xml:lang="es">Hola</label>
<label xml:lang="en">Hello</label>
pero no funcionó.

En el bootstrap tengo puesto:
[..]
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml');
[..]

había pensando en leer el idioma registrado actualmente en el Zend_Translate para discriminar entre un archivo con un idioma u otro(algo así como navigation_es.xml y navigation_en.xml), pero creo que no es posible pues lo primero que se ejecuta, si no me equivoco, es el Bootstrap y el idioma se registra posteriormente en el plugin encargado de controlar la traducción de la web.

No sé si se ha entendido ahora :(

Saludos.
  #4 (permalink)  
Antiguo 24/07/2011, 16:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

Eso no lo haces en el xml entonces Eso lo debes hacer en algún plugin, en el bootstrap registrar el plugin y luego en el plugin verificas cual es el idioma que quiere ver el usuario, de ahí indicas cual archivo de xml quieres mostrar ingles o español o cualquier otro idioma que quieras añadir.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 24/07/2011, 17:01
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

abimaelrc exacto, también estaba pensando en controlar la situación desde el plugin de idiomas, pero estoy casi seguro que desde el archivo XML se podría solventar el problema. Ya veremos si alguien tiene una idea feliz y la comparte con nosotros :D

Saludos.
  #6 (permalink)  
Antiguo 24/07/2011, 17:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

Es que el xml es un lenguaje de etiquetas, no hay forma de agregar alguna lógica que diga "si pasa esto haz esto" porque el lenguaje no es de lógica, sino solo de etiquetas. Mira por ejemplo este tema para que veas porque lo digo http://www.forosdelweb.com/f68/cambi...7/#post3863351 Sigue desde donde te indico hacia abajo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 24/07/2011, 17:13
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

Sí, si entiendo como funciona XML. Yo lo que me refería que igual que Zend mediante código PHP entiende que lo que hay entre las etiquetas "<controller></controller>" es un controlador igual podría entender, de alguna forma, que si mi web se está mostrando en español entonces visualizará las etiquetas tal que así: "<label lang="es">hola</label" y si está en inglés "<label lang="en">hello</label>

Todas estas suposiciones mías vienen porque vi el siguiente ejemplo:
http://stackoverflow.com/questions/4...in-xmltpx-file

Saludos ;)
  #8 (permalink)  
Antiguo 24/07/2011, 17:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

Interesante, pues me siento a ver que dicen .
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 25/07/2011, 07:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Traducir breadcrumb

Por defecto si tu pones en tu registro tu instancia de translate en Zend_Translate, debería de traducir tus Breadcumbs y tus labels.

¿Como lo estas haciendo?
  #10 (permalink)  
Antiguo 25/07/2011, 14:12
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

Hola

Os explico como está montado el tinglado, aunque creo que será complicado.

Para traducir contenido escribo lo siguiente en el view:
[..]
$this->translate('ejemplo1');
$this->translate('ejemplo2');
[..]

El plugin encargado de la traducción es el siguiente:
Código PHP:
class Application_Plugin_ControllerLanguage extends Zend_Controller_Plugin_Abstract {

    public function 
routeShutdown(Zend_Controller_Request_Abstract $request) {

        
$locale = new Zend_Locale();

        
$options = array('scan' => Zend_Translate::LOCALE_FILENAME);
        
$translate = new Zend_Translate('gettext'APPLICATION_PATH '/languages/''auto'$options);
        
$cookieData $this->getRequest()->getCookie('idioma');

        
$requestParams $this->getRequest()->getParams();
        
$language = (isset($requestParams['language'])) ? $requestParams['language'] : false;

        if (!empty(
$cookieData) && $language == false) {
            
$language $cookieData;
        } else {

            if (
$language == false)
                
$language 'ca';

            
setcookie('idioma'$languagetime() + (60 60 24 30 12), '/'WEBSITE_DOMAIN);
        }
        if (!
$translate->isAvailable($language)) {
            throw new 
Zend_Controller_Action_Exception('This page dont exist'404);
        } else {
            
$locale->setLocale($language);
            
$translate->setLocale($locale);

            
setcookie('lang'$locale->getLanguage(), null'/');

            
Zend_Registry::set('Zend_Locale'$locale);
            
Zend_Registry::set('Zend_Translate'$translate);

            
//Activamos la traducción para los formularios
            
$formTranslate = new Zend_Translate('array',
                            
APPLICATION_PATH '/languages/',
                            
'auto',
                            array(
'scan' => Zend_Translate::LOCALE_DIRECTORY)
            );
            
Zend_Form::setDefaultTranslator($formTranslate);
        }
    }


Además en el Bootstrap tengo:
$langRoute = new Zend_Controller_Router_Route_Hostname(
':language.dominio.com'
);

Si escribo http://es.dominio.com el contenido se traduce al español y se pongo http://ca.dominio.com el contenido se traduce al catalán. El contenido de las traducciones está almacenado en:
/application/languages/ca_ES/LC_MESSAGES/ca.mo
/application/languages/es_ES/LC_MESSAGES/es.mo

Para crear el breadcrumb seguí las instrucciones del enlace que comento en mi primer tema.

Supongo que debo añadir algún código en el archivo Application_Plugin_ControllerLanguage como hice para traducir los formularios, pero no se me ocurre qué.

Creo que no se me olvida nada más.
  #11 (permalink)  
Antiguo 25/07/2011, 14:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Traducir breadcrumb

¿Que versión de Zend estas usando? Como te digo con solo agregar: Zend_Registry::set('Zend_Translate', $translate); esto debe de traducir tu menu.
  #12 (permalink)  
Antiguo 25/07/2011, 14:48
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Traducir breadcrumb

Y como tienes el .mo ?, tienes los labels del navigation por claves ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 25/07/2011, 14:57
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

GatorV tengo la 1.11.8.

masterpuppet de la parte del navigation no tengo nada en el .mo porque no sé exactamente si es ahí donde debo colocar esa información ni tampoco sé de que manera debería introducirla. Lo único que hay en ese fichero es el contenido encuentra con $this->translate('etiqueta')

Pensaba que el archivo navigation.xml debería ser algo así(hay muchos xml:lang porque probé con varias combinaciones xD):
Código HTML:
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
    <nav>
        <label>Inicio</label>
        <uri>/</uri>
        <pages>

            <observacion xml:lang="es">
                <label xml:lang="es">Observación</label>  
                <controller xml:lang="es">observacion</controller>               
            </observacion>
                        <observacio xml:lang="ca">
                <label xml:lang="ca">Observació</label>  
                <controller xml:lang="ca">observacion</controller>
            </observacio>        
        </pages>
    </nav>
</configdata> 
Saludos.
  #14 (permalink)  
Antiguo 25/07/2011, 15:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Traducir breadcrumb

No, tu debes de crear tu XML normalmente y por cada <label> que encuentre Zend_Translate va a hacer la traducción de ese label, no es necesario hacer nodos extras en el XML que no va a leer Zend_Navigation.

Saludos.
  #15 (permalink)  
Antiguo 25/07/2011, 15:07
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

Cita:
Iniciado por GatorV Ver Mensaje
No, tu debes de crear tu XML normalmente y por cada <label> que encuentre Zend_Translate va a hacer la traducción de ese label, no es necesario hacer nodos extras en el XML que no va a leer Zend_Navigation.

Saludos.
¡Ahora sí!

Mi problema era que pensaba que la traducción debía estar en el archivo XML y no en el archivo .mo

Ya ves.. me lié entre la sencillez.

Muchas gracias a todos, os seguiré "dando la brasa" mientras voy aprendiendo
  #16 (permalink)  
Antiguo 25/07/2011, 16:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

Ehhh, como lo hiciste, no me dejes con la ignorancia que cuesta mucho manterla Si muestras código mejor
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 25/07/2011, 16:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Traducir breadcrumb

Solamente es poner la entrada en el Registry:
Código PHP:
Ver original
  1. Zend_Registry::set('Zend_Translate', $translate);

y en tus archivos de traducción (en este caso los mo) tener los labels que vas a traducir, por cada <label></label> que hay en el menu, Zend_Navigation va a traducirlos usando el translator por defecto.

No hay mucha ciencia al respecto
  #18 (permalink)  
Antiguo 25/07/2011, 16:37
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

O sea que si en vez de usar mo, uso el ejemplo clasico de return con un array solo tendría que hacer algo así
Código PHP:
Ver original
  1. return array(
  2.     'Home' => 'Inicio',
  3.     'Tickets' => 'Boletos',
  4.     'Something' => 'Algo'
  5. );
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #19 (permalink)  
Antiguo 25/07/2011, 16:40
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Traducir breadcrumb

Cita:
Iniciado por abimaelrc Ver Mensaje
O sea que si en vez de usar mo, uso el ejemplo clasico de return con un array solo tendría que hacer algo así
Código PHP:
Ver original
  1. return array(
  2.     'Home' => 'Inicio',
  3.     'Tickets' => 'Boletos',
  4.     'Something' => 'Algo'
  5. );
Hola, supongo que sí... porque yo tengo puesto
<label>Home</label>
<label>Tickets</label>

y en el archivo mo la parte análoga a tu ejemplo del array y ha funcionado :)
  #20 (permalink)  
Antiguo 25/07/2011, 16:43
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Traducir breadcrumb

Te dejo el link a la doc oficial(function htmlify) ;P, ahora en serio, si abimael, solo con eso funciona, así de grande es Zend.

Edit: ahi me gano kiko's
__________________
http://es.phptherightway.com/
thats us riders :)
  #21 (permalink)  
Antiguo 25/07/2011, 16:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Traducir breadcrumb

Por eso me pregunto a veces, ¿por qué no quise estudiar anteriormente este framework ?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: zend
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 10:07.