Play 2.4 和 Scala 2.11.6 中的语言选择器
Language selector in Play 2.4 & Scala 2.11.6
我正在尝试使用语言选择器和本地化消息实现这个简单的页面:
|...zh...|▼|
英文留言
理想情况下,当用户更改语言时,页面应该重新加载更新的消息和不同的所选语言
|....fr....|▼|
Un message en franç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>
}
如有任何帮助,我们将不胜感激。
行动中的请求应该是隐式的。
def index = Action {
implicit request =>
罪魁祸首是 模板中的一个无意的额外“>”符号:
v
<select name="language" style="width: auto;"> onchange="this.form.submit()">
^
这个拼写错误没有产生任何错误,但阻止了 server.side 代码的执行。
我应该注意到 cookie 没有再被更改(它最初是在语言更改代码不起作用时发生的,当我终于让它起作用时,我一定是在模板中引入了拼写错误)。
我正在尝试使用语言选择器和本地化消息实现这个简单的页面:
|...zh...|▼|
英文留言
理想情况下,当用户更改语言时,页面应该重新加载更新的消息和不同的所选语言
|....fr....|▼|
Un message en franç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>
}
如有任何帮助,我们将不胜感激。
行动中的请求应该是隐式的。
def index = Action {
implicit request =>
罪魁祸首是 模板中的一个无意的额外“>”符号:
v
<select name="language" style="width: auto;"> onchange="this.form.submit()">
^
这个拼写错误没有产生任何错误,但阻止了 server.side 代码的执行。
我应该注意到 cookie 没有再被更改(它最初是在语言更改代码不起作用时发生的,当我终于让它起作用时,我一定是在模板中引入了拼写错误)。