【问题标题】:Springboot locale with Rest request and Thymeleaf带有 Rest 请求和 Thymeleaf 的 Spring Boot 语言环境
【发布时间】:2019-04-08 13:34:02
【问题描述】:

所以另一个应用程序将用户定向到我的服务器。重定向是 Post 请求 (application/json),JSON 中的值为 language。我应该如何在 RestController 中设置语言环境值?以便 Thymeleaf 可以呈现正确的文本。

使用LocaleContextHolder 设置语言环境并不能解决问题。

【问题讨论】:

    标签: spring-boot thymeleaf


    【解决方案1】:

    您应该遵循本指南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 将使用它的值来确定所需的语言环境和相应地改变它。

    【讨论】:

    • 是的,这个解决方案是从 URL 参数而不是 JSON 中获取语言。
    【解决方案2】:

    最终得到以下解决方案:

    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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 2018-12-01
      • 2015-08-03
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2017-12-27
      • 2017-04-11
      • 2019-10-25
      相关资源
      最近更新 更多