Gute Möglichkeit zum ändern der Sprache-Ressourcen dynamisch auf Anfrage
Habe ich eine ASP.NET Web-API-Anwendung, die reagieren, um Benutzer-Accept-Language-header entsprechend.
Derzeit werden die strings gespeichert sind, in die resx und zugegriffen kompilieren-die sichere Art und Weise durch Visual Studio erzeugt ist Klasse. Was ich tun möchte ist, halten Sie den derzeitigen Ansatz und erstellen von satellitenassemblys für jede übersetzte version der resx. Dann analysieren des Benutzers Accept-Language-header, um zu sehen, welche Sprachen der Benutzer nimmt an und laden Sie die Ressourcen für die gewünschte Sprache aus der Satelliten-assembly.
Ich glaube, ich könnte implementieren, die all dieses Verhalten selber durch die Schaffung einer Reihe von sprachspezifischen ResourceManager
Objekte mit Hilfe der ResourceSet
aber dann wäre es nicht möglich, dass der compile-time Sicherheit, da Visual Studio übernimmt automatisch das aktualisieren der Klasse für resx-Datei.
Was wäre der beste Weg, um die lokalisierten Sprachressourcen dynamisch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Lektüre Ihrer Frage, ich sehe nichts, dass ASP.NET bieten nicht automatisch. Sie können Ihren ASP.NET (ob WebForms oder MVC) zu verwenden, die
accept-language
request-header und legen Sie die entsprechenden UICulture (die Auswirkungen, die Satelliten-assembly geladen wird, durch ResourceManager) und Kultur (die Auswirkungen locale-abhängige Formatierung und Analyse, wie Datumsangaben und zahlen) angemessen.Konfigurieren Sie Ihre app zur Nutzung der
accept-language
Liste, um sowohl UICulture und Culture für jede Anfrage (per dieser MSDN-Seite), konfigurieren Sie Ihre web.config wie hier:Gibt es auch eine äquivalente Konfiguration von Einstellungen pro Seite.
Dann, wie pro die Resource Fallback Prozess, wenn Ihre app enthält eine Satelliten-assembly für die passende Kultur (oder, in Ermangelung, seine Eltern Neutrale Kultur), es wird von den Ressourcen-Manager. Wenn nicht, dann ist dein Standard-Ressourcen verwendet werden (Englisch, wenn das ist Ihre Basis-Sprache).
Accept-Language: it,de,en;q=0.5
und ASP.NET kann nicht finden, eine angeforderte Ressource in italienischer Sprache, die es nicht versuchen deutschen weiter sondern fällt zurück auf die Neutrale Kultur. Alle Möglichkeiten, um dieses Verhalten zu korrigieren?var orderedValidAcceptLanguages = AcceptLanguage.Parse(httpContext.Request.Headers["Accept-Language"]).Where(x => x.IsValid).OrderByDescending(x => x.Q).ToList();
ResourceManager
Objekte für verschiedene Kulturen, wie bereits in meiner Frage, oder einen anderen Ansatz?Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
. Sie können auch ändern, die Kultur für die Formatierung/parsing, aber es erfordert eine bestimmte Kultur (z.B. "de-DE" ist OK, aber "de" ist nicht). Wie diese:Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
Konnte Sie schreiben ein
HttpModule
erkennt, dass die language-header und legt den aktuellen thread-Kultur.ResourceManager
et al wird herauszufinden, die richtige lokalisierte version zu verwenden, aus dem thread-Kultur.