From 06c62abfbd9c400b94f87f9d0286ebca7e0aba3f Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 Jan 2023 11:27:49 -0800 Subject: [PATCH 01/16] Fix arabic translation file --- src-ui/src/locale/messages.ar_AR.xlf | 2010 ++++++---- src-ui/src/locale/messages.ar_SA.xlf | 5047 -------------------------- 2 files changed, 1353 insertions(+), 5704 deletions(-) delete mode 100644 src-ui/src/locale/messages.ar_SA.xlf diff --git a/src-ui/src/locale/messages.ar_AR.xlf b/src-ui/src/locale/messages.ar_AR.xlf index 251aa265f..d51e2338d 100644 --- a/src-ui/src/locale/messages.ar_AR.xlf +++ b/src-ui/src/locale/messages.ar_AR.xlf @@ -1,29 +1,29 @@ - + Close node_modules/src/alert/alert.ts - 42,44 + 47,48 إغلاق - Slide of + Slide of node_modules/src/carousel/carousel.ts - 157,166 + 178,186 Currently selected slide number read by screen reader - Slide of + الشريحة من Previous node_modules/src/carousel/carousel.ts - 188,191 + 213,215 السابق @@ -31,7 +31,7 @@ Next node_modules/src/carousel/carousel.ts - 209,211 + 236 التالي @@ -39,11 +39,11 @@ Select month node_modules/src/datepicker/datepicker-navigation-select.ts - 41,42 + 50,51 node_modules/src/datepicker/datepicker-navigation-select.ts - 41,42 + 50,51 اختر الشهر @@ -51,11 +51,11 @@ Select year node_modules/src/datepicker/datepicker-navigation-select.ts - 41,42 + 50,51 node_modules/src/datepicker/datepicker-navigation-select.ts - 41,42 + 50,51 اختر السنة @@ -63,11 +63,11 @@ Previous month node_modules/src/datepicker/datepicker-navigation.ts - 43,46 + 60,63 node_modules/src/datepicker/datepicker-navigation.ts - 43,46 + 60,63 الشهر السابق @@ -75,11 +75,11 @@ Next month node_modules/src/datepicker/datepicker-navigation.ts - 43,46 + 60,63 node_modules/src/datepicker/datepicker-navigation.ts - 43,46 + 60,63 الشهر التالي @@ -87,7 +87,7 @@ «« node_modules/src/pagination/pagination.ts - 224,225 + 269,270 «« @@ -95,7 +95,7 @@ « node_modules/src/pagination/pagination.ts - 224,225 + 269,270 « @@ -103,7 +103,7 @@ » node_modules/src/pagination/pagination.ts - 224,225 + 269,270 » @@ -111,7 +111,7 @@ »» node_modules/src/pagination/pagination.ts - 224,225 + 269,270 »» @@ -119,7 +119,7 @@ First node_modules/src/pagination/pagination.ts - 224,226 + 269,271 الأول @@ -127,7 +127,7 @@ Previous node_modules/src/pagination/pagination.ts - 224,226 + 269,271 السابق @@ -135,7 +135,7 @@ Next node_modules/src/pagination/pagination.ts - 224,225 + 269,271 التالي @@ -143,33 +143,33 @@ Last node_modules/src/pagination/pagination.ts - 224,225 + 269,271 الأخير - + node_modules/src/progressbar/progressbar.ts - 23,26 + 30,33 - + HH node_modules/src/timepicker/timepicker.ts - 138,141 + 230,231 - HH + HH Hours node_modules/src/timepicker/timepicker.ts - 161 + 255,258 ساعات @@ -177,15 +177,15 @@ MM node_modules/src/timepicker/timepicker.ts - 182 + 280,282 - MM + MM Minutes node_modules/src/timepicker/timepicker.ts - 199 + 298,299 دقائق @@ -193,47 +193,47 @@ Increment hours node_modules/src/timepicker/timepicker.ts - 218,219 + 328,329 - Increment hours + زيادة الساعات Decrement hours node_modules/src/timepicker/timepicker.ts - 239,240 + 350,356 - Decrement hours + إنقاص الساعات Increment minutes node_modules/src/timepicker/timepicker.ts - 264,268 + 383,384 - Increment minutes + زيادة الدقائق Decrement minutes node_modules/src/timepicker/timepicker.ts - 287,289 + 412,416 - Decrement minutes + إنقاص الدقائق SS node_modules/src/timepicker/timepicker.ts - 295 + 429 - SS + SS Seconds node_modules/src/timepicker/timepicker.ts - 295 + 429 ثوانٍ @@ -241,17 +241,17 @@ Increment seconds node_modules/src/timepicker/timepicker.ts - 295 + 429 - Increment seconds + زيادة الثواني Decrement seconds node_modules/src/timepicker/timepicker.ts - 295 + 429 - Decrement seconds + إنقاص الثواني @@ -259,7 +259,7 @@ node_modules/src/timepicker/timepicker.ts - 295 + 429 @@ -268,14 +268,14 @@ node_modules/src/timepicker/timepicker.ts - 295 + 429 Close node_modules/src/toast/toast.ts - 70,71 + 74,75 إغلاق @@ -337,85 +337,105 @@ src/app/app.component.ts 114 - Document is being processed by paperless. + المستند يتم معالجته من paperless. + + + Prev + + src/app/app.component.ts + 119 + + السابق + + + Next + + src/app/app.component.ts + 120 + + + src/app/components/document-detail/document-detail.component.html + 55 + + التالي + + + End + + src/app/app.component.ts + 121 + + النهاية The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. src/app/app.component.ts - 122 + 126 - The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. + يمكن استخدام لوحة التحكم لعرض العروض المحفوظة، مثل 'علبة الوارد'. بواسطة الإعدادات يمكنك تفعيلها > المشاهدات المحفوظة بمجرد إنشاء بعضها. Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. src/app/app.component.ts - 129 + 136 - Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. + سحب وإسقاط المستندات هنا للبدء في تحميلها أو وضعها في المجلد المستهلك. يمكنك أيضًا سحب وإسقاط المستندات في أي مكان على جميع الصفحات الأخرى من تطبيق الويب. بمجرد ذلك، سيبدأ Paperless-ngx في تدريب خوارزميات تعلم الآلات. The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar. src/app/app.component.ts - 135 + 145 - The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar. + تظهر قائمة المستندات جميع مستنداتك وتسمح بالتصفية والتحرير بالجملة. وهناك ثلاث أنماط مختلفة للعرض: القائمة والبطاقات الصغيرة والبطاقات الكبيرة، وفي الشريط الجانبي قائمة بالمستندات المفتوحة حاليا للتحرير. The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. src/app/app.component.ts - 144 + 157 - The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. + أدوات التصفية تسمح لك بالعثور بسرعة على المستندات باستخدام مختلف عمليات البحث والتواريخ والعلامات وما إلى ذلك. Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. src/app/app.component.ts - 151 + 167 - Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. + يمكن حفظ أي مزيج من التصفيات مثل "عرض" يمكنك عرضه بعد ذلك على لوحة التحكم / أو الشريط الجانبي. Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. src/app/app.component.ts - 157 + 176 - Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. + يمكن إدارة جميع العلامات والمراسلين وأنواع الوثائق ومسارات التخزين باستخدام هذه الصفحات. ويمكن أيضا إنشاؤها من تعديل عرض المستند. File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. src/app/app.component.ts - 163 + 185 - File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. + ملف المهام يظهر لك المستندات المستهلكة، أو تنتظر أن تكون، أو يكون أخفق في أثناء العملية. - - Check out the settings for various tweaks to the web app or to toggle settings for saved views. + + Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts - 169 + 194 - Check out the settings for various tweaks to the web app or to toggle settings for saved views. - - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. - - src/app/app.component.ts - 175 - - The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching. + تحقق من إعدادات التعديلات المختلفة على تطبيق الويب، أو تبديل إعدادات العروض المحفوظة أو إعداد التحقق من البريد الإلكتروني. Thank you! 🙏 src/app/app.component.ts - 180 + 203 شكراً لك! 🙏 @@ -423,23 +443,23 @@ There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. src/app/app.component.ts - 182 + 205 - There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. + هناك <em>أطنان</em> المزيد من الميزات والمعلومات التي لم نغطيها هنا، ولكن يجب يكون هذا كافيا لك للبداية. تحقق من المستندات أو زيارة المشروع على GitHub لمعرفة المزيد أو للإبلاغ عن المشكلات. Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 184 + 207 - Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! + أخيرا، بالنيابة عن كل مساهم في هذا المشروع المدعوم من المجتمع، شكرا لك على استخدام Paperless-ngx! Initiating upload... src/app/app.component.ts - 230 + 256 بدء التحميل... @@ -464,23 +484,23 @@ Logged in as src/app/components/app-frame/app-frame.component.html - 34 + 39 - Logged in as + تسجيل الدخول باسم Settings src/app/components/app-frame/app-frame.component.html - 40 + 45 src/app/components/app-frame/app-frame.component.html - 166 + 171 src/app/components/app-frame/app-frame.component.html - 169 + 174 src/app/components/manage/settings/settings.component.html @@ -492,7 +512,7 @@ Logout src/app/components/app-frame/app-frame.component.html - 45 + 50 خروج @@ -500,11 +520,11 @@ Dashboard src/app/components/app-frame/app-frame.component.html - 64 + 69 src/app/components/app-frame/app-frame.component.html - 67 + 72 src/app/components/dashboard/dashboard.component.html @@ -516,11 +536,11 @@ Documents src/app/components/app-frame/app-frame.component.html - 71 + 76 src/app/components/app-frame/app-frame.component.html - 74 + 79 src/app/components/document-list/document-list.component.ts @@ -548,11 +568,11 @@ Saved views src/app/components/app-frame/app-frame.component.html - 80 + 85 src/app/components/manage/settings/settings.component.html - 184 + 189 طرق العرض المحفوظة @@ -560,19 +580,19 @@ Open documents src/app/components/app-frame/app-frame.component.html - 94 + 99 - فتح مستندات + فتح المستندات Close all src/app/components/app-frame/app-frame.component.html - 110 + 115 src/app/components/app-frame/app-frame.component.html - 113 + 118 إغلاق الكل @@ -580,7 +600,7 @@ Manage src/app/components/app-frame/app-frame.component.html - 119 + 124 إدارة @@ -588,23 +608,23 @@ Correspondents src/app/components/app-frame/app-frame.component.html - 123 + 128 src/app/components/app-frame/app-frame.component.html - 126 + 131 - Correspondents + مراسلون Tags src/app/components/app-frame/app-frame.component.html - 130 + 135 src/app/components/app-frame/app-frame.component.html - 133 + 138 src/app/components/common/input/tags/tags.component.html @@ -616,7 +636,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 22 + 27 علامات @@ -624,11 +644,11 @@ Document types src/app/components/app-frame/app-frame.component.html - 137 + 142 src/app/components/app-frame/app-frame.component.html - 140 + 145 أنواع المستندات @@ -636,43 +656,43 @@ Storage paths src/app/components/app-frame/app-frame.component.html - 144 + 149 src/app/components/app-frame/app-frame.component.html - 147 + 152 - Storage paths + مسارات التخزين File Tasks src/app/components/app-frame/app-frame.component.html - 151 + 156 src/app/components/manage/tasks/tasks.component.html 1 - File Tasks + ملف المهام File Tasks src/app/components/app-frame/app-frame.component.html - 155 + 160 - File Tasks + ملف المهام Logs src/app/components/app-frame/app-frame.component.html - 159 + 164 src/app/components/app-frame/app-frame.component.html - 162 + 167 src/app/components/manage/logs/logs.component.html @@ -680,23 +700,11 @@ السجلات - - Admin - - src/app/components/app-frame/app-frame.component.html - 173 - - - src/app/components/app-frame/app-frame.component.html - 176 - - المسئول - Info src/app/components/app-frame/app-frame.component.html - 182 + 180 src/app/components/manage/tasks/tasks.component.html @@ -708,11 +716,11 @@ Documentation src/app/components/app-frame/app-frame.component.html - 186 + 184 src/app/components/app-frame/app-frame.component.html - 189 + 187 الوثائق @@ -720,23 +728,23 @@ GitHub src/app/components/app-frame/app-frame.component.html - 194 + 192 src/app/components/app-frame/app-frame.component.html - 197 + 195 - GitHub + Github Suggest an idea src/app/components/app-frame/app-frame.component.html - 199 + 197 src/app/components/app-frame/app-frame.component.html - 203 + 201 اقترح فكرة @@ -744,41 +752,41 @@ is available. src/app/components/app-frame/app-frame.component.html - 212 + 210 - is available. + متوفر. Click to view. src/app/components/app-frame/app-frame.component.html - 212 + 210 - Click to view. + انقر للعرض. Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 216 + 214 - Paperless-ngx can automatically check for updates + Paperless-ngx يتحقق تلقائياً من وجود تحديثات How does this work? src/app/components/app-frame/app-frame.component.html - 223,225 + 221,223 - How does this work? + كيف يعمل هذا؟ Update available src/app/components/app-frame/app-frame.component.html - 234 + 232 - Update available + يتوفر تحديث An error occurred while saving settings. @@ -788,17 +796,33 @@ src/app/components/manage/settings/settings.component.ts - 326 + 492 - An error occurred while saving settings. + حدث خطأ في أثناء حفظ الإعدادات. An error occurred while saving update checking settings. src/app/components/app-frame/app-frame.component.ts - 202 + 216 - An error occurred while saving update checking settings. + حدث خطأ في أثناء حفظ إعدادات التحقق من التحديث. + + + Clear + + src/app/components/common/clearable-badge/clearable-badge.component.html + 1 + + + src/app/components/common/date-dropdown/date-dropdown.component.html + 24 + + + src/app/components/common/date-dropdown/date-dropdown.component.html + 47 + + تنظيف Cancel @@ -806,7 +830,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.html 12 - Cancel + إلغاء Confirmation @@ -814,7 +838,7 @@ src/app/components/common/confirm-dialog/confirm-dialog.component.ts 20 - Confirmation + تأكيد Confirm @@ -824,49 +848,37 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 234 + 279 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 272 + 319 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 308 + 357 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 344 + 395 - Confirm + أكّد After src/app/components/common/date-dropdown/date-dropdown.component.html - 21 + 19 - After - - - Clear - - src/app/components/common/date-dropdown/date-dropdown.component.html - 26 - - - src/app/components/common/date-dropdown/date-dropdown.component.html - 49 - - Clear + بعد Before src/app/components/common/date-dropdown/date-dropdown.component.html - 44 + 42 - Before + قبل Last 7 days @@ -874,7 +886,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 43 - Last 7 days + آخر ٧ أيام Last month @@ -882,7 +894,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 47 - Last month + آخر شهر Last 3 months @@ -890,7 +902,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 51 - Last 3 months + آخر ٣ أشهر Last year @@ -898,7 +910,7 @@ src/app/components/common/date-dropdown/date-dropdown.component.ts 55 - Last year + العام الماضي Name @@ -910,6 +922,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 10 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 10 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 13 @@ -956,7 +976,15 @@ src/app/components/manage/settings/settings.component.html - 191 + 196 + + + src/app/components/manage/settings/settings.component.html + 248 + + + src/app/components/manage/settings/settings.component.html + 283 src/app/components/manage/tasks/tasks.component.html @@ -982,7 +1010,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 13 - Matching algorithm + مطابقة الخوارزمية Matching pattern @@ -1002,7 +1030,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 14 - Matching pattern + مطابقة النمط Case insensitive @@ -1022,7 +1050,7 @@ src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 15 - Case insensitive + حالة غير حساسة Cancel @@ -1034,6 +1062,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 23 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 37 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 21 @@ -1054,7 +1090,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 18 - Cancel + إلغاء Save @@ -1066,6 +1102,14 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 24 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 38 + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 22 @@ -1084,7 +1128,7 @@ src/app/components/manage/settings/settings.component.html - 223 + 317 حفظ @@ -1092,23 +1136,23 @@ Create new correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 25 + 20 - Create new correspondent + إنشاء مراسل جديد Edit correspondent src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 29 + 24 - Edit correspondent + تعديل المراسل Create new document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 25 + 20 إنشاء نوع مستند جديد @@ -1116,7 +1160,7 @@ Edit document type src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 29 + 24 تحرير نوع المستند @@ -1124,7 +1168,7 @@ Create new item src/app/components/common/edit-dialog/edit-dialog.component.ts - 52 + 49 إنشاء عنصر جديد @@ -1132,7 +1176,7 @@ Edit item src/app/components/common/edit-dialog/edit-dialog.component.ts - 56 + 53 تعديل عنصر @@ -1140,17 +1184,477 @@ Could not save element: src/app/components/common/edit-dialog/edit-dialog.component.ts - 60 + 57 - Could not save element: + تعذر حفظ العنصر: + + + IMAP Server + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 11 + + خادم IMAP + + + IMAP Port + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 12 + + منفذ IMAP + + + IMAP Security + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 13 + + أمان IMAP + + + Username + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 16 + + اسم المستخدم + + + Password + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 17 + + كلمة المرور + + + Character Set + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html + 18 + + نوع ترميز المحارف + + + No encryption + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 12 + + دون تشفير + + + SSL + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 13 + + SSL + + + STARTTLS + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 14 + + STARTTLS + + + Create new mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 28 + + إنشاء حساب بريد جديد + + + Edit mail account + + src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts + 32 + + تعديل حساب البريد + + + Account + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 11 + + + src/app/components/manage/settings/settings.component.html + 284 + + الحساب + + + Folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + مجلد + + + Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 12 + + يجب فصل المجلدات الفرعية باستخدام محدد، غالبا نقطة ('.') أو خط مائل ('/')، لكنها تختلف حسب خادم البريد. + + + Maximum age (days) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 13 + + العمر الأقصى (الأيام) + + + Attachment type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 14 + + نوع المرفق + + + Consumption scope + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 15 + + Consumption scope + + + See docs for .eml processing requirements + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 15 + + See docs for .eml processing requirements + + + Paperless will only process mails that match all of the filters specified below. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 18 + + Paperless سيعالج فقط الرسائل التي تطابق جميع التصفيات المحددة أدناه. + + + Filter from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 19 + + تصفية من + + + Filter subject + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 20 + + تصفية الموضوع + + + Filter body + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 21 + + تصفية الجسم + + + Filter attachment filename + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 22 + + تصفية اسم الملف المرفق + + + Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 22 + + فقط المستندات التي تتطابق تماما مع اسم هذا الملف إذا تم تحديدها. المحارف البديلة مثل *.pdf أو *الفواتير* مسموح بها. لأنها غير حساسة. + + + Action + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + إجراء + + + Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + الإجراء المطبق على البريد. ينفذ هذا الإجراء فقط عندما تستهلك المستندات من البريد. ستبقى البُرٌد التي لا تحتوي على مرفقات ستبقى كما هي. + + + Action parameter + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 26 + + إجراء المعامل + + + Assign title from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 27 + + تعيين العنوان من + + + Assign document type + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 29 + + تعيين نوع المستند + + + Assign correspondent from + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 30 + + تعيين مراسل من + + + Assign correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 31 + + تعيين مراسل + + + Error + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 36 + + + src/app/services/toast.service.ts + 32 + + خطأ + + + Only process attachments + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 25 + + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 36 + + Only process attachments + + + Process all files, including 'inline' attachments + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 29 + + Process all files, including 'inline' attachments + + + Process message as .eml + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 40 + + Process message as .eml + + + Process message as .eml and attachments separately + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 44 + + Process message as .eml and attachments separately + + + Delete + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 51 + + + src/app/components/document-detail/document-detail.component.html + 11 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 126 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.html + 65 + + + src/app/components/manage/management-list/management-list.component.ts + 181 + + + src/app/components/manage/settings/settings.component.html + 214 + + + src/app/components/manage/settings/settings.component.html + 261 + + + src/app/components/manage/settings/settings.component.html + 296 + + حذف + + + Move to specified folder + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 55 + + نقل إلى مجلد محدد + + + Mark as read, don't process read mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 59 + + وضع علامة كمقروءة، لا تعالج الرسائل المقروءة + + + Flag the mail, don't process flagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 63 + + علم الرسالة، لا تعالج الرسائل المعلمة + + + Tag the mail with specified tag, don't process tagged mails + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 67 + + علم الرسالة بعلامة محددة، لا تعالج الرسائل المُعلمة + + + Use subject as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 74 + + استخدم الموضوع كعنوان + + + Use attachment filename as title + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 78 + + استخدم اسم الملف المرفق كعنوان + + + Do not assign a correspondent + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 85 + + لا تعيّن مراسل + + + Use mail address + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 89 + + استخدم عنوان البريد + + + Use name (or mail address if not available) + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 93 + + استخدم الاسم (أو عنوان البريد إذا لم يكن متاحا) + + + Use correspondent selected below + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 97 + + استخدم المراسل المحدد أدناه + + + Create new mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 137 + + إنشاء قاعدة بريد جديدة + + + Edit mail rule + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts + 141 + + تعديل قاعدة البريد - Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html 10 - Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. + لاحظ أن تحرير مسار لا يطبق التغييرات على الملفات المخزنة حتى تقوم بتشغيل أداة 'document_renamer'. انظر إلى المستندات. Path @@ -1162,47 +1666,47 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 35 - Path + مسار e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 26 + 21 - e.g. + مثال. or use slashes to add directories e.g. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 28 + 23 - or use slashes to add directories e.g. + أو استخدم الخطوط المائلة لإضافة مجلدات مثل. - - See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list. + + See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 + 25 - See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list. + راجع المستندات <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"></a> للاطلاع على القائمة الكاملة. Create new storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 35 + 30 - Create new storage path + إنشاء مسار تخزين جديد Edit storage path src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 39 + 34 - Edit storage path + تعديل مسار التخزين Color @@ -1236,53 +1740,53 @@ Create new tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 26 + 21 - Create new tag + إنشاء علامة جديدة Edit tag src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 30 + 25 - Edit tag + تعديل العلامة All src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 21 + 16 src/app/components/document-list/bulk-editor/bulk-editor.component.html 20 - All + الكل Any src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 23 + 18 - Any + أي Apply src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 37 + 32 - Apply + تطبيق Click again to exclude items. src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 43 + 38 - Click again to exclude items. + انقر مرة أخرى لاستبعاد العناصر. Not assigned @@ -1291,7 +1795,7 @@ 261 Filter drop down element to filter for documents with no correspondent/type/tag assigned - Not assigned + غير معين Invalid date. @@ -1315,7 +1819,7 @@ src/app/components/common/input/tags/tags.component.html 42 - Suggestions: + الاقتراحات: Add item @@ -1324,7 +1828,7 @@ 11 Used for both types, correspondents, storage paths - Add item + إضافة عنصر Add tag @@ -1332,7 +1836,7 @@ src/app/components/common/input/tags/tags.component.html 11 - Add tag + إضافة علامة Select @@ -1372,6 +1876,14 @@ src/app/components/document-list/document-list.component.html 93 + + src/app/components/manage/settings/settings.component.html + 222 + + + src/app/components/manage/settings/settings.component.html + 308 + src/app/components/manage/tasks/tasks.component.html 19 @@ -1380,7 +1892,7 @@ src/app/components/manage/tasks/tasks.component.html 27 - Loading... + تحميل... Hello , welcome to Paperless-ngx @@ -1388,7 +1900,7 @@ src/app/components/dashboard/dashboard.component.ts 18 - Hello , welcome to Paperless-ngx + أهلا , مرحبا بك في Paperless-ngx Welcome to Paperless-ngx @@ -1396,7 +1908,7 @@ src/app/components/dashboard/dashboard.component.ts 20 - Welcome to Paperless-ngx + مرحبا بك في Paperless-ngx Show all @@ -1408,7 +1920,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 27 - Show all + عرض الكل Created @@ -1422,7 +1934,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 54 + 59 src/app/components/manage/tasks/tasks.component.html @@ -1464,7 +1976,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 1 - Statistics + الإحصائيات Documents in inbox: @@ -1472,7 +1984,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 3 - Documents in inbox: + المستندات في علبة الواردة: Total documents: @@ -1480,7 +1992,7 @@ src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html 4 - Total documents: + إجمالي المستندات: Upload new documents @@ -1488,7 +2000,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 1 - Upload new documents + تحميل مستندات جديدة Dismiss completed @@ -1497,7 +2009,7 @@ 4 This button dismisses all status messages about processed documents on the dashboard (failed and successful) - Dismiss completed + اكتمل الرفض Drop documents here or @@ -1505,7 +2017,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 13 - Drop documents here or + أسقط المستندات هنا أو Browse files @@ -1513,7 +2025,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 13 - Browse files + تصفح الملفات {VAR_PLURAL, plural, =1 {One more document} other { more documents}} @@ -1522,44 +2034,44 @@ 25 This is shown as a summary line when there are more than 5 document in the processing pipeline. - {VAR_PLURAL, plural, =1 {One more document} other { more documents}} + {VAR_PLURAL, plural, zero {} one { المزيد من المستندات} two { المزيد من المستندات} few { المزيد من المستندات} many { المزيد من المستندات}=1 {مستند واحد آخر} other { المزيد من المستندات}} Processing: src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 37 + 36 - Processing: + المعالجة: Failed: src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 40 + 39 - Failed: + فشل: Added: src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 43 + 42 - Added: + أضيف: , src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 46 + 45 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 179 + 224 this string is used to separate processing, failed and added on the file upload widget - , + , Paperless-ngx is running! @@ -1567,7 +2079,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 3 - Paperless-ngx is running! + يعمل Paperless-ngx! You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below. @@ -1575,15 +2087,15 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 4 - You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below. + أنت على استعداد لبدء تحميل المستندات! استكشف الميزات المختلفة لتطبيق الويب هذا بمفردك، أو بدء جولة سريعة باستخدام الزر أدناه. - More detail on how to use and configure Paperless-ngx is always available in the documentation. + More detail on how to use and configure Paperless-ngx is always available in the documentation. src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 5 - More detail on how to use and configure Paperless-ngx is always available in the documentation. + المزيد من التفاصيل حول كيفية استخدام وتهيئة Paperless-ngx متوفرة دائماً في المستندات. Thanks for being a part of the Paperless-ngx community! @@ -1591,7 +2103,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 8 - Thanks for being a part of the Paperless-ngx community! + شكرًا لك لكونك جزءًا من مجتمع Paperless-ngx! Start the tour @@ -1599,7 +2111,7 @@ src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html 9 - Start the tour + بدء الجولة Searching document with asn @@ -1607,7 +2119,7 @@ src/app/components/document-asn/document-asn.component.html 1 - Searching document with asn + البحث عن المستند باستخدام asn Enter comment @@ -1615,7 +2127,7 @@ src/app/components/document-comments/document-comments.component.html 4 - Enter comment + أدخل تعليق Please enter a comment. @@ -1623,7 +2135,7 @@ src/app/components/document-comments/document-comments.component.html 5,7 - Please enter a comment. + الرجاء إدخال تعليق. Add comment @@ -1631,7 +2143,7 @@ src/app/components/document-comments/document-comments.component.html 11 - Add comment + إضافة تعليق Error saving comment: @@ -1639,7 +2151,7 @@ src/app/components/document-comments/document-comments.component.ts 68 - Error saving comment: + خطأ في حفظ التعليق: Error deleting comment: @@ -1647,7 +2159,7 @@ src/app/components/document-comments/document-comments.component.ts 83 - Error deleting comment: + خطأ في حذف التعليق: Page @@ -1669,64 +2181,16 @@ من - - Delete - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 97 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 157 - - - src/app/components/manage/settings/settings.component.html - 209 - - Delete - Download src/app/components/document-detail/document-detail.component.html 19 + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 90 + src/app/components/document-list/document-card-large/document-card-large.component.html 58 @@ -1753,9 +2217,9 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html - 90 + 77 - Redo OCR + إعادة OCR More like this @@ -1787,15 +2251,7 @@ src/app/components/document-detail/document-detail.component.html 50 - Previous - - - Next - - src/app/components/document-detail/document-detail.component.html - 55 - - Next + السابق Details @@ -1837,13 +2293,13 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 30 + 35 src/app/services/rest/document.service.ts 19 - Correspondent + مراسل Document type @@ -1861,7 +2317,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 37 + 42 src/app/services/rest/document.service.ts @@ -1885,9 +2341,9 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 44 + 49 - Storage path + مسار التخزين Default @@ -1895,7 +2351,7 @@ src/app/components/document-detail/document-detail.component.html 84 - Default + الافتراضي Content @@ -1915,7 +2371,7 @@ src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts 17 - Metadata + البيانات الوصفية Date modified @@ -1947,7 +2403,7 @@ src/app/components/document-detail/document-detail.component.html 118 - Original filename + اسم الملف الأصلي Original MD5 checksum @@ -2015,7 +2471,7 @@ src/app/components/document-detail/document-detail.component.html 203 - Enter Password + أدخل كلمة المرور Comments @@ -2025,9 +2481,9 @@ src/app/components/manage/settings/settings.component.html - 154 + 159 - Comments + التعليقات Discard @@ -2053,7 +2509,7 @@ src/app/components/manage/management-list/management-list.component.ts - 153 + 177 تأكيد الحذف @@ -2097,9 +2553,9 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 387 + 454 - Redo OCR confirm + إعادة تأكيد OCR This operation will permanently redo OCR for this document. @@ -2107,7 +2563,7 @@ src/app/components/document-detail/document-detail.component.ts 483 - This operation will permanently redo OCR for this document. + هذه العملية ستعيد بشكل دائم OCR لهذا المستند. This operation cannot be undone. @@ -2117,13 +2573,21 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 364 + 417 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 389 + 456 - This operation cannot be undone. + + src/app/components/manage/settings/settings.component.ts + 576 + + + src/app/components/manage/settings/settings.component.ts + 635 + + لا يمكن التراجع عن هذه العملية. Proceed @@ -2133,17 +2597,25 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 391 + 458 - Proceed + + src/app/components/manage/settings/settings.component.ts + 578 + + + src/app/components/manage/settings/settings.component.ts + 637 + + متابعة - - Redo OCR operation will begin in the background. + + Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content. src/app/components/document-detail/document-detail.component.ts 494 - Redo OCR operation will begin in the background. + إعادة تشغيل OCR ستبدأ في الخلفية. إغلاق وإعادة فتح أو إعادة تحميل هذا المستند بعد اكتمال العملية لمشاهدة محتوى جديد. Error executing operation: @@ -2151,7 +2623,7 @@ src/app/components/document-detail/document-detail.component.ts 505,507 - Error executing operation: + خطأ في تنفيذ العملية: Select: @@ -2159,7 +2631,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 10 - Select: + تحديد: Edit: @@ -2167,7 +2639,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html 27 - Edit: + تعديل: Filter tags @@ -2177,9 +2649,9 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 23 + 28 - Filter tags + تصفية العلامات Filter correspondents @@ -2189,9 +2661,9 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 31 + 36 - Filter correspondents + تصفية المراسلين Filter document types @@ -2201,9 +2673,9 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 38 + 43 - Filter document types + تصفية نوع الوثائق Filter storage paths @@ -2213,15 +2685,15 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 45 + 50 - Filter storage paths + تصفية مسارات التخزين Actions src/app/components/document-list/bulk-editor/bulk-editor.component.html - 75 + 74 src/app/components/manage/management-list/management-list.component.html @@ -2241,219 +2713,243 @@ src/app/components/manage/settings/settings.component.html - 208 + 213 + + + src/app/components/manage/settings/settings.component.html + 250 + + + src/app/components/manage/settings/settings.component.html + 285 src/app/components/manage/tasks/tasks.component.html 44 - Actions + إجراءات - - Download Preparing download... + + Include: src/app/components/document-list/bulk-editor/bulk-editor.component.html - 78,82 + 96 - Download Preparing download... + يحتوي على: - - Download originals Preparing download... + + Archived files src/app/components/document-list/bulk-editor/bulk-editor.component.html - 84,88 + 100,102 - Download originals Preparing download... + ملفات الأرشيف + + + Original files + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 106,108 + + الملفات الأصلية + + + Use formatted filename + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 113,115 + + استخدام اسم الملف المنسّق Error executing bulk operation: src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 103,105 + 144,146 - Error executing bulk operation: + خطأ في تنفيذ العملية الشاملة: "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 171 + 216 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 177 + 222 - "" + "" "" and "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 173 + 218 This is for messages like 'modify "tag1" and "tag2"' - "" and "" + "" و "" and "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 181,183 + 226,228 this is for messages like 'modify "tag1", "tag2" and "tag3"' - and "" + و"" Confirm tags assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 198 + 243 - Confirm tags assignment + تأكيد تعيين العلامات This operation will add the tag "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 204 + 249 - This operation will add the tag "" to selected document(s). + هذه العملية ستضيف العلامة "" إلى مستند (مستندات) مختارة. This operation will add the tags to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 209,211 + 254,256 - This operation will add the tags to selected document(s). + هذه العملية ستضيف العلامات إلى مستند (مستندات) مختارة. This operation will remove the tag "" from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 217 + 262 - This operation will remove the tag "" from selected document(s). + هذه العملية ستزيل العلامة"" من المستند (المستندات) المختارة. This operation will remove the tags from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 222,224 + 267,269 - This operation will remove the tags from selected document(s). + هذه العملية ستزيل العلامات من المستند (المستندات) المختارة. This operation will add the tags and remove the tags on selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 226,230 + 271,275 - This operation will add the tags and remove the tags on selected document(s). + هذه العملية سوف تضيف العلامات وتزيل العلامات في مستند(مستندات) مختارة. Confirm correspondent assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 265 + 312 - Confirm correspondent assignment + تأكيد تعيين المراسل This operation will assign the correspondent "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 267 + 314 - This operation will assign the correspondent "" to selected document(s). + هذه العملية ستعين المراسل"" إلى مستند (مستندات) مختارة. This operation will remove the correspondent from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 269 + 316 - This operation will remove the correspondent from selected document(s). + هذه العملية ستزيل المراسل من مستند (مستندات) مختارة. Confirm document type assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 301 + 350 - Confirm document type assignment + تأكيد تعيين نوع المستند This operation will assign the document type "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 303 + 352 - This operation will assign the document type "" to selected document(s). + العملية ستعين نوع المستند "" إلى مستند (مستندات) مختارة. This operation will remove the document type from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 305 + 354 - This operation will remove the document type from selected document(s). + هذه العملية ستزيل نوع المستند من مستند (المستندات) مختارة. Confirm storage path assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 337 + 388 - Confirm storage path assignment + تأكيد تعيين مسار التخزين This operation will assign the storage path "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 339 + 390 - This operation will assign the storage path "" to selected document(s). + هذه العملية ستعين مسار التخزين "" إلى مستند (مستندات) مختارة. This operation will remove the storage path from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 341 + 392 - This operation will remove the storage path from selected document(s). + هذه العملية ستزيل مسار التخزين من المستند(المستندات) المختارة. Delete confirm src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 362 + 415 - Delete confirm + تأكيد الحذف This operation will permanently delete selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 363 + 416 - This operation will permanently delete selected document(s). + هذه العملية ستحذف بشكل دائم المستند(المستندات) المختارة. Delete document(s) src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 366 + 419 - Delete document(s) + حذف المستند(المستندات) This operation will permanently redo OCR for selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 388 + 455 - This operation will permanently redo OCR for selected document(s). + هذه العملية ستعيد بشكل دائم OCR لي المستند(المستندات) المختارة. Filter by correspondent @@ -2465,7 +2961,7 @@ src/app/components/document-list/document-list.component.html 178 - Filter by correspondent + تصفية حسب المراسل Filter by tag @@ -2477,7 +2973,7 @@ src/app/components/document-list/document-list.component.html 183 - Filter by tag + تصفية حسب العلامة Edit @@ -2521,6 +3017,14 @@ src/app/components/manage/management-list/management-list.component.html 59 + + src/app/components/manage/settings/settings.component.html + 260 + + + src/app/components/manage/settings/settings.component.html + 295 + تحرير @@ -2529,7 +3033,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 50 - View + عرض Filter by document type @@ -2541,7 +3045,7 @@ src/app/components/document-list/document-list.component.html 187 - Filter by document type + تصفية حسب نوع المستند Filter by storage path @@ -2553,7 +3057,7 @@ src/app/components/document-list/document-list.component.html 192 - Filter by storage path + تصفية حسب مسار التخزين Created: @@ -2565,7 +3069,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 48 - Created: + أنشئ: Added: @@ -2577,7 +3081,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 49 - Added: + أضيف: Modified: @@ -2589,7 +3093,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 50 - Modified: + معدل: Score: @@ -2597,7 +3101,7 @@ src/app/components/document-list/document-card-large/document-card-large.component.html 98 - Score: + النقاط: Toggle tag filter @@ -2605,7 +3109,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 14 - Toggle tag filter + تبديل تصفية العلامة Toggle correspondent filter @@ -2613,7 +3117,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 24 - Toggle correspondent filter + تبديل تصفية المراسل Toggle document type filter @@ -2621,7 +3125,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 31 - Toggle document type filter + تبديل تصفية نوع المستند Toggle storage path filter @@ -2629,7 +3133,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html 38 - Toggle storage path filter + تبديل تصفية مسار التخزين Select none @@ -2677,7 +3181,7 @@ src/app/components/document-list/document-list.component.html 75 - Save "" + حفظ "" Save as... @@ -2693,7 +3197,7 @@ src/app/components/document-list/document-list.component.html 95 - {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} + {VAR_PLURAL, plural, zero {} one {تم اختياره من مستندات} two {تم اختياره من مستندات} few {تم اختياره من مستندات} many {تم اختياره من مستندات}=1 {تم اختيار لمستند واحد} other {تم اختياره من مستندات}} {VAR_PLURAL, plural, =1 {One document} other { documents}} @@ -2701,7 +3205,7 @@ src/app/components/document-list/document-list.component.html 97 - {VAR_PLURAL, plural, =1 {One document} other { documents}} + {VAR_PLURAL, plural, zero {} one { المزيد من المستندات} two { المزيد من المستندات} few { المزيد من المستندات} many { المزيد من المستندات}=1 {مستند واحد آخر} other { المزيد من المستندات}} (filtered) @@ -2717,7 +3221,7 @@ src/app/components/document-list/document-list.component.html 110 - Error while loading documents + خطأ في أثناء تحميل المستندات ASN @@ -2733,7 +3237,7 @@ src/app/services/rest/document.service.ts 18 - ASN + ASN Added @@ -2743,7 +3247,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 60 + 65 src/app/services/rest/document.service.ts @@ -2757,7 +3261,7 @@ src/app/components/document-list/document-list.component.html 182 - Edit document + تعديل المستند View "" saved successfully. @@ -2765,7 +3269,7 @@ src/app/components/document-list/document-list.component.ts 196 - View "" saved successfully. + عرض "" حفظ بنجاح. View "" created successfully. @@ -2773,15 +3277,15 @@ src/app/components/document-list/document-list.component.ts 237 - View "" created successfully. + عرض "" أنشئ بنجاح. Reset filters src/app/components/document-list/filter-editor/filter-editor.component.html - 73 + 78 - Reset filters + إعادة تعيين التصفيات Correspondent: @@ -2789,7 +3293,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 94,96 - Correspondent: + مراسل: Without correspondent @@ -2805,7 +3309,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 103,105 - Type: + نوع: Without document type @@ -2821,7 +3325,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 111,113 - Tag: + علامة: Without any tag @@ -2837,7 +3341,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 121 - Title: + العنوان: ASN: @@ -2845,7 +3349,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 124 - ASN: + ASN: Title & content @@ -2853,7 +3357,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 156 - Title & content + العنوان & المحتوى Advanced search @@ -2861,7 +3365,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 161 - Advanced search + بحث متقدم More like @@ -2869,7 +3373,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 167 - More like + أكثر مثله equals @@ -2877,7 +3381,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 186 - equals + يساوي is empty @@ -2885,7 +3389,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 190 - is empty + فارغ is not empty @@ -2893,7 +3397,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 194 - is not empty + غير فارغ greater than @@ -2901,7 +3405,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 198 - greater than + أكبر من less than @@ -2909,7 +3413,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 202 - less than + أقل من Save current view @@ -2917,7 +3421,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 3 - Save current view + حفظ العرض الحالي Show in sidebar @@ -2927,9 +3431,9 @@ src/app/components/manage/settings/settings.component.html - 203 + 208 - Show in sidebar + عرض على الشريط الجانبي Show on dashboard @@ -2939,9 +3443,9 @@ src/app/components/manage/settings/settings.component.html - 199 + 204 - Show on dashboard + عرض على لوحة التحكم Filter rules error occurred while saving this view @@ -2949,7 +3453,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 12 - Filter rules error occurred while saving this view + حدث خطأ في قواعد التصنيف في أثناء حفظ هذا العرض The error returned was @@ -2957,7 +3461,7 @@ src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html 13 - The error returned was + الخطأ الذي أرجع كان correspondent @@ -2965,7 +3469,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 33 - correspondent + مراسل correspondents @@ -2973,7 +3477,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 34 - correspondents + مراسلون Last used @@ -2981,7 +3485,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 38 - Last used + آخر استخدام Do you really want to delete the correspondent ""? @@ -2989,7 +3493,7 @@ src/app/components/manage/correspondent-list/correspondent-list.component.ts 48 - Do you really want to delete the correspondent ""? + هل تريد حقاً حذف المراسل""؟ document type @@ -2997,7 +3501,7 @@ src/app/components/manage/document-type-list/document-type-list.component.ts 30 - document type + نوع المستند document types @@ -3005,7 +3509,7 @@ src/app/components/manage/document-type-list/document-type-list.component.ts 31 - document types + أنواع المستندات Do you really want to delete the document type ""? @@ -3113,7 +3617,7 @@ src/app/components/manage/management-list/management-list.component.html 44 - Filter Documents + تصفية المستندات {VAR_PLURAL, plural, =1 {One } other { total }} @@ -3133,7 +3637,7 @@ src/app/components/manage/management-list/management-list.component.html 74 - {VAR_PLURAL, plural, =1 {One } other { total }} + {VAR_PLURAL, plural, zero {} one { مجموع } two { مجموع } few { مجموع } many { مجموع }=1 {واحد } other { مجموع }} Automatic @@ -3145,31 +3649,63 @@ src/app/data/matching-model.ts 39 - Automatic + تلقائي + + + Successfully created . + + src/app/components/manage/management-list/management-list.component.ts + 127 + + أنشئ بنجاح . + + + Error occurred while creating : . + + src/app/components/manage/management-list/management-list.component.ts + 132,134 + + حدث خطأ في أثناء إنشاء : . + + + Successfully updated . + + src/app/components/manage/management-list/management-list.component.ts + 150 + + حدث بنجاح. + + + Error occurred while saving : . + + src/app/components/manage/management-list/management-list.component.ts + 155,157 + + حدث خطأ في أثناء حفظ : . Do you really want to delete the ? src/app/components/manage/management-list/management-list.component.ts - 140 + 164 - Do you really want to delete the ? + هل تريد حقاً حذف ؟ Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 155 + 179 - Associated documents will not be deleted. + لن تحذف المستندات المرتبطة بها. Error while deleting element: src/app/components/manage/management-list/management-list.component.ts - 168,170 + 192,194 - Error while deleting element: + حدث خطأ في أثناء حذف العنصر: Start tour @@ -3177,21 +3713,29 @@ src/app/components/manage/settings/settings.component.html 2 - Start tour + بدء جولة + + + Open Django Admin + + src/app/components/manage/settings/settings.component.html + 4 + + فتح مسؤول Django General src/app/components/manage/settings/settings.component.html - 10 + 15 - General + عام Appearance src/app/components/manage/settings/settings.component.html - 13 + 18 المظهر @@ -3199,7 +3743,7 @@ Display language src/app/components/manage/settings/settings.component.html - 17 + 22 لغة العرض @@ -3207,231 +3751,231 @@ You need to reload the page after applying a new language. src/app/components/manage/settings/settings.component.html - 25 + 30 - You need to reload the page after applying a new language. + يجب إعادة تحميل الصفحة بعد تطبيق لغة جديدة. Date display src/app/components/manage/settings/settings.component.html - 32 + 37 - Date display + عرض التاريخ Date format src/app/components/manage/settings/settings.component.html - 45 + 50 - Date format + تنسيق التاريخ Short: src/app/components/manage/settings/settings.component.html - 51 + 56 - Short: + قصير: Medium: src/app/components/manage/settings/settings.component.html - 55 + 60 - Medium: + متوسط: Long: src/app/components/manage/settings/settings.component.html - 59 + 64 - Long: + طويل: Items per page src/app/components/manage/settings/settings.component.html - 67 + 72 - Items per page + العناصر لكل صفحة Document editor src/app/components/manage/settings/settings.component.html - 83 + 88 - Document editor + محرر المستند Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 87 + 92 - Use PDF viewer provided by the browser + استخدم عارض PDF المقدم من المتصفح This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 87 + 92 - This is usually faster for displaying large PDF documents, but it might not work on some browsers. + عادة ما يكون هذا أسرع لعرض مستندات PDF الكبيرة، ولكن قد لا يعمل على بعض المتصفحات. Sidebar src/app/components/manage/settings/settings.component.html - 94 + 99 - Sidebar + الشريط الجانبي Use 'slim' sidebar (icons only) src/app/components/manage/settings/settings.component.html - 98 + 103 - Use 'slim' sidebar (icons only) + استخدم الشريط الجانبي 'نحيف' (الأيقونات فقط) Dark mode src/app/components/manage/settings/settings.component.html - 105 + 110 - Dark mode + الوضع المظلم Use system settings src/app/components/manage/settings/settings.component.html - 108 + 113 - Use system settings + استخدم إعدادات النظام Enable dark mode src/app/components/manage/settings/settings.component.html - 109 + 114 - Enable dark mode + تفعيل الوضع المظلم Invert thumbnails in dark mode src/app/components/manage/settings/settings.component.html - 110 + 115 - Invert thumbnails in dark mode + عكس الصور المصغرة في الوضع المظلم Theme Color src/app/components/manage/settings/settings.component.html - 116 + 121 - Theme Color + لون السمة Reset src/app/components/manage/settings/settings.component.html - 125 + 130 - Reset + إعادة تعيين Update checking src/app/components/manage/settings/settings.component.html - 130 + 135 - Update checking + التحقق من التحديث Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. src/app/components/manage/settings/settings.component.html - 134,137 + 139,142 - Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. + تحديث التحقق يعمل بأرسال إشارات الى العام Github API للحصول على أحدث إصدار لتحديد ما إذا كان الإصدار الجديد متاحا. لا يزال يتعين إجراء التحديث الفعلي للتطبيق يدويا. No tracking data is collected by the app in any way. src/app/components/manage/settings/settings.component.html - 139 + 144 - No tracking data is collected by the app in any way. + لا يتم جمع أي بيانات تتبع بواسطة التطبيق بأي طريقة. Enable update checking src/app/components/manage/settings/settings.component.html - 141 + 146 - Enable update checking + تمكين التحقق من التحديث Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. src/app/components/manage/settings/settings.component.html - 141 + 146 - Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. + لاحظ أنه بالنسبة لمستخدمي حاويات الطرف الثالث، مثل linuxserver.io قد يكون هذا الإشعار "أمام" من الإصدار الحالي من طرف ثالث. Bulk editing src/app/components/manage/settings/settings.component.html - 145 + 150 - Bulk editing + تعديل متعدد Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 149 + 154 - Show confirmation dialogs + إظهار تأكيد الحِوَارات Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 149 + 154 - Deleting documents will always ask for confirmation. + حذف المستندات سيطلب التأكيد دائما. Apply on close src/app/components/manage/settings/settings.component.html - 150 + 155 - Apply on close + تطبيق عند الإغلاق Enable comments src/app/components/manage/settings/settings.component.html - 158 + 163 - Enable comments + تمكين التعليقات Notifications src/app/components/manage/settings/settings.component.html - 166 + 171 الإشعارات @@ -3439,111 +3983,175 @@ Document processing src/app/components/manage/settings/settings.component.html - 169 + 174 - Document processing + معالجة المستندات Show notifications when new documents are detected src/app/components/manage/settings/settings.component.html - 173 + 178 - Show notifications when new documents are detected + إظهار الإشعارات عند وجود مستندات جديدة Show notifications when document processing completes successfully src/app/components/manage/settings/settings.component.html - 174 + 179 - Show notifications when document processing completes successfully + إظهار الإشعارات عند اكتمال معالجة المستندات بنجاح Show notifications when document processing fails src/app/components/manage/settings/settings.component.html - 175 + 180 - Show notifications when document processing fails + إظهار الإشعارات عند فشل معالجة المستندات Suppress notifications on dashboard src/app/components/manage/settings/settings.component.html - 176 + 181 - Suppress notifications on dashboard + منع الإشعارات في لوحة التحكم This will suppress all messages about document processing status on the dashboard. src/app/components/manage/settings/settings.component.html - 176 + 181 - This will suppress all messages about document processing status on the dashboard. + سيؤدي هذا إلى إلغاء جميع الرسائل حول حالة معالجة المستندات في لوحة التحكم. Appears on src/app/components/manage/settings/settings.component.html - 196 + 201 - Appears on + يظهر في No saved views defined. src/app/components/manage/settings/settings.component.html - 213 + 218 - No saved views defined. + لا توجد آراء محفوظة. + + + Mail + + src/app/components/manage/settings/settings.component.html + 231 + + البريد + + + Mail accounts + + src/app/components/manage/settings/settings.component.html + 236 + + حسابات البريد + + + Add Account + + src/app/components/manage/settings/settings.component.html + 241 + + إضافة حساب + + + Server + + src/app/components/manage/settings/settings.component.html + 249 + + خادم + + + No mail accounts defined. + + src/app/components/manage/settings/settings.component.html + 267 + + لا توجد حسابات بريدية. + + + Mail rules + + src/app/components/manage/settings/settings.component.html + 271 + + قواعد البريد + + + Add Rule + + src/app/components/manage/settings/settings.component.html + 276 + + إضافة قاعدة + + + No mail rules defined. + + src/app/components/manage/settings/settings.component.html + 302 + + لا توجد قواعد للبريد. Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 217 + 383 - Saved view "" deleted. + العرض المحفوظ "" مُسح. Settings saved src/app/components/manage/settings/settings.component.ts - 310 + 476 - Settings saved + الإعدادات حُفظت Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 311 + 477 - Settings were saved successfully. + حُفظت الإعدادات بنجاح. Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 315 + 481 - Settings were saved successfully. Reload is required to apply some changes. + حفظت الإعدادات بنجاح. إعادة تحميل مطلوب لتطبيق بعض التغييرات. Reload now src/app/components/manage/settings/settings.component.ts - 316 + 482 - Reload now + إعادة تحميل الآن Use system language src/app/components/manage/settings/settings.component.ts - 334 + 500 استخدم لغة النظام @@ -3551,7 +4159,7 @@ Use date format of display language src/app/components/manage/settings/settings.component.ts - 341 + 507 استخدم تنسيق تاريخ لغة العرض @@ -3559,9 +4167,105 @@ Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 361,363 + 527,529 - Error while storing settings on server: + خطأ في أثناء حفظ الإعدادات على الخادم: + + + Saved account "". + + src/app/components/manage/settings/settings.component.ts + 554 + + حفظ الحساب"". + + + Error saving account: . + + src/app/components/manage/settings/settings.component.ts + 564 + + خطأ في حفظ الحساب: . + + + Confirm delete mail account + + src/app/components/manage/settings/settings.component.ts + 574 + + تأكيد حذف حساب البريد + + + This operation will permanently delete this mail account. + + src/app/components/manage/settings/settings.component.ts + 575 + + هذه العملية ستقوم بحذف حساب البريد هذا بشكل دائم. + + + Deleted mail account + + src/app/components/manage/settings/settings.component.ts + 584 + + تم حذف حساب البريد + + + Error deleting mail account: . + + src/app/components/manage/settings/settings.component.ts + 593 + + خطأ في حذف حساب البريد: . + + + Saved rule "". + + src/app/components/manage/settings/settings.component.ts + 612 + + قاعدة محفوظة "". + + + Error saving rule: . + + src/app/components/manage/settings/settings.component.ts + 623 + + خطأ في حفظ القاعدة: . + + + Confirm delete mail rule + + src/app/components/manage/settings/settings.component.ts + 633 + + تأكيد حذف حساب البريد + + + This operation will permanently delete this mail rule. + + src/app/components/manage/settings/settings.component.ts + 634 + + هذه العملية ستقوم بحذف قاعدة البريد هذه بشكل دائم. + + + Deleted mail rule + + src/app/components/manage/settings/settings.component.ts + 643 + + تم حذف قاعدة البريد + + + Error deleting mail rule: . + + src/app/components/manage/settings/settings.component.ts + 652 + + خطأ في حذف قاعدة البريد: . storage path @@ -3569,7 +4273,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 30 - storage path + مسار التخزين storage paths @@ -3577,7 +4281,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 31 - storage paths + مسارات التخزين Do you really want to delete the storage path ""? @@ -3585,7 +4289,7 @@ src/app/components/manage/storage-path-list/storage-path-list.component.ts 45 - Do you really want to delete the storage path ""? + هل تريد حقاً حذف مسار التخزين ""؟ tag @@ -3593,7 +4297,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 30 - tag + علامة tags @@ -3601,7 +4305,7 @@ src/app/components/manage/tag-list/tag-list.component.ts 31 - tags + علامات Do you really want to delete the tag ""? @@ -3617,7 +4321,7 @@ src/app/components/manage/tasks/tasks.component.html 6 - Clear selection + إزالة التحديد @@ -3627,7 +4331,7 @@ src/app/components/manage/tasks/tasks.component.html 11 - + Refresh @@ -3635,7 +4339,7 @@ src/app/components/manage/tasks/tasks.component.html 20 - Refresh + تحديث Results @@ -3643,7 +4347,7 @@ src/app/components/manage/tasks/tasks.component.html 42 - Results + النتائج click for full output @@ -3651,7 +4355,7 @@ src/app/components/manage/tasks/tasks.component.html 66 - click for full output + انقر لمشاهدة كامل الإخراج Dismiss @@ -3663,7 +4367,7 @@ src/app/components/manage/tasks/tasks.component.ts 56 - Dismiss + رفض Open Document @@ -3671,7 +4375,7 @@ src/app/components/manage/tasks/tasks.component.html 86 - Open Document + فتح مستند Failed  @@ -3679,7 +4383,7 @@ src/app/components/manage/tasks/tasks.component.html 103 - Failed  + فشل  Complete  @@ -3687,7 +4391,7 @@ src/app/components/manage/tasks/tasks.component.html 109 - Complete  + مكتمل  Started  @@ -3695,7 +4399,7 @@ src/app/components/manage/tasks/tasks.component.html 115 - Started  + بدأ  Queued  @@ -3703,7 +4407,7 @@ src/app/components/manage/tasks/tasks.component.html 121 - Queued  + الانتظار  Dismiss selected @@ -3711,7 +4415,7 @@ src/app/components/manage/tasks/tasks.component.ts 22 - Dismiss selected + تحديد الرفض Dismiss all @@ -3723,7 +4427,7 @@ src/app/components/manage/tasks/tasks.component.ts 54 - Dismiss all + رفض الجميع Confirm Dismiss All @@ -3731,7 +4435,7 @@ src/app/components/manage/tasks/tasks.component.ts 52 - Confirm Dismiss All + تأكيد رفض الكل tasks? @@ -3739,7 +4443,7 @@ src/app/components/manage/tasks/tasks.component.ts 54 - tasks? + مهام؟ 404 Not Found @@ -3747,7 +4451,7 @@ src/app/components/not-found/not-found.component.html 7 - 404 Not Found + 404 غير متوفر Any word @@ -3755,7 +4459,7 @@ src/app/data/matching-model.ts 14 - Any word + أي كلمة Any: Document contains any of these words (space separated) @@ -3763,7 +4467,7 @@ src/app/data/matching-model.ts 15 - Any: Document contains any of these words (space separated) + أي: مستند يحوي أي من هذه الكلمات (فراغ فاصل) All words @@ -3771,7 +4475,7 @@ src/app/data/matching-model.ts 19 - All words + كل الكلمات All: Document contains all of these words (space separated) @@ -3779,7 +4483,7 @@ src/app/data/matching-model.ts 20 - All: Document contains all of these words (space separated) + أي: مستند يحوي كل هذه الكلمات (فراغ فاصل) Exact match @@ -3787,7 +4491,7 @@ src/app/data/matching-model.ts 24 - Exact match + تطابق تام Exact: Document contains this string @@ -3795,7 +4499,7 @@ src/app/data/matching-model.ts 25 - Exact: Document contains this string + بالضبط: المستند يحتوي على هذه الكلمة Regular expression @@ -3803,7 +4507,7 @@ src/app/data/matching-model.ts 29 - Regular expression + التعابير النظامية Regular expression: Document matches this regular expression @@ -3811,7 +4515,7 @@ src/app/data/matching-model.ts 30 - Regular expression: Document matches this regular expression + التعابير النظامية: المستند يطابق هذا التعبير النظامي Fuzzy word @@ -3819,7 +4523,7 @@ src/app/data/matching-model.ts 34 - Fuzzy word + كلمة غامضة Fuzzy: Document contains a word similar to this word @@ -3827,7 +4531,7 @@ src/app/data/matching-model.ts 35 - Fuzzy: Document contains a word similar to this word + غامض: المستند يحوي كلمة مشابهة لهذه الكلمة Auto: Learn matching automatically @@ -3835,7 +4539,7 @@ src/app/data/matching-model.ts 40 - Auto: Learn matching automatically + تلقائياً: تعلم المطابقة تلقائيًا Warning: You have unsaved changes to your document(s). @@ -3843,13 +4547,13 @@ src/app/guards/dirty-doc.guard.ts 17 - Warning: You have unsaved changes to your document(s). + تحذير: لديك تغييرات غير محفوظة للمستند(المستندات). Unsaved Changes src/app/guards/dirty-form.guard.ts - 18 + 17 src/app/guards/dirty-saved-view.guard.ts @@ -3857,41 +4561,41 @@ src/app/services/open-documents.service.ts - 116 + 103 src/app/services/open-documents.service.ts - 143 + 130 - Unsaved Changes + لم تحفظ تغييرات You have unsaved changes. src/app/guards/dirty-form.guard.ts - 19 + 18 src/app/services/open-documents.service.ts - 144 + 131 - You have unsaved changes. + لديك تغييرات لم تحفظ. Are you sure you want to leave? src/app/guards/dirty-form.guard.ts - 20 + 19 - Are you sure you want to leave? + متيقِّن من المغادرة؟ Leave page src/app/guards/dirty-form.guard.ts - 22 + 21 - Leave page + غادر الصفحة You have unsaved changes to the saved view @@ -3899,7 +4603,7 @@ src/app/guards/dirty-saved-view.guard.ts 26 - You have unsaved changes to the saved view + لديك تغييرات غير محفوظة في العرض المحفوظ Are you sure you want to close this saved view? @@ -3907,7 +4611,7 @@ src/app/guards/dirty-saved-view.guard.ts 30 - Are you sure you want to close this saved view? + متيقِّن من إغلاق هذا العرض المحفوظ؟ Save and close @@ -3915,7 +4619,7 @@ src/app/guards/dirty-saved-view.guard.ts 34 - Save and close + حفظ و إغلاق (no title) @@ -3964,7 +4668,7 @@ 17 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Pre-consume script does not exist. + البرنامَج النصي قبل-الاستهلاك غير موجود. Error while executing pre-consume script. @@ -3973,7 +4677,7 @@ 18 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Error while executing pre-consume script. + حدث خطأ في أثناء تنفيذ البرنامَج النصي قبل-الاستهلاك. Post-consume script does not exist. @@ -3982,7 +4686,7 @@ 19 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Post-consume script does not exist. + البرنامَج النصي بعد-الاستهلاك غير موجود. Error while executing post-consume script. @@ -3991,7 +4695,7 @@ 20 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - Error while executing post-consume script. + حدث خطأ في أثناء تنفيذ البرنامَج النصي بعد-الاستهلاك. Received new file. @@ -4053,41 +4757,41 @@ You have unsaved changes to the document src/app/services/open-documents.service.ts - 118 + 105 - You have unsaved changes to the document + لديك تغييرات في المستند غير محفوظة Are you sure you want to close this document? src/app/services/open-documents.service.ts - 122 + 109 - Are you sure you want to close this document? + هل أنت متيقِّن من إغلاق هذا المستند؟ Close document src/app/services/open-documents.service.ts - 124 + 111 - Close document + إغلاق المستند Are you sure you want to close all documents? src/app/services/open-documents.service.ts - 145 + 132 - Are you sure you want to close all documents? + هل أنت متيقِّن من إغلاق كافة المستندات؟ Close documents src/app/services/open-documents.service.ts - 147 + 134 - Close documents + إغلاق المستندات Modified @@ -4112,7 +4816,7 @@ src/app/services/settings.service.ts 145 - English (US) + الإنجليزية (الولايات المتحدة) Belarusian @@ -4120,7 +4824,7 @@ src/app/services/settings.service.ts 151 - Belarusian + البيلاروسية Czech @@ -4128,7 +4832,7 @@ src/app/services/settings.service.ts 157 - Czech + التشيكية Danish @@ -4136,7 +4840,7 @@ src/app/services/settings.service.ts 163 - Danish + الدانماركية German @@ -4144,7 +4848,7 @@ src/app/services/settings.service.ts 169 - German + الألمانية English (GB) @@ -4152,7 +4856,7 @@ src/app/services/settings.service.ts 175 - English (GB) + الإنجليزية (المملكة المتحدة) Spanish @@ -4168,7 +4872,7 @@ src/app/services/settings.service.ts 187 - French + الفرنسية Italian @@ -4176,7 +4880,7 @@ src/app/services/settings.service.ts 193 - Italian + الإيطالية Luxembourgish @@ -4184,7 +4888,7 @@ src/app/services/settings.service.ts 199 - Luxembourgish + اللوكسمبرجية Dutch @@ -4192,7 +4896,7 @@ src/app/services/settings.service.ts 205 - Dutch + الهولندية Polish @@ -4208,7 +4912,7 @@ src/app/services/settings.service.ts 217 - Portuguese (Brazil) + البرتغالية (البرازيل) Portuguese @@ -4224,7 +4928,7 @@ src/app/services/settings.service.ts 229 - Romanian + الرومانية Russian @@ -4240,7 +4944,7 @@ src/app/services/settings.service.ts 241 - Slovenian + السلوفانية Serbian @@ -4248,7 +4952,7 @@ src/app/services/settings.service.ts 247 - Serbian + الصربية Swedish @@ -4264,7 +4968,7 @@ src/app/services/settings.service.ts 259 - Turkish + التركية Chinese Simplified @@ -4272,7 +4976,7 @@ src/app/services/settings.service.ts 265 - Chinese Simplified + الصينية المبسطة ISO 8601 @@ -4280,7 +4984,7 @@ src/app/services/settings.service.ts 282 - ISO 8601 + ISO 8601 Successfully completed one-time migratration of settings to the database! @@ -4288,7 +4992,7 @@ src/app/services/settings.service.ts 393 - Successfully completed one-time migratration of settings to the database! + تم بنجاح ترحيل الإعدادات مرة واحدة إلى قاعدة البيانات! Unable to migrate settings to the database, please try saving manually. @@ -4296,15 +5000,7 @@ src/app/services/settings.service.ts 394 - Unable to migrate settings to the database, please try saving manually. - - - Error - - src/app/services/toast.service.ts - 32 - - خطأ + غير قادر على ترحيل الإعدادات إلى قاعدة البيانات، الرجاء محاولة الحفظ يدوياً. Information @@ -4320,7 +5016,7 @@ src/app/services/upload-documents.service.ts 31 - Connecting... + الاتصال... Uploading... @@ -4328,7 +5024,7 @@ src/app/services/upload-documents.service.ts 43 - Uploading... + التحميل... Upload complete, waiting... @@ -4336,7 +5032,7 @@ src/app/services/upload-documents.service.ts 46 - Upload complete, waiting... + اكتمل الرفع، انتظر... HTTP error: @@ -4344,7 +5040,7 @@ src/app/services/upload-documents.service.ts 62 - HTTP error: + خطأ HTTP: diff --git a/src-ui/src/locale/messages.ar_SA.xlf b/src-ui/src/locale/messages.ar_SA.xlf deleted file mode 100644 index d51e2338d..000000000 --- a/src-ui/src/locale/messages.ar_SA.xlf +++ /dev/null @@ -1,5047 +0,0 @@ - - - - - - Close - - node_modules/src/alert/alert.ts - 47,48 - - إغلاق - - - Slide of - - node_modules/src/carousel/carousel.ts - 178,186 - - Currently selected slide number read by screen reader - الشريحة من - - - Previous - - node_modules/src/carousel/carousel.ts - 213,215 - - السابق - - - Next - - node_modules/src/carousel/carousel.ts - 236 - - التالي - - - Select month - - node_modules/src/datepicker/datepicker-navigation-select.ts - 50,51 - - - node_modules/src/datepicker/datepicker-navigation-select.ts - 50,51 - - اختر الشهر - - - Select year - - node_modules/src/datepicker/datepicker-navigation-select.ts - 50,51 - - - node_modules/src/datepicker/datepicker-navigation-select.ts - 50,51 - - اختر السنة - - - Previous month - - node_modules/src/datepicker/datepicker-navigation.ts - 60,63 - - - node_modules/src/datepicker/datepicker-navigation.ts - 60,63 - - الشهر السابق - - - Next month - - node_modules/src/datepicker/datepicker-navigation.ts - 60,63 - - - node_modules/src/datepicker/datepicker-navigation.ts - 60,63 - - الشهر التالي - - - «« - - node_modules/src/pagination/pagination.ts - 269,270 - - «« - - - « - - node_modules/src/pagination/pagination.ts - 269,270 - - « - - - » - - node_modules/src/pagination/pagination.ts - 269,270 - - » - - - »» - - node_modules/src/pagination/pagination.ts - 269,270 - - »» - - - First - - node_modules/src/pagination/pagination.ts - 269,271 - - الأول - - - Previous - - node_modules/src/pagination/pagination.ts - 269,271 - - السابق - - - Next - - node_modules/src/pagination/pagination.ts - 269,271 - - التالي - - - Last - - node_modules/src/pagination/pagination.ts - 269,271 - - الأخير - - - - - - - node_modules/src/progressbar/progressbar.ts - 30,33 - - - - - HH - - node_modules/src/timepicker/timepicker.ts - 230,231 - - HH - - - Hours - - node_modules/src/timepicker/timepicker.ts - 255,258 - - ساعات - - - MM - - node_modules/src/timepicker/timepicker.ts - 280,282 - - MM - - - Minutes - - node_modules/src/timepicker/timepicker.ts - 298,299 - - دقائق - - - Increment hours - - node_modules/src/timepicker/timepicker.ts - 328,329 - - زيادة الساعات - - - Decrement hours - - node_modules/src/timepicker/timepicker.ts - 350,356 - - إنقاص الساعات - - - Increment minutes - - node_modules/src/timepicker/timepicker.ts - 383,384 - - زيادة الدقائق - - - Decrement minutes - - node_modules/src/timepicker/timepicker.ts - 412,416 - - إنقاص الدقائق - - - SS - - node_modules/src/timepicker/timepicker.ts - 429 - - SS - - - Seconds - - node_modules/src/timepicker/timepicker.ts - 429 - - ثوانٍ - - - Increment seconds - - node_modules/src/timepicker/timepicker.ts - 429 - - زيادة الثواني - - - Decrement seconds - - node_modules/src/timepicker/timepicker.ts - 429 - - إنقاص الثواني - - - - - - - node_modules/src/timepicker/timepicker.ts - 429 - - - - - - - - node_modules/src/timepicker/timepicker.ts - 429 - - - - Close - - node_modules/src/toast/toast.ts - 74,75 - - إغلاق - - - Drop files to begin upload - - src/app/app.component.html - 7 - - اسحب الملفات لبدء التحميل - - - Document added - - src/app/app.component.ts - 78 - - أُضيف المستند - - - Document was added to paperless. - - src/app/app.component.ts - 80 - - أضيف المستند إلى paperless. - - - Open document - - src/app/app.component.ts - 81 - - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 45 - - فتح مستند - - - Could not add : - - src/app/app.component.ts - 97 - - تعذّر إضافة : - - - New document detected - - src/app/app.component.ts - 112 - - عُثر على مستند جديد - - - Document is being processed by paperless. - - src/app/app.component.ts - 114 - - المستند يتم معالجته من paperless. - - - Prev - - src/app/app.component.ts - 119 - - السابق - - - Next - - src/app/app.component.ts - 120 - - - src/app/components/document-detail/document-detail.component.html - 55 - - التالي - - - End - - src/app/app.component.ts - 121 - - النهاية - - - The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some. - - src/app/app.component.ts - 126 - - يمكن استخدام لوحة التحكم لعرض العروض المحفوظة، مثل 'علبة الوارد'. بواسطة الإعدادات يمكنك تفعيلها > المشاهدات المحفوظة بمجرد إنشاء بعضها. - - - Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms. - - src/app/app.component.ts - 136 - - سحب وإسقاط المستندات هنا للبدء في تحميلها أو وضعها في المجلد المستهلك. يمكنك أيضًا سحب وإسقاط المستندات في أي مكان على جميع الصفحات الأخرى من تطبيق الويب. بمجرد ذلك، سيبدأ Paperless-ngx في تدريب خوارزميات تعلم الآلات. - - - The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar. - - src/app/app.component.ts - 145 - - تظهر قائمة المستندات جميع مستنداتك وتسمح بالتصفية والتحرير بالجملة. وهناك ثلاث أنماط مختلفة للعرض: القائمة والبطاقات الصغيرة والبطاقات الكبيرة، وفي الشريط الجانبي قائمة بالمستندات المفتوحة حاليا للتحرير. - - - The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. - - src/app/app.component.ts - 157 - - أدوات التصفية تسمح لك بالعثور بسرعة على المستندات باستخدام مختلف عمليات البحث والتواريخ والعلامات وما إلى ذلك. - - - Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. - - src/app/app.component.ts - 167 - - يمكن حفظ أي مزيج من التصفيات مثل "عرض" يمكنك عرضه بعد ذلك على لوحة التحكم / أو الشريط الجانبي. - - - Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. - - src/app/app.component.ts - 176 - - يمكن إدارة جميع العلامات والمراسلين وأنواع الوثائق ومسارات التخزين باستخدام هذه الصفحات. ويمكن أيضا إنشاؤها من تعديل عرض المستند. - - - File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. - - src/app/app.component.ts - 185 - - ملف المهام يظهر لك المستندات المستهلكة، أو تنتظر أن تكون، أو يكون أخفق في أثناء العملية. - - - Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. - - src/app/app.component.ts - 194 - - تحقق من إعدادات التعديلات المختلفة على تطبيق الويب، أو تبديل إعدادات العروض المحفوظة أو إعداد التحقق من البريد الإلكتروني. - - - Thank you! 🙏 - - src/app/app.component.ts - 203 - - شكراً لك! 🙏 - - - There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues. - - src/app/app.component.ts - 205 - - هناك <em>أطنان</em> المزيد من الميزات والمعلومات التي لم نغطيها هنا، ولكن يجب يكون هذا كافيا لك للبداية. تحقق من المستندات أو زيارة المشروع على GitHub لمعرفة المزيد أو للإبلاغ عن المشكلات. - - - Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! - - src/app/app.component.ts - 207 - - أخيرا، بالنيابة عن كل مساهم في هذا المشروع المدعوم من المجتمع، شكرا لك على استخدام Paperless-ngx! - - - Initiating upload... - - src/app/app.component.ts - 256 - - بدء التحميل... - - - Paperless-ngx - - src/app/components/app-frame/app-frame.component.html - 11 - - app title - Paperless-ngx - - - Search documents - - src/app/components/app-frame/app-frame.component.html - 18 - - البحث في المستندات - - - Logged in as - - src/app/components/app-frame/app-frame.component.html - 39 - - تسجيل الدخول باسم - - - Settings - - src/app/components/app-frame/app-frame.component.html - 45 - - - src/app/components/app-frame/app-frame.component.html - 171 - - - src/app/components/app-frame/app-frame.component.html - 174 - - - src/app/components/manage/settings/settings.component.html - 1 - - الإعدادات - - - Logout - - src/app/components/app-frame/app-frame.component.html - 50 - - خروج - - - Dashboard - - src/app/components/app-frame/app-frame.component.html - 69 - - - src/app/components/app-frame/app-frame.component.html - 72 - - - src/app/components/dashboard/dashboard.component.html - 1 - - لوحة التحكم - - - Documents - - src/app/components/app-frame/app-frame.component.html - 76 - - - src/app/components/app-frame/app-frame.component.html - 79 - - - src/app/components/document-list/document-list.component.ts - 88 - - - src/app/components/manage/management-list/management-list.component.html - 54 - - - src/app/components/manage/management-list/management-list.component.html - 54 - - - src/app/components/manage/management-list/management-list.component.html - 54 - - - src/app/components/manage/management-list/management-list.component.html - 54 - - المستندات - - - Saved views - - src/app/components/app-frame/app-frame.component.html - 85 - - - src/app/components/manage/settings/settings.component.html - 189 - - طرق العرض المحفوظة - - - Open documents - - src/app/components/app-frame/app-frame.component.html - 99 - - فتح المستندات - - - Close all - - src/app/components/app-frame/app-frame.component.html - 115 - - - src/app/components/app-frame/app-frame.component.html - 118 - - إغلاق الكل - - - Manage - - src/app/components/app-frame/app-frame.component.html - 124 - - إدارة - - - Correspondents - - src/app/components/app-frame/app-frame.component.html - 128 - - - src/app/components/app-frame/app-frame.component.html - 131 - - مراسلون - - - Tags - - src/app/components/app-frame/app-frame.component.html - 135 - - - src/app/components/app-frame/app-frame.component.html - 138 - - - src/app/components/common/input/tags/tags.component.html - 2 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 28 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 27 - - علامات - - - Document types - - src/app/components/app-frame/app-frame.component.html - 142 - - - src/app/components/app-frame/app-frame.component.html - 145 - - أنواع المستندات - - - Storage paths - - src/app/components/app-frame/app-frame.component.html - 149 - - - src/app/components/app-frame/app-frame.component.html - 152 - - مسارات التخزين - - - File Tasks - - src/app/components/app-frame/app-frame.component.html - 156 - - - src/app/components/manage/tasks/tasks.component.html - 1 - - ملف المهام - - - File Tasks - - src/app/components/app-frame/app-frame.component.html - 160 - - ملف المهام - - - Logs - - src/app/components/app-frame/app-frame.component.html - 164 - - - src/app/components/app-frame/app-frame.component.html - 167 - - - src/app/components/manage/logs/logs.component.html - 1 - - السجلات - - - Info - - src/app/components/app-frame/app-frame.component.html - 180 - - - src/app/components/manage/tasks/tasks.component.html - 43 - - معلومات - - - Documentation - - src/app/components/app-frame/app-frame.component.html - 184 - - - src/app/components/app-frame/app-frame.component.html - 187 - - الوثائق - - - GitHub - - src/app/components/app-frame/app-frame.component.html - 192 - - - src/app/components/app-frame/app-frame.component.html - 195 - - Github - - - Suggest an idea - - src/app/components/app-frame/app-frame.component.html - 197 - - - src/app/components/app-frame/app-frame.component.html - 201 - - اقترح فكرة - - - is available. - - src/app/components/app-frame/app-frame.component.html - 210 - - متوفر. - - - Click to view. - - src/app/components/app-frame/app-frame.component.html - 210 - - انقر للعرض. - - - Paperless-ngx can automatically check for updates - - src/app/components/app-frame/app-frame.component.html - 214 - - Paperless-ngx يتحقق تلقائياً من وجود تحديثات - - - How does this work? - - src/app/components/app-frame/app-frame.component.html - 221,223 - - كيف يعمل هذا؟ - - - Update available - - src/app/components/app-frame/app-frame.component.html - 232 - - يتوفر تحديث - - - An error occurred while saving settings. - - src/app/components/app-frame/app-frame.component.ts - 83 - - - src/app/components/manage/settings/settings.component.ts - 492 - - حدث خطأ في أثناء حفظ الإعدادات. - - - An error occurred while saving update checking settings. - - src/app/components/app-frame/app-frame.component.ts - 216 - - حدث خطأ في أثناء حفظ إعدادات التحقق من التحديث. - - - Clear - - src/app/components/common/clearable-badge/clearable-badge.component.html - 1 - - - src/app/components/common/date-dropdown/date-dropdown.component.html - 24 - - - src/app/components/common/date-dropdown/date-dropdown.component.html - 47 - - تنظيف - - - Cancel - - src/app/components/common/confirm-dialog/confirm-dialog.component.html - 12 - - إلغاء - - - Confirmation - - src/app/components/common/confirm-dialog/confirm-dialog.component.ts - 20 - - تأكيد - - - Confirm - - src/app/components/common/confirm-dialog/confirm-dialog.component.ts - 32 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 279 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 319 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 357 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 395 - - أكّد - - - After - - src/app/components/common/date-dropdown/date-dropdown.component.html - 19 - - بعد - - - Before - - src/app/components/common/date-dropdown/date-dropdown.component.html - 42 - - قبل - - - Last 7 days - - src/app/components/common/date-dropdown/date-dropdown.component.ts - 43 - - آخر ٧ أيام - - - Last month - - src/app/components/common/date-dropdown/date-dropdown.component.ts - 47 - - آخر شهر - - - Last 3 months - - src/app/components/common/date-dropdown/date-dropdown.component.ts - 51 - - آخر ٣ أشهر - - - Last year - - src/app/components/common/date-dropdown/date-dropdown.component.ts - 55 - - العام الماضي - - - Name - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 8 - - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html - 9 - - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 10 - - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 10 - - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 13 - - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 8 - - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 8 - - - src/app/components/manage/management-list/management-list.component.html - 9 - - - src/app/components/manage/management-list/management-list.component.html - 9 - - - src/app/components/manage/management-list/management-list.component.html - 9 - - - src/app/components/manage/management-list/management-list.component.html - 9 - - - src/app/components/manage/management-list/management-list.component.html - 19 - - - src/app/components/manage/management-list/management-list.component.html - 19 - - - src/app/components/manage/management-list/management-list.component.html - 19 - - - src/app/components/manage/management-list/management-list.component.html - 19 - - - src/app/components/manage/settings/settings.component.html - 196 - - - src/app/components/manage/settings/settings.component.html - 248 - - - src/app/components/manage/settings/settings.component.html - 283 - - - src/app/components/manage/tasks/tasks.component.html - 40 - - اسم - - - Matching algorithm - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 9 - - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html - 10 - - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 15 - - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 13 - - مطابقة الخوارزمية - - - Matching pattern - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 10 - - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html - 11 - - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 16 - - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 14 - - مطابقة النمط - - - Case insensitive - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 11 - - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html - 12 - - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 17 - - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 15 - - حالة غير حساسة - - - Cancel - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 14 - - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html - 16 - - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 23 - - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 37 - - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 21 - - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 18 - - - src/app/components/common/select-dialog/select-dialog.component.html - 12 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 6 - - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 18 - - إلغاء - - - Save - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.html - 15 - - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html - 17 - - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 24 - - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 38 - - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 22 - - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 19 - - - src/app/components/document-detail/document-detail.component.html - 185 - - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 19 - - - src/app/components/manage/settings/settings.component.html - 317 - - حفظ - - - Create new correspondent - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 20 - - إنشاء مراسل جديد - - - Edit correspondent - - src/app/components/common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component.ts - 24 - - تعديل المراسل - - - Create new document type - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 20 - - إنشاء نوع مستند جديد - - - Edit document type - - src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.ts - 24 - - تحرير نوع المستند - - - Create new item - - src/app/components/common/edit-dialog/edit-dialog.component.ts - 49 - - إنشاء عنصر جديد - - - Edit item - - src/app/components/common/edit-dialog/edit-dialog.component.ts - 53 - - تعديل عنصر - - - Could not save element: - - src/app/components/common/edit-dialog/edit-dialog.component.ts - 57 - - تعذر حفظ العنصر: - - - IMAP Server - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 11 - - خادم IMAP - - - IMAP Port - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 12 - - منفذ IMAP - - - IMAP Security - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 13 - - أمان IMAP - - - Username - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 16 - - اسم المستخدم - - - Password - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 17 - - كلمة المرور - - - Character Set - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html - 18 - - نوع ترميز المحارف - - - No encryption - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts - 12 - - دون تشفير - - - SSL - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts - 13 - - SSL - - - STARTTLS - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts - 14 - - STARTTLS - - - Create new mail account - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts - 28 - - إنشاء حساب بريد جديد - - - Edit mail account - - src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts - 32 - - تعديل حساب البريد - - - Account - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 11 - - - src/app/components/manage/settings/settings.component.html - 284 - - الحساب - - - Folder - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 12 - - مجلد - - - Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server. - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 12 - - يجب فصل المجلدات الفرعية باستخدام محدد، غالبا نقطة ('.') أو خط مائل ('/')، لكنها تختلف حسب خادم البريد. - - - Maximum age (days) - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 13 - - العمر الأقصى (الأيام) - - - Attachment type - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 14 - - نوع المرفق - - - Consumption scope - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 15 - - Consumption scope - - - See docs for .eml processing requirements - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 15 - - See docs for .eml processing requirements - - - Paperless will only process mails that match all of the filters specified below. - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 18 - - Paperless سيعالج فقط الرسائل التي تطابق جميع التصفيات المحددة أدناه. - - - Filter from - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 19 - - تصفية من - - - Filter subject - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 20 - - تصفية الموضوع - - - Filter body - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 21 - - تصفية الجسم - - - Filter attachment filename - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 22 - - تصفية اسم الملف المرفق - - - Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 22 - - فقط المستندات التي تتطابق تماما مع اسم هذا الملف إذا تم تحديدها. المحارف البديلة مثل *.pdf أو *الفواتير* مسموح بها. لأنها غير حساسة. - - - Action - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 25 - - إجراء - - - Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 25 - - الإجراء المطبق على البريد. ينفذ هذا الإجراء فقط عندما تستهلك المستندات من البريد. ستبقى البُرٌد التي لا تحتوي على مرفقات ستبقى كما هي. - - - Action parameter - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 26 - - إجراء المعامل - - - Assign title from - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 27 - - تعيين العنوان من - - - Assign document type - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 29 - - تعيين نوع المستند - - - Assign correspondent from - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 30 - - تعيين مراسل من - - - Assign correspondent - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 31 - - تعيين مراسل - - - Error - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 36 - - - src/app/services/toast.service.ts - 32 - - خطأ - - - Only process attachments - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 25 - - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 36 - - Only process attachments - - - Process all files, including 'inline' attachments - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 29 - - Process all files, including 'inline' attachments - - - Process message as .eml - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 40 - - Process message as .eml - - - Process message as .eml and attachments separately - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 44 - - Process message as .eml and attachments separately - - - Delete - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 51 - - - src/app/components/document-detail/document-detail.component.html - 11 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 126 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 46 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.html - 65 - - - src/app/components/manage/management-list/management-list.component.ts - 181 - - - src/app/components/manage/settings/settings.component.html - 214 - - - src/app/components/manage/settings/settings.component.html - 261 - - - src/app/components/manage/settings/settings.component.html - 296 - - حذف - - - Move to specified folder - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 55 - - نقل إلى مجلد محدد - - - Mark as read, don't process read mails - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 59 - - وضع علامة كمقروءة، لا تعالج الرسائل المقروءة - - - Flag the mail, don't process flagged mails - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 63 - - علم الرسالة، لا تعالج الرسائل المعلمة - - - Tag the mail with specified tag, don't process tagged mails - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 67 - - علم الرسالة بعلامة محددة، لا تعالج الرسائل المُعلمة - - - Use subject as title - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 74 - - استخدم الموضوع كعنوان - - - Use attachment filename as title - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 78 - - استخدم اسم الملف المرفق كعنوان - - - Do not assign a correspondent - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 85 - - لا تعيّن مراسل - - - Use mail address - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 89 - - استخدم عنوان البريد - - - Use name (or mail address if not available) - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 93 - - استخدم الاسم (أو عنوان البريد إذا لم يكن متاحا) - - - Use correspondent selected below - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 97 - - استخدم المراسل المحدد أدناه - - - Create new mail rule - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 137 - - إنشاء قاعدة بريد جديدة - - - Edit mail rule - - src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts - 141 - - تعديل قاعدة البريد - - - Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 10 - - لاحظ أن تحرير مسار لا يطبق التغييرات على الملفات المخزنة حتى تقوم بتشغيل أداة 'document_renamer'. انظر إلى المستندات. - - - Path - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html - 14 - - - src/app/components/manage/storage-path-list/storage-path-list.component.ts - 35 - - مسار - - - e.g. - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 21 - - مثال. - - - or use slashes to add directories e.g. - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 23 - - أو استخدم الخطوط المائلة لإضافة مجلدات مثل. - - - See <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling">documentation</a> for full list. - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 25 - - راجع المستندات <a target="_blank" href="https://docs.paperless-ngx.com/advanced_usage/#file-name-handling"></a> للاطلاع على القائمة الكاملة. - - - Create new storage path - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 30 - - إنشاء مسار تخزين جديد - - - Edit storage path - - src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts - 34 - - تعديل مسار التخزين - - - Color - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 10 - - - src/app/components/manage/tag-list/tag-list.component.ts - 35 - - لون - - - Inbox tag - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 12 - - علامة علبة الوارد - - - Inbox tags are automatically assigned to all consumed documents. - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html - 12 - - تُعيَّن علامات علبة الوارد تلقائياً لجميع المستندات المستهلكة. - - - Create new tag - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 21 - - إنشاء علامة جديدة - - - Edit tag - - src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.ts - 25 - - تعديل العلامة - - - All - - src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 16 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 20 - - الكل - - - Any - - src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 18 - - أي - - - Apply - - src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 32 - - تطبيق - - - Click again to exclude items. - - src/app/components/common/filterable-dropdown/filterable-dropdown.component.html - 38 - - انقر مرة أخرى لاستبعاد العناصر. - - - Not assigned - - src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts - 261 - - Filter drop down element to filter for documents with no correspondent/type/tag assigned - غير معين - - - Invalid date. - - src/app/components/common/input/date/date.component.html - 13 - - تاريخ غير صالح. - - - Suggestions: - - src/app/components/common/input/date/date.component.html - 16 - - - src/app/components/common/input/select/select.component.html - 30 - - - src/app/components/common/input/tags/tags.component.html - 42 - - الاقتراحات: - - - Add item - - src/app/components/common/input/select/select.component.html - 11 - - Used for both types, correspondents, storage paths - إضافة عنصر - - - Add tag - - src/app/components/common/input/tags/tags.component.html - 11 - - إضافة علامة - - - Select - - src/app/components/common/select-dialog/select-dialog.component.html - 13 - - - src/app/components/common/select-dialog/select-dialog.component.ts - 17 - - - src/app/components/document-list/document-list.component.html - 8 - - تحديد - - - Please select an object - - src/app/components/common/select-dialog/select-dialog.component.ts - 20 - - الرجاء تحديد كائن - - - Loading... - - src/app/components/dashboard/dashboard.component.html - 26 - - - src/app/components/dashboard/widgets/widget-frame/widget-frame.component.html - 7 - - - src/app/components/document-list/document-list.component.html - 93 - - - src/app/components/manage/settings/settings.component.html - 222 - - - src/app/components/manage/settings/settings.component.html - 308 - - - src/app/components/manage/tasks/tasks.component.html - 19 - - - src/app/components/manage/tasks/tasks.component.html - 27 - - تحميل... - - - Hello , welcome to Paperless-ngx - - src/app/components/dashboard/dashboard.component.ts - 18 - - أهلا , مرحبا بك في Paperless-ngx - - - Welcome to Paperless-ngx - - src/app/components/dashboard/dashboard.component.ts - 20 - - مرحبا بك في Paperless-ngx - - - Show all - - src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html - 3 - - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 27 - - عرض الكل - - - Created - - src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html - 9 - - - src/app/components/document-list/document-list.component.html - 157 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 59 - - - src/app/components/manage/tasks/tasks.component.html - 41 - - - src/app/services/rest/document.service.ts - 22 - - أُنشئ - - - Title - - src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html - 10 - - - src/app/components/document-detail/document-detail.component.html - 75 - - - src/app/components/document-list/document-list.component.html - 139 - - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 153 - - - src/app/services/rest/document.service.ts - 20 - - عنوان - - - Statistics - - src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html - 1 - - الإحصائيات - - - Documents in inbox: - - src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html - 3 - - المستندات في علبة الواردة: - - - Total documents: - - src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html - 4 - - إجمالي المستندات: - - - Upload new documents - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 1 - - تحميل مستندات جديدة - - - Dismiss completed - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 4 - - This button dismisses all status messages about processed documents on the dashboard (failed and successful) - اكتمل الرفض - - - Drop documents here or - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 13 - - أسقط المستندات هنا أو - - - Browse files - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 13 - - تصفح الملفات - - - {VAR_PLURAL, plural, =1 {One more document} other { more documents}} - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html - 25 - - This is shown as a summary line when there are more than 5 document in the processing pipeline. - {VAR_PLURAL, plural, zero {} one { المزيد من المستندات} two { المزيد من المستندات} few { المزيد من المستندات} many { المزيد من المستندات}=1 {مستند واحد آخر} other { المزيد من المستندات}} - - - Processing: - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 36 - - المعالجة: - - - Failed: - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 39 - - فشل: - - - Added: - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 42 - - أضيف: - - - , - - src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts - 45 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 224 - - this string is used to separate processing, failed and added on the file upload widget - , - - - Paperless-ngx is running! - - src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html - 3 - - يعمل Paperless-ngx! - - - You're ready to start uploading documents! Explore the various features of this web app on your own, or start a quick tour using the button below. - - src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html - 4 - - أنت على استعداد لبدء تحميل المستندات! استكشف الميزات المختلفة لتطبيق الويب هذا بمفردك، أو بدء جولة سريعة باستخدام الزر أدناه. - - - More detail on how to use and configure Paperless-ngx is always available in the documentation. - - src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html - 5 - - المزيد من التفاصيل حول كيفية استخدام وتهيئة Paperless-ngx متوفرة دائماً في المستندات. - - - Thanks for being a part of the Paperless-ngx community! - - src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html - 8 - - شكرًا لك لكونك جزءًا من مجتمع Paperless-ngx! - - - Start the tour - - src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.html - 9 - - بدء الجولة - - - Searching document with asn - - src/app/components/document-asn/document-asn.component.html - 1 - - البحث عن المستند باستخدام asn - - - Enter comment - - src/app/components/document-comments/document-comments.component.html - 4 - - أدخل تعليق - - - Please enter a comment. - - src/app/components/document-comments/document-comments.component.html - 5,7 - - الرجاء إدخال تعليق. - - - Add comment - - src/app/components/document-comments/document-comments.component.html - 11 - - إضافة تعليق - - - Error saving comment: - - src/app/components/document-comments/document-comments.component.ts - 68 - - خطأ في حفظ التعليق: - - - Error deleting comment: - - src/app/components/document-comments/document-comments.component.ts - 83 - - خطأ في حذف التعليق: - - - Page - - src/app/components/document-detail/document-detail.component.html - 3 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 15 - - صفحة - - - of - - src/app/components/document-detail/document-detail.component.html - 5 - - من - - - Download - - src/app/components/document-detail/document-detail.component.html - 19 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 90 - - - src/app/components/document-list/document-card-large/document-card-large.component.html - 58 - - - src/app/components/document-list/document-card-small/document-card-small.component.html - 86 - - تحميل - - - Download original - - src/app/components/document-detail/document-detail.component.html - 25 - - تحميل النسخة الأصلية - - - Redo OCR - - src/app/components/document-detail/document-detail.component.html - 34 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 77 - - إعادة OCR - - - More like this - - src/app/components/document-detail/document-detail.component.html - 40 - - - src/app/components/document-list/document-card-large/document-card-large.component.html - 38 - - مزيدا من هذا - - - Close - - src/app/components/document-detail/document-detail.component.html - 43 - - - src/app/guards/dirty-saved-view.guard.ts - 32 - - إغلاق - - - Previous - - src/app/components/document-detail/document-detail.component.html - 50 - - السابق - - - Details - - src/app/components/document-detail/document-detail.component.html - 72 - - تفاصيل - - - Archive serial number - - src/app/components/document-detail/document-detail.component.html - 76 - - الرقم التسلسلي للأرشيف - - - Date created - - src/app/components/document-detail/document-detail.component.html - 77 - - تاريخ الإنشاء - - - Correspondent - - src/app/components/document-detail/document-detail.component.html - 79 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 38 - - - src/app/components/document-list/document-list.component.html - 133 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 35 - - - src/app/services/rest/document.service.ts - 19 - - مراسل - - - Document type - - src/app/components/document-detail/document-detail.component.html - 81 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 47 - - - src/app/components/document-list/document-list.component.html - 145 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 42 - - - src/app/services/rest/document.service.ts - 21 - - نوع المستند - - - Storage path - - src/app/components/document-detail/document-detail.component.html - 83 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 56 - - - src/app/components/document-list/document-list.component.html - 151 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 49 - - مسار التخزين - - - Default - - src/app/components/document-detail/document-detail.component.html - 84 - - الافتراضي - - - Content - - src/app/components/document-detail/document-detail.component.html - 91 - - محتوى - - - Metadata - - src/app/components/document-detail/document-detail.component.html - 100 - - - src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts - 17 - - البيانات الوصفية - - - Date modified - - src/app/components/document-detail/document-detail.component.html - 106 - - تاريخ التعديل - - - Date added - - src/app/components/document-detail/document-detail.component.html - 110 - - تاريخ الإضافة - - - Media filename - - src/app/components/document-detail/document-detail.component.html - 114 - - اسم ملف الوسائط - - - Original filename - - src/app/components/document-detail/document-detail.component.html - 118 - - اسم الملف الأصلي - - - Original MD5 checksum - - src/app/components/document-detail/document-detail.component.html - 122 - - مجموع MD5 الاختباري للأصل - - - Original file size - - src/app/components/document-detail/document-detail.component.html - 126 - - حجم الملف الأصلي - - - Original mime type - - src/app/components/document-detail/document-detail.component.html - 130 - - نوع mime الأصلي - - - Archive MD5 checksum - - src/app/components/document-detail/document-detail.component.html - 134 - - مجموع MD5 الاختباري للأرشيف - - - Archive file size - - src/app/components/document-detail/document-detail.component.html - 138 - - حجم ملف الأرشيف - - - Original document metadata - - src/app/components/document-detail/document-detail.component.html - 144 - - بيانات التعريف للمستند الأصلي - - - Archived document metadata - - src/app/components/document-detail/document-detail.component.html - 145 - - بيانات التعريف للمستند الأصلي - - - Enter Password - - src/app/components/document-detail/document-detail.component.html - 167 - - - src/app/components/document-detail/document-detail.component.html - 203 - - أدخل كلمة المرور - - - Comments - - src/app/components/document-detail/document-detail.component.html - 174 - - - src/app/components/manage/settings/settings.component.html - 159 - - التعليقات - - - Discard - - src/app/components/document-detail/document-detail.component.html - 183 - - تجاهل - - - Save & next - - src/app/components/document-detail/document-detail.component.html - 184 - - حفظ & التالي - - - Confirm delete - - src/app/components/document-detail/document-detail.component.ts - 442 - - - src/app/components/manage/management-list/management-list.component.ts - 177 - - تأكيد الحذف - - - Do you really want to delete document ""? - - src/app/components/document-detail/document-detail.component.ts - 443 - - هل تريد حقاً حذف المستند ""؟ - - - The files for this document will be deleted permanently. This operation cannot be undone. - - src/app/components/document-detail/document-detail.component.ts - 444 - - ستحذف ملفات هذا المستند بشكل دائم. لا يمكن التراجع عن هذه العملية. - - - Delete document - - src/app/components/document-detail/document-detail.component.ts - 446 - - حذف مستند - - - Error deleting document: - - src/app/components/document-detail/document-detail.component.ts - 462 - - حدث خطأ أثناء حذف الوثيقة: - - - Redo OCR confirm - - src/app/components/document-detail/document-detail.component.ts - 482 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 454 - - إعادة تأكيد OCR - - - This operation will permanently redo OCR for this document. - - src/app/components/document-detail/document-detail.component.ts - 483 - - هذه العملية ستعيد بشكل دائم OCR لهذا المستند. - - - This operation cannot be undone. - - src/app/components/document-detail/document-detail.component.ts - 484 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 417 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 456 - - - src/app/components/manage/settings/settings.component.ts - 576 - - - src/app/components/manage/settings/settings.component.ts - 635 - - لا يمكن التراجع عن هذه العملية. - - - Proceed - - src/app/components/document-detail/document-detail.component.ts - 486 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 458 - - - src/app/components/manage/settings/settings.component.ts - 578 - - - src/app/components/manage/settings/settings.component.ts - 637 - - متابعة - - - Redo OCR operation will begin in the background. Close and re-open or reload this document after the operation has completed to see new content. - - src/app/components/document-detail/document-detail.component.ts - 494 - - إعادة تشغيل OCR ستبدأ في الخلفية. إغلاق وإعادة فتح أو إعادة تحميل هذا المستند بعد اكتمال العملية لمشاهدة محتوى جديد. - - - Error executing operation: - - src/app/components/document-detail/document-detail.component.ts - 505,507 - - خطأ في تنفيذ العملية: - - - Select: - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 10 - - تحديد: - - - Edit: - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 27 - - تعديل: - - - Filter tags - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 29 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 28 - - تصفية العلامات - - - Filter correspondents - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 39 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 36 - - تصفية المراسلين - - - Filter document types - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 48 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 43 - - تصفية نوع الوثائق - - - Filter storage paths - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 57 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 50 - - تصفية مسارات التخزين - - - Actions - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 74 - - - src/app/components/manage/management-list/management-list.component.html - 23 - - - src/app/components/manage/management-list/management-list.component.html - 23 - - - src/app/components/manage/management-list/management-list.component.html - 23 - - - src/app/components/manage/management-list/management-list.component.html - 23 - - - src/app/components/manage/settings/settings.component.html - 213 - - - src/app/components/manage/settings/settings.component.html - 250 - - - src/app/components/manage/settings/settings.component.html - 285 - - - src/app/components/manage/tasks/tasks.component.html - 44 - - إجراءات - - - Include: - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 96 - - يحتوي على: - - - Archived files - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 100,102 - - ملفات الأرشيف - - - Original files - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 106,108 - - الملفات الأصلية - - - Use formatted filename - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 113,115 - - استخدام اسم الملف المنسّق - - - Error executing bulk operation: - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 144,146 - - خطأ في تنفيذ العملية الشاملة: - - - "" - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 216 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 222 - - "" - - - "" and "" - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 218 - - This is for messages like 'modify "tag1" and "tag2"' - "" و "" - - - and "" - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 226,228 - - this is for messages like 'modify "tag1", "tag2" and "tag3"' - و"" - - - Confirm tags assignment - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 243 - - تأكيد تعيين العلامات - - - This operation will add the tag "" to selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 249 - - هذه العملية ستضيف العلامة "" إلى مستند (مستندات) مختارة. - - - This operation will add the tags to selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 254,256 - - هذه العملية ستضيف العلامات إلى مستند (مستندات) مختارة. - - - This operation will remove the tag "" from selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 262 - - هذه العملية ستزيل العلامة"" من المستند (المستندات) المختارة. - - - This operation will remove the tags from selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 267,269 - - هذه العملية ستزيل العلامات من المستند (المستندات) المختارة. - - - This operation will add the tags and remove the tags on selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 271,275 - - هذه العملية سوف تضيف العلامات وتزيل العلامات في مستند(مستندات) مختارة. - - - Confirm correspondent assignment - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 312 - - تأكيد تعيين المراسل - - - This operation will assign the correspondent "" to selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 314 - - هذه العملية ستعين المراسل"" إلى مستند (مستندات) مختارة. - - - This operation will remove the correspondent from selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 316 - - هذه العملية ستزيل المراسل من مستند (مستندات) مختارة. - - - Confirm document type assignment - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 350 - - تأكيد تعيين نوع المستند - - - This operation will assign the document type "" to selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 352 - - العملية ستعين نوع المستند "" إلى مستند (مستندات) مختارة. - - - This operation will remove the document type from selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 354 - - هذه العملية ستزيل نوع المستند من مستند (المستندات) مختارة. - - - Confirm storage path assignment - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 388 - - تأكيد تعيين مسار التخزين - - - This operation will assign the storage path "" to selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 390 - - هذه العملية ستعين مسار التخزين "" إلى مستند (مستندات) مختارة. - - - This operation will remove the storage path from selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 392 - - هذه العملية ستزيل مسار التخزين من المستند(المستندات) المختارة. - - - Delete confirm - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 415 - - تأكيد الحذف - - - This operation will permanently delete selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 416 - - هذه العملية ستحذف بشكل دائم المستند(المستندات) المختارة. - - - Delete document(s) - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 419 - - حذف المستند(المستندات) - - - This operation will permanently redo OCR for selected document(s). - - src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 455 - - هذه العملية ستعيد بشكل دائم OCR لي المستند(المستندات) المختارة. - - - Filter by correspondent - - src/app/components/document-list/document-card-large/document-card-large.component.html - 20 - - - src/app/components/document-list/document-list.component.html - 178 - - تصفية حسب المراسل - - - Filter by tag - - src/app/components/document-list/document-card-large/document-card-large.component.html - 24 - - - src/app/components/document-list/document-list.component.html - 183 - - تصفية حسب العلامة - - - Edit - - src/app/components/document-list/document-card-large/document-card-large.component.html - 43 - - - src/app/components/document-list/document-card-small/document-card-small.component.html - 70 - - - src/app/components/manage/management-list/management-list.component.html - 45 - - - src/app/components/manage/management-list/management-list.component.html - 45 - - - src/app/components/manage/management-list/management-list.component.html - 45 - - - src/app/components/manage/management-list/management-list.component.html - 45 - - - src/app/components/manage/management-list/management-list.component.html - 59 - - - src/app/components/manage/management-list/management-list.component.html - 59 - - - src/app/components/manage/management-list/management-list.component.html - 59 - - - src/app/components/manage/management-list/management-list.component.html - 59 - - - src/app/components/manage/settings/settings.component.html - 260 - - - src/app/components/manage/settings/settings.component.html - 295 - - تحرير - - - View - - src/app/components/document-list/document-card-large/document-card-large.component.html - 50 - - عرض - - - Filter by document type - - src/app/components/document-list/document-card-large/document-card-large.component.html - 63 - - - src/app/components/document-list/document-list.component.html - 187 - - تصفية حسب نوع المستند - - - Filter by storage path - - src/app/components/document-list/document-card-large/document-card-large.component.html - 70 - - - src/app/components/document-list/document-list.component.html - 192 - - تصفية حسب مسار التخزين - - - Created: - - src/app/components/document-list/document-card-large/document-card-large.component.html - 85 - - - src/app/components/document-list/document-card-small/document-card-small.component.html - 48 - - أنشئ: - - - Added: - - src/app/components/document-list/document-card-large/document-card-large.component.html - 86 - - - src/app/components/document-list/document-card-small/document-card-small.component.html - 49 - - أضيف: - - - Modified: - - src/app/components/document-list/document-card-large/document-card-large.component.html - 87 - - - src/app/components/document-list/document-card-small/document-card-small.component.html - 50 - - معدل: - - - Score: - - src/app/components/document-list/document-card-large/document-card-large.component.html - 98 - - النقاط: - - - Toggle tag filter - - src/app/components/document-list/document-card-small/document-card-small.component.html - 14 - - تبديل تصفية العلامة - - - Toggle correspondent filter - - src/app/components/document-list/document-card-small/document-card-small.component.html - 24 - - تبديل تصفية المراسل - - - Toggle document type filter - - src/app/components/document-list/document-card-small/document-card-small.component.html - 31 - - تبديل تصفية نوع المستند - - - Toggle storage path filter - - src/app/components/document-list/document-card-small/document-card-small.component.html - 38 - - تبديل تصفية مسار التخزين - - - Select none - - src/app/components/document-list/document-list.component.html - 11 - - بدون تحديد - - - Select page - - src/app/components/document-list/document-list.component.html - 12 - - تحديد صفحة - - - Select all - - src/app/components/document-list/document-list.component.html - 13 - - تحديد الكل - - - Sort - - src/app/components/document-list/document-list.component.html - 38 - - ترتيب - - - Views - - src/app/components/document-list/document-list.component.html - 64 - - طرق عرض - - - Save "" - - src/app/components/document-list/document-list.component.html - 75 - - حفظ "" - - - Save as... - - src/app/components/document-list/document-list.component.html - 76 - - حفظ باسم... - - - {VAR_PLURAL, plural, =1 {Selected of one document} other {Selected of documents}} - - src/app/components/document-list/document-list.component.html - 95 - - {VAR_PLURAL, plural, zero {} one {تم اختياره من مستندات} two {تم اختياره من مستندات} few {تم اختياره من مستندات} many {تم اختياره من مستندات}=1 {تم اختيار لمستند واحد} other {تم اختياره من مستندات}} - - - {VAR_PLURAL, plural, =1 {One document} other { documents}} - - src/app/components/document-list/document-list.component.html - 97 - - {VAR_PLURAL, plural, zero {} one { المزيد من المستندات} two { المزيد من المستندات} few { المزيد من المستندات} many { المزيد من المستندات}=1 {مستند واحد آخر} other { المزيد من المستندات}} - - - (filtered) - - src/app/components/document-list/document-list.component.html - 97 - - (مصفاة) - - - Error while loading documents - - src/app/components/document-list/document-list.component.html - 110 - - خطأ في أثناء تحميل المستندات - - - ASN - - src/app/components/document-list/document-list.component.html - 127 - - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 158 - - - src/app/services/rest/document.service.ts - 18 - - ASN - - - Added - - src/app/components/document-list/document-list.component.html - 163 - - - src/app/components/document-list/filter-editor/filter-editor.component.html - 65 - - - src/app/services/rest/document.service.ts - 23 - - أضيف - - - Edit document - - src/app/components/document-list/document-list.component.html - 182 - - تعديل المستند - - - View "" saved successfully. - - src/app/components/document-list/document-list.component.ts - 196 - - عرض "" حفظ بنجاح. - - - View "" created successfully. - - src/app/components/document-list/document-list.component.ts - 237 - - عرض "" أنشئ بنجاح. - - - Reset filters - - src/app/components/document-list/filter-editor/filter-editor.component.html - 78 - - إعادة تعيين التصفيات - - - Correspondent: - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 94,96 - - مراسل: - - - Without correspondent - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 98 - - بدون مراسل - - - Type: - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 103,105 - - نوع: - - - Without document type - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 107 - - بدون نوع المستند - - - Tag: - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 111,113 - - علامة: - - - Without any tag - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 117 - - بدون أي علامة - - - Title: - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 121 - - العنوان: - - - ASN: - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 124 - - ASN: - - - Title & content - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 156 - - العنوان & المحتوى - - - Advanced search - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 161 - - بحث متقدم - - - More like - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 167 - - أكثر مثله - - - equals - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 186 - - يساوي - - - is empty - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 190 - - فارغ - - - is not empty - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 194 - - غير فارغ - - - greater than - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 198 - - أكبر من - - - less than - - src/app/components/document-list/filter-editor/filter-editor.component.ts - 202 - - أقل من - - - Save current view - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 3 - - حفظ العرض الحالي - - - Show in sidebar - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 9 - - - src/app/components/manage/settings/settings.component.html - 208 - - عرض على الشريط الجانبي - - - Show on dashboard - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 10 - - - src/app/components/manage/settings/settings.component.html - 204 - - عرض على لوحة التحكم - - - Filter rules error occurred while saving this view - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 12 - - حدث خطأ في قواعد التصنيف في أثناء حفظ هذا العرض - - - The error returned was - - src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html - 13 - - الخطأ الذي أرجع كان - - - correspondent - - src/app/components/manage/correspondent-list/correspondent-list.component.ts - 33 - - مراسل - - - correspondents - - src/app/components/manage/correspondent-list/correspondent-list.component.ts - 34 - - مراسلون - - - Last used - - src/app/components/manage/correspondent-list/correspondent-list.component.ts - 38 - - آخر استخدام - - - Do you really want to delete the correspondent ""? - - src/app/components/manage/correspondent-list/correspondent-list.component.ts - 48 - - هل تريد حقاً حذف المراسل""؟ - - - document type - - src/app/components/manage/document-type-list/document-type-list.component.ts - 30 - - نوع المستند - - - document types - - src/app/components/manage/document-type-list/document-type-list.component.ts - 31 - - أنواع المستندات - - - Do you really want to delete the document type ""? - - src/app/components/manage/document-type-list/document-type-list.component.ts - 37 - - هل ترغب حقاً في حذف نوع المستند ""؟ - - - Create - - src/app/components/manage/management-list/management-list.component.html - 2 - - - src/app/components/manage/management-list/management-list.component.html - 2 - - - src/app/components/manage/management-list/management-list.component.html - 2 - - - src/app/components/manage/management-list/management-list.component.html - 2 - - إنشاء - - - Filter by: - - src/app/components/manage/management-list/management-list.component.html - 8 - - - src/app/components/manage/management-list/management-list.component.html - 8 - - - src/app/components/manage/management-list/management-list.component.html - 8 - - - src/app/components/manage/management-list/management-list.component.html - 8 - - تصفية حسب: - - - Matching - - src/app/components/manage/management-list/management-list.component.html - 20 - - - src/app/components/manage/management-list/management-list.component.html - 20 - - - src/app/components/manage/management-list/management-list.component.html - 20 - - - src/app/components/manage/management-list/management-list.component.html - 20 - - مطابقة - - - Document count - - src/app/components/manage/management-list/management-list.component.html - 21 - - - src/app/components/manage/management-list/management-list.component.html - 21 - - - src/app/components/manage/management-list/management-list.component.html - 21 - - - src/app/components/manage/management-list/management-list.component.html - 21 - - عدد المستندات - - - Filter Documents - - src/app/components/manage/management-list/management-list.component.html - 44 - - - src/app/components/manage/management-list/management-list.component.html - 44 - - - src/app/components/manage/management-list/management-list.component.html - 44 - - - src/app/components/manage/management-list/management-list.component.html - 44 - - تصفية المستندات - - - {VAR_PLURAL, plural, =1 {One } other { total }} - - src/app/components/manage/management-list/management-list.component.html - 74 - - - src/app/components/manage/management-list/management-list.component.html - 74 - - - src/app/components/manage/management-list/management-list.component.html - 74 - - - src/app/components/manage/management-list/management-list.component.html - 74 - - {VAR_PLURAL, plural, zero {} one { مجموع } two { مجموع } few { مجموع } many { مجموع }=1 {واحد } other { مجموع }} - - - Automatic - - src/app/components/manage/management-list/management-list.component.ts - 87 - - - src/app/data/matching-model.ts - 39 - - تلقائي - - - Successfully created . - - src/app/components/manage/management-list/management-list.component.ts - 127 - - أنشئ بنجاح . - - - Error occurred while creating : . - - src/app/components/manage/management-list/management-list.component.ts - 132,134 - - حدث خطأ في أثناء إنشاء : . - - - Successfully updated . - - src/app/components/manage/management-list/management-list.component.ts - 150 - - حدث بنجاح. - - - Error occurred while saving : . - - src/app/components/manage/management-list/management-list.component.ts - 155,157 - - حدث خطأ في أثناء حفظ : . - - - Do you really want to delete the ? - - src/app/components/manage/management-list/management-list.component.ts - 164 - - هل تريد حقاً حذف ؟ - - - Associated documents will not be deleted. - - src/app/components/manage/management-list/management-list.component.ts - 179 - - لن تحذف المستندات المرتبطة بها. - - - Error while deleting element: - - src/app/components/manage/management-list/management-list.component.ts - 192,194 - - حدث خطأ في أثناء حذف العنصر: - - - Start tour - - src/app/components/manage/settings/settings.component.html - 2 - - بدء جولة - - - Open Django Admin - - src/app/components/manage/settings/settings.component.html - 4 - - فتح مسؤول Django - - - General - - src/app/components/manage/settings/settings.component.html - 15 - - عام - - - Appearance - - src/app/components/manage/settings/settings.component.html - 18 - - المظهر - - - Display language - - src/app/components/manage/settings/settings.component.html - 22 - - لغة العرض - - - You need to reload the page after applying a new language. - - src/app/components/manage/settings/settings.component.html - 30 - - يجب إعادة تحميل الصفحة بعد تطبيق لغة جديدة. - - - Date display - - src/app/components/manage/settings/settings.component.html - 37 - - عرض التاريخ - - - Date format - - src/app/components/manage/settings/settings.component.html - 50 - - تنسيق التاريخ - - - Short: - - src/app/components/manage/settings/settings.component.html - 56 - - قصير: - - - Medium: - - src/app/components/manage/settings/settings.component.html - 60 - - متوسط: - - - Long: - - src/app/components/manage/settings/settings.component.html - 64 - - طويل: - - - Items per page - - src/app/components/manage/settings/settings.component.html - 72 - - العناصر لكل صفحة - - - Document editor - - src/app/components/manage/settings/settings.component.html - 88 - - محرر المستند - - - Use PDF viewer provided by the browser - - src/app/components/manage/settings/settings.component.html - 92 - - استخدم عارض PDF المقدم من المتصفح - - - This is usually faster for displaying large PDF documents, but it might not work on some browsers. - - src/app/components/manage/settings/settings.component.html - 92 - - عادة ما يكون هذا أسرع لعرض مستندات PDF الكبيرة، ولكن قد لا يعمل على بعض المتصفحات. - - - Sidebar - - src/app/components/manage/settings/settings.component.html - 99 - - الشريط الجانبي - - - Use 'slim' sidebar (icons only) - - src/app/components/manage/settings/settings.component.html - 103 - - استخدم الشريط الجانبي 'نحيف' (الأيقونات فقط) - - - Dark mode - - src/app/components/manage/settings/settings.component.html - 110 - - الوضع المظلم - - - Use system settings - - src/app/components/manage/settings/settings.component.html - 113 - - استخدم إعدادات النظام - - - Enable dark mode - - src/app/components/manage/settings/settings.component.html - 114 - - تفعيل الوضع المظلم - - - Invert thumbnails in dark mode - - src/app/components/manage/settings/settings.component.html - 115 - - عكس الصور المصغرة في الوضع المظلم - - - Theme Color - - src/app/components/manage/settings/settings.component.html - 121 - - لون السمة - - - Reset - - src/app/components/manage/settings/settings.component.html - 130 - - إعادة تعيين - - - Update checking - - src/app/components/manage/settings/settings.component.html - 135 - - التحقق من التحديث - - - Update checking works by pinging the the public Github API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. - - src/app/components/manage/settings/settings.component.html - 139,142 - - تحديث التحقق يعمل بأرسال إشارات الى العام Github API للحصول على أحدث إصدار لتحديد ما إذا كان الإصدار الجديد متاحا. لا يزال يتعين إجراء التحديث الفعلي للتطبيق يدويا. - - - No tracking data is collected by the app in any way. - - src/app/components/manage/settings/settings.component.html - 144 - - لا يتم جمع أي بيانات تتبع بواسطة التطبيق بأي طريقة. - - - Enable update checking - - src/app/components/manage/settings/settings.component.html - 146 - - تمكين التحقق من التحديث - - - Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release. - - src/app/components/manage/settings/settings.component.html - 146 - - لاحظ أنه بالنسبة لمستخدمي حاويات الطرف الثالث، مثل linuxserver.io قد يكون هذا الإشعار "أمام" من الإصدار الحالي من طرف ثالث. - - - Bulk editing - - src/app/components/manage/settings/settings.component.html - 150 - - تعديل متعدد - - - Show confirmation dialogs - - src/app/components/manage/settings/settings.component.html - 154 - - إظهار تأكيد الحِوَارات - - - Deleting documents will always ask for confirmation. - - src/app/components/manage/settings/settings.component.html - 154 - - حذف المستندات سيطلب التأكيد دائما. - - - Apply on close - - src/app/components/manage/settings/settings.component.html - 155 - - تطبيق عند الإغلاق - - - Enable comments - - src/app/components/manage/settings/settings.component.html - 163 - - تمكين التعليقات - - - Notifications - - src/app/components/manage/settings/settings.component.html - 171 - - الإشعارات - - - Document processing - - src/app/components/manage/settings/settings.component.html - 174 - - معالجة المستندات - - - Show notifications when new documents are detected - - src/app/components/manage/settings/settings.component.html - 178 - - إظهار الإشعارات عند وجود مستندات جديدة - - - Show notifications when document processing completes successfully - - src/app/components/manage/settings/settings.component.html - 179 - - إظهار الإشعارات عند اكتمال معالجة المستندات بنجاح - - - Show notifications when document processing fails - - src/app/components/manage/settings/settings.component.html - 180 - - إظهار الإشعارات عند فشل معالجة المستندات - - - Suppress notifications on dashboard - - src/app/components/manage/settings/settings.component.html - 181 - - منع الإشعارات في لوحة التحكم - - - This will suppress all messages about document processing status on the dashboard. - - src/app/components/manage/settings/settings.component.html - 181 - - سيؤدي هذا إلى إلغاء جميع الرسائل حول حالة معالجة المستندات في لوحة التحكم. - - - Appears on - - src/app/components/manage/settings/settings.component.html - 201 - - يظهر في - - - No saved views defined. - - src/app/components/manage/settings/settings.component.html - 218 - - لا توجد آراء محفوظة. - - - Mail - - src/app/components/manage/settings/settings.component.html - 231 - - البريد - - - Mail accounts - - src/app/components/manage/settings/settings.component.html - 236 - - حسابات البريد - - - Add Account - - src/app/components/manage/settings/settings.component.html - 241 - - إضافة حساب - - - Server - - src/app/components/manage/settings/settings.component.html - 249 - - خادم - - - No mail accounts defined. - - src/app/components/manage/settings/settings.component.html - 267 - - لا توجد حسابات بريدية. - - - Mail rules - - src/app/components/manage/settings/settings.component.html - 271 - - قواعد البريد - - - Add Rule - - src/app/components/manage/settings/settings.component.html - 276 - - إضافة قاعدة - - - No mail rules defined. - - src/app/components/manage/settings/settings.component.html - 302 - - لا توجد قواعد للبريد. - - - Saved view "" deleted. - - src/app/components/manage/settings/settings.component.ts - 383 - - العرض المحفوظ "" مُسح. - - - Settings saved - - src/app/components/manage/settings/settings.component.ts - 476 - - الإعدادات حُفظت - - - Settings were saved successfully. - - src/app/components/manage/settings/settings.component.ts - 477 - - حُفظت الإعدادات بنجاح. - - - Settings were saved successfully. Reload is required to apply some changes. - - src/app/components/manage/settings/settings.component.ts - 481 - - حفظت الإعدادات بنجاح. إعادة تحميل مطلوب لتطبيق بعض التغييرات. - - - Reload now - - src/app/components/manage/settings/settings.component.ts - 482 - - إعادة تحميل الآن - - - Use system language - - src/app/components/manage/settings/settings.component.ts - 500 - - استخدم لغة النظام - - - Use date format of display language - - src/app/components/manage/settings/settings.component.ts - 507 - - استخدم تنسيق تاريخ لغة العرض - - - Error while storing settings on server: - - src/app/components/manage/settings/settings.component.ts - 527,529 - - خطأ في أثناء حفظ الإعدادات على الخادم: - - - Saved account "". - - src/app/components/manage/settings/settings.component.ts - 554 - - حفظ الحساب"". - - - Error saving account: . - - src/app/components/manage/settings/settings.component.ts - 564 - - خطأ في حفظ الحساب: . - - - Confirm delete mail account - - src/app/components/manage/settings/settings.component.ts - 574 - - تأكيد حذف حساب البريد - - - This operation will permanently delete this mail account. - - src/app/components/manage/settings/settings.component.ts - 575 - - هذه العملية ستقوم بحذف حساب البريد هذا بشكل دائم. - - - Deleted mail account - - src/app/components/manage/settings/settings.component.ts - 584 - - تم حذف حساب البريد - - - Error deleting mail account: . - - src/app/components/manage/settings/settings.component.ts - 593 - - خطأ في حذف حساب البريد: . - - - Saved rule "". - - src/app/components/manage/settings/settings.component.ts - 612 - - قاعدة محفوظة "". - - - Error saving rule: . - - src/app/components/manage/settings/settings.component.ts - 623 - - خطأ في حفظ القاعدة: . - - - Confirm delete mail rule - - src/app/components/manage/settings/settings.component.ts - 633 - - تأكيد حذف حساب البريد - - - This operation will permanently delete this mail rule. - - src/app/components/manage/settings/settings.component.ts - 634 - - هذه العملية ستقوم بحذف قاعدة البريد هذه بشكل دائم. - - - Deleted mail rule - - src/app/components/manage/settings/settings.component.ts - 643 - - تم حذف قاعدة البريد - - - Error deleting mail rule: . - - src/app/components/manage/settings/settings.component.ts - 652 - - خطأ في حذف قاعدة البريد: . - - - storage path - - src/app/components/manage/storage-path-list/storage-path-list.component.ts - 30 - - مسار التخزين - - - storage paths - - src/app/components/manage/storage-path-list/storage-path-list.component.ts - 31 - - مسارات التخزين - - - Do you really want to delete the storage path ""? - - src/app/components/manage/storage-path-list/storage-path-list.component.ts - 45 - - هل تريد حقاً حذف مسار التخزين ""؟ - - - tag - - src/app/components/manage/tag-list/tag-list.component.ts - 30 - - علامة - - - tags - - src/app/components/manage/tag-list/tag-list.component.ts - 31 - - علامات - - - Do you really want to delete the tag ""? - - src/app/components/manage/tag-list/tag-list.component.ts - 46 - - هل ترغب حقاً في حذف العلامة ""؟ - - - Clear selection - - src/app/components/manage/tasks/tasks.component.html - 6 - - إزالة التحديد - - - - - - - src/app/components/manage/tasks/tasks.component.html - 11 - - - - - Refresh - - src/app/components/manage/tasks/tasks.component.html - 20 - - تحديث - - - Results - - src/app/components/manage/tasks/tasks.component.html - 42 - - النتائج - - - click for full output - - src/app/components/manage/tasks/tasks.component.html - 66 - - انقر لمشاهدة كامل الإخراج - - - Dismiss - - src/app/components/manage/tasks/tasks.component.html - 81 - - - src/app/components/manage/tasks/tasks.component.ts - 56 - - رفض - - - Open Document - - src/app/components/manage/tasks/tasks.component.html - 86 - - فتح مستند - - - Failed  - - src/app/components/manage/tasks/tasks.component.html - 103 - - فشل  - - - Complete  - - src/app/components/manage/tasks/tasks.component.html - 109 - - مكتمل  - - - Started  - - src/app/components/manage/tasks/tasks.component.html - 115 - - بدأ  - - - Queued  - - src/app/components/manage/tasks/tasks.component.html - 121 - - الانتظار  - - - Dismiss selected - - src/app/components/manage/tasks/tasks.component.ts - 22 - - تحديد الرفض - - - Dismiss all - - src/app/components/manage/tasks/tasks.component.ts - 23 - - - src/app/components/manage/tasks/tasks.component.ts - 54 - - رفض الجميع - - - Confirm Dismiss All - - src/app/components/manage/tasks/tasks.component.ts - 52 - - تأكيد رفض الكل - - - tasks? - - src/app/components/manage/tasks/tasks.component.ts - 54 - - مهام؟ - - - 404 Not Found - - src/app/components/not-found/not-found.component.html - 7 - - 404 غير متوفر - - - Any word - - src/app/data/matching-model.ts - 14 - - أي كلمة - - - Any: Document contains any of these words (space separated) - - src/app/data/matching-model.ts - 15 - - أي: مستند يحوي أي من هذه الكلمات (فراغ فاصل) - - - All words - - src/app/data/matching-model.ts - 19 - - كل الكلمات - - - All: Document contains all of these words (space separated) - - src/app/data/matching-model.ts - 20 - - أي: مستند يحوي كل هذه الكلمات (فراغ فاصل) - - - Exact match - - src/app/data/matching-model.ts - 24 - - تطابق تام - - - Exact: Document contains this string - - src/app/data/matching-model.ts - 25 - - بالضبط: المستند يحتوي على هذه الكلمة - - - Regular expression - - src/app/data/matching-model.ts - 29 - - التعابير النظامية - - - Regular expression: Document matches this regular expression - - src/app/data/matching-model.ts - 30 - - التعابير النظامية: المستند يطابق هذا التعبير النظامي - - - Fuzzy word - - src/app/data/matching-model.ts - 34 - - كلمة غامضة - - - Fuzzy: Document contains a word similar to this word - - src/app/data/matching-model.ts - 35 - - غامض: المستند يحوي كلمة مشابهة لهذه الكلمة - - - Auto: Learn matching automatically - - src/app/data/matching-model.ts - 40 - - تلقائياً: تعلم المطابقة تلقائيًا - - - Warning: You have unsaved changes to your document(s). - - src/app/guards/dirty-doc.guard.ts - 17 - - تحذير: لديك تغييرات غير محفوظة للمستند(المستندات). - - - Unsaved Changes - - src/app/guards/dirty-form.guard.ts - 17 - - - src/app/guards/dirty-saved-view.guard.ts - 24 - - - src/app/services/open-documents.service.ts - 103 - - - src/app/services/open-documents.service.ts - 130 - - لم تحفظ تغييرات - - - You have unsaved changes. - - src/app/guards/dirty-form.guard.ts - 18 - - - src/app/services/open-documents.service.ts - 131 - - لديك تغييرات لم تحفظ. - - - Are you sure you want to leave? - - src/app/guards/dirty-form.guard.ts - 19 - - متيقِّن من المغادرة؟ - - - Leave page - - src/app/guards/dirty-form.guard.ts - 21 - - غادر الصفحة - - - You have unsaved changes to the saved view - - src/app/guards/dirty-saved-view.guard.ts - 26 - - لديك تغييرات غير محفوظة في العرض المحفوظ - - - Are you sure you want to close this saved view? - - src/app/guards/dirty-saved-view.guard.ts - 30 - - متيقِّن من إغلاق هذا العرض المحفوظ؟ - - - Save and close - - src/app/guards/dirty-saved-view.guard.ts - 34 - - حفظ و إغلاق - - - (no title) - - src/app/pipes/document-title.pipe.ts - 11 - - (بدون عنوان) - - - Yes - - src/app/pipes/yes-no.pipe.ts - 8 - - نعم - - - No - - src/app/pipes/yes-no.pipe.ts - 8 - - لا - - - Document already exists. - - src/app/services/consumer-status.service.ts - 15 - - المستند موجود مسبقاً. - - - File not found. - - src/app/services/consumer-status.service.ts - 16 - - لم يعثر على الملف. - - - Pre-consume script does not exist. - - src/app/services/consumer-status.service.ts - 17 - - Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - البرنامَج النصي قبل-الاستهلاك غير موجود. - - - Error while executing pre-consume script. - - src/app/services/consumer-status.service.ts - 18 - - Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation - حدث خطأ في أثناء تنفيذ البرنامَج النصي قبل-الاستهلاك. - - - Post-consume script does not exist. - - src/app/services/consumer-status.service.ts - 19 - - Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - البرنامَج النصي بعد-الاستهلاك غير موجود. - - - Error while executing post-consume script. - - src/app/services/consumer-status.service.ts - 20 - - Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation - حدث خطأ في أثناء تنفيذ البرنامَج النصي بعد-الاستهلاك. - - - Received new file. - - src/app/services/consumer-status.service.ts - 21 - - استلم ملف جديد. - - - File type not supported. - - src/app/services/consumer-status.service.ts - 22 - - نوع الملف غير مدعوم. - - - Processing document... - - src/app/services/consumer-status.service.ts - 23 - - معالجة الوثيقة... - - - Generating thumbnail... - - src/app/services/consumer-status.service.ts - 24 - - إنشاء مصغرات... - - - Retrieving date from document... - - src/app/services/consumer-status.service.ts - 25 - - استرداد التاريخ من المستند... - - - Saving document... - - src/app/services/consumer-status.service.ts - 26 - - حفظ المستند... - - - Finished. - - src/app/services/consumer-status.service.ts - 27 - - انتهى. - - - You have unsaved changes to the document - - src/app/services/open-documents.service.ts - 105 - - لديك تغييرات في المستند غير محفوظة - - - Are you sure you want to close this document? - - src/app/services/open-documents.service.ts - 109 - - هل أنت متيقِّن من إغلاق هذا المستند؟ - - - Close document - - src/app/services/open-documents.service.ts - 111 - - إغلاق المستند - - - Are you sure you want to close all documents? - - src/app/services/open-documents.service.ts - 132 - - هل أنت متيقِّن من إغلاق كافة المستندات؟ - - - Close documents - - src/app/services/open-documents.service.ts - 134 - - إغلاق المستندات - - - Modified - - src/app/services/rest/document.service.ts - 24 - - تعديل - - - Search score - - src/app/services/rest/document.service.ts - 31 - - Score is a value returned by the full text search engine and specifies how well a result matches the given query - نقاط البحث - - - English (US) - - src/app/services/settings.service.ts - 145 - - الإنجليزية (الولايات المتحدة) - - - Belarusian - - src/app/services/settings.service.ts - 151 - - البيلاروسية - - - Czech - - src/app/services/settings.service.ts - 157 - - التشيكية - - - Danish - - src/app/services/settings.service.ts - 163 - - الدانماركية - - - German - - src/app/services/settings.service.ts - 169 - - الألمانية - - - English (GB) - - src/app/services/settings.service.ts - 175 - - الإنجليزية (المملكة المتحدة) - - - Spanish - - src/app/services/settings.service.ts - 181 - - الإسبانية - - - French - - src/app/services/settings.service.ts - 187 - - الفرنسية - - - Italian - - src/app/services/settings.service.ts - 193 - - الإيطالية - - - Luxembourgish - - src/app/services/settings.service.ts - 199 - - اللوكسمبرجية - - - Dutch - - src/app/services/settings.service.ts - 205 - - الهولندية - - - Polish - - src/app/services/settings.service.ts - 211 - - البولندية - - - Portuguese (Brazil) - - src/app/services/settings.service.ts - 217 - - البرتغالية (البرازيل) - - - Portuguese - - src/app/services/settings.service.ts - 223 - - البرتغالية - - - Romanian - - src/app/services/settings.service.ts - 229 - - الرومانية - - - Russian - - src/app/services/settings.service.ts - 235 - - الروسية - - - Slovenian - - src/app/services/settings.service.ts - 241 - - السلوفانية - - - Serbian - - src/app/services/settings.service.ts - 247 - - الصربية - - - Swedish - - src/app/services/settings.service.ts - 253 - - السويدية - - - Turkish - - src/app/services/settings.service.ts - 259 - - التركية - - - Chinese Simplified - - src/app/services/settings.service.ts - 265 - - الصينية المبسطة - - - ISO 8601 - - src/app/services/settings.service.ts - 282 - - ISO 8601 - - - Successfully completed one-time migratration of settings to the database! - - src/app/services/settings.service.ts - 393 - - تم بنجاح ترحيل الإعدادات مرة واحدة إلى قاعدة البيانات! - - - Unable to migrate settings to the database, please try saving manually. - - src/app/services/settings.service.ts - 394 - - غير قادر على ترحيل الإعدادات إلى قاعدة البيانات، الرجاء محاولة الحفظ يدوياً. - - - Information - - src/app/services/toast.service.ts - 36 - - معلومات - - - Connecting... - - src/app/services/upload-documents.service.ts - 31 - - الاتصال... - - - Uploading... - - src/app/services/upload-documents.service.ts - 43 - - التحميل... - - - Upload complete, waiting... - - src/app/services/upload-documents.service.ts - 46 - - اكتمل الرفع، انتظر... - - - HTTP error: - - src/app/services/upload-documents.service.ts - 62 - - خطأ HTTP: - - - - From 906d5d0bab2dc4fee6e22e04da1eedcd0de627b8 Mon Sep 17 00:00:00 2001 From: Khaled Emad <39046027+KhaledEmad7@users.noreply.github.com> Date: Mon, 2 Jan 2023 10:07:18 +0200 Subject: [PATCH 02/16] Adding arabic language --- src-ui/angular.json | 1 + src-ui/src/app/app.module.ts | 2 ++ src-ui/src/app/services/settings.service.ts | 6 ++++++ src/paperless/settings.py | 1 + 4 files changed, 10 insertions(+) diff --git a/src-ui/angular.json b/src-ui/angular.json index 1fba4c429..9c06e8b92 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -16,6 +16,7 @@ "i18n": { "sourceLocale": "en-US", "locales": { + "ar-AR": "src/locale/messages.ar_AR.xlf", "be-BY": "src/locale/messages.be_BY.xlf", "cs-CZ": "src/locale/messages.cs_CZ.xlf", "da-DK": "src/locale/messages.da_DK.xlf", diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 70939b928..581d788d5 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -80,6 +80,7 @@ import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap' import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' import { MailRuleEditDialogComponent } from './components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component' +import localeAr from '@angular/common/locales/ar' import localeBe from '@angular/common/locales/be' import localeCs from '@angular/common/locales/cs' import localeDa from '@angular/common/locales/da' @@ -100,6 +101,7 @@ import localeSv from '@angular/common/locales/sv' import localeTr from '@angular/common/locales/tr' import localeZh from '@angular/common/locales/zh' +registerLocaleData(localeAr) registerLocaleData(localeBe) registerLocaleData(localeCs) registerLocaleData(localeDa) diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 24b2d67ce..d111acd76 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -146,6 +146,12 @@ export class SettingsService { englishName: 'English (US)', dateInputFormat: 'mm/dd/yyyy', }, + { + code: 'ar-ar', + name: $localize`Arabic`, + englishName: 'Arabic', + dateInputFormat: 'yyyy-mm-dd', + }, { code: 'be-by', name: $localize`Belarusian`, diff --git a/src/paperless/settings.py b/src/paperless/settings.py index e16662c5a..cc1b9e096 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -420,6 +420,7 @@ LANGUAGE_CODE = "en-us" LANGUAGES = [ ("en-us", _("English (US)")), # needs to be first to act as fallback language + ("ar-ar", _("Arabic")), ("be-by", _("Belarusian")), ("cs-cz", _("Czech")), ("da-dk", _("Danish")), From 428fe4a3728335eb5f0b2b4fd4098d04a5b38e32 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 Jan 2023 11:42:39 -0800 Subject: [PATCH 03/16] Update messages.ar_AR.xlf --- src-ui/src/locale/messages.ar_AR.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/locale/messages.ar_AR.xlf b/src-ui/src/locale/messages.ar_AR.xlf index d51e2338d..90b2a8ed1 100644 --- a/src-ui/src/locale/messages.ar_AR.xlf +++ b/src-ui/src/locale/messages.ar_AR.xlf @@ -1,6 +1,6 @@ - + Close From 62782be08ef6f6025decca2198e54ad698ecdf9e Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 2 Jan 2023 11:51:19 -0800 Subject: [PATCH 04/16] fix django arabic translation file [ci skip] --- src/locale/ar_AR/LC_MESSAGES/django.po | 796 ++++++++++++---------- src/locale/ar_SA/LC_MESSAGES/django.po | 878 ------------------------- 2 files changed, 454 insertions(+), 1220 deletions(-) delete mode 100644 src/locale/ar_SA/LC_MESSAGES/django.po diff --git a/src/locale/ar_AR/LC_MESSAGES/django.po b/src/locale/ar_AR/LC_MESSAGES/django.po index c6fc471e9..6f68e729f 100644 --- a/src/locale/ar_AR/LC_MESSAGES/django.po +++ b/src/locale/ar_AR/LC_MESSAGES/django.po @@ -2,10 +2,10 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-08 14:11-0700\n" -"PO-Revision-Date: 2022-10-20 23:30\n" +"POT-Creation-Date: 2022-11-09 21:50+0000\n" +"PO-Revision-Date: 2022-12-09 07:39\n" "Last-Translator: \n" -"Language-Team: Arabic, Arabic\n" +"Language-Team: Arabic\n" "Language: ar_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -13,754 +13,866 @@ msgstr "" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Crowdin-Project: paperless-ngx\n" "X-Crowdin-Project-ID: 500308\n" -"X-Crowdin-Language: ar-AR\n" +"X-Crowdin-Language: ar\n" "X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 14\n" #: documents/apps.py:9 msgid "Documents" -msgstr "" - -#: documents/models.py:29 -msgid "Any word" -msgstr "" - -#: documents/models.py:30 -msgid "All words" -msgstr "" - -#: documents/models.py:31 -msgid "Exact match" -msgstr "" +msgstr "المستندات" #: documents/models.py:32 -msgid "Regular expression" -msgstr "" +msgid "Any word" +msgstr "أي كلمة" #: documents/models.py:33 -msgid "Fuzzy word" -msgstr "" +msgid "All words" +msgstr "كل الكلمات" #: documents/models.py:34 -msgid "Automatic" -msgstr "" +msgid "Exact match" +msgstr "تطابق تام" -#: documents/models.py:37 documents/models.py:354 paperless_mail/models.py:16 +#: documents/models.py:35 +msgid "Regular expression" +msgstr "التعابير النظامية" + +#: documents/models.py:36 +msgid "Fuzzy word" +msgstr "كلمة غامضة" + +#: documents/models.py:37 +msgid "Automatic" +msgstr "تلقائي" + +#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16 #: paperless_mail/models.py:80 msgid "name" -msgstr "" - -#: documents/models.py:39 -msgid "match" -msgstr "" +msgstr "اسم" #: documents/models.py:42 +msgid "match" +msgstr "تطابق" + +#: documents/models.py:45 msgid "matching algorithm" -msgstr "" +msgstr "خوارزمية مطابقة" -#: documents/models.py:47 +#: documents/models.py:50 msgid "is insensitive" -msgstr "" +msgstr "غير حساس" -#: documents/models.py:60 documents/models.py:115 +#: documents/models.py:63 documents/models.py:118 msgid "correspondent" -msgstr "" +msgstr "مراسل" -#: documents/models.py:61 +#: documents/models.py:64 msgid "correspondents" -msgstr "" - -#: documents/models.py:66 -msgid "color" -msgstr "" +msgstr "مراسلون" #: documents/models.py:69 -msgid "is inbox tag" -msgstr "" +msgid "color" +msgstr "لون" #: documents/models.py:72 +msgid "is inbox tag" +msgstr "علامة علبة الوارد" + +#: documents/models.py:75 msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "" +msgstr "ضع علامة على هذه السمة كعلامة علبة الوارد: سيتم وضع علامة على جميع المستندات المستهلكة حديثا مع علامات صندوق الواردات." -#: documents/models.py:78 +#: documents/models.py:81 msgid "tag" -msgstr "" +msgstr "علامة" -#: documents/models.py:79 documents/models.py:153 +#: documents/models.py:82 documents/models.py:156 msgid "tags" -msgstr "" +msgstr "علامات" -#: documents/models.py:84 documents/models.py:135 +#: documents/models.py:87 documents/models.py:138 msgid "document type" -msgstr "" +msgstr "نوع المستند" -#: documents/models.py:85 +#: documents/models.py:88 msgid "document types" -msgstr "" +msgstr "أنواع المستندات" -#: documents/models.py:90 +#: documents/models.py:93 msgid "path" -msgstr "" +msgstr "مسار" -#: documents/models.py:96 documents/models.py:124 +#: documents/models.py:99 documents/models.py:127 msgid "storage path" -msgstr "" +msgstr "مسار التخزين" -#: documents/models.py:97 +#: documents/models.py:100 msgid "storage paths" -msgstr "" +msgstr "مسارات التخزين" -#: documents/models.py:105 +#: documents/models.py:108 msgid "Unencrypted" -msgstr "" +msgstr "دون تشفير" -#: documents/models.py:106 +#: documents/models.py:109 msgid "Encrypted with GNU Privacy Guard" -msgstr "" +msgstr "مشفر باستخدام حارس خصوصية غنو" -#: documents/models.py:127 +#: documents/models.py:130 msgid "title" -msgstr "" +msgstr "عنوان" -#: documents/models.py:139 +#: documents/models.py:142 documents/models.py:611 msgid "content" -msgstr "" +msgstr "محتوى" -#: documents/models.py:142 +#: documents/models.py:145 msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "" +msgstr "الخام, فقط النص من المستند. يستخدم هذا الحقل أساسا للبحث." -#: documents/models.py:147 +#: documents/models.py:150 msgid "mime type" -msgstr "" +msgstr "MIME type" -#: documents/models.py:157 +#: documents/models.py:160 msgid "checksum" -msgstr "" +msgstr "بصمة الملف" -#: documents/models.py:161 +#: documents/models.py:164 msgid "The checksum of the original document." -msgstr "" +msgstr "بصمة الملف للمستند الأصلي." -#: documents/models.py:165 +#: documents/models.py:168 msgid "archive checksum" -msgstr "" +msgstr "بصمة الملف للربيدة" -#: documents/models.py:170 +#: documents/models.py:173 msgid "The checksum of the archived document." -msgstr "" +msgstr "بصمة الملف للمستند الربيدة." -#: documents/models.py:173 documents/models.py:335 documents/models.py:520 +#: documents/models.py:176 documents/models.py:348 documents/models.py:617 msgid "created" -msgstr "" +msgstr "أُنشئ" -#: documents/models.py:176 +#: documents/models.py:179 msgid "modified" -msgstr "" +msgstr "مُعدّل" -#: documents/models.py:183 +#: documents/models.py:186 msgid "storage type" -msgstr "" +msgstr "نوع التخزين" -#: documents/models.py:191 +#: documents/models.py:194 msgid "added" -msgstr "" +msgstr "أضيف" -#: documents/models.py:198 +#: documents/models.py:201 msgid "filename" -msgstr "" +msgstr "اسم الملف" -#: documents/models.py:204 +#: documents/models.py:207 msgid "Current filename in storage" -msgstr "" +msgstr "اسم الملف الحالي في التخزين" -#: documents/models.py:208 +#: documents/models.py:211 msgid "archive filename" -msgstr "" +msgstr "اسم الربيدة" -#: documents/models.py:214 +#: documents/models.py:217 msgid "Current archive filename in storage" -msgstr "" +msgstr "اسم ملف الربيدة الحالي في التخزين" -#: documents/models.py:218 -msgid "archive serial number" -msgstr "" +#: documents/models.py:221 +msgid "original filename" +msgstr "اسم الملف الأصلي" -#: documents/models.py:224 -msgid "The position of this document in your physical document archive." -msgstr "" - -#: documents/models.py:230 -msgid "document" -msgstr "" +#: documents/models.py:227 +msgid "The original name of the file when it was uploaded" +msgstr "اسم الملف الأصلي عند تحميله" #: documents/models.py:231 +msgid "archive serial number" +msgstr "الرقم التسلسلي للربيدة" + +#: documents/models.py:237 +msgid "The position of this document in your physical document archive." +msgstr "موقع هذا المستند في ربيدة المستند الفيزيائي." + +#: documents/models.py:243 documents/models.py:628 +msgid "document" +msgstr "مستند" + +#: documents/models.py:244 msgid "documents" -msgstr "" +msgstr "المستندات" -#: documents/models.py:318 +#: documents/models.py:331 msgid "debug" -msgstr "" +msgstr "تصحيح الأخطاء" -#: documents/models.py:319 +#: documents/models.py:332 msgid "information" -msgstr "" +msgstr "معلومات" -#: documents/models.py:320 +#: documents/models.py:333 msgid "warning" -msgstr "" +msgstr "تحذير" -#: documents/models.py:321 +#: documents/models.py:334 msgid "error" -msgstr "" +msgstr "خطأ" -#: documents/models.py:322 +#: documents/models.py:335 msgid "critical" -msgstr "" +msgstr "الحرجة" -#: documents/models.py:325 +#: documents/models.py:338 msgid "group" -msgstr "" - -#: documents/models.py:327 -msgid "message" -msgstr "" - -#: documents/models.py:330 -msgid "level" -msgstr "" - -#: documents/models.py:339 -msgid "log" -msgstr "" +msgstr "مجموعة" #: documents/models.py:340 -msgid "logs" -msgstr "" +msgid "message" +msgstr "رسالة" -#: documents/models.py:350 documents/models.py:403 -msgid "saved view" -msgstr "" +#: documents/models.py:343 +msgid "level" +msgstr "المستوى" -#: documents/models.py:351 -msgid "saved views" -msgstr "" +#: documents/models.py:352 +msgid "log" +msgstr "سجل" #: documents/models.py:353 -msgid "user" -msgstr "" +msgid "logs" +msgstr "السجلات" -#: documents/models.py:357 -msgid "show on dashboard" -msgstr "" - -#: documents/models.py:360 -msgid "show in sidebar" -msgstr "" +#: documents/models.py:363 documents/models.py:419 +msgid "saved view" +msgstr "العرض المحفوظ" #: documents/models.py:364 -msgid "sort field" -msgstr "" +msgid "saved views" +msgstr "العروض المحفوظة" -#: documents/models.py:369 -msgid "sort reverse" -msgstr "" +#: documents/models.py:366 documents/models.py:637 +msgid "user" +msgstr "المستخدم" -#: documents/models.py:374 -msgid "title contains" -msgstr "" +#: documents/models.py:370 +msgid "show on dashboard" +msgstr "عرض على لوحة التحكم" -#: documents/models.py:375 -msgid "content contains" -msgstr "" - -#: documents/models.py:376 -msgid "ASN is" -msgstr "" +#: documents/models.py:373 +msgid "show in sidebar" +msgstr "عرض على الشريط الجانبي" #: documents/models.py:377 -msgid "correspondent is" -msgstr "" - -#: documents/models.py:378 -msgid "document type is" -msgstr "" - -#: documents/models.py:379 -msgid "is in inbox" -msgstr "" - -#: documents/models.py:380 -msgid "has tag" -msgstr "" - -#: documents/models.py:381 -msgid "has any tag" -msgstr "" +msgid "sort field" +msgstr "فرز الحقل" #: documents/models.py:382 -msgid "created before" -msgstr "" - -#: documents/models.py:383 -msgid "created after" -msgstr "" - -#: documents/models.py:384 -msgid "created year is" -msgstr "" - -#: documents/models.py:385 -msgid "created month is" -msgstr "" - -#: documents/models.py:386 -msgid "created day is" -msgstr "" +msgid "sort reverse" +msgstr "فرز بالعكس" #: documents/models.py:387 -msgid "added before" -msgstr "" +msgid "title contains" +msgstr "العنوان يحتوي" #: documents/models.py:388 -msgid "added after" -msgstr "" +msgid "content contains" +msgstr "المحتوى يحتوي" #: documents/models.py:389 -msgid "modified before" -msgstr "" +msgid "ASN is" +msgstr "ASN هو" #: documents/models.py:390 -msgid "modified after" -msgstr "" +msgid "correspondent is" +msgstr "المراسل هو" #: documents/models.py:391 -msgid "does not have tag" -msgstr "" +msgid "document type is" +msgstr "نوع المستند" #: documents/models.py:392 -msgid "does not have ASN" -msgstr "" +msgid "is in inbox" +msgstr "موجود في علبة الوارد" #: documents/models.py:393 -msgid "title or content contains" -msgstr "" +msgid "has tag" +msgstr "لديه علامة" #: documents/models.py:394 -msgid "fulltext query" -msgstr "" +msgid "has any tag" +msgstr "لديه أي وسم" #: documents/models.py:395 -msgid "more like this" -msgstr "" +msgid "created before" +msgstr "أنشئت قبل" #: documents/models.py:396 -msgid "has tags in" -msgstr "" +msgid "created after" +msgstr "أنشئت بعد" + +#: documents/models.py:397 +msgid "created year is" +msgstr "أنشئت سنة" + +#: documents/models.py:398 +msgid "created month is" +msgstr "أنشئت شهر" + +#: documents/models.py:399 +msgid "created day is" +msgstr "أنشئت يوم" + +#: documents/models.py:400 +msgid "added before" +msgstr "أضيف قبل" + +#: documents/models.py:401 +msgid "added after" +msgstr "أضيف بعد" + +#: documents/models.py:402 +msgid "modified before" +msgstr "عُدِّل قبل" + +#: documents/models.py:403 +msgid "modified after" +msgstr "عُدِّل بعد" + +#: documents/models.py:404 +msgid "does not have tag" +msgstr "ليس لديه علامة" + +#: documents/models.py:405 +msgid "does not have ASN" +msgstr "ليس لديه ASN" #: documents/models.py:406 -msgid "rule type" -msgstr "" +msgid "title or content contains" +msgstr "العنوان أو المحتوى يحتوي" + +#: documents/models.py:407 +msgid "fulltext query" +msgstr "استعلام كامل النص" #: documents/models.py:408 -msgid "value" -msgstr "" +msgid "more like this" +msgstr "أخرى مثلها" + +#: documents/models.py:409 +msgid "has tags in" +msgstr "لديه علامات في" + +#: documents/models.py:410 +msgid "ASN greater than" +msgstr "ASN أكبر من" #: documents/models.py:411 -msgid "filter rule" -msgstr "" +msgid "ASN less than" +msgstr "ASN أقل من" #: documents/models.py:412 +msgid "storage path is" +msgstr "مسار التخزين" + +#: documents/models.py:422 +msgid "rule type" +msgstr "نوع القاعدة" + +#: documents/models.py:424 +msgid "value" +msgstr "قيمة" + +#: documents/models.py:427 +msgid "filter rule" +msgstr "تصفية القاعدة" + +#: documents/models.py:428 msgid "filter rules" -msgstr "" +msgstr "تصفية القواعد" -#: documents/models.py:521 -msgid "started" -msgstr "" +#: documents/models.py:536 +msgid "Task ID" +msgstr "الرمز التعريفي للمهمة" -#: documents/serialisers.py:70 +#: documents/models.py:537 +msgid "Celery ID for the Task that was run" +msgstr "رمز المعرف للمهمة التي كانت تعمل" + +#: documents/models.py:542 +msgid "Acknowledged" +msgstr "مُعترف" + +#: documents/models.py:543 +msgid "If the task is acknowledged via the frontend or API" +msgstr "إذا عرف على المهمة عبر الواجهة الأمامية أو API" + +#: documents/models.py:549 documents/models.py:556 +msgid "Task Name" +msgstr "اسم المهمة" + +#: documents/models.py:550 +msgid "Name of the file which the Task was run for" +msgstr "اسم الملف الذي وكل بالمهمة" + +#: documents/models.py:557 +msgid "Name of the Task which was run" +msgstr "اسم المهمة التي كانت تعمل" + +#: documents/models.py:562 +msgid "Task Positional Arguments" +msgstr "مهمة قيمة المعاملات الموضعية" + +#: documents/models.py:564 +msgid "JSON representation of the positional arguments used with the task" +msgstr "تمثيل JSON لقيمة المعاملات الموضعية المستخدمة في المهمة" + +#: documents/models.py:569 +msgid "Task Named Arguments" +msgstr "مهمة قيمة المعامل المسمى" + +#: documents/models.py:571 +msgid "JSON representation of the named arguments used with the task" +msgstr "تمثيل JSON لقيمة المعاملات المسمية المستخدمة في المهمة" + +#: documents/models.py:578 +msgid "Task State" +msgstr "حالة المهمة" + +#: documents/models.py:579 +msgid "Current state of the task being run" +msgstr "الحالة الراهنة للمهمة قيد العمل" + +#: documents/models.py:584 +msgid "Created DateTime" +msgstr "تاريخ و وقت الإنشاء" + +#: documents/models.py:585 +msgid "Datetime field when the task result was created in UTC" +msgstr "حقل التاريخ والوقت عند إنشاء نتيجة المهمة في UTC" + +#: documents/models.py:590 +msgid "Started DateTime" +msgstr "تاريخ و وقت البداية" + +#: documents/models.py:591 +msgid "Datetime field when the task was started in UTC" +msgstr "حقل التاريخ والوقت عند بدء المهمة في UTC" + +#: documents/models.py:596 +msgid "Completed DateTime" +msgstr "التاريخ و الوقت المكتمل" + +#: documents/models.py:597 +msgid "Datetime field when the task was completed in UTC" +msgstr "حقل التاريخ و الوقت عند اكتمال المهمة في UTC" + +#: documents/models.py:602 +msgid "Result Data" +msgstr "نتائج البيانات" + +#: documents/models.py:604 +msgid "The data returned by the task" +msgstr "البيانات المستردة من قبل المهمة" + +#: documents/models.py:613 +msgid "Comment for the document" +msgstr "التعليق على المستند" + +#: documents/models.py:642 +msgid "comment" +msgstr "تعليق" + +#: documents/models.py:643 +msgid "comments" +msgstr "التعليقات" + +#: documents/serialisers.py:72 #, python-format msgid "Invalid regular expression: %(error)s" -msgstr "" +msgstr "التعبير النظامي خاطىء: %(error)s" -#: documents/serialisers.py:191 +#: documents/serialisers.py:193 msgid "Invalid color." -msgstr "" +msgstr "لون خاطئ." -#: documents/serialisers.py:515 +#: documents/serialisers.py:518 #, python-format msgid "File type %(type)s not supported" -msgstr "" +msgstr "نوع الملف %(type)s غير مدعوم" -#: documents/serialisers.py:596 +#: documents/serialisers.py:599 msgid "Invalid variable detected." -msgstr "" +msgstr "اكتشاف متغير خاطئ." #: documents/templates/index.html:78 msgid "Paperless-ngx is loading..." -msgstr "" +msgstr "تحميل Paperless-ngx..." #: documents/templates/index.html:79 msgid "Still here?! Hmm, something might be wrong." -msgstr "" +msgstr "مازلت هنا؟! همم، قد يكون هناك خطأ ما." #: documents/templates/index.html:79 msgid "Here's a link to the docs." -msgstr "" +msgstr "إليك رابط المستندات." #: documents/templates/registration/logged_out.html:14 msgid "Paperless-ngx signed out" -msgstr "" +msgstr "تسجيل الخروج Paperless-ngx" #: documents/templates/registration/logged_out.html:59 msgid "You have been successfully logged out. Bye!" -msgstr "" +msgstr "تم تسجيل خروجك بنجاح. مع السلامة!" #: documents/templates/registration/logged_out.html:60 msgid "Sign in again" -msgstr "" +msgstr "تسجيل الدخول مرة أخرى" #: documents/templates/registration/login.html:15 msgid "Paperless-ngx sign in" -msgstr "" +msgstr "تسجيل الدخول Paperless-ngx" #: documents/templates/registration/login.html:61 msgid "Please sign in." -msgstr "" +msgstr "الرجاء تسجيل الدخول." #: documents/templates/registration/login.html:64 msgid "Your username and password didn't match. Please try again." -msgstr "" +msgstr "اسم المستخدم وكلمة المرور غير متطابقين. حاول مرة أخرى." #: documents/templates/registration/login.html:67 msgid "Username" -msgstr "" +msgstr "اسم المستخدم" #: documents/templates/registration/login.html:68 msgid "Password" -msgstr "" +msgstr "كلمة المرور" #: documents/templates/registration/login.html:73 msgid "Sign in" -msgstr "" +msgstr "تسجيل الدخول" -#: paperless/settings.py:339 +#: paperless/settings.py:378 msgid "English (US)" -msgstr "" +msgstr "الإنجليزية (الولايات المتحدة)" -#: paperless/settings.py:340 +#: paperless/settings.py:379 msgid "Belarusian" -msgstr "" +msgstr "البيلاروسية" -#: paperless/settings.py:341 +#: paperless/settings.py:380 msgid "Czech" -msgstr "" +msgstr "التشيكية" -#: paperless/settings.py:342 +#: paperless/settings.py:381 msgid "Danish" -msgstr "" +msgstr "الدانماركية" -#: paperless/settings.py:343 +#: paperless/settings.py:382 msgid "German" -msgstr "" +msgstr "الألمانية" -#: paperless/settings.py:344 +#: paperless/settings.py:383 msgid "English (GB)" -msgstr "" +msgstr "الإنجليزية (المملكة المتحدة)" -#: paperless/settings.py:345 +#: paperless/settings.py:384 msgid "Spanish" msgstr "الإسبانية" -#: paperless/settings.py:346 +#: paperless/settings.py:385 msgid "French" -msgstr "" +msgstr "الفرنسية" -#: paperless/settings.py:347 +#: paperless/settings.py:386 msgid "Italian" -msgstr "" +msgstr "الإيطالية" -#: paperless/settings.py:348 +#: paperless/settings.py:387 msgid "Luxembourgish" -msgstr "" +msgstr "اللوكسمبرجية" -#: paperless/settings.py:349 +#: paperless/settings.py:388 msgid "Dutch" -msgstr "" +msgstr "الهولندية" -#: paperless/settings.py:350 +#: paperless/settings.py:389 msgid "Polish" msgstr "البولندية" -#: paperless/settings.py:351 +#: paperless/settings.py:390 msgid "Portuguese (Brazil)" -msgstr "" +msgstr "البرتغالية (البرازيل)" -#: paperless/settings.py:352 +#: paperless/settings.py:391 msgid "Portuguese" msgstr "البرتغالية" -#: paperless/settings.py:353 +#: paperless/settings.py:392 msgid "Romanian" -msgstr "" +msgstr "الرومانية" -#: paperless/settings.py:354 +#: paperless/settings.py:393 msgid "Russian" msgstr "الروسية" -#: paperless/settings.py:355 +#: paperless/settings.py:394 msgid "Slovenian" -msgstr "" +msgstr "السلوفانية" -#: paperless/settings.py:356 +#: paperless/settings.py:395 msgid "Serbian" -msgstr "" +msgstr "الصربية" -#: paperless/settings.py:357 +#: paperless/settings.py:396 msgid "Swedish" msgstr "السويدية" -#: paperless/settings.py:358 +#: paperless/settings.py:397 msgid "Turkish" -msgstr "" +msgstr "التركية" -#: paperless/settings.py:359 +#: paperless/settings.py:398 msgid "Chinese Simplified" -msgstr "" +msgstr "الصينية المبسطة" #: paperless/urls.py:161 msgid "Paperless-ngx administration" -msgstr "" +msgstr "Paperless-ngx الإدارة" #: paperless_mail/admin.py:29 msgid "Authentication" -msgstr "" +msgstr "المصادقة" #: paperless_mail/admin.py:30 msgid "Advanced settings" -msgstr "" +msgstr "الإعدادات المتقدمة" #: paperless_mail/admin.py:47 msgid "Filter" -msgstr "" +msgstr "تصفية" #: paperless_mail/admin.py:50 msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "" +msgstr "Paperless يقوم فقط بمعالجة البُرُد التي تتطابق جميع التصفيات المقدمة أدناه." #: paperless_mail/admin.py:64 msgid "Actions" -msgstr "" +msgstr "إجراءات" #: paperless_mail/admin.py:67 msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "" +msgstr "الإجراء المطبق على البريد. ينفذ هذا الإجراء فقط عندما تستهلك المستندات من البريد. ستبقى البُرٌد التي لا تحتوي على مرفقات ستبقى كما هي." #: paperless_mail/admin.py:75 msgid "Metadata" -msgstr "" +msgstr "البيانات الوصفية" #: paperless_mail/admin.py:78 msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "" +msgstr "تعيين بيانات التعريف للمستندات المستهلكة من هذه القاعدة تِلْقائيًا. إذا لم تعين العلامات أو الأنواع أو المراسلين هنا، سيظل paperless يعالج جميع قواعد المطابقة التي حددتها." #: paperless_mail/apps.py:8 msgid "Paperless mail" -msgstr "" +msgstr "بريد paperless" #: paperless_mail/models.py:8 msgid "mail account" -msgstr "" +msgstr "حساب البريد" #: paperless_mail/models.py:9 msgid "mail accounts" -msgstr "" +msgstr "حساب البُرُد" #: paperless_mail/models.py:12 msgid "No encryption" -msgstr "" +msgstr "دون تشفير" #: paperless_mail/models.py:13 msgid "Use SSL" -msgstr "" +msgstr "استخدم SSL" #: paperless_mail/models.py:14 msgid "Use STARTTLS" -msgstr "" +msgstr "استخدم STARTTLS" #: paperless_mail/models.py:18 msgid "IMAP server" -msgstr "" +msgstr "خادم IMAP" #: paperless_mail/models.py:21 msgid "IMAP port" -msgstr "" +msgstr "منفذ IMAP" #: paperless_mail/models.py:25 msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "" +msgstr "عادة ما يكون 143 للغير مشفر و اتصالات STARTTLS و 993 للاتصالات SSL." #: paperless_mail/models.py:31 msgid "IMAP security" -msgstr "" +msgstr "أمان IMAP" #: paperless_mail/models.py:36 msgid "username" -msgstr "" +msgstr "اسم المستخدم" #: paperless_mail/models.py:38 msgid "password" -msgstr "" +msgstr "كلمة المرور" #: paperless_mail/models.py:41 msgid "character set" -msgstr "" +msgstr "نوع ترميز المحارف" #: paperless_mail/models.py:45 msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "" +msgstr "ترميز المحارف المستخدمة عند التواصل مع خادم البريد، مثل 'UTF-8' أو 'US-ASCII'." #: paperless_mail/models.py:56 msgid "mail rule" -msgstr "" +msgstr "قاعدة البريد" #: paperless_mail/models.py:57 msgid "mail rules" -msgstr "" +msgstr "قواعد البريد" #: paperless_mail/models.py:60 msgid "Only process attachments." -msgstr "" +msgstr "معالجة المرفقات فقط." #: paperless_mail/models.py:61 msgid "Process all files, including 'inline' attachments." -msgstr "" +msgstr "معالجة جميع الملفات، بما في ذلك المرفقات المضمنة." #: paperless_mail/models.py:64 msgid "Delete" -msgstr "" +msgstr "حذف" #: paperless_mail/models.py:65 msgid "Move to specified folder" -msgstr "" +msgstr "نقل إلى مجلد محدد" #: paperless_mail/models.py:66 msgid "Mark as read, don't process read mails" -msgstr "" +msgstr "وضع علامة كمقروءة، لا تعالج الرسائل المقروءة" #: paperless_mail/models.py:67 msgid "Flag the mail, don't process flagged mails" -msgstr "" +msgstr "علم الرسالة، لا تعالج الرسائل المعلمة" #: paperless_mail/models.py:68 msgid "Tag the mail with specified tag, don't process tagged mails" -msgstr "" +msgstr "علم الرسالة بعلامة محددة، لا تعالج الرسائل المُعلمة" #: paperless_mail/models.py:71 msgid "Use subject as title" -msgstr "" +msgstr "استخدم الموضوع كعنوان" #: paperless_mail/models.py:72 msgid "Use attachment filename as title" -msgstr "" +msgstr "استخدم اسم الملف المرفق كعنوان" #: paperless_mail/models.py:75 msgid "Do not assign a correspondent" -msgstr "" +msgstr "لا تعيّن مراسل" #: paperless_mail/models.py:76 msgid "Use mail address" -msgstr "" +msgstr "استخدم عنوان البريد" #: paperless_mail/models.py:77 msgid "Use name (or mail address if not available)" -msgstr "" +msgstr "استخدم الاسم (أو عنوان البريد إذا لم يكن متاحا)" #: paperless_mail/models.py:78 msgid "Use correspondent selected below" -msgstr "" +msgstr "استخدم المراسل المحدد أدناه" #: paperless_mail/models.py:82 msgid "order" -msgstr "" +msgstr "الطلب" #: paperless_mail/models.py:88 msgid "account" -msgstr "" +msgstr "الحساب" #: paperless_mail/models.py:92 msgid "folder" -msgstr "" +msgstr "مجلد" #: paperless_mail/models.py:96 msgid "Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." -msgstr "" +msgstr "يجب فصل المجلدات الفرعية باستخدام محدد، غالبا نقطة ('.') أو خط مائل ('/')، لكنها تختلف حسب خادم البريد." #: paperless_mail/models.py:102 msgid "filter from" -msgstr "" +msgstr "تصفية من" #: paperless_mail/models.py:108 msgid "filter subject" -msgstr "" +msgstr "تصفية الموضوع" #: paperless_mail/models.py:114 msgid "filter body" -msgstr "" +msgstr "تصفية الجسم" #: paperless_mail/models.py:121 msgid "filter attachment filename" -msgstr "" +msgstr "تصفية اسم الملف المرفق" #: paperless_mail/models.py:126 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "" +msgstr "فقط المستندات التي تتطابق تماما مع اسم هذا الملف إذا تم تحديدها. المحارف البديلة مثل *.pdf أو *الفواتير* مسموح بها. لأنها غير حساسة." #: paperless_mail/models.py:133 msgid "maximum age" -msgstr "" +msgstr "أقصى عُمُر" #: paperless_mail/models.py:135 msgid "Specified in days." -msgstr "" +msgstr "محدد بالأيام." #: paperless_mail/models.py:139 msgid "attachment type" -msgstr "" +msgstr "نوع المرفق" #: paperless_mail/models.py:143 msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "" +msgstr "تتضمن المرفقات المضمنة صورا مضمنة، لذا من الأفضل دمج هذا الخِيار مع تصفية اسم الملف." #: paperless_mail/models.py:149 msgid "action" -msgstr "" +msgstr "إجراء" #: paperless_mail/models.py:155 msgid "action parameter" -msgstr "" +msgstr "إجراء المعامل" #: paperless_mail/models.py:160 msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "" +msgstr "معامل إضافي للإجراء المحدد أعلاه، مثال: المجلد المستهدف للانتقال إلى إجراء مجلد. يجب أن تكون المجلدات الفرعية مفصولة بنقاط." #: paperless_mail/models.py:168 msgid "assign title from" -msgstr "" +msgstr "تعيين العنوان من" #: paperless_mail/models.py:176 msgid "assign this tag" -msgstr "" +msgstr "تعيين هذه العلامة" #: paperless_mail/models.py:184 msgid "assign this document type" -msgstr "" +msgstr "تعيين نوع هذا المستند" #: paperless_mail/models.py:188 msgid "assign correspondent from" -msgstr "" +msgstr "تعيين مراسل من" #: paperless_mail/models.py:198 msgid "assign this correspondent" -msgstr "" +msgstr "تعيين هذا المراسل" diff --git a/src/locale/ar_SA/LC_MESSAGES/django.po b/src/locale/ar_SA/LC_MESSAGES/django.po deleted file mode 100644 index e5c1b7f36..000000000 --- a/src/locale/ar_SA/LC_MESSAGES/django.po +++ /dev/null @@ -1,878 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: paperless-ngx\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-09 21:50+0000\n" -"PO-Revision-Date: 2022-12-09 07:39\n" -"Last-Translator: \n" -"Language-Team: Arabic\n" -"Language: ar_SA\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" -"X-Crowdin-Project: paperless-ngx\n" -"X-Crowdin-Project-ID: 500308\n" -"X-Crowdin-Language: ar\n" -"X-Crowdin-File: /dev/src/locale/en_US/LC_MESSAGES/django.po\n" -"X-Crowdin-File-ID: 14\n" - -#: documents/apps.py:9 -msgid "Documents" -msgstr "المستندات" - -#: documents/models.py:32 -msgid "Any word" -msgstr "أي كلمة" - -#: documents/models.py:33 -msgid "All words" -msgstr "كل الكلمات" - -#: documents/models.py:34 -msgid "Exact match" -msgstr "تطابق تام" - -#: documents/models.py:35 -msgid "Regular expression" -msgstr "التعابير النظامية" - -#: documents/models.py:36 -msgid "Fuzzy word" -msgstr "كلمة غامضة" - -#: documents/models.py:37 -msgid "Automatic" -msgstr "تلقائي" - -#: documents/models.py:40 documents/models.py:367 paperless_mail/models.py:16 -#: paperless_mail/models.py:80 -msgid "name" -msgstr "اسم" - -#: documents/models.py:42 -msgid "match" -msgstr "تطابق" - -#: documents/models.py:45 -msgid "matching algorithm" -msgstr "خوارزمية مطابقة" - -#: documents/models.py:50 -msgid "is insensitive" -msgstr "غير حساس" - -#: documents/models.py:63 documents/models.py:118 -msgid "correspondent" -msgstr "مراسل" - -#: documents/models.py:64 -msgid "correspondents" -msgstr "مراسلون" - -#: documents/models.py:69 -msgid "color" -msgstr "لون" - -#: documents/models.py:72 -msgid "is inbox tag" -msgstr "علامة علبة الوارد" - -#: documents/models.py:75 -msgid "Marks this tag as an inbox tag: All newly consumed documents will be tagged with inbox tags." -msgstr "ضع علامة على هذه السمة كعلامة علبة الوارد: سيتم وضع علامة على جميع المستندات المستهلكة حديثا مع علامات صندوق الواردات." - -#: documents/models.py:81 -msgid "tag" -msgstr "علامة" - -#: documents/models.py:82 documents/models.py:156 -msgid "tags" -msgstr "علامات" - -#: documents/models.py:87 documents/models.py:138 -msgid "document type" -msgstr "نوع المستند" - -#: documents/models.py:88 -msgid "document types" -msgstr "أنواع المستندات" - -#: documents/models.py:93 -msgid "path" -msgstr "مسار" - -#: documents/models.py:99 documents/models.py:127 -msgid "storage path" -msgstr "مسار التخزين" - -#: documents/models.py:100 -msgid "storage paths" -msgstr "مسارات التخزين" - -#: documents/models.py:108 -msgid "Unencrypted" -msgstr "دون تشفير" - -#: documents/models.py:109 -msgid "Encrypted with GNU Privacy Guard" -msgstr "مشفر باستخدام حارس خصوصية غنو" - -#: documents/models.py:130 -msgid "title" -msgstr "عنوان" - -#: documents/models.py:142 documents/models.py:611 -msgid "content" -msgstr "محتوى" - -#: documents/models.py:145 -msgid "The raw, text-only data of the document. This field is primarily used for searching." -msgstr "الخام, فقط النص من المستند. يستخدم هذا الحقل أساسا للبحث." - -#: documents/models.py:150 -msgid "mime type" -msgstr "MIME type" - -#: documents/models.py:160 -msgid "checksum" -msgstr "بصمة الملف" - -#: documents/models.py:164 -msgid "The checksum of the original document." -msgstr "بصمة الملف للمستند الأصلي." - -#: documents/models.py:168 -msgid "archive checksum" -msgstr "بصمة الملف للربيدة" - -#: documents/models.py:173 -msgid "The checksum of the archived document." -msgstr "بصمة الملف للمستند الربيدة." - -#: documents/models.py:176 documents/models.py:348 documents/models.py:617 -msgid "created" -msgstr "أُنشئ" - -#: documents/models.py:179 -msgid "modified" -msgstr "مُعدّل" - -#: documents/models.py:186 -msgid "storage type" -msgstr "نوع التخزين" - -#: documents/models.py:194 -msgid "added" -msgstr "أضيف" - -#: documents/models.py:201 -msgid "filename" -msgstr "اسم الملف" - -#: documents/models.py:207 -msgid "Current filename in storage" -msgstr "اسم الملف الحالي في التخزين" - -#: documents/models.py:211 -msgid "archive filename" -msgstr "اسم الربيدة" - -#: documents/models.py:217 -msgid "Current archive filename in storage" -msgstr "اسم ملف الربيدة الحالي في التخزين" - -#: documents/models.py:221 -msgid "original filename" -msgstr "اسم الملف الأصلي" - -#: documents/models.py:227 -msgid "The original name of the file when it was uploaded" -msgstr "اسم الملف الأصلي عند تحميله" - -#: documents/models.py:231 -msgid "archive serial number" -msgstr "الرقم التسلسلي للربيدة" - -#: documents/models.py:237 -msgid "The position of this document in your physical document archive." -msgstr "موقع هذا المستند في ربيدة المستند الفيزيائي." - -#: documents/models.py:243 documents/models.py:628 -msgid "document" -msgstr "مستند" - -#: documents/models.py:244 -msgid "documents" -msgstr "المستندات" - -#: documents/models.py:331 -msgid "debug" -msgstr "تصحيح الأخطاء" - -#: documents/models.py:332 -msgid "information" -msgstr "معلومات" - -#: documents/models.py:333 -msgid "warning" -msgstr "تحذير" - -#: documents/models.py:334 -msgid "error" -msgstr "خطأ" - -#: documents/models.py:335 -msgid "critical" -msgstr "الحرجة" - -#: documents/models.py:338 -msgid "group" -msgstr "مجموعة" - -#: documents/models.py:340 -msgid "message" -msgstr "رسالة" - -#: documents/models.py:343 -msgid "level" -msgstr "المستوى" - -#: documents/models.py:352 -msgid "log" -msgstr "سجل" - -#: documents/models.py:353 -msgid "logs" -msgstr "السجلات" - -#: documents/models.py:363 documents/models.py:419 -msgid "saved view" -msgstr "العرض المحفوظ" - -#: documents/models.py:364 -msgid "saved views" -msgstr "العروض المحفوظة" - -#: documents/models.py:366 documents/models.py:637 -msgid "user" -msgstr "المستخدم" - -#: documents/models.py:370 -msgid "show on dashboard" -msgstr "عرض على لوحة التحكم" - -#: documents/models.py:373 -msgid "show in sidebar" -msgstr "عرض على الشريط الجانبي" - -#: documents/models.py:377 -msgid "sort field" -msgstr "فرز الحقل" - -#: documents/models.py:382 -msgid "sort reverse" -msgstr "فرز بالعكس" - -#: documents/models.py:387 -msgid "title contains" -msgstr "العنوان يحتوي" - -#: documents/models.py:388 -msgid "content contains" -msgstr "المحتوى يحتوي" - -#: documents/models.py:389 -msgid "ASN is" -msgstr "ASN هو" - -#: documents/models.py:390 -msgid "correspondent is" -msgstr "المراسل هو" - -#: documents/models.py:391 -msgid "document type is" -msgstr "نوع المستند" - -#: documents/models.py:392 -msgid "is in inbox" -msgstr "موجود في علبة الوارد" - -#: documents/models.py:393 -msgid "has tag" -msgstr "لديه علامة" - -#: documents/models.py:394 -msgid "has any tag" -msgstr "لديه أي وسم" - -#: documents/models.py:395 -msgid "created before" -msgstr "أنشئت قبل" - -#: documents/models.py:396 -msgid "created after" -msgstr "أنشئت بعد" - -#: documents/models.py:397 -msgid "created year is" -msgstr "أنشئت سنة" - -#: documents/models.py:398 -msgid "created month is" -msgstr "أنشئت شهر" - -#: documents/models.py:399 -msgid "created day is" -msgstr "أنشئت يوم" - -#: documents/models.py:400 -msgid "added before" -msgstr "أضيف قبل" - -#: documents/models.py:401 -msgid "added after" -msgstr "أضيف بعد" - -#: documents/models.py:402 -msgid "modified before" -msgstr "عُدِّل قبل" - -#: documents/models.py:403 -msgid "modified after" -msgstr "عُدِّل بعد" - -#: documents/models.py:404 -msgid "does not have tag" -msgstr "ليس لديه علامة" - -#: documents/models.py:405 -msgid "does not have ASN" -msgstr "ليس لديه ASN" - -#: documents/models.py:406 -msgid "title or content contains" -msgstr "العنوان أو المحتوى يحتوي" - -#: documents/models.py:407 -msgid "fulltext query" -msgstr "استعلام كامل النص" - -#: documents/models.py:408 -msgid "more like this" -msgstr "أخرى مثلها" - -#: documents/models.py:409 -msgid "has tags in" -msgstr "لديه علامات في" - -#: documents/models.py:410 -msgid "ASN greater than" -msgstr "ASN أكبر من" - -#: documents/models.py:411 -msgid "ASN less than" -msgstr "ASN أقل من" - -#: documents/models.py:412 -msgid "storage path is" -msgstr "مسار التخزين" - -#: documents/models.py:422 -msgid "rule type" -msgstr "نوع القاعدة" - -#: documents/models.py:424 -msgid "value" -msgstr "قيمة" - -#: documents/models.py:427 -msgid "filter rule" -msgstr "تصفية القاعدة" - -#: documents/models.py:428 -msgid "filter rules" -msgstr "تصفية القواعد" - -#: documents/models.py:536 -msgid "Task ID" -msgstr "الرمز التعريفي للمهمة" - -#: documents/models.py:537 -msgid "Celery ID for the Task that was run" -msgstr "رمز المعرف للمهمة التي كانت تعمل" - -#: documents/models.py:542 -msgid "Acknowledged" -msgstr "مُعترف" - -#: documents/models.py:543 -msgid "If the task is acknowledged via the frontend or API" -msgstr "إذا عرف على المهمة عبر الواجهة الأمامية أو API" - -#: documents/models.py:549 documents/models.py:556 -msgid "Task Name" -msgstr "اسم المهمة" - -#: documents/models.py:550 -msgid "Name of the file which the Task was run for" -msgstr "اسم الملف الذي وكل بالمهمة" - -#: documents/models.py:557 -msgid "Name of the Task which was run" -msgstr "اسم المهمة التي كانت تعمل" - -#: documents/models.py:562 -msgid "Task Positional Arguments" -msgstr "مهمة قيمة المعاملات الموضعية" - -#: documents/models.py:564 -msgid "JSON representation of the positional arguments used with the task" -msgstr "تمثيل JSON لقيمة المعاملات الموضعية المستخدمة في المهمة" - -#: documents/models.py:569 -msgid "Task Named Arguments" -msgstr "مهمة قيمة المعامل المسمى" - -#: documents/models.py:571 -msgid "JSON representation of the named arguments used with the task" -msgstr "تمثيل JSON لقيمة المعاملات المسمية المستخدمة في المهمة" - -#: documents/models.py:578 -msgid "Task State" -msgstr "حالة المهمة" - -#: documents/models.py:579 -msgid "Current state of the task being run" -msgstr "الحالة الراهنة للمهمة قيد العمل" - -#: documents/models.py:584 -msgid "Created DateTime" -msgstr "تاريخ و وقت الإنشاء" - -#: documents/models.py:585 -msgid "Datetime field when the task result was created in UTC" -msgstr "حقل التاريخ والوقت عند إنشاء نتيجة المهمة في UTC" - -#: documents/models.py:590 -msgid "Started DateTime" -msgstr "تاريخ و وقت البداية" - -#: documents/models.py:591 -msgid "Datetime field when the task was started in UTC" -msgstr "حقل التاريخ والوقت عند بدء المهمة في UTC" - -#: documents/models.py:596 -msgid "Completed DateTime" -msgstr "التاريخ و الوقت المكتمل" - -#: documents/models.py:597 -msgid "Datetime field when the task was completed in UTC" -msgstr "حقل التاريخ و الوقت عند اكتمال المهمة في UTC" - -#: documents/models.py:602 -msgid "Result Data" -msgstr "نتائج البيانات" - -#: documents/models.py:604 -msgid "The data returned by the task" -msgstr "البيانات المستردة من قبل المهمة" - -#: documents/models.py:613 -msgid "Comment for the document" -msgstr "التعليق على المستند" - -#: documents/models.py:642 -msgid "comment" -msgstr "تعليق" - -#: documents/models.py:643 -msgid "comments" -msgstr "التعليقات" - -#: documents/serialisers.py:72 -#, python-format -msgid "Invalid regular expression: %(error)s" -msgstr "التعبير النظامي خاطىء: %(error)s" - -#: documents/serialisers.py:193 -msgid "Invalid color." -msgstr "لون خاطئ." - -#: documents/serialisers.py:518 -#, python-format -msgid "File type %(type)s not supported" -msgstr "نوع الملف %(type)s غير مدعوم" - -#: documents/serialisers.py:599 -msgid "Invalid variable detected." -msgstr "اكتشاف متغير خاطئ." - -#: documents/templates/index.html:78 -msgid "Paperless-ngx is loading..." -msgstr "تحميل Paperless-ngx..." - -#: documents/templates/index.html:79 -msgid "Still here?! Hmm, something might be wrong." -msgstr "مازلت هنا؟! همم، قد يكون هناك خطأ ما." - -#: documents/templates/index.html:79 -msgid "Here's a link to the docs." -msgstr "إليك رابط المستندات." - -#: documents/templates/registration/logged_out.html:14 -msgid "Paperless-ngx signed out" -msgstr "تسجيل الخروج Paperless-ngx" - -#: documents/templates/registration/logged_out.html:59 -msgid "You have been successfully logged out. Bye!" -msgstr "تم تسجيل خروجك بنجاح. مع السلامة!" - -#: documents/templates/registration/logged_out.html:60 -msgid "Sign in again" -msgstr "تسجيل الدخول مرة أخرى" - -#: documents/templates/registration/login.html:15 -msgid "Paperless-ngx sign in" -msgstr "تسجيل الدخول Paperless-ngx" - -#: documents/templates/registration/login.html:61 -msgid "Please sign in." -msgstr "الرجاء تسجيل الدخول." - -#: documents/templates/registration/login.html:64 -msgid "Your username and password didn't match. Please try again." -msgstr "اسم المستخدم وكلمة المرور غير متطابقين. حاول مرة أخرى." - -#: documents/templates/registration/login.html:67 -msgid "Username" -msgstr "اسم المستخدم" - -#: documents/templates/registration/login.html:68 -msgid "Password" -msgstr "كلمة المرور" - -#: documents/templates/registration/login.html:73 -msgid "Sign in" -msgstr "تسجيل الدخول" - -#: paperless/settings.py:378 -msgid "English (US)" -msgstr "الإنجليزية (الولايات المتحدة)" - -#: paperless/settings.py:379 -msgid "Belarusian" -msgstr "البيلاروسية" - -#: paperless/settings.py:380 -msgid "Czech" -msgstr "التشيكية" - -#: paperless/settings.py:381 -msgid "Danish" -msgstr "الدانماركية" - -#: paperless/settings.py:382 -msgid "German" -msgstr "الألمانية" - -#: paperless/settings.py:383 -msgid "English (GB)" -msgstr "الإنجليزية (المملكة المتحدة)" - -#: paperless/settings.py:384 -msgid "Spanish" -msgstr "الإسبانية" - -#: paperless/settings.py:385 -msgid "French" -msgstr "الفرنسية" - -#: paperless/settings.py:386 -msgid "Italian" -msgstr "الإيطالية" - -#: paperless/settings.py:387 -msgid "Luxembourgish" -msgstr "اللوكسمبرجية" - -#: paperless/settings.py:388 -msgid "Dutch" -msgstr "الهولندية" - -#: paperless/settings.py:389 -msgid "Polish" -msgstr "البولندية" - -#: paperless/settings.py:390 -msgid "Portuguese (Brazil)" -msgstr "البرتغالية (البرازيل)" - -#: paperless/settings.py:391 -msgid "Portuguese" -msgstr "البرتغالية" - -#: paperless/settings.py:392 -msgid "Romanian" -msgstr "الرومانية" - -#: paperless/settings.py:393 -msgid "Russian" -msgstr "الروسية" - -#: paperless/settings.py:394 -msgid "Slovenian" -msgstr "السلوفانية" - -#: paperless/settings.py:395 -msgid "Serbian" -msgstr "الصربية" - -#: paperless/settings.py:396 -msgid "Swedish" -msgstr "السويدية" - -#: paperless/settings.py:397 -msgid "Turkish" -msgstr "التركية" - -#: paperless/settings.py:398 -msgid "Chinese Simplified" -msgstr "الصينية المبسطة" - -#: paperless/urls.py:161 -msgid "Paperless-ngx administration" -msgstr "Paperless-ngx الإدارة" - -#: paperless_mail/admin.py:29 -msgid "Authentication" -msgstr "المصادقة" - -#: paperless_mail/admin.py:30 -msgid "Advanced settings" -msgstr "الإعدادات المتقدمة" - -#: paperless_mail/admin.py:47 -msgid "Filter" -msgstr "تصفية" - -#: paperless_mail/admin.py:50 -msgid "Paperless will only process mails that match ALL of the filters given below." -msgstr "Paperless يقوم فقط بمعالجة البُرُد التي تتطابق جميع التصفيات المقدمة أدناه." - -#: paperless_mail/admin.py:64 -msgid "Actions" -msgstr "إجراءات" - -#: paperless_mail/admin.py:67 -msgid "The action applied to the mail. This action is only performed when documents were consumed from the mail. Mails without attachments will remain entirely untouched." -msgstr "الإجراء المطبق على البريد. ينفذ هذا الإجراء فقط عندما تستهلك المستندات من البريد. ستبقى البُرٌد التي لا تحتوي على مرفقات ستبقى كما هي." - -#: paperless_mail/admin.py:75 -msgid "Metadata" -msgstr "البيانات الوصفية" - -#: paperless_mail/admin.py:78 -msgid "Assign metadata to documents consumed from this rule automatically. If you do not assign tags, types or correspondents here, paperless will still process all matching rules that you have defined." -msgstr "تعيين بيانات التعريف للمستندات المستهلكة من هذه القاعدة تِلْقائيًا. إذا لم تعين العلامات أو الأنواع أو المراسلين هنا، سيظل paperless يعالج جميع قواعد المطابقة التي حددتها." - -#: paperless_mail/apps.py:8 -msgid "Paperless mail" -msgstr "بريد paperless" - -#: paperless_mail/models.py:8 -msgid "mail account" -msgstr "حساب البريد" - -#: paperless_mail/models.py:9 -msgid "mail accounts" -msgstr "حساب البُرُد" - -#: paperless_mail/models.py:12 -msgid "No encryption" -msgstr "دون تشفير" - -#: paperless_mail/models.py:13 -msgid "Use SSL" -msgstr "استخدم SSL" - -#: paperless_mail/models.py:14 -msgid "Use STARTTLS" -msgstr "استخدم STARTTLS" - -#: paperless_mail/models.py:18 -msgid "IMAP server" -msgstr "خادم IMAP" - -#: paperless_mail/models.py:21 -msgid "IMAP port" -msgstr "منفذ IMAP" - -#: paperless_mail/models.py:25 -msgid "This is usually 143 for unencrypted and STARTTLS connections, and 993 for SSL connections." -msgstr "عادة ما يكون 143 للغير مشفر و اتصالات STARTTLS و 993 للاتصالات SSL." - -#: paperless_mail/models.py:31 -msgid "IMAP security" -msgstr "أمان IMAP" - -#: paperless_mail/models.py:36 -msgid "username" -msgstr "اسم المستخدم" - -#: paperless_mail/models.py:38 -msgid "password" -msgstr "كلمة المرور" - -#: paperless_mail/models.py:41 -msgid "character set" -msgstr "نوع ترميز المحارف" - -#: paperless_mail/models.py:45 -msgid "The character set to use when communicating with the mail server, such as 'UTF-8' or 'US-ASCII'." -msgstr "ترميز المحارف المستخدمة عند التواصل مع خادم البريد، مثل 'UTF-8' أو 'US-ASCII'." - -#: paperless_mail/models.py:56 -msgid "mail rule" -msgstr "قاعدة البريد" - -#: paperless_mail/models.py:57 -msgid "mail rules" -msgstr "قواعد البريد" - -#: paperless_mail/models.py:60 -msgid "Only process attachments." -msgstr "معالجة المرفقات فقط." - -#: paperless_mail/models.py:61 -msgid "Process all files, including 'inline' attachments." -msgstr "معالجة جميع الملفات، بما في ذلك المرفقات المضمنة." - -#: paperless_mail/models.py:64 -msgid "Delete" -msgstr "حذف" - -#: paperless_mail/models.py:65 -msgid "Move to specified folder" -msgstr "نقل إلى مجلد محدد" - -#: paperless_mail/models.py:66 -msgid "Mark as read, don't process read mails" -msgstr "وضع علامة كمقروءة، لا تعالج الرسائل المقروءة" - -#: paperless_mail/models.py:67 -msgid "Flag the mail, don't process flagged mails" -msgstr "علم الرسالة، لا تعالج الرسائل المعلمة" - -#: paperless_mail/models.py:68 -msgid "Tag the mail with specified tag, don't process tagged mails" -msgstr "علم الرسالة بعلامة محددة، لا تعالج الرسائل المُعلمة" - -#: paperless_mail/models.py:71 -msgid "Use subject as title" -msgstr "استخدم الموضوع كعنوان" - -#: paperless_mail/models.py:72 -msgid "Use attachment filename as title" -msgstr "استخدم اسم الملف المرفق كعنوان" - -#: paperless_mail/models.py:75 -msgid "Do not assign a correspondent" -msgstr "لا تعيّن مراسل" - -#: paperless_mail/models.py:76 -msgid "Use mail address" -msgstr "استخدم عنوان البريد" - -#: paperless_mail/models.py:77 -msgid "Use name (or mail address if not available)" -msgstr "استخدم الاسم (أو عنوان البريد إذا لم يكن متاحا)" - -#: paperless_mail/models.py:78 -msgid "Use correspondent selected below" -msgstr "استخدم المراسل المحدد أدناه" - -#: paperless_mail/models.py:82 -msgid "order" -msgstr "الطلب" - -#: paperless_mail/models.py:88 -msgid "account" -msgstr "الحساب" - -#: paperless_mail/models.py:92 -msgid "folder" -msgstr "مجلد" - -#: paperless_mail/models.py:96 -msgid "Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." -msgstr "يجب فصل المجلدات الفرعية باستخدام محدد، غالبا نقطة ('.') أو خط مائل ('/')، لكنها تختلف حسب خادم البريد." - -#: paperless_mail/models.py:102 -msgid "filter from" -msgstr "تصفية من" - -#: paperless_mail/models.py:108 -msgid "filter subject" -msgstr "تصفية الموضوع" - -#: paperless_mail/models.py:114 -msgid "filter body" -msgstr "تصفية الجسم" - -#: paperless_mail/models.py:121 -msgid "filter attachment filename" -msgstr "تصفية اسم الملف المرفق" - -#: paperless_mail/models.py:126 -msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." -msgstr "فقط المستندات التي تتطابق تماما مع اسم هذا الملف إذا تم تحديدها. المحارف البديلة مثل *.pdf أو *الفواتير* مسموح بها. لأنها غير حساسة." - -#: paperless_mail/models.py:133 -msgid "maximum age" -msgstr "أقصى عُمُر" - -#: paperless_mail/models.py:135 -msgid "Specified in days." -msgstr "محدد بالأيام." - -#: paperless_mail/models.py:139 -msgid "attachment type" -msgstr "نوع المرفق" - -#: paperless_mail/models.py:143 -msgid "Inline attachments include embedded images, so it's best to combine this option with a filename filter." -msgstr "تتضمن المرفقات المضمنة صورا مضمنة، لذا من الأفضل دمج هذا الخِيار مع تصفية اسم الملف." - -#: paperless_mail/models.py:149 -msgid "action" -msgstr "إجراء" - -#: paperless_mail/models.py:155 -msgid "action parameter" -msgstr "إجراء المعامل" - -#: paperless_mail/models.py:160 -msgid "Additional parameter for the action selected above, i.e., the target folder of the move to folder action. Subfolders must be separated by dots." -msgstr "معامل إضافي للإجراء المحدد أعلاه، مثال: المجلد المستهدف للانتقال إلى إجراء مجلد. يجب أن تكون المجلدات الفرعية مفصولة بنقاط." - -#: paperless_mail/models.py:168 -msgid "assign title from" -msgstr "تعيين العنوان من" - -#: paperless_mail/models.py:176 -msgid "assign this tag" -msgstr "تعيين هذه العلامة" - -#: paperless_mail/models.py:184 -msgid "assign this document type" -msgstr "تعيين نوع هذا المستند" - -#: paperless_mail/models.py:188 -msgid "assign correspondent from" -msgstr "تعيين مراسل من" - -#: paperless_mail/models.py:198 -msgid "assign this correspondent" -msgstr "تعيين هذا المراسل" - From 24ce1830eb18e0e4f6a235c2998f70f41a5db619 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Jan 2023 18:25:14 +0000 Subject: [PATCH 05/16] Bump tj-actions/changed-files from 34 to 35 Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 34 to 35. - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/changed-files/compare/v34...v35) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f133c9fd8..afdfa646e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -153,7 +153,7 @@ jobs: - name: Get changed files id: changed-files-specific - uses: tj-actions/changed-files@v34 + uses: tj-actions/changed-files@v35 with: files: | src/** From 59e0c1fe4eadc9026ab40526000fe89f28c9e551 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Mon, 2 Jan 2023 14:20:46 -0800 Subject: [PATCH 06/16] Let convert handle the removal of the alpha channel --- src/paperless_tesseract/parsers.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 4107cace8..44671fa11 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -1,6 +1,7 @@ import json import os import re +import subprocess from pathlib import Path from typing import Optional @@ -79,6 +80,17 @@ class RasterisedDocumentParser(DocumentParser): with Image.open(image) as im: return im.mode in ("RGBA", "LA") + def remove_alpha(self, image_path: str): + subprocess.run( + [ + settings.CONVERT_BINARY, + "-alpha", + "off", + image_path, + image_path, + ], + ) + def get_dpi(self, image): try: with Image.open(image) as im: @@ -230,11 +242,7 @@ class RasterisedDocumentParser(DocumentParser): f"Removing alpha layer from {input_file} " "for compatibility with img2pdf", ) - with Image.open(input_file) as im: - background = Image.new("RGBA", im.size, (255, 255, 255)) - background.alpha_composite(im) - background = background.convert("RGB") - background.save(input_file, format=im.format) + self.remove_alpha(input_file) if dpi: self.log("debug", f"Detected DPI for image {input_file}: {dpi}") From 0fd51e35e1345f8ec381cc511d473079812c2a43 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue, 3 Jan 2023 08:21:23 -0800 Subject: [PATCH 07/16] Adds testing coverage of multipage TIFF with alpha, without and with alpha/sRGB --- .../samples/multi-page-images-alpha-rgb.tiff | Bin 0 -> 182614 bytes .../samples/multi-page-images-alpha.tiff | Bin 0 -> 118160 bytes .../tests/samples/multi-page-images.tiff | Bin 0 -> 85618 bytes src/paperless_tesseract/tests/test_parser.py | 63 ++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 src/paperless_tesseract/tests/samples/multi-page-images-alpha-rgb.tiff create mode 100644 src/paperless_tesseract/tests/samples/multi-page-images-alpha.tiff create mode 100644 src/paperless_tesseract/tests/samples/multi-page-images.tiff diff --git a/src/paperless_tesseract/tests/samples/multi-page-images-alpha-rgb.tiff b/src/paperless_tesseract/tests/samples/multi-page-images-alpha-rgb.tiff new file mode 100644 index 0000000000000000000000000000000000000000..3111b7c4cc7bc1ed6a9b3bec36f991527bd574e9 GIT binary patch literal 182614 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ƀng7S$e`M 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�n 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

