Swe*_*per 30 string-formatting internationalization ios swift
我正在学习将我的应用本地化为简体中文.我正在按照本教程了解如何执行此操作.
因为本教程基于Obj-C,所以格式化的字符串可以这样写:
"Yesterday you sold %@ apps" = "Ayer le vendió %@ aplicaciones";
Run Code Online (Sandbox Code Playgroud)
"你喜欢?" ="~Es bueno?〜";
但我正在使用Swift.在Swift中,我认为你不能%@用来表明那里有东西可以放置.我们有字符串插值吗?
我的应用程序与数学有关.我想显示哪些输入用于计算表格视图单元格的详细标签中的结果.例如
--------------
1234.5678
From x, y <---- Here is the detailed label
--------------
Run Code Online (Sandbox Code Playgroud)
这里,From x, y表示"结果是从x和y计算的".我想把它翻译成中文:
? x, y ??
Run Code Online (Sandbox Code Playgroud)
之前,我可以使用这个:
"From \(someVariable)"
Run Code Online (Sandbox Code Playgroud)
与字符串文件:
"From" = "? ??";
Run Code Online (Sandbox Code Playgroud)
这就是我在代码中使用它的方式
"\(NSLocalizedString("From", comment: "")) \(someVariable)"
Run Code Online (Sandbox Code Playgroud)
但如果在中文版本中使用它,最终的字符串将是这样的:
"? ?? x, y"
Run Code Online (Sandbox Code Playgroud)
我的意思是我可以把?和??在字符串文件两个不同的条目.但有更好的方法吗?
Mar*_*n R 46
你可以%@在Swift 中使用String(format:...)它,它可以被Swift String或NSObject子类的任何实例代替.例如,如果Localizable.strings文件包含定义
"From %@, %@" = "? %@, %@ ??";
Run Code Online (Sandbox Code Playgroud)
然后
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))
Run Code Online (Sandbox Code Playgroud)
产生"从1.2,2.4得出".另一种选择是使用%f双浮点数的
格式:
"From %f, %f" = "? %f, %f ??";
Run Code Online (Sandbox Code Playgroud)
同
let text = String(format: NSLocalizedString("From %f, %f", comment: ""), x, y)
Run Code Online (Sandbox Code Playgroud)
有关 更好的解决方案,请参阅Niklas的答案,该解决方案也可以对数字表示进行本地化.
Nik*_*las 31
来自WWDC 2017:
let format = NSLocalizedString("%d popular languages", comment:"Number of popular languages")
label.text = String.localizedStringWithFormat(format, popularLanguages.count)
Run Code Online (Sandbox Code Playgroud)