Never write a translation key again.
Filament Auto Translator constructs every translation key in your panel automatically, based on where each component lives. Open your language file, add the text, done. No __(), no naming, no boilerplate.
From just €59 · lifetime updates · Filament V3 – V5
UserResource.php – before
UserResource.php – after
Translating Filament panels for teams at
✦The tedious work nobody talks about
Localising a Filament panel means doing two jobs for every single string.
First you invent a key. Is it users.role_label, or user-resource.fields.role? Everyone on the team decides differently.
Then you wire it up – __(), trans(), translateLabel() – on every label, hint, placeholder and notification.
In a real panel that is thousands of lines of boilerplate, and a translation file no one can keep consistent.
We’ve been there. So we removed the first job entirely – and automated the second.
✦How it works
The key writes itself.
The package looks at where a component sits – resource, page, operation, schema – and compiles one consistent key. Delete the boilerplate, keep only the structure. Your code stays much cleaner and easy to review.
Same UI. Same translations. Just none of the plumbing.
✦Try it
Hover anything. See its key.
A real Filament page on a ProductResource. Hover a section heading, a label, a hint, a field’s helper text, the save action, even the empty state – each resolves to its own key. You never type it; you only add the value.
filament/resources/product-resource.form.components.product_details.schema.name.label
No tickets yet
Table empty state
✦One place you ever touch
The language file is the whole workflow.
Want a translation? Open the file, add the key, save. It appears.
-
Required keys are enforced. A missing
labelshows as a raw key locally, so you spot it instantly. -
Optional keys are picked up automatically. Add
helper_text,prefixorhintand it just works. - Production never shows a raw key. It falls back to Filament’s default English label.
✦Measured in production
What it does to a real production app.
A live multi-panel Filament application running Filament Auto Translator – counted across its German language files.
6,179
translation keys generated automatically – names and all
0
inline __() or ->label() calls across 320+ classes
588
of those keys power standalone Livewire components outside the panel
Real figures from a production Filament codebase. Every key is constructed and resolved by the package – none written by hand.
✦Covers the whole panel
Everything in Filament, translated.
From ->label() down to ->emptyStateDescription() – the goal is to remove at least 99% of __() from your app.
Forms & infolists
- ✓Labels, hints & helper text
- ✓Placeholders & prefixes
- ✓Validation attributes
Tables
- ✓Columns, filters & headings
- ✓Empty-state heading & body
Actions
- ✓Header, page & custom actions
- ✓Success & failure notifications
- ✓Actions inside actions
Pages & widgets
- ✓Navigation labels & titles
- ✓Model labels & stats widgets
- ✓Builders & repeaters, any depth
Need an exception? Re-map a namespace, override a single key, or request one manually – the automation never locks you in.
✦Goes deeper than the basics
A key is just an address.
Read left to right, every generated key spells out exactly where a text lives – resource, custom page, action, even the notification. So custom sub-pages on a route, relation managers and nested actions need no special handling.
user-resource
the resource
pages.custom_form
a custom sub-page on the route
actions.publish
an action on that page
success_notification_title
the text you add & translate
Relation managers slot in the same way – user-resource.relation_managers.orders_relation_manager
Works across Filament V3, V4 & V5.
The huge internal Filament V4 merge of forms and infolists into schemas is handled for you with an easy upgrade guide.
✦Not just panels
Auto
Translator
one engine
Same engine, in your panel or anywhere else.
Anything that implements the HasTranslations interface gets the same automatic keys – standalone Livewire components and front-end pages included.
✦The “aha” moment
“It removes the need to manually write and reference translation keys, keeps things DRY, and enforces consistency without adding friction. I could easily see this becoming a must-have in any multilingual Filament project once people understand what it actually eliminates.”
He read the description five times before it clicked, then hit the exact problem in real-life work and got it instantly. That’s the nature of this tool: subtle until you need it, indispensable after.
✦One-time purchase · Lifetime access
Buy once. Translate forever.
A one-time purchase with lifetime access and free updates – supporting Filament V3 through V5.
Single Project
Install on one project. Ideal for a single app.
- 2 activations – local & production
- Lifetime access & updates
- Upgrade to Unlimited later
Unlimited Projects
Deploy on every project you build. Buy once.
- Unlimited activations & projects
- Lifetime access & updates
- Best price for the full plugin
Instant download · Invoice from your account.
Questions, answered.
Can I add it to an existing project?
Yes. Enable it per resource, page, cluster or widget – either by extending the package’s base classes or implementing a single HasTranslations interface. Adopt it incrementally, or enforce every key from day one.
What happens in production if a key is missing?
It falls back to Filament’s default behaviour – turning the attribute name into an English label. You only ever see a raw key locally, as a deliberate signal that a translation is still missing.
Does it handle complex, nested structures?
Yes – builders, repeaters, affix actions, actions inside actions, pages with multiple forms, custom pages. The aim is to remove at least 99% of __() usage in your app.
Can I override a generated key?
Always. Use ->translationKey() for a relative or absolute key, re-map a whole namespace with translationGroups(), or request a key manually with AutoTranslator::translate*Text().
Does it only work inside Filament panels?
It supports everything in Filament Panels, and can also be used outside them through the same HasTranslations interface.
Stop naming keys. Start translating.
Drop it into your panel, delete the boilerplate, and never reference a translation key by hand again. Promised.