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.

```ruby
bin/lingo status
```

```ruby
📊 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.

```ruby
bin/lingo translate            # all target locales
bin/lingo translate --locale de   # just one
bin/lingo translate --force       # re-translate everything
```

> **Note:** 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.

```ruby
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:

```ruby
bin/lingo sync
```

That's the whole loop. Next: the full [CLI reference](https://locallingo.zoolutions.llc/docs/cli) and how [drift & state](https://locallingo.zoolutions.llc/docs/drift-state) tracking works.