SiteVerdict — Translation QA & AI Translator (JSON, PO, XLIFF) avatar

SiteVerdict — Translation QA & AI Translator (JSON, PO, XLIFF)

Pricing

Pay per event

Go to Apify Store
SiteVerdict — Translation QA & AI Translator (JSON, PO, XLIFF)

SiteVerdict — Translation QA & AI Translator (JSON, PO, XLIFF)

QA your i18n files before release: missing keys, broken placeholders, ICU plurals, HTML tags, length limits, glossary, tone. JSON, PO, XLIFF, CSV. No key needed for checks; translate gaps with your own DeepL, OpenAI or Anthropic key. HTML report and CI gate.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Aman Thakran

Aman Thakran

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Translation QA & AI Translator: catch broken translations before your users do

Point it at your localisation files and get every problem that would break or embarrass a release: missing keys, broken {placeholders}, invalid ICU plurals, lost HTML tags, strings too long for the button, glossary and brand-term violations, and the wrong du/Sie or tu/vous. Supports JSON (nested, flat, ARB), gettext PO, XLIFF 1.2/2.0 and CSV.

  • No API key needed for QA. All checks are deterministic.
  • Optional, on your own key: fill missing strings with DeepL, OpenAI or Anthropic (placeholders are protected and verified), and get an AI review (OpenAI, Anthropic, Google Gemini or Mistral) that flags mistranslations and tone problems with suggested fixes. Translation and AI review need your own provider API key; without a key only the deterministic checks run.

Who it is for

  • Developers / CI: run before every release and set failOnErrors to block a deploy that would ship Hallo {nom}.
  • Localisation managers: one HTML report across all languages and files, with a quality score per locale.
  • Agencies and freelancers: QA vendor deliveries against your glossary and style guide in minutes.

Before and after (from the default example input)

SeverityLocaleKeyCheckProblem
errordegreetingplaceholder_mismatchMissing: {name}. Unexpected: {nom}.
errordecart.itemsicu_plural_otherPlural "{count}" has no "other" branch.
errordecart.checkoutmax_lengthTranslation is 28 characters; limit is 20.
errordecart.titleforbidden_termForbidden term "Einkaufswagen" used (use "Warenkorb").
warningdecart.titletone_formalityInformal address found; the de style guide asks for formal.
warningdehelpurl_mismatchhttps://example.com/help changed or missing.
errordesavemissing_translationNo translation for this key.
warningdeoldextra_keyKey exists in the translation but not in the source.

Output: one dataset row per issue, plus REPORT.html (summary per file and locale with scores, then all issues), ISSUES.csv and an OUTPUT JSON summary. In translate modes you also get the updated files (translated-<locale>-<file>) in their original format.

Checks

CheckWhat it catches
missing_translation, empty_translation, extra_keyGaps and obsolete keys between source and target
untranslatedTarget identical to source (with an allowlist for brand names)
placeholder_mismatch{name}, {{name}}, %s, %1$d, %(name)s, ${name} lost, added or renamed
icu_syntax, icu_plural_other, icu_plural_categoriesBroken ICU braces; plural branches missing for the target language (CLDR rules, e.g. Polish needs one/few/many/other)
markup_mismatchHTML/XML tags lost or added
max_length, length_ratioHard limits (rules by key pattern, XLIFF maxwidth) and "too long for UI" warnings
whitespace, newlines, end_punctuation, double_spaceFormatting drift
number_mismatch, url_mismatchChanged numbers, links or e-mail addresses
glossary_term, forbidden_term, do_not_translateTerminology and brand rules per locale
tone_formalitydu/Sie, tu/vous, tú/usted, tu/Lei, jij/u, tu/você (heuristic)
inconsistentThe same source translated differently in one locale
needs_reviewPO fuzzy and XLIFF needs-review states
ai_review (optional)Mistranslation, omission, tone and terminology, with a suggestion

Pricing

Pay per event:

  • string-checked: $0.0002 per string per locale checked (deterministic QA)
  • string-translated: $0.001 per string translated with your key (successful translations only)
  • string-ai-reviewed: $0.0005 per string reviewed by your LLM

Examples:

  • 2,000 strings × 5 languages QA = $2.00
  • filling 300 missing strings = $0.30
  • AI review of 1,000 strings = $0.50

Your DeepL, OpenAI, Anthropic, Google or Mistral usage is billed by them on your key.

Maximum total charge: the Actor reserves money for every string before processing it (check + translation + AI review, as needed). Strings that would not fit in your run's maximum total charge are not processed and not charged: the dataset gets a not_processed row per file/locale and the run's status message ends with "N strings not processed (max total charge reached)". A budget that is used up exactly is not reported as stopped.

FAQ

How do I give it my files? Use public or pre-signed URLs, paste the content, or upload to an Apify key-value store and reference store/key. For JSON, mark the source file with "role": "source" or name it after the source locale (en.json).

Will machine translation break my placeholders? We swap placeholders and tags for protected tokens before translating, restore them afterwards, and reject any translation that lost one. Rejected strings keep their old value and are reported as translation_failed.

How reliable is the tone check? It is a pronoun-based heuristic, good for spotting the wrong form of address. Use aiReview for nuanced style feedback.

Limits

  • Up to 100 files and 100,000 strings per run, 20 MB per file.
  • XLIFF inline markup is kept verbatim. Exotic XLIFF extensions are passed through but not interpreted.
  • Tone checks cover de, fr, es, it, nl and pt only.

Sources & compliance

  • Works only on files you supply. No web scraping. Files from URLs are fetched with an SSRF guard (private and internal addresses blocked) and a size cap.
  • Plural rules come from your runtime's CLDR data (Intl.PluralRules).
  • Providers: DeepL (terms), OpenAI (terms), Anthropic (terms), Google Gemini (terms) and Mistral (terms) process strings under your account and key. Terms links checked 11 Oct 2026 (Google/Mistral links added 3 Nov 2026, not re-reviewed). DeepL Free keys (…:fx) use the free endpoint automatically.
  • Hosts called: only the provider you choose — api.deepl.com / api-free.deepl.com (DeepL), api.openai.com, api.anthropic.com, generativelanguage.googleapis.com (Gemini, review only) and api.mistral.ai (review only) — plus the file URLs you supply. With no translation mode and aiReview off (no key), no provider is called.
  • Secrets: API keys are secret inputs, sent only to the chosen provider and scrubbed from logs, errors and output.
  • Personal data: UI strings rarely contain personal data. Don't put customer data into translation files you send to third-party MT providers. Not legal advice.

Built by SiteVerdict (BharatFare Travel and Technologies Ltd, UK). Contact: hello@webrevenuescan.com.