wp-cli/language-command
A WP-CLI package for installing, activating, and managing WordPress language packs from the command line, covering core, themes, and plugins so you can add or update translations across your site quickly and consistently.
wp language core|plugin|theme install|update|list|is-installed turns "which translations are live, and are they current?" into scriptable, exit-code-addressable state. That lets us commit to "we ship in N locales" without building a translation delivery service.is-installed returning 0/1 makes locale coverage a measurable gate. We can define an acceptance criterion like "every locale in our supported list passes wp language * is-installed in staging" instead of relying on manual QA sign-off.--all; baking translation packs into container images so production needs no outbound calls to downloads.wordpress.org; drift detection between plugin versions and their installed language packs.wp language core activate is deprecated in favor of wp site switch-language (a separate package). Any runbook or pipeline we write should target the new command so we don't inherit migration debt.lang/ files, ICU messages, per-request locale negotiation). Do not let it into the app dependency graph.Adopt when all of the following hold:
downloads.wordpress.org (or can pre-fetch in a build step and ship packs in the image).Look elsewhere when:
wp site switch-language / WordPress core behavior, not this package.Adoption risks to price in: network egress and availability of downloads.wordpress.org at deploy time; version-coupled pack URLs (packs are fetched per core/plugin version, so a plugin bump can silently orphan a translation until update runs); and CLI-only ergonomics — output is human-readable by default, so pipelines should use --format=json/csv and --dry-run rather than parsing tables.
To executives: This is free, MIT-licensed plumbing from the official WP-CLI project that lets us manage WordPress translations the same way we manage code — declaratively, in pipelines, with pass/fail signals. It converts "is the Dutch site actually in Dutch?" from a manual spot-check into an automated check, and it lets us add a locale to a rollout without a bespoke engineering project. Zero license cost, no new vendor, low lock-in.
To engineering: Add wp-cli/language-command to the WP-CLI toolchain, not the application. Wire three things: a --dry-run translation-update step in the deploy pipeline, an is-installed gate per supported locale in staging, and a --format=json drift report for observability. Prefer pre-baking packs in the container image for production so deploys don't depend on WordPress.org uptime. Use --all for multisite fleet operations. Write runbooks against wp site switch-language, not the deprecated wp language core activate.
To the team as a whole: It is a small, well-tested, single-purpose tool with a narrow blast radius. The main discipline required of us is scope: it handles WordPress-distributed language packs only, and it lives in ops, not in the Laravel codebase. Keep it there and the maintenance burden is near zero.
How can I help you explore Laravel packages today?