播放框架DI注入Lang或消息到服务

时间:2015-10-16 15:05:07

标签: playframework playframework-2.4

我正在使用播放框架2.3.x的应用程序,我转换为2.4.x.作为迁移的一部分,我正在改造服务并遇到了i18n的挑战。 我如何注入Lang或获得它的价值?

class MyServiceUsedByController {
    @Inject
    private MessagesApi messagesApi;
    void someFoo() {
        Lang lang = ///How to get it?
        commentToSaveToDb = messagesApi.get(lang, "comment.addedPlace");
    }
}

我无法使用静态,因为我在应用程序启动时使用该服务,因此应用程序尚未运行,并且对消息的静态调用失败。

1 个答案:

答案 0 :(得分:1)

在服务器上,i18n仅在请求上下文中有意义。在框中,它基于cookie,您可以更改它,根据网址选择语言:Play Framework 2 Language Code in URL Concept?

您的情况 - 应用程序启动,您不在请求上下文中,因此您可以使用您喜欢的任何语言。

假设您想采用默认服务器语言,那么只需使用普通的java方法:

String javaServerLang = Locale.getDefault().getLanguage();

并将其转换为播放Lang

Lang playLang = Lang.forCode(javaServerLang);

在请求上下文中,您甚至可以将此语言设置为上下文,我不确定您是否可以在启动时执行此操作:

Context.current().changeLang(playLang);