Контроллер:
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))
}
Вид:
@(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>
Ресурс сообщений, conf/messages.zh-CN
:
error.required=该字段必填
Попытка
-
Использует английский Firefox, который отправляет заголовок запроса
Accept-Language:en-us,en;q=0.5
для посещения действияtest
. Результат:Language from controller: Lang(en,), Message: This field is required Message in view: 该字段必填
-
Использует китайский Google Chrome, который отправляет заголовок запроса
Accept-Language:zh-CN,zh;q=0.8
для его просмотра. Результат:Language: Lang(zh,CN), Message: 该字段必填 Message in view: 该字段必填
Из тестов мы знаем, что:
- Неявный язык в контроллере из заголовка запроса
Accept-Language
- Неявный язык, используемый в шаблоне, определяется ОС
Окружающая среда:
- Play 2 - последний play2.1-SNAPSHOT от GitHub (2012-03-16)
- Моя ОС - Windows 7 x64 китайская версия
Я думаю, что Play 2 должен использовать тот же неявный язык для контроллеров и представлений. Я могу исправить это, добавив что-то в Build.sbt
:
val main = PlayProject(...) (
templatesImport ++= Seq("utilis.TemplateMixin._")
)
Где TemplateMixin
справедливо:
object TemplateMixin extends play.api.mvc.Controller
(Он расширяет Controller и только для повторного использования некоторых методов, таких как implicit def lang(request)
.)
Но я думаю, что это должно быть сделано с помощью платформы Play.