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

如何在String Catalog中实现无数字显示的标签复数处理

iOS本地化:只显示复数名词不展示数字的解决方案

方法一:用stringsdict定义复数规则(推荐)

这种方式能复用iOS原生的复数处理逻辑,同时只输出名词:

  1. 创建/编辑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>
    <key>"action_plural"</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%#@rule@</string>
        <key>rule</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>d</string>
            <!-- 英文规则,其他语言对应修改即可 -->
            <key>zero</key>
            <string>%@s</string>
            <key>one</key>
            <string>%@</string>
            <key>other</key>
            <string>%@s</string>
        </dict>
    </dict>
</dict>
</plist>

这里的%@用来传入动作名称(比如"tap"),item.actionCount作为复数判断的依据。

  1. 代码里调用格式化方法,只获取复数后的名词:
VStack(alignment: .center, spacing: 0) {
    Text("\(stepperValue)")
    let pluralizedAction = String.localizedStringWithFormat(
        NSLocalizedString("action_plural", comment: "Plural form of action name"),
        actionNameVariable,
        item.actionCount
    )
    Text(pluralizedAction)
}

这样iOS会根据数字自动匹配正确的复数形式,最终文本只显示动作名词,不会带数字。

方法二:针对动作名单独定义复数键(适合动作少的场景)

如果你的应用里动作类型不多,可以直接在Localizable.strings里给每个动作的单复数单独定义键:
比如英文的Localizable.strings:

"tap_single" = "tap";
"tap_multiple" = "taps";
"swipe_single" = "swipe";
"swipe_multiple" = "swipes";

然后代码里根据数字选择对应键:

VStack(alignment: .center, spacing: 0) {
    Text("\(stepperValue)")
    let keySuffix = item.actionCount == 1 ? "single" : "multiple"
    let localizedKey = "\(actionNameVariable)_\(keySuffix)"
    Text(NSLocalizedString(localizedKey, comment: "Plural action name"))
}

这种方式简单直接,不需要维护复杂的stringsdict文件。

核心要点

  • 基础语言(比如英文)必须保留数字作为复数判断的依据,不能直接移除数字相关逻辑,而是通过格式化规则只输出名词部分。
  • 其他语言只需要在对应本地化文件里,按照自身复数规则定义对应的名词文本即可,完全不用包含数字。

内容的提问来源于stack exchange,提问作者Whirlwind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:53:17