如何根据UICulture设置来路由URL?

时间:2011-05-11 14:16:58

标签: asp.net routing globalization

我有ASP.NET 4项目(不是MVC)。我需要根据用户输入语言创建url路由。

Project只有两种语言“he”和“en”。

用户可以进入该网站,如果他的文化被设置为除了他之外的任何东西,我想将他重新路由到website.com/en/,否则转到website.com/he /

Default.aspx应保持同一页面,该页面使用全球化功能根据用户在浏览器中的文化设置翻译值。

我该怎么做?除了在Global.asax中编写路由以及如何编写此路由之外,我该怎么做。

2 个答案:

答案 0 :(得分:1)

这不应该很难。是的,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);
    }

这确定了路线。

您的描述听起来更像是全球化问题,而不是网址路由问题。问题的网址部分对用户来说是装饰性的,但不会在我的视图中攻击底层问题。 ASP.Net为全球化提供便利。例如,您可以使用LocalResources。为您的应用程序根级别的页面执行此操作(不嵌套在文件夹中) 右键单击该网站,然后选择“添加ASP.Net文件夹” 选择App_LocalResources。 右键单击App_LocalResources文件夹,然后选择Add Item 选择资源文件。

根据您计划定位的文化命名文件非常重要

您可以将第一个文件创建为Contact.aspx.resx作为默认资源文件(也许是英文?)

ASP.Net将尝试找到与资源文件匹配的最具体的文化,如果没有提供更具体的文件,将采用默认文件。

命名约定遵循PageName.aspx.languageID-cultureId.resx

你可以拥有Contact.aspx.he.resx

例如,在标签控件中,您可以像这样设置

<asp:Label ID="lbContactMessage" runat="server" Text="something" meta:resourcekey="yourmatchingkeyfromresourcefile"></asp:Label>

有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/c6zyy3s9.aspx

答案 1 :(得分:0)

好像你正在尝试做一些无意识的路由。

如果URL中的语言什么也没做,你需要它只出现在URL中,那么你要么用HTTP模块重写URL来删除它并添加回生成的html,或者只是将同一个站点映射到两个虚拟文件夹/ en和/他在IIS中,在/上创建一个简单的Default.aspx页面,根据用户文化重定向到适当的页面。