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>
您好,我在从 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>