Was ist der beste Weg, um mehrere Sprachen für die Schnittstelle in einer ASP.NET MVC-Anwendung zu unterstützen? Ich habe gesehen, dass Leute Ressourcendateien für andere Anwendungen verwenden. Ist das immer noch der beste Weg?
Was ist der beste Weg, um mehrere Sprachen für die Schnittstelle in einer ASP.NET MVC-Anwendung zu unterstützen? Ich habe gesehen, dass Leute Ressourcendateien für andere Anwendungen verwenden. Ist das immer noch der beste Weg?
Antworten:
Wenn Sie die Standardansichtsmodule verwenden, funktionieren lokale Ressourcen in den Ansichten. Wenn Sie jedoch Ressourcenzeichenfolgen innerhalb einer Controller-Aktion abrufen müssen, können Sie keine lokalen Ressourcen abrufen und müssen globale Ressourcen verwenden.
Dies ist sinnvoll, wenn Sie darüber nachdenken, da lokale Ressourcen lokal für eine Aspx-Seite sind und Sie im Controller noch nicht einmal Ihre Ansicht ausgewählt haben.
Ich fand diese Ressource sehr hilfreich
Es ist ein Wrapper um HttpContext.Current.GetGlobalResourceString und HttpContext.Current.GetLocalResourceString , mit dem Sie die Ressourcen wie folgt aufrufen können ...
// default global resource
Html.Resource("GlobalResource, ResourceName")
// global resource with optional arguments for formatting
Html.Resource("GlobalResource, ResourceName", "foo", "bar")
// default local resource
Html.Resource("ResourceName")
// local resource with optional arguments for formatting
Html.Resource("ResourceName", "foo", "bar")
Das einzige Problem, das ich gefunden habe, ist, dass Controller keinen Zugriff auf lokale Ressourcenzeichenfolgen haben.
Ja, Ressourcen sind immer noch der beste Weg, um mehrere Sprachen in der .NET-Umgebung zu unterstützen. Weil sie leicht zu referenzieren und noch einfacher sind, neue Sprachen hinzuzufügen.
Site.resx
Site.en.resx
Site.en-US.resx
Site.fr.resx
etc...
Sie haben also Recht, die Ressourcendateien weiterhin zu verwenden.
Das Orchard-Projekt verwendet eine Verknüpfungsmethode namens "T", um alle In-Page-String-Übersetzungen durchzuführen. Sie sehen also Tags mit einem @T ("A String to Translate").
Ich möchte untersuchen, wie dies hinter den Kulissen umgesetzt wird, und es möglicherweise in zukünftigen Projekten verwenden. Der Kurzname hält den Code sauberer , da es verwendet wird , eine Menge .
Was mir an diesem Ansatz gefällt, ist, dass die ursprüngliche Zeichenfolge (in diesem Fall Englisch) im Code immer noch gut sichtbar ist und keine Suche in einem Ressourcen-Tool oder an einem anderen Ort erforderlich ist, um zu dekodieren, wie die tatsächliche Zeichenfolge hier aussehen soll.
Weitere Informationen finden Sie unter http://orchardproject.net .
Einige der anderen als Antwort genannten Lösungen funktionieren nicht für die veröffentlichte Version von MVC (sie funktionierten mit früheren Versionen von Alpha / Beta).
Hier ist ein guter Artikel, der eine Möglichkeit beschreibt, eine Lokalisierung zu implementieren, die stark typisiert ist und die Unit-Tests von Controllern und Ansichten nicht unterbricht: Lokalisierungshandbuch für MVC v1
Dies ist eine weitere Option, und Sie haben Zugriff auf die CurrentUICulture im Controller:
Überprüfen Sie MVC3-mehrsprachig