Research

How accurate is this free braille translator?

A translator that says it does Grade 2 is asking to be taken on trust. This is what happens when one is checked, and its failures are published.

“Grade 2, Unified English Braille” costs nothing to say. It means something only with a figure for how often the output is right and a list of the words that come out wrong. This page gives both for this site’s translator.

Publishing the number takes two things: a reference implementation to be measured against, and a willingness to list your own failures on your own website. The first is free. The second is the awkward part.

The method

How this was measured
Question
For a given English word, does this site's Grade 2 output match the reference implementation exactly, cell for cell?
Compared against
liblouis 3.39.0 (en-ueb-g2), using its published UEB Grade 2 table. Its project lists the screen readers NVDA, Orca, BrailleBack and JAWS, and the production system BrailleBlaster, among the software built on it.
Over
The 5,000 commonest English words, in frequency order: the first 5,000 entries of google-10000-english, which is drawn from Peter Norvig's word counts of Google's Trillion Word Corpus. That corpus was collected from public web pages, so this is the English of the web: click is 94th and ebay 217th, and 26 of the 5,000 entries are single letters.
Kept in
the site's verification code, verify/verify-ueb.js, which runs the reference itself; all seven checks are published

The comparison runs the reference itself every time, pinned to that exact release and checked against its published hash, so a newer liblouis cannot quietly change the number — moving to a new release is a decision, made and dated on this page.

The test asserts a floor rather than perfection. The floor is read from the same figure this page prints, so a claim here that the engine cannot meet fails the check. The number on the page and the number the engine scores are the same number by construction; they cannot drift apart.

The result

Grade 2 conformance against the reference
MeasureResultWhat it means
Words identical4,999 of 5,000 — 99.98%Every cell the same, including where a contraction was declined.
Weighted by frequency99.9% or betterMeasured when fourteen words differed. One differs now, so the true figure is far higher; this stays as a floor.
Words that differ1Listed in full below, with what happened in each.

Two numbers, because they answer different questions. The flat rate treats “the” and “trombone” as equally important, which is the right way to describe a dictionary and the wrong way to describe reading. The weighted rate applies each word's frequency, and is the figure a reader experiences: fewer than one word in 1,156 of ordinary text comes out differently from the reference. That figure was measured when fourteen words differed. All fourteen have left the list since and one word has joined it, ar, which stands lower in the frequency list than any of them; so the weighted rate can only have risen, and 99.9% is now a floor rather than a measurement. The word frequencies behind the weighting are not in the published corpus, so it is stated as a bound rather than re-derived.

The one disagreement

Updated 18 September 2026, twice in one day. First the engine took up the rulebook's own rules for the initial-letter contractions (Rules of Unified English Braille 10.7.2 to 10.7.9), which fixed multimedia, reverse, severe and coupons. Then it took up bridging (10.11): a groupsign may not reach across the join between the parts of a compound word — cart|horse is written ⠉⠜⠞⠓⠕⠗⠎⠑ and not ⠉⠜⠹⠕⠗⠎⠑ — nor across a prefix when the letters are “ea”. That fixed reaction (re|action) and whereas (where|as), and with them the last two words of the Shortforms List, which now matches the reference on all 1,065 entries.

Which words are compounds is a fact about English rather than about braille, and no spelling rule settles it: a program that reads “fat” and “her” out of father bars a contraction the rulebook uses, and one told that a prefix always makes a join breaks mistake, renew and agreeable, which the rulebook contracts straight through. So the engine holds the words rather than a rule for finding them — every word the rulebook names in 10.11, with the position of the join, and the compounds found since by comparing with the reference over wider word lists. A word it has never seen is contracted as before.

Rank is position in the frequency list, so the first row is the most common word on which the two disagree. Nothing is left out.

Every word where this site and the reference disagree
WordRankThis siteReferenceWhy
ar#2,182⠜ 1⠁⠗ 2A letter-group sign the reference spells out

