2010-08-10 110 views
56

我曾嘗試使用一個變量作爲輸入參數到NSLocalizedString,但我回來的是輸入參數。我究竟做錯了什麼?是否有可能使用變量字符串值作爲NSLocalized字符串的索引?可能對NSLocalizedString使用變量和/或參數嗎?

例如,我有一些字符串需要顯示本地化版本。不過,我想使用一個變量作爲NSLocalizedString的參數,而不是一個常量字符串。同樣,我想在NSLocalizedString的參數中包含格式化元素,這樣我就可以使用相同的格式參數來檢索字符串的本地化版本。我能做到以下幾點:

案例1:可變NSLocalizedstring:

NSString *varStr = @"Index1"; 
NSString *string1 = NSLocalizedString(varStr,@""); 

案例2:格式化NSLocalizedString:

NSString *string1 = [NSString stringWithFormat:NSLocalizedString(@"This is an %@",@""),@"Apple"]; 

(請注意,變量可以包含任何東西,而不僅僅是一個固定的)

謝謝!

回答

4

事實證明,失蹤的目標條目是責任。只需檢查我的當前構建目標是否包含Localizable.string文件即可解決問題!

115

如果你想要的是返回的本地化版本「這是一個蘋果/橙/無所謂」,你會想:

NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil); 

(即,NSLocalizedString()[NSString stringWithFormat:]嵌套是相反的。 )

如果你想要的是格式進行本地化,但不能取代的價值,這樣做:

NSString *finalString = [NSString stringWithFormat:NSLocalizedString(@"SomeFormat", nil), @"Apple"]; 

並在您的Localizable.strings

SomeFormat = "This is an %@"; 
+0

是的,但變量可以包含任何東西,不只是「蘋果」或「橙子」。所以我需要保持靈活性。 – futureelite7 2010-08-10 04:24:10

+1

讓我附上我的答案以防萬一。 – Wevah 2010-08-10 09:28:48

+0

非常感謝你;附加的答案實際上是我正在尋找的 - 我希望你很快就會得到一個「接受」複選框。 – RonLugge 2012-11-22 03:13:44

0

您的想法應該工作。但是,如果您要取回輸入參數,那意味着在Localizable.strings文件中找不到輸入參數作爲鍵。檢查該文件的語法和位置。

4

如果你有你的本地化字符串在一個以上的變量,您可以使用此解決方案:

在Localizable.strings

"winpopup" = "#name# wins a #type# and get #points# points(s)"; 

並使用stringByReplacingOccurrencesOfString插入值

NSString *string = NSLocalizedString(@"winpopup", nil); //"#name# wins a #type# and get #points# points(s)" 
NSString *foo = [string stringByReplacingOccurrencesOfString:@"#name#" withString:gameLayer.turn]; 
NSString *fooo = [foo stringByReplacingOccurrencesOfString:@"#type#" withString:winMode]; 
NSString *msg = [fooo stringByReplacingOccurrencesOfString:@"#points#" withString:[NSString stringWithFormat:@"%i", pkt]]; 
NSLog(@"%@", msg); 
+0

非常有幫助!謝謝 – david 2012-05-31 06:33:25

+41

這看起來很複雜。你可以使用編號的佔位符: ''exampleKey「=」%1 $ @已經購買了%3 $ d蘋果和%2 $ d橙子。 @「Markus」,4,3]' 這會輸出:'馬庫斯買了3個蘋果和4個桔子'。 – denbec 2012-08-07 14:06:58

+7

而不是去解釋這些類型的密碼字符串給世界各地的翻譯人員。 – zeiteisen 2012-08-07 14:55:06

21

我只想添加一個非常有用的定義,我在很多項目中都使用它。

由機器人可能性的啓發,我已經添加了這個功能,我header prefix文件:

#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__] 

這允許你定義像下面這樣的本地化字符串:

"ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@."; 

,它可以是使用經由:

self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier); 
4

對於迅速:

let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount) 
相關問題