Question

Je dois créer un site Web multilingue, avec des URL telles que

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

Auparavant, je configurais deux répertoires virtuels dans IIS, puis détectais l'URL dans global.aspx et changeais la langue en fonction de l'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 solution s'apparente davantage à un hack. Je songe à utiliser le routage pour un nouveau site Web.

Connaissez-vous un moyen plus efficace ou plus élégant de le faire?

modifier: la question concerne la gestion des URL, pas les ressources, etc.

Était-ce utile?

La solution

J'ai décidé de choisir le nouveau routage ASP.net.
Pourquoi ne pas écrire? Parce que je ne veux pas changer l'URL propre que le routage vous donne.

Voici le 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

Ensuite, classe 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

Enfin, j'utilise le fichier default.aspx à la racine pour rediriger vers le langage par défaut utilisé dans la liste du navigateur.
Cela peut peut-être être fait avec route.Defaults, mais cela ne fonctionne pas dans Visual Studio (peut-être que cela fonctionne sur le serveur)

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

Quelques sources:
  * Mike Ormond's blog
  * Blog de Chris Cavanagh .   * MSDN

Autres conseils

  1. Utilisez urlrewriteing.net pour les formulaires Web asp.net ou effectuez un routage avec mvc. Rewrite www.site.com/fr/something.aspx en url: page.aspx? Lang = fr.
    UrlRewriteing.net peut être facilement configuré via regex dans web.config. Vous pouvez également utiliser le routage avec les formulaires Web maintenant, il est probablement similaire ...
  2. avec les formulaires Web, laissez chaque page aspx hériter de la classe BasePage, qui hérite ensuite de la classe Page.
    Dans BasePage, remplacez la classe "InitializeCulture ()". et définissez les informations de culture sur thread, comme vous l'avez décrit dans la question.
    C’est bien de faire cela dans cet ordre: 1. vérifier l’URL pour Lang param, 2. vérifier le cookie, 3. définir la langue par défaut
  3. Pour le contenu statique (texte, URL de photos) sur les pages, utilisez LocalResources ou Global si le contenu se répète sur l'ensemble du site. Vous pouvez regarder une diffusion vidéo en utilisant la résolution globale / locale. sur www.asp.net
  4. Préparez la base de données pour plusieurs langues. Mais c'est une autre histoire.

J'utilise personnellement les fichiers de ressources .

Très efficace, très simple.

UrlRewriting est la voie à suivre.

Il existe un bon article sur MSDN sur les meilleures façons de le faire.

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

Un peu comme une tangente, mais j’éviterais en fait de choisir des chemins différents, à moins que les différentes langues ne soient complètement distinctes les unes des autres.

Pour le classement Google ou les utilisateurs partageant des URL (l’un des gros avantages des URL "nettes"), vous souhaitez que l’adresse reste aussi constante que possible.

Vous pouvez rechercher les préférences de langue des utilisateurs à partir des paramètres de leur navigateur:

CultureInfo.CurrentUICulture

Ensuite, votre URL pour l'anglais ou l'espagnol:

  

www.domain.com/products/newproduct

Même adresse pour n'importe quelle langue, mais l'utilisateur obtient la page dans la langue de son choix.

Nous l'utilisons au Canada pour fournir des systèmes en anglais et en français simultanément.

Pour ce faire avec le routage d'URL, reportez-vous à ce message:

URL conviviales avec Routage des URL

Surveillez également le nouvel IIS 7.0 - Réécriture d’URL. Excellent article ici http: // learn. iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

J'ai aimé cette partie Quelle option devriez-vous utiliser?

  1. Si vous développez une nouvelle application Web ASP.NET utilisant les technologies ASP.NET MVC ou ASP.NET Dynamic Data, utilisez le routage ASP.NET. Votre application bénéficiera de la prise en charge native des URL propres, y compris la génération d’URL propres pour les liens de vos pages Web. Notez que le routage ASP.NET ne prend pas encore en charge les applications Web Forms standard, bien qu'il soit prévu de le prendre en charge ultérieurement.

  2. Si vous possédez déjà une application Web ASP.NET existante et que vous ne souhaitez pas le modifier, utilisez le module de réécriture d'URL. Le module de réécriture d'URL vous permet de traduire les URL conviviales pour les moteurs de recherche dans un format que votre application utilise actuellement. En outre, il vous permet de créer des règles de redirection pouvant être utilisées pour rediriger les robots d'exploration des moteurs de recherche afin de nettoyer les URL. http://learn.iis.net /page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Merci, Maulik.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top