Benutzer mit den meisten Antworten
string.Format werte in Resource File übernehmen

Frage
-
Ich habe in meinem Code folgenden string:
string.Format("Sie haben {0} {1} eine Testseite erstellt", this.wert1, this.wert2);
Diese möchte ich aber so wie er ist also inklusive der Platzhalter in ein Resource File auslagern. Ist das möglich? Ich möchte also im Prinzip folgenden Code haben:
string.Format(ResourceHandler.GetString("id"), this.wert1, this.wert2);
Antworten
-
Hallo,
Visual Studio unterstützt typsichere Ressource Dateien, d. h. wenn Du eine ResX-Resourcedatei ins Projekt einfügst,
so wird dazu eine Codedatei erzeugt, die einen typsicheren Zugriff ermöglicht."Dummerweise" hat man dabei die Unterstützung von Parametern vergessen,
was generell relativ einfach ist, in dem man die Werte als params object[] arguments übergibt.Einmal mit festen Parametern und verallgemeinert, könnte das so aussehen,
wobei eine Resourcedatei mit Namen Strings.resx die Zeichenkette String1 den Text "Sie haben ...{0} {1} ..." aufnimmt:internal static string GetTestSeite(string wert1, string wert2) { // Aus Strings.resx return string.Format(Strings.Culture, Strings.String1, wert1, wert2); } internal static string FormatString(string resourceid, params object[] args) { string resString = Strings.ResourceManager.GetString(resourceid, Strings.Culture); if (args != null && args.Length != 0) return string.Format(Strings.Culture, resString, args); return resString; }
und darunter eine verallgemeinerte Variante, die dann allerdings anfälliger für Laufzeitfehler ist,
wenn man nicht die richtigen Argumente (oder -anzahl) übergibt.
Leider muss man das in einer eigenen Klasse unterbringen, da die Ressourcedatei
nicht als partial gekennzeichnet ist. Ausserdem wird dabei im Standard "internal" verwendet,
was auch nicht immer gewünscht ist.Unter Extended Strongly Typed Resource Generator findest Du eine Erweiterung,
die einige der fehlenden Kleinigkeiten ergänzt.Einige weitere Hintergrundinformationen findest Du unter Ressourcen in Anwendungen
Gruß Elmar
- Als Antwort markiert Gozar15 Montag, 24. Oktober 2011 10:16
Alle Antworten
-
Klar geht das. Schau dir mal folgenden Link. Die Vorgehensweise ist bei allen .Net Technologien ähnlich...
http://msdn.microsoft.com/en-us/library/cc838238(v=vs.95).aspx
-
>>Dort steht aber nichts zu dem Problem, das ich habe :(
Du hast lediglich gefragt, ob sowas geht!>>Ich möchte den obigen String inklusive der Platzhalter in ein resx packen. Wenn ich das tue und nur noch die zweite Zeile aufrufe, funktioniert das nicht.
"Funktioniert nicht" sind wenig Informationen...
Hast du mal die Funktionalität debuggt? -
Hallo,
Visual Studio unterstützt typsichere Ressource Dateien, d. h. wenn Du eine ResX-Resourcedatei ins Projekt einfügst,
so wird dazu eine Codedatei erzeugt, die einen typsicheren Zugriff ermöglicht."Dummerweise" hat man dabei die Unterstützung von Parametern vergessen,
was generell relativ einfach ist, in dem man die Werte als params object[] arguments übergibt.Einmal mit festen Parametern und verallgemeinert, könnte das so aussehen,
wobei eine Resourcedatei mit Namen Strings.resx die Zeichenkette String1 den Text "Sie haben ...{0} {1} ..." aufnimmt:internal static string GetTestSeite(string wert1, string wert2) { // Aus Strings.resx return string.Format(Strings.Culture, Strings.String1, wert1, wert2); } internal static string FormatString(string resourceid, params object[] args) { string resString = Strings.ResourceManager.GetString(resourceid, Strings.Culture); if (args != null && args.Length != 0) return string.Format(Strings.Culture, resString, args); return resString; }
und darunter eine verallgemeinerte Variante, die dann allerdings anfälliger für Laufzeitfehler ist,
wenn man nicht die richtigen Argumente (oder -anzahl) übergibt.
Leider muss man das in einer eigenen Klasse unterbringen, da die Ressourcedatei
nicht als partial gekennzeichnet ist. Ausserdem wird dabei im Standard "internal" verwendet,
was auch nicht immer gewünscht ist.Unter Extended Strongly Typed Resource Generator findest Du eine Erweiterung,
die einige der fehlenden Kleinigkeiten ergänzt.Einige weitere Hintergrundinformationen findest Du unter Ressourcen in Anwendungen
Gruß Elmar
- Als Antwort markiert Gozar15 Montag, 24. Oktober 2011 10:16