Quality checks (QA checks) in LingoHub automatically validate translations against pre-defined rules to ensure brand consistency, technical accuracy, and formatting compliance.
When a translation violates an active QA rule, LingoHub immediately displays a warning badge in the Languages view and on the affected segment inside the Editor.
Looking for setup instructions? Learn where to find and configure quality check rules in our Overview of QA settings guide.
How QA warnings work in the Editor
When a translation violates an active QA rule, LingoHub flags the affected segments both at the project dashboard level and inside the Editor. Team members can then quickly identify and resolve potential translation errors:
Languages view (Project overview): Under a project's Languages tab, target languages containing QA violations display a shield icon with the total count of flagged segments under the Needs review column. View the affected segment and reason for the QA flag in the Editor.
Editor context panel: The context panel lists specific rule violations under the Quality checks section (e.g., Characters length maximum: 20).
Clearing warnings: If a user manually sets a flagged segment to Approved, the QA check warning for that segment clears.
Supported QA validation rules
Length checks
Ensures copy complies with pre-configured minimum or maximum character limits.
Target text | Configured length constraint | Result / Status |
Confirm | Min. 6 characters | ✅ No errors (Length: 7) |
Send | Max. 3 characters | ❌ Error: Exceeds length limit (Length: 4) |
Whitespaces checks
Leading/trailing spaces
Checks whether the source and target text start and end with the exact same amount of spaces.
Source text | Target text | Result / Status |
Welcome to LingoHub | Willkommen bei LingoHub | ❌ Error: Missing leading space |
Welcome to LingoHub | Willkommen bei LingoHub | ✅ No errors |
Multiple spaces
Detects unintended multiple consecutive spaces inside the target text.
Source text | Target text | Result / Status |
Welcome to LingoHub! | Willkommen bei LingoHub! | ❌ Error: Multiple consecutive spaces detected |
Welcome to LingoHub! | Willkommen bei LingoHub! | ✅ No errors |
Line break consistency
Ensures that the source and target text contain the exact same number of line breaks.
Source text | Target text | Result / Status |
Well done! | Gut gemacht! | ❌ Error: Missing line break in target text |
Well done! | Gut gemacht! | ✅ No errors |
Placeholders checks
Ensures required variables (e.g., %{username}) are accurately preserved and not added unnecessarily.
Source text | Target text | Result / Status |
Well done! | Gut gemacht | ❌ Error: Unnecessary placeholder added |
Welcome to LingoHub | Willkommen bei LingoHub ! | ❌ Error: Missing placeholder |
Welcome to LingoHub | Willkommen bei LingoHub | ✅ No errors |
Markup checks
Checks for missing, altered, or extra HTML tags between source and target content.
Source text | Target text | Result / Status |
|
| ❌ Error: Missing tag ( |
|
| ❌ Error: Superfluous tag ( |
|
| ✅ No errors |
Terminology checks
Terms missing
Flags missing required Glossary terms or their mandatory target translations.
Glossary rule:
workspace(EN) ➔ must be translated asArbeitsbereich(DE)
Source text | Target text | Result / Status |
Welcome to your workspace! | Willkommen in Ihrem Bereich! | ❌ Error: Required term missing ("Arbeitsbereich" expected) |
Welcome to your workspace! | Willkommen in Ihrem Arbeitsbereich! | ✅ No errors |
Terms not recommended
Triggers when the translation uses a term explicitly marked as forbidden or not recommended in your glossary.
Glossary rule:
Kontois marked as forbidden/unrecommended in German (useAccountinstead)
Source text | Target text | Result / Status |
Manage your account settings. | Verwalten Sie Ihre Konto-Einstellungen. | ❌ Error: Uses forbidden glossary term ("Konto") |
Manage your account settings. | Verwalten Sie Ihre Account-Einstellungen. | ✅ No errors |
Untranslatable check: Same content
Flags target texts that are identical to the source text, alerting users to potentially uncopied or untranslated content.
Source text | Target text | Result / Status |
Save settings | Save settings | ❌ Error: Source and target copy are identical (potentially untranslated) |
Save settings | Einstellungen speichern | ✅ No errors |
Quotes and delimiters
Quote mismatch
Triggers when opening and closing quotation marks in the target text do not match in count.
Source text | Target text | Result / Status |
Click "Save" to continue. | Klicke auf "Speichern zu fortfahren. | ❌ Error: Missing closing quotation mark |
Click "Save" to continue. | Klicke auf "Speichern" um fortzufahren. | ✅ No errors |
Quote translation
Validates that quotation mark styles follow target locale conventions (e.g., using German typography quotes „“ instead of English straight quotes "").
Target locale: German (
de)
Source text | Target text | Result / Status |
Select "Settings" | Wähle "Einstellungen" | ❌ Error: Incorrect quotation style for German locale |
Select "Settings" | Wähle „Einstellungen“ | ✅ No errors |
Locale formatting
Date format
Validates date structures against target locale standard patterns (e.g., US MM/DD/YYYY vs. German DD.MM.YYYY).
Target locale: German (
de)
Source text | Target text | Result / Status |
Event date: 12/31/2026 | Veranstaltungsdatum: 12/31/2026 | ❌ Error: Date structure does not match target locale conventions |
Event date: 12/31/2026 | Veranstaltungsdatum: 31.12.2026 | ✅ No errors |
Date translation
Flags written date components (like month or day names) that remain untranslated.
Target locale: German (
de)
Source text | Target text | Result / Status |
Created on October 15 | Erstellt am October 15 | ❌ Error: Month name untranslated |
Created on October 15 | Erstellt am 15. Oktober | ✅ No errors |
Time format
Triggers when the time syntax does not align with regional preferences (e.g., 12-hour AM/PM vs. 24-hour clock).
Target locale: German (
de)
Source text | Target text | Result / Status |
Meeting at 02:30 PM | Meeting um 02:30 PM | ❌ Error: 12-hour format with AM/PM used instead of 24-hour format |
Meeting at 02:30 PM | Meeting um 14:30 Uhr | ✅ No errors |
Time translation
Triggers when local time-designators or units (e.g., a.m./p.m. or hours/minutes abbreviations) are not localized for the target locale.
Target locale: German (
de)
Source text | Target text | Result / Status |
Starts at 9 a.m. | Beginnt um 9 a.m. | ❌ Error: Time designator untranslated |
Starts at 9 a.m. | Beginnt um 9 Uhr | ✅ No errors |
Number format
Triggers when thousands separators or decimal points do not follow target locale conventions (e.g., 1,000.50 in English vs. 1.000,50 in German).
Target locale: German (
de)
Source text | Target text | Result / Status |
Total price: $1,250.99 | Gesamtpreis: 1,250.99 € | ❌ Error: Uses comma for thousands and dot for decimals |
Total price: $1,250.99 | Gesamtpreis: 1.250,99 € | ✅ No errors |
Punctuation checks
Punctuation
Flags structural differences in general punctuation patterns (such as colons, commas, or ellipses) between source and target text.
Source text | Target text | Result / Status |
Status: Active... | Status Aktiv. | ❌ Error: Missing colon (:) and ellipsis (...) |
Status: Active... | Status: Aktiv... | ✅ No errors |
Punctuation: End character
Triggers when the trailing character at the end of the target segment does not match the trailing character of the source text.
Source text | Target text | Result / Status |
Welcome to LingoHub! | Willkommen bei LingoHub. | ❌ Error: Mismatched end character (period instead of exclamation mark) |
Welcome to LingoHub! | Willkommen bei LingoHub! | ✅ No errors |
Duplication checks
Detects identical words or phrases that are accidentally repeated sequentially inside the translation.
Source text | Target text | Result / Status |
Click here to submit. | Klicke hier hier zum Absenden. | ❌ Error: Duplicate word detected ("hier hier") |
Click here to submit. | Klicke hier zum Absenden. | ✅ No errors |
HTML attributes: Translatable HTML attributes
Flags modifications to non-translatable HTML attributes outside the permitted list (e.g., changing id, class, or style instead of allowed attributes like alt, title, or placeholder).
Source text | Target text | Result / Status |
|
| ❌ Error: Forbidden attribute modified ( |
|
| ✅ No errors |
Need more help?
Couldn't find what you were looking for? Reach out to our team at [email protected], and we will gladly assist you.


