rivalex/lingua
Lingua is a self-hosted translation manager for Laravel 11–13 that stores i18n strings in your database or lang files. It adds a Livewire admin UI plus CSV, JSON, XLSX, and ODS import/export with dry-run previews, RTL support, and 26 bundled locales.
lingua:uninstall exports translations before dropping tables, and file/database drivers are switchable via a single config value. This supports low-regret decisions: adopting it does not constitute a one-way door.lang/ files in pull requests.Adopt when most of the following are true:
spatie/laravel-translation-loader or laravel-lang/common and want the UI and import/export layer those libraries lack.Look elsewhere when:
For executives — the one-paragraph version: "Lingua is an MIT-licensed, self-hosted translation manager that turns localization from an engineering task into a content operation. It lets non-technical staff add a language and edit copy through an admin screen inside our existing app, with no per-seat or per-string vendor fees and no translation content leaving our infrastructure. It ships with 26 pre-built locales, spreadsheet import/export so our translators can work in Excel or Google Sheets, and right-to-left support for Arabic and Hebrew markets. It is an open-source dependency, not a subscription — and it exports everything and can be uninstalled cleanly, so it is a reversible decision."
For engineering — the honest technical summary:
composer require rivalex/lingua and an interactive lingua:install Artisan command. Publishes config/lingua.php, driver-aware migrations, seeds the default locale.database (recommended, enables live editing without deploys) or file (writes directly to lang/ PHP and JSON, no DB required). lingua:uninstall exports first, then drops tables and published files.(locale, group) pair with a configurable store and prefix.Lingua facade for programmatic read/write/language management, so existing code paths can migrate incrementally.openspout/openspout dependency.wire:navigate support, layout override. Headless selector mode gives zero-CSS semantic HTML if we want our own styling.For finance and legal:
For the product roadmap — the case for a time-boxed pilot: Recommend a two-week, one-locale spike rather than a platform commitment. Success criteria should be concrete: (a) a non-engineer adds a Spanish locale and edits ten strings without engineering help; (b) an export/import round-trip through XLSX preserves every string including HTML-formatted ones; (c) we confirm Flux licensing cost; (d) we have a named internal owner and a fork-and-maintain plan. Given zero dependents and a new maintainer history, the pilot should explicitly answer "what happens if this package stops being maintained?" before we put a customer-facing market launch on top of it. If the pilot passes, the upside is a localization workflow we own outright, with a clean export path out if we ever change our minds.
How can I help you explore Laravel packages today?