Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Auto Transliterate Laravel Package

iabduul7/filament-auto-transliterate

A Filament plugin for automatic transliteration of text fields. Convert input into Latin script or your chosen target as users type, ideal for slugs, multilingual forms, and cleaner data entry. Simple configuration and seamless integration with Filament forms.

View on GitHub
Deep Wiki
Context7

Getting Started

The install is three commands plus one panel registration:

composer require iabduul7/filament-auto-transliterate
php artisan filament-auto-transliterate:install
php artisan filament:assets

The install command is the important step — it publishes the package config and wires up the HTTP endpoint the field uses. Run it before filament:assets so the JS and route config land together. Then register the plugin on your panel in app/Providers/Filament/*PanelProvider.php:

->plugin(FilamentAutoTransliteratePlugin::make())

The first use case to try is a single TextInput bound to a Urdu-script column that sits next to its Roman/English counterpart:

TextInput::make('name_ur')->translatable(),
TextInput::make('name_en'),

Type Roman Urdu into name_ur, hit space, and the token should convert in place. Confirm the header toggle and in-field spinner appear before wiring it into more fields — if they don't, the assets or route are the problem, not the field.

Implementation Patterns

  • Tag every relevant field, not every field. ->translatable() (alias ->autoTransliterate()) is opt-in and should be applied to the Urdu-script inputs only. Applying it to your English fields will fight the user's intent.
  • Use transliterate by default and reach for translate deliberately. Transliteration is phonetic (Roman Urdu → Urdu script); translate is semantic (English meaning → Urdu). They are strictly separated and transliterate will not silently fall through to translation, which is what you want for names and place names.
  • Tune the provider chain per mode in the published config. The chain is ordered and configurable independently for transliterate vs translate. A sensible day-to-day setup is: local dictionary first (deterministic, free, instant) → Google Input Tools (best phonetic quality for Roman Urdu) → LibreTranslate/MyMemory as fallbacks. Reserve Microsoft/Google for translate mode where you need meaning and have API keys.
  • Seed the local dictionary with your domain vocabulary — person names, town names, product names. That removes the most common source of "wrong spelling" complaints and cuts external calls.
  • Pair bilingual fields side by side in the form schema so admins can type phonetic Urdu and English in the same row, rather than tabbing between locales.
  • Works on Textarea too — use it for descriptions and notes where a whole sentence is typed word-by-word.

Gotchas and Tips

  • v0.1.0 — pin it. The macro names and config shape are new and likely to move. Use "iabduul7/filament-auto-transliterate": "0.1.*" and re-read the changelog before upgrading minors.
  • Conversion fires on space. Punctuation, newlines, and paste-from-clipboard are the usual "it didn't convert" reports. Multi-word input converts token by token.
  • Translate mode needs credentials. MyMemory/LibreTranslate have free-tier quotas; Microsoft and Google need API keys in config. Without a key, that provider is skipped and you silently fall through to the next in the chain.
  • The endpoint is auth-gated and throttled. Testing the route with curl while logged out gives a 401/403 by design. If you're seeing 403s in the panel, check the route landed in the correct middleware group (the install command handles this — re-run it if you upgraded).
  • Forgot php artisan filament:assets? The field renders normally but nothing happens on space. The header toggle and spinner are the fastest visual tell that JS loaded.
  • Cache is permanent and hash-indexed, keyed across DB drivers. Great for repeated vocabulary; it does not self-expire. If your input space is high-cardinality (free-text notes), plan a pruning job on whatever store the config points at.
  • The enabled/disabled toggle is persisted client-side. "It stopped working for one user" is usually a toggled-off state in their browser, not a config regression.
  • Debugging: open the network tab — one request per converted token, batched per space. Provider errors surface server-side; check the Laravel log and the provider order in config rather than the JS.
  • Extension point: the provider chain is pluggable — implement a provider against the package's contract and append it to the transliterate chain if you have an internal transliteration service. That's the cleanest route to fully offline, quota-free behavior.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox