VoiceOver heteronym pronunciation test

Each block below shows a plain (problem) sentence and three markup-only workarounds you can test with VoiceOver. The visible text remains identical — fixes are implemented only in the accessibility layer. I have added additional text in order to trigger the VoiceOver functionality within the Safari browser. If the text on the page is insufficiently long, the VoiceOver tool will not be enabled alongside the reader tool. If I add more text to this page, I hope that the reader tool will be enabled as well as the voice tool .

To test on macOS: enable VoiceOver (Cmd+F5). Place the cursor somewhere on the page and press Control+Option+Right Arrow one or more times to step through elements, or press Control+Option+S (VO+S) to start continuous reading. Compare the plain line vs the fixes.

1 — read (present /reed/ vs past /red/)

Problem (plain text)

Yesterday I read the book in one sitting.

Workaround A — aria-label (inline)

Yesterday I read the book in one sitting.

Behavior: VoiceOver sometimes reads the aria-label; sometimes it still prefers the DOM text (VO version dependent).
Workaround B — accessible replacement (recommended)

Yesterday I red the book in one sitting.

Behavior: VoiceOver will typically read "red" here. This is the most robust approach.
Workaround C — aria-labelledby

Yesterday I red the book in one sitting.

Behavior: Similar to B; explicit aria-labelledby gives the wrapper a stable accessible name.

2 — minute (time /MIN-it/ vs tiny /my-NOOT/)

Problem

He gave a minute description of the insect.

Workaround A — aria-label (tries phonetic)

He gave a minute description of the insect.

Some voice engines mis-read simple respellings; VoiceOver may say "my newt" or similar.
Workaround B — accessible replacement (clarify)

He gave a minute, meaning tiny description of the insect.

Behavior: VoiceOver will say "minute, meaning tiny" — explicit and unambiguous. This is the recommended pragmatic fix when pure phonetic respelling fails.
Workaround C — aria-labelledby wrapper

He gave a minute (tiny) description of the insect.

Behavior: same idea; use if you prefer explicit named references.

3 — lead (metal /led/ vs verb /leed/)

Problem

The pipes were made of lead.

Workaround A — aria-label

The pipes were made of lead.

Workaround B — accessible replacement (recommended)

The pipes were made of led.

Workaround C — labelled wrapper

The pipes were made of led .

4 — wind (breeze vs twist /waɪnd/)

Problem

Please wind the clock.

Workaround A — aria-label

Please wind the clock.

Workaround B — accessible replacement (recommended)

Please wind (meaning: turn) the clock.

Workaround C — labelled wrapper

Please wind, to turn the clock.

5 — tear (rip vs cry)

Problem

A tear rolled down her cheek.

Workaround A — aria-label

A tear rolled down her cheek.

Workaround B — accessible replacement

A tear (teer) rolled down her cheek.

Workaround C — labelled wrapper

A tear, a drop from the eye rolled down her cheek.

6 — bass (fish /base/ vs instrument /bæs/)

Problem

He played the bass guitar.

Workaround A — aria-label

He played the bass guitar.

Workaround B — accessible-only replacement

He played the bass (instrument) guitar.

Workaround C — labelled wrapper

He played the bass, the instrument guitar.

7 — row (line vs argument)

Problem

They had a row over dinner.

Workaround A — aria-label

They had a row over dinner.

Workaround B — accessible replacement

They had a row, argument over dinner.

Workaround C — labelled wrapper

They had a row, an argument over dinner.

8 — Roman numerals (IV → four)

Problem

Chapter IV

Workaround A — aria-label

Chapter IV

Workaround B — accessible replacement (recommended)

Chapter four

Workaround C — labelled wrapper

Chapter four


Notes & recommendations