celvin/numbers-to-words-bundle
Install Dependencies
Run pear install Numbers_Words (or pear install channel://pear.php.net/Numbers_Words-0.18.1 if version conflicts arise).
Verify installation with pear list | grep Numbers_Words.
Bundle Installation Add the package via Composer:
composer require celvin/numbers-to-words-bundle
For development, use:
composer require celvin/numbers-to-words-bundle dev-master
Register the Bundle
Add to app/AppKernel.php:
new celvin\NumbersToWordsBundle\celvinNumbersToWordsBundle(),
First Usage In a controller or service:
use celvin\NumbersToWordsBundle\Numbers_Words\Numbers\Words;
$converter = new Words();
$wordedNumber = $converter->toWords("12378", 'es'); // "doce mil trescientos setenta y ocho"
Convert a numeric value (e.g., order ID, quantity, or price) to its worded equivalent for:
es, French fr, or English en locales).Basic Number Conversion
$converter = new Words();
$result = $converter->toWords($number, $locale); // $locale: 'en', 'fr', 'es'
toWords("1000", 'en') → "one thousand".Currency Conversion
$result = $converter->toCurrency(
$amount, // e.g., "123,56"
$locale, // 'en', 'fr', 'es'
$currency, // 'USD', 'EUR', etc.
$decimalSeparator // ',' or '.'
);
toCurrency("123,56", 'fr', 'EUR', ',') → "cent vingt-trois euros cinquante-six centimes".Service Integration
Bind the converter to the container (e.g., in services.yml or via autowiring):
# config/services.yaml
services:
App\Service\NumberToWordsService:
arguments:
$converter: '@celvin.numbers_to_words.converter'
Then inject the service where needed.
Dynamic Locale Handling
Use Symfony’s Request to fetch the user’s locale:
$locale = $request->getLocale(); // e.g., 'es_ES'
$shortLocale = substr($locale, 0, 2); // 'es'
$converter->toWords($number, $shortLocale);
Words class for unit tests:
$this->createMock(Words::class)->method('toWords')->willReturn('mocked result');
PEAR Dependency Issues
Numbers_Words may fail to install due to PEAR channel issues or PHP version incompatibilities.0.18.1) or check PEAR’s archive.Locale Mismatches
en, fr, and es but may not handle regional variants (e.g., en_US vs. en_GB).substr($locale, 0, 2)).Decimal/Currency Formatting
, vs. .) can break currency conversion.toCurrency() (e.g., ',' for European formats).Large Number Handling
1000000000) may produce unexpected results.number_format()).Check PEAR Installation:
pear list | grep Numbers_Words
If missing, reinstall or debug PEAR’s environment.
Log Outputs:
error_log($converter->toWords("123", 'en')); // Verify raw output
Symfony Debug Toolbar:
Use the profiler to inspect the celvinNumbersToWordsBundle if issues arise post-integration.
Custom Locales Extend the bundle by adding new locales:
// Override the Words class or create a decorator
class CustomWords extends Words {
public function toWords($number, $locale) {
if ($locale === 'de') {
return $this->convertToGerman($number);
}
return parent::toWords($number, $locale);
}
}
Pluralization Rules
Modify the underlying PEAR module’s rules (if needed) by editing the Numbers_Words PEAR package files.
Event Listeners Trigger events before/after conversion (e.g., for logging or formatting):
$eventDispatcher->dispatch(new NumberToWordsEvent($number, $locale, $result));
How can I help you explore Laravel packages today?