用于本地化目的的文本连接

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 毫无疑问。可能是当前的测试版错误。

以上是关于用于本地化目的的文本连接的主要内容,如果未能解决你的问题,请参考以下文章

将本地化的 iOS 应用拆分为单独的应用

如何将 Google Cloud Firestore 本地模拟器用于 python 和测试目的

套接字

在 MvvmCross ViewModels 中本地化文本

LTM_本地流量管理

UDP 打孔:PC 到 Android 的 UDP 连接不适用于非本地地址