Skip to content

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

terminal
$ 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
OptionDescription
[project]Project slug (default: from langctl.json)
-s, --search <text>Match key names and descriptions
-m, --module <name>Filter by module
-p, --published / --draftsOnly 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

terminal
$ 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

terminal
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
OptionDescription
--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
--publishPublish 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.

terminal
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:

terminal
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.

terminal
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

terminal
langctl keys delete web-app old.banner.title old.banner.body

langctl asks for confirmation. In CI, or to skip the question, add --yes:

terminal
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.