Siguiendo un ejemplo de del libro de javier eguiluz (Desarrollo web ágil con Symfony2), estoy haciendo la traduccion de mi sitio, lo que hago, es en la plantilla twig:
{% set locale = app.request.locale %} <section id="idioma"> {% if locale == 'es' %} <span>Español</span> - <a href="{{ path('login', { _locale: 'en' }) }}">English</a> {% elseif locale == 'en' %} <a href="{{ path('login', { _locale: 'es' }) }}">Español</a> - <span>English</span> {% endif %}
En el archivo routing.yml (el principal del proyecto, ubicado en app/config), le coloco el prefijo a todas las direcciones de las rutas de las paginas de mis Bundles de la siguiente manera:
autogestion: resource: "@AutogestionBundle/Resources/config/routing.yml" prefix: /{_locale} requirements: _locale: |es|en usuarios: resource: "@UsuariosBundle/Resources/config/routing.yml" prefix: /{_locale} requirements: _locale: |es|en
Ahora el PROBLEMA, es que mientras navego por las paginas del mismo bundle, se mantiene el valor del locale (.../es/unaruta), pero cuando se dirige a una pagina del otro bundle, la ruta no mantiene el valor de locale (.../en/otraruta), se pone el valor del locale que esta definido en el archivo parameters.yml ( locale: en).
Al parecer no se mantien dentro de la sesion el valor de locale. Bueno, si alguien me puede ayudar a solucionar esta situación, estaré muy agradecido!
Respuestas
Hola @rigottimatias,
Y si guardas el locale como una variable dentro de la sesión? No se se me ocurre eso, lo otro es que si manejas usuarios podrias guardarlo como una propiedad dentro del perfil del usuario.
Saludos
@miguelplazasr
@miguelplazasr Gracias por responder!
Me parece, que lo que tengo que hacer, es en el momento que redirecciono a la primer pagina del otro Bundle, decirle que arranque con el _locale con el que se venia navegando al momento de iniciar sesion, es decir, aca:
$response = new RedirectResponse($this->router->generate('autogestion_index'));
avisarle con que valor de _locale quiero que comience.
¿Es realmente asi? ¿o hay algo que no estoy teniendo en cuenta?
@rigottimatias
En la documentación oficial de Symfony hay un artículo que explica cómo hacer que el "locale" sea persistente entre peticiones: Making the Locale "Sticky" during a User's Session.
@javiereguiluz
Gracias @javiereguiluz.
Si, estuve leyendo el articulo pero no pude hacerlo funcionar despues de varios intentos...
Ahora lo solucione de la siguiente manera:
$locale = $request->getLocale();
$response = new RedirectResponse($this->router->generate('autogestion_index', array('_locale' => '$locale')));
le paso por parametro el valor de locale, 'en' o 'es' dependiendo cual esta utilizando al iniciar sesión (que lo obtengo del metodo getLocale()).
¿Eso tiene alguna contra? ¿o puedo dejarlo de esa manera?
Gracias!
@rigottimatias