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

[SOLUCIONADO] Web Multi Idioma

Estas en el tema de Web Multi Idioma en el foro de Symfony en Foros del Web. Hola, Estoy intentando hacer que mi web sea multiidioma, he intentado hacerlo con estos dos Bundles: - JMSI18nRoutingBundle - BeSimpleI18nRoutingBundle El primero JMSI18nRoutingBundle me cambia ...
  #1 (permalink)  
Antiguo 20/06/2013, 19:10
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 12 años, 9 meses
Puntos: 23
Web Multi Idioma

Hola,

Estoy intentando hacer que mi web sea multiidioma, he intentado hacerlo con estos dos Bundles:

- JMSI18nRoutingBundle
- BeSimpleI18nRoutingBundle

El primero JMSI18nRoutingBundle me cambia efectivamente de Idioma de Español a Ingles y tambien me cambia las URL y los textos, lamentablemente por lo que he visto no es posible cambiarle los nombres a las URL por ejemplo:

Código:
ESP   www.hola.com/nostros
ENG   www.hola.com/en/AboutUs
Por lo tanto intente con el segundo Bundle BeSimpleI18nRoutingBundle, y bueno, luego de luchar un rato cree el archivo "i18n.yml" que tiene los nombres de las Rutas, pero no logro que me reconosca el cambio de Idioma, es decir, me cambio al Idioma Ingles y me deja igualmente en Español.

Los textos no los tengo en la Base de Datos, sino que en archivos
Código:
- messages.en.yml
- messages.es.yml
Podria ser por eso que no me toma el cambio de Idioma?

Bueno, el cambio de Idioma lo realizo asi

Plantilla:

Código:
<p><a href="{{ path('an_amazec_cambiaIdioma', { '_locale': 'es', 'translate': '_locale'}) }}">ESP</a></p>
<p><a href="{{ path('an_amazec_cambiaIdioma', { '_locale': 'en', 'translate': '_locale'}) }}">ENG</a></p>
Controller:

Código:
/**
     * Cambiar Idioma
     *
     * @Route("/cambiaIdioma/{_locale}", name="an_amazec_cambiaIdioma", defaults={"_locale"="es"})
     */
    public function cambiaIdiomaAction($_locale = "es")
    {
		if($_locale == "en")
			$locale = "en";
		else
			$locale = "es";
		
		$request = $this->getRequest();
		$request->setLocale($locale);
		
		return $this->redirect($this->generateURL("an_amazec_homepage"));
    }

Mi duda finalmente es... alguien a logrado hacer que esto funcione que me pueda orientar, algo estoy haciendo mal obviamente, he leido y releido la documentacion pero bueno... ya debe ser el cansancio que no me deja ver el error.

Agradesco cualquier ayuda, que ya estoy pensando en mezclar los dos Bundles y listo xD

Saludos
  #2 (permalink)  
Antiguo 20/06/2013, 20:26
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 4 meses
Puntos: 845
Respuesta: Web Multi Idioma

mmm, el primero que indicas hace justamente lo que necesitas, de hecho yo lo utilizo sin problemas, pregunto, el extract no te genero en Resources/translations un routes.lang.yml por cada idioma ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 20/06/2013, 22:36
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 12 años, 9 meses
Puntos: 23
Respuesta: Web Multi Idioma

Hola,

Gracias por responder.

Pues creo que no.

En la documentacion de JMSI18nRoutingBundle, sale este comando que creo que es a lo que te estas refiriendo

Código:
$ php app/console translation:extract de --enable-extractor=jms_i18n_routing #
Al ejecutarlo, me dio un error por algo de que no tenia la ruta donde dejar los archivos.

Código:
 [JMS\TranslationBundle\Exception\InvalidArgumentException]
 The directory where translations are must be set.
Busque en internet, encontre este comando que ejecuta y la verdad me ordeno el archivo "messages.en.yml"
Código:
php app/console --env=dev translation:extract en --bundle=ANAmazecBundle
Y este otro que lo que hizo fue crearme un messages.en.xliff

Código:
php app/console --env=dev translation:extract en --bundle=ANAmazecBundle --output-dir=./app/Resources/translations
Asi que... en resumen, creo que no ejecute bien el dichoso comando asi que no me lo genero bien o el problema es un tipico error 800 :D
  #4 (permalink)  
Antiguo 21/06/2013, 06:52
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 4 meses
Puntos: 845
Respuesta: Web Multi Idioma

Intenta con algo asi:

Código BASH:
Ver original
  1. php app/console translation:extract de --enable-extractor=jms_i18n_routing --bundle=ANAmazecBundle

Asumo que tienes configurado jms_i18n_routing en tu config.yml y que uno de los locales es de.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 21/06/2013, 08:06
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 12 años, 9 meses
Puntos: 23
Respuesta: Web Multi Idioma

Jajajajaa Dios... era esa mezcla, excelente me funciono de inmediato Muchas Gracias!!! xDDD

