DateComponentsFormatter

DateComponentsFormatter

我有一个只有一种语言的应用程序。我想在显示自日期以来的时间间隔时强制使用这种语言。例如。 “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)

最佳答案

这是默认的iOS行为。如果您在电话上更改语言环境和语言,您会注意到“日历”应用程序中可能有2种语言。有时可以更改语言环境,但是示例中的includesApproximationPhrase不会被翻译:

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

关于ios - 在DateComponentsFormatter中强制对allowedUnits进行本地化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41283147/

10-13 07:19