swift - String.localizedStringWithFormat 返回错误结果

标签 swift localization foundation

我正在尝试本地化包含 1..2 等范围的字符串。我正在使用String.localizedStringWithFormat:

func testLocalizableString() -> String {
    let lowerBound = 1
    let upperBound = 2
    return String.localizedStringWithFormat(
        NSLocalizedString("Unit.Meters.Range", value:"%d-%dm", comment: ""),
        [lowerBound, upperBound]
    )
}

但是,我得到了奇怪的结果:“103,413,600-0m”。

如果我只使用一个参数(只是“%dm”,而不是“%d-%dm”)并且只传递一个数字,一切都很好。

我的代码可能有什么问题以及如何使用 CVarArg 参数正确设置可本地化字符串的格式?

最佳答案

第二个参数

String.localizedStringWithFormat(_ format: String, _ arguments: CVarArg...)

是一个可变参数,这意味着您必须传递零个或多个 指定类型的参数,而不是数组:

func testLocalizableString() -> String {
    let lowerBound = 1
    let upperBound = 2
    return String.localizedStringWithFormat(
        NSLocalizedString("Unit.Meters.Range", value:"%ld-%ldm", comment: ""),
        lowerBound, upperBound
    )
}

另请注意,Int 的格式说明符是 %ld,而不是 %d

关于swift - String.localizedStringWithFormat 返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41349115/

相关文章:

swift - 全局 Realm 对象 : Singleton or Fetch It Every Time?

ios - "Ghost" View 出现

php - 如何通过 IP 地址检测用户的语言

ios - 如何在iOS中手动更改UIDatePicker的语言环境?

cocoa - 为什么 Objective-C 对象必须动态分配?

ios - 带有 iOS 的 Amazon Cognito : Access to Identity Forbidden

swift - 按菜单按钮时 tvOS 更改目的地

django - 将 DateInput 小部件的格式更改为 SHORT_DATE_FORMAT

swift - Swift 3中如何使用Mirror方便的实现 `isEqual`方法

cocoa - NSMutableArray - 数组弹出等效项