KvasirQA 1.0.0 — manual

Check XLIFF and TMX translations offline before you deliver them.

Free guide download? The KvasirQA-1.0.0-guide-and-examples.zip download contains this manual and the practice files only. The steps below need the app (KvasirQA.html and its app folder), which is in the paid download KvasirQA-1.0.0.zip.

KvasirQA reads bilingual translation files and lists problems a reviewer or client would notice: untranslated segments, numbers, tags, links and e-mail addresses that differ from the source, glossary terms that were not used, the same sentence translated in different ways, and punctuation and spacing slips. It never changes your files and never uploads them: it runs in your browser from a folder on your computer. You fix what it finds in your translation tool, export again and check again.

1. What you need

Tested with synthetic XLIFF 1.2, 2.0, 2.1 and TMX 1.4 files written to the published specifications. Real Trados, memoQ and Phrase exports have not been tested; vendor-specific files and packages may not work. Free alternatives such as Okapi CheckMate cover similar checks; KvasirQA offers a smaller browser workflow.

2. Open KvasirQA

  1. Extract the whole download. Unzip KvasirQA-1.0.0.zip into a folder you can find again. Keep KvasirQA.html and the app, docs and examples folders together.
  2. Open KvasirQA.html in Chrome. Drag the file into a Chrome window, or right-click it and choose Open with › Google Chrome.
  3. Check what you see: the heading Check translations before you deliver them, a green-edged box Start here: a 2-minute practice run, and three numbered panels.
KvasirQA on first start: heading, the Start here practice box with the Load practice files button, panel 1 Add bilingual files and panel 3 Review findings showing zeros.
First start in Chrome. The Start here box explains the practice run; Hide guide closes it and the Guide button at the top right brings it back.

3. Practice run with the included files

The practice set describes a fictional kettle brand, “Brightfern”: a segmented English → German XLIFF 1.2 file, an English → French XLIFF 2.1 file, an English → German TMX 1.4 memory and a three-term glossary. The mistakes are planted on purpose.

  1. Click Load practice files.
  2. Expected result: 3 files, 29 segments checked, 7 errors, 6 warnings. The three files are listed in panel 1 and the glossary shows brightfern-glossary.csv · 3 terms.
  3. Click Download CSV or Download HTML to save the report (see Save the report). You have finished the practice run.
Results after loading the practice files: 3 files, 29 segments checked, 7 errors, 6 warnings, filter chips with counts and the first findings grouped under the German file.
After Load practice files (guide hidden): the summary tiles, one filter chip per check with its count, and findings grouped by file.

The 13 planted findings:

CheckFile › segmentWhat is wrong
Numberskettle manual (de) › 3“1.7 litres” became “1,5 Liter”.
Tagskettle manual (de) › 8Placeholder tag x:2 is missing in the German text.
Links and e-mailkettle manual (de) › 9The support link was changed from /support to /hilfe.
Untranslatedkettle manual (de) › 10; app (fr) › hold/s2No target text.
Glossarykettle manual (de) › 6 and › 7“power button” should be “Ein-/Aus-Taste”; “descaler” should be “Entkalker”.
Same source, different translationsde: manual › 4, › 6 and memory › m1; fr: app › start and › start-again“Press the power button.” and “Start boiling” were translated two ways.
Same translation, different sourcesapp (fr) › filter, › filters“Filtre” is used for both “Filter” and “Filters”.
Target same as sourcekettle manual (de) › 12“Brightfern” is unchanged — correct for a brand name. Warnings can be intentional.
Ending punctuationkettle manual (de) › 11The source ends with “.”, the target has no full stop.
Spaceskettle manual (de) › 11Double space in the German text.

4. Read the findings

The Same source, different translations filter: the German finding lists the two translations and where each occurs, including the TMX entry m1; the French finding lists start and start-again.
Filter Same source, different translations: each finding lists every variant and where it occurs (file › segment), across XLIFF and TMX files.

On a narrow window the table becomes one card per finding:

KvasirQA at 390 pixels wide: tiles in two columns, chips wrapping, and findings shown as cards under a file heading.
The same results at a 390-pixel-wide window.

5. Save the report

ButtonFileUse it for
Download CSVkvasirqa-report-<date>-<time>.csvExcel, LibreOffice or Google Sheets. UTF-8 with a byte-order mark; one row per finding. Cells that start with =, +, - or @ get a leading apostrophe so spreadsheets do not run them as formulas.
Download HTML…htmlA standalone page with files, counts per check and all findings. Open it in a browser and print or save as PDF for a client.
JSON…jsonAutomation and archiving: every finding with file, segment, languages and details.

Chrome saves the files in your usual downloads folder. The report reflects the checks that were switched on when you clicked the button.

The saved HTML report opened in Chrome: title, generation time, file table, findings by check and the start of the findings table.
The saved HTML report for the practice run, opened in Chrome.

6. Check your own files

  1. Click Clear all.
  2. Export the bilingual files from your translation tool as XLIFF 1.2, XLIFF 2.0/2.1 or TMX 1.4 (for TMX, with a specific source language).
  3. Drop them on Drop files here or choose files, or click choose files. You can add several files at once; a file with the same name replaces the earlier one.
  4. Optional: Choose glossary… (see below) and switch checks on or off in panel 2. Ignore upper/lower case when comparing translations makes “Speichern” and “speichern” count as the same translation.
  5. Fix the findings in your translation tool, export again, add the new files and check that the counts go down.

Units marked translate="no" are skipped and counted in the file card: on an XLIFF 1.2 trans-unit or an enclosing group, or on an XLIFF 2.0/2.1 unit, group or file. The nearest setting wins, so a unit marked translate="yes" inside such a group is checked. Segments locked in your tool by other means are checked like any other segment.

7. Glossary file

