SwiftUI中List内Localizable.strings本地化不生效问题求助
问题根因
你遇到的问题核心是直接将变量插值后生成的字符串作为本地化key,和Localizable.strings中定义的固定占位符key无法匹配。你写的Text("game-number #\(gameNumber)")会在运行时把gameNumber的实际值(比如20、30)拼接到字符串里,生成game-number #20、game-number #30这类动态key,自然匹配不到你定义的game-number #%d固定key。
解决方案
方案1:使用Foundation格式化方法(兼容性强)
这是最稳妥的写法,代码如下:
Text(String(format: NSLocalizedString("game-number #%d", comment: ""), gameNumber))
需要确认两个配置点:
- 所有语言的Localizable.strings文件中,都存在
"game-number #%d"对应的键值对,不要漏写某一语言的配置 - 检查Localizable.strings的Target Membership是否勾选了你的运行目标,避免资源没有打包进APP
方案2:使用SwiftUI原生本地化插值语法(写法更简洁)
SwiftUI的LocalizedStringKey原生支持参数插值,不需要手动调用格式化方法:
- 先修改Localizable.strings中的占位符,适配Swift Int类型:
"game-number #%lld" = "Spiel #%lld";
- 直接保留原来的Text写法即可,SwiftUI会自动匹配对应占位符的key完成替换:
Text("game-number #\(gameNumber)")
异常排查
如果修改后还是不生效,先按以下步骤操作排除缓存问题:
- 按
Command+Shift+K清理Xcode缓存 - 删除模拟器/真机上的旧APP,重新安装运行
内容的提问来源于stack exchange,提问作者Alexander Farber
相关产品推荐
相关产品推荐

