prinsfrank/transliteration
Typed PHP 8.1+ wrapper around ICU Transliterator. Build transliterators with strict, documented arguments instead of opaque rule strings, plus ready-to-use conversion sets for common transformations (e.g., names/addresses, identity verification, multi-language support).
Strengths:
ext-intl (Internationalization extension), which is already a dependency in Laravel for features like localization, validation, and date handling. No additional infrastructure changes are required.ToASCII, IPAToEnglishApproximation) are composable and reusable, aligning with Laravel’s service container and dependency injection patterns.Gaps:
ext-intl (enabled by default in Laravel but may need enabling in custom PHP builds).prinsfrank/transliteration) with no breaking changes in Laravel’s ecosystem.TransliteratorBuilder is stateless and thread-safe, making it ideal for Laravel’s request-per-cycle model.$builder->applyConversionSet(...)->transliterate()), which aligns with Laravel’s query builder and collection methods.slug columns) or used in APIs (e.g., search normalization).ext-intl) and a well-maintained package (last release: 2024-02-09, MIT license).IPAToEnglishApproximation) may introduce latency for large-scale operations. Requires benchmarking in production-like conditions.beforeContext, afterContext) could lead to unexpected behavior if misconfigured. Mitigate with unit tests.VariableDefinition). Validate inputs rigorously.ext-intl or PHP be monitored?TransliteratorBuilder as a singleton or context-bound service for dependency injection.
$this->app->bind(TransliteratorBuilder::class, function ($app) {
return new TransliteratorBuilder();
});
Transliterator::transliterate($text)) to simplify usage in Blade templates or controllers.saving for slug generation).ToSEOSlug).transliterated_* column for frequently used fields.App::setLocale()) but operates at the character level.ext-intl:
sudo apt-get install php8.1-intl # Ubuntu/Debian
sudo docker-php-ext-install intl # Docker
composer require prinsfrank/transliteration
use PrinsFrank\Transliteration\TransliteratorBuilder;
use PrinsFrank\Transliteration\ConversionSet\ToASCII;
$transliterated = (new TransliteratorBuilder())
->applyConversionSet(new ToASCII())
->transliterate('Иван');
// Output: "Ivan"
ext-intl and the package’s maintainer. Monitor for updates.ext-intl and package updates.applyConversionSet(new ToASCII())).IPAToEnglishApproximation) require ICU knowledge.TransliteratorBuilder::getRuleSet() to debug generated ICU rules.Ivan (Иван)).How can I help you explore Laravel packages today?