我正在尝试本地化我的 SwiftUI Watch 应用程序。 我对静态字符串没有任何问题。我在文本视图中使用 LocalizedKeyStrings,并在 Localizable.string 文件中添加翻译。 例如:
Text("history")
在 Localizable.strings 中:
"history" = "Historique";
结果: "历史">
但我也想使用插值来定位刺痛。例如:
Text("startCustom (format: "%.1f",customDistance)")
在Localizable.strings中,我尝试了不同的语法:
"startCustom %@" = "Course de %@ km";
或
"startCustom %f" = "Course de %f km";
或
"startCustom %.1f" = "Course de %.1f km";
什么都没用。 我没有找到任何文档...
显然,LocalizedStringKey
将根据内插值的类型自动生成本地化键。例如,如果您有以下Text
Text("title key")
Text("name key ("Club")")
Text("count key (8)")
Text("price key (6.25)")
您的 Localizable.string 文件应如下所示
"title key" = "Sandwiches";
"name key %@" = "Name: %@";
"count key %lld" = "%lld sandwiches";
// You can change the format specifier in the value, but not in the key.
"price key %lf" = "Price: %.2lf";
如果您想支持 32 位系统(iPhone 5 或更早版本(,请小心。在32位系统中,Int
是Int32
,"int32 key (Int32(8))"
的密钥是"int32 key %d"
。您始终可以将整数转换为Int64
,就像在"count key (Int64(8))"
中一样,以在不同的系统中强制实施一致的密钥。
注1:对于想知道它是如何工作的人。当你使用字符串文字或内插字符串(如Text
中的"count key (8)"
(时,编译器会将该字符串视为LocalizedStringKey
,因为Text
有一个初始值设定项
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil),
并且LocalizedStringKey
符合ExpressibleByStringLiteral
和ExpressibleByStringInterpolation
,因此可以从字符串文本或字符串插值隐式初始化。
注2:如果你不确定密钥是什么,你可以通过在调试器中po a LocalizedStringKey自己得到答案,如下所示:
po LocalizedStringKey("count key (8)")
以下简单即可(使用 Xcode 11.4 测试(
Text(String(format: NSLocalizedString("startCustom %.1f", comment: ""),
self.customDistance))
与 Localizable.string 具有
"startCustom %.1f" = "Course de %.1f km";
我的方式
可本地化的文件
"myNameIs %@" = "My name is %@.";
迅捷用户界面文件
struct TestLocalize: View {
var name = "Hien Nguyen"
var body: some View {
Text("myNameIs (name)")
}
}
结果
我叫阮贤