Robert
Robert

Reputation: 38213

How to make times ending `:00` accessible (e.g. 14:00)

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?

iOS reading out correct time

Upvotes: 14

Views: 559

Answers (3)

Lex
Lex

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. :)

  • I have tried this using my native Dutch Language. For Dutch native speakers ("kwart voor drie" becomes "viertien uur en vijfenveertig minuten")

Upvotes: 0

Adam
Adam

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

NetVicious
NetVicious

Reputation: 4037

IMHO it's very easy ;-)

14:00 = Fourteen o'clock

Upvotes: 0

Related Questions