Guides

TTS Verbalization Guide & Specifications for en-CA

Product: en-CA
Release Date: October 2026
TTS Engine version: 3.4.0

 

Introduction

This document describes how specific series of strings are read by the TTS Engine for the EN language in the CA domain. The readings are the engine's current output for the version above: when a reading is not what is wanted, this document still shows what the engine does.

Convention: every example table has separate Lexis and Odi voices output columns. If Odi matches Lexis exactly, the symbol ↔ is used instead of repeating the text. A 🆕 marker next to an example means the reading changed in the current version vs the previous one (3.3.0). Missing support is always written as "unsupported". Numeric ranges in formats are written [a-b] (for example [1-99] means any number from 1 to 99).

Readings are shown in lower case with punctuation as the engine returns it. Two markers appear in the readings: [pause] is a 0.025 s pause the Lexis voice puts between groups of digits, and [pause 0.2 s] is a fixed pause of 0.2 s.

Numbers

Integers

Format

Example input

Lexis

Odi

[1-9][0-9]

25

twenty five

↔

[1-9][0-9]…[0-9]

159 🆕

one hundred and fifty nine

↔

<dash>[1-9]…[0-9]

-58

minus fifty eight

↔

[1-9][0-9]…[0-9][0-9] (>999)

2824 🆕

two thousand eight hundred and twenty four

↔

20[0-9][0-9]

2012

twenty twelve

↔

[1-9][0-9]{0,2}<comma>[0-9]{3}

2,824 🆕

two thousand eight hundred and twenty four

two thousand eight hundred and twenty four

Allowed thousands delimiter: comma only. A space delimiter reads as two separate number groups ("2 824" is "two eight hundred and twenty four"). Max supported value: 999,999,999,999 (999 billion and below), read as "nine hundred and ninety nine billion nine hundred and ninety nine million nine hundred and ninety nine thousand nine hundred and ninety nine". Beyond that, digits are spelled one by one. Integers are read with "and" after hundreds and thousands. A four-digit number close to the current year is read as a year.

Ordinal numbers

Format

Example input

Lexis

Odi

[1-9]…[0-9]{st,nd,rd,th}

1st

first

↔

Decimals

Decimal separator: dot. Digits after the dot are spelled individually.

Format

Example input

Lexis

Odi

[1-9]…[0-9]<dot>[0-9]…[0-9]

2.4527

two point four five two seven

↔

<dash>[1-9]…[0-9]<dot>[0-9]…[0-9]

-25.78

minus twenty five point seven eight

↔

Fractions and units

Format

Example input

Lexis

Odi

[1-99]<slash>[1-99]

13/16

thirteen sixteenths

↔

[1-99]<slash>[1-99]

45/2

forty five halves

↔

A fraction that complies with the date format, thus [1-31]<slash>[1-12] and [1-12]<slash>[1-31], is read as a date of the year if no supported unit is provided. E.g. "5/12" is read as "may twelfth" while "5/12 km" is read as "five twelfths kilometre". A date-like fraction without a unit (for example 1/2 or 3/4) is therefore read as a date, month first.

Format

Example input

Lexis

Odi

[1-12]<slash>[1-31] <unit>

5/12 km

five twelfths kilometre

↔

[1-12]<slash>[1-31]

1/2

january second

↔

[1-12]<slash>[1-31]

3/4

march fourth

↔

{vulgar fraction} <unit>

½ cup

½ cup

↔

[1-99]/[1-99] <unit>

3/4 mile

march fourth mile

march fourth mile

A vulgar fraction such as ½ is not converted: the text passes through unchanged in both voices. For Lexis, this reading is done by the Lexis model, not by the input processor.

Digit-by-digit spelling

The dash notation can be used to spell the digit sequence digit by digit. The behaviour differs for Lexis and Odi voices:

  • For Lexis, the digits are read in groups of three, counted across the whole sequence, with a short pause ([pause], 0.025 s) between the groups. A comma stays where the input has a space.

  • For Odi, the dashes are used to spell the numbers digit by digit as well, but without pauses: the comma is placed where the space is.

Example input

Lexis

Odi

4-2-1-4 2-3-4 7-5-3

four two one [pause] four, two three [pause] four, seven five [pause] three

four two one four, two three four, seven five three

Note: this notation can be used for digit sequences with more than 2 digits. Otherwise it will be verbalized as an interval. E.g. "2-3" is "two to three".

