App已切换目标语言,但Widget始终忽略该语言设置
Widget Target未启用意大利语本地化
主APP的本地化设置不会自动同步到Widget Extension。打开Xcode,选中你的Widget Target,进入「Info」标签页,在「Localizations」列表中确认已添加意大利语(it),同时确保对应的本地化strings文件已勾选关联到Widget Target。NSLocalizedString未指定Widget专属Bundle
Widget作为独立Extension有自己的Bundle,若使用NSLocalizedString时未指定Bundle,会默认调用主APP的Bundle,导致加载不到Widget的本地化资源。正确写法示例:NSLocalizedString("your_localized_key", bundle: Bundle.module, comment: "")若未使用Swift Package Manager,也可通过
Bundle(for: WidgetProvider.self)手动获取Widget的Bundle实例。Widget的Info.plist缺失本地化配置项
检查Widget Target的Info.plist,确保添加了CFBundleLocalizations数组,包含en和it两个元素;同时确认CFBundleDevelopmentRegion设置为正确的基准语言(如en)。缓存残留导致旧本地化内容未更新
彻底删除设备上的APP及Widget,清理Xcode的Derived Data(路径:Xcode > Settings > Locations > Derived Data),然后重新编译安装。iOS Widget的缓存机制有时会保留旧资源,强制刷新才能生效。应用语言与Widget的同步问题
虽然你已在iOS设置中为应用单独切换意大利语,但Widget可能未同步该设置。可以尝试:- 在系统设置中将意大利语移至语言列表首位,测试Widget是否正常显示;
- 确认主APP的
Info.plist中NSLocalizations包含it,且代码中未强制覆盖AppleLanguages设置。
内容的提问来源于stack exchange,提问作者Fez Vrasta

