Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
249 changes: 249 additions & 0 deletions data/ar.sor
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
# Arabic (Modern Standard Arabic) number to text conversion
# Supports masculine and feminine forms, ordinals, currency, and decimals

# Basic numbers 0-10 (masculine forms - default)
^0 صفر
1 واحد
2 اثنان
3 ثلاثة
4 أربعة
5 خمسة
6 ستة
7 سبعة
8 ثمانية
9 تسعة
10 عشرة

# Numbers 11-19 (masculine forms)
11 أحد عشر
12 اثنا عشر
13 ثلاثة عشر
14 أربعة عشر
15 خمسة عشر
16 ستة عشر
17 سبعة عشر
18 ثمانية عشر
19 تسعة عشر

# Tens (20-90) - same for both genders
20 عشرون
30 ثلاثون
40 أربعون
50 خمسون
60 ستون
70 سبعون
80 ثمانون
90 تسعون

# Compound numbers 21-99
2(\d) $1 وعشرون
3(\d) $1 وثلاثون
4(\d) $1 وأربعون
5(\d) $1 وخمسون
6(\d) $1 وستون
7(\d) $1 وسبعون
8(\d) $1 وثمانون
9(\d) $1 وتسعون

# Separator functions for proper conjunction usage
:0+ # exact thousand/million
:0*\d?\d " و" # with small remainder
:\d+ " و" # with larger remainder

# Hundreds
1(\d\d) مائة[ و$1]
2(\d\d) مائتان[ و$1]
3(\d\d) ثلاثمائة[ و$1]
4(\d\d) أربعمائة[ و$1]
5(\d\d) خمسمائة[ و$1]
6(\d\d) ستمائة[ و$1]
7(\d\d) سبعمائة[ و$1]
8(\d\d) ثمانمائة[ و$1]
9(\d\d) تسعمائة[ و$1]

# Thousands
1(\d{3}) ألف$(:\1)$1
2(\d{3}) ألفان$(:\1)$1
([3-9]|10)(\d{3}) $1 آلاف$(:\2)$2
(\d{1,2})(\d{3}) $1 ألفاً$(:\2)$2

# Millions
1(\d{6}) مليون$(:\1)$1
2(\d{6}) مليونان$(:\1)$1
([3-9]|10)(\d{6}) $1 ملايين$(:\2)$2
(\d{1,3})(\d{6}) $1 مليون$(:\2)$2

# Billions
1(\d{9}) مليار$(:\1)$1
2(\d{9}) ملياران$(:\1)$1
([3-9]|10)(\d{9}) $1 مليارات$(:\2)$2
(\d{1,3})(\d{9}) $1 مليار$(:\2)$2

# Trillions
1(\d{12}) ترليون$(:\1)$1
2(\d{12}) ترليونان$(:\1)$1
([3-9]|10)(\d{12}) $1 ترليونات$(:\2)$2
(\d{1,3})(\d{12}) $1 ترليون$(:\2)$2

# Quadrillions
1(\d{15}) كوادرليون$(:\1)$1
2(\d{15}) كوادرليونان$(:\1)$1
([3-9]|10)(\d{15}) $1 كوادرليونات$(:\2)$2
(\d{1,3})(\d{15}) $1 كوادرليون$(:\2)$2

# Quintillions
1(\d{18}) كوينتليون$(:\1)$1
2(\d{18}) كوينتليونان$(:\1)$1
([3-9]|10)(\d{18}) $1 كوينتليونات$(:\2)$2
(\d{1,3})(\d{18}) $1 كوينتليون$(:\2)$2

# Negative numbers
[-−](\d+) سالب |$1

# Decimals
0[.,] صفر فاصلة
([-−]?\d+)[.,] $1| فاصلة
([-−]?\d+[.,]\d*)(\d) $1| |$2

# Gender conversion functions
# Masculine to Feminine conversion
f:(.*)واحد \1واحدة
f:(.*)اثنان \1اثنتان
f:(.*)ثلاثة \1ثلاث
f:(.*)أربعة \1أربع
f:(.*)خمسة \1خمس
f:(.*)ستة \1ست
f:(.*)سبعة \1سبع
f:(.*)ثمانية \1ثمان
f:(.*)تسعة \1تسع
f:(.*)عشرة \1عشر

f:(.*)أحد عشر \1إحدى عشرة
f:(.*)اثنا عشر \1اثنتا عشرة
f:(.*)ثلاثة عشر \1ثلاث عشرة
f:(.*)أربعة عشر \1أربع عشرة
f:(.*)خمسة عشر \1خمس عشرة
f:(.*)ستة عشر \1ست عشرة
f:(.*)سبعة عشر \1سبع عشرة
f:(.*)ثمانية عشر \1ثمان عشرة
f:(.*)تسعة عشر \1تسع عشرة

# Keep masculine as-is (default)
m:(.*) \1

# Keep feminine or masculine
[mf]:(.*) \1

# Helper function for number before counted noun (masculine form)
mf:1 واحد
mf:2 اثنان
mf:3 ثلاثة
mf:4 أربعة
mf:5 خمسة
mf:6 ستة
mf:7 سبعة
mf:8 ثمانية
mf:9 تسعة
mf:10 عشرة
mf:(.*) $(m:\1)

# Currency support
# Pattern: us/up/ss/sp for unit singular/plural, subunit singular/plural

us:([^,]*),([^,]*),([^,]*),([^,]*) \1
up:([^,]*),([^,]*),([^,]*),([^,]*) \2
ss:([^,]*),([^,]*),([^,]*),([^,]*) \3
sp:([^,]*),([^,]*),([^,]*),([^,]*) \4

