khepin/drupal-transliterator-bundle
Symfony bundle that integrates Drupal's transliteration functionality, converting non-ASCII text into ASCII-friendly strings. Useful for generating slugs, filenames, and search-safe identifiers in PHP applications.
Verdict: Do not adopt this as a dependency in a Laravel stack. It is a Symfony 2 bundle that wraps one genuinely durable asset — Drupal's transliteration data tables and algorithm — in framework glue we cannot use. Treat it as a reference implementation and a behavior spec, not a library.
Architecture fit
KhepinDrupalTransliteratorBundle, DependencyInjection/, Resources/config/services.yml, tagged services). Its only job is registering one service; Laravel's container cannot consume that without an adapter, and the adapter would be larger than the logic.drupal_transliterate-style function plus per-script mapping tables, and (b) a decorator into DoctrineExtensions Sluggable so text is transliterated before uniquification.cviebrock/eloquent-sluggable's custom method option, spatie/laravel-sluggable, or a model saving observer. That is a rewrite, not a config change.Integration feasibility
symfony/string's AsciiSlugger / the slugger service, cocur/slugify (+ behat/transliteration), and spatie/laravel-sluggable. The only reason to look here is script coverage those lack, and that must be proven, not assumed.Technical risk
Key questions
Stack fit
App\Support\Transliteration\Transliterator with a single transliterate(string): string method. Bind it in a ServiceProvider. Everything else depends on that interface, never on the vendor package.cviebrock/eloquent-sluggable or spatie/laravel-sluggable — so slug generation stays a declared, testable step rather than an implicit side effect.Migration path
composer require. Fork or vendor only the transliteration data and the pure function, behind our interface.cocur/slugify first, run the parity corpus, and fall back to ported Drupal tables only where coverage gaps are demonstrated. This keeps the abandoned code at arm's length and makes it swappable.Compatibility
ServiceProvider replacing the bundle class, and no Doctrine references.composer why-not and a dependency-audit pass on any forked tree before it enters composer.lock; expect to strip the Symfony and Doctrine constraints wholesale.Sequencing
cocur/slugify. This is the go/no-go on porting anything.Maintenance
Support
Scaling
Failure modes
moskva-1, moskva-2), which is cosmetic early and an SEO liability at scale.Ramp-up
How can I help you explore Laravel packages today?