diff --git a/README.md b/README.md
index 7f5d0807..00c42744 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@ on top of [busboy](https://github.com/mscdex/busboy) for maximum efficiency.
This README is also available in other languages:
+- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (Arabic)
- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (Spanish)
- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (Chinese)
- [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (Korean)
diff --git a/doc/README-ar.md b/doc/README-ar.md
new file mode 100644
index 00000000..5497865f
--- /dev/null
+++ b/doc/README-ar.md
@@ -0,0 +1,311 @@
+# Multer [](https://travis-ci.org/expressjs/multer) [](https://badge.fury.io/js/multer) [](https://github.com/feross/standard)
+
+
+
+تعتبر Multer وسيط node.js لمعالجة `multipart/form-data`, والتي تُستخدم أساسًا لتحميل الملفات. تم بناء هذا الوسيط بالإعتماد على [busboy](https://github.com/mscdex/busboy) لأجل الحصول على أقصى قدر من الكفاءة.
+
+**ملاحظة**: لن يقوم Multer بمعالجة أي شكل غير متعدد الأجزاء (`multipart/form-data`).
+
+
+## الترجمات
+
+هذا الملف متاح أيضًا بلغات أخرى:
+
+- [English](https://github.com/expressjs/multer/blob/master/README.md) (الإنجليزية)
+- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (الإسبانية)
+- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (الصينية)
+- [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (الكورية)
+- [Русский язык](https://github.com/expressjs/multer/blob/master/doc/README-ru.md) (الروسية)
+- [Việt Nam](https://github.com/expressjs/multer/blob/master/doc/README-vi.md) (الفتنامية)
+- [Português](https://github.com/expressjs/multer/blob/master/doc/README-pt-br.md) (البرتغالية)
+
+
+## التنصيب
+
+
+
+```sh
+$ npm install --save multer
+```
+
+
+
+## الاستعمال
+
+يضيف Multer كائن `body` وكائن `file` أو `files` إلى كائن `request`. يحتوي الكائن `body` على قيم مدخلات النص في الإستمارة ، بينما يحتوي الكائن `file` أو `files` على الملفات التي تم تحميلها عبر الإستمارة.
+
+مثال على الاستخدام الأساسي:
+
+لا تنسَ
`enctype="multipart/form-data"` في الإستمارة الخاص بك.
+
+
+
+```html
+
+```
+
+```javascript
+var express = require('express')
+var multer = require('multer')
+var upload = multer({ dest: 'uploads/' })
+
+var app = express()
+
+app.post('/profile', upload.single('avatar'), function (req, res, next) {
+ // req.file is the `avatar` file
+ // req.body will hold the text fields, if there were any
+})
+
+app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
+ // req.files is array of `photos` files
+ // req.body will contain the text fields, if there were any
+})
+
+var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
+app.post('/cool-profile', cpUpload, function (req, res, next) {
+ // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files
+ //
+ // e.g.
+ // req.files['avatar'][0] -> File
+ // req.files['gallery'] -> Array
+ //
+ // req.body will contain the text fields, if there were any
+})
+```
+
+
+
+إذا احتجت لمعالجة إستمارة متعددة الأجزاء للنص فقط ، فيجب عليك استخدام الدالة `.none ()`:
+
+
+
+```javascript
+var express = require('express')
+var app = express()
+var multer = require('multer')
+var upload = multer()
+
+app.post('/profile', upload.none(), function (req, res, next) {
+ // req.body contains the text fields
+})
+```
+
+
+## واجهة برمجة التطبيقات (API)
+
+### معلومات الملف
+
+كل ملف يحتوي على المعلومات التالية:
+
+مفتاح | وصف | ملاحظة
+--- | --- | ---
+`fieldname` | اسم المُدخَل المحدد في الإستمارة |
+`originalname` | اسم الملف على كمبيوتر المستخدم |
+`encoding` | نوع تشفير الملف |
+`mimetype` | نوع ملف ملحقات بريد إنترنت متعددة الأغراض ( MIME ) |
+`size` | حجم الملف بالبايت |
+`destination` | المجلد الذي تم حفظ الملف إليه | `تخزين على الاسطوانة` (`DiskStorage`)
+`filename` | اسم الملف داخل "الوجهة" ( `destination` ) | `تخزين على الاسطوانة` (`DiskStorage`)
+`path` | المسار الكامل للملف الذي تم تحميله | `تخزين على الاسطوانة` (`DiskStorage`)
+`buffer` | "ذاكرة" (`Buffer`) للملف بأكمله | `تخزين على الذاكرة ` (`MemoryStorage`)
+
+
+### `multer(opts)`
+
+يقبل Multer كائن الخيارات ، وأهمها خاصية `dest`، والتي تحدد مكان تحميل الملفات. في حال حذفت كائن الخيارات ، سيتم الاحتفاظ بالملفات في الذاكرة ولن تتم كتابتها مطلقًا على القرص.
+
+بشكل افتراضي ، سيقوم Multer بإعادة تسمية الملفات لتجنب تعارض الأسماء. يمكن تخصيص وظيفة إعادة التسمية وفقا لاحتياجاتك.
+
+فيما يلي الخيارات التي يمكن تمريرها إلى Multer:
+
+مفتاح | وصف
+--- | ---
+`dest` أو `storage` | مكان لتخزين الملفات
+`fileFilter` | دالة للسيطرة على الملفات التي يتم قبولها
+`limits` | حدود البيانات التي تم تحميلها
+`preservePath` | الاحتفظ بالمسار الكامل للملفات بدلاً من الاسم الأساسي
+
+في تطبيق ويب متوسط ، قد تكون هناك حاجة فقط إلى `dest`، وتكوينها كما هو موضح في
+المثال التالي :
+
+
+
+```javascript
+var upload = multer({ dest: 'uploads/' })
+```
+
+
+
+إذا كنت تريد مزيدًا من التحكم في عمليات التحميل ، فستحتاج إلى استخدام خيار `storage` بدلاً من `dest`. يأتي Multer مع محركات التخزين `DiskStorage` و` MemoryStorage` ؛ كما تتوفر المزيد من المحركات من أطراف ثالثة.
+
+#### `.single(fieldname)`
+
+قبول ملف واحد باسم `اسم-المُدخَل`. سيتم تخزين الملف في `req.file`.
+
+#### `.array(fieldname[, maxCount])`
+
+قبول مصفوفة من الملفات ، وكلها تحمل اسم `اسم-المُدخَل`. يظهر خطأ اختياريً إذا تم تحميل ملفات أكثر من `maxCount`. سيتم تخزين مصفوفة الملفات في `req.files`.
+
+#### `.fields(fields)`
+
+قبول مزيج من الملفات ، المحدد بواسطة `المدخلات`. سيتم تخزين كائن مع مصفوفات من الملفات في `req.files`.
+
+يجب أن تكون `المدخلات` عبارة عن مصفوفة من الكائنات التي توفر بشكل اساسي `name` واختيارياً `maxCount`.
+مثال:
+
+
+
+```javascript
+[
+ { name: 'avatar', maxCount: 1 },
+ { name: 'gallery', maxCount: 8 }
+]
+```
+
+
+
+#### `.none()`
+
+قبول المدخلات النصية فقط. في حالة رفع أي ملف ، سيتم إصدار خطأ بشيفرة "LIMIT \_UNEXPECTED \_FILE".
+
+#### `.any()`
+
+قبول جميع الملفات التي تأتي عبر السلك. سيتم تخزين مصفوفة من الملفات في `req.files`.
+
+**تحذير:** تأكد من أنك تعالج دائمًا الملفات التي يقوم المستخدم بتحميلها. لا تقم أبداً بإضافة multer باعتبارها أداة وسيطة عامة ، حيث يمكن للمستخدم الضار تحميل الملفات إلى مسار غير متتوقع. استخدم هذه الدالة فقط على المسارات التي تتعامل فيها مع الملفات التي تم تحميلها.
+
+### `storage`
+
+#### `DiskStorage`
+
+يمنحك محرك تخزين القرص التحكم الكامل في تخزين الملفات على القرص.
+
+
+
+```javascript
+var storage = multer.diskStorage({
+ destination: function (req, file, cb) {
+ cb(null, '/tmp/my-uploads')
+ },
+ filename: function (req, file, cb) {
+ cb(null, file.fieldname + '-' + Date.now())
+ }
+})
+
+var upload = multer({ storage: storage })
+```
+
+
+
+هناك خياران متاحان ، `destination` و `filename`. كلاهما يعملان على تحديد مكان تخزين الملف.
+
+يتم استخدام `destination` لتحديد أي مجلد يجب تخزين الملفات المحملة. يمكن أيضًا إعطاء هذا كـ`سلسلة` (مثل `'/tmp/uploads'`). إذا لم يتم إعطاء `destination` ، فسيتم استخدام الدليل الافتراضي لنظام التشغيل للملفات المؤقتة.
+
+**ملاحظة:** أنت مسؤول عن إنشاء الدليل عند توفر `destination` كدالة. عند المرور بسلسلة ، سوف يتأكد multer من إنشاء الدليل من أجلك.
+
+يتم استخدام `اسم الملف` لتحديد ما يجب تسمية الملف داخل المجلد. إذا لم يتم تقديم `اسم الملف`، فسيتم إعطاء كل ملف اسمًا عشوائيًا لا يتضمن أي امتداد للملف.
+
+**ملاحظة:** لن يقوم multer بإلحاق اي ملحق ملف لك، الدالة الخاص بك يجب أن تقوم بإرجاع اسم ملف كامل بملحق الملف.
+
+يتم تمرير كل دالة من خلال الطلب (req`) وبعض المعلومات حول الملف (`file`) للمساعدة في اتخاذ القرار.
+
+لاحظ أن `req.body` ربما لم يتم ملؤها بالكامل بعد. يعتمد ذلك على الترتيب الذي يقوم به العميل من خلال نقل المدخلات والملفات إلى الخادم.
+
+#### `MemoryStorage`
+
+يخزن محرك تخزين الذاكرة الملفات الموجودة في الذاكرة ككائنات `ذاكرة` (`Buffer`). ليس لديها أي خيارات.
+
+
+
+```javascript
+var storage = multer.memoryStorage()
+var upload = multer({ storage: storage })
+```
+
+
+
+عند استخدام ذاكرة التخزين ، ستحتوي معلومات الملف على مُدخَل يسمى `buffer` الذي يحتوي على الملف بأكمله.
+
+**تحذير**: يمكن أن يؤدي تحميل ملفات كبيرة جدًا أو ملفات صغيرة نسبيًا بأعداد كبيرة و بسرعة كبيرة إلى نفاد ذاكرة التطبيق عند استخدام ذاكرة التخزين.
+
+### `limits`
+
+كائن يحدد حدود حجم الخصائص الاختيارية التالية. يقوم Multer بتمرير هذا الكائن إلى busboy مباشرة ، ويمكن العثور على تفاصيل الخصائص من خلال [صفحة busboy's](https://github.com/mscdex/busboy#busboy-methods).
+
+تتوفر القيم الصحيحة التالية:
+
+مفتاح | وصف | افتراضي
+--- | --- | ---
+`fieldNameSize` | الحد الأقصى لحجم اسم المُدخَل | 100 بايت
+`fieldSize` | الحد الأقصى لحجم قيمة المُدخَل (بالبايت) | 1 ميغابايت
+`fields` | الحد الأقصى لعدد المدخلات التى لا تعتبر من الملفات | ما لا نهاية
+`fileSize` | حجم الملف الأقصى بالنسبة لإستمارة متعددة الأجزاء (بالبايت) | ما لا نهاية
+`files` | الحد الأقصى لعدد المدخلات من نوع الملفات بالنسبة لإستمارة متعددة الأجزاء | ما لا نهاية
+`parts` | الحد الأقصى لعدد الأجزاء (مدخلات + ملفات) بالنسبة لإستمارة متعددة الأجزاء | ما لا نهاية
+`headerPairs` | الحد الأقصى لعدد أزواج الرأس (المفتاح => القيمة) المطلوب تحليلها بالنسبة لإستمارة متعددة الأجزاء | 2000
+
+يمكن أن يساعد تحديد الحدود في حماية موقعك من هجمات حجب الخدمة (DoS).
+
+### `fileFilter`
+
+اضبط هذا على دالة للتحكم في الملفات التي ينبغي تحميلها وأي الملفات يجب تخطيها. يجب أن تبدو دالة كما يلي:
+
+
+
+```javascript
+function fileFilter (req, file, cb) {
+
+ // The function should call `cb` with a boolean
+ // to indicate if the file should be accepted
+
+ // To reject this file pass `false`, like so:
+ cb(null, false)
+
+ // To accept the file pass `true`, like so:
+ cb(null, true)
+
+ // You can always pass an error if something goes wrong:
+ cb(new Error('I don\'t have a clue!'))
+
+}
+```
+
+
+
+## معالجة الأخطاء
+
+عند مواجهة خطأ ، سيقوم Multer بتفويض الخطأ إلى Express. يمكنك
+عرض صفحة خطأ لطيفة باستخدام [طريقة Express القياسية](http://expressjs.com/guide/error-handling.html).
+
+إذا كنت تريد إنتقاء الأخطاء والحصول على [أخطاء Multer فقط](https://github.com/expressjs/multer/blob/master/lib/multer-error.js)، فيمكنك نداء بدالة الوسيطة من قبل نفسك. أيضًا ، إذا كنت تريد التقاط أخطاء Multer فقط ، فيمكنك استخدام صنف `MulterError` المتصل بالكائن` multer` نفسه (على سبيل المثال `err instanceof multer.MulterError`).
+
+
+
+```javascript
+var multer = require('multer')
+var upload = multer().single('avatar')
+
+app.post('/profile', function (req, res) {
+ upload(req, res, function (err) {
+ if (err instanceof multer.MulterError) {
+ // A Multer error occurred when uploading.
+ } else if (err) {
+ // An unknown error occurred when uploading.
+ }
+
+ // Everything went fine.
+ })
+})
+```
+
+
+
+## محرك التخزين الخاص بك
+
+للحصول على معلومات حول كيفية إنشاء محرك التخزين الخاص بك ، راجع [محرك تخزين Multer](https://github.com/expressjs/multer/blob/master/StorageEngine.md).
+
+## الترخيص
+
+[MIT](LICENSE)
diff --git a/doc/README-ko.md b/doc/README-ko.md
index a58897fa..897ba529 100644
--- a/doc/README-ko.md
+++ b/doc/README-ko.md
@@ -7,6 +7,9 @@ Multer는 파일 업로드를 위해 사용되는 `multipart/form-data` 를 다
## 번역
이 문서는 아래의 언어로도 제공됩니다:
+
+- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (아라비아 말)
+- [English](https://github.com/expressjs/multer/blob/master/README.md)
- [English](https://github.com/expressjs/multer/blob/master/README.md) (영어)
- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (스페인어)
- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (중국어)
diff --git a/doc/README-ru.md b/doc/README-ru.md
index 5c87faba..23615c27 100644
--- a/doc/README-ru.md
+++ b/doc/README-ru.md
@@ -8,6 +8,7 @@ Multer — это middleware для фреймворка express для обра
Это README также доступно на других языках:
+- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (арабский)
- [English](https://github.com/expressjs/multer/blob/master/README.md) (Английский)
- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (Испанский)
- [简体中文](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md) (Китайский)
diff --git a/doc/README-zh-cn.md b/doc/README-zh-cn.md
index 74bd12d1..3db8c099 100644
--- a/doc/README-zh-cn.md
+++ b/doc/README-zh-cn.md
@@ -10,6 +10,7 @@ Multer 是一个 node.js 中间件,用于处理 `multipart/form-data` 类型
## 其它语言
+- [العربية](https://github.com/expressjs/multer/blob/master/doc/README-ar.md) (阿拉伯语)
- [English](https://github.com/expressjs/multer/blob/master/README.md) (英语)
- [Español](https://github.com/expressjs/multer/blob/master/doc/README-es.md) (西班牙文)
- [한국어](https://github.com/expressjs/multer/blob/master/doc/README-ko.md) (朝鲜语)