Play 2.4&中的语言选择器Scala 2.11.6

时间:2015-06-14 00:36:49

标签: scala internationalization playframework-2.0

我正在尝试使用语言选择器和本地化消息实现这个简单的页面:

| ...恩... |▼|

英文消息

理想情况下,当用户更改语言时,页面应使用更新的消息和不同的选定语言重新加载

| .... .... FR |▼|

Un messageenfrançais

但我不能让它工作:页面保持不变,唯一改变的是PLAY_LANG cookie。

控制器

package controllers

import javax.inject.Inject
import play.api.mvc._
import play.api.i18n._
import play.api.data._
import play.api.data.Forms._

class Test @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport {
  def index = Action { implicit request =>
    Ok(views.html.test())
  }
  def changeLanguage() = Action { implicit request =>
    val referrer = request.headers.get(REFERER).getOrElse("/")
    val form = Form("language" -> nonEmptyText)
    form.bindFromRequest.fold(
      errors => BadRequest(referrer),
      language => Redirect(referrer).withLang(Lang(language))
    )
  }
}

模板

@()(implicit messages: Messages, lang: Lang)
@helper.form(action = routes.Test.changeLanguage()) {
    <select name="language" style="width: auto;"> onchange="this.form.submit()">
        @play.api.i18n.Lang.availables(play.api.Play.current).map { l =>
            <option value="@l.code" @(if(lang.code.startsWith(l.code)) "selected")>@l.code</option>
        }
    </select>
    <h1>@Messages("test.message")</h1>
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

行动中的请求应该是隐含的。

def index = Action {
implicit request =>

答案 1 :(得分:0)

罪魁祸首是一个无意的额外“&gt;” 模板中的符号:

                                            v
<select name="language" style="width: auto;"> onchange="this.form.submit()">
                                            ^

此错字不会产生任何错误,但会阻止执行server.side代码。

我应该注意到cookie不会再被更改了(最初当语言更改代码不能正常工作时以及当我最终使用它时我必须在模板中引入拼写错误)。