The small number after each spelling is its length in cells. The braille characters are real Unicode braille, so a refreshable display shows the actual cells rather than a picture of them.

What is left, and what it costs

One row, and it is the one where the rulebook sides with this engine rather than with the reference. A strong groupsign is used wherever its letters occur unless another rule limits it (10.4.1), and only the signs that would read as a word of their own — ch, sh, th, wh, ou, st — are spelled out when they stand alone (10.4.2). The rulebook writes “-ar” and “ar-” with the sign; the reference spells out a-r.

That is worth being plain about: it means the measurement has stopped being a list of this engine's mistakes. The words that used to be on it turned on pronunciation and word structure — multimedia, severe, reaction, whereas — and each left when the engine took up the rule the rulebook states, not when it was tuned to agree. The check that guards them is the rulebook's own worked examples, 1,898 of them now, every one written cell for cell.

What this does not mean is that the engine is right everywhere. It means the 5,000 commonest words no longer separate it from the reference, so a larger and harder measurement was the next thing this page needed. It is below.

The harder measurement: the rulebook's own word list

Added 2 October 2026. The 5,000 commonest words are the easy part of English. The hard part is in the back of the rulebook: Appendix 2 of the Rules of Unified English Braille is an alphabetic list of every example word its contractions section uses, 1,043 of them, each with its braille. They were chosen to show where the rules bite, so they are the words a translator is most likely to get wrong.

The rulebook's Word List, 1,043 entries
TranslatorWritten as the rulebook gives themNot
This site1,0367
liblouis 3.39.01,03013

That was not the figure when this was first run. Until this date the site checked itself against a file of rulebook examples that held only the ones its translator already wrote correctly, so the count of those it got wrong was never taken. Run against the whole list, it got thirty-one wrong. Twenty-two were real gaps in rules it claimed to follow, and are fixed: fruity, rabbity, biscuity, dacoity and hoity-toity without the sign for ity (10.8.3); captainess, citizeness and heatheness without the sign for ness (10.8.4); chockfull with the sign for ful (10.8.1); asthma and isthmus with th rather than st (10.10.8); Esther and calisthenics with the sign for the (10.3.1, 10.10.3); renamed and mistimed with the signs for name and time; electroencephalogram, inessential, Betws-y-Coed, e'en, bein', whaddaya and Somesch River. Two more were fixed on 11 October 2026, when the translator learned the ligatures æ and œ (4.3.1): ædile and færie. The seven that remain are below, each with the reason. None is a rule the translator applies wrongly; each needs something plain text does not carry.

The seven Word List entries this site writes differently
EntryThe rulebookThis siteWhy
Al⠠⠁⠇⠰⠠⠁⠇The Word List gives the letters bare, but rule 10.9.7 and its own example Al's put a grade 1 indicator before a word standing alone that would read as also; this translator and liblouis 3.39.0 both write the indicator
GreatGrandChild⠘⠂⠠⠛⠗⠂⠞⠘⠄⠠⠛⠗⠯⠠⠡⠊⠇⠙⠠⠛⠗⠞⠠⠛⠗⠯⠠⠡⠊⠇⠙The rulebook's example is printed partly in bold, and its braille carries the typeform indicators; plain text has no bold to carry
IT (Information Technology)⠠⠠⠊⠞ ⠐⠣⠠⠔⠿⠍⠁⠰⠝ ⠠⠞⠑⠡⠝⠕⠇⠕⠛⠽⠐⠜⠠⠠⠭ ⠐⠣⠠⠔⠿⠍⠁⠰⠝ ⠠⠞⠑⠡⠝⠕⠇⠕⠛⠽⠐⠜10.1.3 spells IT out because the letters are said separately; that is known from the meaning, which letters alone do not give, and liblouis 3.39.0 writes the wordsign too
mod cons⠍⠕⠙ ⠒⠎⠍⠕⠙ ⠉⠕⠝⠎10.6.4 uses the con sign because cons abbreviates conveniences; in pros and cons the same letters are spelled, and nothing in the text says which is meant. liblouis 3.39.0 spells it too
Quickbraille⠠⠟⠥⠊⠉⠅⠨⠂⠃⠗⠁⠊⠇⠇⠑⠠⠟⠅⠃⠗⠇The rulebook's example is printed partly in italics, and its braille carries the typeform indicator; plain text has no italics to carry
SuperBraille⠠⠎⠥⠏⠻⠨⠂⠠⠃⠗⠁⠊⠇⠇⠑⠠⠎⠥⠏⠻⠠⠃⠗⠇The rulebook's example is printed partly in italics, and its braille carries the typeform indicator; plain text has no italics to carry
US (United States)⠠⠠⠥⠎ ⠐⠣⠠⠥⠝⠊⠞⠫ ⠠⠌⠁⠞⠑⠎⠐⠜⠠⠠⠥ ⠐⠣⠠⠥⠝⠊⠞⠫ ⠠⠌⠁⠞⠑⠎⠐⠜10.1.3 spells US out because the letters are said separately; that is known from the meaning, which letters alone do not give, and liblouis 3.39.0 writes the wordsign too

