2

アプリケーションのユーザーが私の play2 (play 2.1.1、scala 2.10.1) Web アプリケーションで言語を変更できるようにしたいです。i18n のテンプレートで @Messages.get(...) を使用しています。

私は持っている

application.langs="en,ru"

application.conf で。そのメソッドに「en」または「ru」を渡します。

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

def changeLanguage(lang:String) = Action {
  implicit request =>
    Logger.logger.debug("Change user lang to : " + lang)
    val referrer = request.headers.get(REFERER).getOrElse(HOME_URL)
    Redirect(referrer).withLang(Lang(lang))
}

ルート:

GET     /                           controllers.Application.index
GET     /index                      controllers.Application.changeLanguage(lang ?= "ru")

テンプレートの束 (views.html.index):

@()(implicit l: Lang)

@import play.i18n.Messages

...

<a href="/about">@Messages.get("about")</li>

...

<a href="index?lang=ru" id="ru"></a>
<a href="index?lang=en" id="en"></a>
...

ページをリダイレクトした後、同じ言語で表示されます。:(

私は多くの古い回答を読みました: テンプレートの暗黙的な言語パラメーターが機能しない、リダイレクトまたは withLang(...) メソッド呼び出しによるアクションも。長い間良い解決策がありませんでしたか?

4

2 に答える 2

5

私はそれを機能させたので、私の変更があります。アプリ コード内 (リクエスト インスタンスがなければ、play は言語で Cookie を取得する場所を知りませんか?):

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

テンプレートでは (play.api.i18n は自動的にインポートされます):

@()(implicit l: Lang)

...

<a href="/about">@Messages("about")</li>

...

<a href="index?lang=ru" id="ru"></a>
<a href="index?lang=en" id="en"></a>
...
于 2013-04-10T07:45:53.003 に答える
1

同じ問題があり、play.i18n の上に独自のメッセージ解決クラスを追加しました。

メッセージの解決については、ここに (Java で) 例を示すことができます: https://github.com/adericbourg/proto-poll/blob/dev/app/util/user/message/Messages.java#L76

そして、コントローラーの changeLang のメソッドはこれを呼び出します: https://github.com/adericbourg/proto-poll/blob/dev/app/util/security/CurrentUser.java#L71

それが良い解決策であるとは信じていません (より多くのコードが必要で、私は怠け者です) が、機能します。これが役立つことを願っています...

于 2013-04-09T14:35:10.017 に答える