Swift Localizable.stringsdict波兰语本地化返回错误键问题
解决iOS波兰语本地化中Localizable.stringsdict复数规则错误问题
搞定iOS波兰语复数本地化的坑我熟,给你列几个必查的点,大概率能解决你的问题:
先核对波兰语的复数规则配置
波兰语的复数规则比英语复杂得多,不是简单的zero/one/other,它的规则是:- 0 → zero形式
- 1 → one形式
- 2-4 → few形式
- 5及以上 → many形式
你现在的配置里只提到了zero,大概率是缺了few和many这两个关键键。正确的配置示例应该是这样的:
<key>general_people_number</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@value@</string> <key>value</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>d</string> <key>zero</key> <string>Brak osób</string> <key>one</key> <string>1 osoba</string> <key>few</key> <string>%d osoby</string> <key>many</key> <string>%d osób</string> </dict> </dict>检查文件的格式与编码
- 确保你的Localizable.stringsdict是UTF-16编码,这是iOS本地化文件的标准要求,用UTF-8可能会导致解析失败。
- 仔细检查XML结构,有没有遗漏闭合标签?你代码里
zero后面的...如果是实际未完成的标签,那肯定会让整个键解析出错,返回错误值。
确认本地化文件的存放位置
要把波兰语的Localizable.stringsdict放在pl.lproj文件夹里,而不是Base.lproj或者其他语言的文件夹。同时去项目设置的Project -> Info -> Localizations里确认波兰语已经被添加为支持的语言。验证代码调用是否正确
调用复数本地化的方式不能错,比如Swift里应该这么写:let peopleCount = 4 let localizedText = String.localizedStringWithFormat(NSLocalizedString("general_people_number", comment: "Number of people"), peopleCount)如果直接用
NSLocalizedString不带参数,会返回原始的格式字符串%#@value@,而不是解析后的复数文本。清理缓存再重新编译
iOS有时候会缓存旧的本地化文件,试试这几步:- 用Cmd+Shift+K清理项目缓存
- 删除模拟器/真机上的App,重新安装
- 如果用模拟器,直接重置内容和设置
排查键名冲突
检查项目里的Localizable.strings文件有没有定义同名的general_people_number键,虽然stringsdict优先级更高,但冲突可能会导致解析异常。
内容的提问来源于stack exchange,提问作者Marcin Szymański
相关产品推荐
相关产品推荐

