iOS应用从Polyglot拉取新密钥后仅显示密钥而非翻译,如何解决?
我之前处理过好几起类似的本地化显示问题,大概率是资源加载或配置环节出了疏漏,给你几个具体的排查和解决方向:
检查Polyglot导出与项目导入的正确性:
首先确认Polyglot导出的是iOS兼容的strings或stringsdict文件,打开导出的文件看看,每个密钥对应的翻译值是否正确填充,有没有出现只存密钥、翻译为空的情况。导入项目时,要把文件放在对应语言的.lproj目录下(比如zh-Hans.lproj、en.lproj),还要在Xcode中选中这些文件,查看右侧属性面板的“Localization”选项,确保你需要的语言都已勾选。验证代码中的本地化调用逻辑:
确保你在代码中是用NSLocalizedString(key, comment: "")(Swift)或者NSLocalizedString(key, nil)(OC)来获取翻译内容的,密钥名称要和Polyglot里的完全一致——注意大小写、特殊字符,哪怕差一个下划线都会导致显示密钥而非翻译。如果项目用了自定义的本地化工具类,一定要检查工具类内部是否正确读取了项目中的strings文件,有没有路径错误或者硬编码的问题。核对Xcode的本地化项目配置:
打开项目的Info.plist,检查CFBundleLocalizations数组,确认你测试的语言已经添加进去。同时,要保证测试用的模拟器/真机系统语言已经切换到你有翻译的语言——如果系统语言不在App支持的本地化列表里,App会 fallback 到默认语言,要是默认语言没配置翻译,就会直接显示密钥。清理缓存并重新构建项目:
Xcode的缓存有时候会导致旧资源无法更新,试试执行Cmd+Shift+K清理Build Folder,再手动删除Derived Data(可以通过Xcode的Preferences > Locations找到路径),之后重新运行项目。如果你的项目依赖了CocoaPods,也可以执行pod install更新一下依赖,确保本地化相关的组件是最新状态。检查Polyglot的同步配置:
回到Polyglot后台,确认同步设置里的导出规则是正确的——有没有指定要导出翻译内容,是不是只同步了密钥列表?可以重新导出一次文件,对比之前的版本,看看翻译值是否正常导出。另外,检查有没有某些语言的翻译未完成,导致同步后对应语言的strings文件里只有密钥。
内容的提问来源于stack exchange,提问作者nejcpintar

