Frage

Ich brauche eine mehrsprachige Website zu tun, mit Urls wie

www.domain.com/en/home.aspx for english
www.domain.com/es/home.aspx for spanish

In der Vergangenheit habe ich zwei virtuelle Verzeichnisse in IIS einrichten und dann die URL in global.aspx erkennen und die Sprache entsprechend die URL ändern

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    Dim lang As String
    If HttpContext.Current.Request.Path.Contains("/en/") Then
        lang = "en"
    Else
        lang = "es"
    End If
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang)
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang)


End Sub

Die Lösung ist mehr wie ein Hack. Ich denke über die Verwendung von Routing für eine neue Website.

Kennen Sie einen besseren oder eleganteren Weg, es zu tun?

edit: Die Frage ist, über die URL-Behandlung, nicht über Ressourcen, etc.

.
War es hilfreich?

Lösung

Ich beschloss, mit dem neuen ASP.net Routing zu gehen.
Warum URLRewriting nicht? Denn ich will nicht die saubere URL ändern, dass Routing zu Ihnen gibt.

Hier ist der Code:

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

Dann LangRouteHandler.vb Klasse:

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

Schließlich verwende ich die default.aspx in der Wurzel auf den Standard lang in der Browser-Liste verwendet, zu umleiten.
Vielleicht kann dies mit dem route.Defaults getan werden, aber nicht in Visual Studio arbeiten (vielleicht funktioniert es auf dem Server)

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

Einige Quellen:
  * Mike Ormonds Blog
  * Chris Cavanagh Blog
  * MSDN

Andere Tipps

  1. Verwenden Sie urlrewriteing.net für asp.net Webformulare oder Routing mit mvc. Rewrite www.site.com/en/something.aspx zu url: page.aspx lang = en
    . UrlRewriteing.net kann einfach über regex in web.config konfiguriert werden. Sie können auch jetzt mit Webforms-Routing verwenden, ist es wahrscheinlich ähnlich ...
  2. mit Webforms, lassen Sie alle aspx Seite von Basepage Klasse erbt, die dann von Page-Klasse erbt.
    In Basepage Klasse überschreiben „InitializeCulture ()“ und setzen Kultur Info einzufädeln, wie Sie in Frage beschrieben.
    Es ist gut, dass in dieser Reihenfolge zu tun: 1. Check-URL für Lang param, 2. Check Cookie, 3. Satz Standard lang
  3. Bei statischem Inhalt (Text, url Bilder) auf den Seiten verwenden LocalResources oder Global aus, wenn Inhalte über Website wiederholt. Sie können Videocasts auf mit globalen / lokalen res beobachten. auf www.asp.net
  4. Bereiten db für mehrere Sprachen. Aber das ist eine andere Geschichte.

Ich verwende personnaly die Ressourcen-Dateien .

Sehr effizient, sehr einfach.

URLRewriting ist der Weg zu gehen.

Es ist ein guter Artikel auf MSDN über die besten Möglichkeiten, es zu tun.

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

Eine Art einer Tangente, aber ich würde wirklich tun dies mit unterschiedlichen Pfaden vermeiden, es sei denn die verschiedenen Sprachen getrennt voneinander vollständig zufrieden sind.

Für Google Rang, oder für Benutzer, URLs zu teilen (einer der großen Vorteile von ‚sauberen‘ URLs), möchten Sie die Adresse so konstant wie möglich bleiben.

Sie können Benutzer Spracheinstellungen von ihren Browser-Einstellungen finden:

CultureInfo.CurrentUICulture

Dann ist Ihre URL für Englisch oder Spanisch:

  

www.domain.com/products/newproduct

Die gleiche Adresse für jede Sprache, aber der Benutzer wird die Seite in der gewünschten Sprache.

Wir verwenden diese in Kanada Systemen in Englisch und Französisch zur gleichen Zeit zur Verfügung zu stellen.

Um dies zu tun, mit URL-Routing, auf dieses Thema beziehen:

Freundlich URLS mit URL Routing

Auch acht neu IIS 7.0 - URL Rewriting. Exzellente Artikel hier http: // lernen. iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Ich mochte diesen Teil Mit Welche Option sollten Sie?

  1. Wenn Sie eine neue ASP.NET-Anwendung entwickeln, die entweder ASP.NET MVC oder ASP.NET Dynamic Data-Technologien verwenden ASP.NET-Routing verwendet. Ihre Bewerbung wird von den nativen Unterstützung für saubere URLs profitieren, einschließlich der Erzeugung von sauberen URLs für die Links in Ihren Web-Seiten. Beachten Sie, dass ASP.NET-Routing nicht Standard-Web Forms-Anwendungen unterstützt noch, obwohl es Pläne gibt es in der Zukunft zu unterstützen.

  2. Wenn Sie bereits eine ältere ASP.NET Web-Anwendung haben und wollen nicht, es zu ändern, verwenden Sie die URL-Rewrite-Modul. Das URL-Rewrite-Modul ermöglicht es Ihnen, suchmaschinenfreundliche URLs in ein Format zu übersetzen, die Ihre Anwendung derzeit verwendet. Außerdem ermöglicht es Ihnen, Umadressierungsregel zu erstellen, die verwendet werden können, Suchmaschinen-Crawler URLs umleiten zu reinigen. http://learn.iis.net /page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Danke, Maulik.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top