尝试动态更改语言的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
最佳答案
您需要从配置中删除application.langs="nl"
。它已弃用并由play.i18n.langs
代替。
您只能离开play.i18n.langs=["en","nl"]
您的代码无法正常工作,因为Play读取了application.langs="nl"
并忽略了play.i18n.langs=["en","nl"]
(因为langs已经从application.langs
读取了),因此它建议您的应用程序仅使用“ nl”语言,当然不能将其设置为“ en”,因此ctx().changeLang(language)
方法返回false