PHPackages                             digitaltunnel/arabic-toolkit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. digitaltunnel/arabic-toolkit

ActiveLibrary

digitaltunnel/arabic-toolkit
============================

Arabic name transliteration and money-to-words conversion for Laravel.

v1.0.0(today)10MITPHPPHP ^8.2

Since Apr 4Pushed todayCompare

[ Source](https://github.com/digital-tunnel/arabic-toolkit)[ Packagist](https://packagist.org/packages/digitaltunnel/arabic-toolkit)[ RSS](/packages/digitaltunnel-arabic-toolkit/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (4)Versions (2)Used By (0)

 [![Arabic Toolkit](art/logo.svg)](art/logo.svg)

 [![Latest Version](https://camo.githubusercontent.com/7e485f45052c90ba0cfc1d0345a1ad688fa4537e979d8c21abc0926c8eb6b513/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6469676974616c2d74756e6e656c2f6172616269632d746f6f6c6b69743f7374796c653d666c61742d737175617265)](https://github.com/digital-tunnel/arabic-toolkit/releases) [![PHP Version](https://camo.githubusercontent.com/ba51def61bfedd5c82a9f054e1fa13fe0849c8ff2b8d9aaba9ef18253cbf737c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e322d3838393242463f7374796c653d666c61742d737175617265)](https://github.com/digital-tunnel/arabic-toolkit) [![License](https://camo.githubusercontent.com/89107469862c7e2ddf1dce494162f7d76ef7c79efcf2903993368163101ba96c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6469676974616c2d74756e6e656c2f6172616269632d746f6f6c6b69743f7374796c653d666c61742d737175617265)](https://github.com/digital-tunnel/arabic-toolkit/blob/main/LICENSE)

Arabic Toolkit
==============

[](#arabic-toolkit)

**The definitive Arabic language toolkit for Laravel -- transliteration, money-to-words, Hijri dates, and 9 more services for building Arabic applications.**

1,200+ curated Arabic names, 12 currencies, 3 dialects, smart vowel insertion, and zero external dependencies.

---

Table of Contents
-----------------

[](#table-of-contents)

- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Configuration](#configuration)
- [Services](#services)
    - [1. Arabic Name Transliteration](#1-arabic-name-transliteration)
    - [2. Money to Words](#2-money-to-words)
    - [3. Text Utilities](#3-text-utilities)
    - [4. Arabic Slug Generator](#4-arabic-slug-generator)
    - [5. Search Normalization](#5-search-normalization)
    - [6. Arabic Pluralization](#6-arabic-pluralization)
    - [7. Hijri Date Converter](#7-hijri-date-converter)
    - [8. Gender Detection](#8-gender-detection)
    - [9. Number Formatting](#9-number-formatting)
    - [10. Keyboard Layout Converter](#10-keyboard-layout-converter)
    - [11. BiDi Text Helpers](#11-bidi-text-helpers)
    - [12. Arabic Greeting Generator](#12-arabic-greeting-generator)
- [API Reference](#api-reference)
- [Real-World Examples](#real-world-examples)
- [Architecture](#architecture)
- [Testing](#testing)
- [Security](#security)
- [License](#license)

---

Requirements
------------

[](#requirements)

DependencyVersionPHP^8.2Laravel11.x, 12.x, 13.x---

Installation
------------

[](#installation)

```
composer require digitaltunnel/arabic-toolkit
```

The package auto-discovers its service provider and facade. No manual registration needed.

### Publish Configuration (optional)

[](#publish-configuration-optional)

```
php artisan vendor:publish --tag=arabic-toolkit-config
```

This publishes `config/arabic-toolkit.php` where you can set application-wide defaults.

---

Quick Start
-----------

[](#quick-start)

```
use DigitalTunnel\ArabicToolkit\Facades\ArabicToolkit;

// Transliterate Arabic names to English
ArabicToolkit::transliterate('حسام الشهري');
// "Hossam Al Shehri"

// Convert money to words
ArabicToolkit::moneyToWords(1500.50, 'EGP');
// "One Thousand Five Hundred Egyptian Pounds and Fifty Piastres"

// Convert to Arabic words
ArabicToolkit::moneyToWords(1500, 'EGP', locale: 'ar');
// "ألف وخمسمائة جنيه مصري"

// Hijri date
ArabicToolkit::toHijri('2026-04-04')->format('j F Y', 'ar');
// "١٦ شوال ١٤٤٧"

// Arabic slug for URLs
ArabicToolkit::slug('مقالة عن البرمجة');
// "مقالة-عن-البرمجة"

// Detect gender from name
ArabicToolkit::detectGender('فاطمة');
// "female"
```

---

Configuration
-------------

[](#configuration)

After publishing, edit `config/arabic-toolkit.php`:

```
return [
    'dialect'          => 'egyptian',   // 'egyptian', 'levantine', 'gulf'
    'capitalize'       => true,
    'default_currency' => 'EGP',
    'ta_marbuta'       => 'a',          // 'a', 'ah', 'et'

    'money' => [
        'append_only'  => false,        // Add "Only" / "فقط" suffix
        'locale'       => 'en',         // 'en' or 'ar'
    ],
];
```

All options can be overridden per-call via method parameters.

---

Services
--------

[](#services)

### 1. Arabic Name Transliteration

[](#1-arabic-name-transliteration)

Convert Arabic names to their English phonetic equivalents using a hybrid two-tier system:

- **Tier 1**: Dictionary of 1,200+ curated common names
- **Tier 2**: Smart character-by-character fallback with vowel insertion

```
// Dictionary matches (exact + fuzzy)
ArabicToolkit::transliterate('حسام');        // "Hossam"
ArabicToolkit::transliterate('محمد أحمد');   // "Mohammed Ahmed"
ArabicToolkit::transliterate('عبدالله');     // "Abdullah"
ArabicToolkit::transliterate('عبد الله');    // "Abdullah" (space variant)

// Family names with "ال" prefix
ArabicToolkit::transliterate('الشهري');       // "Al Shehri"
ArabicToolkit::transliterate('القحطاني');     // "Al Qahtani"
ArabicToolkit::transliterate('حسام الشهري'); // "Hossam Al Shehri"

// Particle words
ArabicToolkit::transliterate('محمد بن علي');  // "Mohammed Bin Ali"
ArabicToolkit::transliterate('أبو بكر');     // "Abu Bakr"

// Dialect support
ArabicToolkit::transliterate('جمال', 'levantine'); // "Jamal" (not "Gamal")
```

**Smart features:**

FeatureExampleFuzzy matching (ى ↔ ي)مصطفي → Mostafa (finds مصطفى)Fuzzy matching (أ ↔ ا)احمد → Ahmed (finds أحمد)Compound joiningعبد + الله → AbdullahSmart vowel insertionالشهري → Al Shehri (not "Alshhry")"ال" prefix handlingAlways "Al " for names (no sun-letter assimilation)**Supported dialects:**

DialectجقExampleEgyptian (default)gqجمال → GamalLevantinej'جمال → JamalGulfjgجمال → Jamal---

### 2. Money to Words

[](#2-money-to-words)

Convert numeric amounts to written words with full currency support:

```
// English output
ArabicToolkit::moneyToWords(1500.50, 'EGP');
// "One Thousand Five Hundred Egyptian Pounds and Fifty Piastres"

ArabicToolkit::moneyToWords(1, 'USD');
// "One US Dollar"

ArabicToolkit::moneyToWords(2500, 'SAR');
// "Two Thousand Five Hundred Saudi Riyals"

// Arabic output
ArabicToolkit::moneyToWords(1500.50, 'EGP', locale: 'ar');
// "ألف وخمسمائة جنيه مصري وخمسون قرش"

// "Only" suffix for checks and invoices
ArabicToolkit::moneyToWords(1500, 'EGP', appendOnly: true);
// "One Thousand Five Hundred Egyptian Pounds Only"

ArabicToolkit::moneyToWords(1500, 'EGP', appendOnly: true, locale: 'ar');
// "ألف وخمسمائة جنيه مصري فقط"

// 3-decimal currencies
ArabicToolkit::moneyToWords(1.001, 'KWD');
// "One Kuwaiti Dinar and One Fils"
```

**Supported currencies (12):**

CodeCurrencyFractional UnitDecimalsEGPEgyptian PoundPiastre2SARSaudi RiyalHalala2AEDUAE DirhamFils2USDUS DollarCent2EUREuroCent2GBPBritish PoundPenny/Pence2KWDKuwaiti DinarFils3QARQatari RiyalDirham2BHDBahraini DinarFils3OMROmani RialBaisa3JODJordanian DinarFils3LBPLebanese PoundPiastre2All currencies include Arabic names with proper grammar (singular/dual/plural).

---

### 3. Text Utilities

[](#3-text-utilities)

Essential Arabic text processing operations:

```
// Remove diacritics (harakat)
ArabicToolkit::removeHarakat('الحَمْدُ لِلَّهِ');
// "الحمد لله"

// Normalize alef variants (أ إ آ → ا)
ArabicToolkit::normalizeAlef('أحمد إبراهيم آدم');
// "احمد ابراهيم ادم"

// Convert digits (Western ↔ Eastern)
ArabicToolkit::toEasternDigits('2026');  // "٢٠٢٦"
ArabicToolkit::toWesternDigits('٢٠٢٦'); // "2026"

// Detect Arabic text
ArabicToolkit::isArabic('حسام');   // true
ArabicToolkit::isArabic('Hello');  // false

// Remove tatweel/kashida
ArabicToolkit::removeTatweel('حـــسام'); // "حسام"
```

---

### 4. Arabic Slug Generator

[](#4-arabic-slug-generator)

Generate URL-friendly slugs from Arabic text -- unlike Laravel's `Str::slug()` which destroys Arabic characters:

```
ArabicToolkit::slug('مقالة عن البرمجة');
// "مقالة-عن-البرمجة"

ArabicToolkit::slug('أحمد إبراهيم');
// "احمد-ابراهيم" (normalizes alef variants)

ArabicToolkit::slug('مقالة عن PHP');
// "مقالة-عن-php" (mixed Arabic/English)

// Transliterated slug (Latin characters)
ArabicToolkit::slug('مقالة عن البرمجة', transliterate: true);
// "maqala-an-albarmaja"
```

Automatically removes harakat, normalizes alef, removes tatweel, collapses whitespace, and handles mixed-language text.

---

### 5. Search Normalization

[](#5-search-normalization)

Full normalization pipeline for Arabic text search indexing. Ensures that `"أحمد"`, `"احمد"`, `"أَحْمَد"` all match:

```
ArabicToolkit::normalizeForSearch('أحمد مُحَمَّد');
// "احمد محمد"
```

The pipeline applies (in order):

1. Remove harakat (diacritics)
2. Normalize alef variants (أ إ آ → ا)
3. Normalize ta marbuta (ة → ه)
4. Normalize ya maqsura (ى → ي)
5. Remove tatweel
6. Normalize digits (Eastern → Western)
7. Collapse whitespace

Individual steps are also available:

```
ArabicToolkit::normalizeTaMarbuta('فاطمة');  // "فاطمه"
ArabicToolkit::normalizeYaMaqsura('مصطفى'); // "مصطفي"
```

**Laravel Scout integration:**

```
// In your model's toSearchableArray()
public function toSearchableArray()
{
    return [
        'name' => ArabicToolkit::normalizeForSearch($this->name),
        'bio'  => ArabicToolkit::normalizeForSearch($this->bio),
    ];
}
```

---

### 6. Arabic Pluralization

[](#6-arabic-pluralization)

Arabic has one of the most complex pluralization systems: singular, dual, plural (3-10), and singular again (11+). This service handles it:

```
ArabicToolkit::pluralize(0, 'ملف', 'ملفان', 'ملفات');
// "٠ ملفات"

ArabicToolkit::pluralize(1, 'رسالة', 'رسالتان', 'رسائل');
// "رسالة"

ArabicToolkit::pluralize(2, 'ملف', 'ملفان', 'ملفات');
// "ملفان"

ArabicToolkit::pluralize(5, 'ملف', 'ملفان', 'ملفات');
// "٥ ملفات"

ArabicToolkit::pluralize(15, 'ملف', 'ملفان', 'ملفات');
// "١٥ ملف"
```

Get just the word form without the number:

```
ArabicToolkit::pluralForm(5, 'ملف', 'ملفان', 'ملفات');
// "ملفات"
```

**Arabic pluralization rules:**

CountForm Used0Plural1Singular (no number shown)2Dual (no number shown)3-10Plural (جمع قلة)11+Singular (تمييز)---

### 7. Hijri Date Converter

[](#7-hijri-date-converter)

Convert between Gregorian and Hijri (Islamic) calendar dates:

```
// Gregorian → Hijri
$hijri = ArabicToolkit::toHijri('2026-04-04');
$hijri->format('j F Y');        // "16 Shawwal 1447"
$hijri->format('j F Y', 'ar');  // "١٦ شوال ١٤٤٧"
$hijri->format('d/m/Y');        // "16/10/1447"

// Access components
$hijri->day;                    // 16
$hijri->month;                  // 10
$hijri->year;                   // 1447
$hijri->monthName('en');        // "Shawwal"
$hijri->monthName('ar');        // "شوال"

// Hijri → Gregorian
$gregorian = ArabicToolkit::fromHijri(16, 10, 1447);
// ['year' => 2026, 'month' => 4, 'day' => 4]

// Today in Hijri
$today = ArabicToolkit::hijriToday();
```

**Format tokens:**

TokenOutputExample`j`Day (1-30)7`d`Day with leading zero07`n`Month (1-12)10`m`Month with leading zero10`F`Month nameShawwal / شوال`Y`Year (4 digits)1447**Hijri month names:**

\#EnglishArabic1Muharramمحرم2Safarصفر3Rabi al-Awwalربيع الأول4Rabi al-Thaniربيع الثاني5Jumada al-Ulaجمادى الأولى6Jumada al-Thaniجمادى الآخرة7Rajabرجب8Sha'banشعبان9Ramadanرمضان10Shawwalشوال11Dhul Qi'dahذو القعدة12Dhul Hijjahذو الحجة---

### 8. Gender Detection

[](#8-gender-detection)

Detect the gender of an Arabic name using dictionary lookup + morphological analysis:

```
ArabicToolkit::detectGender('محمد');    // "male"
ArabicToolkit::detectGender('فاطمة');   // "female"
ArabicToolkit::detectGender('إحسان');  // "unisex"
ArabicToolkit::detectGender('نور');     // "unisex"
```

**Detection layers:**

1. **Dictionary lookup** -- checks against known male/female/unisex names
2. **Morphological rules:**
    - Ta marbuta (ة) ending → female
    - Alef maqsura (ى) ending → female
    - اء ending → female (أسماء, شيماء, زهراء)
    - Default → male

---

### 9. Number Formatting

[](#9-number-formatting)

Format numbers with Eastern Arabic digits, separators, and ordinals:

```
// Eastern Arabic digit formatting
ArabicToolkit::formatNumber(1234567.89);
// "١٬٢٣٤٬٥٦٧٫٨٩"

ArabicToolkit::formatNumber(1234567.89, decimals: 0);
// "١٬٢٣٤٬٥٦٨"

// Percentage
ArabicToolkit::formatPercentage(0.157);
// "١٥٫٧٪"

// Ordinals (1st-10th with gender)
ArabicToolkit::ordinal(1);             // "الأول"
ArabicToolkit::ordinal(3);             // "الثالث"
ArabicToolkit::ordinal(1, 'female');   // "الأولى"
ArabicToolkit::ordinal(3, 'female');   // "الثالثة"
```

**Ordinals (masculine/feminine):**

\#MaleFemale1الأولالأولى2الثانيالثانية3الثالثالثالثة4الرابعالرابعة5الخامسالخامسة6السادسالسادسة7السابعالسابعة8الثامنالثامنة9التاسعالتاسعة10العاشرالعاشرة---

### 10. Keyboard Layout Converter

[](#10-keyboard-layout-converter)

Fix text typed with the wrong keyboard layout active -- a very common issue in Arabic applications:

```
// English keys typed on Arabic keyboard → Arabic
ArabicToolkit::fixKeyboard('pshl');
// "حسام"

// Arabic keys typed on English keyboard → English
ArabicToolkit::fixKeyboard('حسام', 'ar_to_en');
// "pshl"

// Auto-detect direction
ArabicToolkit::fixKeyboard('pshl');      // Arabic detected → "حسام"
ArabicToolkit::fixKeyboard('حسام');       // English detected → "pshl"

// Get both variants for search
ArabicToolkit::searchVariants('pshl');
// ['original' => 'pshl', 'swapped' => 'حسام']
```

Useful for search boxes where users forget to switch keyboard layout.

---

### 11. BiDi Text Helpers

[](#11-bidi-text-helpers)

Handle bidirectional text issues when mixing Arabic (RTL) and English (LTR):

```
// Detect text direction
ArabicToolkit::textDirection('مرحبا بالعالم');   // "rtl"
ArabicToolkit::textDirection('Hello World');      // "ltr"

// Fix BiDi display issues (wraps LTR segments with Unicode marks)
ArabicToolkit::bidi('اتصل على 0501234567');
// Wraps phone number with LRM marks to prevent reversal
```

---

### 12. Arabic Greeting Generator

[](#12-arabic-greeting-generator)

Generate contextually correct, gender-aware Arabic greetings:

```
// Time-aware greeting (morning/evening)
ArabicToolkit::greeting('محمد');
// "صباح الخير يا محمد" (morning) or "مساء الخير يا محمد" (evening)

// Formal salutation for letters/emails
ArabicToolkit::salutation('محمد', 'male');
// "السيد محمد المحترم"

ArabicToolkit::salutation('فاطمة', 'female');
// "السيدة فاطمة المحترمة"

// Welcome message with gender-correct pronoun
ArabicToolkit::welcome('أحمد', 'male');
// "أهلاً بك يا أحمد"

ArabicToolkit::welcome('سارة', 'female');
// "أهلاً بكِ يا سارة"
```

Gender is auto-detected using the Gender Detection service when not specified.

---

API Reference
-------------

[](#api-reference)

### ArabicToolkit Facade

[](#arabictoolkit-facade)

MethodReturnsService`transliterate(string, ?string)``string`Transliteration`moneyToWords(float|int, ?string, bool, ?string)``string`Money to Words`removeHarakat(string)``string`Text Utilities`normalizeAlef(string)``string`Text Utilities`toEasternDigits(string)``string`Text Utilities`toWesternDigits(string)``string`Text Utilities`isArabic(string)``bool`Text Utilities`removeTatweel(string)``string`Text Utilities`normalizeForSearch(string)``string`Search Normalization`normalizeTaMarbuta(string)``string`Search Normalization`normalizeYaMaqsura(string)``string`Search Normalization`slug(string, bool)``string`Slug Generator`pluralize(int, string, string, string)``string`Pluralization`pluralForm(int, string, string, string)``string`Pluralization`toHijri(string)``HijriDate`Hijri Date`fromHijri(int, int, int)``array`Hijri Date`hijriToday()``HijriDate`Hijri Date`detectGender(string)``string`Gender Detection`formatNumber(float|int, int)``string`Number Formatting`formatPercentage(float, int)``string`Number Formatting`ordinal(int, string)``string`Number Formatting`fixKeyboard(string, ?string)``string`Keyboard Layout`searchVariants(string)``array`Keyboard Layout`bidi(string)``string`BiDi Helpers`textDirection(string)``string`BiDi Helpers`greeting(string, ?string)``string`Greeting Generator`salutation(string, ?string)``string`Greeting Generator`welcome(string, ?string)``string`Greeting Generator---

Real-World Examples
-------------------

[](#real-world-examples)

### Invoice Generator

[](#invoice-generator)

```
$amount = 15750.50;
$hijri = ArabicToolkit::toHijri(now()->format('Y-m-d'));

echo ArabicToolkit::moneyToWords($amount, 'SAR', appendOnly: true, locale: 'ar');
// "خمسة عشر ألف وسبعمائة وخمسون ريال سعودي وخمسون هللة فقط"

echo $hijri->format('d/m/Y', 'ar');
// "١٦/١٠/١٤٤٧"
```

### Blog Post URL

[](#blog-post-url)

```
$post = Post::create(['title' => 'مقالة عن الذكاء الاصطناعي']);
$post->slug = ArabicToolkit::slug($post->title);
// "مقالة-عن-الذكاء-الاصطناعي"
```

### Search with Arabic Normalization

[](#search-with-arabic-normalization)

```
// Index
$product->search_name = ArabicToolkit::normalizeForSearch($product->name);

// Query (user types "أحمد" or "احمد" -- both match)
$query = ArabicToolkit::normalizeForSearch($request->q);
$results = Product::where('search_name', 'LIKE', "%{$query}%")->get();
```

### Personalized Email

[](#personalized-email)

```
$gender = ArabicToolkit::detectGender($user->first_name);
$salutation = ArabicToolkit::salutation($user->first_name, $gender);
$name_en = ArabicToolkit::transliterate($user->first_name);

Mail::to($user)->send(new WelcomeMail($salutation, $name_en));
```

### Smart Search Box

[](#smart-search-box)

```
// User types "pshl" (forgot to switch keyboard)
$variants = ArabicToolkit::searchVariants($request->q);
$results = User::where('name', 'LIKE', "%{$variants['original']}%")
    ->orWhere('name', 'LIKE', "%{$variants['swapped']}%")
    ->get();
```

### Arabic Dashboard Numbers

[](#arabic-dashboard-numbers)

```
$stats = [
    'revenue' => ArabicToolkit::formatNumber($totalRevenue),     // "١٬٢٣٤٬٥٦٧٫٨٩"
    'growth'  => ArabicToolkit::formatPercentage($growthRate),   // "١٥٫٧٪"
    'rank'    => ArabicToolkit::ordinal($rank),                  // "الثالث"
    'files'   => ArabicToolkit::pluralize($count, 'ملف', 'ملفان', 'ملفات'),
];
```

---

Architecture
------------

[](#architecture)

```
src/
├── ArabicToolkit.php                 # Main entry point (28 public methods)
├── config/
│   └── arabic-toolkit.php            # Configuration
├── Contracts/
│   ├── TransliteratorInterface.php
│   └── MoneyConverterInterface.php
├── Currency/
│   ├── CurrencyRegistry.php          # 12 currencies (EN + AR names)
│   ├── MoneyToWords.php              # Bilingual money converter
│   ├── NumberToWords.php             # English number engine
│   └── NumberToWordsArabic.php       # Arabic number engine
├── Facades/
│   └── ArabicToolkit.php             # Laravel Facade
├── Hijri/
│   ├── HijriConverter.php            # Kuwaiti algorithm
│   └── HijriDate.php                 # Value object with formatting
├── Providers/
│   └── ArabicToolkitServiceProvider.php
├── Support/
│   ├── ArabicBidi.php                # BiDi text handling
│   ├── ArabicGreeting.php            # Gender-aware greetings
│   ├── ArabicNumber.php              # Number formatting & ordinals
│   ├── ArabicPlural.php              # Arabic pluralization rules
│   ├── ArabicSlug.php                # URL slug generator
│   ├── ArabicText.php                # Text normalization utilities
│   ├── GenderDetector.php            # Name gender detection
│   └── KeyboardLayout.php            # QWERTY ↔ Arabic mapping
└── Transliteration/
    ├── ArabicTransliterator.php       # Two-tier transliteration engine
    ├── CharacterMap.php               # Dialect-aware letter mappings
    └── NameDictionary.php             # 1,200+ curated names

```

**Zero dependencies** beyond Laravel's Illuminate Support.

**Key design decisions:**

- All utility classes use static methods for simple direct usage
- The Facade delegates everything to the main `ArabicToolkit` class
- Name dictionary is a PHP constant array (no database, no JSON files)
- Float-safe money conversion using integer math
- Fuzzy name matching handles common Arabic typos automatically

---

Testing
-------

[](#testing)

The package ships with **175 Pest tests** covering every service:

```
cd packages/digitaltunnel/arabic-toolkit
./vendor/bin/pest
```

```
  PASS  Tests\Unit\ArabicTextTest ............... 17 tests
  PASS  Tests\Unit\GenderTest .................... 8 tests
  PASS  Tests\Unit\HijriTest ..................... 8 tests
  PASS  Tests\Unit\KeyboardAndBidiTest .......... 16 tests
  PASS  Tests\Unit\MoneyToWordsTest ............. 63 tests
  PASS  Tests\Unit\NumberFormatTest .............. 7 tests
  PASS  Tests\Unit\PluralTest .................... 7 tests
  PASS  Tests\Unit\SlugTest ...................... 7 tests
  PASS  Tests\Unit\TransliterationTest .......... 42 tests

  Tests:    175 passed (253 assertions)

```

---

Security
--------

[](#security)

If you discover a security vulnerability, please send an email to **** instead of opening a public issue.

See [SECURITY.md](SECURITY.md) for full details on our security policy, supported versions, and best practices.

---

License
-------

[](#license)

The MIT License (MIT). See [LICENSE](LICENSE) for details.

###  Health Score

40

—

FairBetter than 87% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/daaa4f805b79d764eac83ee63b19e11c967605dcf8a6b4f51ef0101f8e97a70d?d=identicon)[HossamMonir](/maintainers/HossamMonir)

---

Top Contributors

[![hossammonir](https://avatars.githubusercontent.com/u/66947877?v=4)](https://github.com/hossammonir "hossammonir (1 commits)")

---

Tags

laravelmoneycurrencytransliterationarabicnumber to words

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/digitaltunnel-arabic-toolkit/health.svg)

```
[![Health](https://phpackages.com/badges/digitaltunnel-arabic-toolkit/health.svg)](https://phpackages.com/packages/digitaltunnel-arabic-toolkit)
```

###  Alternatives

[cknow/laravel-money

Laravel Money

1.0k4.3M19](/packages/cknow-laravel-money)[akaunting/laravel-money

Currency formatting and conversion package for Laravel

7825.3M18](/packages/akaunting-laravel-money)[torann/currency

This provides Laravel with currency functions such as currency formatting and conversion using up-to-date exchange rates.

4081.1M6](/packages/torann-currency)[casinelli/currency

Handles currency for Laravel 5.

1711.8k](/packages/casinelli-currency)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
