Swift 4.1中NSLocalizedString显示键而非对应字符串问题求助
解决NSLocalizedString显示键而非本地化文本的问题
嘿,我来帮你搞定这个问题~你现在遇到的是NSLocalizedString没有正确加载对应本地化文本,反而显示键名的情况,结合你给出的代码,咱们一步步排查:
先确认核心问题
你的代码逻辑本身是没问题的:
class TestClass { let name: String init(myName: String) { name = myName } } class TestString { var list = [TestClass]() init() { list.append(TestClass(myName: NSLocalizedString("Don", comment: "Test 1"))) list.append(TestClass(myName: NSLocalizedString("Amanda", comment: "Test 2"))) } }
问题出在本地化配置的环节,下面是最常见的几个排查点:
1. 检查Localizable.strings文件是否正确配置
- 有没有创建对应文件? 首先要确保你在项目里创建了
Localizable.strings文件(如果用了自定义文件名,要在NSLocalizedString的tableName参数里指定)。 - 键值对格式是否正确? 文件里的每一行必须是
"键" = "本地化文本";的格式,分号和引号都不能少,比如:
要是格式出错(比如漏了分号),系统会直接忽略这条配置,默认显示键名。"Don" = "唐"; "Amanda" = "阿曼达"; - 是否添加到Target? 选中
Localizable.strings文件,看右侧面板的「Target Membership」,确保勾选了你的应用Target,不然文件不会被打包进App。
2. 键名必须完全匹配
NSLocalizedString的键是大小写敏感的,比如你代码里用的是"Don",如果strings文件里写的是"don"(小写),系统就匹配不到,直接显示键名。一定要保证键的拼写、大小写、空格完全一致。
3. 设备/模拟器的语言设置要对应
- 如果你只配置了某一种语言的本地化,但测试设备的语言是未配置的语言,系统找不到对应文本,就会 fallback 显示键名。
- 可以在Xcode里强制指定测试语言:打开「Edit Scheme」→「Run」→「Options」→「Application Language」,选择你配置的语言,这样就能精准测试了。
4. 清理缓存重新构建
有时候Xcode的缓存会搞事情,试试这几步:
- 按下
Cmd+Shift+K清理Build Folder - 删除模拟器里的应用,重新安装运行
- 要是还不行,重启Xcode试试
内容的提问来源于stack exchange,提问作者Donsb
相关产品推荐
相关产品推荐

