marshmallow/translatable
A Laravel package for adding translations to Eloquent models. Use a trait to mark translatable attributes, store per-locale values, and retrieve localized content with fallback support, keeping multilingual model data simple and integrated with Laravel.
Architecture fit
translatables table keyed by translatable_type, translatable_id, and locale, rather than as JSON columns on the parent table. This is the classic EAV-lite trade-off — it normalizes locale data, keeps content tables narrow, allows per-locale indexing, and lets each translated field be queried independently, at the cost of joins on every localized read.Integration feasibility
composer require, publish migration, apply a trait to models, add a Nova field to resources. No service providers to wire manually beyond discovery, no external services, MIT license means no procurement cycle.Technical risk
(translatable_type, translatable_id, locale, key) duplicates will silently accumulate.Key questions
Stack fit
Migration path
(translatable_type, translatable_id, locale) before any data lands.Compatibility
composer.json; do not float the constraint. Add a CI job that runs the test suite against the pinned Nova/Laravel combination so an upstream bump is caught at PR time rather than at deploy.Sequencing
Maintenance
Support
Scaling
translatables means it should be included in data-retention and vacuum/optimize routines from day one.Failure modes
deleting observer or a scheduled cleanup command.Ramp-up
How can I help you explore Laravel packages today?