ASP.NET MVC, lokalisierte Routen und die default-Sprache für den Benutzer
Ich bin mit ASP.NET MVC lokalisierte Strecken. Also, wenn ein Benutzer auf der englischen Seite ist es example.com/en/Controller/Action
und die Schwedische Website ist example.com/sv/Controller/Action
.
Wie kann ich sicherstellen, dass wenn ein user betritt die Website, er/Sie kommt auf die richtige Sprache direkt? Ich weiß, wie man die Sprache, die ich wollen, das ist nicht das Problem. Die Sache, die ich verwendet, um zu tun, ist, dass ich diese Kultur in der RegisterRoutes
Methode. Da aber meine Seite ist im integrierten Modus ich Schaffe es nicht, die Anforderung von Application_Start.
So, wie soll ich sicherstellen, dass die route korrekt ist, von Anfang an?
InformationsquelleAutor Oskar Kjellin | 2010-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich es tun würde.
~~ Disclaimer : Pseudo-code ~~
global.asax
Beachten Sie: der controller und/oder action brauchen NICHT zu ersten und zweiten. in der Tat, Sie brauchen nicht zu existieren, in der
url with parameters
Abschnitt.Dann ...
HomeController.cs
Bonus Anregung
Können Sie auch hinzufügen, eine Route Einschränkung, um Ihre Routen, damit Sie akzeptiert nur bestimmte Zeichenfolgen für die
languageCode
parameter. So stehlen diese dude-code ....(mehr pseduo-code)...
bedeutet, dass Sie dies tun könnte ......
und dort haben Sie es 🙂
Ich etwas tun, wie dies für Versionierung mein MVC-Api.
GL 🙂 Hoffe, das hilft.
Kjellin : np - i ' ll drop eine weitere Antwort in 10 Minuten .. /me hacks einige code. brb
InformationsquelleAutor Pure.Krome
Ok .. ein anderer Vorschlag.
Um sicherzustellen, dass ich verstehe, Sie wollen ..
wenn ja .. diese Antwort hat drei Teile:-
global.asax
Update (basierend auf Kommentare)
Also, wenn Sie wollen, um die route
http://www.example.com/sv/account/logon
dann der oben genannten route funktioniert.LanguageCode
== sv (oder en oder fr oder was auch immer Sprache, die Sie unterstützen)account
== die Steuerung: AccountControllerlogin
== Aktion.die Tatsache, dass ich gesagt habe
controller = "home"
undaction="index"
nur bedeuten, dass diese zwei Parameter sind standardmäßig auf diese Werte, WENN keine zur Verfügung gestellt wurden. Also, wenn Sie springenhttp://www.example.com/sv/account/logon
dann das MVC-framework ist klug genug zu wissen (basierend auf dieser route), die die Parameter languageCode == sv, controller == Aktion und Aktion (Methode) == index.HINWEIS: Die um Ihrer Routen ist WICHTIG. kritisch wichtig ist. Diese route muss eine (wenn nicht die) der ersten Routen (nach dem IgonoreRoute), wenn Sie sich Ihre Routen.
.
hier gehen wir ... (pseudo-code wieder....)
So, dann verzieren wir unsere Steuerungen so 🙂
Bemerken, wie ich dekoriert die Klasse .. nicht nur die einzelnen Maßnahmen. dies bedeutet, dass ALLE Aktionen in der Klasse betroffen, die ActionFilter 🙂
Auch, möchten Sie vielleicht fügen Sie eine neue route in der global.asax, dass die Griffe KEINE "languageCode" .. und fest, die als Standard-Wert ...
gerne (auch ungetestet) ...
Funktioniert diese Hilfe?
Kjellin : zusätzliche info zu dieser Antwort. bitte nochmals Lesen und posten Sie Kommentare. 🙂
Das problem, das ich bin vor ist, dass ich will page.com/home/index Umleitung zu page.com/sv/home/index wenn das Land.. 🙂
werden alle /page.com/home/index Umleitung zu sv ?
Es hängt davon ab, welche Sprache mein code will der Benutzer zu gehen. Ich habe eine functon wie "GetLanguageCode" , prüft ein paar Sachen und gibt den code
InformationsquelleAutor Pure.Krome
Ich weiß, das ist eine sehr alte Frage, aber hatte gerade zu lösen, die komplette Reihe von Themen, die ich dachte, ich würde teilen meine Lösung.
Unten ist eine komplette Lösung, inklusive ein paar extra tricks ermöglichen einen einfachen Wechsel der Sprache. Es ermöglicht für bestimmte Kulturen, nicht nur für bestimmte Sprachen (aber nur die Sprache bleibt in diesem Beispiel).
Funktionen gehören:
Schritt 1: Ändern RegisterRoutes in RouteConfig
Diese neue routing enthält eine Einschränkung (wie die anderen auch empfehlen), damit der language route nicht greifen bestimmte standard-Pfade. Es gibt keine Notwendigkeit für eine Standard-Sprache Wert, wie das alles behandelt, indem die
LocalisationAttribute
(siehe Schritt 2).Schritt 2: Erstellen Sie eine Lokalisierung Attribut
Diese betrachten controller-Anforderungen, bevor Sie behandelt werden, und ändern Sie die aktuelle Kultur auf der Grundlage der URL, die ein cookie, oder die Standard-browser-Kultur.
Schritt 3: Wenden Lokalisierung an alle Controller
z.B.
Schritt 4: um die Sprache Zu ändern (z.B. über ein Menü)
Dies ist, wo es noch ein bisschen schwierig und benötigt einige workarounds.
Fügen Sie eine Methode ChangeLanguage auf Ihr Konto controller. Dies Streifen aus jedem bestehenden Sprachcode aus der "letzten Weg" zu ermöglichen, um die neue Sprache wirksam wird.
Schritt 5: Fügen Sie die Sprache im Menü links
Den Menü-Optionen bestehen aus einer Verknüpfung mit der neuen Sprache angegeben als parameter der route.
z.B. (Razor Beispiel)
Den Rückgabe-URl der aktuellen Seite, codiert, so dass es den parameter id in der URL. Dies bedeutet, dass Sie benötigen, um bestimmte escape-Sequenzen, die sonst abgelehnt von Razor wie eine potenzielle Sicherheitsverletzung.
Hinweis: für nicht-razor-setups, die Sie wollen im Grunde, ein Anker, hat die neue Sprache und die aktuelle Seite relative URL, die in einem Pfad wie:
http://website.com/{language}/account/changelanguage/{existingURL}
{language} ist die neue Kultur-code und {existingURL} ist eine URLencoded version der aktuellen relative Adresse der Seite (so dass wir wieder auf die gleiche Seite, die die neue Sprache ausgewählt ist).
Schritt 6: Aktivieren Sie bestimmte "unsichere" Zeichen in URLs
Die erforderliche Kodierung der URL zurück, bedeutet, dass Sie benötigen, um bestimmte escape-Zeichen, in der
web.config
oder die bestehende URL-parameter führt zu einem Fehler.In Ihrer Website.config, finden die
httpRuntime
tag (oder hinzufügen) in<system.web>
und fügen Sie den folgenden, um es (im Grunde entfernen Sie die%, die in der standard-version dieses Attributs):In Ihrer Website.config, finden die
<system.webserver>
Abschnitt und fügen Sie die folgende drin:Fand gerade deinen zweiten Kommentar hier und zu verstehen, Ihre anderen Punkt, jetzt. Wir hatten nur die oben genannten zu bieten Lokalisierung aller Texte. Datum Eintrag ist so unzuverlässig das internet im Allgemeinen wir verwenden Sie immer eine benutzerdefinierte Datum-Steuerelement (z.B. 3 dropdowns und/oder mit datepicker). Vielen Dank,
InformationsquelleAutor Gone Coding
Können Sie Fragen in der
global.asax
BeginRequest, wenn die url ist gut ausgebildet für Ihre Website.Sie können versuchen, dies zu tun mit den Strecken, aber in meiner Erfahrung, die Routen werden sehr instabil, wenn Sie nicht sicher sind, dass der erste param ist der lang.
Ungetesteten code. Entschuldigen Sie meine VB
Dies scheint zu sein, schaffen einige infite loops.. /
Es scheint auch umschreiben der Pfade zu den CSS-Dateien, etc.
InformationsquelleAutor Eduardo Molteni