Локаль Springboot с запросом Rest и Thymeleaf

#spring-boot #thymeleaf

#spring-boot #thymeleaf

Вопрос:

Итак, другое приложение направляет пользователя на мой сервер. Перенаправлением является Post request ( application/json ) со значением language в JSON. Как мне установить значение локали в RestController? Чтобы Thymeleaf мог отображать правильный текст.

Установка локали с LocaleContextHolder помощью не помогает.

Ответ №1:

Вы должны следовать этому руководству здесь, поскольку интернационализация является обычной задачей в spring-boot. На случай, если вам нужен короткий ответ:

Сначала настройте LocaleResolver в своем Application.java:

 @Bean(name = "localeResolver")
public LocaleResolver localeResolver() {
  SessionLocaleResolver slr = new SessionLocaleResolver();
  slr.setDefaultLocale(new Locale("tr", "TR"));
  return slr;
}
  

Затем снова в вашем приложении.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());
}
  

Теперь, если вы отправите параметр запроса с именем «lang» с вашим запросом POST, spring будет использовать его значение для определения желаемой локали и соответствующим образом ее изменить.

Комментарии:

1. Да, в этом решении язык берется из параметра 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);
    }

}