2016-09-25 38 views
1

尝试动态更改语言的播放相当新颖。播放更改语言dynamallicy

路线

GET  /language/:lang    controllers.Index.setLanguage(lang: String) 

试过到目前为止(但他们没有工作)

Lang.apply(language); 
Lang.change(language); // <-- doesn't even compile 
Lang.apply(language); 
ctx().changeLang(language); 

视图

@import play.i18n.Messages 
... 
@Messages.get("message") 
@messages.at("message") 
... 

两个不工作..

application.config

enter image description here

消息

enter image description here

方法一些记录

public Result setLanguage(String language) { 
    Http.Context context = Http.Context.current(); 
    String langFromHttpContext = context.lang().language(); 
    String langFromCtx = ctx().lang().language(); 
    String playLangCookieVal = request().cookies().get("PLAY_LANG").value(); 
    boolean changed = ctx().changeLang(language); 

    Logger.info("Request param: " + language); 
    Logger.info("Http context language: " + langFromHttpContext); 
    Logger.info("ctx language: " + langFromHttpContext); 
    Logger.info("PLAY_LANG cookie value: " + langFromCtx); 
    Logger.info("Changed: " + changed); 
    return ok(index.render("Index")); 
} 

结果

application - Request param: en 
application - Http context language: nl 
application - ctx language: nl 
application - PLAY_LANG cookie value: nl 
application - Changed: false 

回答

1

您需要从配置中删除application.langs="nl"。它已弃用,由play.i18n.langs替代。

你必须只留下play.i18n.langs=["en","nl"]

您的代码不起作用,因为播放读取application.langs="nl"而忽略play.i18n.langs=["en","nl"](因为从application.langs已经阅读LANGS),所以建议你的应用程序只使用“NL”语言中,当然不能将它设置为“en”,所以ctx().changeLang(language)方法返回false

+0

哇,这没有工作。非常感谢你 –

1

试试这个:

ctx().changeLang(language); 
+0

这是行不通的。我不明白。似乎没有什么工作:') –

+0

你玩哪个版本? –

+0

目前在2.5.8 –