xcodebuild --exportLocalization在与SwiftUI Text(NSLocalizedString(“key”,value:“value”)一起使用时产生无效内容

hkmswyz6  于 2023-10-22  发布在  Swift
关注(0)|答案(1)|浏览(152)

我在使用xcode(14.2)将字符串导出到XLIFF文件时遇到了一个问题
我的代码看起来像这样:

Text(NSLocalizedString("[feature] string key", value: "string value", comment: "string comment"))

当我导出本地化时(无论是通过xcode ui还是使用xcodebuild --exportLocalizations),我都会收到这样的警告:

WARNING: Key "[feature] string key" used with multiple values. Value "[feature] string key" kept. Value "string value" ignored

实际上,xliff文件包含等效的内容:

<trans-unit ... id="[feature] string key" ...>
  <source>[feature] string key</source>
  <target>[feature] string key</target>
  <note>string comment</note>
</trans-unit>

当代码被调整为将NSLocalizedString存储在一个变量中时,这个问题就消失了,就像这样:

let x = NSLocalizedString("[feature] string key", value: "string value", comment: "string comment")
Text(x)

有这种变通方法是可以的(也可能存在其他变通方法),但是很容易错误地使用无效模式,我想知道为什么会发生这种情况,以及是否有方法修复它。该项目在某种程度上一直使用Text(NSLocalizedString(...),它从来没有区分字符串键和它们的英文值(这是苹果推荐的afaik)
我几乎没有iOS/苹果生态系统开发人员的经验,我唯一的假设是,在提取过程中,违规代码被解释为这样的内容:

NSLocalizedString("[feature] string key", value: "string value", comment: "string comment")
Text("[feature] string key")

后者然后被“折叠”成一个字符串,其键和值都等于“[feature] string key”,但不知道如何看穿本地化导出过程的不透明性。
一些指南(即:how-to-localize-swiftui和xmltui本地化教程推荐了不适合我的确切模式。
在值得注意的构建设置中,我遇到的使用SWIFT_EMIT_LOC_STRINGS的项目设置为NO,而LOCALIZED_STRING_SWIFTUI_SUPPORT设置为YES。

os8fio9y

os8fio9y1#

我也碰到了这个。我注意到,如果我把NSLocalizedString拉到一个变量中,它会像预期的那样工作。

var body: some View {
    Text(x)
}

var x: String {
    NSLocalizedString("some.random.key", value: "An English String", comment: "A test string!")
}

相关问题