映射i18n翻译的url路径有哪些方法?
例如,假设我们谈论了以下网址(对于locale en):
www.foo.tld/car/manufacturer
在德语(de)中,这个网址将是
www.foo.tld/auto/hersteller
我对Controller RequestMapping的了解我可以使用severel值来映射这些url的方法,例如
@GetMapping(value={"/car/manufacturer/", "/auto/hersteller/"})
更多seo优化可能与路径中的当前区域设置相似,如
@GetMapping(value={"/en/car/manufacturer/", "/de/auto/hersteller/"})
...但我不想开始讨论什么是最好的uri seo明智。
如果仅使用少数语言环境/语言,这并不是很糟糕,但我想以某种方式使它变得动态。 目前我使用messages_xx.properties映射url路径部分以在我的应用程序中生成URL,如:
messages.properties
uri.car=car
uri.manufacturer=manufacturer
messages_de.properties
uri.car=auto
uri.manufacturer=hersteller
我已经使用它们来构建链接,以查看工作正常的用户区域设置。
我现在正在搜索的是一种优雅的,更少错误的修剪方式来映射我的控制器中的这些网址。如果我会更改密钥uri.car的值,并且在我的控制器中有一个静态RequestMapping,就像上面的例子一样,我也需要在那里更改它(如果我不忘记!)。 此外,如果我想添加对另一种语言的支持,我需要在所有控制器中搜索并检查是否需要添加另一个值映射。
有没有更聪明的方法如何在Spring控制器中映射i18n路径部分,理想情况下是否遵循请求语言环境并在messages_xx.properties的帮助下解析路径字符串? 或者是根据请求的语言环境提取路径部分的过滤器,并在内部仅使用一种语言来映射URL?
答案 0 :(得分:0)
假设你有一个EN message.properties 和一个带有以下属性的DE message.properties :
EN中的 url.car=/car/manufacturer/
url.car=/auto/hersteller/
在@Controller中,您可以轻松获取配置messageSource的属性,并使用它来获取属性:
注入已配置的MessageSource以允许Spring解析消息:
@Autowired
private MessageSource messageSource;
然后,您可以从 message.properties 文件中获取所有属性:
String url= messageSource.getMessage("url.car", put_here_your_locale);