我正在学习将我的应用本地化为简体中文。我正在关注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"
我的意思是我可以将从
和得出
放在字符串文件中的两个不同的条目中。但是有更好的方法吗?
答案 0 :(得分:35)
您可以在Swift的%@
中使用String(format:...)
,它可以替代
通过Swift String
或NSObject
子类的任何实例。
例如,如果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/