2017-09-20 4 views
0

ich dieses Stück Code bin mit Daten Strings in Swift zu lokalisieren:Sprache genaue Daten Lokalisierung in Swift

if elapsedTime > 3600 { 
     let hourString = NSLocalizedString("hour ago", tableName: "v1.0.0", bundle: Bundle.main, value: "hour ago", comment: "") 
     let hoursString = NSLocalizedString("hours ago", tableName: "v1.0.0", bundle: Bundle.main, value: "hours ago", comment: "") 
     let hours = Int(elapsedTime/3600) 
     return "\(hours) " + (hours > 1 ? hoursString : hourString) 
} 

wo der elapsedTime ist ein Wert in Sekunden. Ergebnis für englische Lokalisierung ist

6 hours ago zum Beispiel. Ich muss dies ändern, um sprachspezifische Lokalisierung hinzuzufügen, zum Beispiel in Französisch sollte es nicht in einem Format von [N] hours ago aber il ya [N] heurs sein. Gibt es eine Möglichkeit, es zu automatisieren und zu vermeiden, dass spezifische Präfixe für verschiedene Sprachen hinzugefügt werden? Vielen Dank im Voraus!

+1

Sie "% @" verwenden können, "% d" und andere in "Localizable.string". Verwenden Sie einfach ein 'stringWithFormat:'. Außerdem gibt es eine Pluralverwaltung mit 'Localizable.stringsdict'. Das sollte den 'hours> 1'-Test vermeiden (und für verschiedene Sprachen kann der Text für 0, 1, 2 und mehr unterschiedlich sein. – Larme

+0

Danke, @Larme! Kannst du bitte deinen Kommentar transformieren, um ein wenig zu antworten Weitere Erklärungen zur Benutzung von stringWithFormat(): – Alex

+0

In Objective-C benutzen wir 'stringWithFormat:', in Swift neigen wir dazu, andere Sprachen zu benutzen (JavaScript, C++), mit '+' und '\ (var)' Das Dokument: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/FormatStrings.html und https://developer.apple.com/library/content/documentation/Cocoa/ Konzeptionelle/Strings/Artikel/formatSpecifiers.html # apple_ref/doc/uid/TP40004265-SW1 für stringDict: https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/StringsdictFileFormat/StringsdictFileFormat. html – Larme

Antwort

0

Basierend auf @Larme Kommentare Version arbeitet wie folgt aussieht:

if elapsedTime > 3600 { 
     let hours = Int(elapsedTime/3600) 
     let hourString = NSLocalizedString("hour ago", tableName: "v1.0.0", bundle: Bundle.main, value: "hour ago", comment: "") 
     let hoursString = String(format: NSLocalizedString("hours ago", tableName: "v1.0.0", bundle: Bundle.main, value: "\(hours) hours ago", comment: ""), 
          arguments: [hours]) 
     return (hours > 1 ? hoursString : hourString) 
    } 

Und das zu v1.0.0.strings (Französisch) vorgenommene Änderung ist

"hours ago" = "il y a %d heures"; 
Verwandte Themen