Estoy trabajando con Symfony 2 en un sitio que tener 2 idiomas,
y quiero cambiar los patrones de mis rutas dependiendo de la configuración regional del usuario idioma !

Ejemplo:

user_login_en:
    pattern:  /en/user/login.html
    defaults: { _controller: SfErrorsAppBundle:User:login, _locale: en }

user_login_fr:
    pattern:  /fr/utilisateur/connexion.html
    defaults: { _controller: SfErrorsAppBundle:User:login, _locale: fr}

Dentro de una plantilla, esto no es difícil, sólo tengo que pasar el $this->get(‘session’)->getLocale() desde el controlador a la plantilla…

A trabajar, tengo que llamar a mis rutas:

$router->generate('user_login_'.$locale, array());

Pero dentro de mis diseños, me han supuesto un menú y barras laterales, que tienen enlaces… Así que quiero obtener la configuración regional de la variable a usar ! Así que mi pregunta es simple: ¿cómo obtener esta variable dentro de un «diseño» de la plantilla ? De lo contrario, ¿tienes alguna idea para cambiar el patrón según el idioma ?

Las razones son que quiero hermosas rutas para todos los usuarios, independientemente de si están en inglés o francés… Y también para un SEO razón !

InformationsquelleAutor Sybio | 2011-08-02

4 Comentarios

  1. 147

    ACTUALIZADO DE LOS COMENTARIOS

    Como Symfony 2.1, debe utilizar

    {{ app.request.locale }}

    o

    {{ app.request.getLocale() }}

    que devuelve app.request.locale si está disponible y app.request.defaultLocale si app.request.locale no está configurado.

    • Como Symfony 2.1, debe utilizar app.request.locale lugar.
    • y en php de la plantilla?
    • @DomingoSL $view['request']->getLocale()
    • También en la rama prefiero {{ app.request.getLocale() }} ya que devuelve app.request.locale si está disponible y app.request.defaultLocale si app.request.locale no está configurado.
    • Actualizada la respuesta con los comentarios de Damien y Anticom
    • En realidad, estas dos opciones, ambas hacen lo mismo. En Twig, el punto se puede utilizar la sintaxis para acceder a métodos getter si no hay público de la propiedad con el nombre de siempre (como aquí – la locale de propiedad sobre las solicitudes está protegido). Para las reglas exactas de cómo el operador trabaja en la Ramita, consulte la «Aplicación» bajo la sección twig.sensiolabs.org/doc/templates.html#variables

  2. 104

    Como Symfony 2.1 tiendas de la «configuración regional» en la Petición de la sesión, usted tiene que utilizar este:

    {{ app.request.getLocale() }}

    lugar de aplicación.período de sesiones.configuración regional

    • este debería ser aceptado, el uno como el otro es obsoleta y por lo tanto engañoso
    • Supongo que he tenido la misma experiencia que esas personas, que acaba de perder 5 minutos con el primero que ha aceptado la respuesta, @Sybio favor de cambiar aceptado respuesta
    • Tal vez debería haber hecho el esfuerzo de actualización el aceptado respuesta con esta 😉
  3. 5

    También, usted puede ser que desee simplificar su enrutamiento (una única regla):

    user_login: 
    patrón: /{_locale}/user/login.html 
    defaults: { _controller: SfErrorsAppBundle:Usuario:login } 
    

    Si desea permitir que sólo algunos de los idiomas que usted puede añadir un requisito:

    user_login: 
    patrón: /{_locale}/user/login.html 
    defaults: { _controller: SfErrorsAppBundle:Usuario:login } 
    requisitos: 
    _locale: fr|en 
    
  4. 2

    En mi opinión, este es el más fácil y mantenible manera para detectar automáticamente la configuración regional sin tener que preocuparse por Symfony versión:

    {% if not app.session.locale is null %} {# Prior to Symfony 2.1 you must get from session, it will be null if upper #}
        Locale: {{ app.session.locale }}
    {% else %} {# With Symfony 2.1 or upper you only can get the locale from request #}
        Locale: {{ app.request.locale }}
    {% endif %}

    También, si lo prefieres puedes usar un el objeto como la notación en Ramita motor de plantillas:

    {% if not app.getSession().getLocale() is null %} {# Prior to Symfony 2.1 you must get from session, it will be null if upper #}
        Locale: {{ app.getSession().getLocale() }}
    {% else %} {# With Symfony 2.1 or upper you only can get the locale from request #}
        Locale: {{ app.getRequest().getLocale() }}
    {% endif %}

    Ver Symfony notas de la versión 2.1.0 para obtener más información

Dejar respuesta

Please enter your comment!
Please enter your name here