使用典型的Web应用程序,并且在执行我希望Play Framework 2.4 Messages API在回答请求(和呈现视图)时使用的语言环境时遇到问题。
我尝试从控制器调用Http.Context.Implicit.ctx().changeLang(mySpecificLangCode);
(扩展了devkit.mvc.Controller)。如果之后再致电play.i18n.Messages#get(java.lang.String, java.lang.Object...)
,我得到的答案就是我想要的语言,一切都很好。
如果我从我的视图(scala / Twirl)使用Messages API来满足相同的请求,那是不可行的。它回退到默认语言。我必须等待客户端发送第二个请求,以使其以正确的语言提供服务。
我认为这是因为服务器第一次发送PLAY_LANG cookie,客户端在以下请求中发送了该cookie,并以某种方式告诉Play用我想要的语言呈现视图。但是,我不能依靠这种行为,因为我必须考虑到客户端的寿命是一个请求。我对客户端没有控制权,我也不能/也不能基于客户端请求的Accept-Language标头来编写代码。
我尝试了一些调试工作,并查看了从视图内部调用Messages API,阅读一些文档时会发生什么情况,但对我没有多大帮助,甚至对我来说也没有多大帮助。
建议(在此处以及官方文档中也有建议)似乎是使用依赖注入为视图提供Messages对象,但是我无法修改视图(我的响应使用了scala模板,该模板调用了其他模板等。修改它们都是毫无疑问的。
我该怎么办,就是我想做的简单明了的事,并且不修改视图就根本不可行?
答案 0 :(得分:0)
我最终发现这是Play框架中的实际问题,请参见https://github.com/playframework/playframework/issues/5875(并提供解决该问题的方法)。