如何处理本地化swift中的特殊情况
我创建了一个Localizable.strings文件,翻译工作正常。 但是有一个特殊情况,英语中有一个单词和复数,如’系列’。 但在德语中有两个不同的词:一个系列是’Serie’,两个系列是’Serien’。 我该如何处理这些例外?
谢谢马丁
这正是Stringsdict文件中的Plural Rule Properties的用途 。
因此,除了“Localizable.strings”文件之外,您还必须提供具有多种语言规则的“Localizable.stringsdict”属性列表文件。 在你的情况下:
Localizable.strings:
"%ld series" = "%ld Serien";
Localizable.stringsdict:
%ld series NSStringLocalizedFormatKey %#@series@ series NSStringFormatSpecTypeKey NSStringPluralRuleType NSStringFormatValueTypeKey ld one %ld Serie other %ld Serien
请注意, Int
的正确格式说明符(可以是32位或64位整数)是%ld
。
现在一切都“自动”工作,Swift代码没有变化:
for n in 1...3 { let str = String(format: NSLocalizedString("%ld series", comment: ""), n) print(str) }
输出:
1意甲 2塞尔 3 Serien
即使添加了更多具有其他复数规则的语言,也不需要对Swift代码进行任何更改。
我是如何做的是我的本地化名称如下:series =“series”和“Serie”以及series_pural =“series”和“Serien”。 然后系统只是在之后查找_plural,如果它存在,那么它将显示它(如果你告诉它它是一个复数词,你正在本地化)。 另一种方法是你可以根据具体情况处理单词是否为复数。
有很多方法可以做到这一点。 但我更喜欢使用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 ";