Research
How accurate are free braille translators?
Every one of them says it does Grade 2. None of them says how well. This is what happens when you check.
Search for a braille translator and you will find a dozen free ones. Every single one says it handles Grade 2 contractions and Unified English Braille. Not one of them publishes a figure for how often it is right, and none of them shows you a word it gets wrong.
That is not because the tools are bad. It is because publishing the number requires two things most projects do not have: 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
- 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) — the translator that braille displays, embossers and screen readers actually run, using its published UEB Grade 2 table.
- Over
- The 5,000 commonest English words, in frequency order.
- Kept in
- the site's verification code,
verify/verify-ueb.js, which runs the reference itself
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
| Measure | Result | What it means |
|---|---|---|
| Words identical | 4,999 of 5,000 — 99.98% | Every cell the same, including where a contraction was declined. |
| Weighted by frequency | 99.9% or better | Measured when fourteen words differed. One differs now, so the true figure is far higher; this stays as a floor. |
| Words that differ | 1 | Listed 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 what a transcriber would write. 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 eight more found in the benchmark below. 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.
| Word | Rank | This site | Reference | Why |
|---|---|---|---|---|
| ar | #2,182 | ⠜ 1 | ⠁⠗ 2 | A 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,733 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 is the next thing this page needs.
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.
- 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 corpus is the 5,000 commonest words. Rarer words are not measured, and rarer words are where contraction rules bite hardest.
- 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.
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.
