rslanzi/nova-translatable
A Laravel Nova package for translatable fields. Manage multilingual content directly in your Nova resources with per-locale inputs, integrating with spatie/laravel-translatable so you can edit translations alongside your models.
Architecture fit. This is a Laravel/PHP package for managing translated model fields, with a notion of a "main language" and per-locale field storage. For a TPM, that means it sits on the Eloquent write path — not at the edge of the stack. Any defect here is a content-integrity defect, not a UI defect. The 0.2.3 fix ("saving empty fields for main language") confirms the package owns read and write semantics for translatable attributes, including how empty values are persisted for the primary locale. That is core behavior for any editorial workflow.
Integration feasibility. Mechanically low-friction: standard Composer install, service provider registration, likely config/migration publishing, and a trait or cast applied to existing models. The friction is procedural, not technical — 0.2.3 is a pre-1.0 patch, so no API stability guarantee exists. We should assume the trait signatures, config keys, and storage shape may still move before 1.0.
Technical risk.
Key questions.
''), and does that require a data backfill or read-side compatibility shim for content saved on 0.2.0–0.2.2?where() / sorting on translated fields?Stack fit. Native Laravel idiom — provider + trait/cast + published config and migrations is exactly how we would build this in-house. That makes it cheap to adopt but also cheap to replace, which is the right risk posture for a pre-1.0 dependency on the write path. It fits conventional Eloquent CRUD and admin-panel patterns; it is a poor fit if we need translated full-text search, per-locale sorting at the database level, or heavy reporting over translated content.
Migration path. Two distinct migrations, and they should not be conflated:
Compatibility. Pin the exact version (0.2.3, not ^0.2) in composer.json for the pilot. Confirm the CI matrix covers our runtime before adopting. Run our own acceptance tests for the semantics the release note touches — empty string, null, whitespace-only, and field-cleared-then-saved — because that is precisely where the package just proved fallible.
Sequencing.
Maintenance. Low ongoing code maintenance, non-trivial version-watch overhead. Pre-1.0 means minor bumps (0.3, 0.4) can carry breaking changes; budget a recurring review of each release note and pin deliberately. Any release touching the save path should be treated as a mandatory review, not an auto-merge — 0.2.3 is the template.
Support. Upstream support is unproven. Mitigate by (a) vendoring or forking readiness — the surface area is small enough that a fork is realistic, (b) keeping our translatable-field access behind a thin internal abstraction so the package is not sprayed across the codebase, and (c) capturing our own regression suite for the write path so we can validate any upgrade without depending on upstream tests.
Scaling. Watch for N+1 queries when listing models with translated fields — eager-loading must be configured explicitly per model. If translations land in JSON columns, filtering and sorting translated content will not scale past small tables; plan to keep translated-field queries to primary-key and base-column predicates. Read-heavy public pages should sit behind a cache keyed by locale + entity, invalidated on save.
Failure modes.
down() before running against anything that matters.Ramp-up. For a Laravel-fluent team, hours to productivity on the trait/cast API; days to confidence on locale fallback and empty-value semantics. The real ramp-up cost is documentation we cannot yet verify — release notes at this granularity suggest thin docs. Budget for one engineer to own the package relationship, write the regression suite, and be the gate on releases. Editorial stakeholders need a short brief on how empty vs. untranslated values render, since that distinction is user-visible and is exactly what 0.2.3 was fixing.
How can I help you explore Laravel packages today?