Domanda

Ho bisogno di fare un sito web multilingue, con un url del tipo

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

In passato, vorrei impostare due directory virtuale in IIS e quindi rilevare l'URL globale.aspx e cambiare la lingua in base all'URL

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

La soluzione è più simile a un hack.Sto pensando di usare il Routing per un nuovo sito web.

Conoscete un modo più elegante per farlo?

edit:La domanda è la gestione degli URL, non sulle risorse, etc.

È stato utile?

Soluzione

Ho deciso di andare con il nuovo ASP.net Routing.
Perché non urlRewriting?Perché io non voglio cambiare il clean URL routing dà a voi.

Ecco il codice:

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

Quindi LangRouteHandler.vb classe:

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

Infine, io uso il default.aspx nella root reindirizzare il default lang utilizzato nel browser elenco.
Forse questo può essere fatto con il percorso.Impostazioni di default, ma non funzionano all'interno di Visual Studio (magari funziona nel 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

Alcune fonti:
* Mike Ormond blog
* Chris Cavanagh Blog
* MSDN

Altri suggerimenti

  1. Utilizzare urlrewriteing.net per asp.net webforms, o di routing con mvc.Riscrivere www.site.com/en/something.aspx l'url:pagina.aspx?lang=it.
    UrlRewriteing.net può essere facilmente configurato tramite regex nel web.config.È inoltre possibile utilizzare il routing con webforms ora, probabilmente simile...
  2. con moduli web, che ogni pagina aspx eredita da BasePage classe che eredita dalla classe Page.
    In BasePage classe override "InitializeCulture()" e impostare la cultura info per il thread, come è descritto nella domanda.
    È bene farlo in questo ordine:1.controllare url Lang param, 2.controllare cookie, 3.set default lang
  3. Per i contenuti statici (testo, foto url) su pagine LocalResources,Globale o se il contenuto è ripetuta in tutto il sito.È possibile guardare videocast sull'utilizzo globale/locale res.su www.asp.net
  4. Preparare db per più lingue.Ma questa è un'altra storia.

Ho personnaly uso il file di risorse.

Molto efficiente, molto semplice.

UrlRewriting è la strada da percorrere.

C'è un bell'articolo su MSDN sui modi migliori per farlo.

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

Una sorta di tangente, ma mi piacerebbe davvero evitare di fare questo con percorsi diversi, a meno che le diverse lingue sono completamente contenuti separate le une dalle altre.

Per la classifica di Google, o per gli utenti di condividere Url (uno dei grandi vantaggi di "pulito" Url), si desidera che l'indirizzo di rimanere il più possibile costante.

Si possono trovare utenti preferenze di lingua da loro impostazioni del browser:

CultureInfo.CurrentUICulture

Allora il vostro URL per l'inglese o spagnolo:

www.domain.com/products/newproduct

Stesso discorso per qualsiasi lingua, ma l'utente ottiene la pagina nella lingua scelta.

Usiamo questo in Canada per fornire sistemi in francese e in inglese allo stesso tempo.

Per fare questo con URL Routing, fare riferimento a questo post:

Friendly URL con l'URL Routing

Inoltre, guardare fuori nuovi IIS 7.0 - la Riscrittura degli URL.Ottimo articolo qui http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Mi è piaciuta questa parte Quale Opzione Si Dovrebbe Utilizzare?

  1. Se si sta sviluppando un nuovo ASP.NET applicazione Web che utilizza ASP.NET MVC o ASP.NET Dati Dinamici tecnologie, uso ASP.NET routing.L'applicazione del beneficio dal supporto nativo per i clean Url, compresa la generazione di pulire la Url per il link nelle tue pagine Web.Nota che ASP.NET routing non supporta lo standard di applicazioni Web Form di sicurezza, anche se ci sono piani per il futuro.

  2. Se si dispone già di una eredità ASP.NET applicazione Web e non la voglio cambiare, utilizzare l'URL-rewrite module.La URL-rewrite module consente di tradurre search-engine friendly Url in un formato che l'applicazione utilizza attualmente.Inoltre, permette di creare delle regole di reindirizzamento che può essere utilizzato per reindirizzare i motori di ricerca crawler per pulire gli Url.http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Grazie, Maulik.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top