iOS应用多语言本地化:复数形式配置问题求助
解决iOS Localizable.stringsdict多语言配置问题
嘿,我来帮你搞定这个iOS本地化复数的问题!你遇到的情况其实挺常见的,别慌,跟着下面的步骤操作就能解决:
1. 给stringsdict文件添加多语言本地化版本
和你之前创建Localizable.strings的逻辑一样,Localizable.stringsdict也需要为每种支持的语言生成对应的本地化文件,具体操作如下:
- 在Xcode的项目导航栏里选中你的
Localizable.stringsdict文件 - 打开右侧的File Inspector(就是那个显示文件属性的侧边面板)
- 找到Localization区域,点击
+号,选择你需要支持的语言(比如你之前配置的两种语言) - 确认后,Xcode会自动把stringsdict文件分配到对应语言的
.lproj文件夹下,和你的strings文件结构保持一致
2. 为每种语言配置复数规则
现在你可以针对不同语言,编辑各自的stringsdict文件,定义对应的复数格式。举两个常见的例子:
英文版本(en.lproj/Localizable.stringsdict)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 这里是你的复数键名,比如"unread_notifications" --> <key>unread_notifications</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@count@</string> <key>count</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>d</string> <!-- 英文复数分zero/one/other等情况 --> <key>zero</key> <string>No unread notifications</string> <key>one</key> <string>1 unread notification</string> <key>other</key> <string>%d unread notifications</string> </dict> </dict> </dict> </plist>
中文版本(zh-Hans.lproj/Localizable.stringsdict)
中文多数情况下复数不需要区分数量,只需要配置other即可:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>unread_notifications</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@count@</string> <key>count</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>d</string> <key>other</key> <string>%d条未读通知</string> </dict> </dict> </dict> </plist>
3. 代码中正确调用复数本地化
在代码里,你需要用localizedStringWithFormat来加载复数字符串,示例如下:
Swift代码
let notificationCount = 3 let localizedText = String.localizedStringWithFormat(NSLocalizedString("unread_notifications", comment: "Unread notifications count"), notificationCount)
Objective-C代码
NSInteger notificationCount = 3; NSString *localizedText = [NSString localizedStringWithFormat:NSLocalizedString(@"unread_notifications", @"Unread notifications count"), notificationCount];
几个注意点
- 确保stringsdict的文件名和strings文件完全一致(都是
Localizable),这样系统才能正确匹配 - 如果添加语言后在项目导航栏看不到对应的stringsdict文件,可以展开语言的
.lproj文件夹查看 - 不同语言的复数规则差异很大(比如阿拉伯语有6种复数类型),Xcode会根据语言自动适配规则,你只需要在stringsdict里配置对应规则的键值对就行
内容的提问来源于stack exchange,提问作者Marcin Szymański
相关产品推荐
相关产品推荐