16-digit card numbers

Dash notation can be used to spell out the card numbers:

Example input

Lexis

Odi

5-8-9-6 4-2-6-5 1-2-3-4 7-4-6-8

five eight nine [pause] six, four two [pause] six five, one [pause] two three four, [pause] seven four six [pause] eight

five eight nine six, four two six five, one two three four, seven four six eight

5-8-9-6-4-2-6-5 1-2-3-4-7-4-6-8

five eight nine [pause] six four two [pause] six five, one [pause] two three four [pause] seven four six [pause] eight

five eight nine six four two six five, one two three four seven four six eight

Counter examples

  • The numbers in between the dashes are read as integers and the dash is pronounced as "dash" if the dash is used more than once. Unlike plain integers, these numbers are read with a comma after "thousand".

  • If only one dash is used, then the digit sequence is handled as an interval.

  • If no dash is used, the numbers are read as integers.

Example input

Lexis

Odi

4532-1234-5678-9012 🆕

four thousand, five hundred and thirty two dash one thousand, two hundred and thirty four dash five thousand, six hundred and seventy eight dash nine thousand and twelve

↔

4532 1234 5678 9012 🆕

four thousand five hundred and thirty two one thousand two hundred and thirty four five thousand six hundred and seventy eight nine thousand and twelve

↔

4532-1234-5678

four thousand, five hundred and thirty two dash one thousand, two hundred and thirty four dash five thousand, six hundred and seventy eight

↔

4532-1234 🆕

four thousand five hundred and thirty two to one thousand two hundred and thirty four

↔

Telephone numbers

Format

Example input

Lexis

Odi

