use*_*625 10 date-formatting ios swift
我有一个只有一种语言的应用程序.我希望在显示自日期以来的时间间隔时强制语言为此.例如"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)
Run Code Online (Sandbox Code Playgroud)
当语言为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)
Run Code Online (Sandbox Code Playgroud)
Tim*_*ich 17
这是默认的iOS行为.如果您在手机上更改了区域设置和语言,您会发现在日历应用程序中可以使用2种语言.有时可以更改区域设置,但includesApproximationPhrase在您的示例中不会被翻译:
var calendar = Calendar.current
calendar.locale = Locale(identifier: "da")
let formatter = DateComponentsFormatter()
formatter.calendar = calendar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2091 次 |
| 最近记录: |