liblouis misses seven of the same nine (it writes the two ligatures) and six of its own: BEd, DeafBlind, Dobrljin, ozbrl, UNSD and captainess, where its table has a stray cell and writes the i twice. The check that guards this is verify/verify-rulebook.js, which now holds the whole list and fails if the nine change in either direction.

And past the benchmark: 46,717 words

The second measurement is breadth. Every word in a 46,717-word frequency list, built from film and television subtitles and so full of names, slang and typing errors, was written by this site and by liblouis 3.39.0. They differ on 35, which is 0.07%. With the translator as it stood that morning they differed on 160. Most of those were compound words with a contraction across the join, such as courthouse, react and takeaway, which rule 10.11 forbids and no spelling rule can detect. The translator holds a list of such joins, and it now holds these. One was a plain error: evert was written with the sign for ever, which rule 10.7.4 keeps for a stressed first e.

Of the 35 that are left, five are letter groups such as frm and gdr, which rule 10.9.8 marks with a grade 1 indicator because they would otherwise read as “friend” and “good” with a letter added; the reference leaves them bare. One is ar, which this site writes with its sign as rule 10.4.1 writes ed. and er standing alone; the reference spells it. Five are two words typed as one in the subtitles (overthere, ofthose). Twenty are names (Leah, Roseanne, Dumbledore), where the reference keeps exceptions of its own. The other four are bein, subbing, arggh and christmastime. These are differences from the reference, not a count of errors: the rulebook sides with this site on some and with the reference on others. The list and the 35 are held in verify/verify-wider.js, which fails if the set moves.

Which direction the errors run

This matters more than the count. Writing a contraction the reference does not use produces braille that is wrong, and a reader is misled. Spelling something out where the reference contracts produces braille that is longer and correct — a reader loses nothing but space.

The one that is left is this engine writing a contraction the reference does not use, and it is the safe direction: the cells are shorter, they decode to the same word, and the rulebook gives that spelling. Every row that ran the other way — braille that was genuinely wrong — has gone.

The engine used to be tuned for that asymmetry: where a rule was decided by measurement rather than by the rulebook, it declined the contraction. Most of those measurements have since been replaced by the rule they were standing in for, which is why the list is one row long; where a rule still turns on something a program cannot read, such as how a word is pronounced, it holds the rulebook's own examples and declines anything it has not been told about. That costs cells and buys correctness, which is the right trade for a tool people check their work against.

