Wie erstelle ich eine formatierte lokalisierte Zeichenkette?

7

Ich habe eine lokalisierte Zeichenfolge, die einige Variablen benötigt. Bei der Lokalisierung ist es jedoch wichtig, dass sich die Reihenfolge der Variablen von Sprache zu Sprache ändert.

Das ist also keine gute Idee:

%Vor%

In einigen Sprachen kommen einige Wörter vor anderen, während es in anderen Sprachen umgekehrt ist. Mir fehlt momentan ein gutes Beispiel.

Wie würde ich NAMED-Variablen in einer formatierten Zeichenfolge bereitstellen? Gibt es irgendeinen Weg, es ohne einen schweren selbstgemachten Stringersatz zu schaffen? Sogar einige nummerierte Variablen wie {% @ 1}, {% @ 2} und so weiter wären ausreichend ... gibt es eine Lösung?

    
dontWatchMyProfile 15.05.2010, 19:53
quelle

3 Antworten

12

Deshalb verwendet NSLocalizedString zwei Parameter. Verwenden Sie den zweiten Parameter, um einen Kommentar einzufügen, der die Bedeutung der Variablen in der Muttersprache beschreibt. Dann können Übersetzer sie mit dem Konstrukt $ + nummer neu anordnen. Siehe Apples Notes für Localizer .

Sie können jedoch Parameter in einer Sprache nicht überspringen. Wenn Sie zum Beispiel 3 Parameter in Englisch und 4 in Französisch haben und die dritte nicht in Englisch benötigen, können Sie nicht wie %1$@ %2$@ and %4$@ formatieren. Sie können nur die letzte überspringen.

    
lemnar 04.07.2010, 08:54
quelle
10

Formatierter lokalisierter String Beispiel:

%Vor%

genstrings erzeugt diese Zeile in Ihrer Localizable.strings-Datei:

%Vor%     
cider 29.11.2010 14:05
quelle
3

Ich habe dies in einem Projekt vor ein paar Wochen gelöst, indem ich mein eigenes einfaches Template-System mit NSScanner erstellt habe. Die Methode verwendet ein Template-System, das Variablen mit der Syntax ${name} findet. Variablen werden der Methode über ein NSDictionary bereitgestellt.

%Vor%

Mit einer lokalisierten Datei, die wie folgt aussieht:

%Vor%

Wir können die folgenden Ergebnisse erzielen ...

%Vor%

Wie Sie sehen können, habe ich auch einige zusätzliche Funktionen hinzugefügt. Erstens werden alle Variablen, die nicht gefunden werden ( ${byebye} in meinem Beispiel), lokalisiert und an die Ergebnisse angehängt. Ich habe das getan, weil ich HTML-Dateien aus meinem Anwendungs-Bundle lade und sie über die Localize-Methode laufe (wenn ich das mache, lokalisiere ich den Input-String jedoch nicht, wenn ich den Scanner erstelle). Außerdem habe ich die Möglichkeit hinzugefügt, andere Dinge als nur NSString -Objekte zu senden, für etwas mehr Flexibilität.

Dieser Code ist vielleicht nicht der beste oder am schönsten geschrieben, aber er macht den Job ohne spürbare Auswirkungen auf die Leistung:)

    
alleus 16.05.2010 09:31
quelle

Tags und Links