如何格式化 Swift 中的本地化字符串?
How to format localised strings in Swift?
我正在学习将我的应用程序本地化为简体中文。我正在关注 this tutorial 如何执行此操作。
因为教程是基于Obj-C的,格式化字符串可以这样写:
"Yesterday you sold %@ apps" = "Ayer le vendió %@ aplicaciones";
"You like?" = "~Es bueno?~";
但我正在使用 Swift。在 Swift 中,我认为您不能使用 %@
来表示有东西要放在那里。我们有字符串插值吗?
我的应用程序与数学有点相关。我想在 table 视图单元格的详细标签中显示用于计算结果的输入。例如
--------------
1234.5678
From x, y <---- Here is the detailed label
--------------
这里,From x, y
表示"The result is computed from x and y"。我想把这个翻译成中文:
从 x, y 得出
以前,我只能用这个:
"From \(someVariable)"
使用字符串文件:
"From" = "从 得出";
这就是我在代码中使用它的方式
"\(NSLocalizedString("From", comment: "")) \(someVariable)"
但是如果在中文版中使用这个,最后的字符串会是这样的:
"从 得出 x, y"
我的意思是我可以将 从
和 得出
放在字符串文件的两个不同条目中。但是有更好的方法吗?
你可以在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))
产生“从1.2, 2.4得出”。另一种选择是使用
%f
双浮点数的格式:
"From %f, %f" = "从 %f, %f 得出";
和
let text = String(format: NSLocalizedString("From %f, %f", comment: ""), x, y)
见
一个更好的解决方案,将数字表示本地化
还有。
在objective 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;
进一步解释这个很好 post
https://www.oneskyapp.com/academy/learn-ios-localization/2-format-strings-plurals/
来自WWDC 2017:
let format = NSLocalizedString("%d popular languages", comment:"Number of popular languages")
label.text = String.localizedStringWithFormat(format, popularLanguages.count)
再举一个简单的例子
let changeable = "something"
let result = String(format: NSLocalizedString("stringId", comment: ""), arguments: [changeable]) // Hello World and something
localizable.strings 和
"stringId" = "Hello World and %@";
comment
参数对结果没有影响,用于翻译器和 genstrings
code-gen 作为评论
iOS 15 和 macOS Monterey 中的新功能,您可以对字符串使用新的改进方法。
String(localized: "From (x), (y)", comment: "结果是从 x 和 y 计算出来的")
他们在 2021 年使用 Xcode 进行了大量本地化更新。观看 WWDC21 视频了解更多信息。
我正在学习将我的应用程序本地化为简体中文。我正在关注 this tutorial 如何执行此操作。
因为教程是基于Obj-C的,格式化字符串可以这样写:
"Yesterday you sold %@ apps" = "Ayer le vendió %@ aplicaciones";
"You like?" = "~Es bueno?~";
但我正在使用 Swift。在 Swift 中,我认为您不能使用 %@
来表示有东西要放在那里。我们有字符串插值吗?
我的应用程序与数学有点相关。我想在 table 视图单元格的详细标签中显示用于计算结果的输入。例如
--------------
1234.5678
From x, y <---- Here is the detailed label
--------------
这里,From x, y
表示"The result is computed from x and y"。我想把这个翻译成中文:
从 x, y 得出
以前,我只能用这个:
"From \(someVariable)"
使用字符串文件:
"From" = "从 得出";
这就是我在代码中使用它的方式
"\(NSLocalizedString("From", comment: "")) \(someVariable)"
但是如果在中文版中使用这个,最后的字符串会是这样的:
"从 得出 x, y"
我的意思是我可以将 从
和 得出
放在字符串文件的两个不同条目中。但是有更好的方法吗?
你可以在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))
产生“从1.2, 2.4得出”。另一种选择是使用
%f
双浮点数的格式:
"From %f, %f" = "从 %f, %f 得出";
和
let text = String(format: NSLocalizedString("From %f, %f", comment: ""), x, y)
见
在objective 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;
进一步解释这个很好 post
https://www.oneskyapp.com/academy/learn-ios-localization/2-format-strings-plurals/
来自WWDC 2017:
let format = NSLocalizedString("%d popular languages", comment:"Number of popular languages")
label.text = String.localizedStringWithFormat(format, popularLanguages.count)
再举一个简单的例子
let changeable = "something"
let result = String(format: NSLocalizedString("stringId", comment: ""), arguments: [changeable]) // Hello World and something
localizable.strings 和
"stringId" = "Hello World and %@";
comment
参数对结果没有影响,用于翻译器和genstrings
code-gen 作为评论
iOS 15 和 macOS Monterey 中的新功能,您可以对字符串使用新的改进方法。 String(localized: "From (x), (y)", comment: "结果是从 x 和 y 计算出来的")
他们在 2021 年使用 Xcode 进行了大量本地化更新。观看 WWDC21 视频了解更多信息。