translint

Validates locale files for missing keys, placeholder mismatches, and untranslated strings.

3|Updated Aug 8, 2026
One-click install
npx skills add https://github.com/Jose-Polanco-Oxte/Echos-Live-Music-Visualizer --skill translint-jose-polanco-oxte
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: translint
Source: https://github.com/Jose-Polanco-Oxte/Echos-Live-Music-Visualizer/tree/main/.agents/skills/localization/sub-skills/translint
Command: npx skills add https://github.com/Jose-Polanco-Oxte/Echos-Live-Music-Visualizer --skill translint-jose-polanco-oxte

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Translation changes often ship with silent defects: keys missing from some locales, interpolation placeholders dropped or renamed during translation, and strings that were never actually translated. These bugs surface as runtime errors (KeyError, IndexError, undefined) the first time a translated string renders with real data. translint catches them before the PR is finalized. ## Core Features & Use Cases - Cross-locale key diffing: Compares every locale file against a base locale and reports missing keys, extra (stale) keys, and empty values. - Placeholder mismatch detection: Extracts interpolation tokens across five styles ({name}, {{name}}, %s, %(name)s, ${name}) plus ICU plural/select arguments, and flags mismatches including reordered bare printf conversions. - Untranslated-string heuristic and safe --fix: Flags values byte-identical to the base (with --allow-identical/--do-not-translate escape hatches) and can insert missing keys tagged with an [UNTRANSLATED] marker or .po fuzzy flag, never inventing translations. - Use Case: After adding a new key to en.json, run translint against the locales directory to get a per-locale report of exactly which keys are missing or broken in de.json, fr.po, and ja.properties before committing. ## Quick Start Ask the AI to run translint on your locale directory with the base locale set to en and JSON output enabled, then fix each reported missing key and placeholder mismatch before finalizing the change.

Frequently Asked Questions about translint

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I check locale files for missing translation keys?

Run translint pointed at your locale directory with --base set to your reference locale, for example the en file. It compares every other locale against the base and reports missing_keys, extra_keys, and empty_values per file, exiting 1 when anything needs fixing.

How to detect placeholder mismatches in translated strings?

translint extracts interpolation tokens in five styles ({name}, {{name}}, %s, %(name)s, ${name}) plus ICU plural/select arguments from both base and translated values. It flags mismatched token sets and reordered bare printf conversions, which are the bugs that crash at render time.

Does translint support gettext .po and Java .properties files?

Yes, translint parses JSON (nested or flat), gettext .po/.pot (including msgctxt and plural forms), and Java .properties files, auto-detected by extension. Format can be forced with --format, and legacy ISO-8859-1 .properties files are decoded correctly.

Can translint automatically fix missing translation keys?

The --fix flag inserts only keys that are entirely missing, tagged with an [UNTRANSLATED] marker or the .po fuzzy flag so they can never pass as real translations. It never writes translated text or modifies existing keys; use --fix --dry-run first to preview insertions.

Why does translint flag strings that are legitimately identical across locales?

The untranslated-value check is a heuristic, so brand names and cross-language cognates can be false positives. Suppress legitimate hits with --allow-identical for specific keys or --do-not-translate for project-wide tokens, keeping the check meaningful for future runs.

Does translint require network access or external dependencies?

No, translint uses only the Python standard library and runs entirely offline. Nothing leaves the machine, and --fix only writes to the locale files you explicitly point it at.