QA Validator Check Catalogue

Every check the ChatsControl Translation QA Validator runs, fully documented. Names, MQM categories, severity defaults, language coverage, and worked examples. Unlike competitor tools that bundle vague "55 checks", we publish the complete list — so you know exactly what we look for and why.

locale-quotation-marks

Locale Quotation Marks

MQM: locale-convention · Quotation marks Severity: minor

Flags ASCII straight quotes (`"..."`) in the target when the target locale's CLDR convention uses different characters (e.g. `„..."` for German, `«...»` for Russian/Ukrainian, `「...」` for Japanese).

Source
She said "hello".
Bad target
Sie sagte "hallo".
Good target
Sie sagte „hallo".

LLM translations are notoriously inconsistent on quotation style. Professional translators and style guides treat locale-correct quotation marks as table stakes — wrong quotes signal amateur output to clients and reviewers.

Language coverage: All 101 CLDR locales

locale-decimal-separator

Locale Decimal Separator

MQM: locale-convention · Decimal separator Severity: minor

Flags numbers in the target that use a different decimal separator than the locale CLDR data prescribes (English `.` vs German/Russian/Ukrainian `,`).

Source
The price is 1,234.50 EUR.
Bad target
Der Preis beträgt 1,234.50 EUR.
Good target
Der Preis beträgt 1.234,50 EUR.

Decimal/thousands confusion is a common factual error and reads as unprofessional to native readers. CLDR-grade locale awareness is rare in QA tools — most use English-centric heuristics.

Language coverage: All 101 CLDR locales

locale-group-separator

Locale Group Separator

MQM: locale-convention · Number format Severity: minor

Flags the thousands separator. Locales vary: `,` (en), `.` (de), non-breaking space (uk, fr, sv), `'` (de-CH).

Source
1,000,000 records
Bad target
1,000,000 записів
Good target
1 000 000 записів

Mostly cosmetic but consistently mis-formatting numbers makes the translation look like a machine dump.

Language coverage: All 101 CLDR locales

locale-percent-format

Locale Percent Format

MQM: locale-convention · Number format Severity: minor

Flags percent-sign spacing that diverges from the locale's CLDR pattern. German requires a non-breaking space (`5 %`), English is glued (`5%`).

Source
Inflation rose 5%.
Bad target
Inflation stieg um 5%.
Good target
Inflation stieg um 5 %.

Trivial individually, glaring across an entire document. Easy to miss in manual review.

Language coverage: All 101 CLDR locales

numerical-mismatch

Numerical Mismatch

MQM: accuracy · Mistranslation / Omission Severity: critical

Compares numeric values between source and target. Cross-locale aware: `1,234.50` (en) matches `1.234,50` (de). Date components (`15.03.2026`) are skipped to avoid false positives.

Source
Take 5.25 mg three times daily.
Bad target
Take 525 mg three times daily.
Good target
Take 5.25 mg three times daily.

The most common factual error in legal, medical, and financial translation. A misplaced decimal in a dosage instruction is a patient-safety failure mode; a wrong digit in a contract amount is a legal liability.

Language coverage: Language-agnostic; locale-aware via CLDR

untranslated-segment

Untranslated Segment

MQM: accuracy · Untranslated Severity: major

Flags segments where the target equals the source. Suppresses false positives for URLs, emails, dates, acronyms (<3 chars), pure-numeric strings, and known untranslatable tokens.

Source
Hello world.
Bad target
Hello world.
Good target
Привіт, світе.

Translators occasionally skip segments — paste-buffer mishaps, fatigue, or assuming a string is non-translatable. The check catches them while keeping noise low.

Language coverage: Language-agnostic

empty-target

Empty Target

MQM: accuracy · Omission Severity: critical

Flags segments where the source has translatable content but the target is empty or whitespace-only.

Source
This must be translated.
Bad target
Good target
Це треба перекласти.

A missing translation in a delivered file is a delivery failure.

Language coverage: Language-agnostic

tag-mismatch-html

HTML/XML Tag Mismatch

MQM: design · Markup Severity: major

Compares HTML/XML tag NAMES (not attribute values) between source and target. Translators may legitimately localize URLs or alt text inside attributes, but missing or extra tags break rendering. Self-closing structural tags (`
`, ``) escalate to CRITICAL.

