Money Talks! Formatting Currency in Web Content

This article was written by OZeWAI member Ricky Onsman and was originally published on the TPGi website.

I was recently asked to comment on the Australian Government Style Manual’s advice on using currency symbols.

Non-Australian currency symbols may be inaccessible to people who access content using screen readers. Screen readers may be unable to interpret and describe the symbols. Avoid the use of non-Australian currency symbols where possible.

The Manual goes on to suggest options for referencing non-Australian currencies.

Use the 3-letter International Bank Account Number (IBAN) currency codes – for example, THB, USD, VND. This is the preferred method because it doesn’t use symbols and makes content more accessible.

When referencing ‘dollar’ currencies, use a country prefix followed by the ‘$’ symbol – for example, A$, C$, NZ$, US$. If there is any chance of confusion, use the 3-letter IBAN codes.

Use the currency symbol only, for example ‘£’ for the British pound, if you have evidence that it is the best way to meet a user need.

Back in July 2023, I wrote a blog post for TPGI called Making Numbers in Web Content Accessible, which included the following comment.

Also note that most screen readers will announce most currency symbols, “dollar” for “$”, “pound” for “£”, and so on. However (and you can guess what I’m going to say here), the best advice is to test with user agents. When you’re dealing with money, you want to be sure.

Note that this blog post was drawn from information in our KnowledgeBase, which our accessibility engineers and our clients use as guidelines for making web content accessible.

I was aware that money in web content is a bit unusual, in that money amounts are not typically spoken in the same sequence they are written, i.e., we write “$58.96” but say “fifty-eight dollars and ninety-six cents”. 

I figured the best thing to do is to follow my own “best advice” and conduct some testing. In particular, I wanted to test how various screen readers announce different variations in how currency is formatted.

The results were surprising, to say the least.

I tested with the following screen readers.

  • JAWS v 2024.2310.70, with Chrome on Windows 11
  • NVDA v 2023.3 (2023.3.0.29780), with Chrome on Windows 11
  • Narrator latest version, with Chrome on Windows 11
  • TalkBack latest version, with Chrome on Android 10
  • VoiceOver latest version, with Safari on iOS 15.8

All screen readers were at default settings.

The language of the web page I tested was set to “en-US”. Changing the language code to “en-AU” or any other language code made no difference to any screen reader.

Some screen readers, like JAWS, can be installed to use a language other than English. I have some anecdotal evidence that this affects how currencies are announced, but I was not able to test this.

I tested 10 currency formats:

  • $58.96
  • US$58.96
  • A$58.96
  • AU$58.96
  • AUD59.96
  • ¥58.96
  • £58.96
  • €58.96
  • THB58.96
  • VND58.96

Test results

$58.96

  • JAWS: dollar fifty-eight point nine six
  • NVDA: fifty-eight dollars and ninety-six cents
  • Narrator: fifty-eight dollars and ninety-six cents
  • TalkBack: fifty-eight dollars ninety-six cents
  • VoiceOver: fifty-eight dollars and ninety-six cents

US$58.96

  • JAWS: u s dollar fifty-eight point nine six
  • NVDA: fifty-eight u s dollars and ninety-six cents
  • Narrator: fifty-eight u s dollars and ninety-six cents
  • TalkBack: u s dollar fifty-eight point nine six
  • VoiceOver: u s u s

A$58.96

  • JAWS: a dollar fifty-eight point nine six
  • NVDA: a dollar fifty-eight dot ninety-six
  • Narrator: a dollar fifty-eight dot ninety-six
  • TalkBack: a dollar fifty-eight point nine six
  • VoiceOver: fifty-eight Australian dollars and ninety-six cents

AU$58.96

  • JAWS: a u dollar fifty-eight point nine six
  • NVDA: fifty-eight Australian dollars and ninety-six cents
  • Narrator: fifty-eight Australian dollars and ninety-six cents
  • TalkBack: au (or) dollar fifty-eight point nine six
  • VoiceOver: au (oh) dollars nine fifty-eight point nine six

AUD58.96

  • JAWS: aud (ord) fifty-eight point nine six
  • NVDA: fifty-eight Australian dollars and ninety-six cents
  • Narrator: fifty-eight Australian dollars and ninety-six cents
  • TalkBack: aud (ord) fifty-eight point nine six
  • VoiceOver: fifty-eight Australian dollars and ninety-six cents

¥58.96

  • JAWS: yen fifty-eight point nine six
  • NVDA: fifty-eight point ninety-six yen
  • Narrator: fifty-eight point ninety-six yen
  • TalkBack: yen fifty-eight point nine six
  • VoiceOver: fifty-eight point ninety-six yen

£58.96

  • JAWS: fifty-eight pounds and ninety-six pence
  • NVDA: fifty-eight pounds and ninety-six pence
  • Narrator: fifty-eight pounds and ninety-six pence
  • TalkBack: fifty-eight pounds point nine six
  • VoiceOver: fifty-eight British pounds and ninety-six pence

