尝试动态更改语言的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

java -  Play 更改语言动态-LMLPHP

讯息

java -  Play 更改语言动态-LMLPHP

有日志记录的方法

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

09-27 12:18