Getting started

Quick start

From a config file to translated, validated locales in three commands.

1. See where you stand#

status reports, per target locale, how many keys are translated, missing, or outdated — no credentials required.

shell
bin/lingo status
output
📊 Translation Status
============================================================

⚠️ de
   Total keys: 412
   Translated: 407
   Missing: 5
   Outdated: 0

2. Fill the gaps#

translate sends the missing and changed keys to your configured provider and merges the results back into config/locales/. Only what's actually missing or outdated is translated — the source-hash state makes re-runs cheap.

shell
bin/lingo translate            # all target locales
bin/lingo translate --locale de   # just one
bin/lingo translate --force       # re-translate everything
After a successful translate, locallingo runs your configured after_translate hooks — by default i18n-tasks normalize -p to keep the YAML tidy.

3. Validate#

validate reports anything missing or outdated and, with --strict, exits non-zero — the command you run in CI.

shell
bin/lingo validate --strict       # fails on missing / outdated
bin/lingo validate --strict-all   # also fails on duplicate values

Keep the state honest#

If you hand-edit locale files (or set up locallingo on an existing app), rebuild the drift state from the current translations so nothing reads as spuriously outdated:

shell
bin/lingo sync

That's the whole loop. Next: the full CLI reference and how drift & state tracking works.