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

Internacionalización sin modificar la URL

18 de febrero de 2016

Necesito internacionalizar mi aplicación web pero no quiero que en la URL existan los locales Ej: /_locale/ruta que sea solo /ruta y que el contenido cambie según el idioma por defecto que tenga el navegador o desde un selector de idiomas.

Gracias de antemano


Respuestas

#1

La funcionalidad de traducir las rutas es algo que no se va a incluir en Symfony a corto plazo. Por suerte existe un bundle llamado JMSI18nRoutingBundle que hace exactamente lo que quieres.

En el capítulo Configuration de su documentación puedes ver que define varias estrategias para traducir las URL. Lo que estás buscando sería la estrategia número 4.

@javiereguiluz

18 febrero 2016, 20:23
#2

Hola @nosiv99,

No he probado el Bundle que dice @javiereguiluz por el contrario, lo que yo hago es crear un listener para la sesión del usuario, así:

class UserLocaleListener
{
    /**
     * @var Session
     */
    private $session;
 
    public function __construct(Session $session)
    {
        $this->session = $session;
    }
 
    /**
     * @param InteractiveLoginEvent $event
     */
    public function onInteractiveLogin(InteractiveLoginEvent $event)
    {
        $user = $event->getAuthenticationToken()->getUser();
 
        if (null !== $user->getLocale()) {
            $this->session->set('_locale', $user->getLocale());
        }
    }
}

Como puedes ver, en la entidad del usuario existe la propiedad locale.

Espero sea de ayuda.

Saludos

@miguelplazasr

18 febrero 2016, 21:18
#3

No creo que sea buena idea tener diferentes contenidos en una misma URL en términos de posicionamiento en buscadores

@diegotham

18 febrero 2016, 22:53