Skip to content

Commit 3a097b9

Browse files
authored
Add an Egyptian Arabic (ar_EG) locale (#377)
* Add an ar_EG provider * Update formats * Add more company suffixes, people last names * Add bankAccountNumber for the ar_EG locale * Add person national id number, and company tax and registration info to the ar_EG locale * Better handle the creation of the national id number * Fix number of digits in an id and correct the docs * Finish company and person tests in the ar_EG locale * Add more tests * Fix code to match the standards * Test the outputted values against the expected pattern to make sure tests are not getting a false positive * Assert emails are properly tested * Remove unnecessary unreliable arabic scripts based regex tests
1 parent f6acb22 commit 3a097b9

File tree

13 files changed

+697
-0
lines changed

13 files changed

+697
-0
lines changed

src/Faker/Provider/Payment.php

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class Payment extends Base
9292
'DK' => [['n', 4], ['n', 9], ['n', 1]],
9393
'DO' => [['c', 4], ['n', 20]],
9494
'EE' => [['n', 2], ['n', 2], ['n', 11], ['n', 1]],
95+
'EG' => [['n', 4], ['n', 4], ['n', 17]],
9596
'ES' => [['n', 4], ['n', 4], ['n', 1], ['n', 1], ['n', 10]],
9697
'FI' => [['n', 6], ['n', 7], ['n', 1]],
9798
'FR' => [['n', 5], ['n', 5], ['c', 11], ['n', 2]],

src/Faker/Provider/ar_EG/Address.php

+207
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
<?php
2+
3+
namespace Faker\Provider\ar_EG;
4+
5+
class Address extends \Faker\Provider\Address
6+
{
7+
protected static $cityPrefix = [
8+
'شمال',
9+
'جنوب',
10+
'شرق',
11+
'غرب',
12+
];
13+
14+
protected static $streetPrefix = ['شارع', 'طريق', 'ممر'];
15+
16+
/**
17+
* @see https://ar.wikipedia.org/wiki/%D8%AA%D8%B5%D9%86%D9%8A%D9%81:%D8%A3%D8%AD%D9%8A%D8%A7%D8%A1_%D8%A7%D9%84%D9%82%D8%A7%D9%87%D8%B1%D8%A9
18+
*/
19+
protected static $cityName = [
20+
'التجمع الاول',
21+
'التجمع التالت',
22+
'التجمع الخامس',
23+
'الشروق',
24+
'الرحاب',
25+
'الجزيرة',
26+
'الحسين',
27+
'الزمالك',
28+
'السلام',
29+
'الظاهر',
30+
'العباسية',
31+
'المطرية',
32+
'الموسكي',
33+
'النزهة الجديدة',
34+
'السيدة زينب',
35+
'المرج',
36+
'المعادي',
37+
'المقطم',
38+
'المنيل',
39+
'الوايلي',
40+
'باب الشعرية',
41+
'باب اللوق',
42+
'ثكنات المعادي',
43+
'جاردن سيتي',
44+
'جسر السويس',
45+
'عابدين',
46+
'حدائق المعادي',
47+
'حلمية الزيتون',
48+
'حلوان',
49+
'الأزبكية',
50+
'الزاوية الحمراء',
51+
'الساحل',
52+
'مدينة نصر',
53+
'حدائق القبة',
54+
'شبرا',
55+
'عين شمس',
56+
'روكسي',
57+
'زهراء المعادي',
58+
'سراي القبة',
59+
'عبود',
60+
'عزبة النخل',
61+
'كوتسيكا',
62+
'الشيخ زايد',
63+
'السادس من اكتوير',
64+
'العاشر من رمضان',
65+
'المعصرة',
66+
'الزهراء',
67+
'غمرة',
68+
'المنيب',
69+
'فيصل',
70+
'الدقي',
71+
'العتبة',
72+
'المظلات',
73+
'المطار',
74+
'قباء',
75+
'ألف مسكن',
76+
'هليوبوليس',
77+
'هارون',
78+
'كلية البنات',
79+
'عبده باشا',
80+
'الجيش',
81+
'الكيت كات',
82+
'إمبابة',
83+
];
84+
85+
/**
86+
* @see https://ar.wikipedia.org/wiki/%D9%82%D8%A7%D8%A6%D9%85%D8%A9_%D9%85%D8%AD%D8%A7%D9%81%D8%B8%D8%A7%D8%AA_%D9%85%D8%B5%D8%B1
87+
*/
88+
protected static $governorates = [
89+
'الإسكندرية',
90+
'الإسماعيلية',
91+
'أسوان',
92+
'أسيوط',
93+
'الأقصر',
94+
'البحر الأحمر',
95+
'البحيرة',
96+
'بني سويف',
97+
'بورسعيد',
98+
'جنوب سيناء',
99+
'الجيزة',
100+
'الدقهلية',
101+
'دمياط',
102+
'سوهاج',
103+
'السويس',
104+
'الشرقية',
105+
'شمال سيناء',
106+
'الغربية',
107+
'الفيوم',
108+
'القاهرة',
109+
'القليوبية',
110+
'قنا',
111+
'كفر الشيخ',
112+
'مطروح',
113+
'المنوفية',
114+
'المنيا',
115+
'الوادي الجديد',
116+
];
117+
118+
protected static $buildingNumber = ['%####', '%###', '%#'];
119+
120+
protected static $postcode = ['#####', '#####-####'];
121+
122+
/**
123+
* @see http://www.nationsonline.org/oneworld/countrynames_arabic.htm
124+
*/
125+
protected static $country = [
126+
'الكاريبي', 'أمريكا الوسطى', 'أنتيجوا وبربودا', 'أنجولا', 'أنجويلا', 'أندورا', 'اندونيسيا', 'أورجواي', 'أوروبا', 'أوزبكستان', 'أوغندا', 'أوقيانوسيا', 'أوقيانوسيا النائية', 'أوكرانيا', 'ايران', 'أيرلندا', 'أيسلندا', 'ايطاليا',
127+
'بابوا غينيا الجديدة', 'باراجواي', 'باكستان', 'بالاو', 'بتسوانا', 'بتكايرن', 'بربادوس', 'برمودا', 'بروناي', 'بلجيكا', 'بلغاريا', 'بليز', 'بنجلاديش', 'بنما', 'بنين', 'بوتان', 'بورتوريكو', 'بوركينا فاسو', 'بوروندي', 'بولندا', 'بوليفيا', 'بولينيزيا', 'بولينيزيا الفرنسية', 'بيرو',
128+
'تانزانيا', 'تايلند', 'تايوان', 'تركمانستان', 'تركيا', 'ترينيداد وتوباغو', 'تشاد', 'توجو', 'توفالو', 'توكيلو', 'تونجا', 'تونس', 'تيمور الشرقية',
129+
'جامايكا', 'جبل طارق', 'جرينادا', 'جرينلاند', 'جزر الأنتيل الهولندية', 'جزر الترك وجايكوس', 'جزر القمر', 'جزر الكايمن', 'جزر المارشال', 'جزر الملديف', 'جزر الولايات المتحدة البعيدة الصغيرة', 'جزر أولان', 'جزر سليمان', 'جزر فارو', 'جزر فرجين الأمريكية', 'جزر فرجين البريطانية', 'جزر فوكلاند', 'جزر كوك', 'جزر كوكوس', 'جزر ماريانا الشمالية', 'جزر والس وفوتونا', 'جزيرة الكريسماس', 'جزيرة بوفيه', 'جزيرة مان', 'جزيرة نورفوك', 'جزيرة هيرد وماكدونالد', 'جمهورية افريقيا الوسطى', 'جمهورية التشيك', 'جمهورية الدومينيك', 'جمهورية الكونغو الديمقراطية', 'جمهورية جنوب افريقيا', 'جنوب آسيا', 'جنوب أوروبا', 'جنوب شرق آسيا', 'جنوب وسط آسيا', 'جواتيمالا', 'جوادلوب', 'جوام', 'جورجيا', 'جورجيا الجنوبية وجزر ساندويتش الجنوبية', 'جيبوتي', 'جيرسي',
130+
'دومينيكا',
131+
'رواندا', 'روسيا', 'روسيا البيضاء', 'رومانيا', 'روينيون',
132+
'زامبيا', 'زيمبابوي',
133+
'ساحل العاج', 'ساموا', 'ساموا الأمريكية', 'سانت بيير وميكولون', 'سانت فنسنت وغرنادين', 'سانت كيتس ونيفيس', 'سانت لوسيا', 'سانت مارتين', 'سانت هيلنا', 'سان مارينو', 'ساو تومي وبرينسيبي', 'سريلانكا', 'سفالبارد وجان مايان', 'سلوفاكيا', 'سلوفينيا', 'سنغافورة', 'سوازيلاند', 'سوريا', 'سورينام', 'سويسرا', 'سيراليون', 'سيشل',
134+
'شرق آسيا', 'شرق افريقيا', 'شرق أوروبا', 'شمال افريقيا', 'شمال أمريكا', 'شمال أوروبا', 'شيلي',
135+
'صربيا', 'صربيا والجبل الأسود',
136+
'طاجكستان',
137+
'عمان',
138+
'غامبيا', 'غانا', 'غرب آسيا', 'غرب افريقيا', 'غرب أوروبا', 'غويانا', 'غيانا', 'غينيا', 'غينيا الاستوائية', 'غينيا بيساو',
139+
'فانواتو', 'فرنسا', 'فلسطين', 'فنزويلا', 'فنلندا', 'فيتنام', 'فيجي',
140+
'قبرص', 'قرغيزستان', 'قطر',
141+
'كازاخستان', 'كاليدونيا الجديدة', 'كرواتيا', 'كمبوديا', 'كندا', 'كوبا', 'كوريا الجنوبية', 'كوريا الشمالية', 'كوستاريكا', 'كولومبيا', 'كومنولث الدول المستقلة', 'كيريباتي', 'كينيا',
142+
'لاتفيا', 'لاوس', 'لبنان', 'لوكسمبورج', 'ليبيا', 'ليبيريا', 'ليتوانيا', 'ليختنشتاين', 'ليسوتو',
143+
'مارتينيك', 'ماكاو الصينية', 'مالطا', 'مالي', 'ماليزيا', 'مايوت', 'مدغشقر', 'مصر', 'مقدونيا', 'ملاوي', 'منغوليا', 'موريتانيا', 'موريشيوس', 'موزمبيق', 'مولدافيا', 'موناكو', 'مونتسرات', 'ميانمار', 'ميكرونيزيا', 'ميلانيزيا',
144+
'ناميبيا', 'نورو', 'نيبال', 'نيجيريا', 'نيكاراجوا', 'نيوزيلاندا', 'نيوي',
145+
'هايتي', 'هندوراس', 'هولندا', 'هونج كونج الصينية',
146+
'وسط آسيا', 'وسط افريقيا',
147+
];
148+
149+
protected static $cityFormats = [
150+
'{{cityName}}',
151+
];
152+
153+
protected static $streetNameFormats = [
154+
'{{streetPrefix}} {{firstName}} {{lastName}}',
155+
];
156+
157+
protected static $streetAddressFormats = [
158+
'{{buildingNumber}} {{streetName}}',
159+
'{{buildingNumber}} {{streetName}} {{secondaryAddress}}',
160+
];
161+
162+
protected static $addressFormats = [
163+
"{{streetAddress}}\n{{city}}",
164+
];
165+
166+
protected static $secondaryAddressFormats = ['شقة رقم. ##', 'عمارة رقم ##'];
167+
168+
/**
169+
* @example 'شرق'
170+
*/
171+
public static function cityPrefix()
172+
{
173+
return static::randomElement(static::$cityPrefix);
174+
}
175+
176+
/**
177+
* @example 'المعادي'
178+
*/
179+
public static function cityName()
180+
{
181+
return static::randomElement(static::$cityName);
182+
}
183+
184+
/**
185+
* @example 'شارع'
186+
*/
187+
public static function streetPrefix()
188+
{
189+
return static::randomElement(static::$streetPrefix);
190+
}
191+
192+
/**
193+
* @example 'شقة رقم. 350'
194+
*/
195+
public static function secondaryAddress()
196+
{
197+
return static::numerify(static::randomElement(static::$secondaryAddressFormats));
198+
}
199+
200+
/**
201+
* @example 'الإسكندرية'
202+
*/
203+
public static function governorate()
204+
{
205+
return static::randomElement(static::$governorates);
206+
}
207+
}

src/Faker/Provider/ar_EG/Color.php

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Faker\Provider\ar_EG;
4+
5+
class Color extends \Faker\Provider\Color
6+
{
7+
protected static $safeColorNames = [
8+
'أسود', 'قرمزي', 'أخضر', 'كحلي', 'زيتوني',
9+
'أرجواني', 'أحمر', 'أزرق', 'فضي', 'ذهبي',
10+
'رمادي', 'أصفر', 'برتقالي', 'بني', 'أبيض', 'بنفسجى',
11+
];
12+
13+
/**
14+
* @see http://r7eq.com/Service/Design/ColorName/
15+
*/
16+
protected static $allColorNames = [
17+
'أخضر فاتح',
18+
'أزرق فاتح',
19+
'أحمر فاتح',
20+
'أصفر فاتح',
21+
'بني فاتح',
22+
'رمادي فاتح',
23+
'أرجواني فاتح',
24+
'زيتوني فاتح',
25+
'كحلي فاتح',
26+
'قرمزي فاتح',
27+
'أسود فاتح',
28+
'بنفسجى فاتح',
29+
'برتقالي فاتح',
30+
'زيتوني داكن',
31+
'كحلي داكن',
32+
'أخضر داكن',
33+
'قرمزي داكن',
34+
'أزرق داكن',
35+
'أحمر داكن',
36+
'أرجواني داكن',
37+
'بنفسجى داكن',
38+
'بني داكن',
39+
'برتقالي داكن',
40+
'أصفر داكن',
41+
'رمادي داكن',
42+
'وردي',
43+
'زهري',
44+
'طوبي',
45+
'كستنائي',
46+
'عسلي',
47+
'نحاسي',
48+
'أسمر',
49+
'خشبي',
50+
'كريمي',
51+
'سكري',
52+
'ثلجي',
53+
'بيج',
54+
'ليموني',
55+
'فستقي',
56+
'كموني',
57+
'يروزي',
58+
'سماوي',
59+
'نيلي',
60+
'بحري',
61+
'فحمي',
62+
'زيتي',
63+
'عنابي',
64+
];
65+
}

src/Faker/Provider/ar_EG/Company.php

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
namespace Faker\Provider\ar_EG;
4+
5+
use Faker\Calculator\Luhn;
6+
7+
class Company extends \Faker\Provider\Company
8+
{
9+
protected static $formats = [
10+
'{{companyPrefix}} {{cityName}}',
11+
'{{companyPrefix}} {{lastName}}',
12+
'{{cityName}} {{companySuffix}}',
13+
'{{lastName}} {{companySuffix}}',
14+
'{{companyPrefix}} {{lastName}} {{companySuffix}}',
15+
'{{companyPrefix}} {{cityName}} {{companySuffix}}',
16+
];
17+
18+
protected static $catchPhraseWords = [
19+
['الخدمات', 'الحلول', 'الانظمة'],
20+
[
21+
'الذهبية', 'الذكية', 'المتطورة', 'المتقدمة', 'الدولية', 'المتخصصه', 'السريعة',
22+
'المثلى', 'الابداعية', 'المتكاملة', 'المتغيرة', 'المثالية',
23+
],
24+
];
25+
26+
protected static $companyPrefix = ['شركة', 'مؤسسة', 'مجموعة', 'مكتب', 'أكاديمية', 'معرض'];
27+
28+
protected static $companySuffix = [
29+
' ش.م.م',
30+
' للتجاره العامه',
31+
'للأجهزة الطبيه',
32+
'للتوريدات',
33+
'للمقاولات',
34+
'للتطوير العقاري',
35+
'للدعايه و الاعلان',
36+
'للحلول المتقدمه',
37+
'للخدمات الدولية',
38+
'الدولية',
39+
'للانظمة المتكاملة',
40+
];
41+
42+
/**
43+
* @example 'مؤسسة'
44+
*
45+
* @return string
46+
*/
47+
public function companyPrefix()
48+
{
49+
return static::randomElement(self::$companyPrefix);
50+
}
51+
52+
/**
53+
* @example 'الحلول المتقدمة'
54+
*/
55+
public function catchPhrase()
56+
{
57+
$result = [];
58+
59+
foreach (static::$catchPhraseWords as &$word) {
60+
$result[] = static::randomElement($word);
61+
}
62+
63+
return implode(' ', $result);
64+
}
65+
66+
/**
67+
* example 010101010
68+
*/
69+
public static function companyTaxIdNumber()
70+
{
71+
$partialValue = static::numerify(str_repeat('#', 9));
72+
73+
return Luhn::generateLuhnNumber($partialValue);
74+
}
75+
76+
/**
77+
* example 010101
78+
*/
79+
public static function companyTradeRegisterNumber()
80+
{
81+
$partialValue = static::numerify(str_repeat('#', 6));
82+
83+
return Luhn::generateLuhnNumber($partialValue);
84+
}
85+
}

0 commit comments

Comments
 (0)