€58.96

  • JAWS: euro fifty-eight point nine six
  • NVDA: fifty-eight euros and ninety-six cents
  • Narrator: fifty-eight euros and ninety-six cents
  • TalkBack: fifty-eight point nine six
  • VoiceOver: fifty-eight euros dot ninety-six

THB58.96

  • JAWS: t h b fifty-eight point nine six
  • NVDA: t h b fifty-eight point nine six
  • Narrator: t h b fifty-eight dot nine six
  • TalkBack: t h b fifty-eight point nine six
  • VoiceOver: t h b fifty-eight dot ninety-six

VND58.96

  • JAWS: v n d fifty-eight point nine six
  • NVDA: v n d fifty-eight point nine six
  • Narrator: v n d fifty-eight dot nine six
  • TalkBack: v n d fifty-eight point nine six
  • VoiceOver: v n d fifty-eight dot ninety-six

Observations

There is no single optimal way to format currency so that it is announced by all five screen readers tested as an amount of money in the way a person would in conversation. 

While JAWS recognizes and announces the dollar symbol, it does not recognize the numerical amount as money. It therefore announces each symbol, letter or combination of letters, the numbers as just a part of a text string.

NVDA does recognize the numerical amount as money if it is preceded by the dollar symbol alone, by the dollar symbol plus a two-letter country code, or by a three-letter IBAN code. In those cases, it correctly announces the money amount as a human would. However, if the money amount is preceded by a single-letter country code, NVDA does not recognize it as money and just announces the text string.

Narrator behaves the same way as NVDA.

TalkBack recognizes and announces the numerical amount as money if it’s preceded only by the currency symbol alone, in which case it announces the amount as a human would. In the other four cases, Talkback just announces the text string.

VoiceOver recognizes and announces the numerical amount as money if it’s preceded by the currency symbol alone, by the currency symbol plus a one-letter country code (the only screen reader to do so), or by the three-letter IBAN code.

If the amount is preceded by the currency symbol plus the two-letter Australian country code, VoiceOver announces it as just a text string, and adds a “nine” in front of “fifty-eight”.

If the amount is preceded by the currency symbol plus the two-letter US country code, VoiceOver inexplicably just announces the two-letter country code – twice.

The Australian government advice, “When referencing ‘dollar’ currencies, use a country prefix followed by the ‘$’ symbol – for example, A$, C$, NZ$, US$” only works on VoiceOver.

Their advice to “Use the 3-letter International Bank Account Number (IBAN) currency codes” works for “AUD” on NVDA, Narrator and VoiceOver, but neither JAWS nor TalkBack recognize the IBAN code “AUD”, and attempt to pronounce it as a word, followed by the numerical string as text.

No screen reader recognized the IBAN code “THB” (for Thai Baht) or “VND” (for Vietnamese Dong).

Every screen reader recognized the symbol for Yen, and all but JAWS announced the money amount correctly.

Every screen reader recognized the symbol for Pound, and all announced the money amount correctly, with VoiceOver announcing it as “British pounds”.

All screen readers recognized the symbol for Euro. NVDA and Narrator announced the money amount correctly. VoiceOver announced the Euros part correctly but relegated the cents part to just “dot ninety-six”. TalkBack ignored the symbol complete and just announced the number string.

Conclusions

If the amount is in US dollars, do not use any prefixes. This produces the correct announcement in NVDA, Narrator, TalkBack and VoiceOver. While JAWS doesn’t announce the amount as money, it does read out the text string correctly. A fail-safe measure web authors could take would be to add a note to the web page to the effect of “all amounts are in US dollars”.

If the amount is in a non-US dollar currency, e.g., Australian, preceding the amount with the three-letter IBAN code produces the correct result in NVDA, TalkBack and VoiceOver, while the JAWS and TalkBack announcements are more or less understandable.

Only the most common non-dollar currency symbols are likely to be recognized and announced more or less correctly by most screen readers, including the Pound (£), the Yen (¥) and the Euro (€). While not included in this test, a quick check for the Thai Baht (฿) and the Vietnamese Dong (₫) found no support.

The same applies to the three-letter IBAN codes. While GBP, JPY, and EUR have some support, THB and VND have none. When referring to amounts in those currencies, it is best to write the currency names out in full, e.g., Thai Baht and Vietnamese Dong.

Over time, I expect increased and improved support for how screen readers announce currency symbols, country codes, IBAN codes and money amounts in general. It may also be possible to configure settings in some screen readers to improve how money amounts are announced.

It’s also important to note that regular screen reader users become used to their software’s quirks. An international money trader who uses JAWS may not have any trouble understanding exactly what “ord fifty-eight point nine six” means. It’s often better not to try to manipulate content to meet expectations that users don’t even have. Even so, a standardized way of making it clear that content refers to a money amount in a particular currency would be useful.

In the meantime, given the increasing importance of financial transactions conducted on the web, as acknowledged by WCAG Success Criterion 3.3.4 Error Prevention (Legal, Financial, Data) (Level AA), web authors should take particular care in how they present money and currency to avoid confusing or misleading screen reader users. 

Resources

Originally published: https://www.tpgi.com/money-talks-formatting-currency-in-web-content