【发布时间】:2019-04-08 13:34:02
【问题描述】:
所以另一个应用程序将用户定向到我的服务器。重定向是 Post 请求 (application/json),JSON 中的值为 language。我应该如何在 RestController 中设置语言环境值?以便 Thymeleaf 可以呈现正确的文本。
使用LocaleContextHolder 设置语言环境并不能解决问题。
【问题讨论】:
标签: spring-boot thymeleaf
所以另一个应用程序将用户定向到我的服务器。重定向是 Post 请求 (application/json),JSON 中的值为 language。我应该如何在 RestController 中设置语言环境值?以便 Thymeleaf 可以呈现正确的文本。
使用LocaleContextHolder 设置语言环境并不能解决问题。
【问题讨论】:
标签: spring-boot thymeleaf
您应该遵循本指南here,因为国际化是 spring-boot 中的一项常见任务。如果您需要简短的回答:
首先在你的Application.java中配置一个LocaleResolver:
@Bean(name = "localeResolver")
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(new Locale("tr", "TR"));
return slr;
}
然后在您的 Application.java 文件中再次配置一个 LocaleChangeInterceptor:
@Bean(name = "localeChangeInterceptor")
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
最后注册您的 LocaleChangeInterceptor(也在 Application.java 中):
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
现在,如果您在 POST 请求中发送一个名为 "lang" 的 请求参数,spring 将使用它的值来确定所需的语言环境和相应地改变它。
【讨论】:
最终得到以下解决方案:
WebMvcConfigurer 有这些
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver r = new SessionLocaleResolver();
r.setDefaultLocale(new Locale("jp"));
return r;
}
在控制器中,我将这些类称为公共方法:
@Component
public class WebLanguage {
public void setLocale(HttpServletRequest request, HttpServletResponse response) {
if (!request.getParameterMap().containsKey("lang")) return;
LocaleResolver localeResolver = localeResolver(request);
localeResolver.setLocale(request, response, new Locale(request.getParameterMap().get("lang")[0]));
}
LocaleResolver localeResolver(HttpServletRequest request) {
return RequestContextUtils.getLocaleResolver(request);
}
}
【讨论】: