1

在我的多语言 Symfony (2.8) 应用程序中,我有许多使用 ajax 注入到主页中的视图。基于这篇文章,我实现了一个语言环境监听器,所以语言环境是粘性的。

我发现在主页面打开时退出并重新启动浏览器(Safari) - 而当前语言环境不是默认设置 - 下一个当前语言环境request会丢失,因为现在没有以前的会话。当返回来自 ajax 链接的视图时,语言环境设置为默认值,从而产生混合语言的页面。

作为一种解决方法,我将当前语言环境作为所有 ajax 链接的查询包括在内,并且我劫持了语言环境侦听器request,即使在上述情况下,它现在也可以在查询中设置语言环境。

它似乎完成了这项工作。但是,缺点是我现在留下了包含查询字符串的丑陋网址,例如www.domain.co.uk/es/moreinfo?_locale=es.

我一直在尝试实现另一个侦听器,以从 uri 中删除查询。侦听器检测到查询并可以将其从request->query参数和$_SERVER全局变量中删除,但是当视图返回浏览器时,我没有尝试使其更改。

我也尝试过使用新路由,这些路由解析并转发或重定向到不同的路由/路径,但浏览器中的 url 仍然保持不变。

有什么想法或建议吗?

我是否从错误的角度来解决这个问题 - 即我应该尝试在客户端而不是服务器端进行操作吗?

4

1 回答 1

0

如我所见,您的网址中还指定了一个语言环境,如下所示{url}/{_locale}/moreinfo...

这是本地化的正确方法。你现在唯一需要做的就是让 Symfony 语言环境适应_locale你的 url。正如您可能猜到的那样,_locale查询参数是多余的。

请参阅此 SO question 以获得完整的解决方案。

于 2016-03-04T20:44:31.270 回答