2013-04-08 93 views
2

我希望应用程序的用户可以在我的play2(play 2.1.1,scala 2.10.1)web应用程序中更改语言。我在i18n的模板中使用了@ Messages.get(...)。更改播放框架中模板中文本的语言2.1.1

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(...)方法调用过于重定向或动作没有一个很好的解决方案,以便长时间

+0

它应该使用'.withLang(...)'方法。你可以尝试将'(implicit l:Lang)'改成'(implicit l:play.api.i18n.Lang)'和'@import play.i18n.Messages'到'@import play.api.i18n.Messages' ? – EECOLOR 2013-04-09 20:02:31

+0

@EECOLOR,它没有工作 – Tolsi 2013-04-10 07:10:13

回答

5

我做了它的工作,所以有我的变化。在应用程序代码(没有请求实例玩不知道从哪里得到与语言的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> 
... 
+0

干得好!然后,[这里是一个更通用的解决方案](http://stackoverflow.com/questions/9629250/how-to-avoid-passing-parameters-everywhere-in-play2):你可以定义你对每个动作的隐式请求少代码。 – 2013-04-10 13:34:34

+0

是否有可能避免在每个模板中写入'implicit l:Lang'部分,并且只在main中定义它? – 2013-07-29 20:57:11

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

它不相信这是一个很好的解决方案(它需要更多的代码,我是一个懒惰的家伙),但它的工作原理。希望这可以帮助...

+0

我找到了一个更简单的解决方案 – Tolsi 2013-04-10 07:48:27