我有MVC4项目(不是ASP.NET )。我需要创建基于用户输入语言的url路由。
Project只有两种语言"he“和"en”。
用户可以进入站点,如果他的文化设置为he-IL以外的任何内容,我想将他重新路由到website.com/en/否则转到website.com/he/
Default.aspx应该保留使用全球化功能的同一页面,根据浏览器中用户的文化设置转换值。
我该怎么做呢?除了用Global.asax编写路由之外,我还应该做什么以及如何编写此路由。
发布于 2011-05-19 14:12:47
似乎您正在尝试对路由做一些意想不到的事情。
如果URL中的语言什么也不做,而您需要让它只出现在URL中,那么您可以使用HTTP模块重写URL来删除它并将其添加回生成的html,或者简单地将同一站点映射到IIS中的两个虚拟文件夹/en和/he,并在/处创建一个简单的Default.aspx页面,根据用户文化重定向到适当的页面。
发布于 2011-05-17 03:21:21
这应该不难。是的,Global.ascx是最好的起点。
首先绘制路线图,
protected void RegisterRoutes(RouteCollection routes)
{
//Contact route for EN culture
routes.MapPageRoute(
"contactRouteEN",
"en/contact",
"~/Contact.aspx"
);
routes.MapPageRoute(
"contactRouteHE",
"he/contact",
"~/Contact.aspx"
);
}
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}这就建立了路线。
你描述的问题听起来更像是全球化问题,而不是url路由问题。问题的url部分对用户来说是粉饰的,但在我看来不会攻击潜在的问题。ASP.Net为全球化提供了便利。例如,您可以使用LocalResources。要对应用程序根级别(而不是嵌套在文件夹中)上的页面执行此操作,请右键单击该网站,然后选择Add ASP.Net Folder,选择App_LocalResources。右键单击App_LocalResources文件夹,然后选择“添加项目”,然后选择“资源文件”。
根据计划作为目标的区域性来命名文件非常重要
您可以将第一个Contact.aspx.resx文件创建为默认的资源文件(也许是英语?)
ASP.Net将尝试查找要与资源文件匹配的最具体的区域性,如果未提供更具体的区域性,则将求助于默认区域性。
命名约定遵循PageName.aspx.languageID-cultureId.resx
你可以让Contact.aspx.he.resx
例如,在label控件中,您可以这样设置它
<asp:Label ID="lbContactMessage" runat="server" Text="something" meta:resourcekey="yourmatchingkeyfromresourcefile"></asp:Label>有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/c6zyy3s9.aspx
https://stackoverflow.com/questions/5965725
复制相似问题