Usage
Default checks
Each check has a severity (error or warning) in the report JSON and in stylish output. Exit code 1 applies when any finding exists unless you pass --no-fail. With --quiet, only error findings count toward the exit code and printed/JSON output; warning-only runs exit 0.
With --diff-stdin, check reads a unified git patch from stdin and validates changed keys only for supported key-value translation files: .json, .jsonc, and .arb. In this mode, the CLI ignores unsupported file types in the patch, treats configured files with no identifiable changed keys as a no-op, and skips file-level or document-level checks that do not fit key-scoped diff validation.
Error
not_localized: target key is missing or the target value is empty (after trimming)missing_target_file: resolved target file does not existplaceholder_mismatch: placeholders differ from the sourcehtml_tag_mismatch: inline HTML tag names (known elements from the HTML tokenizer’s tag set) differ in sequence between source and target. Angle-bracket text in paths or docs—such as<name>inllm.profiles.<name>.provider—does not count as HTML for this checkicu_shape_mismatch: ICU structure differs from the source or is malformed (non-markdown files)markdown_ast_mismatch: markdown or MDX document structure differs from the source (heading/component tree parity)
Warning
same_as_source: target value matches the source text. Common for brands, codes, or locale-neutral strings; use--exclude-check same_as_sourceif you want to hide theseorphaned_key: target key exists but the source key does notwhitespace_only: target value contains only whitespace
--check icu_shape_mismatch runs ICU checks only; it does not include markdown_ast_mismatch. Use both flags if you need ICU and MD/MDX structure checks together.
Flags
--config: path to config file--locale: target locale filter (repeatable)--group: filter by group name--bucket: filter by bucket name--file: filter by source file path. Not supported with--diff-stdin--key: filter by translation key. With--diff-stdin, this becomes an extra intersection filter on top of the changed keys extracted from the patch--diff-stdin: read a unified diff from stdin and validate changed keys only. Supports configured.json,.jsonc, and.arbfiles. Runs only key-scoped checks:not_localized,same_as_source,whitespace_only,placeholder_mismatch,html_tag_mismatch, andicu_shape_mismatch. Skipsmissing_target_file,orphaned_key, andmarkdown_ast_mismatch--check: run only specific checks (repeatable)--exclude-check: skip specific default checks (repeatable)--format: output format (stylishdefault,text, orjson). Stylish prints ESLint-style diagnostics grouped by file; when stdout is a terminal, severities use color (no color when piped or in typical CI logs).--output-file: write the same human or JSON format as stdout to a file--json-report: always write the full machine-readable JSON report to this path, regardless of--format(useful in CI: stylish logs plus a JSON artifact for tooling). Findings includeannotationFileandannotationLinewhen the CLI can map a key to a line. For.md/.mdxsegments with keys prefixedmd., the line is taken from the markdown/MDX parse order (start of that translatable segment). For other files, resolution falls back to searching for a quoted key fragment or a substring of the segment text in the target file, which can mis-rank lines when the same text appears more than once--no-fail: return exit code0even when findings exist--quiet: omit warning findings from stdout,--output-file, and--json-report; use exit code0when the full result would be warnings only. The internal check still runs on all severities;--fixstill plans from the full result (including warnings) so fixable issues are not skipped.--fix: after reporting, retranslate fixable findings using the same AI pipeline asrun(same config, profiles, and environment variables). Applies to keyed findings of typesnot_localized,whitespace_only,placeholder_mismatch,html_tag_mismatch, andicu_shape_mismatch. Formarkdown_ast_mismatchon.md/.mdxfiles (per-file findings, often without akey),--fixretranslates all aligned segments for that source/target/locale pair so structure can realign. Does not fixsame_as_source(intentional copy), missing target files, or orphaned keys.--fix-dry-run: with--fix, resolve planned translation tasks without writing targets or calling the model (still loads config and planning).--workers: with--fix, number of parallel translation workers (default: number of CPU cores)