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

如何在Swift Packages间共享String Catalog翻译内容?

问题描述

我正在使用两个Swift包,并通过字符串目录.xcstrings管理本地化内容。每个包都有自己的特定本地化键,但我还需要复用一些通用键(如ok_button_title)。

我希望避免在每个包中重复相同的翻译条目,理想状态下这些共享翻译有单一可信源。我尝试了以下代码引用主应用bundle中的翻译键:

String(
  localized: "ok_button_title",
  table: "Localizable",
  bundle: .main,
  comment: "Ok button title"
)

这能从主bundle获取翻译,但不会自动在Swift包的字符串目录中创建对应键。

请问:

  • 能否在Swift包中直接复用主bundle的翻译?
  • 有没有办法自动在Swift包的字符串目录中生成键?
  • 抑或此行为是预期而非bug?
解决方案与说明
  • 可以直接复用主bundle的翻译:你当前的代码写法就是有效的实现方式。通过明确指定bundle: .main,Swift包可以直接读取主应用bundle内的通用翻译内容,无需在包自身的.xcstrings中重复添加这些键的翻译条目。需要注意的是,主应用bundle必须包含这些通用键的对应翻译,否则会 fallback 到键名本身作为默认显示内容。

  • 无法自动生成包内的对应键:目前Xcode的.xcstrings自动提取功能仅扫描当前包范围内的代码,不会识别引用外部bundle的本地化键并自动在包的.xcstrings中生成条目。如果需要包的.xcstrings中存在这些键,只能手动添加,或者自行编写脚本遍历代码中引用外部bundle的键,批量导入到包的.xcstrings文件中。

  • 此行为是预期设计,而非bug:Xcode的本地化提取逻辑是基于当前模块(Swift包)的独立可控性设计的,每个包的本地化资源默认只关联自身代码中定义的键。引用外部bundle的键不属于当前包的本地化范畴,因此不会自动生成对应条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:49:58