对 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(语言)
方法返回false
关于java - 玩转语言动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39691705/