Twig 中的 Symfony3 语言切换

Symfony3 Language switch in Twig

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

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

我最好的猜测是:

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

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

解决方案是为所有控制器创建语言环境前缀,正如 malcolm 提供的那样,使用路由参数:

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

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

在 Twig 中:

{{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>