Your files never leave your device. All processing happens locally in your browser.
How do I run automated QA checks on a translation before I ship it?
Paste your source text and the line-aligned translation (or a 2-column source⇥target paste) and AnyTool runs nine mechanical QA checks in your browser: untranslated segments, placeholder / tag / variable mismatch ({0}, {name}, %s, %1$s, $1, <b></b>, [x]), number mismatch, glossary & consistency, ending-punctuation mismatch, whitespace, repeated words and length ratio. It flags each segment with a severity and a plain-language detail and exports a CSV or Markdown report. It checks mechanics only — it does NOT judge meaning, grammar, tone or fluency, so a human / native-speaker review is still required.
Nine automated checks: untranslated, placeholder / tag, number, glossary, consistency, punctuation, whitespace, repeated word, length ratio
Catches the variables that break builds: {0}, {name}, {{var}}, %s, %d, %1$s, $1, <b></b>, [x] and &entity; tokens missing from or added to the target
Optional glossary enforces terminology consistency (a term must always be translated the same way)
Filter by severity / check, then export a flat CSV (one row per issue) or a Markdown report, or copy it
Mechanical checks only — does NOT judge meaning, grammar, tone or fluency; 100% in your browser, nothing uploaded
What is
Translation QA (automated / mechanical checks)
A set of deterministic, rule-based checks that compare a source string with its translation to catch mechanical localization defects — untranslated or empty segments, placeholder / tag / variable mismatches ({0}, %s, <b>), number mismatches, terminology / glossary inconsistency, ending-punctuation differences, stray whitespace, repeated words and abnormal length ratios. It is the same automated family that localization QA tools (ApSIC Xbench, Verifika, QA Distiller, memoQ’s QA module) run before human review. AnyTool’s Translation QA Sheet runs these in the browser; it checks mechanics, not meaning, so a qualified human reviewer is still required.
The standard mechanical checks are: untranslated segments (empty target or target identical to source), placeholder / tag / variable mismatch (a {0}, %s, <b> or {{var}} present in the source but missing from the translation), number mismatch, terminology / glossary consistency, ending-punctuation mismatch, double or edge whitespace, repeated words and abnormal length ratio. AnyTool runs all nine in the browser and flags each segment with a severity.
Localization QA tools run a family of mechanical, rule-based checks that compare each source segment with its translation. The core ones are: UNTRANSLATED (the target is empty, or identical to a non-trivial source); PLACEHOLDER / TAG / VARIABLE mismatch — every {0}, {name}, {{var}}, %s, %d, %1$s, $1, <b></b>, [x] and &entity; in the source must appear unchanged in the translation, because a missing or altered placeholder breaks the build or shows a raw token to the user; NUMBER mismatch — the digits in the source should appear in the translation; TERMINOLOGY / GLOSSARY consistency — an approved term must always be translated the same way; CONSISTENCY — the same source segment should get the same translation; ending-PUNCTUATION mismatch; WHITESPACE (double spaces, leading / trailing); REPEATED words; and LENGTH ratio (possible truncation or over-translation). AnyTool’s Translation QA Sheet runs all of these deterministically, tags each with error / warning / info severity, and exports a CSV or Markdown report.
No. It runs mechanical checks only — placeholders, numbers, untranslated, length, punctuation, glossary, whitespace. It does NOT judge meaning, grammar, tone, fluency or accuracy, and it cannot tell whether the translation is right. A qualified human / native-speaker reviewer is still required.
The tool is deliberately honest about its scope. It compares source and target with deterministic string rules to find mechanical defects — a missing placeholder, a number that vanished, an untranslated line, an inconsistent term, a stray double space, a wildly different length. It has no understanding of meaning: it cannot tell whether the words chosen are accurate, natural, grammatical, well-toned or culturally appropriate, and a segment can pass every mechanical check while being a completely wrong translation. Some flags are also legitimate false positives — a number correctly re-localized (1,000 → 1.000), an idiom, an intentional length change, a language whose punctuation rules differ. So a clean result is not a quality verdict; it means no mechanical defect was found in the checks that ran. Always follow it with a human / native-speaker review.
Use two line-aligned blocks (source on the left, translation on the right, one segment per line) or a 2-column paste where each line is source then a TAB (or “ | ”) then the translation — copy two columns straight from a spreadsheet. Add an optional glossary as “source term = target term” lines to enforce terminology.
There are two input modes. In two-block mode you paste the source text in one box and the translation in the other, one segment per line, aligned 1:1; the tool pairs line 1 with line 1, line 2 with line 2, and so on. In 2-column mode you paste one segment per line as source, a TAB (or a “ | ”), then the translation — which is exactly what you get when you copy two columns out of Excel, Google Sheets or a CSV. You can also supply an optional glossary, one pair per line as “source term = required target term” (also “=>”, “:” or TAB), and the glossary check flags any segment whose source contains the term but whose target is missing the required translation. You can toggle individual checks on or off, then export the flagged report as CSV or Markdown.
It is fully private. It is rule-based string analysis, not an AI, and it runs entirely in your browser — your source and translated text are never uploaded, logged or stored, and it works offline once cached. That makes it safe for confidential or unreleased content.
Everything happens locally with deterministic string and regex matching — there is no AI or LLM, no server and no network call. The source and translation you paste are analysed on your device and never sent anywhere, logged or stored, no account or email is required, and the page works offline once cached. That is unlike cloud QA tools and many online “translation checker” sites, which send your strings to a server before returning a result — a problem when the text is a pre-launch app, an unreleased product, a contract or other confidential material. Because the tool is rule-based and mechanical, it is also explicit that you must still have a human review the translation for meaning and quality.
Detailed Explanation
⚙️Methodology
How the Translation QA Sheet Checks a Translation (Mechanical Rules + Regex, Not an LLM)
The Translation QA Sheet is a deterministic, rule-based engine that runs entirely in the browser with no AI, LLM, server or network call. It takes a SOURCE block and a line-aligned TARGET block (or a 2-column source⇥target paste where each line is the source, then a TAB or “ | ”, then the translation) and an optional glossary, pairs each source segment with its translation, and runs nine mechanical checks per segment. UNTRANSLATED flags an empty target or a target identical to a non-trivial source (short tokens, URLs, emails, codes and pure numbers are excluded because they are legitimately identical). PLACEHOLDER / TAG / VARIABLE extracts tokens with an ordered set of regular expressions — {{var}}, {0} / {name}, %1$s positional printf, %s / %d / %02d / %.2f printf, ${var}, $1, <b></b> / <br/> HTML tags, &amp; / &#160; entities and [x] brackets — with more-specific patterns claiming a span first so “%1$s” is one token, then compares the source and target token multisets and reports what is missing from or extra in the target. NUMBER strips placeholders first, then compares the multiset of numeric tokens by digit sequence (so 1,000 and 1.000 compare equal because numbers are often legitimately re-localized). GLOSSARY flags any segment whose source contains a glossary term but whose target lacks the required translation. CONSISTENCY flags identical source segments translated two different ways (and a target reused for two different sources). PUNCTUATION compares the ending mark, WHITESPACE catches double / leading / trailing spaces, REPEATED catches a back-to-back duplicated word, and LENGTH flags a target/source character ratio outside roughly 0.4×–2.5× (skipped for very short strings). Every issue carries a severity (error / warning / info) and a plain-language detail.
Two input modes — two line-aligned blocks, or a 2-column source⇥target paste — plus an optional glossary
Placeholder regex covers {0}, {name}, {{var}}, %s, %d, %1$s, ${var}, $1, <b></b>, &entity; and [x], compared as multisets
Numbers compared by digit sequence so 1,000 and 1.000 match (numbers are often legitimately localized)
Nine checks: untranslated, placeholder, number, glossary, consistency, punctuation, whitespace, repeated word, length ratio
Deterministic string / regex analysis — no AI, LLM, server or upload; runs offline once cached
📋Use Cases
A Per-Segment Flagged Report, Severity & Check Filters, and CSV / Markdown Export
Results are shown as a summary read-out plus a per-segment flagged list. The summary gives the number of segments checked, how many are flagged (and the percent), how many are clean, the total issue count, and a breakdown by severity (error / warning / info) and by check; clicking a per-check chip filters the list to that check, and a severity filter row narrows it further. Each flagged segment card shows its number, the checks that fired as labelled pills, the source and target side by side in a monospaced view, and a bullet for every issue with its severity dot and a plain-language detail (for example “Placeholder / tag mismatch — missing in target: ‘{name}’” or “Number mismatch — in source but not target: ‘3’”). Severity is assigned mechanically: missing placeholders and untranslated segments are errors, number / glossary / consistency are warnings, and punctuation / whitespace / repeated / length are informational hints. The whole report exports two ways — a flat CSV with one row per issue (segment, source, target, check, severity, detail) that opens straight in a spreadsheet, and a Markdown report with the summary table and every flagged segment for pasting into a ticket — and a one-click copy. Individual checks can be toggled on or off before running, and a built-in example (with a deliberately mismatched placeholder, an untranslated line, a number flipped by localization, a glossary miss and a double space) shows what each flag looks like.
Summary read-out: segments checked, flagged count & percent, clean count, totals by severity and by check
Per-segment cards show source vs target side by side with every fired check, its severity and a plain-language detail
Filter the list by severity (error / warning / info) or by a specific check; toggle checks on / off before running
Export a flat CSV (one row per issue) or a Markdown report, or copy it to paste into a ticket
Severity is mechanical: missing-placeholder & untranslated = error; number / glossary / consistency = warning; the rest = info
⚠️Limitations
Honest Limits: Mechanical Checks Only, Not Meaning — and Privacy
The Translation QA Sheet is deliberately honest about what it is. It runs MECHANICAL, rule-based checks — it catches placeholder / tag, number, untranslated, length, punctuation, whitespace, repeated-word, glossary and consistency issues, but it does NOT judge meaning, grammar, tone, fluency, style or accuracy, and it cannot tell whether a translation is actually correct. A segment can pass every check and still be a completely wrong translation, so a clean result is not a quality verdict — it means no mechanical defect was found in the checks that ran, and a qualified human / native-speaker reviewer is still required. Some flags are legitimate false positives: a number correctly re-localized, an idiom, an intentional length change, or a language whose punctuation rules differ — so every flag should be reviewed in context rather than fixed blindly. The tool sits alongside professional localization QA tools (ApSIC Xbench, Verifika, QA Distiller, memoQ’s QA module), which run the same automated family before human review; it is a fast, free, private first pass, not a replacement for that human review. On privacy, everything is processed locally: the source and translated text you paste are analysed right in the browser with no AI, no server and no network call, nothing is uploaded, logged or stored, no account or email is required, and the page works offline once cached — which makes it safe for confidential or unreleased content (pre-launch app strings, unreleased product copy, contracts) that you should not send to a cloud QA service.
Mechanical checks only — does NOT judge meaning, grammar, tone, fluency, style or accuracy
A clean result is not a quality verdict; a qualified human / native-speaker reviewer is still required
Some flags are false positives (localized numbers, idioms, intentional length / punctuation differences) — review in context
Same automated family as Xbench / Verifika / memoQ QA — a fast, free, private first pass, not a replacement for human review
Source & translated text processed locally — nothing uploaded; safe for confidential / unreleased content; works offline
Text never uploaded; no email/account; safe for confidential content
Often uploads strings to a server
Cost / signup
Free, no signup
Often paid / licensed / email-walled
AnyTool runs the same automated, mechanical QA family locally with transparent rules, and is honest that it checks mechanics — placeholders, numbers, untranslated, length, punctuation, glossary — not meaning. Fix the flagged mechanical defects, then always have a qualified human / native-speaker reviewer check the translation for accuracy, grammar and tone.