siz*_*eam 13 string localization swift swiftui
String.localizedStringWithFormat(_:_:)SwiftUI 中的等价物是什么?
我知道LocalizedStringKey.init(:)可以使用字符串插值,但据我所知,这需要在 .strings/.stringsdict 文件中参数化可本地化的字符串键。
这与我正在开发的应用程序中当前定义本地化字符串键的方式不同。鉴于 Localizable.strings 中的这些可本地化字符串:
"HELLO_WORLD" = "Hello, world!";
"HELLO_WORLD_PARAMETERIZED" = "Hello, %@!";
Run Code Online (Sandbox Code Playgroud)
这在 Foundation/UIKit 世界中工作得很好:
"HELLO_WORLD" = "Hello, world!";
"HELLO_WORLD_PARAMETERIZED" = "Hello, %@!";
Run Code Online (Sandbox Code Playgroud)
但我不知道如何让它在 SwiftUI 中工作:
NSLocalizedString("HELLO_WORLD", comment: "") // "Hello, world!"
String.localizedStringWithFormat(NSLocalizedString("HELLO_WORLD_PARAMETERIZED", comment: ""), "Bob") // "Hello, Bob!"
Run Code Online (Sandbox Code Playgroud)
我是否必须将所有可本地化的字符串键(而不是仅它们的值)更改为参数化,以便能够在 SwiftUI 视图中使用它们(不使用Text(verbatim:)变通方法)?
我也遇到了这个问题,多亏了一些来源和链接,我想我让它以预期的方式工作。
成功时我正在使用 XCode12 Beta 6,我无法确认/确认其他版本。
翻译键需要反映您将在 SwiftUI 中使用的内插字符串,其中每个参数都被表示参数类型的字符串格式说明符替换。
在您的示例中,您想插入一个String作为参数。这对应于说明%@符。
重写你Localizable.strings的:
"HELLO_WORLD" = "Hello, world!";
"HELLO_WORLD_PARAMETERIZED %@" = "Hello, %@!";
Run Code Online (Sandbox Code Playgroud)
要在 a 中使用它Text:
Text("HELLO_WORLD_PARAMETERIZED \(someStringVar)")
Run Code Online (Sandbox Code Playgroud)
如果要使用UInt参数,请使用%llu标识符,%lldfor Int(请参阅字符串格式说明符链接)
相同的规则适用于.stringdict,使用相同的模式命名键:
<dict>
<key>%llu elements</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@VARIABLE@</string>
<key>VARIABLE</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>llu</string>
<key>zero</key>
<string>No elements</string>
<key>one</key>
<string>One element</string>
<key>other</key>
<string>%llu elements</string>
</dict>
</dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
要使用密钥:
Text("\(someUIntVarValue) elements")
Run Code Online (Sandbox Code Playgroud)