Numera: Sayıları Kelimelere Çeviren PHP Kütüphanesi ile ilgili bir güncelleme.
2024’te Numera hakkında ilk makalemi yayınladığımda, amacı yalnızca PHP’de sayıları kelimelere çevirmek olan basit bir kütüphaneydi. Cevaplar cesaret vericiydi ve topluluktan gelen geri bildirimler (özellikle en ile en-US notu) beni daha büyük düşünmeye itti.
Bugün, Numera 2.1 yayında — ve artık farklı bir yapı. Aynı basit API, ancak şimdi 184 dil paketi, bir Laravel köprüsü, GitHub Actions CI ve karşılaştığım gerçek dünya kullanım senaryolarını kapsayan yeni okuma modlarıyla birlikte.
Yenilikleri sizinle paylaşayım.
Kurulum
Kurulum
# Plain PHP
composer require pinoox/numera:^2.1
# Laravel 9 / 10 / 11
composer require pinoox/numera-laravel
2.1’de Neler Yeni
2.1’de Neler Yeni
1. Laravel Entegrasyonu – İlk Sınıf
1. Laravel Entegrasyonu – İlk Sınıf
En çok talep edilen özellik. pinoox/numera-laravel paketini yüklediğinizde, otomatik keşif, bir Facade ve yayınlanabilir bir yapılandırma alırsınız — hiçbir şey manuel olarak bağlanmasına gerek yok.
use Pinoox\Numera\Laravel\Facades\Numera;
echo Numera::n2w(2024); // iki bin yirmi dört
echo Numera::toCurrency(1500, 'USD'); // bin beş yüz dolar
Numera::setLocale('fa');
echo Numera::n2w(1500); // هزار و پانصد
Varsayılan bölgelerinizi ayarlamak için yapılandırmayı yayınlayın:
php artisan vendor:publish --tag=numera-config
// config/numera.php
return [
'default_locale' => ,
=> ,
];
Tüm kamu yöntemleri Facade üzerinde çalışır — n2w, w2n, toOrdinal, toCurrency, withUnit, toWeekday, translateTo ve aşağıdaki tüm yenileri.
2. 184 Dil Paketi ve Bölgesel Varyantlar
2. 184 Dil Paketi ve Bölgesel Varyantlar
Numera artık 184 ISO 639-1 dil paketi ve en-US, en-GB, fa-IR, de-AT gibi bölgesel varyantlarla birlikte geliyor. Bölgesel dosyalar yalnızca geçersiz kılmaları bildirir; diğer her şey üst ebeveyn yerelinden miras alınır.
Numera::init()->toCurrency(, ); // üç pound bir penny
Numera::init()->getWeekdays(); // cumartesi gününden başlar
Numera::init()->getStrategyName(); // almanca (de'den miras alınmıştır)
Özel birleştirme kurallarına sahip diller, bir strategy sistemi kullanır:
| Strateji | Bölgesel Diller | Neden |
|---|---|---|
german | de, de-* | Ters ondalık: einundzwanzig |
french | fr, fr-* | Yirminci: quatre-vingts |
multiplier_tens | id, ms, vi, … | 2×10+3, 2+10+3 değil |
default | Çoğu diğerleri | İngilizce tarzı yer değeri |
3. Akıllı Giriş Formatları
3. Akıllı Giriş Formatları
Farklı bölgelerde sayılar farklı formatlanır. Numera artık bunların tümünü otomatik olarak işler.
$n = Numera::init();
// Avrupa formatı (binler için nokta, ondalık için virgül)
echo $n->n2w();
// İsviçre formatı (binler için kesme işareti)
echo $n->n2w();
// Fars/Arap rakamları
echo $n->n2w(); // otomatik olarak 1234'e çevrilir
// Alt çizgi ayırıcı (PHP/Python tarzı)
echo $n->n2w(); // bir milyon
Formatı açıkça da tespit edebilirsiniz:
Numera::detectFormat(); // 'european'
Numera::detectFormat(); // 'swiss'
Numera::detectFormat(); // 'persian'
Numera::detectFormat(); // 'underscore'
4. Kesir Okuma
4. Kesir Okuma
Yaygın kesirler artık ham ondalık olarak değil, doğal bir şekilde okunuyor.
$n = Numera::init();
echo $n->toFraction(); // bir yarım
echo $n->toFraction(); // bir çeyrek
echo $n->toFraction(); // üç çeyrek
echo $n->toFraction(); // bir buçuk
echo $n->toFraction(); // iki bir üçüncü
// Fars
echo Numera::init()->toFraction(); // نیم
echo Numera::init()->toFraction(); // یک و نیم
Kısa takma ad: n2f()
5. Yıl Okuma
5. Yıl Okuma
Yıllar, “bin dokuz yüz doksan dokuz” değil, “on dokuz doksan dokuz” olarak söylenir.
$n = Numera::init();
echo $n->toYear(); // on dokuz doksan dokuz
echo $n->toYear(); // iki bin
echo $n->toYear(); // iki bin beş
echo $n->toYear(); // yirmi yirmi dört
// Fars standart kuralına geri döner
echo Numera::init()->toYear(); // هزار و چهارصد و دو
Kısa takma ad: n2y()
6. Telefon Numarası Okuma
6. Telefon Numarası Okuma
Telefon numaraları, girdi formatından grup ayırıcılarını koruyarak haneler halinde okunur.
$n = Numera::init();
echo $n->toPhone();
// artı bir, dört yüz on beş, beş beş beş, sıfır bir yedi iki
echo $n->toPhone();
// sıfır iki bir, sekiz sekiz üç dört, bir bir sıfır sıfır
// Fars rakamları da çalışır
echo $n->toPhone();
// sıfır iki bir, sekiz sekiz üç dört
Kısa takma ad: n2p()
7. Roma Rakamları
7. Roma Rakamları
$n = Numera::init();
echo $n->toRoman(); // MMXXIV
echo $n->toRoman(); // MCMXCIX
echo $n->fromRoman(); // 14
echo $n->fromRoman(); // 40 (büyük/küçük harf duyarsız)
Aralık: 1–3999. O aralığın dışındaki değerler InvalidArgumentException fırlatır.
Kısa takma ad: n2r()
8. IP Adresi ve Versiyon Dizisi Okuma
8. IP Adresi ve Versiyon Dizisi Okuma
$n = Numera::init();
echo $n->toIp();
// bir doksan iki nokta bir altmış sekiz nokta bir nokta bir
echo $n->toVersion();
// iki nokta on dört nokta sıfır
echo $n->toVersion();
// bir nokta sıfır nokta sıfır tire beta
Kısa takma adlar: n2ip(), n2v()
9. GitHub Actions CI
9. GitHub Actions CI
Numera artık her push ve PR’da tam bir test matrisini çalıştırıyor — PHP 8.0, 8.1, 8.2 ve 8.3. Artık “makinemde çalışıyor” sürprizleri yok.
2.0’dan Hâlâ Taşınanlar
2.0’dan Hâlâ Taşınanlar
Önceki sürümden her şey tam olarak aynı şekilde çalışıyor:
// Cardinal Number
Numera::init()->n2w();
// dört milyar, dört yüz elli dört milyon, ...
// Ordinal Numbers
Numera::init()->n2o(); // yirmi birinci
Numera::init()->n2o(); // بیست و یکم
// Currency
Numera::init()->toCurrency(, );
// bin iki yüz elli dolar elli sent
// Units
Numera::init()->withUnit(, ); Numera::init()->withUnit(, ); // Weekdays
Numera::init()->toWeekday(); // Cross-locale translation
Numera::init()->translateTo(, ); // iki yüz bir
Numera::init()->translateTo(, ); // دویست و یک
Gerçek Dünya Kullanım Senaryoları
Gerçek Dünya Kullanım Senaryoları
Fatura sistemleri — yasal belgeler için toplamları kelimelere çevirin:
echo Numera::init()->toCurrency(, );
// پانزده میلیون و هفتصد و پنجاه هزار ریال
Erişebilirlik — ekran okuyucular için versiyon numaralarını ve IP’leri okuyun:
echo Numera::init()->toVersion(); // üç nokta iki nokta bir
Mali raporlar — sıralama için sıralı sayılar, oranlar için kesir:
echo Numera::init()->n2o(); // birinci
echo Numera::init()->toFraction(); // bir yarım
Formlar ve CRM’ler — kullanıcı tarafından girilen telefon numaralarını okuyun:
echo Numera::init()->toPhone();
Bağlantılar
Bağlantılar
Katkılarınızı bekliyoruz — özellikle dil paketleri. Eğer henüz tam olarak kapsanmayan bir dili biliyorsanız, Çeviri Kılavuzu birkaç dakikada bir eklemeye nasıl başlayacağınızı anlatır.
Etiketler: #php #laravel #composer #opensource
Kaynak: Orijinal Makale
- Kurulum
- 2.1’de Neler Yeni
- 1. Laravel Entegrasyonu – İlk Sınıf
- 2. 184 Dil Paketi ve Bölgesel Varyantlar
- 3. Akıllı Giriş Formatları
- 4. Kesir Okuma
- 5. Yıl Okuma
- 6. Telefon Numarası Okuma
- 7. Roma Rakamları
- 8. IP Adresi ve Versiyon Dizisi Okuma
- 9. GitHub Actions CI
- 2.0’dan Hâlâ Taşınanlar
- Gerçek Dünya Kullanım Senaryoları
- Bağlantılar


