在我的多语言Symfony(2.8)应用程序中,我有许多视图使用ajax注入主页面。基于此article,我实现了一个区域设置监听器,因此区域设置是粘性的。
我发现当主页面打开时退出并重新启动浏览器(Safari) - 当前区域设置不是默认值 - 下一个request
的当前区域设置失去了,因为现在没有以前的会议。返回ajax链接中的视图时,语言环境将设置为默认值,从而生成包含混合语言的页面。
作为一种解决方法,我将当前语言环境作为查询包含在所有ajax链接上,并且我已经劫持了语言环境侦听器,现在可以从查询中设置request
上的语言环境,即使在所描述的情况下也是如此上方。
它似乎可以完成这项工作。然而,缺点是我现在留下了包含查询字符串的丑陋网址,例如: www.domain.co.uk/es/moreinfo?_locale=es
。
我一直在尝试实现另一个侦听器,从uri中剥离查询。侦听器检测到查询并可以从request->query
参数和$_SERVER
全局变量中删除它,但是当视图返回浏览器时,我尝试的任何内容都不会更改。
我也尝试过使用新路由,这些路由会解析并转发或重定向到不同的路由/路径,但浏览器中的网址仍然保持不变。
有任何想法或建议吗?
我是从错误的角度来看待这个问题 - 即我应该尝试在客户端而不是服务器端进行此操作吗?
答案 0 :(得分:0)
正如我所看到的,您的网址中还指定了一个区域设置:{url}/{_locale}/moreinfo...
。
这是正确的本地化方法。您现在唯一需要的是在您的网址中将Symfony区域设置为_locale
slug。正如您可能猜到的那样,_locale
查询参数是多余的。
请参阅此SO问题以获得完整的解决方案。