Как URL-маршрут на основе настроек UICulture?
У меня есть проект ASP.NET 4 (не MVC). Мне нужно создать URL-маршрут на основе языка ввода пользователя.
Проект имеет только два языка "он" и "en".
Пользователь может войти на сайт, и если его культура настроена на что-либо, кроме he-IL, я хочу перенаправить его на website.com/en/ в противном случае на website.com/he/
Default.aspx должен оставаться той же страницей, которая использует функции глобализации для перевода значений на основе настроек культуры пользователя в браузере.
Как я могу это сделать? Что я должен делать, кроме написания маршрута в Global.asax и Как написать этот маршрут.
2 ответа
Похоже, вы пытаетесь сделать что-то непреднамеренное с маршрутизацией.
Если язык в URL ничего не делает и вам нужно, чтобы он отображался только в URL, то вы либо решаете проблему с помощью HTTP-модулей, переписывая URL-адреса, чтобы удалить его и добавляете обратно в сгенерированный html, либо просто сопоставляете один и тот же сайт с двумя виртуальными папками /en и / он в IIS и сделать простую страницу Default.aspx в /, чтобы перенаправить на соответствующую страницу, основанную на пользовательской культуре.
Это не должно быть сложно. Да, 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