Validation & quality

Validators

What lingo validate checks — each validator is config-gated and maps to a violation type.

Config-gated checks#

validate runs the validators you enable under validators: and reports their violations. Each violation has a type; the strict tiers decide which types make the command exit non-zero (see the Configuration reference).

ValidatorTypeDefault
Missingmissingon
Outdatedoutdatedon
Duplicate valuesduplicate_valueoff
Manual editsmanual_editoff

Missing#

Reports keys present in the source locale but absent from a target locale — the untranslated ones. The fix is a lingo translate.

Outdated#

Reports target keys whose recorded source hash no longer matches the current English value — i.e. the source text changed after the translation was made, so the translation may no longer be accurate. See Drift & state for how this is tracked. The fix is lingo translate (or --force-key for a single key).

Duplicate values#

Flags a source-locale key whose value matches an activerecord.attributes.* value — a sign you're re-declaring a label Rails already provides. The AR key wins; the offending key should reuse it. Runs on the source locale only, to avoid false positives from grammatical differences in other locales. Off by default; enable it and add duplicate_value to your strict_all tier for a stricter CI gate.

Manual edits#

When enabled, locallingo records a target_hash alongside each key's source hash. If a target value's current hash no longer matches — someone hand-edited it — this validator surfaces it so the next translate doesn't silently overwrite the edit. Confirm the edit with lingo accept-edits to protect it. See Drift & state.