Playframework Play framework DI将语言或消息注入服务

Playframework Play framework DI将语言或消息注入服务,playframework,playframework-2.4,Playframework,Playframework 2.4,我正在使用PlayFramework2.3.x开发应用程序,并将其转换为2.4.x。作为迁移的一部分,我正在转换服务,并遇到了i18n的挑战。 如何注入Lang或获取其值 class MyServiceUsedByController { @Inject private MessagesApi messagesApi; void someFoo() { Lang lang = ///How to get it? commentToSaveT

我正在使用PlayFramework2.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");
    }
}

我不能使用static,因为我在应用程序启动时使用该服务,所以应用程序尚未运行,对消息的静态调用失败。

在服务器i18n上,只有在请求上下文中才有意义。从基于cookies的框中,您可以更改它,以根据url选择语言:

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

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

String javaServerLang = Locale.getDefault().getLanguage();
并将其转换为播放
Lang

Lang playLang = Lang.forCode(javaServerLang);
在请求上下文中,您甚至可以将此语言设置为上下文,我不确定您是否可以在启动时执行此操作:

Context.current().changeLang(playLang);

非常感谢。有更好的方法吗?在最坏的情况下,我可以创建类消息提供程序,它将使用context.lang,如果没有,它将使用default,但我想可能有更好的方法来实现这一点?实际上,这就是我完成的-创建lang提供程序,使其值不被设置-它使用default。