我在使用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。
1条答案
按热度按时间os8fio9y1#
我也碰到了这个。我注意到,如果我把
NSLocalizedString
拉到一个变量中,它会像预期的那样工作。