Как URL-маршрут на основе настроек UICulture? - PullRequest
5 голосов
/ 11 мая 2011

У меня есть проект ASP.NET 4 (не MVC).Мне нужно создать URL-маршрут на основе языка ввода пользователя.

Проект имеет только два языка "он" и "en".

Пользователь может войти на сайт, и если его культура установлена ​​на что-либопомимо he-IL, я хочу перенаправить его на website.com/en/ в противном случае на website.com/he/

Default.aspx должен оставаться той же страницей, которая использует функции глобализации, переводит значения на основе настроек культуры пользователяв браузере.

Как я могу это сделать?Что я должен делать, кроме написания маршрута в Global.asax и Как написать этот маршрут.

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Это не должно быть сложно. Да, 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. Чтобы сделать это для страниц на корневом уровне приложений (не вложенных в папки) Щелкните правой кнопкой мыши веб-сайт и выберите «Добавить папку ASP.Net». Выберите App_LocalResources. Щелкните правой кнопкой мыши папку App_LocalResources и выберите Добавить элемент. Выберите файл ресурса.

Важно, чтобы вы называли файл в соответствии с культурой, на которую вы планируете нацелиться

Вы можете создать первый файл 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

0 голосов
/ 19 мая 2011

Похоже, что вы пытаетесь сделать что-то непреднамеренное с помощью маршрутизации.

Если язык в URL ничего не делает и вам нужно, чтобы он отображался только в URL, то вы либо решаете проблему с помощью HTTP-модулей, переписывая URL-адреса вудалите его и добавьте обратно в сгенерированный html или просто сопоставьте один и тот же сайт с двумя виртуальными папками / en и / he в IIS и создайте простую страницу Default.aspx в / для перенаправления на соответствующую страницу в зависимости от культуры пользователя.

...