【问题标题】:URL path for multi-language多语言的 URL 路径
【发布时间】:2016-01-06 08:36:51
【问题描述】:

我有现有的网络应用程序 (Spring MVC)。我需要为所有内容制作 i18n。

管理语言的要求是直接在 URL 中使用语言代码。所以对于现有的 URL:

http://example.com/product1

我需要创建 N 个 虚拟 URL,例如

http://example.com/EN/product1
http://example.com/FR/product1

我正在研究实现此目的的不同选项。我发现的一个肮脏的解决方案是使用拦截器,它将检查 URL 中的语言代码,删除语言代码,创建一个有效的 URL 并设置重定向。但是太丑了……

实现这一点的最佳方法是什么?

【问题讨论】:

  • 这个范围很广。并且将取决于很多事情......并且可能是由于意见,所以你可能会被关闭
  • 使用 url 重写机制,将新的 url 翻译成你在后端理解的东西(旧的 URL)。
  • 我不认为基于过滤器的出色解决方案如此难看,因为它将 i18n url 处理保持在一个位置,并且不会在应用程序的任何地方传播它。当然,它应该进行内部转发而不是重定向,并且还需要操作构造的 URL(来自 jsp)。
  • Core Spring 团队正在考虑这个问题以支持本机 - github.com/spring-projects/spring-framework/issues/25791

标签: spring spring-mvc internationalization


【解决方案1】:

有多种方法可以做到这一点,它们在一定程度上取决于您的应用程序规模。

我个人很快就能想到

  • 为 Spring mvc-dispatcher 分配多个 URL 映射:

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/EN/*</url-pattern>
        <url-pattern>/FR/*</url-pattern>
        <url-pattern>/GR/*</url-pattern>
    </servlet-mapping>
    
  • 如果您有空闲的 RAM,您可以简单地多次部署应用程序 - 为您想要支持的每种语言环境部署一次。这将允许在多台服务器上复制大量使用的语言,否则可以使用低容量的语言。

【讨论】:

  • 谢谢你,Jan。听起来很有趣,我会尝试一下。
【解决方案2】:

我相信实现这一点的所有可能方法都将是丑陋的。那只是因为该要求没有任何意义(您正在实现语言切换器反模式,不是吗?)。

对于我的咆哮,最简单的方法是使用“经典”Spring MessageSources 并在控制器中捕获语言环境。由于我不知道您是如何实现控制器的,您使用的是什么视图技术等等,假设:

@RequestMapping("/")
public class SomeController {

  @RequestMapping(value="{lang}/product1" method=RequestMethod.GET)
  public getProduct(@PathVariable String lang) {
    Locale locale = Locale.forLanguageTag(lang);
    LocaleContextHolder.setLocale(locale);

    return "product1";
  }
}

这将设置语言环境,视图将使用它们来解析消息(前提是它是国际化的)。

这个例子的唯一问题是,我还没有测试过它,我不太确定它是否会起作用 :) 你可能不得不重新组织参数,或者更糟糕的是使用一个控制器一切(这将是一个糟糕的解决方案)。

【讨论】:

  • 很遗憾,要修改的控制器太多了,而且这个解决方案在添加新路由时很难维护......无论如何,谢谢你的帮助
  • 将语言添加到Controller-CLASS RequestMapping并使用拦截器获取和设置语言环境会少一些负担。
  • @Yev 不要在您可以创建拦截器或 servlet 过滤器的所有控制器周围复制此代码。
猜你喜欢
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多