24W7+o>fA)R77QNj>?(p1qCCjJv zX`9Xd;e5Ku?%RcQ``~=bU7rDrg>Z`xn*eF-A9Qzu%3n zx*l6T_s(Ov?-8#me%w4?cP+{5&_#E7+n?XI@4tI#&hEQqx3_-DTD^9g%NoNI|AYLx z^^qr6A#2)prh*oLs41E2gM9^ykrY=4(8TSNX`FrG-#$MnT~NjLW@hEPozJ&@nVCM% z@@8_sZQEzLzc1XkpBLZrfc0#2gS*|QiIcB}$Jc7MCq@Q+XIQ)5*rGH%w)E%Ed>p7DfS*NyT1G0)~WnA{(sRc-|6lBxa`Ti z?K{urimh7d;*!Q%-Iz8%`4T9%MgMY^|8?QXuh;AIUrr5=tNgU%xb3>7AM-24{=5p` zpLJh<*Na65PuBi zH04}$ddabH<=Dro|NePyKYvcutChNEpGRe{y?W`0%wcy1nROL0{#BPItG!;o|6fxT z*AJnOZ?kN6G^}Rakqz2R7X1r!6vl(4q4#r_P7RYvIvUvb`_6N_$)F`2hqu=KzI}h2 zzs;T<3V+Ie-@adW@RYWaQSX`4XPzeS`(S!K=JGT9AGfaWyY^@;7dHmlq^Zl9gjb)328|P1~dFXTG`hmGKddyJn%&95jcSRH*g ztH843Y}n~2XzkELhn$!Gw_kG=U@L629zPh+fGoQKt*q<$bY(J}f4twPP?en)S zl~XHC{@*_F{%gJB%>2jPlh-{*+VarR^YK4JK)>Aaid%1QMP@5GO0)%jXBGVW|9{ZY zTIp2_r8v_j7*sY-F3#KMc6wWg#-56I-+%9AX82=u{q@%3oiVds=WV|&+3Plc-P(Hb zQ@;)-T!?vJw)lW& z@Nth`-u7r~d%L)E2Y&tfSaHX0``x_Rk>`KCsfqi^># z?vCSSs8iiLD~|Vv{fnz$!G`ih;mi!Hj?Y_I#=kdieeIrau}42vbI-jotrq^O+y0uHUk| z)OY6Bnwo2`>T)i26|r5bp1yhGysxEav$keEE86+z<$5NtwH3@&reFq$5c-k@qQF=M z>Mjt+tP(X|pMx%uhC><~`1bl#W%RoF@-$poE7>!v@jYij7AG1NG=$iL1m!tq{V1g0Z&(9G;jtka7J53qb(yyoiI9p4GM?R*))dH z!U&WQMyHn{p)i^u1~5a6wv0v#BSXX9xaSU3nNe_9PKJVLSeKp8ZC?BPbo%yxMx!kwP&xqN(U#F@%LtSX@Km3pZHr+WIHN72(UuV;_m8%WK;bajG8%0e mfzkm8kG70PTSlOCFl;OT(RLl4s2yz?4gHqUA$Df={z3qFp@hBw literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/multi-page-images-alpha.tiff b/src/paperless_tesseract/tests/samples/multi-page-images-alpha.tiff new file mode 100644 index 0000000000000000000000000000000000000000..c612cf4bae29e21c955ee0fd4b410c7a3854d3ac GIT binary patch literal 118160 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 E04F>7NdN!< literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 4d6890653..28af8dec1 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -542,6 +542,69 @@ class TestParser(DirectoriesMixin, TestCase): ], ) + def test_multi_page_tiff(self): + """ + GIVEN: + - Multi-page TIFF image + WHEN: + - Image is parsed + THEN: + - Text from all pages extracted + """ + parser = RasterisedDocumentParser(None) + parser.parse( + os.path.join(self.SAMPLE_FILES, "multi-page-images.tiff"), + "image/tiff", + ) + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertContainsStrings( + parser.get_text().lower(), + ["page 1", "page 2", "page 3"], + ) + + def test_multi_page_tiff_alpha(self): + """ + GIVEN: + - Multi-page TIFF image + - Image include an alpha channel + WHEN: + - Image is parsed + THEN: + - Text from all pages extracted + """ + parser = RasterisedDocumentParser(None) + parser.parse( + os.path.join(self.SAMPLE_FILES, "multi-page-images-alpha.tiff"), + "image/tiff", + ) + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertContainsStrings( + parser.get_text().lower(), + ["page 1", "page 2", "page 3"], + ) + + def test_multi_page_tiff_alpha_srgb(self): + """ + GIVEN: + - Multi-page TIFF image + - Image include an alpha channel + - Image is srgb colorspace + WHEN: + - Image is parsed + THEN: + - Text from all pages extracted + """ + parser = RasterisedDocumentParser(None) + parser.parse( + os.path.join(self.SAMPLE_FILES, "multi-page-images-alpha-rgb.tiff"), + "image/tiff", + ) + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertContainsStrings( + parser.get_text().lower(), + ["page 1", "page 2", "page 3"], + ) + def test_ocrmypdf_parameters(self): parser = RasterisedDocumentParser(None) params = parser.construct_ocrmypdf_parameters( From 80910c72cf3f28e677215791e73f11b5ba2f3c42 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 4 Jan 2023 06:58:42 -0800 Subject: [PATCH 08/16] Fix preview not loading on mobile --- .../components/document-detail/document-detail.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 0384de371..92b40014c 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -149,7 +149,7 @@

  • Preview - +
    From 91d4941438d50ee8fe92de1921e1c6989e2558cb Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 4 Jan 2023 19:06:06 -0800 Subject: [PATCH 09/16] Support comment search --- src/documents/index.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/documents/index.py b/src/documents/index.py index e9c340697..7ba50a324 100644 --- a/src/documents/index.py +++ b/src/documents/index.py @@ -5,6 +5,7 @@ from contextlib import contextmanager from dateutil.parser import isoparse from django.conf import settings +from documents.models import Comment from documents.models import Document from whoosh import classify from whoosh import highlight @@ -49,6 +50,7 @@ def get_schema(): path=TEXT(sortable=True), path_id=NUMERIC(), has_path=BOOLEAN(), + comments=TEXT(), ) @@ -90,6 +92,7 @@ def open_index_searcher(): def update_document(writer, doc): tags = ",".join([t.name for t in doc.tags.all()]) tags_ids = ",".join([str(t.id) for t in doc.tags.all()]) + comments = ",".join([str(c.comment) for c in Comment.objects.filter(document=doc)]) writer.update_document( id=doc.pk, title=doc.title, @@ -110,6 +113,7 @@ def update_document(writer, doc): path=doc.storage_path.name if doc.storage_path else None, path_id=doc.storage_path.id if doc.storage_path else None, has_path=doc.storage_path is not None, + comments=comments, ) @@ -255,7 +259,7 @@ class DelayedFullTextQuery(DelayedQuery): def _get_query(self): q_str = self.query_params["query"] qp = MultifieldParser( - ["content", "title", "correspondent", "tag", "type"], + ["content", "title", "correspondent", "tag", "type", "comments"], self.searcher.ixreader.schema, ) qp.add_plugin(DateParserPlugin()) From b869ad02a1f1fe05f789ac4a7adb917fdd571bc1 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 4 Jan 2023 19:06:51 -0800 Subject: [PATCH 10/16] comment search highlighting --- .../document-card-large.component.html | 8 +++++++- src-ui/src/app/data/paperless-document.ts | 1 + src/documents/views.py | 11 ++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index 80aedb7f2..0eb965a22 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -25,7 +25,13 @@

    - + + + + + + + {{contentTrimmed}}

    diff --git a/src-ui/src/app/data/paperless-document.ts b/src-ui/src/app/data/paperless-document.ts index 8b038d79e..cdee624af 100644 --- a/src-ui/src/app/data/paperless-document.ts +++ b/src-ui/src/app/data/paperless-document.ts @@ -10,6 +10,7 @@ export interface SearchHit { rank?: number highlights?: string + comment_highlights?: string } export interface PaperlessDocument extends ObjectWithId { diff --git a/src/documents/views.py b/src/documents/views.py index e313ae17e..c65b6f0b4 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -458,10 +458,19 @@ class DocumentViewSet( class SearchResultSerializer(DocumentSerializer): def to_representation(self, instance): doc = Document.objects.get(id=instance["id"]) + commentTerm = instance.results.q.subqueries[0] + comments = ",".join( + [ + str(c.comment) + for c in Comment.objects.filter(document=instance["id"]) + if commentTerm.text in c.comment + ], + ) r = super().to_representation(doc) r["__search_hit__"] = { "score": instance.score, - "highlights": instance.highlights("content", text=doc.content) + "highlights": instance.highlights("content", text=doc.content), + "comment_highlights": instance.highlights("content", text=comments) if doc else None, "rank": instance.rank, From 00d67d53bfef1544024820f5cf9ca686954667a3 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 5 Jan 2023 00:36:03 -0800 Subject: [PATCH 11/16] Add tests for mail rules / accounts, partial tags, mobile preview --- .../e2e/documents/document-detail.cy.ts | 17 +- .../e2e/documents/documents-list.cy.ts | 26 ++ src-ui/cypress/e2e/settings/settings.cy.ts | 98 +++++- .../fixtures/documents/selection_data.json | 293 ++++++++++++++++++ .../fixtures/mail_rules/mail_rules.json | 3 +- src-ui/cypress/support/e2e.ts | 6 +- .../document-detail.component.html | 6 +- 7 files changed, 433 insertions(+), 16 deletions(-) create mode 100644 src-ui/cypress/fixtures/documents/selection_data.json diff --git a/src-ui/cypress/e2e/documents/document-detail.cy.ts b/src-ui/cypress/e2e/documents/document-detail.cy.ts index a836ffa92..0cacbd81f 100644 --- a/src-ui/cypress/e2e/documents/document-detail.cy.ts +++ b/src-ui/cypress/e2e/documents/document-detail.cy.ts @@ -44,7 +44,7 @@ describe('document-detail', () => { }) cy.viewport(1024, 1024) - cy.visit('/documents/1/') + cy.visit('/documents/1/').wait('@ui-settings') }) it('should activate / deactivate save button when changes are saved', () => { @@ -66,8 +66,21 @@ describe('document-detail', () => { cy.contains('You have unsaved changes').should('not.exist') }) + it('should show a mobile preview', () => { + cy.viewport(440, 1000) + cy.get('a') + .contains('Preview') + .scrollIntoView({ offset: { top: 150, left: 0 } }) + .click() + cy.get('pdf-viewer').should('be.visible') + }) + it('should show a list of comments', () => { - cy.wait(1000).get('a').contains('Comments').click().wait(1000) + cy.wait(1000) + .get('a') + .contains('Comments') + .click({ force: true }) + .wait(1000) cy.get('app-document-comments').find('.card').its('length').should('eq', 3) }) diff --git a/src-ui/cypress/e2e/documents/documents-list.cy.ts b/src-ui/cypress/e2e/documents/documents-list.cy.ts index ccce51950..84b396625 100644 --- a/src-ui/cypress/e2e/documents/documents-list.cy.ts +++ b/src-ui/cypress/e2e/documents/documents-list.cy.ts @@ -52,6 +52,10 @@ describe('documents-list', () => { req.reply(response) }) + + cy.intercept('http://localhost:8000/api/documents/selection_data/', { + fixture: 'documents/selection_data.json', + }).as('selection-data') }) cy.viewport(1280, 1024) @@ -76,6 +80,28 @@ describe('documents-list', () => { cy.get('app-document-card-large') }) + it('should show partial tag selection', () => { + cy.get('app-document-card-small:nth-child(1)').click() + cy.get('app-document-card-small:nth-child(4)').click() + cy.get('app-bulk-editor button') + .contains('Tags') + .click() + .wait('@selection-data') + cy.get('svg.bi-dash').should('be.visible') + cy.get('svg.bi-check').should('be.visible') + }) + + it('should allow bulk removal', () => { + cy.get('app-document-card-small:nth-child(1)').click() + cy.get('app-document-card-small:nth-child(4)').click() + cy.get('app-bulk-editor').within(() => { + cy.get('button').contains('Tags').click().wait('@selection-data') + cy.get('button').contains('Another Sample Tag').click() + cy.get('button').contains('Apply').click() + }) + cy.contains('operation will remove the tag') + }) + it('should filter tags', () => { cy.get('app-filter-editor app-filterable-dropdown[title="Tags"]').within( () => { diff --git a/src-ui/cypress/e2e/settings/settings.cy.ts b/src-ui/cypress/e2e/settings/settings.cy.ts index aa59997d4..95443bbe2 100644 --- a/src-ui/cypress/e2e/settings/settings.cy.ts +++ b/src-ui/cypress/e2e/settings/settings.cy.ts @@ -35,16 +35,58 @@ describe('settings', () => { req.reply(response) } ).as('savedViews') + }) - cy.intercept('http://localhost:8000/api/mail_accounts/*', { - fixture: 'mail_accounts/mail_accounts.json', - }) - cy.intercept('http://localhost:8000/api/mail_rules/*', { - fixture: 'mail_rules/mail_rules.json', - }).as('mailRules') - cy.intercept('http://localhost:8000/api/tasks/', { - fixture: 'tasks/tasks.json', - }) + this.newMailAccounts = [] + + cy.intercept( + 'POST', + 'http://localhost:8000/api/mail_accounts/', + (req) => { + const newRule = req.body + newRule.id = 3 + this.newMailAccounts.push(newRule) // store this for later + req.reply({ result: 'OK' }) + } + ).as('saveAccount') + + cy.fixture('mail_accounts/mail_accounts.json').then( + (mailAccountsJson) => { + cy.intercept( + 'GET', + 'http://localhost:8000/api/mail_accounts/*', + (req) => { + console.log(req, this.newMailAccounts) + + let response = { ...mailAccountsJson } + if (this.newMailAccounts.length) { + response.results = response.results.concat(this.newMailAccounts) + } + + req.reply(response) + } + ).as('getAccounts') + } + ) + + this.newMailRules = [] + + cy.intercept('POST', 'http://localhost:8000/api/mail_rules/', (req) => { + const newRule = req.body + newRule.id = 2 + this.newMailRules.push(newRule) // store this for later + req.reply({ result: 'OK' }) + }).as('saveRule') + + cy.fixture('mail_rules/mail_rules.json').then((mailRulesJson) => { + cy.intercept('GET', 'http://localhost:8000/api/mail_rules/*', (req) => { + let response = { ...mailRulesJson } + if (this.newMailRules.length) { + response.results = response.results.concat(this.newMailRules) + } + + req.reply(response) + }).as('getRules') }) cy.fixture('documents/documents.json').then((documentsJson) => { @@ -99,4 +141,42 @@ describe('settings', () => { cy.visit('/dashboard') cy.get('app-saved-view-widget').contains('Inbox').should('not.exist') }) + + it('should show a list of mail accounts & rules & support creation', () => { + cy.contains('a', 'Mail').click() + cy.get('app-settings .tab-content ul li').its('length').should('eq', 5) // 2 headers, 2 accounts, 1 rule + cy.contains('button', 'Add Account').click() + cy.contains('Create new mail account') + cy.get('app-input-text[formcontrolname="name"]').type( + 'Example Mail Account' + ) + cy.get('app-input-text[formcontrolname="imap_server"]').type( + 'mail.example.com' + ) + cy.get('app-input-text[formcontrolname="imap_port"]').type('993') + cy.get('app-input-text[formcontrolname="username"]').type('username') + cy.get('app-input-password[formcontrolname="password"]').type('pass') + cy.contains('app-mail-account-edit-dialog button', 'Save') + .click() + .wait('@saveAccount') + .wait('@getAccounts') + cy.contains('Saved account') + + cy.wait(1000) + cy.contains('button', 'Add Rule').click() + cy.contains('Create new mail rule') + cy.get('app-input-text[formcontrolname="name"]').type('Example Rule') + cy.get('app-input-select[formcontrolname="account"]').type('Example{enter}') + cy.get('app-input-number[formcontrolname="maximum_age"]').type('30') + cy.get('app-input-text[formcontrolname="filter_subject"]').type( + '[paperless]' + ) + cy.contains('app-mail-rule-edit-dialog button', 'Save') + .click() + .wait('@saveRule') + .wait('@getRules') + cy.contains('Saved rule').wait(1000) + + cy.get('app-settings .tab-content ul li').its('length').should('eq', 7) + }) }) diff --git a/src-ui/cypress/fixtures/documents/selection_data.json b/src-ui/cypress/fixtures/documents/selection_data.json new file mode 100644 index 000000000..a01957e42 --- /dev/null +++ b/src-ui/cypress/fixtures/documents/selection_data.json @@ -0,0 +1,293 @@ +{ + "selected_correspondents": [ + { + "id": 62, + "document_count": 0 + }, + { + "id": 75, + "document_count": 0 + }, + { + "id": 55, + "document_count": 0 + }, + { + "id": 56, + "document_count": 0 + }, + { + "id": 73, + "document_count": 0 + }, + { + "id": 58, + "document_count": 0 + }, + { + "id": 44, + "document_count": 0 + }, + { + "id": 42, + "document_count": 0 + }, + { + "id": 74, + "document_count": 0 + }, + { + "id": 54, + "document_count": 0 + }, + { + "id": 29, + "document_count": 0 + }, + { + "id": 71, + "document_count": 0 + }, + { + "id": 68, + "document_count": 0 + }, + { + "id": 82, + "document_count": 0 + }, + { + "id": 34, + "document_count": 0 + }, + { + "id": 41, + "document_count": 0 + }, + { + "id": 51, + "document_count": 0 + }, + { + "id": 46, + "document_count": 0 + }, + { + "id": 40, + "document_count": 0 + }, + { + "id": 43, + "document_count": 0 + }, + { + "id": 80, + "document_count": 0 + }, + { + "id": 70, + "document_count": 0 + }, + { + "id": 52, + "document_count": 0 + }, + { + "id": 67, + "document_count": 0 + }, + { + "id": 53, + "document_count": 0 + }, + { + "id": 32, + "document_count": 0 + }, + { + "id": 63, + "document_count": 0 + }, + { + "id": 35, + "document_count": 0 + }, + { + "id": 45, + "document_count": 0 + }, + { + "id": 38, + "document_count": 0 + }, + { + "id": 79, + "document_count": 0 + }, + { + "id": 48, + "document_count": 0 + }, + { + "id": 72, + "document_count": 0 + }, + { + "id": 78, + "document_count": 0 + }, + { + "id": 39, + "document_count": 0 + }, + { + "id": 57, + "document_count": 0 + }, + { + "id": 61, + "document_count": 0 + }, + { + "id": 81, + "document_count": 0 + }, + { + "id": 77, + "document_count": 0 + }, + { + "id": 69, + "document_count": 0 + }, + { + "id": 36, + "document_count": 3 + }, + { + "id": 31, + "document_count": 0 + }, + { + "id": 30, + "document_count": 0 + }, + { + "id": 50, + "document_count": 0 + }, + { + "id": 49, + "document_count": 0 + }, + { + "id": 60, + "document_count": 0 + }, + { + "id": 47, + "document_count": 0 + }, + { + "id": 66, + "document_count": 0 + }, + { + "id": 37, + "document_count": 0 + }, + { + "id": 28, + "document_count": 0 + }, + { + "id": 59, + "document_count": 0 + }, + { + "id": 33, + "document_count": 0 + }, + { + "id": 76, + "document_count": 0 + } + ], + "selected_tags": [ + { + "id": 4, + "document_count": 2 + }, + { + "id": 7, + "document_count": 0 + }, + { + "id": 5, + "document_count": 1 + }, + { + "id": 6, + "document_count": 0 + }, + { + "id": 3, + "document_count": 0 + }, + { + "id": 2, + "document_count": 1 + }, + { + "id": 1, + "document_count": 0 + }, + { + "id": 8, + "document_count": 0 + } + ], + "selected_document_types": [ + { + "id": 4, + "document_count": 0 + }, + { + "id": 10, + "document_count": 0 + }, + { + "id": 2, + "document_count": 0 + }, + { + "id": 11, + "document_count": 0 + }, + { + "id": 9, + "document_count": 0 + }, + { + "id": 7, + "document_count": 2 + }, + { + "id": 3, + "document_count": 0 + }, + { + "id": 1, + "document_count": 0 + }, + { + "id": 5, + "document_count": 0 + }, + { + "id": 8, + "document_count": 1 + } + ], + "selected_storage_paths": [] +} diff --git a/src-ui/cypress/fixtures/mail_rules/mail_rules.json b/src-ui/cypress/fixtures/mail_rules/mail_rules.json index a2c59c5c6..7767940e7 100644 --- a/src-ui/cypress/fixtures/mail_rules/mail_rules.json +++ b/src-ui/cypress/fixtures/mail_rules/mail_rules.json @@ -23,7 +23,8 @@ "assign_correspondent": 2, "assign_document_type": null, "order": 0, - "attachment_type": 2 + "attachment_type": 2, + "consumption_scope": 1 } ] } diff --git a/src-ui/cypress/support/e2e.ts b/src-ui/cypress/support/e2e.ts index 4004aa8a0..1d17409c2 100644 --- a/src-ui/cypress/support/e2e.ts +++ b/src-ui/cypress/support/e2e.ts @@ -3,7 +3,7 @@ beforeEach(() => { cy.intercept('http://localhost:8000/api/ui_settings/', { fixture: 'ui_settings/settings.json', - }) + }).as('ui-settings') cy.intercept('http://localhost:8000/api/remote_version/', { fixture: 'remote_version/remote_version.json', @@ -29,6 +29,10 @@ beforeEach(() => { fixture: 'storage_paths/storage_paths.json', }) + cy.intercept('http://localhost:8000/api/tasks/', { + fixture: 'tasks/tasks.json', + }) + cy.intercept('http://localhost:8000/api/documents/1/metadata/', { fixture: 'documents/1/metadata.json', }) diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 92b40014c..19ae590a7 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -180,9 +180,9 @@
    -   -   -   +   +   +  
    From d7939ca958724b4616c44cb5cc819b40506b0101 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 4 Jan 2023 09:01:23 -0800 Subject: [PATCH 12/16] Fixes some sample test files showing as modified after running tests --- src/documents/tests/test_classifier.py | 18 +++++--- src/paperless_tesseract/tests/test_parser.py | 43 ++++++++++++-------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/documents/tests/test_classifier.py b/src/documents/tests/test_classifier.py index 8daaafc07..057f67204 100644 --- a/src/documents/tests/test_classifier.py +++ b/src/documents/tests/test_classifier.py @@ -1,5 +1,6 @@ import os import re +import shutil import tempfile from pathlib import Path from unittest import mock @@ -27,6 +28,9 @@ def dummy_preprocess(content: str): class TestClassifier(DirectoriesMixin, TestCase): + + SAMPLE_MODEL_FILE = os.path.join(os.path.dirname(__file__), "data", "model.pickle") + def setUp(self): super().setUp() self.classifier = DocumentClassifier() @@ -213,13 +217,14 @@ class TestClassifier(DirectoriesMixin, TestCase): # self.classifier.train() # self.classifier.save() - @override_settings( - MODEL_FILE=os.path.join(os.path.dirname(__file__), "data", "model.pickle"), - ) def test_load_and_classify(self): # Generate test data, train and save to the model file # This ensures the model file sklearn version matches # and eliminates a warning + shutil.copy( + self.SAMPLE_MODEL_FILE, + os.path.join(self.dirs.data_dir, "classification_model.pickle"), + ) self.generate_test_data() self.classifier.train() self.classifier.save() @@ -230,9 +235,6 @@ class TestClassifier(DirectoriesMixin, TestCase): self.assertCountEqual(new_classifier.predict_tags(self.doc2.content), [45, 12]) - @override_settings( - MODEL_FILE=os.path.join(os.path.dirname(__file__), "data", "model.pickle"), - ) @mock.patch("documents.classifier.pickle.load") def test_load_corrupt_file(self, patched_pickle_load): """ @@ -243,6 +245,10 @@ class TestClassifier(DirectoriesMixin, TestCase): THEN: - The ClassifierModelCorruptError is raised """ + shutil.copy( + self.SAMPLE_MODEL_FILE, + os.path.join(self.dirs.data_dir, "classification_model.pickle"), + ) # First load is the schema version patched_pickle_load.side_effect = [DocumentClassifier.FORMAT_VERSION, OSError()] diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 28af8dec1..956c56862 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -573,15 +573,18 @@ class TestParser(DirectoriesMixin, TestCase): - Text from all pages extracted """ parser = RasterisedDocumentParser(None) - parser.parse( - os.path.join(self.SAMPLE_FILES, "multi-page-images-alpha.tiff"), - "image/tiff", - ) - self.assertTrue(os.path.isfile(parser.archive_path)) - self.assertContainsStrings( - parser.get_text().lower(), - ["page 1", "page 2", "page 3"], - ) + sample_file = os.path.join(self.SAMPLE_FILES, "multi-page-images-alpha.tiff") + with tempfile.NamedTemporaryFile() as tmp_file: + shutil.copy(sample_file, tmp_file.name) + parser.parse( + tmp_file.name, + "image/tiff", + ) + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertContainsStrings( + parser.get_text().lower(), + ["page 1", "page 2", "page 3"], + ) def test_multi_page_tiff_alpha_srgb(self): """ @@ -595,15 +598,21 @@ class TestParser(DirectoriesMixin, TestCase): - Text from all pages extracted """ parser = RasterisedDocumentParser(None) - parser.parse( - os.path.join(self.SAMPLE_FILES, "multi-page-images-alpha-rgb.tiff"), - "image/tiff", - ) - self.assertTrue(os.path.isfile(parser.archive_path)) - self.assertContainsStrings( - parser.get_text().lower(), - ["page 1", "page 2", "page 3"], + sample_file = os.path.join( + self.SAMPLE_FILES, + "multi-page-images-alpha-rgb.tiff", ) + with tempfile.NamedTemporaryFile() as tmp_file: + shutil.copy(sample_file, tmp_file.name) + parser.parse( + tmp_file.name, + "image/tiff", + ) + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertContainsStrings( + parser.get_text().lower(), + ["page 1", "page 2", "page 3"], + ) def test_ocrmypdf_parameters(self): parser = RasterisedDocumentParser(None) From a340b9c8a17809684edd8be82bb9e7efa2c868ad Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 4 Jan 2023 09:01:49 -0800 Subject: [PATCH 13/16] Only prints failures, errors and skips, not passed tests --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afdfa646e..d0015fd49 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -149,7 +149,7 @@ jobs: name: Tests run: | cd src/ - pipenv run pytest -rfEp + pipenv run pytest -ra - name: Get changed files id: changed-files-specific From d19bf59f472a4107930e2d2678165cac04084aa7 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 4 Jan 2023 10:18:31 -0800 Subject: [PATCH 14/16] Cleans up and improves parser discovery testing, simplifies the determination of supported or not supported extensions and mime types --- src/documents/parsers.py | 42 ++++++---- src/documents/tests/test_parsers.py | 116 ++++++++++++++++++++-------- 2 files changed, 109 insertions(+), 49 deletions(-) diff --git a/src/documents/parsers.py b/src/documents/parsers.py index e2309b366..240d60e7f 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -6,12 +6,12 @@ import re import shutil import subprocess import tempfile +from functools import cache from typing import Iterator from typing import Match from typing import Optional from typing import Set -import magic from django.conf import settings from django.utils import timezone from documents.loggers import LoggingMixin @@ -45,11 +45,20 @@ DATE_REGEX = re.compile( logger = logging.getLogger("paperless.parsing") -def is_mime_type_supported(mime_type) -> bool: +@cache +def is_mime_type_supported(mime_type: str) -> bool: + """ + Returns True if the mime type is supported, False otherwise + """ return get_parser_class_for_mime_type(mime_type) is not None -def get_default_file_extension(mime_type) -> str: +@cache +def get_default_file_extension(mime_type: str) -> str: + """ + Returns the default file extension for a mimetype, or + an empty string if it could not be determined + """ for response in document_consumer_declaration.send(None): parser_declaration = response[1] supported_mime_types = parser_declaration["mime_types"] @@ -64,7 +73,12 @@ def get_default_file_extension(mime_type) -> str: return "" -def is_file_ext_supported(ext) -> bool: +@cache +def is_file_ext_supported(ext: str) -> bool: + """ + Returns True if the file extension is supported, False otherwise + TODO: Investigate why this really exists, why not use mimetype + """ if ext: return ext.lower() in get_supported_file_extensions() else: @@ -79,11 +93,19 @@ def get_supported_file_extensions() -> Set[str]: for mime_type in supported_mime_types: extensions.update(mimetypes.guess_all_extensions(mime_type)) + # Python's stdlib might be behind, so also add what the parser + # says is the default extension + # This makes image/webp supported on Python < 3.11 + extensions.add(supported_mime_types[mime_type]) return extensions -def get_parser_class_for_mime_type(mime_type): +def get_parser_class_for_mime_type(mime_type: str) -> Optional["DocumentParser"]: + """ + Returns the best parser (by weight) for the given mimetype or + None if no parser exists + """ options = [] @@ -103,16 +125,6 @@ def get_parser_class_for_mime_type(mime_type): return sorted(options, key=lambda _: _["weight"], reverse=True)[0]["parser"] -def get_parser_class(path): - """ - Determine the appropriate parser class based on the file - """ - - mime_type = magic.from_file(path, mime=True) - - return get_parser_class_for_mime_type(mime_type) - - def run_convert( input_file, output_file, diff --git a/src/documents/tests/test_parsers.py b/src/documents/tests/test_parsers.py index 1942fe0dd..8ba2c70ee 100644 --- a/src/documents/tests/test_parsers.py +++ b/src/documents/tests/test_parsers.py @@ -1,14 +1,8 @@ -import os -import shutil -import tempfile from tempfile import TemporaryDirectory from unittest import mock -from django.test import override_settings from django.test import TestCase -from documents.parsers import DocumentParser from documents.parsers import get_default_file_extension -from documents.parsers import get_parser_class from documents.parsers import get_parser_class_for_mime_type from documents.parsers import get_supported_file_extensions from documents.parsers import is_file_ext_supported @@ -16,21 +10,18 @@ from paperless_tesseract.parsers import RasterisedDocumentParser from paperless_text.parsers import TextDocumentParser -def fake_magic_from_file(file, mime=False): - - if mime: - if os.path.splitext(file)[1] == ".pdf": - return "application/pdf" - else: - return "unknown" - else: - return "A verbose string that describes the contents of the file" - - -@mock.patch("documents.parsers.magic.from_file", fake_magic_from_file) class TestParserDiscovery(TestCase): @mock.patch("documents.parsers.document_consumer_declaration.send") - def test__get_parser_class_1_parser(self, m, *args): + def test_get_parser_class_1_parser(self, m, *args): + """ + GIVEN: + - Parser declared for a given mimetype + WHEN: + - Attempt to get parser for the mimetype + THEN: + - Declared parser class is returned + """ + class DummyParser: pass @@ -45,10 +36,20 @@ class TestParserDiscovery(TestCase): ), ) - self.assertEqual(get_parser_class("doc.pdf"), DummyParser) + self.assertEqual(get_parser_class_for_mime_type("application/pdf"), DummyParser) @mock.patch("documents.parsers.document_consumer_declaration.send") - def test__get_parser_class_n_parsers(self, m, *args): + def test_get_parser_class_n_parsers(self, m, *args): + """ + GIVEN: + - Two parsers declared for a given mimetype + - Second parser has a higher weight + WHEN: + - Attempt to get parser for the mimetype + THEN: + - Second parser class is returned + """ + class DummyParser1: pass @@ -74,30 +75,77 @@ class TestParserDiscovery(TestCase): ), ) - self.assertEqual(get_parser_class("doc.pdf"), DummyParser2) + self.assertEqual( + get_parser_class_for_mime_type("application/pdf"), + DummyParser2, + ) @mock.patch("documents.parsers.document_consumer_declaration.send") - def test__get_parser_class_0_parsers(self, m, *args): + def test_get_parser_class_0_parsers(self, m, *args): + """ + GIVEN: + - No parsers are declared + WHEN: + - Attempt to get parser for the mimetype + THEN: + - No parser class is returned + """ m.return_value = [] with TemporaryDirectory() as tmpdir: - self.assertIsNone(get_parser_class("doc.pdf")) + self.assertIsNone(get_parser_class_for_mime_type("application/pdf")) + @mock.patch("documents.parsers.document_consumer_declaration.send") + def test_get_parser_class_no_valid_parser(self, m, *args): + """ + GIVEN: + - No parser declared for a given mimetype + - Parser declared for a different mimetype + WHEN: + - Attempt to get parser for the given mimetype + THEN: + - No parser class is returned + """ -def fake_get_thumbnail(self, path, mimetype, file_name): - return os.path.join(os.path.dirname(__file__), "examples", "no-text.png") + class DummyParser: + pass + + m.return_value = ( + ( + None, + { + "weight": 0, + "parser": DummyParser, + "mime_types": {"application/pdf": ".pdf"}, + }, + ), + ) + + self.assertIsNone(get_parser_class_for_mime_type("image/tiff")) class TestParserAvailability(TestCase): def test_file_extensions(self): - for ext in [".pdf", ".jpe", ".jpg", ".jpeg", ".txt", ".csv"]: - self.assertIn(ext, get_supported_file_extensions()) - self.assertEqual(get_default_file_extension("application/pdf"), ".pdf") - self.assertEqual(get_default_file_extension("image/png"), ".png") - self.assertEqual(get_default_file_extension("image/jpeg"), ".jpg") - self.assertEqual(get_default_file_extension("text/plain"), ".txt") - self.assertEqual(get_default_file_extension("text/csv"), ".csv") + supported_mimes_and_exts = [ + ("application/pdf", ".pdf"), + ("image/png", ".png"), + ("image/jpeg", ".jpg"), + ("image/tiff", ".tif"), + ("image/webp", ".webp"), + ("text/plain", ".txt"), + ("text/csv", ".csv"), + ] + + supported_exts = get_supported_file_extensions() + + for mime_type, ext in supported_mimes_and_exts: + self.assertIn(ext, supported_exts) + self.assertEqual(get_default_file_extension(mime_type), ext) + + # Test no parser declared still returns a an extension self.assertEqual(get_default_file_extension("application/zip"), ".zip") + + # Test invalid mimetype returns no extension self.assertEqual(get_default_file_extension("aasdasd/dgfgf"), "") self.assertIsInstance( @@ -108,7 +156,7 @@ class TestParserAvailability(TestCase): get_parser_class_for_mime_type("text/plain")(logging_group=None), TextDocumentParser, ) - self.assertEqual(get_parser_class_for_mime_type("text/sdgsdf"), None) + self.assertIsNone(get_parser_class_for_mime_type("text/sdgsdf")) self.assertTrue(is_file_ext_supported(".pdf")) self.assertFalse(is_file_ext_supported(".hsdfh")) From 6ff28c92a483016a7fcd4c718f7367a83a49ab89 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 4 Jan 2023 10:41:40 -0800 Subject: [PATCH 15/16] Resolves minor flake8 warnings in the test suite --- src/documents/tests/test_admin.py | 2 -- src/documents/tests/test_api.py | 11 +++++------ src/documents/tests/test_barcodes.py | 2 +- src/documents/tests/test_checks.py | 1 - src/documents/tests/test_consumer.py | 1 - src/documents/tests/test_date_parsing.py | 1 - src/documents/tests/test_management.py | 6 +++--- src/documents/tests/test_management_thumbnails.py | 3 --- src/documents/tests/test_migration_webp_conversion.py | 1 - src/paperless_mail/tests/test_mail.py | 6 +++--- src/paperless_mail/tests/test_parsers_live.py | 1 - src/paperless_tika/tests/test_live_tika.py | 1 - 12 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/documents/tests/test_admin.py b/src/documents/tests/test_admin.py index edbeb6f4c..7a39c95be 100644 --- a/src/documents/tests/test_admin.py +++ b/src/documents/tests/test_admin.py @@ -1,5 +1,3 @@ -from unittest import mock - from django.contrib.admin.sites import AdminSite from django.test import TestCase from django.utils import timezone diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 55a176247..dace48578 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -33,7 +33,6 @@ from documents.models import SavedView from documents.models import StoragePath from documents.models import Tag from documents.models import Comment -from documents.models import StoragePath from documents.tests.utils import DirectoriesMixin from paperless import version from rest_framework.test import APITestCase @@ -480,7 +479,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertNotIn(result["id"], seen_ids) seen_ids.append(result["id"]) - response = self.client.get(f"/api/documents/?query=content&page=6&page_size=10") + response = self.client.get("/api/documents/?query=content&page=6&page_size=10") results = response.data["results"] self.assertEqual(response.data["count"], 55) self.assertEqual(len(results), 5) @@ -500,9 +499,9 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): ) index.update_document(writer, doc) - response = self.client.get(f"/api/documents/?query=content&page=0&page_size=10") + response = self.client.get("/api/documents/?query=content&page=0&page_size=10") self.assertEqual(response.status_code, 404) - response = self.client.get(f"/api/documents/?query=content&page=3&page_size=10") + response = self.client.get("/api/documents/?query=content&page=3&page_size=10") self.assertEqual(response.status_code, 404) @mock.patch("documents.index.autocomplete") @@ -1080,7 +1079,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): self.assertEqual(meta["archive_size"], os.stat(archive_file).st_size) def test_get_metadata_invalid_doc(self): - response = self.client.get(f"/api/documents/34576/metadata/") + response = self.client.get("/api/documents/34576/metadata/") self.assertEqual(response.status_code, 404) def test_get_metadata_no_archive(self): @@ -1145,7 +1144,7 @@ class TestDocumentApi(DirectoriesMixin, APITestCase): ) def test_get_suggestions_invalid_doc(self): - response = self.client.get(f"/api/documents/34676/suggestions/") + response = self.client.get("/api/documents/34676/suggestions/") self.assertEqual(response.status_code, 404) @mock.patch("documents.views.match_storage_paths") diff --git a/src/documents/tests/test_barcodes.py b/src/documents/tests/test_barcodes.py index ef086626d..0c4660fed 100644 --- a/src/documents/tests/test_barcodes.py +++ b/src/documents/tests/test_barcodes.py @@ -401,7 +401,7 @@ class TestBarcode(DirectoriesMixin, TestCase): self.assertEqual( cm.output, [ - f"WARNING:paperless.barcodes:No pages to split on!", + "WARNING:paperless.barcodes:No pages to split on!", ], ) diff --git a/src/documents/tests/test_checks.py b/src/documents/tests/test_checks.py index ec610b896..a331572da 100644 --- a/src/documents/tests/test_checks.py +++ b/src/documents/tests/test_checks.py @@ -1,5 +1,4 @@ import textwrap -import unittest from unittest import mock from django.core.checks import Error diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index f6685ad02..dc86de331 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -4,7 +4,6 @@ import re import shutil import stat import tempfile -from subprocess import CalledProcessError from unittest import mock from unittest.mock import MagicMock diff --git a/src/documents/tests/test_date_parsing.py b/src/documents/tests/test_date_parsing.py index b9151a6f7..30466a83f 100644 --- a/src/documents/tests/test_date_parsing.py +++ b/src/documents/tests/test_date_parsing.py @@ -9,7 +9,6 @@ from django.test import override_settings from django.test import TestCase from documents.parsers import parse_date from documents.parsers import parse_date_generator -from paperless.settings import DATE_ORDER class TestDate(TestCase): diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index fe217676b..2844a0a30 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -88,10 +88,10 @@ class TestArchiver(DirectoriesMixin, TestCase): mime_type="application/pdf", filename="document_01.pdf", ) - shutil.copy(sample_file, os.path.join(self.dirs.originals_dir, f"document.pdf")) + shutil.copy(sample_file, os.path.join(self.dirs.originals_dir, "document.pdf")) shutil.copy( sample_file, - os.path.join(self.dirs.originals_dir, f"document_01.pdf"), + os.path.join(self.dirs.originals_dir, "document_01.pdf"), ) update_document_archive_file(doc2.pk) @@ -150,7 +150,7 @@ class TestDecryptDocuments(TestCase): "samples", "documents", "thumbnails", - f"0000004.webp.gpg", + "0000004.webp.gpg", ), os.path.join(thumb_dir, f"{doc.id:07}.webp.gpg"), ) diff --git a/src/documents/tests/test_management_thumbnails.py b/src/documents/tests/test_management_thumbnails.py index 0e643c354..48821725b 100644 --- a/src/documents/tests/test_management_thumbnails.py +++ b/src/documents/tests/test_management_thumbnails.py @@ -5,10 +5,7 @@ from unittest import mock from django.core.management import call_command from django.test import TestCase from documents.management.commands.document_thumbnails import _process_document -from documents.models import Correspondent from documents.models import Document -from documents.models import DocumentType -from documents.models import Tag from documents.tests.utils import DirectoriesMixin diff --git a/src/documents/tests/test_migration_webp_conversion.py b/src/documents/tests/test_migration_webp_conversion.py index a3a5fa6bc..9631c5704 100644 --- a/src/documents/tests/test_migration_webp_conversion.py +++ b/src/documents/tests/test_migration_webp_conversion.py @@ -7,7 +7,6 @@ from typing import Union from unittest import mock from django.test import override_settings -from documents.tests.test_migration_archive_files import thumbnail_path from documents.tests.utils import TestMigrations diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 28d40be7c..3a17d7ab3 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -69,7 +69,7 @@ class BogusClient: if message.uid == args[0]: flag = args[2] if flag == "processed": - message._raw_flag_data.append(f"+FLAGS (processed)".encode()) + message._raw_flag_data.append(b"+FLAGS (processed)") MailMessage.flags.fget.cache_clear() @@ -153,7 +153,7 @@ class BogusMailBox(ContextManager): if flag == MailMessageFlags.SEEN: message.seen = value if flag == "processed": - message._raw_flag_data.append(f"+FLAGS (processed)".encode()) + message._raw_flag_data.append(b"+FLAGS (processed)") MailMessage.flags.fget.cache_clear() def move(self, uid_list, folder): @@ -223,7 +223,7 @@ def create_message( imap_msg.seen = seen imap_msg.flagged = flagged if processed: - imap_msg._raw_flag_data.append(f"+FLAGS (processed)".encode()) + imap_msg._raw_flag_data.append(b"+FLAGS (processed)") MailMessage.flags.fget.cache_clear() return imap_msg diff --git a/src/paperless_mail/tests/test_parsers_live.py b/src/paperless_mail/tests/test_parsers_live.py index 264f99316..7ea56d7e4 100644 --- a/src/paperless_mail/tests/test_parsers_live.py +++ b/src/paperless_mail/tests/test_parsers_live.py @@ -6,7 +6,6 @@ from urllib.request import urlopen import pytest from django.test import TestCase -from documents.parsers import ParseError from documents.parsers import run_convert from imagehash import average_hash from paperless_mail.parsers import MailDocumentParser diff --git a/src/paperless_tika/tests/test_live_tika.py b/src/paperless_tika/tests/test_live_tika.py index b5efc7cef..60c2b96a4 100644 --- a/src/paperless_tika/tests/test_live_tika.py +++ b/src/paperless_tika/tests/test_live_tika.py @@ -5,7 +5,6 @@ from typing import Final import pytest from django.test import TestCase -from documents.parsers import ParseError from paperless_tika.parsers import TikaDocumentParser From 729845662fb851df232e54555721cc5964400875 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 4 Jan 2023 13:12:04 -0800 Subject: [PATCH 16/16] Removes old, unused tools from develop packages, removes old Sphinx related tools --- Pipfile | 4 - Pipfile.lock | 309 ++++++++++++++++----------------------------------- 2 files changed, 95 insertions(+), 218 deletions(-) diff --git a/Pipfile b/Pipfile index 58307af2d..4309f5a2b 100644 --- a/Pipfile +++ b/Pipfile @@ -74,17 +74,13 @@ channels-redis = "==3.4.1" [dev-packages] coveralls = "*" factory-boy = "*" -pycodestyle = "*" pytest = "*" pytest-cov = "*" pytest-django = "*" pytest-env = "*" pytest-sugar = "*" pytest-xdist = "*" -tox = "*" black = "*" pre-commit = "*" -sphinx-autobuild = "*" -myst-parser = "*" imagehash = "*" mkdocs-material = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 585d8ede7..5d48c18dd 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "cbfe9920231de6e7f993962efb3cc371abdb6b08975232d4cf64d1bad1b53d7a" + "sha256": "cda8a69041c65176017700e723e8ae57849e0a98a0d2f02323c0078064e91db9" }, "pipfile-spec": 6, "requires": {}, @@ -1946,13 +1946,6 @@ } }, "develop": { - "alabaster": { - "hashes": [ - "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", - "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" - ], - "version": "==0.7.12" - }, "attrs": { "hashes": [ "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", @@ -1961,14 +1954,6 @@ "markers": "python_version >= '3.6'", "version": "==22.2.0" }, - "babel": { - "hashes": [ - "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe", - "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6" - ], - "markers": "python_version >= '3.6'", - "version": "==2.11.0" - }, "black": { "hashes": [ "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320", @@ -1987,14 +1972,6 @@ "index": "pypi", "version": "==22.12.0" }, - "cachetools": { - "hashes": [ - "sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757", - "sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db" - ], - "markers": "python_version ~= '3.7'", - "version": "==5.2.0" - }, "certifi": { "hashes": [ "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", @@ -2011,14 +1988,6 @@ "markers": "python_full_version >= '3.6.1'", "version": "==3.3.1" }, - "chardet": { - "hashes": [ - "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5", - "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9" - ], - "markers": "python_version >= '3.7'", - "version": "==5.1.0" - }, "charset-normalizer": { "hashes": [ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", @@ -2120,14 +2089,6 @@ ], "version": "==0.6.2" }, - "docutils": { - "hashes": [ - "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", - "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" - ], - "markers": "python_version >= '3.7'", - "version": "==0.19" - }, "exceptiongroup": { "hashes": [ "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e", @@ -2199,14 +2160,6 @@ "index": "pypi", "version": "==4.3.1" }, - "imagesize": { - "hashes": [ - "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", - "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.4.1" - }, "iniconfig": { "hashes": [ "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", @@ -2222,13 +2175,6 @@ "markers": "python_version >= '3.7'", "version": "==3.1.2" }, - "livereload": { - "hashes": [ - "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869", - "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4" - ], - "version": "==2.6.3" - }, "markdown": { "hashes": [ "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874", @@ -2237,14 +2183,6 @@ "markers": "python_version >= '3.6'", "version": "==3.3.7" }, - "markdown-it-py": { - "hashes": [ - "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27", - "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.0" - }, "markupsafe": { "hashes": [ "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", @@ -2291,22 +2229,6 @@ "markers": "python_version >= '3.7'", "version": "==2.1.1" }, - "mdit-py-plugins": { - "hashes": [ - "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9", - "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260" - ], - "markers": "python_version >= '3.7'", - "version": "==0.3.3" - }, - "mdurl": { - "hashes": [ - "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", - "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" - ], - "markers": "python_version >= '3.7'", - "version": "==0.1.2" - }, "mergedeep": { "hashes": [ "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", @@ -2346,14 +2268,6 @@ ], "version": "==0.4.3" }, - "myst-parser": { - "hashes": [ - "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8", - "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d" - ], - "index": "pypi", - "version": "==0.18.1" - }, "nodeenv": { "hashes": [ "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e", @@ -2503,14 +2417,6 @@ "index": "pypi", "version": "==2.21.0" }, - "pycodestyle": { - "hashes": [ - "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053", - "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610" - ], - "index": "pypi", - "version": "==2.10.0" - }, "pygments": { "hashes": [ "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", @@ -2527,14 +2433,6 @@ "markers": "python_version >= '3.7'", "version": "==9.9" }, - "pyproject-api": { - "hashes": [ - "sha256:093c047d192ceadcab7afd6b501276bf2ce44adf41cb9c313234518cddd20818", - "sha256:155d5623453173b7b4e9379a3146ccef2d52335234eb2d03d6ba730e7dad179c" - ], - "markers": "python_version >= '3.7'", - "version": "==1.2.1" - }, "pytest": { "hashes": [ "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71", @@ -2591,13 +2489,6 @@ "index": "pypi", "version": "==2.8.2" }, - "pytz": { - "hashes": [ - "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", - "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" - ], - "version": "==2022.7" - }, "pywavelets": { "hashes": [ "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b", @@ -2682,6 +2573,100 @@ "markers": "python_version >= '3.6'", "version": "==0.1" }, + "regex": { + "hashes": [ + "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad", + "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4", + "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd", + "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc", + "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d", + "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066", + "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec", + "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9", + "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e", + "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8", + "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e", + "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783", + "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6", + "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1", + "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c", + "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4", + "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1", + "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1", + "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7", + "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8", + "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe", + "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d", + "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b", + "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8", + "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c", + "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af", + "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49", + "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714", + "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542", + "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318", + "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e", + "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5", + "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc", + "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144", + "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453", + "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5", + "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61", + "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11", + "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a", + "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54", + "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73", + "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc", + "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347", + "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c", + "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66", + "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c", + "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93", + "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443", + "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc", + "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1", + "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892", + "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8", + "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001", + "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa", + "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90", + "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c", + "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0", + "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692", + "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4", + "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5", + "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690", + "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83", + "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66", + "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f", + "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f", + "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4", + "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee", + "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81", + "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95", + "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9", + "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff", + "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e", + "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5", + "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6", + "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7", + "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1", + "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394", + "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6", + "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742", + "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57", + "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b", + "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7", + "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b", + "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244", + "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af", + "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185", + "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8", + "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.10.31" + }, "requests": { "hashes": [ "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983", @@ -2735,77 +2720,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, - "snowballstemmer": { - "hashes": [ - "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", - "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" - ], - "version": "==2.2.0" - }, - "sphinx": { - "hashes": [ - "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d", - "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5" - ], - "markers": "python_version >= '3.6'", - "version": "==5.3.0" - }, - "sphinx-autobuild": { - "hashes": [ - "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac", - "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05" - ], - "index": "pypi", - "version": "==2021.3.14" - }, - "sphinxcontrib-applehelp": { - "hashes": [ - "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a", - "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.2" - }, - "sphinxcontrib-devhelp": { - "hashes": [ - "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e", - "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.2" - }, - "sphinxcontrib-htmlhelp": { - "hashes": [ - "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07", - "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2" - ], - "markers": "python_version >= '3.6'", - "version": "==2.0.0" - }, - "sphinxcontrib-jsmath": { - "hashes": [ - "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", - "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.1" - }, - "sphinxcontrib-qthelp": { - "hashes": [ - "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72", - "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.3" - }, - "sphinxcontrib-serializinghtml": { - "hashes": [ - "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd", - "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952" - ], - "markers": "python_version >= '3.5'", - "version": "==1.1.5" - }, "termcolor": { "hashes": [ "sha256:67cee2009adc6449c650f6bcf3bdeed00c8ba53a8cda5362733c53e0a39fb70b", @@ -2822,39 +2736,6 @@ "markers": "python_full_version < '3.11.0a7'", "version": "==2.0.1" }, - "tornado": { - "hashes": [ - "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca", - "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72", - "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23", - "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8", - "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b", - "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9", - "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13", - "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75", - "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac", - "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e", - "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b" - ], - "markers": "python_version >= '3.7'", - "version": "==6.2" - }, - "tox": { - "hashes": [ - "sha256:5d214ce3e480e3b2cce72dbc9e832296387e7311f76b70de4a649636d02e34c9", - "sha256:d6b9f9f77796fcb1260d46f12dd4d6ebcc16bb73e72f7a683421b365491a912e" - ], - "index": "pypi", - "version": "==4.1.1" - }, - "typing-extensions": { - "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" - ], - "markers": "python_version >= '3.7'", - "version": "==4.4.0" - }, "urllib3": { "hashes": [ "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc",