У меня есть вопрос о моем приложении Spring Boot.
В данный момент приложение находится в ситуации:
оно работает «нормально» в домене(например, www.mypage.com/, www.mypage.com/profile, www.mypage.com/imprint, ...)
он развернут и запущен в Tomcat(как WAR)
язык страницы может быть английским или немецким, в зависимости от настроек браузера (стандартный преобразователь локали Spring). Далее будут следовать другие языки, которые также должны поддерживаться.
Thymeleaf используется в качестве механизма шаблонов
страницы запрашиваются Spring (MVC)Отображение запросов (например, @RequestMapping("/imprint")
)
приложение предлагает API (... / api / v1 /...)
в приложении есть пользователи, которые могут войти с помощью Spring security
Теперь пришло время для запроса на изменение, и должны быть внесены следующие изменения:
каждыйпользователь может установить желаемый язык в своих пользовательских настройках, чтобы приложение отображалось на этом языке для этого пользователя (настройка в базе данных для каждого пользователя завершена, проблема возникает в фильтрах позже)
URL-адреса должны содержать локаль, поэтому мы имеем www.mypage.com/en/imprint и www.mypage.com/de/imprint вместо www.mypage.com/imprint и, конечно, должны отображаться в локалях langauge
ссылки на страницах также должны содержать язык (таким образом,nk to / home должен быть www.mypage.com/en/home на www.mypage.com/en/imprint и www.mypage.com/de/home на www.mypage.com/de/imprint
Флаги изображений в качестве ссылки должны быть добавлены на страницы для изменения языка
URL-адреса без языкового стандарта будут перенаправлены на ту же страницу с языковым стандартом. Используемая локаль определяется: a. Ни один пользователь не вошел в систему => Используется язык браузера b. Пользователь вошел в систему => Используется локаль настроек пользователя
Пока все хорошо, но сейчас я думаю о лучшем решении для этого. Я начал добавлять
@Controller
@RequestMapping({"/*", "/en/*", "/de/*"})
в каждый из моих контроллеров для поддержки запросов на два языка (и, надеюсь, смог заменить {"/ ", "/ en / ", "/de / * "} записью в application.properties позже).
Основные проблемы, для которых я сейчас ищу хорошее решение:
Есть много ссылоктоже нужно обрабатывать (на самом деле все hrefs на странице должны быть добавлены ${#locale}
)
есть ссылки AJAX, которые на самом деле не зависят от языка и просто используются в Javascript / JQuery, которые также имеютбыть адаптированными к локали или обработаны иначе
Вызов API также не зависит от языка и должен оставаться без локали
Теперь мойПервыми идеями были
установка контекстного пути для каждого пользователя на лету (возможно вообще?)
перезапись URL с помощью фильтров (ajaxвызовы могут создавать проблемы, такие как бесконечные циклы перенаправления?)
Но я надеюсь,Существуют более элегантные и, конечно же, более быстрые способы решения такой ситуации. У кого-нибудь есть идеи, и они могут помочь с некоторыми подсказками?