我正在使用播放框架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");
}
}
我无法使用静态,因为我在应用程序启动时使用该服务,因此应用程序尚未运行,并且对消息的静态调用失败。
答案 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);