# Major Arabic currencies
SAR:(\D+) $(\1: ريال سعودي, ريال سعودي, هللة, هللة)
AED:(\D+) $(\1: درهم إماراتي, درهم إماراتي, فلس, فلس)
EGP:(\D+) $(\1: جنيه مصري, جنيه مصري, قرش, قرش)
JOD:(\D+) $(\1: دينار أردني, دينار أردني, قرش, قرش)
KWD:(\D+) $(\1: دينار كويتي, دينار كويتي, فلس, فلس)
BHD:(\D+) $(\1: دينار بحريني, دينار بحريني, فلس, فلس)
OMR:(\D+) $(\1: ريال عماني, ريال عماني, بيسة, بيسة)
QAR:(\D+) $(\1: ريال قطري, ريال قطري, درهم, درهم)
IQD:(\D+) $(\1: دينار عراقي, دينار عراقي, فلس, فلس)
LBP:(\D+) $(\1: ليرة لبنانية, ليرة لبنانية, قرش, قرش)
SYP:(\D+) $(\1: ليرة سورية, ليرة سورية, قرش, قرش)
LYD:(\D+) $(\1: دينار ليبي, دينار ليبي, درهم, درهم)
TND:(\D+) $(\1: دينار تونسي, دينار تونسي, مليم, مليم)
DZD:(\D+) $(\1: دينار جزائري, دينار جزائري, سنتيم, سنتيم)
MAD:(\D+) $(\1: درهم مغربي, درهم مغربي, سنتيم, سنتيم)
SDG:(\D+) $(\1: جنيه سوداني, جنيه سوداني, قرش, قرش)
MRU:(\D+) $(\1: أوقية موريتانية, أوقية موريتانية, خمس, خمس)
YER:(\D+) $(\1: ريال يمني, ريال يمني, فلس, فلس)
SOS:(\D+) $(\1: شلن صومالي, شلن صومالي, سنت, سنت)
DJF:(\D+) $(\1: فرنك جيبوتي, فرنك جيبوتي, سنتيم, سنتيم)
KMF:(\D+) $(\1: فرنك قمري, فرنك قمري, سنتيم, سنتيم)

# International currencies
USD:(\D+) $(\1: دولار أمريكي, دولار أمريكي, سنت, سنت)
EUR:(\D+) $(\1: يورو, يورو, سنت, سنت)
GBP:(\D+) $(\1: جنيه إسترليني, جنيه إسترليني, بنس, بنس)
CHF:(\D+) $(\1: فرنك سويسري, فرنك سويسري, سنتيم, سنتيم)
JPY:(\D+) $(\1: ين ياباني, ين ياباني, سن, سن)
CNY:(\D+) $(\1: يوان صيني, يوان صيني, فن, فن)

# Currency patterns
"([A-Z]{3}) ([-−]?1)([.,]00?)?" $2$(\1:us)
"([A-Z]{3}) ([-−]?\d+)([.,]00?)?" $2$(\1:up)

"(([A-Z]{3}) [-−]?\d+)[.,](01)" $1 و|$(1)$(\2:ss)
"(([A-Z]{3}) [-−]?\d+)[.,](\d)" $1 و|$(\30)$(\2:sp)
"(([A-Z]{3}) [-−]?\d+)[.,](\d\d)" $1 و|$3$(\2:sp)

== money ==

"([A-Z]{3}) ([-−]?1)([.,]00?)?" $2$(\1:us)
"([A-Z]{3}) ([-−]?\d+)([.,]00?)?" $2$(\1:up)

"(([A-Z]{3}) ([-−]?\d+))[.,](01)" $3 و1/100$(\2:us)
"(([A-Z]{3}) ([-−]?\d+))[.,](\d)" $3 و\40/100$(\2:up)
"(([A-Z]{3}) ([-−]?\d+))[.,](\d\d)" $3 و\4/100$(\2:up)
"(([A-Z]{3}) ([-−]?\d+))[.,](\d\d\d)" $3 و\4/1000$(\2:up)

== ordinal ==

# Convert to text, then convert cardinal to ordinal
([-−]?\d+) $(ordinal |$1)

# Ordinal forms (masculine by default)
(.*)واحد \1الأول
(.*)اثنان \1الثاني
(.*)ثلاثة \1الثالث
(.*)أربعة \1الرابع
(.*)خمسة \1الخامس
(.*)ستة \1السادس
(.*)سبعة \1السابع
(.*)ثمانية \1الثامن
(.*)تسعة \1التاسع
(.*)عشرة \1العاشر
(.*)أحد عشر \1الحادي عشر
(.*)اثنا عشر \1الثاني عشر
(.*)عشرون \1العشرون
(.*)ثلاثون \1الثلاثون
(.*)مائة \1المائة
(.*)ألف \1الألف
(.*) \1

== ordinal-number ==

# Ordinal abbreviation (no standard in Arabic, just append suffix)
1 الأول
2 الثاني
3 الثالث
4 الرابع
5 الخامس
6 السادس
7 السابع
8 الثامن
9 التاسع
10 العاشر
(.*) ال\1

== help ==

"" $(1)|، $(2)، $(3)\nمذكر: $(m:3) = |$(m:3)\nمؤنث: $(f:3) = |$(f:3)\nترتيبي: $(\0 ordinal)\nعملة: $(SAR 2.5)\nنقود: $(money USD 100.25)
"(ordinal(-number)?|SAR|USD)" \1: $(\1 1)، $(\1 2)، $(\1 3)\n