玩改变语言dynamallicy

时间:2016-09-25 20:48:49

标签: java playframework

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

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

2 个答案:

答案 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