<bracket>[0-9][0-9][0-9]<bracket> [0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

(416) 555-1234 🆕

four one six, five five five, one two three four

↔

[0-9][0-9][0-9]<dash>[0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

416-555-1234 🆕

four one six, five five five, one two three four

↔

1<dash>[0-9][0-9][0-9]<dash>[0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

1-800-555-1234 🆕

one eight hundred, five five five, one two three four

↔

<bracket>[01][0-9][0-9]<bracket> [0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

(016) 555-0123 🆕

( sixteen ) five hundred and fifty five to one hundred and twenty three

↔

<bracket>[0-9][0-9][0-9]<bracket> [01][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

(416) 155-1234 🆕

( four hundred and sixteen ) one hundred and fifty five to one thousand two hundred and thirty four

↔

+1<dash>[0-9][0-9][0-9]<dash>[0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

+1-613-555-0199 🆕

one six one three, five five five, zero one nine nine

↔

+1 <bracket>[0-9][0-9][0-9]<bracket> [0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

+1 (613) 555-0199 🆕

one six one three, five five five, zero one nine nine

↔

<bracket>[0-9]{1,3}<bracket> [0-9][0-9][0-9]<dash>[0-9][0-9][0-9]<dash>[0-9][0-9][0-9][0-9]

(57) 611-403-2312 🆕

five seven, six one one, four zero three, two three one two

↔

An area code or an office code that starts with 0 or 1 is rejected: the groups are read as numbers, as in the (016) 555-0123 and (416) 155-1234 rows.

Postal codes and addresses

A Canadian postal code is read letter by letter and digit by digit, each letter as a word, including "zed". A two-letter province or territory code before it is read in full. A postal code written without the space is not read as one. Canada Post street types written in capitals without a full stop are expanded: AVE, BLVD, CRES, CRT, CONC, CIRCT, CDS, GDNS, HWY, PKY, TERR and RD. St and Dr are left as written. 🆕

Format

Example input

Lexis

Odi

[A-Z][0-9][A-Z] [0-9][A-Z][0-9]

H2X 1Y4 🆕

aitch two ex one why four

↔

[A-Z][0-9][A-Z] [0-9][A-Z][0-9]

K1A 0B1

kay one ay zero bee one

kay one ay zero bee one

[A-Z][0-9][A-Z] [0-9][A-Z][0-9]

H2Z 1Z1 🆕

aitch two zed one zed one

↔

{province} [A-Z][0-9][A-Z] [0-9][A-Z][0-9]

QC H2X 1Y4 🆕

quebec aitch two ex one why four

↔

[A-Z][0-9][A-Z][0-9][A-Z][0-9]

H2X1Y4

h2x1y4

↔

{number} {word} {STREET TYPE}

123 Main AVE 🆕

one hundred and twenty three main avenue

↔

{number} {word} {STREET TYPE}

45 King BLVD 🆕

forty five king boulevard

↔

{number} {word} {STREET TYPE}

9 Elm CRES 🆕

nine elm crescent

↔

{number} {word} St

12 Oak St

twelve oak st

↔

Note: the postal code rule needs the code to reach it as it is written. When the voice's unit table has a unit that directly follows a digit in the code, such as A in K1A 0B1 or V in M5V 3L9, the code is split at the unit and read as text ("K1A 0B1" is "k1 a 0b1", "M5V 3L9" is "m5 v 3l9"). Without a unit table every code in the table is read as a postal code.

Combination of numbers and words

Format

Example input

Lexis

Odi

[0-9]…[0-9]<dash>{word}

16-digit

sixteen digit

↔

{word}<dash>[0-9]…[0-9]

COVID-19

covid nineteen

↔

A space around a dash between a number and a word verbalizes the dash as the word "dash" (e.g. "16 - digit" becomes "sixteen dash digit"), applicable to both Lexis and Odi voices. A spaced dash between two words is read as a pause (see Dashed words).

Ratio and intervals

Format

Example input

Lexis

Odi

[0-9]…[0-9]<colon>[0-9]…[0-9]

16:9

sixteen to nine

↔

[0-9]…[0-9]<dash>[0-9]…[0-9]

16-9

sixteen to nine

↔

[0-9]…[0-9]<dash>[0-9]…[0-9] {word}

3-5 days

three to five days

↔

If the ratio values overlap with the time format, the time will be announced. E.g. "24:00" is verbalized as "twenty four hours" while "25:00" is "twenty five to zero".

Percentage

Example input

Lexis

Odi

15%

fifteen percent

↔

Time

Format

Example input

Lexis

Odi

[00-24]<colon>[00-59]<colon>[00-59]

12:11:01

twelve hours eleven minutes and one second

↔

[00-24]<colon>[00-59]

23:15

twenty three fifteen

↔

[00-24]<colon>00

24:00

twenty four hours

↔

[1-12] {PM,AM}

2 PM

two p m

↔

[01-12]<colon>[00-59] {PM,AM}

02:20 PM

two twenty p m

↔

00<colon>00

00:00

midnight

↔

Date

Format

Example input

Lexis

Odi

[1-31] {month} [0-9]{4}

14 May 2022

may fourteenth, twenty twenty two

↔

{month} [1-31], [0-9]{4}

June 6, 2020

june sixth, twenty twenty

↔

[00-31]/[00-12]/[0-9][0-9]

31/12/19

december thirty first, nineteen

↔

[00-31].[00-12].[0-9]{4}

27.05.2021

may twenty seventh, twenty twenty one

↔

[0-9]{4}-[00-12]-[00-31]

2022-11-02

november second, twenty twenty two

↔

{month} [1-31]{st,nd,rd,th}

October 21st

october twenty first

↔

[1-31]/[00-12]

23/5

may twenty third

↔

[00-12]/[1-31]

5/12

may twelfth

↔

Note: Same as en-US: slash dates are read month first, and a first number above 12 is the day. A two-digit year is read as a number ("nineteen").

Units

Format

Example input

Lexis

Odi

{amount}{unit}

2.5GB

2. 5gb

2. 5gb

{amount}<space>{unit}

1.5 GB

one point five gb

one point five g b

{amount}<space>{unit}

3 m

three metres

↔

{amount}{unit}/{unit}

1500MB/s

one, five, zero, [pause] zero mb slash s

1500mb slash s

{amount}<space>{unit}/{unit}

1400 MB/s

one thousand four hundred mb slash s

one thousand four hundred m b slash s

Supported unit abbreviations

Each reading shows the singular / the plural form: the unit is read after "1" and after "2". This table is the voice-package unit table; the readings below come from the en-GB table. Without it the engine reads only cm, m, km, Km, m², m2, ", ', h, s and l, with British spelling: "3 km" is "three kilometres" and "2 mm" is "two mm".

Abbreviation

Lexis

Odi

mm

mm

mm

cm

centimetre / centimetres

↔

m

metre / metres

↔

km

kilometre / kilometres

↔

Km

kilometre / kilometres

↔

m²

square metre / square metres

square metre / square metres

m2

square metre / square metres

square metre / square metres

m³

m³

m³

m3

m3

m3

"

inch / inches

inch / inches

in

in

in

'

foot / feet

foot / feet

ft

ft

ft

yd

yd

yd

mi

mi

mi

mph

mph

mph

MPH

mph

m p h

h

hour / hours

hour / hours

hr

hr

hr

min

min

min

mins

mins

mins

s

second / seconds

↔

g

g

g

gm

gm

gm

kg

kg

kg

Kg

kg

kg

oz

oz

oz

lb

lb

lb

lbs

lbs

lbs

ml

ml

ml

mL

ml

ml

l

litre / litres

↔

L

l

l

gal

gal

gal

cup

cup

cup

Hz

hz

hz

hz

hz

hz

kHz

khz

khz

MHz

mhz

mhz

GHz

ghz

ghz

W

w

w

kW

kw

kw

MW

mw

m w

GW

gw

g w

V

v

v

mA

ma

ma

A

a

a

dB

db

db

kb

kb

kb

mb

mb

mb

gb

gb

gb

tb

tb

tb

pb

pb

pb

kB

kb

kb

MB

mb

m b

GB

gb

g b

TB

tb

t b

PB

pb

p b

bps

bps

bps

Kbps

kbps

kbps

Mbps

mbps

mbps

Gbps

gbps

gbps

Tbps

tbps

tbps

kBps

kbps

kbps

MBps

mbps

mbps

GBps

gbps

gbps

TBps

tbps

tbps

PBps

pbps

pbps

°C

° c

° c

°c

° c

° c

°F

° f

° f

°f

° f

° f

Note: Short abbreviations that are also words or letters (in, min, h, m, A, s) are read as units only when they follow a number: "I live in London" is "i live in london" while "5 in the box" is "five inches the box".

Words

Abbreviations and spelling

Odi spells all the words in capital letters letter by letter.

Lexis passes words in capital letters through unchanged and the Lexis model reads them (e.g. ABC, JOHN). Dotted capital abbreviations keep their dots (e.g. B.C.).

Format

Example input

Lexis

Odi

[A-Z]…[A-Z]

ABC

abc

a b c

[A-Z]…[A-Z]

JOHN

john

j o h n

[A-Z]<dot>[A-Z]<dot>

B.C.

b. c

b c

[a-z]<dot>[a-z]<dot>

e.g.

for example

↔

Ph<dot>D<dot>

Ph.D. 🆕

p. h. d

p h d

[A-Z]&[A-Z]

R&D

r&d

r-n-d

Between capital letters, "&" is passed through for Lexis and read as "n" by Odi. Between words, "&" is read as "and". Ph.D. is rewritten to P.H.D. so that it is spelled.

For Lexis, these readings are done by the Lexis model, not by the input processor.

Common abbreviations

Example input

Lexis

Odi

Prof.

professor

↔

Dr.

doctor

↔

etc.

and so on

↔

Prof

prof

↔

Dr

dr

↔

Mr

mr

↔

Mrs

mrs

↔

Ms

ms

↔

Ave 🆕

avenue

↔

Dashed words

Example input

Lexis

Odi

E-mail

e-mail

↔

Paris - Texas

paris [pause 0.2 s] texas

↔

Paris-Texas

paris-texas

↔

URLs and e-mails

URLs

Format

Example input

Lexis

Odi

(www)<dot>{word}<dot>{domain}

www.google.com/ 🆕

w w w, dot google, dot com

↔

http(s)://{word}<dot>{domain}

https://google.com/

h t t p s, colon, double slash google, dot com

↔

http(s)://www<dot>{word}<dot>{domain}

https://www.google.com/ 🆕

h t t p s, colon, double slash w w w, dot google, dot com

↔

(http(s)://)(www)<dot>{word}<dot>{domain}<slash>{sequence}

https://www.google.com/news=123 🆕

h t t p s, colon, double slash w w w, dot google, dot com, slash news, equal sign one hundred and twenty three

↔

(http(s)://)(www)<dot>{non-word}<dot>{domain}

www.123.com 🆕

w w w, dot one hundred and twenty three, dot com

↔

E-mails

Format

Example input

Lexis

Odi

{word}@{word}<dot>{domain}

info@omilia.com

i n f o, at omilia, dot com

↔

{word}!={symbol}!={number}@{word}<dot>{domain}

omilia_19@omilia.com 🆕

omilia, underscore one nine, at omilia, dot com

↔

{word}!={symbol}!={number}@{word}<dot>{domain}

john.smith42@example.com 🆕

john, dot smith four two, at example, dot com

↔

uppercase{word}@{word}<dot>{domain}

SALES@EXAMPLE.COM 🆕

sales, at example, dot com

↔

uppercase{word}!={symbol}!={number}@{word}<dot>{domain}

FFI.SHDFI.GM@MARRIOTT.COM 🆕

f f i, dot s h d f i, dot g m, at marriott, dot com

↔

Note: digits are read one by one, _ reads "underscore", and short code-like parts are spelled letter by letter.

Currency

Format

Example input

Lexis

Odi

{symbol}{amount}

$25.10

twenty five dollars and ten cents

↔

{amount}{symbol}

25.10€

twenty five euros and ten cents

↔

{amount} {code}

25 USD

twenty five u s dollars

↔

{amount} {quantity} {code}

1.3 million USD

one point three million u s dollars

↔

{symbol}{amount} {quantity}

$1.3 million

one point three million dollars

↔

{symbol}{amount} {code}

$5 CAD 🆕

five canadian dollars

↔

Note: in en-CA the symbol $ is read "dollar(s)" and the cents are "cents". A CAD written after the amount is read once ("$5 CAD" is "five canadian dollars"). The US dollar is written USD; US$ is not expanded ("US$5" is "us$ five").

Currency codes and symbols

Each reading shows the singular / the plural form. The subdivision is read after "and" when the amount has decimals ("1.01" and "2.50").

Code

Lexis

Odi

Subdivision

USD

u s dollar / u s dollars

↔

cent / cents

EUR

euro / euros

↔

cent / cents

GBP

pound sterling / pounds sterling

↔

penny / pence

AUD

australian dollar / australian dollars

↔

cent / cents

CAD

canadian dollar / canadian dollars

↔

cent / cents

JPY

japanese yen / japan yen

↔

none: 1.50 JPY reads one point five japanese yen

Symbol

Lexis

Odi

Subdivision

$

dollar / dollars

↔

cent / cents

€

euro / euros

↔

cent / cents

£

pound / pounds

↔

penny / pence

¥ 🆕

japanese yen / japan yen

↔

none

Punctuation and character processing

Supported characters

Char

Description

Used as/in

Lexis

Odi

.

period

sentence end / decimal separator

✅

↔

,

comma

sentence break / thousands separator

✅

↔

-

dash

number group / minus sign

✅

↔

@

at sign

email address

✅

↔

%

percent

percentage value, in URLs

✅

↔

&

ampersand

"and" (between capital letters it is passed through for Lexis and read as "n" by Odi)

✅

↔

$ € £ ¥

currency signs

part of currency

✅

↔

=

equal sign

in URLs

✅

↔

;

semicolon

in URLs

✅

↔

? !

question mark, exclamation mark

sentence end (see intonation)

✅

↔

: / ( )

colon, slash, brackets

time, ratio, URLs, fractions, dates

✅

↔

° ² ³ " '

degree, superscripts, quotes

units

✅

↔

The slash is read "slash". Other symbols are read by name in both voices: \ "backslash", ^ "caret", _ "underscore", + "plus", # "pound", * "asterisk" and ~ "tilde". Outside times, ratios and URLs a colon or semicolon is replaced by a full stop, and brackets are passed on unchanged. The vulgar fraction ½ is not converted.

Any other character is removed and does not affect the voice, in both engines. The trademark (™), service mark (℠), registered (®) and copyright (©) signs are removed earlier, by the engine's request pre-processing, before the text reaches the verbalizer. The verbalizer itself does not process them.

Example: Design Hotels™ welcomes you → design hotels welcomes you.

Punctuation intonation

Char

Lexis effect

Odi effect

.

falling intonation

↔

?

rising intonation (en-US question-type rules: yes/no, wh-, multiple choice)

↔

,

falling intonation

↔

!

a lone exclamation mark is rewritten as a full stop (falling intonation)

increased intensity

space / dash

short pause (a spaced dash is a fixed pause of 0.2 s)

↔

no punctuation at the end of a sentence

a period is added automatically

↔