You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Localizable.strings文件翻译Today Extension小组件?

嘿,我之前也踩过Widget本地化不生效的坑,折腾了好一阵才摸清楚门道,给你整理几个关键的排查点和正确操作步骤,应该能解决你的问题:

第一步:确认Localizable.strings文件的Target配置

这是最容易忽略的点!很多人只把本地化文件加到主App的Target里,却忘了Widget是独立的Extension Target,导致Widget根本读不到这些字符串:

  • 选中你的Localizable.strings文件,打开右侧的File Inspector
  • 在「Target Membership」区域,把Widget Extension对应的勾选框打上
  • 同时要确保文件已经正确本地化:点击Inspector里的「Localize...」按钮,添加你需要的语言(比如中文、英文),每种语言对应的.strings文件都要存在且格式正确(比如"widget_greeting" = "欢迎使用小组件";,注意引号和结尾的分号不能少)
第二步:在Widget代码里正确调用本地化字符串

Widget的Bundle和主App不一样,直接用NSLocalizedString会找不到资源,必须指定Widget自己的Bundle:

  • 推荐写个简单的String扩展,方便复用:
extension String {
    func widgetLocalized() -> String {
        // 这里的WidgetProvider是你Widget的TimelineProvider类,换成你自己的类名
        let widgetBundle = Bundle(for: WidgetProvider.self)
        return NSLocalizedString(self, bundle: widgetBundle, comment: "")
    }
}
  • 使用的时候直接调用:"widget_greeting".widgetLocalized()
  • 如果你的Widget支持Intent配置(比如可编辑的参数),还要记得给Intent的.strings文件也做同样的Target配置和本地化处理
第三步:清理缓存,彻底重建项目

Xcode的缓存经常会搞鬼,导致本地化不生效,按以下步骤来:

  • 先删除模拟器/真机上的App和Widget
  • 按下Cmd+Shift+K清理项目缓存
  • 再按下Cmd+Option+Shift+K清理构建文件夹
  • 最后重新运行项目,切换系统语言测试
额外排查小细节
  • 检查字符串Key的拼写:代码里的Key和.strings文件里的必须完全一致,大小写、空格都不能错
  • 如果是复杂的Widget布局(比如用SwiftUI),确保所有需要本地化的文本都用了上述的本地化方法,而不是硬编码的字符串

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

火山引擎 最新活动