Как сделать время, оканчивающееся на «:00», доступным (например, 14:00)

Голос за кадром читает следующее NSStrings вот так


14:15

«Четырнадцать пятнадцать».

Это явно время


14:00

"Четырнадцать."

Это неоднозначно.


Если время 14:00 появляется в строке состояния, оно правильно читается как

«Четырнадцать сотен часов»

Как мне добиться этого локализованным способом?

iOS считывает правильное время


person Robert    schedule 02.05.2016    source источник
comment
Вы пытались присвоить UILabel настраиваемый атрибут, переопределив свойство accessibilityLabel. Используйте соответствующий NSDateFormatter с timeStyle, установленным на .MediumStyle, и он должен говорить как время.   -  person dirkgroten    schedule 02.05.2016
comment
@dirkgroten - Спасибо за предложение. Средний стиль по-прежнему будет отображать текст 14:00, верно? если это так, то он будет иметь тот же результат, поскольку accessiblityValue видит только необработанный вывод NSString.   -  person Robert    schedule 02.05.2016


Ответы (3)


Как мне добиться этого локализованным способом?

Переопределение accessibilityLabel с результатом NSDateFormatter::localizedStringFromDate() будет лучшим вариантом, потому что вы можете полагаться только на собственный алгоритм iOS для обработки любого языка.

Проблема сделать это локализованным способом заключается в том, что это будет зависеть от языка, который вы хотите.

Во французском языке, например, вы никогда не произнесете :00, "14:00" будет читаться как quatorze heures ("четырнадцать часов"). «14:12» — это «quatorze heures douze» (четырнадцать часов двенадцать, а не «четырнадцать двенадцать»)

На испанском языке, даже если читать в 24-часовом формате, вы всегда будете читать его в 12-часовом формате: «14:00» будет читаться как las dos de la tarde («два в после полудня"), не говоря уже о различиях между "de la tarde" и "de la noche".

Ни на французском, ни на испанском вы никогда не скажете сотни.

person Adam    schedule 12.05.2016
comment
Хорошие моменты. Существуют чувствительные к локали способы чтения времени. Вот почему было бы трудно написать что-то, что преобразует строку в слова, например, 14:00 -> Четырнадцать сотен часов. Тем не менее, я не думаю, что все, что вы предложили, поможет. Метод принимает стиль (developer.apple.com/library/ios/documentation/Cocoa/Reference/) и выведет строку либо 14:00, либо 2:00 PM. Голос за кадром видит только выходную строку, так что все равно прочитает ее. Четырнадцать, я думаю. Я попробую. - person Robert; 16.05.2016

ИМХО это очень просто ;-)

14:00 = четырнадцать часов

person NetVicious    schedule 16.05.2016
comment
Я думаю, что это совершенно правильный ответ. - person Eiko; 21.08.2016
comment
К сожалению, это решение не работает локально, как ожидал Роберт. - person XLE_22; 07.04.2019

Чтобы достичь своей цели локализованным способом, вы должны идеально форматировать даты и числа, чтобы VoiceOver хорошо их понимал.

Прочитайте этот ответ, в котором содержится полная информация, чтобы понять, как реализовать безупречное считывание.

person XLE_22    schedule 07.04.2019