नियंत्रक:i18n त्रुटि: नियंत्रक और टेम्पलेट्स अलग अंतर्निहित भाषाओं
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=该字段必填
कोशिश कर रहा
एक अंग्रेजी फ़ायरफ़ॉक्स का उपयोग करता है जो
test
कार्रवाई पर जाने के लिए अनुरोध शीर्षलेखAccept-Language:en-us,en;q=0.5
भेजता है। परिणाम है:Language from controller: Lang(en,), Message: This field is required Message in view: 该字段必填
एक चीनी गूगल क्रोम जो अनुरोध हेडर
Accept-Language:zh-CN,zh;q=0.8
भेजता है यह यात्रा करने के लिए उपयोग करता है। परिणाम है:Language: Lang(zh,CN), Message: 该字段必填 Message in view: 该字段必填
परीक्षण से, हम जानते हैं कि:
- नियंत्रक में निहित भाषा अनुरोध हेडर के
Accept-Language
- अंतर्निहित टेम्पलेट में उपयोग की गई भाषा से है ओएस
पर्यावरण:
द्वारा निर्धारित (2012-03-16)- प्ले 2 GitHub से नवीनतम play2.1-स्नैपशॉट है
मुझे लगता है कि खेलने के 2 एक ही निहित का उपयोग करना चाहिए नियंत्रकों और विचारों के लिए भाषा। कहाँ TemplateMixin
बस है
val main = PlayProject(...) (
templatesImport ++= Seq("utilis.TemplateMixin._")
)
:: मैं Build.sbt
में कुछ जोड़कर इसे ठीक कर सकते हैं (। यह नियंत्रक प्रदान करता है और सिर्फ implicit def lang(request)
की तरह, कुछ तरीकों का पुन: उपयोग करने के लिए है)
object TemplateMixin extends play.api.mvc.Controller
लेकिन मुझे लगता है कि इसे प्ले फ्रेमवर्क द्वारा किया जाना चाहिए।
फिर से धन्यवाद। Play2 के दस्तावेज़ों में एक अच्छा जवाब जोड़ा जाना चाहिए। – Freewind
यह डिफ़ॉल्ट व्यवहार क्यों नहीं हो सकता है? मैं कल्पना करता हूं कि अधिकतर ऐप्स अंतर्निहित भूमि को दृश्य में उपयोग किए जाने वाले समान होने के लिए चाहते हैं। – Ike
इसे बनाना डिफ़ॉल्ट व्यवहार को जावा नियंत्रकों (जो अंतर्निहित मूल्य प्रदान नहीं कर सकता) और स्काला नियंत्रकों के साथ उपयोग किए जाने वाले टेम्पलेट्स के साथ उपयोग किए जाने वाले टेम्पलेट्स के बीच अंतर करने की आवश्यकता होगी। –