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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�*?9naYlIk3S<@Q9(lZQ)`9!sD5WVj&br(I%31_-^xZXT26xRl0tr1Ve9L z!>TxWAA_ojCJ^tPHH>=!j?W-z^#Na2ja`ZP$dHd(#QQZ~U)uE~QZHunI+KBrxhg!O zG~Y~<*I47saa5%=Ie$d0z_}u-q|o?W{M#R??ziYp%(*htY*RLGGOqR%7eX$v zYg#O1)(4C!^y$HNqUblfPP=dOOBD+x$G#)B!)VKOUxBV{lTz!zF$tAt*E`$blXLyFpD(Cwr9PW`vIV#z&bGv+he?IHgHHB&i$Sqy385j!qo~J(iKHFq7oHc#K#cw zSM8g)yY%8NlfN+rl{!or2{n;);PYW2Yx5cOByIJi%(k@O!TTdf+)rjHdI&#&;-b3z9NNWq*6207VH+msi#EKe z_G?%*mN&0B$vYV_a`JK7fP%?LAz0#XR{_z7DPN^nzbo1f@i**y8F`$a{+RG7=N`{| zIw?d{ZW3CW#)5ob>7#BrlU7UQG}^houJ_2SO_j(c<5S|_+7VdRh|1xv96@D=^VKA& zh(;V5oCWkQ$PNYIj%-1&_2TqLtoQkxx%DJk=xQdAxHw@lb3*Ye?B-)m}G3$sE`%_8m)i2&TnjduO)-Z)?`r0VPb(<|=m0zBwd zPKD`wK+UEzs)a2oxdeP_)raLORyO|Ppbk}=xcEb_+QsTN>M_H`y`Aq`h|Vns=!Ml) zBP)x96QTgV3iXJBFn;UqrskrB(^-FBQEbM35V~(Dj=yVrsBLG>_^bFjBj+m)W!715 zYXJbFF1lclli1MK`_!qRo#|_L8AeXpm$M|r5tDlFw_4FP2n>oKFH32bfZznwI zPQuwM8-`nbt#h-KoWo)MxtlM#T>h}obg&iv$&ceYd)$ho!B}iV)IfW*v0n?qTYT4$v2afiAK1hf>r-Du z?w*fr%CTGA$r3!$#*HWC27{73uQ;eiO_u%SfU#{Wefo+!l&T;?&y;rq9~a9^#Q|m* zWPDV5*=_K_QS7i>L1Iz;oOhNFX_J0^XBrgOX$$L6$eF$`*uN@z+WalQM-$K_+E$uB zjP&iX2822KGIRj2cT>sGlLKAdPGhEHA1!02k!WktcxnOeVbm76Y-2oO34o1h))CfM zRc1O;^+`29>ipNJxD9YCT{}m$&uiTPid{;os72l&-3uT>-h$oa*X@C+M0YrXUm=A+ z?$5D$%VqkiVPU690;kQ8a-AO6>dLGzC%02_ zf2C%({EWAjL$lMH|05_{0?69SfFN*2@#mReT0x#XSY~n$_~8JBsw>Qi46v)v&8cdc zm=BOs2{~j(WLk04Lk8;{Txlj|VDU50koPOwi$F;&=DUO)*4NFD304j$0QO9m-PKWK~EQ+ zMmMW^+xvp+mTO==ex$WtwyZd_z2d#)X*;D_-#J&2uN}6Yug;~i0nS8E?H;}g>;BS+ zYqx-1jS_5Y68@3GSE7WI?)%wVnZVoBvTO+3U}rc_B!`>|DM&#@W|zKeZ2;s_&JMl# z*xTGxsl!5u`|Y}TdRX^aTevtS^z@8DH$}uZs06Ev|CrtHmW8OgjgMic)jnj}A(AS< zy5IZrbp7!a6zlp{JNnm>JctuMBI%s8551+yIalwytBk|>rJCli&UQrH4}1u6P*}kU zRDLd(zGj3rf^3HV$mvacUi&KP-f5G;%6w?wb8xwz0S(99k)E~;Nxv1!zDq_YA2X}b zrR=|?_Q^suO2g3Pqlk?Mzw~HXGrJ2GHdZbX(uuH9Qcqy19?~1*WZB|jfr>|^GS2Ca z4d=Dk(%VaEYJH07=AZSWNiDfa;X{5&-fcfjJ5EX~P;kz_FeiW7H$!JcRh=4|E;GN| zHP&ijG}&(ydtsACF6oceuI^fdlOsE!l#+J6#<|X*!9Q>H`4=knh;Jf{km{kD0T!Er zAI{sB#LIR#dZnoJRh{(&$VSN(c>@0YR}Vw}>5{7O+(Xx^wqbP_ zO3JXBz(lx3UngDW_lRIiBa>MEV9UHykAz+CmhMzz-C+gO@PPMR$hQ3q+ppik;_oP9 zJ@-?xQ_`pn#+?SY0L1r^-U7&(^;eWNHMcF;TTB7Pl59njxrS9a{t3O6hO-v4end#O zp9w}XbDl-K@S5NvI!0gZ&}$YWY|f(i$7K z7FSPJi>f>r#j*mLXoCHzADp%fs9U}m#aO)uD27;0aI88q+-|vM!~T54)80gH`KtoB zyNO$d)inm?jC3-J9NgO~T&^y`6v~Ajg4ZimGP}V-iVAtCy7%7t*aDG!kLwjYMKx@o zEI(ZVC^l!Ok{AzjNnSUhXKUm-YzCPow6Wj`?}5yQ_W{^a>eSh+h8QS8iFr{T&n^5R zO<Lg*2qL0G&^yu| zHvYl(h*3|Akm*zu^abKMZtCK1urb+-UUCpWoxXMJ1-ej=jtn|qzvPKYv( zctVDGF>*WEE1K6lI7F!Q9$HG1WgW~aAG$&_cOW=&bZ?nq$v*h_NH5{%?hWVHf z;GxIrv{!610s9n9SDT}$%Yj3pTgJj85!y*yp4NE%0ENH6LcaJV&@x=6aNlt9EZN~G z=KwHFI)K;{cqm@DRC<(z378Q;IJ@j3mB&qxCzFNGOWAB2+*3pu-q zkq_jFR+^lZZ!R_h<;tpqWmkqIoUrPHxKlId5DF@~9fMbsPxpn*c+vEe6_e2MM;23S zR7QO?ySJ)0S;X1JIH$r{Zed1J5XYRc!X-D`EV|4}gud zas&9*ZW&t-wygPq)phAuDVq1q45D_Hd?Y(Fkb7-7ylifCAz~yn&mqKAA^5SmqdJ~F zRmD+KHZ6_=Ae*Ub$B>pzJu&ol0SoIh8HyZJ9w3FUw8`<$dcZ(~32anWvd9s<(qnVd z!aF(ZF9ZgTiuBBW*0#d*&N9)&j-k}#X_w8ooacoRbr-&!16D=Pl{Nec3m@nn7F{fn zCGKKuHaVE2D%r3pc`f+nC;yTO^RVvciIQ8drdR{nriYZTzd1}>g-1!)?x?6H4YjWX zg=$?%4D4JgK&lD`>;rl&*D&JcdL>j`ea*-t?WFZUypE%+TL`G)OcMa^JqD*Y({ReZ zdK*MORvY$P#7NGe%%{v9sC?2NY>T#*HL!Jzn?UCU&@157g{pzzoGD9yZU3f{^|&UY zO$I?uo%gw&yG1UOVEU(t-Y)8HA4<(mhifEL#Pv_XP0v20pQ;aaP^C?1Bsh{(zMs|f z^&86-?LU?6gnMavNrHSxQ-UPwKdX(mPSy8nZCilOgqys}U(vyMo|4SiB*$N-@$t6Y zG0p4I!y(jTM8^&2@dRv+ly4qH^Nq;yutpLIdn< zM?xCXbFCSo>*ZSn$M(9twDbro&O6j&?2i`?A&Vee%h~Oepcw^va^&gk3$YPdnEtSR z{`K2po&HGxJNlC@R+|Xe?!KE}06X60tPF?aegc98cw>cSLhirx5MLesi3Tb4$^SVr z|3-?jI^de-&9!=nHy(98L_M@4uwDhW+!J)L!=@t+pBhze?LsqVm`>F)bF%fChC)rf zUUJYa)<_=RrN7nd92aOFlWQdaOsH!35kdG`S4T~CS8M@t+Bg)wT#Y*-EjUt&&mav0 zFoI!Un83sv)1ZP0JqxZm{Z6D6v;qk34C?}Yg1?xqn9M%bC}Z6;QHUApoZk#zhb#s- zE9(d0jBDRtHsyaZzaiR`n~%Ss28TLuDCSn;8?sRkze2w0Z3uzx^Vev2 z3ZOG@@_VcG;5LLB6#v6H#qixw*vhlz#!oHXI~f9&`#SCb&@tpohzCRmFD-bjpJ-;bK?3SR z9vKoP`E|qz->E1HpVlRiANoDFQn$$_Gk*WN9+9^9JgW5VN@2^w+!_{Wt2#6`M>6SG zU0W&AlOXuFBdiwuCck33(nijHRp;FtF&`fCS@IRE#UY_OcAeo5P4CWEPZ;v5w$GX( zc8f(LE4rlbJkAOQxe^$~TsHvGgM3&WE1x~{{f3WYlXU1+kvD1ly`1{MGZVtLAUBEf zCDi##UUBLwu?Hl(89EEiJMJyF2*G?qD8=Nhps^`C{~`F=@Sw{td`rlQhgm;=4x55p@RvYxO5)LGJ|<$ ztf3+HjHZXiCG@vZ_GAU+hWN#YFS7?IYXnC+YA%)daqvlS^e10zj=&R|QQfxQGnCTO)BZ3P`D=ovqrNMYk*dn z_B~@KvWTX;i)bYkPI}$W4F{>0CbV}z-wn;AR^QZ>Ckwqx*ENfBuNQ%-aXii2Mx!O- z5fxGxD-CTlU810nyqE7NWeoFG6;9Y2Q-3h9!?71k_HSTl5&oDuSvy`mq2(Cy*~u-V zY=hh*7j0KcOcteP9B=1mmGkXFPg#8Y;hYhX2_u=EhT*sE zVG?MX)A4m=fy+9VI~B*`WRlL1AaJ9RBTf3d)NB3Vwq{yhYx&QmG53xVA8Oe|8%Ota z`}E1n-Q;JBGb%fATYWy66|L#x6=QJ${sYPLS0>zV*B`;eE86yUqW0SIwPz=H zq^dymWK7I*43JxboFq93CRwT;2TZ3byUgWFN#nUz3wjF;KqFGU)Q;F;>VqqBxY9Wv zVEQ&9l~KR0Ijw#yBe2dad*PsWM(C_cy!$=Ht>NpN8n4)I(0lV1HFHGuF|AvUp9wwd zjp~6p=`{_1Ui=)vm(InRK5DAAYuuQ7a7de&?^)}d?Ht#VYD{vr%lt}WT**qzjdUH* z_~GZ^xc^%dzKwp3#yVTjA?Ce}`L1TUV&vIIW#g$+Yg-alvi88yv0G4>h_%(m5k=gv z1pZ<_h;(X9ZH&513)5*Y>j@jR-V0tIHg@95dQupcdo#f%$0}lIcCuyhebmvB)0$g+ zPh3AXa~R^bVP^dUyN(JCA1?&IM@uD*2b9poJHMY{A`+M@91tB?-u{SHK7>L&zsZ>_ zx;NSi(7KZr-F`O_g@67tQF^kp9L4hP@aN{WOY*fytE1F+OV_YtdZXgM9VwC1O5Lar zd&=SN6$0GLynLwc!v`y(eI-v_E;rFmCa6$V89vbUP>b6}<5{z>6dPZ|EFZ?+hdr&j z*bygg?%QMi`}c@l1sjJ>HT)iJ?D44N&L+iOf!|Bq3l}FprdA!kf^K?}zCL|RQL^ct zlG7C&OysMClA;y5$2|^yPB-$-x;?KoZyr}i=Tz&7+z;yS4GERccWvS_NcsMyr5;%#hepMGHa|Weh|?L}o&aj3HX9s7wk7 zGDcKD#*}$ZP#|HB0wI7vAb~^@AWR`7A<6fo?|W8#&-vEx&*S>7FHgGK(v@Y&mA$XM z_qF%E?<}X2VNOf&#zsr7P7GUAUg_t8rR|?Jd>ohmtlbrS@h*)PJ9%}owGDkxbSbKN zP;t`i(!!WNmq7N|*aCa_=wpiCM{s41t@t;wXVg{bEg+O4K>eW|s6N7$Htu7ZRWp8f z`+@T|rhL~jYh0X6c*lX5Do`X)QiSpz>EF|N76#0lY$S9mKxJ{dTu+pnYFyikw(hR6 z5iW}M!=Q2aQfiVB{^vE#Je{GX6p*cXYaKRj6Vs$mi+n*irPSWrqVZb^ZvEnO=JXm( zWi59e%ryF2Z)e97(YMxXwHNRt7K{@RF!akLWhx%aPh1OC;uj2jERs`tph z%>CSgetf@El-TCj18N`Seo#+XeJvR)&MPFC$Mh@qr*)#%n62rL8_z~*nm^xgXFYYg z3UjH1BF?MmTIuh-w`4PR;pNzpeRw{V)mC{R=Q{PTkMcC=)ON{W#T?%@=R%KT5ApH! z-{vZ(pTCGQaPXj?P<@$2R5}3mk)>mLE>*cPlTA*64AdRRwCF!Fbwmop+&E}75x&F7 zV*Y{A9>tV92SC?H6Lt5Jv+mH-(R^?78z<)^XOk|PP?si=x^f|My!{Cpr`&bwCjTgl zPl6^~P=>KSSJs1bLc4w$FA#qS%4Zeljo&jr;-Ex4-qh8ilxR(G>QHSTei!)%tXx+h zr-HaI-rjS6#5-jY*oLA%eNF$Ak%6O>tjt0&@#BC zaYy(8crY6FGTn7$qCN6ZK$@;2*B|fGjeB=(Ev+HvAD*?`Xd5ymiwA)`B*Yzs~8j%jQV72JJy6UOIyNQb4_wKZu=-zjj8z;7$ z7yc60gU~Pm&_*ixI4rWGp>@?PPSOb6CRM-&1y7E#;t9vSzw3+gj)+^{X zNSbi!+$O~8I6JyFuaL5CzOKLIdkfdF0NMlH$^J|&%EHX@=!2e(< zqc$7uPx#U6y3OS8n?y>WU6WNef*{KZ+$4T4--PzM;cneYAAQx%xD)uZe3iaie7Th~ zW6B9$O*c0BZypCTZlWq1h=HROdVP-8&^Pe|I&aZ~M})BriSlQf+q@3yD8~Y#cNEcL zF^sy4>N;b*5EJvw`Y*5@>GHJmQ{9UiA0B39V&klzf|6>scKwJ;@YI)|`l*8LF}k_J z&WB_1)AXTcO&|3%?X!LgOQ^uX(_DsZd#B@4C5@`jMyTXb1xRx z&1a=GyhJ?{S9#6T2K}P+@!m`{&0c3D$dLBTqEnx6%BoFAjS*e>6GPJ{Rjqon`3&zc^^MX96Zp@@{0k+?v+W!pn2IksJEZlBvqp5L8W!`i; z|Dsor(-&@gWIJ$ls{W$dD}z2uY)o!-bryJf%c|R3W6dafU4+&`JKt-_l4Vk&;GGRP z-PV@*BHepVvBZ602{Fv+a>I;}@-kBDiDXPXD))`CNa8x|HSljT>U9CDgssPf+Hp+uu z3EixDXr_=n?M~}TkN8cE6nR*F(6QH>V;~@_Jvn}EVoBaNo%#pKkghL`XAPBK5(IH> z7~g#BzdALBHl=Qu8rq|>&{)U{gtfUqC*k)p1&u#VJHw`egb{YmfD%MfvT_ZmzG}^G z=1z+)~M0KdJs#ji0THrp~inZfKC6uB0{gZLM+$(L=*(pe#iSpEJW&zFe>I_hEVHTK5e_2TK+BdksM9l1%)&FobhrG4Xbn1L0OFF&AWbWo;j$k`h?h4T-hG5|AY;C%A-cnJjGE#lz}e76}oh z#7C=Oh(OYc$$L!BaQZ9k6K%pwFvvKcy?elFJ?pWf5;!F)Q6(wieD_NS?C51@b?5r1elvo{+8DN-4DFFN;)bT<@#?&qk)qG z6=BZ~bZ30};NtA2;uTO*R!Fj#Wi}||7%v(`u5887g0kuviRm#L+&M>`h}_8|1zpDCKbss;#}Opxibh%*_Rwjt_+gV>&4TH-^C>ki z{CC!~qvDIv(|Kj@=uHPu`Jx;gi8$yeW+#s~PE?|~#+!xFDn%40;bXp_E+SVgxvcCK z0uuav(d(Zz3j2mO@O}&F*q_zx92Ro&x-4Ydq`D7(@BAk&50tB3+ zS=QoiQ&edTmV9X?iS{|BnwZe-IOh10;^6%%p9pjZK1!AuaJH+S8Mou&+aH2@vBY+@U8iX#G^$AMLu9?>q)_q8>U$P{ojzWFJ>mI_; zB$)Po&xXD{BC%%nebXK?R(4_FJ#;1iufs^ImwlyBU1P43ixz2f=~!;UJoY*bq1m`j0wz z;~;RD8ICS7tI#&B8ZwxEFvI0Hmst%NFtFm^X}_(Kp)o^TLHT>8sTZm@GE3HQH8Oq^ z85as(b3iEHq`tjcr1=BmE@CxWH6wyp5)(p6h#bU@MirJP`??oJItUyn+lxI*MD7>d zhKA4jG*-E)Int=htDZlEupybOH(Avu9~WQ2JZl;hxnyU%5Ft2xN|6nqHPM!PgQDTq zwBnideHdNFAXZO%$O(rfv|Fh%tvOs~BWwbYrOYE3W|R>u7&yhE>;`m4fP-t%S)I{4 zu#!V>^Md0AS$Yx6$-qGb$&L~kMzLxBWje1NlzDR7WZe=4%`T4pu@1_&6pxa`g`(cy zDQ_7LTLZqFyLc4Ls275xyLkqCZ{V^C@gH+dHLSoluQuC>YfW?b-1MG3 zwkk&g-Qo=#J!6It*Ibcgk82UGxa+vK6aG$SI$S}(S?yokW3jR^C1gePU^?09?oJ6!2 zsE&YEst)zstjFEaj3#m2--@HJLz;}gTrBzQv4p|?-szAp$(vnpIg&jOtE7jL;PL=X+sXezLn_sK?`agSNkz^i>dBj&#%%=3i!~eL3=y3zxOU6f$=K?@12I9{42LJ z`r2f_tnZJgNIvbeBgxS=Xc+9?V#O}ASPF2&;!`T#)5*6m&&9NC_zG2CYX`qP1`8|+ zOOOK;T$UL_IO;O4;JwY2gNXGJY{ zzLtzvX!X_u-EL274A4y3?NR@WC@lmMrTb6DqwoxfERP;_Bt4b{m`7u^|FJ~$S^K7c zeZbwSm^nr#>kMbdu>J~gLN{m@80WlE#hr)@Wk^nY`Jget`nQbQZ-@~?mFIw7QNOud z>-#qgn_QsY!A!|=hL4i=;~Eke013=d{!7gG{zS=#{`Gy5^R2FYfWJTY8~b;kth70y z@t1g3vbri2Ki^@Yv3OUe$HD&bBb)7On|ncoH{hkmc2%ndAWq>&U;AY^5%QrwO0u*@>tc^?)VD2DPY4`9h`CkOXUgg+ zD!8koKqcy1WTbw7HvuPM_djqr2yT>`Q7q5 z+TY%I9rwo_$p75x>YVlWm+7o`ozlJTm29#t>^jd( z&}K1xKwdd=E(j&~v}Q7*%iX)K+^N|2Yt+uM$Aw{V*lI{LPOgHYMvi}d^q?NObF7{5 z0o&d)kp8-|)_ZK+RB^dBa-qH;uQ=0{L9X+S@clxE)>Hc%#%~$lcyEf)qDW2`*4#$y z=If3m9ZenaH**szfv13P3*PPMvE!MYxmg{63b|gj?Pjr;fTkffUXPps_K&FxfjtvJ zv%oNGnVTKptI0gS4!drOzMWps5z!6Qgt`$%FOiN?;WdkN4zC16UGL|Ze~HQgk;an# z@{nYexU=8EpOqe7;%-$Cip7`Pkt#*G`?lYFdMf;WGCUA_uDj;Sv8J#EuAq6#Hyfs8 zRyDjHlEDhB{iGa!4qaA?QtaZtyY>OXzSG#}Z|GNMS1^tZjXy`!PK)$6%&sl(Hk|6KO4|K~3@m;V8Lrhh+ozis~K(unQS|G~duIU|MWzbr&*MgN7w zH~)_~+LXLa=&xw$T@PO{ru5nzzzL*x3IQNUZ$tt>_}{!P>c8%Kklupz?>HpA!%G5$ zl#Bonq+|quASEM-KS&)y0)o^b01*B+9YT6nT zdnp-7$p}C|@<{Io1wfGAq78uXweJU&YDN-&1RkkoBtb!{8371Zid@0YRD>0U$^-BZ(wu$p`>nN=5((QZkZ&ASELJ1SuIwOhM`p z5)h;g0f6we970;AeLd`@nGs<4(#%N0fzmP!06`iE01&=bAdr#~0KSxr01%{PBmqH6 zMgRy>GLo2r)FC7wNF4$I;cGdBv`qVY*h@1b!0@G+k%R-KWf}m2G!OtFe62trB_jZQ zDH#DENXbY7f|QH^5Ts-zF$JkZNI;M}1OUR$0K=DN zMiLH`mT3S8(m()!@U;Sgl#BrIrDOzvASELS2vRZvK#-D=#1y0sApt?^5C8~Y%ORv? z+SkKgni&Cx|NryM=)KGqnMBw(VWacX+wUY~4m{G^?<6QlZ@&XTklua=fFQm7PT~(z zhme3EbqD~2|4oOG=C@xzzs=r0Tr-m;W{=DrcvkxB(8=SjZ;w6bcys**^tUSOXTK*M zK7B0Ukacd)k7pHjDeU{{$ni@f89!dw>6xwDEnd$O(;|D>78F+W1S6b@oZ!w2qY_@z zKx{#MDjZjqu(BfR6ALN8UymRCkEi1@9mOI2`ahlLa{eh%tMQP&?sIS%A|8qfD!XCos^AU z$_~Ob7q=dZb1DkwvBe_x8qX2Mag5!tjZPxFj#2lvmJ4Clf3SY<%d%^5_bk!Qf6fDo zXy8%Z+6Gc-s&Dp{I_UCB0a#c#E&z*Hz@NB-vEK=eg;8@sXT%uKsIm`iUv#G79hUL@ z%2k5v#qKUy;SuCx-a=|^)68P+>NBvIM~vOj4uKblp|5?|M^w{bml;$aT=zxm2|`$c zkOLKSKI^W8hwk~u^`AZX8G7-?^^cANj>(ydeBX*!uP{d|jQPGNw()%r{_~tL1b&q5 z))21~*1}n?lnACSN#jM$wov=U81P0elKOG5nlx6)cQLTgpcZdceFVWwplQ_ZC9bh) z_xs}OTBi{|=X6+en8Cx>4yc(rgD&7++8vIkB_o!33Fx@3e3aUjYK=a8kQc-&Zd@tI z)?vrz-5W-RK@L^{N7;tLC!T3^`1u=Wy+)h*UUagX^-BYV}g&hZj%43gnFuZ6I5 z8NbM-o|^dovQXfkd$%DCo;~n7seRdem(#?MVUWLSz7Olqfi4Hu!M?K=8pNG@-`DGE z$Mie|t&J$HaN6_RJ$u4FyFK<1{ffU{R$ao_<7~RRK&|q&UhfTx*01jk2ps5NEi^|P zR%1KA8#nVO%*k(kPSvQv;jf>X0M_1)4Z2zkv3Jcq0_oq1D|qK_(YXGR2a{EO_$ zPm`kxOdc5MEXe$n%lBPPZqxd+?NZZmz8{sR3mp`A*}xK`d)gg6O1zr#P?RgYq?s5W zkPeOyC)eyn`>N#LIT#OXxOz8jo?%Q~{< ziPy(ltI!7{(Le0<2)gX7yDns-z^iDpu_?J$_UiN1?D{ZtwN3)Zi2f`tue|=C-(p;$ zmoBEG;yyN+SJ{`{^Ddn{Yu&>;11>_|IWTtZ*`7Uk2gFCbNUo8j(!vO4OMR1hNz zJ{r1TG@8whVx&f|RiZ6MZX{o%BQb5rqCT6U?*)kWgJ;FHd1^s{`KC;Z`n++&3Xi2q zw6Fx3gBWs7W+T~=S{KK%{V>fnd5*3D)t&Ze{$T1v1gq2=InLY>AD$95bv^1b8ttPui z8s}5=tD&I~m$*`Is`^KDpG*NoEK1g@9SbRBoOReib#f2sJd)h4gKNrz{gGhGe4Cn| zs1e+y}WkEeD+Oph6eYgjKy0ds>?n{ucVP|ab~1)wWhXt zzM@RexoZ(}0i3JxMtmwpxLN=XnC0Tc!eo0}lf1leIo0U(DXr%5JD+w6&!Q|H&WYwJ zqEe&?AiFFGyw^ZW2(aFDCB>z_fR&X~e!{y@Cw%ny$qO0|X_U-y+?R z98#-(x-dbf;q$B1{P>WQ(b{ZSFgubGS-~tSmLvRQc#k^XzXUAruNxgx#a_*o4Ts;r zzPrX94}~5c8t(7vmW8gre^*>DoDTwzp<>kTC=D%uc%62(IlLb4K7l(--O23RF*Q}= z{o0*Ypyg+&boCPUFYE%X6wDe6DsDhdEG2}hG9T5!8|Nyzr{Bx!_){J~NA&0ts#Yx) zV2OD-n$Ef}afc`5q7Qk>2G&hI>^u;o+TV|f<`gq-TU?8N6m&(cZ%oF0^_AkqXkIr| zZt0Vfr+nma>)ytrej5?HjqH5QK`-`NAA>!%wcrePCYUV@_miP0;dIBLME}|B(1~#4 z8t%ih4%_<7*iCDXYsGmw$ih4w;Mdt3x>t`F!!#k`EEey{XZcr?9JGXQG%b88+V{Gi zWW5?c`7%L2Q5P&^;Y5DcY#d+`yY0-&>mN)390nCk*M>c6d)0#*Xqlh5^C`eJVx`vz zI&}7nWZ2mUNMW6wR!OU*X*xi{C#@ycy>FG28uT9-uS1l?3oO=MmSh*d2W?Er*Pdp1 zmprFle8()tOsx5DX{rdGD<{~ljlqdi0vZqv*B-~-#r;6s%GHXLsR&GiJ2AS|AI^Dl za^;b4^G0ePBO|J35}2}D3My*$4YiiJnJWn!>iT3}ormT4iN6&6Hc z$TQsXnwgAx88iYt;({?TJS@*?*vO{%f&6g4jR*I-l%+Sle6!S15u+{qtRb4xaN$>D zkO7~PcMqpkE*C=UAVP zAP7tPoRMhrLBnE>3#)=%TyKY$75OFeI)v4ZuqwuR3oRI&`F0_k=%Q1F z%%bgmBeLIHR>!=VJ#i_7!qX7V2oDkR3g}=GK!(bizA55TH`bV6%^3 z&gHW5jiDv?L|LSBey>8|iMO1qpArq4-AV52(v=R} zMmNsJa3YMB+tifY?nkR@(pdyOw>SnnGawp7tc|s!?2uExdx3v@8)--u*kxiq>mW{k zlN$X$jI{Tta+;AiISwub{qbg-x5Bv>kZ-i)Eml9Iisrn*X5l@a>I40P`C8~F7BZiK>}&yoPrX^XHl1u2 zI4hXoVqg1J!2Fr~Yh^^Xb0VX5aOMR|PX)gb14Mv=ZN>OLMFdr|Y0>__U}wErri`F?zF^ovgudn zYnmhsdklYv46)@5^I>knhKbA`q>`c!W1{^nvbN#Xh88WmT#x?wDzvb{GF>LWcdKVk zyA6R9QMU3E!!hx+tr~%NT7ITMGy8V`jmG&JKOejc#4DQR2?RW%=ln0@(@`Bx3*%{F zI!`MGY4+S|5j-A?x~k*t!s~Qh9w9s}M&9nBr9X}k`-GoYhHKDAb=heVo#s8|gI-u7 zIjz&8FvewJeRj|<{@t*^bSdc;W*-;kB8+S2S>xWa52q{oKvfT(_pdlYn(6nrfE_g; zL-YrI@W*+C^vxcX3h2FInlv?;3I0&6ZH{<@AwPd=Kwl4Wg;6|$rSzN*O)zOfW|G36 z6U$Lso`w#aDh_e)H~Fp3qwH(EmaC^8s?^lI0+JxJPuxa|a3MCuDE!U%azYQTchdR$ zO#g}tei(jS&JgPUM8+5Pxgnuq!_URD!0Y0}8WK=>6blb;=?e^;hY;31fFhQOq%`>?;JH z(VW+NMh_x7os{8vuv?OZbBgPNK~S1U33&W@DDJp7A2J^)RDUxNRq7*%TSGjEOo^-@ zPdXu^==$jNro{(3{yuA4O0lCal8tsZD<)&DB3xYcQtfMe5RTdJu-cJUxBStr3Aq+4 z=F}HH@H^w=hJ|}hjE1@F7kuKxi*+;46|J^=2}bF9+{oCW@)URkx`v{0Iy~2wI`&}# z0q#gKLK-2}H9&&jhZq+rI`GnB3^pQ!+&F=F%izzIh3B$KLM=wu^%%7w(R~bZ-Y*%* zGXrC*KUOth3!RfNcjl|fHSB?j*>#JRb&z0Ae?wH_ZQ&OpNp5bh6_>31HmVnS&T_sH zQP$mPyL=(@$T*Sf35qbU(`7eO^o<6+w-U(VxATP-0~o)FoBFubRlzN9)j+^y=j#Qp z6q|1y3ql0?spQQ|k}X?F<~qfd)vmj?{K(4Oqui85IqqGl+5C@@KeG9|`Z*O4kj%lX z^qFDuz??$6i*lg#$+JUSD{Fd9q0t1LSPVXhn$>)3^}v8 zQza|N4Vp#}xizzF+u+^P!&aJusG*{(|mGG7cl9 z&vv8DL$aCM2My_25$LQ|3+gwk?(h8zVd2!}-$hkh$)$di)z|`#^~U{@LM~@8(v+vB zdCYHEXd22{@pWBGaF5?|#k1-P<-v;gfChfqI{Rr1v*~1KT5(QG6t!5P_7s;9$}}J! zu9?c5Sk3=e@ngb#`+Be6A!c>NHI56?=0%uuvtttMY;*6OQVU^BBmtpu*#4T8>4P{8;gi&$%C%lJd?-j9d%(?jm zbKp(lQY4siveS~Dl~Uf2(X8V*uHW@cFyKHE7TG%Y72txKM{S=or)}X3e%PC8oFhZi zvz9x|e8KWGkLTrkdR7cwM6B`|SC-8KY^PsjfqUi`8QGnW%Wn`l3f*MRht@;m5doOML#b@L%!IflV>Bo9CI zByvZCLWo&*JQPqoRh<^69*jOwZU%Q(J5dczgyftoPMn_}laiYcAaE!OM zAs50CjmZ~mb1J^5yk6pW*V(ny{ns^NH)Xv~J*Xw8(D{CoSjfh8h;FWo$ea$wr07P= z@cM+6SQqYXYvo^-#ge3`ZtqM>_PcwVhOV-5f~q&*4@~<^VeFDCnhAH#XIIj5%*jX{ z-ke*-253MCck4=tq~=bmdq%4FqhBsu?}!K+x7X%+Q@RHgJ^zg8r7Qs9OWrfzG-8k| zsdRFYMdYi6k$Op?3(w(6;)dFrYdf=IF>4v*rkmx>BJKL=q&40{qo(W2Kpmc&r#v7j z=3O&PFXGKt+%3k1(Bl;tLV_{=E8G9Tdx~pUv^T|yC z7|Tg4JDeDqA^1kc|F3s{p+d$rwRyIm3IcCI>7+3@K!WPaE*9GtvYVFEH}LmMgn9%L z@-s8K27!H@V4@lMy*o}jJoj{+Izb>x1Q+c-;~HJU5zz9 zmtx}8Hrp-i4@{R`?=kR&&Sejq%lPj(;1#JKL0_<+=%EdYz0%wa zS8L-=ERc!dSOVp4-ZZVN?mSLIVB?xkWpfRHc&8^hI1a`2*k*#OcP3KlhU0-7ELFiU{XkaJ~UJ;}kf zdf0psNZ%uz9K9`4oDLRb-*FKnXeJr-M2^wadj~dU)s^7Lb&kOz9-~&US@&(l#03#; z%U|?t0|+GdzMSc;DtGULh#pg(H)th2RWv1!8s5MeeFKQ& zv{&YUo*jhzA^5nqL_5JNza(y%?;E}#ZY9}>U#mLXK*>k_${VF7rC-^{kL zjJBlQzCL4GTxvcA8Znz^>HY}04JZeYE8FPQ;^wt#j9S+d^1a=F5a(UZZbLjiRMTh5 z+7YD*tfE^6PbSgO8e+Uf=N>llvT9_W zw_bCEzD+W!A3!i2>bqy;u&^G5u)H(P@Evfa$s&dOn&FShZQjhy1xDfGckxWlj#I?sCq95h)J|;$=Rz;f^An!)Rp?ie? z(k?t-vGoh>a!zQXqe86pQ~O2J<#>xYqj=e01dbX-32DrCd62k9ZZjLHC5#V>@>J0I ziSq)aqR3QZhY?OC!a$5oa9QG?J)u2nOPu}M9|@qf^3GZ;r!@Cucz*C)CS`-3dNc49 z^sx5cK%Xuf@F+lFF?ZtGmhO7oQwdWS>>@4;#()A#(=K{B*)?M+Gh(J897_$zODt_% zXb7+;~96h#jjXp5V@`DOotaqalb(L}1(HkFP zK)2r#+TMEDJ|T2eKMLI%ms?;l@1xZlHlv)*FL2W%^kb;2&D1>@rO_m=LXPZWMOw3e z#SbSt9R(xAXv5WZewl-3SpInWZoj$e9?QW?@t?w}k2U2c^mKcDcMu?Hutd+yhL<_Z zb8nYIi;HbsZzk{o|2y55I6d6zUEV4-~2B*#b#(wcIeP_eE1QBt6HUL!N+`WG;-}j!YWsSp{47Pv9BkQU*E?5 zvK1q?1SE4F(65E={4!ok{{0LzK=nWBp*b zR)=ja$cbPMMqM#_rHOSJdT@`0j$Ej3jX2hKez_$G7UiT#QwoWirqoqX@HZ5yRR zE(Mo2VjqALuKCRZ?If+%B}Dd%YPMSF7|f}){a(kYY2X>i$tYuUwHC)NJ}+ug1l!hO zl=Fk!?lCTw8({mJmdXcrAMj9mW$0d3Kg`}~g|S|z5Vq?$*@Tg$A3pe69r1cO%fM;$ zPvNC|h!Dsx*8);4>Vto{XUgxii|+5QbN7+$a^hyN1jJ$5{SdG0^)%du7yRbk<~=I{ zAh+mvr}chIE9+70Sqm?X(@_tmH41dxzlj`aFL;TX#M~&&K&*xBSXJy&quNC+C!904~y9LP9*E%zz`DXJi z)&1VV5mbl;%bA$b#3x|_ea4rw&omPPd+1VDUW3nL>Y5_!>vt8k<@2Xnp@;fcq&uJZpxph zV+OC%6#@Cjyd~mAVAX1v2 zrVA3lqV-hUPw&ba7fc6@0)wMACJG@gJzn4sJqjb5`#zJygRWt1aFgk&NRU7nn~n+7 zInSd#)xYxse3y%DD*hOAi=kCB>`}D?wmCee)1>MC5EA6mZ9KJ_T{mhTsz<=Cx9hmK zUBpCM>3ge3Exw!oyD2NrX)`~Az6h!y=*_Ef=bu{2DJP(H^o5y;<=mU2njj0}nt&4Sls#X>|B@a_N^Vwx#h)r!(!co%AAUXqVLf#E9;d%8@ZCKRWLX)B z#PYUK#^t%EA%1N^Jd!W}6xgUmO(GfZY0KL`q5MP4aqJG!uS5Oy(eYbWXYEi8rJbAo zR+nO&y31Jcu&iUU<>X+kyVV?HJA=IneruhYe($W*!>518kL=RKlnGlG8rdLY&8HE0 zeMxr93WONb3lJ4*mY2{Z03AYAnrdya0`or}$hT)}^rTiDVU5=BRks~O*WGmX9QRDL z7mC@>$SS1T%_}!RYI!AF^ z`Or~S^6>?gvP)eMxBWw}XfGx+=PHSy05$MTS6zwj%|#1p5Vdg<`ZM)FuL0Jjt2-<& zhk6S(UL}i2fhz@(E)~Jpn{$r!U0t@D7$7LIl($UlxNqgXg*D~BGtgHI?rm!g@AY%n z54+tNy8JNq`5J+EedCQA^$`hnCg*c(r^;-b{1a=LFxXN{T_9c#xj$hOGRY7OG>Aq+ zmsJQ$0YQa(gl?rN=glPR&dQ^@oi8Z;Vjr4u z9@55a%yobM-e?G4ZvoEtC`C1a@dqcZj>g-c&0(pkEXM4zOftL}&Z46G&7}EOuQkb$AX8&dkS`o4az6_b7l!)nXreSJz?LcC+`|~91Za# zdD-5aJCzDFTNnq>kF7dkKKj&e=?!5Y(`CZ3ZxSCEpM#v>`~gnkm4R4Gk@XJr6CQc( zo%om%GIlVY0n|HuYOJ#va<1X(P^y zUnzUadLYrN?h|6XGqEk+qxUH*6ERkg#A)l*tF@zjOOdd;71g%nqad%*t$JKNN1#4& z*Xq^RD>Ew}!RIJe8Nd$FkZ?6sw`5MMF( zuI6m=8*Led4IPDT5B?Ef)*fUMGwk5p+Ddw2{UI{U*z)lqJa6d%_1GCsb%!kXe3smr zj5Q>mNeO1R?Rxj@{9HzZ<0OP>;Wee+cC1U3g9sXO0VOo9Q)6BC1)YlQQiHWA+(%m> zD^vF|zV$v3Nl+M=wGC~sw{T;S96xyvmd*K6G$~aw)*owSFpm&-Z&)2ohZhznrL}=qi07D(4)L&*^K+>>|v;(^=bpy{X$fg{k z?ZX^jIn$H|NfYf8ZzCREdbJqp3oTQ>vhcI{p@c(twNv@}+9ycYXExest(C0i{J7BN z6jQ>?BUzG}F9}*a6XU{IdcXLHiu=KPyXH>_d$d}0^T-Lk@`=T3)JtBt&NJo>`>anb zVS=lDQP$yplta-f2{)TSd<5jDzKiB(M>PfI{a`AfYbO*{S_%fxcSY5VoJcuNlBq`t z6?`NpPF#)*@f&|iFm~u6!F+b9lqKNSBic-RC`;-E^9Q~&iPK87EGq`utsqZIJ1_guOKd#(fTb@z!V3UwFD?#6MMDmYul98ReU3Vz?g@b~T zeZ9QFi{{1?Dok9!Tlg>3WCdJ&-L+ZE>E;DBaB1SuvYxj?sByW)(lvdZj}*O72bm1L zW%l-6P&S|~O#N^IGvtM2w**;do$0bOZ*A)X}Fk$-X`b8cGvXmu>1Gis>Ln^nBz%+2u#(!PeN zlIXR^6a_6mt0uXioV{;q8ARiwhUmq#_q-+fx5W{q4f2N~A9-mQW}$U4zM#*=rDNEA zjK83V|FTmR2sg>OaxR}RE~;0@{;~jd(-!3*17X@B<`ec>hj$y}0<6B3PR z9~R4@4tjEc{;S%WMQNlObx>Dv6PY+nz~tumj^m-%!LDm*TgTAAh(MIFcS$q;t@e-F zdneQI76*IPThe8jO2wX2DfYI?Q3lc7)xngcP-ad&TC`)(C+nK|8&#_u*2J@WjBnK8 zO(*Hga|YklnG~+9BG*jfX!lQ$z?dWyeWIsxj@$5Vo5~KHrcPYYnkD2JvfAA5Gk4ur z*_!mRghw@wnyFHVgp>Vd!Y`ohK(KeTQ zVd2vs&DQr|8fmdGba)lkZ&5@5;nIUfR-Ri-Umu0s0h-iu>|Y0EiMyC@zy+uRBYfWtEiZaj3DjN@D0J>vV`?WNv_#)M zWlPke*mbb8{KI{09}v**G7XBaO{#{dp4^{*bwgp&yg#12Fg5;2gY%6aM2}xTuy>;E*gBRe5wGrhw>9rhF2P&2ZXF4u z#k*#NALbJL3JFtK-M-7>rQXFSzi={qH4cD2Jl4!Hh9ttW*004qt}|zqRN6Mm|FEJ} z-q-JlU$7i|RR`VJi+KQYrm2vOf3qMB42M#Xt{FUC#_r5GCD-G2VEl43-}kA=Mr@0F zS)u|=M@$|AlqQ#CYwh|sd4B4h@G@7nRn$@X=M;2#VsR3UdU_Y_7~u!~ofs{|6`>0s z+C>b4-M&?rrf-&Fn4djetC*Q5~w#^08~|tZ-<_dSs=^ zE8#p8U+LxFsumO>1rNHZNiZm)8jULa~+4w>!1A z?YU=VPE`mPSIt@cQ`2S$7&A%5=hf*hko}R>(LsY_D<3T7)rRsh4a}k`rL6lg7IW7v zkrkqBzd?(3r-H;7BiBXKB*tidiA<%#&XP;^gpuS$YOId>8vH?BjIo)~LmuDPLoXylOoCv6pDUG(j4zDb zPlmnAk^uv{`9s}SHpwwheFU?6c+2UPtwIaLJ&FROXaW30UXr94ux0wpS9)@Zr|_5e zuC4W8+j=f6=?v47mv2zcEhj~o@}`qD!N8o4ONQ`?z2Zovyl9;OuBkYTo-U3!$4P&R z?Z~;mWVo1c%yR8q8Rzo2PSbu>yZxwi0c)Z$Wvl!N^35_Y@w@30Gq2{8FwDdc59N`c zEk7xJL;sA4nmN&G0ZeT$YE}tg(b9D>{ZN9j$20R&-g(&t;jlf+&qU{;LO^w?`bFSd zzn3Uy{(5fD1zZvQ!dhy(T@f*5y(2}?k-~%(QK}{EzSdL?Y6jM1n3pJW_T;AYftvgAd_n{6VWby0T_gn`d1-2^Z*r~~bIyN%n2-epulth5J(~X>$A~3uS(h zhEj{yePEKLmM5D|Jm!tx(`Pw)3+OdKrlUMEHhE@8;d|ePzgDL`gGJLpV|C2uS3eK< zfSL6Tzq|UEpS9MfFqE2p94qY6g&57-GrptBwky(V6QiaNX=PLH^6rHjtjNqOk{_|S zx2pLaYsDvWx2ey5Mo`^F%V~BACiE9mL6Sb&DJ%Vj%Q`70 zav(;5#wA=N5Jnf(KMCs73H%qyo_jR}H{yp<%dIY;1jWLJKR@czOPiG2pA><`Hef$F7fm^Y&{bBnSmJbX+ zQ5{H{GjDgkLj0(m#fnZMctJNlXSF!j;Ue5!MP1~c(e0ZcjD+lUcXJ!5;x_H=DUwT8 zM1_{&9l^v3=a%j4!|xTaf`DNI)~&DJ6)YvfVU;=XTwLF zUNAACy#juA49?Ld&N}1g_2-3+O6YYKd#U$$)3*Ea zCl0&&Wv;3`aUqzL>EZzmY9+#^KZKS^yUv7jdRI~Hsc+{mU=K_vm)zZ<4~8Y$?+*tQ zTVK1Xx3Lezj*5gn2SC4sUqq~U4@5dekR%G@;Yy;eXO`x^_U9>aK;Z6;WG2Dw!Eu-k0wmG3N??8VfF;TLKdX{s-%6H8z6W;GH|ENp}RM2zjfde1tIwLRD| zU}$Lc?rO~1oTxNdfMmwg5xtcuD@L5FibbQ~Z5gK7o2U7SQ-F$60h@-)^pV#%T9R<% zWaUAnUtIT~WFzAU>n2H<61z(oXWYDVJA*;ZIaAKlsmr;ELcn~OUx-@gCknr8XxH38 z)fdmOdfz9TnsgDnn88UsI3;kJPaf_`#XkRkL>AdXdyiz7#T?TCGyx!8D3CV_hVg){ z)f>r?akc3Bf)@sl7}Q~^?WadFuKK}mjEQ>^3SE`=6vWbupvRzxxg8a=ss`$$E5<|1 z+gs20Ha49-llhs{f<}PC!2l4%Em7zvrRr$ z0)p#te=`NxS#u^Z6g72t8&xxX4&pbp(yLD^fC#+J%Ow4VHxYt?5t#~d4K%G8=au!_ zN>-av#XV>OkG7FY?dR(vzl?vmCVXXRt`CCQrtY1{7=yWIUtM|K#*B7R7^o%r7k3D{ ziPd@`4@FbJ{v7>~o!w#DokdEn%zVoss`|6!=?HE~Eq@502K;d#L7&*W5^F=?{{!ii zmw5npkeIJ7S2d8IpxFVJ>rc<9yn%)Wk4Y%&8z0KAr(DZk5j8vADJZVu0tyJ0(xk{q zoe;T0vG$5oC^e0$6&Fy{14FbQl@#nitA`+gq3m$iq$Z7gw}?a>HTv7eKzwe5XqIh> zC?Oat>aX-eB{d>ARjMYl7u5tcB-EYit=DJ|{@{$!4c!zJ!d?|_E)8D?WcH|dY%_R# zIOAbdf~-cb9dtfkr(gfa!t4Hk;#|$LFolfY;HbqEJjY(6{1_1h2bBM9E16g_qJ8oa zRS!_zCaHv*J4-ETDSJmtPh>V7X*|(ph$u2@O%3w{MAeOH+Qh@SfA}!plx-y$A_k)a zckka8X{|-B2r1rA{!`c7Wvo=Rs}QB&q=**{yBqykzpyS{6;?#|-fuNnLn5>Z1jyT~Z=8A?hEF`e6-}%MRn^VtKSpS?wgTM+ z7G15k*3)+O2gF|3~n#@+hci3;%cFG77)PImau z)yEaeDB=7HX0Trc#Ln{wdz01JpbuuGEBFeGe3cd~`;Hu8Jb6G3)p{(yy#IHTdYeAt zfE+_+^@tp%`W0-h%WiMN4)7oCUWK!UK|LukD5I};5eq;zgdgq#BuoQewvqrHr4zc2 zoyi==?X6N5JceIQ>b3@>c0<&PkB)k_KH>5KIRbhSTzzX=rxo0%QNVo2eWdXm_nCcM zbHqE$M4`BS_v91g4}O=ji0d!pPZS2Fz|qt4gxNHo;sG2rFHabNcgAE1f%UcA5cLBv zc8WwOF=^G~Ud}$rbe#S^J&nVCM?6T?2d!??pVun0_rr1n^16yMY={WnPt*iW$>78% z1F36oK~Yy}i9RQ#>?zVLLu!F$o>tITq87m?)c|az#N1l_M?;8$jo_7ju1H+xh&}hK zlouz;hZ0c|eubhqZH~(SY_jN2O@s-7Rhk?VQyx|m2Z)oif-)icS+Mn#O5zl?aHf_h4XHiXJQ!a`zh&0fPnqWMw5R#a>n^{^$jT!JXe_yCH*=2?#;Zng4JJ| z*WGJiQFaJyC@l9*16x+2T+;n5T-3P}vGv+ZfWH58NzYsw7z$5imk544p#BR(I3STw zadu_&;i@;($NQPi<MA4rF*)g*(X=9r{+lY?wB-y`)MZ*6uAIS{esg z*Xvs;P3{qC{Jxf!O@DSgfHZzwsG1O0c-;mZyuXGR1zDdsx1_h<8`XPSirAu>J&Y^E z%kd|tRuiLmAN_vF*gm+m&n0MN+;L$4>CR0^&ny1-q+wkbRVz-1pL2Pbtyb7OT?;!M z&@ge;z1|45jd*P1r;tl7xeLGJ^U39?O$?X=9H6L?h>ZtkXDILIQ{eV+5P+MbJn8U! zT-|e2JKYuS0Jh2;-zHe8!u!pdN*TQ2q?em7kPJ=ucRq2Dvb#CbRj^SwA-`dUUgDo2X04rAxYQKMU`8)Eo;l$>6?HbBxSM`ALk4A z;y`#P&dY@@7O69&hT#_>57ySd)tb7ojaweI>$E_Y&Y9$qCJs#eG(pKDHIW~*Q?pSmGhqt77GxD%VE~hKE3SW%(PLxn$A9^$pMA>eH1a^cP_s{)>sdJZkFmU4ah^+-N^GT5 z9aXPg>HUgBLC<|M;hhGiMw&rWnXwy2x_4QV6I@M@^5Q+o9dNHll}{mIqI#xgb8u&% z)G~Y*N*&?gQea4+^A+x#MuvGpe2SA%ZY(M7&KXJw*gZUz#J7A4&ES~`*V#_;)(b#W z=M0>E4+JI)d+R5jo*2w}+hG6MIWjpp<3Bf zUxD4Q2S?}prjR4=nNw_JOOvGY5EE`=mpzKoDuAU9O89A|tuz960FccL$s3OCI-((3 zs@vBBW~@Eg`M`4zB&Poo?9cZF58Cc&-(zfQBED01pg*XXuf807lBHaF9<<-vq9QTb z+WBqp6@B$W4GB%#As=a69-@ot^ghERF@`lOZo_If-99h%0AfOz4wfEc}mbu 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 W#o<{Tp2gu=9G?GO;rSa&?SB9#JNZcf 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",