如何处理本地化swift中的特殊情况

时间:2017-03-12 10:11:14

标签: ios swift localization

我创建了一个Localizable.strings文件,翻译工作正常。但是有一个特殊情况,英语中有一个单词和复数,如'系列'。但在德语中有两个不同的词:一个系列是'Serie',两个系列是'Serien'。我该如何处理这些例外?

感谢马丁

3 个答案:

答案 0 :(得分:2)

这正是如此 Plural Rule PropertiesStringsdict 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 ";