Controller:
def test = Action { implicit request =>
import play.api.i18n._
val msg = Messages("error.invalid")
implicit val langInController = lang(request)
Ok(views.html.test(langInController, msg))
}
View:
@(langInController: play.api.i18n.Lang, msg:String)(implicit request: Request[_])
<div>Lang from controller: @langInController, Message: @msg</div>
<div>Message from view: @play.api.i18n.Messages("error.required")</div>
Messages resource, conf/messages.zh-CN
:
error.required=该字段必填
Попытка
Использует английский Firefox, который отправляет заголовок запроса Accept-Language:en-us,en;q=0.5
для посещения действия test
. Результат:
Language от контроллера: Lang(en,), Сообщение: Это поле обязательно для заполнения
Сообщение в поле зрения: 该字段必填
Использует китайский Google Chrome, который отправляет заголовок запроса Accept-Language:zh-CN,zh;q=0.8
для его посещения. Результат:
Язык: Lang(zh,CN), Сообщение: 该字段必填
Сообщение в поле зрения: 该字段必填
Из тестов мы знаем, что:
Accept-Language
Среда:
Я думаю, что Play 2 должен использовать тот же неявный язык для контроллеров и представлений. Я могу исправить это, добавив что-то в Build.sbt
:
val main = PlayProject(...) (
templatesImport ++= Seq("utilis.TemplateMixin._")
)
Где TemplateMixin
просто:
object TemplateMixin extends play.api.mvc.Controller
(он расширяет контроллер и просто повторно использует некоторые методы, например implicit def lang(request)
.)
Но я думаю, что это должна делать платформа Play.