根据所选语言更改控制器和操作名称
本文关键字:控制器 操作 语言 | 更新日期: 2023-09-27 18:30:51
我有一个控制器,名称为"Hem",操作名称为"Om"。我设置了瑞典语的默认语言。所以路线将在瑞典网站上,它是
/sv/Hem/Om
现在我想通过在语言部分中单击英语将语言更改为"en"。所以路由会像这样自动设置:
/en/Home/About
但是功能应该是/sv/Hem/Om
的工作,并且地址栏中应显示为/en/Home/About
专家,请您帮助我。
这样做。
routes.MapRoute(
"English route",
"en/{controller}/{action}/{id}"
new { controller = "Home", action = "Index", language = "en" },
);
routes.MapRoute(
"FrenchHome",
"/sv/Hem/Om",
new { controller = "Home", action = "Index", language = "fr" }
);
或者你可以这样做:
public class GenericRoutes
{
public string Controller {get;set;}
public string Action {get;set;}
public string Url{get;set;}
public string RouteName{get;set;}
}
public List<GenericRoutes> Routes = new List<GenericRoutes>();
Routes.Add(new GenericRoutes{Cotroller="bl",Action="cl",Url="bl/cl"})
for(int i=0;i<Routes.count();i++)
{
routes.MapRoute(
Routes[i].RouteName,
Routes[i].Url,
new { controller = Routes[i].Controller, action = Routes[i].Action },
);
}
我个人会避免使用多语言网站的方法。是的,从技术上讲,可以按照您的要求进行操作,但大多数网站不会以这种方式处理多种语言。ASP.net 长期以来一直有能力本地化页面,我建议使用这种方法。
本地化涉及将资源键放在视图模板中,而不是对字符串进行硬编码。然后,您将设置线程的区域性,通常是通过 http 接受语言标头,站点将为该区域性选择适当的字符串以放入页面视图中。然后,您唯一需要维护的是每种语言的字符串集。
此方法的好处是只需编写一次视图。当您有 2 甚至 3 组视图时,您冒着网站这些版本出现分歧的风险。我个人已经看到这种情况发生,这是一个很难摆脱的问题。此外,您还可以将"语言问题"与网站正在解决的任何问题分开,这意味着您的域不会充满样板代码以保持花哨的语言切换技术,而不是使用平台中包含的解决方案。
如果您有兴趣以正确的方式在.net中制作多语言网站,我建议您学习本地化和全球化,这是一个很好的起点:)
初学者教程
Scott Hanselman 教程 - MVC 3 + Jquery 版本
首先,我不是专家。但是为了将用户路由到不同的控制器,您可以实现自定义路由并动态配置路由。
要了解路由的工作原理,您可以考虑查看此链接。
这是一个快速的技巧:
这是RegisterRoutes
注册所有路由以供应用程序
public static void RegisterRoutes(RouteCollection routes)
{}
现在从 URL 获取当前语言(获取 URL 的第一段(在您的例子中为 en))
查询数据源以获取当前语言
使用 foreach 从数据库或任何其他来源在此处添加您的路由。
.
foreach (var route in RouteValues)
{
route.UniqueName,
routes.MapRoute("prefix/{controller}/{action}/{id},
new { controller = route.Controller , action = route.Action , id = route.Id });
}