2015-05-13 9 views
6

Ich bin neu in Swift und iOS-Programmierung und stieß ich auf eine Frage bezüglich Dynamische Strings mit Platzhalter und Plural Unterstützung in SwiftDynamische Strings mit Platzhalter und Plural Unterstützung in Swift (iOS)

Zum Beispiel, wenn Sie haben einen Multi-Language-App und nicht will, Strings und Etiketten und Nachrichten usw. codieren ...

ich gut und leicht mit folgendem Code in XML-Dateien in verschiedenen Ordnern in Android zu tun, wo Android-Gerät für Strings aussehen entsprechend dem aktuellen Gebietsschema:

<string name="name">You have %2$d new messages.</string> 
<plurals name="name"> 
    <item quantity="one">You have a new message.</item> 
    <item quantity="other">You have %2$d new messages.</item> 
</plurals> 

Mit Hilfe von über XML und folgende Java:

res.getString(R.string.name, mailCount) 

res.getQuantityString(R.plurals.name, mailCount, mailCount) 

Der Job in Android erledigt ist, ich bin für die Lösung, entsprechend Swift (iOS)

+0

SO selten wandelt Code kostenlos, versuchen Sie es mal selbst und wenn Sie Probleme werden wir hier zu helfen. – Epodax

+4

"Plural Regeleigenschaften" in der Apple-Dokumentation: https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/StringsdictFileFormat/StringsdictFileFormat.html#//apple_ref/doc/uid/10000171-CH16 -SW4. –

+0

Was ist, wenn der Platzhalter eine andere Zeichenfolge als der Pluralzähler ist? Ich habe diese Frage hier gestellt: http://stackoverflow.com/questions/39180444/how-to-add-a-regular-string-placeholders-to-a-translated-plurals-stringdict-in –

Antwort

6

1: Setup-Projekt Localizations, wie im Screenshot gezeigt das Projekt hat Englisch und Russisch.

enter image description here

2: Anschluss an eine leere Eigenschaftslistendatei Localizable.stringsdict namens Erstellen und Einfügen:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>NumberOfMessages</key> 
    <dict> 
     <key>NSStringLocalizedFormatKey</key> 
     <string>%#@[email protected]</string> 
     <key>value</key> 
     <dict> 
      <key>NSStringFormatSpecTypeKey</key> 
      <string>NSStringPluralRuleType</string> 
      <key>NSStringFormatValueTypeKey</key> 
      <string>d</string> 
      <key>one</key> 
      <string>You have a new message.</string> 
      <key>other</key> 
      <string>You have %d new messages.</string> 
     </dict> 
    </dict> 
</dict> 
</plist> 

3: Localize oben Datei für jede Sprache finden Sie in Screenshot, wird die Datei für Englisch lokalisiert und Russisch langauges:

enter image description here

Verbrauch:

Ausgabe: Sie haben eine neue Nachricht.

String(format: NSLocalizedString("NumberOfMessages", comment: ""), 2) 

Ausgang: Sie haben 2 neue Nachrichten.

Plural Regeln: In XML-Code, Ankündigung <key>one</key> und <key>other</key>, hier können Sie verwenden zero, one, two, few, many, other je nach Sprache und Ihre Anforderungen.

Verwenden Weitere Informationen über sprachspezifische Regeln Plural folgenden Link: http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

3

This blog explains im Detail, was Plurale sind alles über. mit Codebeispielen für IOS.

In einigen Sprachen funktionieren Plural nicht auf die gleiche Weise wie in Englisch. Einige Sprachen geben keine Pluralformen an (z. B. Japanisch), , während sich bei anderen das Wort je nach Menge ändert (z. B. als Russisch).

Um die Dinge ein bisschen leichter zu machen, iOS die verschiedenen Plural Typen kategorisiert hat sich wie folgt:

  • Null. Wird verwendet, um eine 0-Menge anzuzeigen.
  • Eins. Wird verwendet, um eine Menge von genau 1 anzuzeigen.
  • Zwei. Wird verwendet, um eine Menge von genau 2 anzuzeigen.
  • Wenige. Wird verwendet, um eine kleine Menge größer als 2 anzugeben, dies hängt jedoch von der Sprache ab.
  • Viele. Wird verwendet, um eine große Zahl anzugeben, dies hängt jedoch auch von der Sprache ab.

Andere. Wird verwendet, um jede Nummer anzugeben, die nicht von den obigen Kategorien abgedeckt wird.

Nicht alle Sprachen müssen alle Kategorien angegeben haben, da alle anders arbeiten. Auf den ersten Blick würde es erscheinen, dass Englisch Regeln für null, eins und viele erfordern würde. Die Pluralregeln für Englisch würden jedoch mit einem und anderen angegeben werden, da alle Zahlen außer 1 gleich behandelt werden.

Um die Pluralregeln anzugeben, müssen Sie anstelle einer normalen Localizable.strings-Datei (Localizable.stringsdict) ein Strings-Dictionary verwenden. Tatsächlich muss die .strings-Datei immer noch vorhanden sein, damit das .stringsdict funktioniert, auch wenn es leer ist. Erstellen Sie eine neue Plist-Datei, und nennen Sie sie Localizable.stringsdict.Einmal aufgefüllt, die Rohdaten in dem Plist wird wie folgt aussehen:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    <plist version="1.0"> 
    <dict> 
     <key>number_of_days</key> 
     <dict> 
      <key>NSStringLocalizedFormatKey</key> 
      <string>%#@[email protected]</string> 
      <key>value</key> 
      <dict> 
       <key>NSStringFormatSpecTypeKey</key> 
       <string>NSStringPluralRuleType</string> 
       <key>NSStringFormatValueTypeKey</key> 
       <string>d</string> 
       <key>one</key> 
       <string>%d day remaining</string> 
       <key>other</key> 
       <string>%d days remaining</string> 
      </dict> 
     </dict> 
    </dict> 
    </plist> 

Und das ist, wie der Plural in Code verweisen:

let format = NSLocalizedString("number_of_days", comment: "") 
let message = String.localizedStringWithFormat(format, numDays) 

Wieder Kredit geht an Quentin

Verwandte Themen