🎉 v1.0

Get started

  • Welcome
  • Documentation
  • Pricing
    Soon

Tools

  • I18n MCP
  • CLI
  • CI/CD Integrations
  • Compiler
    Alpha
  • Connect Your Engine

Resources

  • Languages
  • LLM Models
  • Guides

Company

  • Enterprise
  • CareersHiring!
Dashboard

Lingo.dev CLI

  • How it works
  • Setup

Configuration

  • Supported formats
  • i18n.json
  • i18n.lock

Features

  • Existing translations
  • Adding languages
  • Overrides
  • Translator Notes
  • Translation keys
    • Key renaming
    • Key locking
    • Key ignoring
    • Key preserving

Performance

  • Large projects
  • Parallel processing

Retranslation

  • Automatic Retranslation
  • Retranslation
  • Remove translations

Translation Keys

Max PrilutskiyMax Prilutskiy·Updated 1 day ago·1 min read

The Lingo.dev CLI provides four key-level controls that determine how individual translation keys behave during processing. Each serves a distinct purpose:

ControlConfig fieldBehavior
Key LockinglockedKeysCopies source values to all targets without translation. Keys appear in target files with identical values.
Key IgnoringignoredKeysExcludes keys from processing entirely. They do not appear in target files.
Key PreservingpreservedKeysInitializes keys once from source, then protects them from automatic updates. Designed for content that requires manual translation.
Key RenamingAutomaticDetects when keys are renamed and preserves existing translations. No configuration required.

When to use what#

Lock a key when the value must remain identical across all languages - brand names, technical identifiers, configuration values:

json
{ "lockedKeys": ["brand/name", "config/apiUrl"] }

Ignore a key when it should not exist in target files at all - debug strings, internal flags, test data:

json
{ "ignoredKeys": ["internal/debug", "dev/testData"] }

Preserve a key when it needs manual translation - legal text, compliance content, marketing copy that requires human review:

json
{ "preservedKeys": ["legal/privacy", "legal/terms"] }

Renaming is automatic - the CLI detects when a key changes but its content stays the same, and carries the existing translation forward without retranslation.

Key path notation#

All key arrays use forward slash (/) notation for nested paths and asterisk (*) for wildcards:

json
{
  "lockedKeys": ["brand/name"],
  "ignoredKeys": ["internal/*"],
  "preservedKeys": ["legal/privacy/full"]
}

Keys containing dots in their names are handled naturally - the forward slash separates hierarchy levels, so modules/ai.translation correctly targets the key "ai.translation" inside the "modules" object.

Next Steps#

Key Locking
Copy values without translation
Key Ignoring
Exclude keys from target files
Key Preserving
Protect keys for manual translation
Key Renaming
Rename keys without losing translations

Was this page helpful?