2011-09-22 75 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返回一个包含一组字段的对象,并且那些需要翻译的字符串。 –