Play试图动态更改语言的新手。
路线
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
讯息
带有一些记录的方法
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
答案 0 :(得分:1)
试试这个:
ctx().changeLang(language);
答案 1 :(得分:1)
您需要从配置中删除application.langs="nl"
。它被弃用并被play.i18n.langs
取代。
您必须只留下play.i18n.langs=["en","nl"]
您的代码不起作用,因为Play会读取application.langs="nl"
并忽略play.i18n.langs=["en","nl"]
(因为lang已经从application.langs
读取),因此它建议您的应用仅使用&#34; nl& #34;语言,当然无法将其设置为&#34; en&#34;,因此ctx().changeLang(language)
方法返回false