将现有的Java Spring Boot应用程序切换到语言环境链接

时间:2019-10-24 07:59:25

标签: java spring spring-boot locale

我对我的Spring Boot应用程序有疑问。

当前应用处于这种情况:

  • 它在域(例如www.mypage.com/、www.mypage.com/profile、www.mypage.com/imprint等)上“正常”运行

  • 它已部署到Tomcat中并在其中运行(作为WAR)

  • 页面的语言可以是英语或德语,具体取决于浏览器设置(标准Spring区域设置解析器)。其他语言将随之而来,并且也必须得到支持。

  • 胸腺用作模板引擎

  • Spring(MVC)请求映射(例如@RequestMapping("/imprint"))请求页面

  • 应用程序提供了API(... / api / v1 /...)

  • 该应用程序具有可以通过Spring安全性登录的用户

现在是时候提出更改请求了,应该进行以下更改:

  • 每个用户都可以在其用户设置中设置所需的语言,以便以该语言为该用户显示应用程序(已在数据库中为每个用户设置了该语言,稍后出现在过滤器中)

  • URL应包含区域设置,因此我们具有www.mypage.com/en/imprint和www.mypage.com/de/imprint而不是www.mypage.com/imprint,并且应显示在语言环境中

  • 页面上的链接也应包含语言环境(因此,指向/ home的链接应为www.mypage.com/en/imprint和www.mypage.com上的www.mypage.com/en/home / de / home,网址为www.mypage.com/de/imprint

  • 图像标记作为链接应添加到页面以更改语言

  • 不带区域设置的URL应重定向到具有区域设置的同一页面。使用的语言环境取决于: 一种。没有用户登录=>使用浏览器语言 b。用户已登录=>使用了用户设置的区域设置

到目前为止,一切都很好,但是现在我正在考虑为此的最佳解决方案。我开始添加

@Controller
@RequestMapping({"/*", "/en/*", "/de/*"})
我的每个控制器中的

都支持两种语言的请求(并希望可以用一个条目替换{“ / ”,“ / en / ”,“ / de / *”}稍后在application.properties中)。

我正在寻找一个不错的解决方案的主要问题是:

  • 还有很多链接需要处理(实际上页面上的所有href都必须添加${#locale}

  • 有一些AJAX链接实际上是独立于语言的,仅用于Javascript / JQuery中,还必须根据语言环境进行调整或以其他方式处理

  • API调用也不取决于语言,并且必须保持不变而没有语言环境

现在我的第一个想法是

  • 为每个用户动态设置上下文路径(可能吗?)

  • 通过过滤器重写网址(ajax调用可能会产生无尽的重定向循环之类的问题?)

但是我希望可以有一些更优雅,当然更快的方法来解决这样的设置。有谁有主意,可以帮我一些提示吗?

0 个答案:

没有答案