我正在使用metro开发Java中的SOAP Web服务。 我想用客户端语言提供响应。 我的想法是返回所有字符串字段翻译。这不是Web服务的主要目的,但是是一种必要的便利。
ResourceBundle是一个java类,它根据客户端位置处理正确的字符串集的加载。 这个班级是最好的接待员吗?
真正的问题:在WS环境中如何知道客户端位置?
编辑: 我喜欢@Volker的想法,让我们决定使用什么语言。
如何将意图发送到服务?
答案 0 :(得分:2)
翻译是您服务的主要目的还是只是为了方便用户?
对于后一种情况,我会反过来讨论这个问题:
在您的应用程序设计中,是否可以以任何方式向客户端发送与语言无关的消息(如service.fail
或类似内容),并让客户端由于本地资源包而对其进行翻译?这将允许您的服务的独立用户允许将您的答案转换为他们想要的任何内容,包括使用ResourceBundle进行翻译。在我看来,客户端界面的工作是显示相应的消息,而不是服务的工作。
当然,这样做的缺点是你不会再把资源包放在一个地方了。
关于你问题的另一面:ResourceBundle是要走的路,它是专为此任务而设计的。
另外:我不知道网络服务有什么方法可以了解其他客户端,直接拦截Http-Request并读取它的字段,特别是Accept-Language
。这些字段编码en-US
等语言。
答案 1 :(得分:2)
一般来说,我会说,如果可能的话,让客户明确地告诉你他想要什么语言并根据他的需要提供。
这可能是一个额外的网络方法“getSupportedLanguages”,它提供了enUS,deDE或其他任何类型的列表,您的其他方法可能会接受这些语言并提供正确的响应。或者提供所有语言版本,让客户对其进行排序。但这可能有点网络过度杀戮,具体取决于支持的语言环境的数量......
在我看来,WebServices应该“独立”,客户端应该很薄,不需要大量信息来处理内容。想象一下C#-client,他可能无法使用您的Ressources或其他任何东西。或者没有资源的新客户无法处理您的数据......
此外,真正获得客户区域可能有所不同 - 非英语人士可能使用英语系统或可能在英国国家,但希望以他的母语查看数据。但如果你真的需要这样做,我不知道有什么可以实现这一点。