2015-10-26 66 views
0

我知道這是可能的最好語言設置爲會話使用代碼Scala Play Framework如何爲當前請求設置語言?

Ok(views.html.index()).withLang(lang) 

但它只會在下次請求,並默認語言的當前請求獲取用戶頁面上工作。 我試過有可能是這樣的:

implicit val lang = Lang("de") 
Ok(views.html.index("Homepage")) 

沒有成功。 什麼是實現這個目標的正確方法? 這裏是視圖:

@(message: String)(implicit messages: Messages) 

@main(message) { 
    @messages("admin.area.enter") 
} 
+0

我想你回答錯了你的問題。它應該是對這個問題的編輯。編輯這個和刪除另一個很容易。 – w4tson

回答

1

Play 2.4 documentation on internationalization狀態

「此外,播放知道開箱如何注入MessagesApi值(即使用DefaultMessagesApi實現),所以你可以只標註您的控制器使用@ javax.inject.Inject註釋並讓Play自動爲您連接組件。「

像這樣的事情

控制器:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { 

    def index() = Action { implicit request => 
    Ok(views.html.index()) 
    } 

} 

模板:

@()(implicit messages: Messages, lang: Lang) 

Messages says @messages("hello.msg") 

如果你想實現一個語言選擇器組件,那麼這個答案可能會幫助

Language selector in Play 2.4 & Scala 2.11.6

以下是一個修改請求標頭的複合動作示例。

object LanguageAction extends ActionBuilder[Request] { 
    def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = { 

    val newRequest = new WrappedRequest[A](request) { 
     //calculate from request url 
     val lang = Lang("fr") 

     override lazy val acceptLanguages = Seq(lang) 
    } 

    block(newRequest) 
    } 
} 

控制器:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { 

    def index() = LanguageAction { implicit request => 

    Ok(views.html.index()) 
    } 

} 

查看:

@()(implicit messages: Messages, lang: Lang) 

@messages("foo.bar") 
相關問題