Как использовать URL-адрес для установки текущей культуры в ASP.NET 2.0 Web App? - PullRequest
1 голос
/ 11 декабря 2008

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

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

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

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

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

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

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

Обновление

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

Ответы [ 4 ]

3 голосов
/ 11 декабря 2008

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

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

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

1 голос
/ 11 декабря 2008

Я делаю это на некоторых сайтах с маршрутизацией ASP.net.

Вот код:

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 декабря 2008

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

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

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

0 голосов
/ 15 декабря 2013

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

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

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

Удачи

...