Source
Hello <b>world</b>!
Bad target
Привіт світ!
Good target
Привіт <b>світ</b>!

Dropping a `<br/>` breaks document layout. Dropping `<a>` destroys hyperlinks. Common in technical-content translation.

Language coverage: Language-agnostic

tag-mismatch-placeholder

Placeholder Mismatch

MQM: design · Markup Severity: critical

Flags missing/extra placeholders: ICU MessageFormat `{count}`, printf-style `%s`/`%d`/`%1$s`, and Python-style positional `{0}`. Missing named placeholders are CRITICAL — they break runtime rendering.

Source
You have {count} new messages.
Bad target
У вас є нові повідомлення.
Good target
У вас є {count} нових повідомлень.

Software localization staple. Drop a placeholder and the app renders broken strings to end-users.

Language coverage: Language-agnostic

punctuation-terminal

Terminal Punctuation

MQM: fluency · Punctuation Severity: major

Flags mismatch between the source's terminal punctuation and the target's. Cross-script aware — `.` and `。` are equivalent.

Source
Are you ready?
Bad target
Ти готовий.
Good target
Ти готовий?

Changes sentence force (statement vs question).

Language coverage: Cross-script: CJK `。`, Greek `;`, Arabic `؟`, Armenian `:`, Devanagari `।`

punctuation-bracket-pair

Bracket / Quote Pair Balance

MQM: fluency · Punctuation Severity: major

Flags unbalanced opening/closing pairs in the target. Catches the common copy-paste error of dropping a closing bracket.

