Kontroler:i18n błąd: kontroler i szablony używa różnych językach ukryte
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))
}
Widok:
@(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>
Wiadomości zasobów, conf/messages.zh-CN
:
error.required=该字段必填
Próbując
Używa angielskiego Firefoksa, który wysyła nagłówek żądania
Accept-Language:en-us,en;q=0.5
odwiedzić działaniatest
. Wynikiem jest:Language from controller: Lang(en,), Message: This field is required Message in view: 该字段必填
Używa chińskiego Google Chrome, który wysyła nagłówek żądania
Accept-Language:zh-CN,zh;q=0.8
do jej odwiedzenia. Wynikiem jest:Language: Lang(zh,CN), Message: 该字段必填 Message in view: 该字段必填
Z badań wiemy, że:
- Językiem ukryte w sterowniku jest od
Accept-Language
- The języku niejawny nagłówka żądania wykorzystanej w szablonie jest określony przez OS
Środowisko:
- play 2 to najnowszy play2.1-SNAPSHOT z GitHub (2012-03-16)
- Moja jest system operacyjny Windows 7 x64 chińska wersja
myślę play 2 powinny stosować takie same niejawny język kontrolerów i widoków. Mogę to naprawić dodając coś w Build.sbt
:
val main = PlayProject(...) (
templatesImport ++= Seq("utilis.TemplateMixin._")
)
Jeżeli TemplateMixin
tylko: (. Rozciąga Controller i jest po prostu do ponownego wykorzystania niektórych metod, jak implicit def lang(request)
)
object TemplateMixin extends play.api.mvc.Controller
Ale myślę, że powinno to być zrobione w ramach Play.
Jeszcze raz dziękuję. Dobra odpowiedź powinna zostać dodana do dokumentów play2. – Freewind
Dlaczego nie może to być zachowanie domyślne? Wyobrażam sobie, że większość aplikacji chciałaby, aby domyślny Land w widoku był taki sam jak w kontrolerze. – Ike
Ustawienie domyślnego zachowania wymagałoby rozróżnienia szablonów przeznaczonych do użycia z kontrolerami Java (które nie mogą dostarczyć wartości niejawnych) i szablonów przeznaczonych do użycia z kontrolerami Scala. –