What the number does not mean
  • This measures words in isolation. A document has capitals, numbers, punctuation and line breaks, and the rules for those interact in ways a word list cannot show.
  • The headline figure is the 5,000 commonest words. Rarer words are where contraction rules bite hardest, and they are measured separately above: the rulebook's own Word List, and a 46,717-word list.
  • Not one word in the corpus contains an accent, a curly quote or a currency sign, so this number says nothing about them. Those are measured separately and at parity — see below.
  • It is not a certification. Good enough to read, learn from, and check your work against. Not a substitute for a certified transcription — if the output is going to be embossed for someone to rely on, have a qualified transcriber check it.

The gap this number was hiding

A word-frequency corpus is all words, and words are all letters. For a long time that meant everything outside a to z went unmeasured — and unmeasured turned out to mean broken. The translator was silently deleting every accented letter, curly quote, dash and currency sign it was given: mañana came back as maana, café as caf, and don't typed on a phone came back as dont, because the apostrophe a phone produces is not the one on a keyboard.

Nothing warned anyone. The output was shorter than it should have been, which is invisible unless you count cells.

That is fixed, and fixed the same way as everything else here: 197 characters — the accented letters, the symbols and the punctuation marks — are checked against the reference. Translated one at a time in Grade 2, 193 come out cell for cell the same. The other four are the quotation marks, whose cells depend on what stands beside them: on their own they take the two-cell or marked forms the rules give a quote that could otherwise be read as a word (Rules of Unified English Braille 7.6.8 and 7.6.10), and the reference does not.

Two of them were simply wrong rather than missing. The hash and per cent signs carried the wrong prefix cell, while this site's own dot-number pages stated the right one. That is the kind of contradiction a site can hold for months without noticing, and it is why the check now covers every entry in the table rather than a sample.

Anything the engine still cannot write is now named on the page instead of being dropped in silence.

In running text: three novels

A word list has no capitals, no punctuation, no quotation marks and no numbers in a sentence. So the three novels the page estimator is measured on are translated whole, paragraph by paragraph, by this translator and by liblouis 3.39.0, and compared word by word: 223,107 words.

Words written differently from the reference in running text
BookWordsWritten differently
Alice’s Adventures in Wonderland26,43914
Pride and Prejudice121,6936
Frankenstein74,9752
All three223,10722

That is 22 words in 223,107, 0.010%. They are of five kinds, and for each the rulebook has a rule:

The first run, on 11 October 2026, found two faults here that no word list had shown. The translator had no æ or œ, which Frankenstein prints 21 times, 19 of them in “dæmon” and “dæmons”; it left them out and said so. And it wrote a plural possessive inside single quotation marks — ‘to pay three months’ rent and to lose the produce of your garden.’ — with the closing mark after “months”. Both are fixed. Of the second the rulebook says that telling the two marks apart “cannot be wholly automated with complete accuracy” (7.6.13), and that remains so: this translator takes the mark for an apostrophe only when the quotation plainly closes later.

Each of the 22 is a line of expected-context-differences.tsv, with its sentence, both spellings and the rule. The check fails if a word joins them or leaves them. The three texts are alice-body.txt, pride-body.txt and frankenstein-body.txt.

The same comparison is made for the four other codes, each over one whole book: Spanish, 353 of 379,584 words; Portuguese, 132 of 65,119; Arabic, 58 of 45,749; and Hindi, 161 of 89,098. Each of those pages says what the differences are.

Check it yourself

Every word where the two disagree is in the table above, with both sides' cells, and each takes seconds to check: liblouis is free software, and lou_translate --forward unicode.dis,en-ueb-g2.ctb on the word gives the reference's answer. If you disagree with a row, the row is right there to disagree with.

You can also try it in the translator, or put one through the contraction finder, which shows which contractions applied, which were legal and passed over, and which a rule forbade. The rest of the research reports what the measurements turned up.

The finding, as a card

For anyone who wants to share the number without the argument attached.

A card reading 99.98%: the share of the 5,000 commonest English words this site's Grade 2 output matches the reference translator on.

Download the PNG — CC BY 4.0.