You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:49