Twig中的Symfony3语言切换

时间:2016-12-21 15:05:20

标签: twig symfony symfony-3.1

Gretings,我在使用Twig模板更改语言时遇到问题。 我的目标是让用户可以根据自己的需要切换页面语言。我按照指示做了一切: Making the Locale "Sticky" during a User's Session

我的问题是,如何更改会话中存储的语言,来自Twig模板?

我最好的猜测是:

{{ app.session.set('_lang', 'en') }}

但结果是,语言更改需要刷新两次以显示结果,一次在会话中设置值,第二次根据会话中存储的语言加载页面。请指教!

2 个答案:

答案 0 :(得分:2)

解决方案是使用route params为所有控制器和malcolm创建区域设置前缀:

{{ path(app.request.attributes.get('_route'), app.request.query.all|merge({'_locale': 'en'})) }}

答案 1 :(得分:0)

这将允许您在不知道路线的情况下获取路线和路线参数。然后它将用您的值覆盖_locale参数。

在树枝上:

{{path(app.request.attributes.get('_route'),app.request.attributes.get('_route_params')|merge({'_locale': 'en'})) }}

带有HTML / Bootstrap代码

<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" id="language_switcher" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-globe"></i></a>
    <div class="dropdown-menu" aria-labelledby="language_switcher">
        <a class="dropdown-item" href="{{ path(app.request.attributes.get('_route'),app.request.attributes.get('_route_params')|merge({'_locale': 'ru'})) }}"><span class="flag flag-ru"> </span>  Russian</a>
        <a class="dropdown-item" href="{{ path(app.request.attributes.get('_route'),app.request.attributes.get('_route_params')|merge({'_locale': 'en'})) }}"><span class="flag flag-us"> </span>  English</a>
    </div>
</li>
相关问题