You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode14.2导出本地化时SwiftUI嵌套NSLocalizedString异常

Xcode 14.2嵌套NSLocalizedString进Text导出XLIFF的键值冲突问题

问题重现

在Xcode 14.2中,直接在Text构造器里嵌套NSLocalizedString时:

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文件里,对应条目的source和target会被错误设置为键名,而非传入的value参数:

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

将NSLocalizedString先赋值给变量再传入Text,则能生成正确的XLIFF条目:

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

问题成因

这是Xcode 14.2本地化解析逻辑的bug,结合你的构建设置(LOCALIZED_STRING_SWIFTUI_SUPPORT=YES)产生冲突:

  • 开启LOCALIZED_STRING_SWIFTUI_SUPPORT后,Xcode会自动把Text的字符串字面量参数识别为本地化键,生成键值相同的本地化条目
  • 同时,Xcode会独立解析NSLocalizedString调用,提取键、值、注释生成另一条本地化条目
  • 当NSLocalizedString直接嵌套在Text中时,Xcode会将同一个键关联到两个不同的值(一个是Text自动识别的键名,另一个是NSLocalizedString的value参数),最终保留前者,忽略后者
  • 你的推测是正确的:Xcode确实把嵌套写法拆成了两个独立的本地化来源,导致键值冲突

修复方案

1. 临时规避写法

将NSLocalizedString结果先赋值给局部变量,再传入Text,避免Xcode同时触发两种解析逻辑:

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

2. 项目级根治方案

关闭SwiftUI自动本地化

将构建设置中的LOCALIZED_STRING_SWIFTUI_SUPPORT设为NO,这样Xcode只会解析显式的NSLocalizedString调用,不会自动识别Text的字符串参数。

注意:关闭后所有需要本地化的Text必须显式包裹本地化API,不能直接写字符串字面量。

使用SwiftUI原生本地化语法

改用Text的本地化构造器,既符合SwiftUI规范,又能避免解析冲突:

// 基础写法,键即默认英文值
Text("[feature] string key", comment: "string comment")

// 自定义默认值的写法
Text(LocalizedStringKey("[feature] string key"), tableName: nil, bundle: .main, value: "string value", comment: "string comment")

这种写法下,Xcode导出XLIFF时会正确提取键、默认值和注释。

3. 升级Xcode版本

该bug在Xcode 14.3及后续版本中已被修复,升级后无需修改代码,直接使用嵌套写法即可正常导出XLIFF。

内容的提问来源于stack exchange,提问作者dahpgjgamgan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:50:18