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.

Другие вопросы по тегам