Je travaille avec Symfony 2 sur un site ayant 2 langues et je souhaite modifier les schémas de mes itinéraires en fonction de la langue de l'utilisateur!
Exemple:
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}
Dans un template, ce n’est pas difficile, je dois juste passer le $ this-> get ('session') -> getLocale () du contrôleur au template ...
Pour travailler, je dois appeler mes itinéraires:
$router->generate('user_login_'.$locale, array());
Mais à l'intérieur de mes mises en page, j'ai bien sûr un menu, et des barres latérales, qui ont des liens ... Donc, je veux obtenir la variable locale pour l'utiliser! Ma question est donc simple: comment insérer cette variable dans un modèle "layout"? Sinon, avez-vous une idée pour changer le modèle en fonction de la langue?
Les raisons sont que je veux de beaux itinéraires pour tous les utilisateurs, qu'ils soient anglais ou français ... Et aussi pour une raison de référencement!
---MISE À JOUR DES COMMENTAIRES ---
En tant que Symfony 2.1, vous devez utiliser
{{ app.request.locale }}
ou
{{ app.request.getLocale() }}
qui retourne app.request.locale
si disponible et app.request.defaultLocale
si app.request.locale
n'est pas défini.
Comme Symfony 2.1 stocke les "paramètres régionaux" dans la demande au lieu de la session, vous devez utiliser ceci:
{{ app.request.getLocale() }}
au lieu de app.session.locale
Aussi, vous voudrez peut-être simplifier votre routage (une seule règle):
user_login: pattern: /{_locale}/user/login.html par défaut: {_controller: SfErrorsAppBundle: Utilisateur: login}
Si vous ne souhaitez autoriser que certaines langues, vous pouvez ajouter une exigence:
user_login: pattern: /{_locale}/user/login.html par défaut: {_controller: SfErrorsAppBundle: Utilisateur: login} configuration requise: _locale: fr | en
À mon avis, c’est le moyen le plus simple et le plus facile à maintenir de détecter automatiquement les paramètres régionaux sans se soucier de Symfony version:
{% 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 %}
En outre, si vous le préférez, vous pouvez utiliser un objet similaire à la notation dans Twig moteur de gabarit:
{% 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 %}
Voir Notes de publication de Symfony 2.1. pour plus d'informations.