【问题标题】:Spring MVC RequestMapping with i18n path parts带有 i18n 路径部分的 Spring MVC RequestMapping
【发布时间】:2018-01-03 13:22:05
【问题描述】:

映射 i18n 翻译的 url 路径的方法是什么?

例如,假设我们谈论以下 url (for locale en):

www.foo.tld/car/manufacturer

在德语 (de) 中,此网址为

www.foo.tld/auto/hersteller

我对 Controller RequestMapping 的了解我可以使用严格的值将这些 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

我已经在使用它们来构建符合用户区域设置的链接,效果很好。

我现在正在寻找的是一种优雅的、更少错误的修剪方式来将这些 url 映射到我的控制器中。例如,如果我要更改键 uri.car 的值,并且在我的控制器中有一个静态 RequestMapping,就像上面的示例一样,我还需要在那里更改它(如果我没有忘记的话!)。 此外,如果我想添加对另一种语言的支持,我需要在所有控制器中搜索并检查是否需要添加另一个值映射。

是否有一种更智能的方法可以在 Spring 控制器中映射 i18n 路径部分,理想情况下尊重请求区域设置并在 messages_xx.properties 的帮助下解析路径字符串? 或者是一种过滤器,可以根据请求的语言环境提取路径部分并在内部仅使用一种语言来映射 url?

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案1】:

    假设您有一个 EN message.properties 和一个 DE message.properties,具有以下属性:

    url.car=/car/manufacturer/ 在 EN 中

    url.car=/auto/hersteller/ 在 DE 中

    在您的@Controller 中,您可以轻松获取配置您的 messageSource 并使用它来获取属性的属性:

    注入您配置的 MessageSource 以允许 Spring 解析消息:

     @Autowired
     private MessageSource messageSource;
    

    然后您可以从 message.properties 文件中获取所有属性:

    String url= messageSource.getMessage("url.car", put_here_your_locale);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-20
      • 2011-12-12
      • 2015-06-14
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多