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