2015-06-14 103 views
0

我試圖實現與語言選擇這個簡單的頁面和本地化的消息:語言選擇在播放2.4和斯卡拉2.11.6


| ...恩... |▼|

消息在英語


在理想情況下,當用戶改變在網頁應當與更新的消息重新加載語言和不同的選定語言


| .... .. FR .. |▼|

的Un消息EN法語


,但我不能得到這個工作:頁面停留相同,唯一改變的事情是PLAY_LANG餅乾。

控制器

package controllers 

import javax.inject.Inject 
import play.api.mvc._ 
import play.api.i18n._ 
import play.api.data._ 
import play.api.data.Forms._ 

class Test @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { 
    def index = Action { implicit request => 
    Ok(views.html.test()) 
    } 
    def changeLanguage() = Action { implicit request => 
    val referrer = request.headers.get(REFERER).getOrElse("/") 
    val form = Form("language" -> nonEmptyText) 
    form.bindFromRequest.fold(
     errors => BadRequest(referrer), 
     language => Redirect(referrer).withLang(Lang(language)) 
    ) 
    } 
} 

模板

@()(implicit messages: Messages, lang: Lang) 
@helper.form(action = routes.Test.changeLanguage()) { 
    <select name="language" style="width: auto;"> onchange="this.form.submit()"> 
     @play.api.i18n.Lang.availables(play.api.Play.current).map { l => 
      <option value="@l.code" @(if(lang.code.startsWith(l.code)) "selected")>@l.code</option> 
     } 
    </select> 
    <h1>@Messages("test.message")</h1> 
} 

任何幫助,將不勝感激。

回答

0

的罪魁禍首是一個無意額外的「>」的模板內部符號:

          v 
<select name="language" style="width: auto;"> onchange="this.form.submit()"> 
              ^

這個錯字沒有產生任何錯誤,但被執行防止server.side代碼。

我應該注意到cookie不再被改變(它最初是在語言改變代碼不工作時,當我最終使它工作時,我必須在模板中引入錯字)。

0

請求中的行爲應該是隱含的。

def index = Action { 
implicit request => 
+0

你的意思是這是一般性建議還是應該解決我的問題? 如果是前一種情況...謝謝,我編輯了示例代碼。 如果是後者...它仍然不起作用。 謝謝你的時間。 – ChrisEx

+0

我正在談論您想要使用本地化消息的所有處理程序。 I18nSupport具有request2Messages方法,它接受隱式請求(這就是爲什麼它應該是隱式的)並返回Messages對象。然後,我在template @(message:String)(隱式消息:Messages,lang:Lang)的開頭有下一個代碼,我在這裏接收正確的消息。 – Sergey

+0

在處理程序中,我沒有指定其他參數:Ok(views.html.index(「Your new application is ready。」))。 – Sergey