localization - 在 SwiftUI 中使用字符串插值进行本地化
问题描述
我正在尝试本地化我的 SwiftUI Watch 应用程序。我对静态字符串没有任何问题。我在我的文本视图中使用 LocalizedKeyStrings 并将我的翻译添加到 Localizable.strings 文件中。例如:
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";
没有任何效果。我没有找到任何文档...
解决方案
显然, aLocalizedStringKey
将根据插值的类型自动生成本地化键。例如,如果您有Text
以下
Text("title key")
Text("name key \("Club")")
Text("count key \(8)")
Text("price key \(6.25)")
您的 Localizable.strings 文件应如下所示
"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
isInt32
的键"int32 key \(Int32(8))"
是"int32 key %d"
。您始终可以将整数转换为Int64
like in"count key \(Int64(8))"
以在不同系统中强制使用一致的键。
备注1:对于想知道它是如何工作的人。当您使用字符串文字或插值字符串(例如"count key \(8)"
in Text
)时,编译器会将字符串视为 a LocalizedStringKey
,因为Text
有一个初始化器
init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil),
andLocalizedStringKey
符合ExpressibleByStringLiteral
andExpressibleByStringInterpolation
因此可以从字符串文字或字符串插值中隐式初始化。
备注 2:如果您不确定密钥是什么,您可以自己在调试器中通过 po a LocalizedStringKey 得到答案,如下所示:
po LocalizedStringKey("count key \(8)")
推荐阅读
- ms-access - 访问 VB IIf 和 dlookup
- javascript - 如何在没有 JS SDK 的情况下向 LinkedIn API v2 和 OAuth 2.0 发出请求?
- amazon-web-services - 登录 Spring Boot-docker
- c# - 在 VSTO C# Office 解决方案中使用用 OCaml 编写的库
- php - 我在使用 php 时遇到了模态问题
- wordpress - 古腾堡区块验证失败
- laravel-5 - 做一个返回多个创建函数 Laravel
- excel - 手写后运行时错误 1004 消失
- c# - 两个类之间的绑定和属性更改
- wordpress - 如何隐藏 Wordpress 仪表板中的管理菜单项?