我创建了一个Localizable.strings文件,翻译工作正常。但是有一个特殊情况,英语中有一个单词和复数,如'系列'。但在德语中有两个不同的词:一个系列是'Serie',两个系列是'Serien'。我该如何处理这些例外?
感谢马丁
答案 0 :(得分:2)
这正是如此 Plural Rule Properties 在 Stringsdict files适用于。
所以除了你必须提供的“Localizable.strings”文件之外 一个“Localizable.stringsdict”属性列表文件 该语言的复数规则。在你的情况下:
<强> Localizable.strings:强>
"%ld series" = "%ld Serien";
<强> Localizable.stringsdict:强>
<plist version="1.0">
<dict>
<key>%ld series</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@series@</string>
<key>series</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>%ld Serie</string>
<key>other</key>
<string>%ld Serien</string>
</dict>
</dict>
</dict>
</plist>
请注意Int
的正确格式说明符(可以
是一个32位或64位整数)是%ld
。
现在一切都“自动”工作,Swift代码没有变化:
for n in 1...3 {
let str = String(format: NSLocalizedString("%ld series", comment: ""), n)
print(str)
}
输出:
1 Serie 2 Serien 3 Serien
即使添加了其他复数规则的更多语言,也不会有任何更改 在Swift代码中是必要的。
答案 1 :(得分:1)
我是如何做的,我的本地化名称如下:series =&#34; series&#34;和#34; Serie&#34;和series_pural =&#34;系列&#34;和#34; Serien&#34;。然后系统只是在之后查找_plural,如果它存在,那么它将显示它(如果你告诉它它是一个复数词,你正在本地化)。另一种方法是你可以根据具体情况处理单词是否为复数。
答案 2 :(得分:1)
有很多方法可以做到这一点。但我更喜欢使用Apple推出的方式,这很简单明了。
使用NSLocalizedString
检查您的金额。
示例:
let toast: String
if days == 1 {
toast = NSLocalizedString("Serie.one", comment: "")
}
else {
toast = String(format: NSLocalizedString("Serien.other", comment: ""), days)
}
Localizable.strings包含以下信息:
Serie.one = "Serie";
Serien.other = "Serien %d ";