Disclaimer: Ich bin immer noch ein Anfänger, und ich behalte ein großes Projekt von jemand anderem mit wenig Dokumentation. Ich könnte also etwas Offensichtliches vermissen.Breadcrumb nicht auf Kulturwechsel
Hier geht: Meine Web-Anwendung kann durch 2 DNS-Namen zugegriffen werden, "www.website.com" und "www.siteweb.com" eine in Englisch und die andere in Französisch.
Früher gab es eine zweisprachige Splash-Seite, die zur Sprache auffordert, aber da wir 2 URLs haben, musste ich die Splash-Seite löschen und automatisch auf die Hauptseite in der Sprache umleiten, die der URL entspricht darauf zuzugreifen.
Hier ist die Umleitung Code auf dem nicht mehr existierenden Splash-Seite befindet (index.vbhtml):
@Code
If Request.ServerVariables("SERVER_NAME").Contains(ConfigurationManager.AppSettings("SiteDNSnameEN")) Then
Response.Redirect(Url.Action("SetLanguage", Resources.ResourceURL.CONTROLLER_LANGUAGE, New With {.pCulture = "en-CA", .pReturnURL = "/Home"}))
ElseIf Request.ServerVariables("SERVER_NAME").Contains(ConfigurationManager.AppSettings("SiteDNSnameFR")) Then
Response.Redirect(Url.Action("SetLanguage", Resources.ResourceURL.CONTROLLER_LANGUAGE, New With {.pCulture = "fr-CA", .pReturnURL = "/Accueil"}))
End If
@EndCode
Wenn auf der Französisch Seite „Home“, die Semmelbrösel funktioniert gut, wenn ich die Sprache Toggle-Button verwenden, die bezieht sich auf einen Controller, der die URL übersetzt und "SetLanguage" auslöst, die im Wesentlichen CurrentCulture und CurrentUICulture setzt und die pReturnURL erneut lädt. Alles wird richtig übersetzt und es gibt kein Problem.
Aber wenn ich die englische URL benutze (oder gefälscht benutze sie, weil in dev es nur localhost ist), wird der Breadcrumb angezeigt, aber wenn ich auf die Sprachumschalttaste drücke, wird der Breadcrumb nicht angezeigt. Meine beste Vermutung ist, dass MVCSiteMapProvider immer noch nach den englischen Ressourcen sucht, da der Breadcrumb auf der einen Seite angezeigt wird, die zufällig denselben Pfad auf Französisch oder Englisch hat.
Ich habe mit globac.asax Routen und mit der Umleitung gespielt, aber ich nur erreichen, um eine Sprache zu beheben und die andere zu schrauben.
Ich bin mir sicher, dass es nur eine kleine Lösung gibt, die mich schon seit einiger Zeit entzieht. Irgendwo entlang der Linie scheint der Kulturwandel nicht zu funktionieren. Ich habe die Aktion "SetLanguage" behandelt und es zeigt immer die erwartete Kultur. Das könnte nicht sein, aber ich denke MVCSiteMapProvider folgt nicht immer aus irgendeinem Grund.
Hier ist der Teil von Global.asax, die ich mit gebastelt habe:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
routes.MapRoute(_
"Splash", _
"", _
New With {.controller = "Root", .action = "Index"} _
)
routes.MapTranslatedRoute(_
"TranslatedRoute", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""}, _
New With {.controller = translationProvider, .action = translationProvider}, _
False _
)
Dim controllerHomeEN = Resources.ResourceURL.ResourceManager.GetString("CONTROLLER_HOME", New CultureInfo(WebHelper.CONST_CURRENT_CULTURE_EN))
Dim actionIndexEN = Resources.ResourceURL.ResourceManager.GetString("ACTION_INDEX", New CultureInfo(WebHelper.CONST_CURRENT_CULTURE_EN))
routes.MapRoute(_
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = controllerHomeEN, .action = actionIndexEN, .id = UrlParameter.Optional} _
)
Aktualisierung auf v4 mein Problem behoben. Ich hatte Probleme, es vorher zu installieren und rollte normalerweise zurück, weil ich nicht war, wenn das es beheben würde. Vielen Dank! – Mortar9