【问题标题】:Change language of text in template in play framework 2.1.1在 play framework 2.1.1 中更改模板中文本的语言
【发布时间】:2013-04-08 20:26:32
【问题描述】:

我希望应用程序的用户可以更改我的 play2(play 2.1.1,scala 2.10.1)网络应用程序中的语言。我在 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(...) 方法调用的操作。这么久都没有好的解决办法?

【问题讨论】:

  • 它应该与.withLang(...) 方法一起使用。你能试着把(implicit l: Lang)改成(implicit l:play.api.i18n.Lang)和@import play.i18n.Messages改成@import play.api.i18n.Messages吗?
  • @EECOLOR,它不起作用

标签: scala templates web internationalization playframework-2.1


【解决方案1】:

我让它工作了,所以有我的改变。在应用程序代码中(没有请求实例播放不知道从哪里获取带有语言的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>
...

【讨论】:

  • 干得好!然后,here is a more generic solution:您可以用更少的代码为每个操作定义隐式请求。
  • 是否可以避免在每个模板中写implicit l: Lang部分而只在main中定义它?
【解决方案2】:

我遇到了同样的问题,并在 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

它不认为这是一个好的解决方案(它需要更多代码,而且我是一个懒惰的人),但它确实有效。希望这可以帮助...

【讨论】:

  • 我找到了一个更简单的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 2012-06-03
  • 1970-01-01
相关资源
最近更新 更多