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

如何正确构建含变量的本地化字符串键以实现多语言复数适配

解决方案

1. 定义本地化键

在Localizable.strings(对应各语言版本)中,为每个actionName单独定义带占位符的键,用key.作为前缀拼接actionName:

英文(en.lproj/Localizable.strings)

"key.run" = "%f runs";
"key.walk" = "%f walks";

中文(zh-Hans.lproj/Localizable.strings)

"key.run" = "%f 次跑步";
"key.walk" = "%f 次步行";

2. SwiftUI代码实现

通过动态拼接本地化键,再传入item.count作为参数完成格式化:

Text(String(localized: "key.\(item.actionName)", arguments: item.count))

3. 进阶:多语言复数规则适配

如果需要兼容俄语、阿拉伯语这类有复杂复数规则的语言,使用Localizable.stringsdict文件:
创建Localizable.stringsdict并添加如下内容(以key.run为例):

<dict>
    <key>key.run</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%#@count@</string>
        <key>count</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>f</string>
            <key>zero</key>
            <string>0 次跑步</string>
            <key>one</key>
            <string>1 次跑步</string>
            <key>other</key>
            <string>%f 次跑步</string>
        </dict>
    </dict>
</dict>

代码无需修改,系统会自动根据当前语言的复数规则匹配对应表述。

原方案失效原因

你之前的写法将动态的item.count和item.actionName直接嵌入字符串,Xcode会把它解析为通用占位符键key.%f %@,无法识别每个actionName对应的具体本地化键。通过将actionName作为键的静态部分,仅把动态值作为参数传入,就能让Xcode正确识别各语言的本地化条目。

内容的提问来源于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 12:25:10