Как я могу использовать URL для установки текущей культуры в ASP.NET 2.0 Web App?

Я ищу способы включить сайт в основном что-то вроде:

http://mysite.com/ ru-US / index.aspx`

Где "en-US" может варьироваться в зависимости от культуры ..

Эта культура в URL-адресе будет в основном устанавливать CurrentUICultureдля приложения.

По сути, в настоящее время у нас есть страница, на которой пользователь явно щелкает ее, но некоторые отдают предпочтение этому, и это вызывает некоторые проблемы.

Я знаю, что такого рода вещи легко сделать в ASP.NET MVC, но как насчет тех из нас, кто все еще работает в 2.0? Можете ли вы, ребята, из всей вашей мудрости предложить какие-либо предложения / указатели / НИЧЕГО, что может начать меня? Это ново для меня :)

Я уверен, что должен быть какой-то способ получить запрос и установить / отскочить в зависимости от ситуации .. HttpModuleможет быть?

Обновить

Просто подумал ... Может быть, лучше всего создать VirtDirs в IIS, а затем извлечь соответствующую часть из запрашиваемого URL и установить культуру InitializeCulture?

AFAIK, проблема с VirtDirs заключается в том, что они не разделяют объекты Session и их сложно протестировать.
Eduardo Molteni 12.12.2008 13:06:25
Это только в том случае, если VirtDirs настроены на запуск в своем собственном пуле приложений - если они все находятся в одном пуле, сессия должна быть в порядке.
Rob Cooper 12.12.2008 18:48:01
4 ОТВЕТА
РЕШЕНИЕ

О сохранении выбора в куки не может быть и речи? Очень мило с вашей стороны предоставить пользователям выбор, но почему бы просто не использовать настройки клиента / веб-браузера по умолчанию для пользователей?

Если они добавят страницу в закладки и потеряли файл cookie, вы можете вернуться к настройкам по умолчанию, а если это культура, которую вы не поддерживаете, то перейдите к en-US.

Если вы хотите сохранить свое решение, вы можете использовать механизм переписывания. Я использовал http://www.managedfusion.com/products/url-rewriter/ в прошлом. Для получения списка двигателей см. Http://en.wikipedia.org/wiki/Rewrite_engine#IIS.

3
11.12.2008 12:45:11

Вы можете легко использовать функцию маршрутизации, разработанную для MVC, с веб-формами. Этот ТАК вопрос касается того, как:

ASP.NET маршрутизация с веб-формами

Если вы не можете использовать платформу 3.5, существует множество модулей перезаписи URL. У меня нет опыта работы с кем-либо, чтобы иметь возможность давать рекомендации.

1
23.05.2017 12:01:17

Я делаю это на некоторых сайтах с ASP.net Routing.

Вот код:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Code that runs on application startup
    RegisterRoutes(RouteTable.Routes)
End Sub


Public Sub RegisterRoutes(ByVal routes As RouteCollection)
    Dim reportRoute As Route
    Dim DefaultLang As String = "es"

    reportRoute = New Route("{lang}/{page}", New LangRouteHandler)
    '* if you want, you can contrain the values
    'reportRoute.Constraints = New RouteValueDictionary(New With {.lang = "[a-z]{2}"})
    reportRoute.Defaults = New RouteValueDictionary(New With {.lang = DefaultLang, .page = "home"})

    routes.Add(reportRoute)
End Sub

Затем класс LangRouteHandler.vb:

Public Class LangRouteHandler
     Implements IRouteHandler

  Public Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) As System.Web.IHttpHandler _
      Implements System.Web.Routing.IRouteHandler.GetHttpHandler

    'Fill the context with the route data, just in case some page needs it
    For Each value In requestContext.RouteData.Values
        HttpContext.Current.Items(value.Key) = value.Value
    Next

    Dim VirtualPath As String
    VirtualPath = "~/" + requestContext.RouteData.Values("page") + ".aspx"

    Dim redirectPage As IHttpHandler
    redirectPage = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, GetType(Page))
    Return redirectPage

  End Function
End Class

Наконец, я использую default.aspx в корневом каталоге для перенаправления на язык по умолчанию, используемый в списке браузеров.
Может быть, это может быть сделано с помощью route. По умолчанию, но не работает внутри Visual Studio (возможно, это работает на сервере)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim DefaultLang As String = "es"
    Dim SupportedLangs As String() = {"en", "es"}
    Dim BrowserLang As String = Mid(Request.UserLanguages(0).ToString(), 1, 2).ToLower
    If SupportedLangs.Contains(BrowserLang) Then DefaultLang = BrowserLang

    Response.Redirect(DefaultLang + "/")
End Sub

Некоторые источники:
* блог Майка Ормонда
* блог Криса Кавана
* MSDN

1
11.12.2008 11:18:09

Просто попробуйте добавить этот параметр

http://yoursite/yourPage.aspx?lang=en-US

Если вы использовали файлы ресурсов, он будет работать автоматически.

Удачи

0
15.12.2013 18:01:23