dimsav/laravel-translatable
Add multi-language support to any Eloquent model without touching your schema. laravel-translatable stores translations in a dedicated table and lets you read, write, and fall back between locales using familiar Eloquent syntax, making it ideal for multilingual apps and APIs.
translate() accessor, so the question shifts from "how many sprints to rebuild the content layer?" to "which markets, in what order?" That is a roadmap decision, not an engineering one. The new Locales helper class (v10.0.0) modestly lowers the cost of the "add a market" step by centralizing locale registry/negotiation instead of hand-rolling it in config and middleware.*_translations table per translatable model, locale-keyed rows, fallback chain — is the thing your team would otherwise hand-roll. Use it to size the alternative: days of integration versus weeks of custom migrations, accessors, admin form work, and eager-loading optimization. This is now a genuine three-way comparison rather than a two-way one: this repo (revived), its maintained fork, or a JSON-column approach.Consider it:
save() method in favor of a saved event listener — a write-ordering and transactional-semantics change. Audit any code that relied on the old save path, then upgrade deliberately rather than opportunistically.Look elsewhere:
astrotomic/laravel-translatable (near-identical API, so the decision stays reversible) and revisit when a support matrix and a release cadence exist.To executives: "This isn't a purchase — it's a well-understood pattern we can adopt in days instead of building from scratch. It's the cheapest path to shipping our second and third market, and it makes per-market SEO and content operations straightforward. The project was dormant and has just published a new major version, so the 'abandoned dependency' objection is weaker than it was — but one release is not a maintenance track record. We'd adopt the same architecture either way; the only open question is whether we take it from this repo or from its maintained fork. Either choice is reversible at the model layer, and we can decide inside a week."
To engineering: "v10.0.0 is a real release: a new Locales helper class, a getRelationKey() fix, and the custom save() method dropped in favor of a saved event listener. Treat the last item as the important one — it changes when translations get written and how they interact with transactions and other save-time listeners, which is why it's a major bump. Existing installs need an audit of anything that depended on the old save path before upgrading. Note the release notes tell us what changed but not what it supports — confirm Laravel/PHP compatibility from composer.json and CI before anyone plans around this. If the matrix is current and we're comfortable with single-maintainer risk, this is back on the table as a first-class option. If not, astrotomic/laravel-translatable remains the default for this architecture, with spatie/laravel-translatable as the JSON-column alternative. Same data shape, so this stays a reversible decision — but only if we decide now."
How can I help you explore Laravel packages today?