用于本地化目的的文本连接
Posted
技术标签:
【中文标题】用于本地化目的的文本连接【英文标题】:Text concatenation for localization purposes 【发布时间】:2019-11-25 06:07:49 【问题描述】:我正在尝试使用此方法本地化我的应用程序:How to implement localization in Swift UI
一般来说它是有效的。我发现的一个问题是文本连接。示例:我有文本“预订”的翻译。为了使它工作,我需要分离我以前的代码:
Text("bookings: 40")
成为:
Text("bookings")
.fontWeight(.bold)
+ Text(": 40")
.fontWeight(.bold)
翻译仍然有效。问题是现在我需要对文本进行两次格式化(在这个例子中:fontWeight,但有时它更复杂)。
我试着让它变得更简单,像这样:
Text("bookings" + ": 40)
.fontWeight(.bold)
此代码可在英语中使用,但现在尚未翻译成其他语言。我应该如何更改我的代码以使其正常工作并保持简单?
【问题讨论】:
【参考方案1】:Text
本地化适用于字符串插值,例如参见 WWDC 2019: What's new in Swift 会话视频、Localization in SwiftUI 或 this answer。
但是,您必须使用正确的格式说明符。对于字符串,它是%@
,对于整数它是%lld
。示例:
let value = 40
struct ContentView: View
var body: some View
Text("bookings: \(value)")
.fontWeight(.bold)
带有本地化条目
"bookings: %lld" = "Buchungen: %lld";
在 Localizable.strings 文件中,文本“Buchungen: 40”以粗体显示:
【讨论】:
非常感谢! :) 有用。但是,我稍微更改了代码。let stringValue = ": \(value)"
然后我只翻译"bookings%@" = "Buchungen%@";
。这样我就保持了这个标签的顺序:值
@mallow:不客气。 - 但实际上我的陈述“你必须先将整数转换为字符串”是错误的,我已经相应地更新了答案。
我在这里或其他地方看到的任何“%lld”或“%@”技术都没有成功,除了我之外,还有谁没有成功? XCode 11.4 b3.
@HelloTimo:我在写答案时为我工作——截图不是假的:)
@MartinR 毫无疑问。可能是当前的测试版错误。以上是关于用于本地化目的的文本连接的主要内容,如果未能解决你的问题,请参考以下文章