FA
Built for Filament Panels · V3, V4 & V5

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

TextInput::make('email')
->label(__('users.email.label'))
->helperText(__('users.email.help')),
Select::make('role')
->label(__('users.role.label'))
->placeholder(__('users.role.ph')),
→

UserResource.php – after

TextInput::make('email'),
Select::make('role'),

Translating Filament panels for teams at

Salesforce Kettner Edelmetalle Verze AI Das Media Jetfly Aviation FZOS

✦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.

UserResource.php
Select::make('role')
->label(__('users.role.label'))
->helperText(__('users.role.help'))
->required(),
 
Toggle::make('is_active')
->label(__('users.active.label')),
UserResource.php · with Filament Auto Translator
Select::make('role')
->required(),
 
Toggle::make('is_active'),
 
// Labels, hints & placeholders
// all resolve from the language file

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.

Generated translation key
filament/resources/product-resource.form.components.product_details.schema.name.label
Edit product
Product details
Name Required
e.g. Festival pass
Shown on the public shop.
Category
Select a category

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 label shows as a raw key locally, so you spot it instantly.
  • Optional keys are picked up automatically. Add helper_text, prefix or hint and it just works.
  • Production never shows a raw key. It falls back to Filament’s default English label.
lang/nl/filament/resources/user-resource.php
return [
'form' => [
'components' => [
'role' => [
'label' => 'Rol',
'helper_text' => 'De rol van de gebruiker',
],
'email' => ['label' => 'E-mailadres'],
],
],
];

✦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.

V3 V4 V5

✦Not just panels

Auto
Translator

one engine

→
✓ Inside Filament panels
✓ Any custom Livewire component no panel needed

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.”
AO Abdelrahman Omran Laravel & Filament developer

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.

€59 one-time
  • 2 activations – local & production
  • Lifetime access & updates
  • Upgrade to Unlimited later
V3 V4 V5
✦ Best value

Unlimited Projects

Deploy on every project you build. Buy once.

€119 one-time
  • Unlimited activations & projects
  • Lifetime access & updates
  • Best price for the full plugin
V3 V4 V5

Instant download · Invoice from your account.

Loved by developers on filamentphp.com
✦Trusted since 2022

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.