Kürzlich habe ich in Lokalisierung mit .NET vertieft. Im Wesentlichen habe ich gelernt, wie man ein Formular anpasst (mit den Eigenschaften Language und Localizable) und dann die Kultur entsprechend ändert.Lokalisierung .NET; Fallback-Sprache bei der Verwendung von ResourceManager
Allerdings habe ich festgestellt, dass bei der Migration meiner hartcodierten englischen Zeichenfolgen in die automatisch generierten Ressourcendateien und .GetString ("Key") - naja, sagen wir einfach, es war nicht glücklich: P.
Ich entschied mich, einen separaten Satz von resx-Dateien zu erstellen, die ausschließlich für die fest codierten String-Übersetzungen bestimmt sind. Sie folgten der Konvention/Anforderung von [Name]. [Kultur-Code] .resx. Ich habe davon für jede relevante Sprache gemacht; z.B. appstrings.de.resx (Für Deutsch) und appstrings.resx (als invariante Basislinie).
diese neuen Ressourcen zu nutzen, habe ich eine Instanz von Resourcemanager und Ressourcen Set
Dim resManager As New ResourceManager("LanguageTest.appstrings", Assembly.GetExecutingAssembly)
Dim resSet As ResourceSet = resManager.GetResourceSet(My.Application.UICulture, True, True)
Die aktuelle UI Kultur gesetzt wurde (beispielsweise auf Deutsch) mit
My.Application.ChangeUICulture("de")
Originalausgabe
Außer t Er resSet.GetString ("Key") ist explizit in appstrings.de.resx definiert, es wird eine leere Zeichenfolge zurückgegeben. Gibt es da überhaupt noch einen Fallback auf die appstrings.resx (wo "Key" existiert), von dem ich annahm, dass er die Standardbasislinie wäre?
aktualisieren
Rhapsody einen Vorschlag unten gemacht, während die eigentliche Spitze selbst nicht funktioniert, es hat in-fact einen interessanten Punkt entfachen, mit resManager.GetString („Key“) in Bezug auf resSet gegen .GetString ("Schlüssel"). Dies scheint bisher fehlerfrei zu funktionieren. Das heißt, Werte, die in der spezialisierten Sprachdatei vorhanden sind, werden zurückgegeben, während "fehlende" Werte auf die Standardkultur zurückfallen, wenn auf sie durch einen einzelnen Schlüssel zugegriffen wird.
Nachfolgende Ausgabe
Die einzige noch offene Frage, ob die Auswirkungen auf die Leistung der Verwendung von ResourceManger zu einer im Cache gespeicherten ResourceSet im Gegensatz wäre wird diese schädlich sein?
Leider waren die 'appstrings' Ressourcen im My.Resources-Namespace nicht vorhanden. Ihre Code-Lösung wirft jedoch einen interessanten Punkt auf (siehe aktualisierte Frage) :). –