Skip to main content
Version: MVP

Internationalization

3 min readFor contributorsUpdated 2026-05-23

What you'll find here

How Craik localizes operator-facing text while keeping runtime identifiers, schema names, status values, policy fields, and receipt semantics stable.

IDs stay stable. Text changes by locale.

Message ids such as slash.help.title are compatibility surface. Translated text can change; runtime ids and machine-readable values must not.

Configure Locale

Set CRAIK_LOCALE for shell, TUI, dashboard, migration, and remediation text that is wired through the localization helper:

CRAIK_LOCALE=es craik slash /help
craik migrate report --source ./fixtures --locale es

Unsupported or missing locales fall back to English. Missing message translations also fall back predictably and mark the returned LocalizedMessage.fallback flag.

Runtime Boundary

Localization applies to operator-facing text only. These values remain English/stable:

  • Schema ids and field names.
  • Status slugs.
  • Policy profile names.
  • Capability names.
  • Receipt ids and evidence ids.

Validation

Run the i18n tests when changing localized strings:

uv run pytest tests/test_i18n.py

What's Next