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

时间:2016-02-10 13:31:23

标签: ios swift internationalization string-formatting

我正在学习将我的应用本地化为简体中文。我正在关注this tutorial如何做到这一点。

因为本教程基于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"

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

4 个答案:

答案 0 :(得分:35)

可以在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))

产生&#34;从1.2,2.4得出&#34;。另一种选择是使用 双浮点数的%f格式:

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

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

参见Niklas' answer 为了更好的解决方案,本地化数字表示 同样。

答案 1 :(得分:25)

来自WWDC 2017

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

答案 2 :(得分:0)

再举一个简单的例子

let changeable = "something"
let result = String(format: NSLocalizedString("stringId", comment: ""), arguments: [changeable]) // Hello World and something

localizable.strings with

"stringId" = "Hello World and %@";
  • comment 参数对结果没有影响,用于翻译器和 genstrings 代码生成作为注释

答案 3 :(得分:-4)

在目标C中,如果我们想在运行时添加字符串,如下所示

John Appleseed 是名称

<强> 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/