Pregunta

Necesito hacer un sitio web multilingüe, con urls como

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

En el pasado, me gustaría configurar dos directorios virtuales en IIS y, a continuación detectar la dirección URL en el mundial.aspx y cambiar el idioma de acuerdo a la 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 solución es más como un hack.Estoy pensando en usar Enrutamiento para un nuevo sitio web.

¿Conoce usted a un mejor o de forma más elegante de hacerlo?

editar:La pregunta es sobre el manejo de URL, no se trata de recursos, etc.

¿Fue útil?

Solución

Me decidí a ir con el nuevo ASP.net de Enrutamiento.
¿Por qué no urlRewriting?Porque no quiero cambiar la limpieza URL que el enrutamiento de la da.

Aquí está el código:

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

Luego LangRouteHandler.vb clase:

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

Por fin puedo usar el valor predeterminado.aspx en la raíz a la que redirigir el defecto lang utiliza en el navegador de la lista.
Tal vez esto se puede hacer con la ruta.Los valores predeterminados, pero que no funcionan dentro de Visual Studio (que tal vez se trabaja en el servidor)

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

Algunas fuentes:
* Mike Ormond del blog
* Chris Cavanagh Blog
* MSDN

Otros consejos

  1. Uso urlrewriteing.net para asp.net webforms, o de enrutamiento con mvc.Reescribir www.site.com/en/something.aspx url:página.aspx?lang=es.
    UrlRewriteing.net se puede configurar fácilmente a través de regex en la web.config.También puede utilizar el enrutamiento con webforms ahora, es probable que sea similar...
  2. con webforms, que cada página aspx hereda de BasePage de clase, que luego se hereda de la Página de la clase.
    En BasePage clase anular "InitializeCulture()" y establecer la cultura de la información en el hilo, como se describe en la pregunta.
    Es bueno hacerlo en este orden:1.compruebe la dirección url para Lang param, 2.verificación de la galleta, 3.set default lang
  3. Para el contenido estático (texto, fotos url) de las páginas de uso LocalResources,o Global si el contenido es repetitivo a través del sitio.Usted puede ver videocast sobre el uso global/local res.en www.asp.net
  4. Preparar db para múltiples idiomas.Pero esa es otra historia.

Yo personnaly uso los archivos de recursos.

Muy eficiente, muy simple.

UrlRewriting es el camino a seguir.

Hay un buen artículo de MSDN sobre las mejores maneras de hacerlo.

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

Tipo de una tangente, pero me gustaría realmente evitar hacer esto con trayectorias diferentes, a menos que las diferentes lenguas son completamente contenido separados el uno del otro.

Para Google rank, o para los usuarios compartir una Url (una de las grandes ventajas de 'limpiar' Url), desea que la dirección a mantenerse lo más constante posible.

Usted puede encontrar los usuarios de las preferencias de idioma de la configuración de su navegador:

CultureInfo.CurrentUICulture

A continuación, la dirección URL para el inglés o el español:

www.domain.com/products/newproduct

Misma dirección para cualquier idioma, pero que el usuario llegue a la página en el idioma que elijan.

Utilizamos esta en Canadá para proporcionar sistemas de inglés y francés al mismo tiempo.

Para ello con la dirección URL de Enrutamiento, consulte este post:

URLS amigables con la dirección URL de Enrutamiento

También, ten cuidado con las nuevas IIS 7.0 - la Reescritura de URL.Excelente artículo aquí http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Me gustó esta parte La Opción Que Se Debe Utilizar?

  1. Si usted está desarrollando un nuevo ASP.NET aplicación Web que utiliza ASP.NET MVC o ASP.NET Datos Dinámicos de las tecnologías, el uso de ASP.NET de enrutamiento.Su aplicación se beneficiarán de soporte nativo para URLs limpias, incluyendo la generación de URLs limpias para los enlaces en sus páginas Web.Tenga en cuenta que ASP.NET enrutamiento no admite el estándar de las aplicaciones Web Forms sin embargo, aunque existen planes para él en el futuro.

  2. Si usted ya tiene un legado ASP.NET aplicación Web y no desea cambiar, utilice el URL rewrite module.La URL rewrite module permite traducir motor de búsqueda URLs amigables en un formato que la aplicación utiliza en la actualidad.Además, permite crear reglas de redirección que puede utilizarse para redirigir la búsqueda-rastreadores de motores de URLs limpias.http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Gracias, Maulik.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top