Troubleshooting¶
Start with localizzy doctor. It lists every external tool with its version,
every extra as installed or not, and the command that fills each gap. Then
read stderr before the exit code.
Exit codes¶
Every command keeps to one contract:
| Exit | Meaning |
|---|---|
| 0 | Done; nothing blocking |
| 1 | Done, but not clean or not complete: qa at or above --fail-on, a critical qt scan finding or coverage below --min-coverage, a vocab validate finding, a vocab compare rate below --min-exact, untranslated or pending messages after translate, upgrade or project upgrade (their outputs are still written), untranslated translate_json items, unfilled shard messages, failed review batches |
| 2 | Usage or input: a missing or malformed input file, an unknown flag value, an output that would overwrite an input, a language without a plural rule, a conversion that would lose data, a failing lupdate or lrelease, a refusal to replace earlier work |
| 3 | A missing extra or external tool; the message names the install command |
| 130 | Interrupted with Ctrl+C |
A missing or malformed input file prints a single line starting
localizzy: rather than a traceback. A traceback (exit 1) means a defect in
the toolkit; report it with the command line that caused it.
Symptoms¶
| Symptom | Cause | Fix |
|---|---|---|
Missing dependency: lupdate. Install with: ... |
Qt Linguist tools not found on PATH, in $QT_DIR/bin, the Homebrew Qt prefix or the usual Linux Qt directories |
Install Qt's tools (brew install qt, apt-get install qttools5-dev-tools), or set QT_DIR |
Missing dependency: clang |
qt scan --engine clang without the extra |
uv pip install 'vexy-localizzy[clang]' |
Missing dependency: translate-toolkit (pofilter) |
qa --layers pofilter without the extra or the pofilter command |
uv pip install 'vexy-localizzy[pofilter]' |
Missing dependency: COMET-QE |
qa --layers qe |
uv pip install unbabel-comet; the first run downloads a model |
The judge layer needs --endpoint, --model and the API key variable |
Exit 2 from qa --layers judge |
Pass both flags and export the variable named by --api-key-env (default OPENAI_API_KEY) |
PLURAL-RULE findings on every plural message |
No required plural forms were given | Add --plural-forms auto, or the native forms such as 0,1,2 |
No positional plural mapping for 'xx-pseudo' (exit 2) |
--plural-forms auto on a pseudo catalog |
Spell the forms out: --plural-forms 0,1 |
TARGET-EMPTY on every message |
qa on a freshly extracted catalog |
Expected. Gate reviewed catalogs only |
Pass source paths, or list them under [qt].sources |
qt scan or qt extract with no paths and no project file |
Pass paths, or run localizzy init and edit [qt] |
Extra inputs are not permitted naming a key |
A misspelt key in localizzy.toml |
Correct the key; unknown keys are refused, not ignored |
QT-CLANG-012 on every file |
qt scan --engine clang without the project's include paths |
Pass --compile-commands build/compile_commands.json |
| A translation exists but the application shows English | Context drift; qt extract does not show lupdate's lacks Q_OBJECT warning when extraction succeeds |
Run qt scan; fix every QT-CTX-001 |
| Heuristic findings inside comments or generated code | The heuristic engine reads lines, not syntax | Scan the directories you own rather than the whole tree, or confirm with --engine clang on the file |
... exists and differs from this run's retired messages |
project upgrade again on the same two inputs, but the retired file was edited or comes from another run |
Inspect the named retired file; move it aside if it is no longer needed |
glossary memories missing, so their terms would enter the project memory |
project build_ui without the configured glossary TMX |
Restore the glossary memory, then rebuild |
localizzy: Review inputs changed; choose a new workspace |
The catalog or a .ui preview changed after import |
Pass a new --workspace, or finish and export the old review first |
error while attempting to bind on address |
The review port is taken | Pass --port 8766 |
Review frontend is missing; run npm ci and npm run build in review/ |
A source checkout without built browser assets | Build them as shown in review; wheels already contain them |
| A SARIF upload fails with 403 | Code scanning is not enabled for the repository | Enable it, or keep the SARIF as an artifact |
When the output is right but surprising¶
A translation that looks right in the catalog and shows English in the
application is almost always a context problem: the class lost Q_OBJECT, or
the string was translated at static-initialization time. Run qt scan on the
file. A language that does not appear at all in a macOS build is worth a
localizzy qt applang list to see which catalogs were compiled in.