一尘不染

如何在Swift中格式化本地化字符串?

swift

我正在学习将我的应用本地化为简体中文。我正在按照本教程进行操作。

因为本教程基于Obj-C,所以格式化后的字符串可以这样写:

"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"

我的意思是我可以将and和得出放在字符串文件中的两个不同条目中。但是有更好的方法吗?


阅读 458

收藏
2020-07-07

共1个答案

一尘不染

可以%@在Swift的中使用String(format:...),它可以由Swift
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的答案以获得更好的解决方案,该解决方案还可以对数字表示形式进行本地化。

2020-07-07