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

如何在stringsdict文件中引用Localizable.strings的字符串以避免重复?

苹果原生的stringsdict格式本身不支持直接嵌套引用Localizable.strings中的key,无法直接通过配置实现你要的自动引用效果,目前有两种可落地的实现方案:


方案1:运行时二次拼接(改动最小,适合小型项目)

  1. 先把通用字符串存入Localizable.strings:
"UNIT_DAY" = "day";
"UNIT_DAYS" = "days";
  1. 修改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>GLOBAL_JOUR</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%#@VARIABLE@</string>
        <key>VARIABLE</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>u</string>
            <key>zero</key>
            <string>0 %@</string>
            <key>one</key>
            <string>1 %@</string>
            <key>other</key>
            <string>%u %@</string>
        </dict>
    </dict>
</dict>
</plist>
  1. 封装统一的调用方法,把本地化后的单位作为参数传入:
// Swift 示例
func localizedDayString(count: UInt) -> String {
    let unit = NSLocalizedString(count == 1 ? "UNIT_DAY" : "UNIT_DAYS", comment: "")
    let format = NSLocalizedString("GLOBAL_JOUR", comment: "")
    return String(format: format, count, unit)
}

// 调用示例
let threeDayStr = localizedDayString(count: 3)

方案2:构建阶段预替换(无运行时开销,适合大型多语言项目)

你可以在Xcode的构建流程中加入自定义脚本:

  • 给stringsdict中需要引用的位置写自定义占位符,比如{{UNIT_DAY}}、{{UNIT_DAYS}}
  • 脚本在编译前自动读取Localizable.strings的键值对,把stringsdict中的所有占位符替换成对应的本地化字符串
  • 替换后的stringsdict参与后续编译,运行时完全走原生逻辑,不需要额外处理

这种方案的优势是完全不影响运行时性能,同时可以实现通用字符串的一处修改、多处生效,适合有大量通用单位、重复复数字符串的项目。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:02