2016-05-10 14 views
2

Also lokalisiere ich ein Projekt mit einer Extension to NSString, die ich auf SO gefunden habe. Diese Erweiterung sieht folgendermaßen aus:Einen String lokalisieren

extension String { 
    var localized: String { 
     return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "") 
    } 
} 

Ich habe jedoch in meiner Localizable.strings-Liste Strings gefunden, die Parameter enthalten. Zum Beispiel:

"explore_item_desc1" = "Welcome to rent my %1$s!"; 

Bevor ich war in der Lage, dies zu tun:

uiLabel.text = "localizedString".localized 

Wie mache ich etwas Ähnliches für die Saiten halten Parameter?

+0

vielleicht können Sie etwas tun, [wie folgt] (http://stackoverflow.com/a/26277912/1219956) (machen Sie Ihre 'localized' var in einen func mit variablen Parametern statt) – Fonix

Antwort

2

Ihre lokalisierte Schlüssel sollte wie folgt aussehen:

"localized_key_name1" = "foo"; 

"localized_key_name2" = "%@ foo %@"; 

Machen Sie Ihre localized Variable in eine Funktion eher

extension String { 
    var localized: String { 
     return NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "") 
    } 
    func localized(args : CVarArgType...) -> String { 
     return withVaList(args, { (f:CVaListPointer) -> String in 
     (NSString.init(format:NSLocalizedString(self, comment:""), arguments: f) as String) 
    }) 
    } 
} 

Verwendung ohne Parameter

uiLabel.text = "localized_key_name1".localized // "foo" 

Verwendung mit Parametern

uiLabel.text = "localized_key_name2".localized("param1", "param2") // "param1 foo param2" 

credit

+0

Dank ein Bündel! Das funktioniert fast. Wenn ich es benutze, druckt es die Parameter jedoch merkwürdig. Mit: print ("explore_item_desc1" .localized ("param1")) ergibt sich: Willkommen bei ¯Ûò! –

+0

ah hmm, komisch, lassen Sie mich ein wenig damit herumspielen – Fonix

+0

es scheint, hat swift ein Problem mit der Weitergabe Variadic Argumente an andere Funktionen, die variadic Argumente haben, nach googlen um es scheint schnell nur unterstützt es noch nicht richtig – Fonix