Лучший способ обработать URL в многоязычном сайте в ASP.net

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

7
задан Eduardo Molteni 17 September 2008 в 13:05
поделиться

7 ответов

Я решил пойти с новой Маршрутизацией ASP.net.
Почему не urlRewriting? Поскольку я не хочу изменять чистый URL, который маршрутизация дает Вам.

Вот код:

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 в корне для перенаправления к значению по умолчанию Ленга, используемого в списке браузера.
Возможно, это может быть сделано с маршрутом. Значения по умолчанию, но не работают в 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

Некоторые источники:
* блог Mike Ormond
* блог Chris Cavanagh
* MSDN

7
ответ дан 7 December 2019 в 05:36
поделиться

Я personnaly использую файлы ресурсов.

Очень эффективный, очень простой.

0
ответ дан 7 December 2019 в 05:36
поделиться
  1. Используйте urlrewriteing.net для веб-форм asp.net, или направляющий с mvc. Перепишите www.site.com/en/something.aspx к URL: page.aspx? lang=en.
    UrlRewriteing.net может быть легко настроен через regex в web.config. Можно также использовать маршрутизацию с веб-формами теперь, это, вероятно, подобно...
  2. с веб-формами позвольте каждой aspx странице, наследовался классу BasePage, который затем наследовался классу Page.
    В переопределении класса BasePage "InitializeCulture ()" и информация о культуре набора для поточной обработки, как Вы описал рассматриваемый.
    Хорошо сделать это в этом порядке: 1. проверьте URL на параметрический усилитель Lang, 2. проверьте cookie, 3. значение по умолчанию набора Ленг
  3. Для статического содержания (текст, URL рисунков) на страницах используют LocalResources, или Глобальный, если содержание повторяется через сайт. Можно наблюдать видеокаст при использовании глобального/локального res. на www.asp.net
  4. Подготовьте дб к нескольким языкам. Но это - другая история.
1
ответ дан 7 December 2019 в 05:36
поделиться

UrlRewriting является способом пойти.

Существует хорошая статья о MSDN на лучших способах сделать это.

http://msdn.microsoft.com/en-us/library/ms972974.aspx

0
ответ дан 7 December 2019 в 05:36
поделиться

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

Для разряда Google, или для пользователей, совместно использующих URL (одно из больших преимуществ 'чистых' URL), Вы хотите, чтобы адрес остался максимально постоянным.

Можно найти предпочтения языка пользователей от их настроек браузера:

CultureInfo.CurrentUICulture

Затем Ваш URL для английского или испанского языка:

www.domain.com/products/newproduct

Тот же адрес для любого языка, но пользователь получает страницу на их выбранном языке.

Мы используем это в Канаде для обеспечения систем на английском и французском языке одновременно.

0
ответ дан 7 December 2019 в 05:36
поделиться

Кроме того, предостерегитесь новый IIS 7.0 - Перезапись URL. Превосходная статья здесь http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Мне понравилась эта часть, Какую Опцию необходимо Использовать?

  1. При разработке нового веб-приложения ASP.NET, которое использует или ASP.NET MVC или ASP.NET Динамические Технологии передачи данных, используйте маршрутизацию ASP.NET. Ваше приложение извлечет выгоду из собственной поддержки чистых URL, включая поколение чистых URL для ссылок в Ваших Веб-страницах. Обратите внимание, что маршрутизация ASP.NET еще не поддерживает стандартные приложения Веб-форм, хотя существуют планы поддерживать ее в будущем.

  2. Если Вы уже имеете веб-приложение ASP.NET прежней версии и не хотите изменять его, используйте URL - переписывают модуль. URL - переписывает модуль, позволяет Вам переводить благоприятные для поисковой системы URL в формат, который в настоящее время использует Ваше приложение. Кроме того, это позволяет Вам создавать правила перенаправления, которые могут использоваться для перенаправления поисковых роботов поисковой системы для очистки URL. http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Спасибо, Maulik.

0
ответ дан 7 December 2019 в 05:36
поделиться

Чтобы сделать это с Маршрутизацией URL, обратитесь к этому сообщению:

Дружественные URL с маршрутизацией URL

0
ответ дан 7 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: