2015-10-16 50 views
1

我正在使用使用播放框架2.3.x進行應用程序轉換爲2.4.x.作爲移民的一部分,我正在轉變服務,並與i18n一起面臨挑戰。 如何注入Lang或獲得它的價值?播放框架DI將Lang或消息注入服務

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

我無法使用靜態,因爲我在應用程序啓動時使用該服務,所以應用程序尚未運行,並且對消息的靜態調用失敗。

回答

1

在服務器上i18n只有在請求上下文中才有意義。從盒子裏可以看到cookies,你可以改變它,根據url選擇語言:Play Framework 2 Language Code in URL Concept?

你的情況 - 應用程序啓動,你不在請求的上下文中,所以你可以採取任何你喜歡的語言。

假設你想採取默認的服務器語言,然後只需用瑣碎的Java方法:

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

並將其轉換爲播放Lang

Lang playLang = Lang.forCode(javaServerLang); 

在你甚至可以把這個請求上下文語言在上下文中,我不知道您是否可以在啓動時執行此操作:

Context.current().changeLang(playLang); 
+0

謝謝。有沒有更好的方法來做到這一點?在最壞的情況下,我可以創建類消息提供程序,它將使用context.lang,如果沒有,它將使用默認值,但是我認爲可能有更好的方法來做這件事? – Tigran

+0

其實這就是我完成了 - 創建Lang提供程序,所以它沒有設置值 - 它使用默認值。 – Tigran