我们有一个带有GET和POST方法的API的Spring Boot REST应用程序。我们很少有响应消息需要根据GET和POST的参数“locale”进行国际化。如果是GET,则会传递locale作为查询参数(例如:http://sampleapp/search?locale=en),对于POST方法,locale将成为请求JSON的一部分。如果我能为这种情况获得一些参考实现,那将是很好的。
答案 0 :(得分:3)
起初我认为你不需要有语言环境路径参数。而不是您可以使用标准的Accept-Language
HTTP标头属性。您可以阅读此标题here。
这是您在rest方法中从HTTP请求中读取接受语言信息的方法:
@RequestMapping(produces = "application/json", method = RequestMethod.GET)
public ResponseEntity<Data> getData(@RequestHeader(value="Accept-Language") String acceptLanguage)
{
//your code goes here
}
从您的客户那里获得公认的语言信息&#39;然后,您可以使用Java I18N从属性文件中读取语言从属值。以下文章向您解释了如何执行此操作:https://www.google.hu/amp/s/www.journaldev.com/1370/java-i18n-internationalization-in-java/amp
如果客户未提供语言信息,您可以使用英语作为默认语言。
希望它会对你有所帮助。
答案 1 :(得分:2)
检测可在REST服务中重用的Web应用程序中的用户区域设置的标准方法是accept-language
标头。浏览器会自动向每个请求发送此标头。在Spring MVC应用程序中检测用户区域设置时,Spring为我们提供了各种为我们工作的*LocaleResolver
类。有关简单示例,请参阅此article。
如果您正在使用Spring RESTC的Spring REST扩展,那么这里没有什么不同。可用于MVC的所有内容都可以在@RestController
个中使用。因此,您的客户可以在其请求上设置accept-language
,自动检测的工作方式与在Web应用程序中的工作方式相同。
如果您有要求实现带有语言环境作为POST / GET参数的解决方案,那么您应该查看LocaleContextHolder
。 Spring将语言环境信息与当前Thread
相关联,这是一种直接访问和修改它的方法。稍后使用LocaleContextHolder
设置区域设置时,您可以在应用程序组件中使用它从上下文中读取,以及Spring标准组件将知道另一个区域设置。