在 stringsdict 中,可以与翻译分开定义格式,因此您可以执行类似“picker.days”之类的操作,您可以传入一个整数,它只会返回“Day”或“Days”,而没有实际值它。
现在使用字符串目录,似乎“%d”必须位于值中,否则无法识别。现在是否没有办法在翻译中没有实际值的情况下对任何内容进行复数?
我在苹果开发者支持论坛上问了同样的问题,我收到了这个答案:
嗨,Stringsdict 和 String Catalog Plural Variants 不适合 具有复数但没有与该复数关联的数字的字符串。 这对于英语来说是正确的,但是许多语言都会这样做 有问题。基于数字的复数规则不同 复数(一、二、少、多、其他)和非数字复数(1、 2+)。这里建议使用 2 个不同的纯字符串, 由 if count == 1 { … } else { … } 控制。更多信息在此 当时的会话链接: https://developer.apple.com/wwdc21/10221?time=1330
我决定在我的项目中使用此解决方法
我的本地化字符串格式为:
One: %d~day
Other: %d~days
然后我基本上用 ~ 符号分割本地化字符串:
let pairs = String(localized: "clock-timer.label.days \(daysCount)")
.split(separator: "~")
.map { String($0) }
let number = pairs[0] // here is the number of days
let text = pairs[1] // here is the localized word (day, days, etc.)
稍后您可以向用户显示单词:
VStack {
Text(verbatim: number)
Text(verbatim: text)
}