2016-02-10 122 views
14

我正在學習將我的應用本地化爲簡體中文。我正在關注如何做到這一點的this tutorial如何在Swift中格式化本地化的字符串?

因爲教程基於對象 - ,格式化字符串可以這樣寫:「你喜歡」

"Yesterday you sold %@ apps" = "Ayer le vendió %@ aplicaciones"; 

=「〜Es bueno?〜」;

但我使用的是Swift。在Swift中,我不認爲你可以使用%@來表示有一些東西要放在那裏。我們有字符串插值的權利?

我的應用程序是一種有關數學。我想要顯示哪些輸入用於計算表格視圖單元格的詳細標籤中的結果。例如

-------------- 
1234.5678 
From x, y <---- Here is the detailed label 
-------------- 

這裏,From x, y意思是 「的結果從x和y計算的」。我想這個翻譯成中國:

從 x, y 得出 

之前,我就可以用這個:

"From \(someVariable)" 

與字符串文件:

"From" = "從 得出"; 

這是我會怎麼用它代碼

"\(NSLocalizedString("From", comment: "")) \(someVariable)" 

但是,如果我們重新在中國版中,最後一個字符串將是這樣的:

"從 得出 x, y" 

我的意思是,我可以把得出在兩個不同的條目中的字符串文件。但有沒有更好的方法來做到這一點?

回答

21

在斯威夫特的String(format:...)可以使用%@,它可以通過斯威夫特StringNSObject子類的任何實例取代 。 例如,如果Localizable.strings文件包含定義

"From %@, %@" = "從 %@, %@ 得出"; 

然後

let x = 1.2 
let y = 2.4 
let text = String(format: NSLocalizedString("From %@, %@", comment: ""), "\(x)", "\(y)") 
// Or alternatively: 
let text = String(format: NSLocalizedString("From %@, %@", comment: ""), NSNumber(double: x), NSNumber(double: y)) 

產生 「從1.2,2.4得出」。另一種選擇是使用 %f格式雙浮點數:

"From %f, %f" = "從 %f, %f 得出"; 

let text = String(format: NSLocalizedString("From %f, %f", comment: ""), x, y) 

對於一個更好的解決方案,本地化數字表示 以及見Niklas' answer

+0

是否有指定參數的順序或插入一個參數多次的方法嗎?在某些語言中,插入順序可能會顛倒。 Android允許在格式說明符之前使用'%1'和'%2'。 – Suragch

+0

比'%s'更好地使用'%@'(對於字符串)? – Suragch

+0

@Suragch:'%s'存在編碼問題,例如https://stackoverflow.com/a/23672885。 - 我*認爲像'%1 $ s'這樣的位置參數也適用於此。 –

-2

在客觀C,如果我們想在運行時添加字符串如下

約翰蘋果核戰記是名

YourLocalizable.strings

"theStringToDisplay" = "%@ is the name"; 

的ViewController .m

NSString *username = @"John Appleseed"; 
NSString *messageBeforeFormat = NSLocalizedStringFromTable(@"theStringToDisplay", @"YourLocalizable", nil); 
NSString *messageAfterFormat = [NSString stringWithFormat:messageBeforeFormat, username ]; 

self.yourLabel.text = messageAfterFormat; 

在這個不錯的職位

https://www.oneskyapp.com/academy/learn-ios-localization/2-format-strings-plurals/

7

WWDC 2017進一步解釋:

let format = NSLocalizedString("%d popular languages", comment:"Number of popular languages") 
label.text = String.localizedStringWithFormat(format, popularLanguages.count) 
+0

我相信這是最好的答案,因爲String.localizedStringWithFormat(_,...)將本地化數字的實際數字(例如德語的交換逗號和句點)和String(格式:...)將不。你也可以使用'String(format:「%f」,locale:Locale.current,number)'。 –

相關問題