是否可以在运行时根据语言进行多个RouteCollections和切换?

时间:2013-04-03 13:42:22

标签: asp.net-mvc globalization

我们在RegisterRoutes()中有一个相当大的RouteCollection设置,我们需要支持俄语网址。这意味着我们的大多数MapRoute()网址都需要是俄语。

不是复制受影响的MapRoute()调用并将url转换为俄语,我想知道是否可以有多个路径集合并选择MVC将在运行时基于子域使用哪个;例如; “RU”。?

如果我们添加越来越多的语言而没有多个RouteCollections,我们将复制越来越多的路由,这将导致维护问题和低效路由。

顺便说一下,所有子域都会导致相同的asp.net mvc应用程序,我们使用子域元素来全局化资源。

以下是一个示例路线及其俄语翻译:

routes.MapRoute(
   "Content", // Route name
   "Page/{id}", // URL with parameters
   new
   {
      controller = "Content",
      action = "Show",
      id = String.Empty
   } // Parameter defaults
);

俄语:

routes.MapRoute(
   "Content", // Route name
   "страница/{id}", // URL with parameters
   new
   {
      controller = "Content",
      action = "Show",
      id = String.Empty
   } // Parameter defaults
);

有许多受影响的路线,每种受支持的语言都会重复这些路线。目前我认为子域上的路由约束是最好的方法,但最好为每种语言分别设置路由集合,为不受影响的路由分配路由。

1 个答案:

答案 0 :(得分:1)

我们使用类似的东西:

RouteTable.Routes.MapPageRoute("Language_InfoRoute",
  "{language_code}/{company}/{topic}", 
  "~/content.aspx", true, null, 
  new RouteValueDictionary { { "language_code", "de|fr|en" }, 
  {"company",   "unternehmung|company|entreprise|azienda" } });

您可以将它作为占位符(我的示例中的公司),而不是将Page或страница作为单独的路径。您可以添加语言代码或仅使用页面的不同版本来检测语言。