我試圖實現與語言選擇這個簡單的頁面和本地化的消息:語言選擇在播放2.4和斯卡拉2.11.6
| ...恩... |▼|
消息在英語
在理想情況下,當用戶改變在網頁應當與更新的消息重新加載語言和不同的選定語言
| .... .. FR .. |▼|
的Un消息EN法語
,但我不能得到這個工作:頁面停留相同,唯一改變的事情是PLAY_LANG餅乾。
控制器
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>
}
任何幫助,將不勝感激。
你的意思是這是一般性建議還是應該解決我的問題? 如果是前一種情況...謝謝,我編輯了示例代碼。 如果是後者...它仍然不起作用。 謝謝你的時間。 – ChrisEx
我正在談論您想要使用本地化消息的所有處理程序。 I18nSupport具有request2Messages方法,它接受隱式請求(這就是爲什麼它應該是隱式的)並返回Messages對象。然後,我在template @(message:String)(隱式消息:Messages,lang:Lang)的開頭有下一個代碼,我在這裏接收正確的消息。 – Sergey
在處理程序中,我沒有指定其他參數:Ok(views.html.index(「Your new application is ready。」))。 – Sergey