Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

internacionalización con symfony 2.8

24 de junio de 2016

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

#1

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

24 junio 2016, 21:51
#2

@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

27 junio 2016, 16:09
#3

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

27 junio 2016, 16:14
#4

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

27 junio 2016, 17:37