Commands
What each lingo subcommand does.
status#
Prints, for each target locale, the total key count and how many are translated, missing, or outdated. No credentials, no writes — the read-only snapshot. Add --json for a machine-readable form.
translate#
Translates the missing and outdated keys for one or all target locales and merges the results into config/locales/. Determines the work from the source-hash state, so unchanged keys are never re-sent.
--locale delimits to one locale.--forcere-translates everything (respecting protected manual edits).--force-key a.b.cre-translates specific keys.--dry-runshows the plan without writing.
On success it runs the configured after_translate hooks. Requires provider credentials.
validate#
Runs the configured validators and prints the violations. --strict and --strict-all make it exit non-zero on their respective violation types — this is the CI command. See Validators for the checks and Continuous integration for wiring.
quality / fix-quality#
quality lints a locale's text (defaults to the source locale) with the static rules, terminology list, and — with --ai — an LLM review pass. fix-quality rewrites the auto-fixable suggestions (universal fixes and British spellings) back into the locale files, preserving case; add --dry-run to preview. See Quality linting.
accept-edits#
When the manual_edits validator is enabled, accept-edits records the current target values as intentional so they are protected from being overwritten by the next translate and no longer flagged as hand-edited. See Drift & state.
sync#
Rebuilds the .i18n-state/ drift state from the current locale files — for initial setup on an existing app, or after manual edits, so validate doesn't report spurious "outdated" keys.
hash#
Prints a single CRC32 fingerprint of the current source translations — handy as a cache key (e.g. to skip a translate step in CI when the source hasn't changed). --json wraps it in an object.