Переключение существующего приложения Java Spring Boot на языковые ссылки - PullRequest
0 голосов
/ 24 октября 2019

У меня есть вопрос о моем приложении 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вызовы могут создавать проблемы, такие как бесконечные циклы перенаправления?)

Но я надеюсь,Существуют более элегантные и, конечно же, более быстрые способы решения такой ситуации. У кого-нибудь есть идеи, и они могут помочь с некоторыми подсказками?

...