2009-06-08 12 views
20

Für das Projekt, in dem ich mich gerade befinde, muss ich speziell formatierte Zeichenketten an einen Drittanbieter-Dienst zur Verarbeitung liefern. Und so den Aufbau ich die Saiten wie so:Sollen wir Formatstrings in Ressourcen speichern?

string someString = string.Format("{0}{1}{2}: Some message. Some percentage: {3}%", token1, token2, token3, number); 

Vielmehr dann codiert die Zeichenfolge, ich dachte an sie in die Projektressourcen zu bewegen:

string someString = string.Format(Properties.Resources.SomeString, token1, token2, token3, number); 

Die zweite Option ist meiner Meinung nach , nicht so lesbar wie die erste, dh die Person, die den Code liest, müsste die String-Ressourcen hochziehen, um herauszufinden, wie das Endergebnis aussehen soll.

Wie kann ich das umgehen? Ist die hardcodierte Formatzeichenfolge in diesem Fall ein notwendiges Übel?

Antwort

14

Ich denke, das ist ein notwendiges Übel, eines, das ich häufig benutzt habe. Etwas muffig, dass ich tue, ist:

// "{0}{1}{2}: Some message. Some percentage: {3}%" 
string someString = string.Format(Properties.Resources.SomeString 
            ,token1, token2, token3, number); 

..at dest, bis der Code ist stabil genug, dass ich peinlich sein könnte, dass von anderen gesehen hat.

+5

useing Sie sollten auch Fügen Sie der Ressourcendatei Kommentare hinzu, um die Parameter anzugeben. Dies ist sehr nützlich für Lokalisierer, wenn die Datei jemals zur Übersetzung geht. –

+0

@CodingMonkey: vereinbart. Machen Sie den Lokalisierungsingenieuren das Leben so einfach wie möglich. Sie wollen keine Übersetzungsraten. –

+1

@MichaelPetrotta> Wie würden Sie den Code stabilisieren, so dass diese {0} Strings nicht mehr notwendig sind? Ich persönlich denke darüber nach, 'string.Format' nicht zu verwenden, sondern benutze:' "begin {middle end". Ersetze ("{middle}", middle) '. Natürlich hat dieser Ansatz eigene Probleme ... – Laoujin

2

Ich sehe nicht, warum einschließlich der Formatzeichenfolge im Programm eine schlechte Sache ist. Im Gegensatz zu traditionellen undokumentierten magischen Zahlen ist es ziemlich offensichtlich, was es auf den ersten Blick tut. Wenn Sie die Formatzeichenfolge an mehreren Stellen verwenden, sollte sie auf jeden Fall in einer geeigneten schreibgeschützten Variablen gespeichert werden, um Redundanz zu vermeiden.

Ich stimme zu, dass es hier unnötig ist, es in den Ressourcen zu halten. Eine mögliche Ausnahme wäre, wenn Ihr Programm lokalisiert werden muss und Sie über Ressourcendateien lokalisieren.

+0

Ja, es ist ein Schmerz, aber irgendeine Form der Umleitung ist fast unerlässlich für die Lokalisierung. Ich habe auf der anderen Seite des Zauns gearbeitet, in der Softwarelokalisierung, und vertraue mir, du willst uns keinen Code schicken. Oder versuchen Sie, Änderungen wieder in Code zusammenzuführen. –

+0

Ja, aber Gettext-Style-Lokalisierung ermöglicht es, die ursprünglichen Strings im Code zu behalten, während immer noch nur eine Topf- (Template-) Datei an Übersetzer geschickt wird. So sind Ressourcendateien nicht die einzige Option. –

15

Es gibt mehrere Gründe, warum Sie dies tun möchten, aber der einzige gute Grund ist, wenn Sie Ihre Anwendung in eine andere Sprache lokalisieren möchten.

Wenn Sie Ressourcenzeichenfolgen verwenden, müssen Sie einige Dinge beachten.

  1. Wenn möglich, Formatzeichenfolgen in den Satz von Ressourcenzeichenfolgen einbeziehen, die lokalisiert werden sollen. Dadurch kann der Übersetzer die Position der formatierten Elemente neu anordnen, damit sie besser in den Kontext des übersetzten Texts passen.

  2. Vermeiden Sie Strings in Ihrem Format Token, die in Ihrer Sprache sind. Es ist besser, diese für Zahlen zu verwenden. Zum Beispiel kann die Nachricht:

    „Der Wert von Ihnen angegebenen muss zwischen {0} und {1}“

    ist groß, wenn {0} und {1} sind Zahlen wie 5 und 10. Wenn Sie die Formatierung in Strings wie "five" und "ten" wird das die Lokalisierung erschweren.

  3. Sie können das Lesbarkeitsproblem, über das Sie sprechen, durch einfaches Benennen Ihrer Ressourcen gut verstehen.

    Zeichenfolge someString = Zeichenfolge.Format (Properties.Resources.IntegerRangeError, minValue, maxValue);

  4. Evaluieren Sie, ob Sie sichtbare Zeichenfolgen für Benutzer auf der richtigen Abstraktionsebene in Ihrem Code generieren. Im Allgemeinen tendiere ich dazu, alle sichtbaren Zeichenfolgen des Benutzers in dem Code zu gruppieren, der der Benutzeroberfläche am nächsten ist.Wenn ein Datei-E/A-Code niedriger Ebene Fehler enthalten muss, sollte dies mit Ausnahmen geschehen, die Sie in Ihrer Anwendung behandeln, und konsistenten Fehlermeldungen für. Dadurch werden auch alle Zeichenfolgen konsolidiert, die eine Lokalisierung erfordern, anstatt dass sie in Ihrem Code gespickt sind.

3

Eine Sache, die Sie tun können, um hart codierte Zeichenfolgen hinzuzufügen, oder sogar zu beschleunigen Hinzufügen von Strings in einer Ressourcendatei ist CodeRush Xpress zu verwenden, die Sie kostenlos hier herunterladen können: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/

Sobald Sie schreiben Sie Ihre string Sie können auf das CodeRush-Menü zugreifen und in einem einzigen Schritt in eine Ressourcendatei extrahieren. Sehr schön.

Nachschärfer hat similar functionality.

+0

Das ist kaum eine langfristige Lösung. Ihr Code wird weiterhin mit 'Properties.Resources.SomeString'nnn gefüllt, wenn Sie Ihren Code ** nach der Konvertierung aufrufen, wie während der Wartung – MickyD

+0

Dieser Kommentar war ziemlich alt. Mit 'Properties.Resources.SomeString' würden Sie jedoch zu einem bestimmten Zeitpunkt auf Strings in einem C# -Projekt zugreifen und die resources.dll in einem externen Prozess lokalisieren. Sie möchten die Binärdatei nicht immer direkt lokalisieren, daher war der Text in einer Ressourcendatei der Schlüssel. –

1

ja können Sie enter image description here

Neuvermietungen sehen, wie

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i]) 

Das wird mir dynamische Nachricht

durch die Art und Weise jedes Mal gab ich ResXManager

Verwandte Themen