- What does the wotz/filament-translatable-tabs package actually do?
- It is a presentation-layer Filament panel plugin that renders one tab per configured locale over your translatable form fields, so editors can switch languages without a cluttered form. It does not touch routing, persistence, queues, auth, or your public site. It is intended for admin panels backed by a multi-locale content model, typically Spatie translatable JSON columns or equivalent casting. If you are not running Laravel with a Filament panel and a translatable model, the package adds nothing.
- How do I install filament-translatable-tabs and register it in a Filament panel?
- Installation is the standard Composer flow: composer require wotz/filament-translatable-tabs, then register the plugin in your PanelProvider alongside your other panel plugins. You then apply the provided component or trait to the translatable resources that should get the tabbed UI. Before writing any resource code, verify the Composer constraints resolve against your pinned Filament major, because the plugin sits on Filament's form API which changes between majors.
- Which Filament and Laravel versions does this plugin support?
- The package documentation does not ship a published compatibility matrix, so treat version support as something you must verify rather than assume. The stated Laravel fit is 10, 11, or 12 with a Filament admin panel, but the critical unknown is Filament v3 versus v4, since form APIs churn between majors. Check the composer.json constraints in the tagged release and run a quick install in a scratch branch before committing. Confirm PHP constraints at the same time.
- Does it require spatie/laravel-translatable or does it work with plain JSON columns?
- The overview describes it as working over translatable fields typically backed by spatie/laravel-translatable JSON columns or an equivalent setup, but it does not state a hard dependency either way. That distinction matters: a Spatie-aware component may assume trait methods and per-locale accessors that a plain JSON cast does not provide. Verify this in the source before adopting, especially if you use native JSON casting or a custom translation model. If you are on Spatie, the integration is likely the smoothest path.
- How are required fields, per-locale unique rules, and fallback locale handled?
- This is one of the most important things to test yourself, because the package description does not document validation semantics. Confirm whether required() applies to the active tab only or to every locale server-side, and whether unique rules are scoped per locale or globally. Also check how a fallback locale is resolved and displayed when a translation is empty. Tab state is a UI concern, so make sure the actual validation lives in server-side form rules rather than in client-side tab switching.
- Will switching tabs or partially saving a form overwrite translations I never opened?
- That risk is real for any tab-per-locale UI, because fields rendered on hidden tabs can still dehydrate their state on submit. Before relying on the plugin, test a partial save where you edit one locale and leave the others untouched, then inspect the stored JSON for lost values. If empty hidden tabs overwrite existing translations, that is a blocker rather than a nuisance. A base resource trait or adapter that controls dehydration is a reasonable mitigation.
- Is filament-translatable-tabs safe to use in production?
- Be cautious: the package has one star, zero dependents, and a single maintainer, with no visible community validation or CI evidence. The published last-release date is future-dated, which more likely reflects registry metadata noise than a real release, so verify the actual tag in the repository before pinning. The MIT license is permissive and favorable, and the blast radius is small because it adds no production request-path dependency. Mitigate by pinning an exact version, vendoring or forking it into your own namespace, and rolling out to a single low-risk resource first.
- Does it work with reactive fields, dependent fields, and nested or relationship-based forms?
- These are common failure points for tab-per-locale UIs and the package does not advertise support for them. Reactive and dependent fields can break when their sibling state lives on a hidden tab, and nested or relationship repeaters multiply the state that must stay in sync. Test your specific resource shape during the spike rather than assuming it composes cleanly. Also watch for form-state collisions with other panel plugins such as SEO, media library, or page builders that manipulate field names.
- What are the alternatives to this package for multilingual Filament forms?
- The realistic options are Filament's own native translatable support, an established community translation plugin, or a small internal component you control. Given the package's low adoption, a build-versus-buy comparison against a roughly 100 to 200 line internal implementation is worth doing during the spike. If the plugin is only a few hundred lines, owning it may cost less than adopting an unvetted dependency. Decide based on how much of your resource layer you would have to touch to swap it later.
- How do I avoid lock-in if I adopt filament-translatable-tabs?
- Wrap it behind a thin internal adapter, typically a base resource trait, so individual resources never reference the package directly and it can be swapped without edits across the codebase. Pin an exact version and consider vendoring or forking it into your namespace, since the upstream project is a single-maintainer package with no downstream users to surface regressions. Roll out to one production resource, gather editor feedback, and expand only if behavior is clean. Also re-test on every Filament minor upgrade, because form APIs move.