Asp.net mvc ASP.NET MVC中支持多语言路由的建议
这里有一些关于MVC中多语言应用程序的问题,但大多数问题都是通过提供有关实现资源文件的详细信息,然后在视图或控制器中引用这些资源字符串来回答的。在检测用户的区域设置时,这对我来说很好 我现在想做的是支持本地化路由。例如,我们每个网站都有一些核心页面,比如联系我们页面 我想要实现的是: 1) 像这样的路线 /en/联系我们(英语路线) /sl/Kontakt(斯洛文尼亚路线) 2) 这两条路径都必须指向同一控制器和操作,并且不会本地化(它们将使用英语,因为它们是站点核心实现的一部分,因此对用户隐藏): 我的想法是让控制器“反馈”和动作“反馈” 3) FeedbackForm将是一个视图或视图用户控件(它将使用对RESX文件中字符串的引用,正如我前面所说的,我已经设置好了,并且可以正常工作) 4) 我有一个SetCulture属性附加到BaseController,它是我所有控制器的父级,这个属性实际上继承了FilterAttribute并实现了IActionFilter——但是它做什么呢?嗯,它检测浏览器区域性,并在会话和cookie中设置该区域性(永久)-此功能也运行良好。它已经影响视图和视图用户控件,但此时不影响管线 5) 在页面顶部,我将给用户一个选择语言(sl | en)的机会。该决定必须优先于第4条)。如果用户到达我们的网站,并被检测为斯洛文尼亚人,他们决定切换到英语,这一决定必须成为永久性的。从现在起,SetCulture属性必须以某种方式释放其影响 6) 切换后,如果用户位于/sl/Kontakt,则应立即更新路由 应立即将其重定向至/en/与我们联系 这些是我想要的设计的约束条件。简单地说,我不希望在显示本地化内容时使用英语路线,反之亦然 欢迎提出建议 编辑:Asp.net mvc ASP.NET MVC中支持多语言路由的建议,asp.net-mvc,Asp.net Mvc,这里有一些关于MVC中多语言应用程序的问题,但大多数问题都是通过提供有关实现资源文件的详细信息,然后在视图或控制器中引用这些资源字符串来回答的。在检测用户的区域设置时,这对我来说很好 我现在想做的是支持本地化路由。例如,我们每个网站都有一些核心页面,比如联系我们页面 我想要实现的是: 1) 像这样的路线 /en/联系我们(英语路线) /sl/Kontakt(斯洛文尼亚路线) 2) 这两条路径都必须指向同一控制器和操作,并且不会本地化(它们将使用英语,因为它们是站点核心实现的一部分,因此对用户隐藏
这里有一些信息和指导,但我仍然希望听到更多关于这个问题的想法或实践。为什么不创建所需的操作名称,并简单地重定向到单个实际实现的操作
public ActionResult Kontakt() {
return RedirectToAction("Contact");
}
public ActionResult Contact() {
return View();
}
这个怎么样?
创建自定义翻译路由类。
预览:
对于我的站点,URL模式应该是
大体上是这样的:
/{culture}/{site}
假设有一个叫做FAQ的页面,
它有不同的版本
语言。下面是一些示例URL
对于这些页面:
/en US/FAQ/de/FAQ/de CH/FAQ
我刚刚使用了一个简单的“全球化资源”解决方案,如下所示:
routes.MapRoute(
"nameroute", // Route name
App_GlobalResources.Geral.Route_nameroute+"/{Obj}", // URL with parameters
new { controller = "Index", action = "Details", Obj = UrlParameter.Optional } // Parameter defaults
);
但是,您可以根据需要进行自定义。不行,那样会把我的控制器类搞得一团糟。想想看,如果你决定支持德语或意大利语,我们的控制器类将变成什么?这也需要对控制器类进行维护,但我想将更改仅限于global.asax.cs和资源文件。您只需要转换操作和控制器吗?我认为如果您需要将映射到enum的路由值(类似于www.catalog.com/products/listbytoken/manufacturer中的manufacturer)转换为更适合我的情况,这将是一件痛苦的事情,因此我确认这一点。