如何处理本地化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 ";