Spring MVC: перенаправить пользователя в соответствии с языком браузера
В Spring MVC 4, как я могу перенаправить пользователя на локализованный URL в соответствии с языком браузера (заголовок HTTP "Accept-Language")?
Я хотел бы, чтобы, если пользователь пытается получить доступ к URL example.com/some/path
он будет перенаправлен на de.example.com/some/path
если в браузере используется язык "DE" (т. е. заголовок "Accept-Language" установлен на "de").
Точно так же, если пользователь обращается к de.example.com/some/path
и его язык EN, он должен быть перенаправлен на example.com/some/path
,
Какой самый простой способ получить это?
2 ответа
Что-то вроде этого в вашем контроллере:
@RequestMapping("/path")
public String someMapping(Locale locale) {
if ("de".equals(locale.getLanguage())) {
return "redirect:http://de.example.com/some/path";
}
}
Обратите внимание, что коды языков написаны в нижнем регистре.
Создайте HandlerInterceptor (расширение HandlerInterceptorAdapter) и получите заголовок Accept-Language из запроса. Вам необходимо зарегистрировать ваш перехватчик в вашей конфигурации контекста веб-приложения.
Вы также хотите знать, на каком домене работает ваш сервер. См. Как получить URL домена и имя приложения?
Вы должны разрешить пользователю менять свою локаль (он может захотеть, чтобы ваш сайт был на немецком языке, даже если для браузера установлено значение en_US). Так что в этом случае вам нужно установить cookie. Смотрите также LocaleChangeInterceptor.