Playframework Play framework DI将语言或消息注入服务
我正在使用PlayFramework2.3.x开发应用程序,并将其转换为2.4.x。作为迁移的一部分,我正在转换服务,并遇到了i18n的挑战。 如何注入Lang或获取其值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
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。