2016-05-10 28 views
2

所以我正在使用我在SO上找到的擴展到NSString本地化一個項目。該擴展看起來像這樣:本地化一個字符串

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

但是我遇到了我的Localizable.strings列表中包含參數的字符串。例如:

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

以前,我是能夠做到這一點:

uiLabel.text = "localizedString".localized 

我該怎麼辦人士持有參數字符串類似的東西?

+0

也許你可以做一些事情[這樣的](http://stackoverflow.com/a/26277912/1219956)(讓你的'localized' VAR與可變參數的FUNC代替) – Fonix

回答

2

本地化鍵應該是這樣的:

"localized_key_name1" = "foo"; 

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

讓你localized變量爲函數,而

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) 
    }) 
    } 
} 

使用不帶參數

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

使用與參數

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

credit

+0

謝謝一堆!這幾乎工作。當我使用它時,它奇怪地打印params。所以使用:print(「explore_item_desc1」.localized(「param1」))將導致:歡迎租用我的Û! –

+0

啊嗯,奇怪的,讓我擺弄它一下 – Fonix

+0

它似乎很快有傳遞可變參數給其他函數有變量參數的問題,谷歌搜索後似乎很快只是不支持它正確 – Fonix