强制在DateComponentsFormatter中定位allowedUnits

时间:2016-12-22 12:24:56

标签: ios swift date-formatting

我的应用程序只有一种语言。我希望在显示自日期以来的时间间隔时强制语言为此。例如。 “9个月前”只是用一种特定的语言而不是英语。有没有办法使用DateComponentsFormatter执行此操作,否则我将完全按照我想要的单位执行此操作。

    func format(duration: TimeInterval) -> String {
        UserDefaults.standard.set(["da"], forKey: "AppleLanguages")
        UserDefaults.standard.synchronize()
        let formatter = DateComponentsFormatter()
        formatter.allowedUnits = [.year, .month, .day, .hour, .minute, .second]
        formatter.unitsStyle = .short
        formatter.includesApproximationPhrase = true
        formatter.maximumUnitCount = 1

        return formatter.string(from: -duration)!
    }

    format(duration: self.createdDate.timeIntervalSinceNow)

这会返回,例如当语言为en时,“1年”。 我希望以特定的语言(“yr” - >“år”)使用它,这应该与其他允许的单位类似。

当手机设置为应用程序的语言时,它可以正常工作。

我尝试在创建DateComponentsFormatter之前设置语言,但它仍然以手机设置的语言返回。

编辑下方的工作代码

从答案修改后的工作代码:

    func format(duration: TimeInterval) -> String {
        var calendar = Calendar.current
        calendar.locale = Locale(identifier: "da")
        let formatter = DateComponentsFormatter()
        formatter.calendar = calendar
        formatter.allowedUnits = [.year, .month, .day, .hour, .minute, .second]
        formatter.unitsStyle = .short
        formatter.includesApproximationPhrase = true
        formatter.maximumUnitCount = 1

        return formatter.string(from: -duration)!
    }

    format(duration: self.createdDate.timeIntervalSinceNow)

1 个答案:

答案 0 :(得分:15)

这是默认的iOS行为。如果您在手机上更改了区域设置和语言,您会发现在日历应用程序中可以使用2种语言。有时可以更改区域设置,但示例中的includesApproximationPhrase将不会被翻译:

var calendar = Calendar.current
calendar.locale = Locale(identifier: "da")
let formatter = DateComponentsFormatter()
formatter.calendar = calendar