Una ultima consulta, los textos, existe algun formato de texto o una pauta a seguir? lo que sucede es que si bien tenia un respaldo, al ejecutar ese comando me cambio bastante el orden y algunos textos se perdieron lo mas probable era que no los reconocio por su sintaxis.
  #6 (permalink)  
Antiguo 21/06/2013, 09:53
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 4 meses
Puntos: 845
Respuesta: Web Multi Idioma

Creo que elimina todo aquello que no es detectado por el bundle, osea si agregas a mano algo y ejecutas un update, pierdes los cambios, la idea es utilizar el bundle para todos los casos, es sencillo, utilizas el translate en donde sea necesario, luego ejecutas el comando para que se actualicen los ficheros de traducción y por último editas estos ficheros.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 21/06/2013, 10:06
Avatar de fhederico  
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 12 años, 9 meses
Puntos: 23
Respuesta: Web Multi Idioma

Mmmm...

Claro... tengo unos textos dinamicos, es decir, se lo paso en forma de variable a la Plantilla Layout y en el Layout cargo esa variable, lo reemplazare por el "translator" y asi cargara el texto antes de enviarlo a la plantilla, ya que son solo esos casos puntuales que son los titulos de la web.

Muchas gracias por todo, ya esta funcionando !!

Saludos
  #8 (permalink)  
Antiguo 23/06/2013, 11:10
 
Fecha de Ingreso: noviembre-2010
Mensajes: 234
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Web Multi Idioma

Hola, yo estoy haciendo lo mismo, pero me está tirando un error, y por no abrir otro post si voy a tratar sobre el mismo tema lo muestro aquí, y es que después de instalar JMSI18nRoutingBundle y JMSTranslationBundle me tira el siguiente error:

Código Otro:
Ver original
  1. Fatal error: Call to undefined method Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition::info() in /Users/ramondevesagonzalez/Sites/trans/vendor/bundles/JMS/I18nRoutingBundle/DependencyInjection/Configuration.php on line 104
  #9 (permalink)  
Antiguo 23/06/2013, 15:01
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 4 meses
Puntos: 845
Respuesta: Web Multi Idioma

https://github.com/schmittjoh/JMSI18...ndle/issues/71
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 24/06/2013, 03:33
 
Fecha de Ingreso: noviembre-2010
Mensajes: 234
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Web Multi Idioma

Muchas gracias masterpuppet pero ahora me surge otra duda, ya me funciona todo, y siguiendo la documentación oficial el último paso me indica, "Creating a Language Switcher" y no viene nada, está vacío, pero de todas formas no termino de ver donde coloco la traducción en sí.
  #11 (permalink)  
Antiguo 24/06/2013, 06:37
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 4 meses
Puntos: 845
Respuesta: Web Multi Idioma

Lo comente un par te post's atrás, el bundle te genera un routes.lang.format(por ej: routes.en.yml) por cada locale que tengas configurado, ahora si no te queda clara como funcionan las traducciones te sugiero que pases por la doc de symfony http://symfony.com/doc/current/book/translation.html

Sobre el language switcher, si bien no han redactado esa sección puedes tomar de ejemplo lo que tienen en usage ya que básicamente es lo mismo http://jmsyst.com/bundles/JMSI18nRou...e/master/usage, generar links para diferentes locales.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 25/06/2013, 03:31
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 18 años, 1 mes
Puntos: 28
Respuesta: Web Multi Idioma

Hola amigos,

me gustaría aprovechar este hilo para ver si me podéis indicar cual sería la manera ideal de gestionar una web multi idioma pero con la siguiente particularidad.

Estoy utilizando Sonada Admin lo que conlleva que no son traducciones de textos estáticos si no que son dinámicos, es decir, son introducidos por el usuario.

¿Debo entonces añadir campos extra en los formularios de los CRUD de Sonata para introducir los textos en diferentes idiomas?

¿Que pasaría si mañana se añade un nuevo idioma, debería modificar todas las Entity para añadir esos campos nuevos?


Muchas gracias por vuestra ayuda.

Un saludo.
  #13 (permalink)  
Antiguo 25/06/2013, 04:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 4 meses
Puntos: 845
Respuesta: Web Multi Idioma

Utiliza la extensión translatable https://github.com/l3pp4rd/DoctrineE...ranslatable.md con el bundle TranslationForm http://knpbundles.com/a2lix/TranslationFormBundle, aquí te explican como integrarlo a SonataAdmin http://www.elao.com/blog/symfony-2/d...minbundle.html

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #14 (permalink)  
Antiguo 25/06/2013, 05:00
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 18 años, 1 mes
Puntos: 28
Respuesta: Web Multi Idioma

Muchísimas gracias Masterpuppet, esperaba tu sabio consejo y aquí lo tengo.

De nuevo muchas gracias, voy a ponerme a ello!

Etiquetas: idioma, multi
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 09:00.