我正在运行Play Framework(2.3)+ Scala应用程序,我刚刚开始翻译它。
我有以下配置:
application.langs="en,es"
还有message和messages.es文件。我希望应用程序根据浏览器的语言显示消息,因此我将其更改为ES。
当我在电脑上运行时,一切看起来都很好,但是一旦部署它就无法正常工作。我已经检查过local和prod的conf文件都有相同的值。我还检查了请求的Accept-Language参数,它包含“es”。浏览器仍在ES中。
我想也许我可以在application.langs中更改语言的顺序,但我希望“en”成为我的默认语言。
任何人都可以帮助我吗?
更新
我已经部署了一个修改,它打印了lang的值:
@()(implicit lang: Lang)
@import play.api.Play.current
[...]
lang = @lang.code,
date = @(new java.util.Date().format("yyyy-MM-dd HH:mm"))
我在localhost和prod中获得了不同的结果:
似乎在localhost中,语言被正确覆盖了浏览器语言,但在生产中却没有。这有意义吗?
更新2:
所以,我一直在测试一些理论......我认为它可能不是Play Framework的东西。这是我发现的:
在这些测试中,@ lang.code的值始终相同:lang = es-ES。另一方面,Lang.applicables从步骤1变为2:langList = Lang(en,)Lang(fr,)。
我从中收集到的是,我在应用程序中设置的语言并不重要,还有另一个地方设置Lang并且巧合,它在localhost中设置为es-ES,在生产中设置为en-US 。它可能与服务器的Locale有关。这可以改变吗?
答案 0 :(得分:0)
解决了!我在模板中添加了一个隐式参数Lang,因此它将从请求标头Accept-Languages中获取值。然后我看到@ lang.code改为“es”!
为了清楚起见,你需要将这个隐含Lang添加到你的所有模板中,否则它将回到“默认”Lang,我仍然不确定它来自何处。所以我有一个调用@header(),@ footer()等的main.scala.html。我将隐含添加到所有这些中:
@()(content: Html)(implicit lang: Lang)
<!DOCTYPE html>
<html>
<head>
[...]
@analytics()
</head>
<body>
<div id="header">
@header()
</div>
@content
@footer()
</body>
</html>