Reputation: 38213
Voice over reads the following NSStrings
like so
14:15
"Fourteen fifteen."
This is clearly a time
14:00
"Fourteen."
This is ambiguous.
If the time 14:00
appears in the status bar it correctly reads it as
"Fourteen hundred hours"
How do I achieve this in a localised way?
Upvotes: 14
Views: 559
Reputation: 164
extension Date {
func accessibilityTime() -> String? {
let dateComponents = Calendar.current.dateComponents([.hour,.minute], from: self)
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .spellOut
return formatter.string(for: dateComponents)
}
}
this uses the spell-out unit using the DateComponentsFormatter to announce your time in a localised way. It does not fully implement as anyone on the street would say ("a quarter to three" will be announced as "fourteen o'clock and forty-five minutes"*) but it beats the "fourteen forty-five" announcement.
I hope this helps a lot of apps become more accessible for more people. :)
Upvotes: 0
Reputation: 18805
How do I achieve this in a localised way?
Overriding the accessibilityLabel
with the result of NSDateFormatter::localizedStringFromDate()
will be the best thing to do because you can only rely upon iOS's own algorithm to handle any language.
The problem of doing it in a localised way is that it will depend on the language you want.
In French, for instance, you will never pronounce the :00
, "14:00" will be read as quatorze heures ("fourteen hours"). "14:12" is "quatorze heures douze" (fourteen hours twelve, not "fourteen twelve")
In Spanish, even if reading 24 hours format, you will always read it on a 12 hours basis: "14:00" will be read as las dos de la tarde ("two in the afternoon") not talking about the distinction between "de la tarde" and "de la noche".
In both French or Spanish, you will never say hundred.
Upvotes: 3