2011-09-22 77 views
0

我正在使用metro開發Java中的SOAP Web服務。 我想用客戶端語言提供響應。 我的想法是返回所有的字符串字段翻譯。這不是Web服務的主要目的,而是一個必要的便利。客戶端語言中的Web服務響應 - 如何?

ResourceBundle是一個java類,它處理根據客戶端位置加載正確的字符串集。 這個班是最好的接班人嗎?

真正的問題:在WS環境下如何知道客戶端的位置?

編輯: 我喜歡@Volker的想法,讓我們決定使用哪種語言。

如何發送意向到服務?

  • 標題參數?
  • 方法(body)參數?
  • 還有其他的選擇嗎?

回答

2

通常,我會說,如果可能的話,讓客戶明確地告訴你他想要什麼語言,並根據他的需求來提供。

這可能是一個附加的web方法「getSupportedLanguages」,它提供了一個enUS,deDE或其他方法的列表,並且您的其他方法可以接受這些語言並提供正確的響應。或者提供所有語言版本,讓客戶把它整理出來。但這可能有點網絡矯枉過正,取決於支持的語言環境的數量...

在我看來,Web服務應該「獨立」,客戶端應該很薄,不需要大量的信息來處理內容。想象一下C#客戶端,他們可能無法使用您的資源或其他任何東西。或者沒有資源的新客戶端無法使用您的數據...

此外,它可能會有所不同,真正得到客戶的區域設置 - 非英國人可能會使用英語系統或可能在英國國家,但希望看到他的母語的數據。但如果你真的需要這樣做,我不知道有什麼可以做到這一點。

2

翻譯是您服務的主要目的,還是僅僅是爲了方便用戶?

對於後一種情況下,我會種下去這個問題倒過來:

是它,在你的應用程序設計,以任何可能的方式來發送語言無關的信息(如service.fail或類似的東西)到客戶端,並讓客戶端翻譯他們由於本地資源包?這將允許您的服務的獨立用戶允許將您的答案轉換爲他們想要的任何內容,包括使用ResourceBundle進行翻譯。在我看來,客戶界面的工作是顯示適當的信息,而不是服務的工作。

當然,這樣做的缺點是你不會再把所有的資源包放在一個地方。

至於你的問題的另一面:ResourceBundle是要走的路,它已經專門爲這項任務而設計。

另外:我不知道有什麼方法可以讓網絡服務知道任何有關客戶端的信息,他們直接攔截HTTP請求並讀取它的字段,具體爲Accept-Language。這些字段編碼像en-US這樣的語言。

+0

編輯該問題;翻譯是次要的,但需要。 ws返回一個包含一組字段的對象,並且那些需要翻譯的字符串。 –