Der beste Weg, URLs in einer mehrsprachigen Website in ASP.net zu handhaben
-
01-07-2019 - |
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.
.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
- 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 ... - 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 - 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
- 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.
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:
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?
-
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.
-
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.