Play 框架 DI 将 Lang 或 Messages 注入服务
Play framework DI injecting Lang or Messages into Service
我有一个使用 play framework 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");
}
}
我不能使用静态,因为我在应用程序启动时使用该服务,所以应用程序还没有 运行 并且对 Messages 的静态调用失败。
在服务器上,i18n 仅在请求上下文中有意义。从基于 cookie 的框中,您可以将其更改为基于 url 的 select 语言:
你的情况-应用程序启动,你不在请求上下文中,所以你可以使用任何你喜欢的语言。
假设您想使用默认的服务器语言,那么只需使用简单的 java 方法:
String javaServerLang = Locale.getDefault().getLanguage();
并将其转换为剧本Lang
Lang playLang = Lang.forCode(javaServerLang);
在请求上下文中你甚至可以将这种语言设置到上下文中,我不确定你是否可以在启动时这样做:
Context.current().changeLang(playLang);
我有一个使用 play framework 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");
}
}
我不能使用静态,因为我在应用程序启动时使用该服务,所以应用程序还没有 运行 并且对 Messages 的静态调用失败。
在服务器上,i18n 仅在请求上下文中有意义。从基于 cookie 的框中,您可以将其更改为基于 url 的 select 语言:
你的情况-应用程序启动,你不在请求上下文中,所以你可以使用任何你喜欢的语言。
假设您想使用默认的服务器语言,那么只需使用简单的 java 方法:
String javaServerLang = Locale.getDefault().getLanguage();
并将其转换为剧本Lang
Lang playLang = Lang.forCode(javaServerLang);
在请求上下文中你甚至可以将这种语言设置到上下文中,我不确定你是否可以在启动时这样做:
Context.current().changeLang(playLang);