2012-06-08 3 views
11

Ich versuche, nach dem Vorbild der eine Nachricht an den Benutzer anzuzeigen:Wie können Variablen in lokalisierte Strings eingebunden werden?

„nicht hinzugefügt werden Benutzer 5 kann mit der“

Aber wie kann ich Variablen in einen String hinzufügen, die in einem platziert wird. ResX-Datei? Ich habe versucht, nach Dingen wie "Variablen in der Lokalisierung", "Globalisierung mit Variablen" usw. zu suchen, aber ich habe es trockengelegt.

Wenn ich lokalisierende nicht, dass ich schreiben würde:

Console.Write("User " + userNum + " could not be added"); 

Wie kann dies mit Ressourcen erreicht werden?

+0

Sie sollten String mit + trotzdem nicht konstruieren/drucken. String.Format ist so viel einfacher zu arbeiten mit ... –

Antwort

8

In Teams, in denen ich die Internationalisierung durchgeführt habe, haben wir in der Regel auch eine Ressource für die Formatzeichenfolge USER_COULD_NOT_BE_ADDED_FORMAT erstellt und String.Format (oder die Entsprechung in Ihrer Umgebung) genannt, indem Sie den Wert dieser Ressource als Formatmuster übergeben haben.

Dann werden Sie Console.Write(String.Format(resourceManager.GetString("USER_COULD_NOT_BE_ADDED_FORMAT"), userNum));

meisten localizers zu tun haben entweder die Ausbildung in den Format-Strings vom System verwendet sie lokalisierende, oder sie werden mit Führung in der Lokalisierungs-Kit zur Verfügung gestellt, die Sie ihnen zur Verfügung stellen. Das ist also keine so hohe Barriere, wie sie Code direkt modifizieren lässt.

Sie müssen der Ressourcen-ID im Allgemeinen einen Lok-Kommentar hinzufügen, um die Positionsparameter zu erklären.

+1

Könntest du einfach ein bisschen weiter gehen, wie ich einen solchen "Lok-Kommentar zur Ressourcen-ID" hinzufügen kann? Oder stelle mir einen Link zur Verfügung, um mehr zu lesen? Vielen Dank! :) –

+0

Auch wenn ich Sie hier habe, da Sie scheinen, Erfahrung mit diesen Dingen zu haben, ist es am besten, eine einzige resx-Datei für alle Zeichenfolgen in einem gegebenen Projekt zu haben, oder wäre es besser, sie in mehrere resx-Dateien zu trennen sagen wir, eine für jede Form? (Meine resx-Dateien selbst werden in einem separaten Globalisierungsprojekt gespeichert.) –

+1

Angenommen, Sie verwenden das .resx-Format, ist der Lokalisierungskommentar nur "Kommentar" in der ResX-Editor-Benutzeroberfläche oder '' in der XML-Datei direkt nach dem ' 'Element. – JasonTrue

11

Sie können dies nicht direkt tun.

Was Sie kann tun ist, einen Token platzieren - eine bestimmte Zeichenfolge, die ersetzt mit string.Replace mit dem Wert der Variablen sein kann.

Ein guter Kandidat für diese in String-Formatierung die gebaut werden würde:

Console.Write(string.Format("User {0} could not be added", userNum)); 

Unter der Annahme, userNum den Wert 5 hat, wäre das Ergebnis:

User 5 could not be added 

Sie diese Zeichenfolge lokalisieren können mit der Format-Spezifizierer.

5

Verwenden Composite Formatting wie so:

Console.Write("User {0} could not be added", userNum); 

Auf diese Weise können "User {0} could not be added" lokalisieren würde.

0

Sie tun können, dass seine einfache enter image description here

neu sehen lässt, wie

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

dieser Wille gab mir dynamische Nachricht jedes Mal

durch die wie ich benutze g ResXManager