CLI reference
Translation Keys
Manage individual keys from the terminal. For bulk changes, edit your source file and use push.
Key names are free-form; dotted names like checkout.payment.title are the convention, and the formats convert them where a platform needs it (checkout_payment_title on Android, checkoutPaymentTitle in ARB). Placeholders use {{name}}.
keys list
$ langctl keys list web-app --search checkout
KEY STATUS MODULE LANGS
checkout.payment.title published checkout 4/4
checkout.payment.cta draft checkout 2/4 | Option | Description |
|---|---|
[project] | Project slug (default: from langctl.json) |
-s, --search <text> | Match key names and descriptions |
-m, --module <name> | Filter by module |
-p, --published / --drafts | Only published / only unpublished keys |
--limit <n> | Show at most n keys |
All pages are fetched, so large projects are listed completely. Use --json for scripts.
keys get
$ langctl keys get web-app checkout.payment.cta
checkout.payment.cta draft
Primary button on the payment step
module: checkout
en Pay {{amount}}
es Pagar {{amount}}
fr — missing
de — missing keys create
langctl keys create web-app checkout.payment.cta \
--value en="Pay {{amount}}" \
--value es="Pagar {{amount}}" \
--description "Primary button on the payment step" \
--module checkout \
--publish | Option | Description |
|---|---|
--value <lang=text> | A translation; repeat for each language |
-d, --description <text> | Context for translators (also exported as comments/metadata) |
-m, --module <name> | Module |
--tags <tags> | Comma-separated tags |
--publish | Publish immediately (default: draft) |
Creating a key that already exists fails with exit code 2. The language codes must be languages of the project.
keys update
Change translations, the description or the module. Translations you don’t mention are kept.
langctl keys update web-app checkout.payment.cta --value fr="Payer {{amount}}" --value de="{{amount}} bezahlen"
langctl keys update web-app checkout.payment.cta --description "CTA on the payment step" --module payments keys translate sets a single translation:
langctl keys translate web-app checkout.payment.cta --language fr --text "Payer {{amount}}" keys publish / unpublish
Published keys are included in pull and export; drafts are not.
langctl keys publish web-app checkout.payment.cta checkout.payment.title
langctl keys publish web-app --module checkout # every draft in a module
langctl keys publish web-app --all # every draft
langctl keys unpublish web-app checkout.payment.cta If any named key doesn’t exist, the others are still published and the command exits 4, listing the missing keys.
keys delete
langctl keys delete web-app old.banner.title old.banner.body langctl asks for confirmation. In CI, or to skip the question, add --yes:
langctl keys delete web-app old.banner.title --yes Note
Deleted keys can be created again with the same name later, and re-importing a file that contains them restores them.
Permissions
Reading keys needs translations:read; creating, updating, publishing and deleting needs translations:write. See Authentication.