A CSV or TSV file (comma, semicolon or tab; UTF-8) with one term per row:

source,target,language
power button,Ein-/Aus-Taste,de
descaler,Entkalker|Entkalkungsmittel,de
descaling,détartrage,fr

8. When something goes wrong

Problems are shown in red under the file or glossary concerned. Other files are still checked.

Panel 1 with five files in red, each with a specific message: not well-formed XML with line and column, not a bilingual file, empty file, no translatable segments, not valid UTF-8; one good file below them.
Five damaged or unsuitable test files are explained one by one; the good file (case.xlf) is still checked.
You seeCauseDo thisIt worked when
Buttons do nothing, page has no coloursOpened from inside the ZIP, or the app folder is missingExtract the whole ZIP again and open KvasirQA.html from the extracted folderThe green Start here box appears
“not well-formed XML (line …, column …)”The file is damaged or was edited by handExport it again from your tool, or fix the XML near that lineThe red message disappears after you add the file again
“Not a bilingual file: the main element is <…>”You added the original document or another XML fileExport the bilingual XLIFF/TMX insteadThe file card shows its format and segment count
“No checkable segments were found”The export is empty, a TMX has no defined source language, or every unit has <sub> text inside an inline codeCheck the export settings in your tool; export a TMX with a specific source languageSegments are counted
“Nothing to check in this … file: … marked translate="no"”Every unit is marked not-for-translation, directly or by an enclosing group or fileNothing, if that is intended; otherwise export the units that need translationThe file card shows its segment count
“Unsupported XLIFF version” / “Unsupported TMX version”The file is XLIFF 1.0/1.1/2.2 or TMX other than 1.4, or its namespace does not match its versionExport as XLIFF 1.2, 2.0, 2.1 or TMX 1.4The file card shows its format
Amber “Partial result” lineSome files were not checked, or units were skipped that KvasirQA cannot check (TMX source language undefined, <sub> text inside an inline code)Fix or re-export the files listed, then add them again; review skipped units in your toolThe line starts with “Scope:” instead
“not valid UTF-8” / encoding messageThe file was saved in another encodingRe-export as UTF-8The file card shows its format
“larger than 50 MB”Very large file (for example with an embedded original document)Split the project or check fewer files at a timeThe file is read
Glossary message in redNo rows with both a source and a target termUse the source,target,language columns“… · N terms” appears
“No findings match this filter”Chips or search hide every findingClick All or clear the search boxRows appear again

Support: give the KvasirQA version, your operating system and browser, the step and the exact message, and whether the practice files work. Do not send client files; if needed, send a small made-up example that shows the problem.

9. Rules used by each check

Segment text. Text inside formatting and highlight markers (XLIFF 1.2 g, mrk; XLIFF 2 pc, mrk; TMX hi) is kept. Native code (bpt, ept, ph, it; TMX also ut) is left out of the text and counted as a tag. Units whose source or target has <sub> text inside such a code (an XLIFF 1.2 or TMX sub-flow, for example a footnote or a link title) are skipped, counted and the result is marked partial: KvasirQA does not check sub-flow text. translate="no" on an XLIFF 1.2 trans-unit or enclosing group, or on an XLIFF 2.0/2.1 unit, group or file, skips the unit (nearest setting wins). Inline translate="no" markers inside a segment (XLIFF 2 mrk/sm) are not used: that text is checked like the rest of the segment. Whitespace runs are collapsed to one space for comparisons. Segments: segmented XLIFF 1.2 uses seg-source/mrk mtype="seg" (segment = mid); if the target of such a unit has text but no segment markers, the whole unit is checked as one segment; otherwise one segment per trans-unit. XLIFF 2: each segment of a unit. TMX: the source language is the unit's srclang if present, otherwise the header's; every other language variant is a target. Units whose source language is *all*, missing, or not among their variants are skipped and counted, never guessed. Not checked: XLIFF 1.2 alt-trans alternatives and XLIFF 2 ignorable content.

CheckSeverityReported when
UntranslatederrorThe source has text and the target is missing or empty. Other checks skip such segments.
NumberserrorThe digit sequences differ. A number is digits with optional . , ' or non-breaking-space separators; separators are ignored, so 1,234.5 = 1.234,5 = 1 234,5 (with a non-breaking space). An ordinary space splits numbers; 3.5 and 3,50 differ.
TagserrorThe inline codes (type and id) in source and target differ in kind or count. Order is not compared. Compared: XLIFF 1.2 g, x, bx, ex, bpt, ept, ph, it; XLIFF 2.0/2.1 ph, pc, sc, ec; TMX bpt, ept, it, ph, ut. Highlight and annotation markers (TMX hi, XLIFF mrk, XLIFF 2 sm/em) are not compared: a target that drops a hi marker is not reported, but the text inside it is checked.
Links and e-mailerrorhttp(s):// addresses or e-mail addresses differ (trailing punctuation ignored).
GlossaryerrorThe source contains a glossary term (whole word, any case) and the target contains none of its translations.
Same source, different translationswarningIdentical source text has more than one translation among all loaded files with the same language pair (source and target codes; upper/lower case ignored; de and de-DE are different codes).
Same translation, different sourceswarningOne translation is used for more than one source text (same language pair).
Target same as sourcewarningThe target equals the source and contains letters.
Ending punctuationwarningAfter closing quotes and brackets, the last character differs among . ! ? : ; …, or only one side ends with one. Full-width 。!?:;, Arabic ؟ ؛, Urdu ۔ and Devanagari । count as their equivalents; for Greek (el) a final ; counts as a question mark.
SpaceswarningThe target has a double space that the source does not, or leading/trailing spaces differ.

10. Limits and privacy

KvasirQA 1.0.0 · Licence: LICENSE.txt · Changes: CHANGELOG.md