我想将日期和时间的格式设置为“ 5小时之前”,就像“日历”应用程序一样。而且我还希望格式字符串可以针对多种语言进行本地化。
iOS 13中引入了一个名为RelativeDateTimeFormatter
的新API。但是,该API只能生成本地化的字符串,例如“ 2小时前”和“ 2小时内”。这不适合我的目的。
我想知道是否有API提供我想要的功能。
答案 0 :(得分:1)
如果您对Apple的操作方式感兴趣,可以在EventKitUI框架中进行本地化。
import EventKitUI
...
let bundle = EventKitUIBundle()!
// access the string that adds "before" information to an interval
let beforeKey = bundle.localizedString(forKey: "%@ before", value: nil, table: nil)
// access the string that localizes some interval (days, in this case)
let intervalKey = bundle.localizedString(forKey: "interval_days_long", value: nil, table: nil)
// use the strings with a value
print(String(format: beforeKey, String(format: intervalKey, 1))) // 1 day before
print(String(format: beforeKey, String(format: intervalKey, 3))) // 3 days before
本地化字典包含对数值1-9的适当复数。 您可以完全一样。我不建议使用Apple的本地化字符串,因为这些未记录。
答案 1 :(得分:0)
如果可以将 before 部分本地化,也许考虑使用DateComponentsFormatter
?
(也许这更适合作为注释,但似乎太长了)
例如:
let componentsList = [
DateComponents(minute:5),
DateComponents(minute:10),
DateComponents(minute:15),
DateComponents(minute:30),
DateComponents(hour:1),
DateComponents(hour:2),
DateComponents(day:1),
DateComponents(day:2),
DateComponents(weekOfMonth:1)
]
for components in componentsList {
if let text = DateComponentsFormatter.localizedString(from: components, unitsStyle: .full) {
print("\(text) before")
}
}