Source
See note (a) for details.
Bad target
Див. примітку (а для деталей.
Good target
Див. примітку (а) для деталей.

Reads as broken; signals careless review.

Language coverage: Language-agnostic; pairs include `()`, `[]`, `{}`, `«»`, `„"`, `「」`

punctuation-double-space

Double Space

MQM: fluency · Whitespace Severity: minor

Flags consecutive spaces in the target text.

Source
Hello world
Bad target
Привіт світ
Good target
Привіт світ

Cosmetic but pervasive in machine output; trivial to fix once flagged.

Language coverage: Language-agnostic

grammar-languagetool

Grammar & Spelling (LanguageTool)

MQM: fluency · Grammar / Spelling Severity: major

Sends the target text to LanguageTool's public API for grammar, spelling, and style checking. Rule matches are mapped to MQM Fluency category with severity by rule category.

Source
The cat sits on the mat.
Bad target
Die Katze sitz auf der Matte.
Good target
Die Katze sitzt auf der Matte.

Catches verb-conjugation errors, agreement bugs, and spelling mistakes that pure heuristic tools can't. LT-uk is particularly deep — 11k+ replace rules for Ukrainian.

Language coverage: ~45 languages via LanguageTool API (full grammar for en/de/fr/es/pt/it/nl/pl/uk/ru/ja/zh-CN; spelling+style elsewhere)

inconsistent-translation

Inconsistent Translation

MQM: terminology · Inconsistent Severity: major

Across a multi-segment document, flags the same source phrase (3+ words) being translated multiple different ways. The classic CAT-tool consistency check.

Source
(Two segments with identical source: 'The agreement is signed.')
Bad target
Угода підписана. → Договір підписано.
Good target
Угода підписана. → Угода підписана.

Legal and financial style guides mandate terminology consistency. Inconsistent translation of the same term creates ambiguity that courts may interpret against the translator/agency.

Language coverage: Language-agnostic

custom-regex

Custom Regex Rules

MQM: other · User-defined Severity: major

User-supplied regex rules. Each rule has a name, pattern, severity, and `match_is_error` flag (default true — match = violation; false = match must be present, missing match = violation).

Source
(rule: pattern=`\bналаштування\b`, match_is_error=true)
Bad target
Відкрийте налаштування меню.
Good target
Відкрийте параметри меню.

Client style guides often include forbidden terms or required phrasing. Custom rules let you encode them and run the check across every translation.

Language coverage: Language-agnostic

length-deviation

Length Deviation

MQM: design · Length Severity: major

Per-segment length sanity. Banded thresholds (target/source ratio): <0.30 = critical (likely lost content), 0.30–0.50 = major, 0.50–0.80 = minor; >3.0 = critical (likely duplicated content). Skipped for very short sources (<20 chars).

Source
The contract is signed by both parties present today.
Bad target
OK.
Good target
Договір підписано обома присутніми сьогодні сторонами.

Catches silent omissions and unintended additions. Particularly useful for UI strings where length constraints matter.

Language coverage: Language-agnostic

capitalization-mismatch

Capitalization Mismatch

MQM: style · Capitalization Severity: minor

Flags initial-letter case mismatch (source starts uppercase but target lowercase, or vice versa) and lost ALL-CAPS emphasis (source `WARNING` rendered as target `Warning`). Does NOT enforce Title Case parity — that's a deliberate locale-specific choice.

Source
WARNING: hot surface.
Bad target
Увага: гаряча поверхня.
Good target
УВАГА: гаряча поверхня.

ALL-CAPS warnings, button labels, and headings carry semantic weight — translators routinely flatten them to sentence case out of habit. Initial-letter mismatch is usually a copy-paste artefact.

Language coverage: All cased-script languages (Latin, Cyrillic, Greek, Armenian)

spaces-around-punctuation

Spaces Around Punctuation

MQM: locale-convention · Whitespace Severity: minor

Locale-aware whitespace check. Forbids `space + .,;:?!` for most European targets; requires a non-breaking space BEFORE `;`/`:`/`?`/`!`/`»` for French targets, per Imprimerie nationale convention.

Source
Are you sure?
Bad target
Êtes-vous sûr?
Good target
Êtes-vous sûr ?

French typography is precise about non-breaking spaces before double-width punctuation; translators using non-French keyboards consistently miss this. The reverse (English text with `?` preceded by space) is a typo signal.

Language coverage: French (required-space-before); English / German / Slavic / Romance / etc. (forbidden-space-before)

script-normalization

Script Normalization

MQM: locale-convention · Quotation marks Severity: minor

Ukrainian-specific: flags ASCII `'` or curly `'`/`ʼ` apostrophes inside Ukrainian words. The Ukrainian orthography prescribes the right single quotation mark `’` (U+2019). The check ignores apostrophes at word boundaries (those are quotation marks, not Ukrainian apostrophes).

Source
ten o'clock
Bad target
м'ясо
Good target
м’ясо

The 2019 Ukrainian orthography update made the U+2019 apostrophe mandatory in formal text. Publishers, legal documents, and many agencies reject submissions with ASCII apostrophes.

Language coverage: Ukrainian (apostrophe variants); Russian Ё/Е check planned

false-friends

False Friends

MQM: accuracy · Mistranslation Severity: major

Flags well-known cognate traps: source contains a trigger word (`actually`, `magazine`, `decade`, etc.) AND target contains the wrong cognate (`актуально`, `магазин`, `декада`). Curated, conservative — only entries where the cognate is unambiguously wrong.

Source
What does the magazine say?
Bad target
Что говорит магазин?
Good target
Что говорит журнал?

False friends are the #1 source of professional embarrassment in EN↔RU/UK translation — and the most common LLM error in well-trained models, since the surface-form similarity is exactly the wrong signal.

Language coverage: Curated lists for en↔uk, en↔ru, uk↔ru (~30 entries)

glossary-adherence

Glossary Adherence

MQM: terminology · Inconsistent with termbase Severity: major

When the client supplies a glossary (CSV, TBX, or pasted `source  target` lines), this check fires for every segment where source contains a glossary source term but target is missing the prescribed translation. Surface-form whole-word match — for Slavic targets, lemma-based via pymorphy3 (W8.5).

Source
Open the settings menu.
Bad target
Відкрийте меню налаштувань.
Good target
Відкрийте меню параметрів.

Glossary adherence is THE single most-rejected QA criterion at agencies. Clients ship curated termbases for a reason — ignoring them invalidates the entire delivery and triggers rework.

Language coverage: Any language pair (depends on glossary content)

Run these checks on your translation

Free, browser-based, no signup. 101 languages supported. MQM-compatible JSON export.

Open the QA Validator →