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

f8rj6qna  于 2023-01-14  发布在  iOS
关注(0)|答案(5)|浏览(181)

我正在学习将我的应用程序本地化为简体中文。我正在关注this tutorial如何做到这一点。
由于本教程基于Obj-C,因此格式化字符串可以如下编写:

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

“你喜欢吗?”=“~好吗?~";
但是我用的是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"

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

ercv8c1e

ercv8c1e1#

您 * 可以 * 在Swift的String(format:...)中使用%@,它可以被Swift StringNSObject子类的任何示例替代。

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

produces "从 1.2, 2.4 得出". Another option would be to use the %f format for double floating point numbers:

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

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

请参阅Niklas' answer,了解更好的解决方案,它也可以本地化数字表示。

tvokkenx

tvokkenx2#

WWDC 2017开始:

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

njthzxwz3#

快速本地化字符串

再举一个简单的例子

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

可本地化的.字符串

"stringId" = "Hello World and %@";
  • comment参数对结果没有影响,用于转换器,并由genstrings代码生成用作注解
j7dteeu8

j7dteeu84#

iOS 15和macOS Monterey中的新增功能,您可以对String使用新的改进方法。

String(localized: "From \(x), \(y)", comment: "The result is computed from x and y")

他们在2021年用Xcode做了很多本地化的更新。查看这个来自WWDC21的视频了解更多信息。
https://developer.apple.com/videos/play/wwdc2021/10221/

cgh8pdjw

cgh8pdjw5#

在目标C中,如果我们想在运行时添加字符串,如下所示
"约翰·苹果籽“是我的名字

您可本地化的.字符串

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

视图控制器.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/

相关问题