【问题标题】:How to handle special cases in localization swift如何快速处理本地化中的特殊情况
【发布时间】:2017-03-12 10:11:14
【问题描述】:

我创建了一个 Localizable.strings 文件,翻译工作正常。但是有一种特殊情况,在英语中有一个单数和复数单词,例如“系列”。但是在德语中有两个不同的词:一个系列是“Serie”,两个及更多系列是“Serien”。如何处理此类异常?

谢谢马丁

【问题讨论】:

    标签: ios swift localization


    【解决方案1】:

    这正是 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 系列 2 连续剧 3 连续剧

    即使添加了更多具有其他复数规则的语言,也没有变化 在 Swift 代码中是必需的。

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。但是我更喜欢使用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 "; 
      

      【讨论】:

        【解决方案3】:

        我的做法是按如下方式命名我的本地化名称:series = "series" and "Serie" and series_pural = "series" and "Serien"。然后系统只是在之后查找一个 _plural,如果它存在,那么它会显示它(如果你告诉它它是你正在本地化的复数词)。另一种方法是您根据具体情况处理一个单词是否是复数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多