diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f133c9fd8..d0015fd49 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -149,11 +149,11 @@ jobs: name: Tests run: | cd src/ - pipenv run pytest -rfEp + pipenv run pytest -ra - name: Get changed files id: changed-files-specific - uses: tj-actions/changed-files@v34 + uses: tj-actions/changed-files@v35 with: files: | src/** diff --git a/Pipfile b/Pipfile index e0f6d736f..0d4fcebae 100644 --- a/Pipfile +++ b/Pipfile @@ -76,17 +76,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 5501e0fd5..e14f00a14 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1962,13 +1962,6 @@ } }, "develop": { - "alabaster": { - "hashes": [ - "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", - "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" - ], - "version": "==0.7.12" - }, "attrs": { "hashes": [ "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", @@ -1977,14 +1970,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", @@ -2003,14 +1988,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", @@ -2027,14 +2004,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", @@ -2136,14 +2105,6 @@ ], "version": "==0.6.2" }, - "docutils": { - "hashes": [ - "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", - "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" - ], - "markers": "python_version >= '3.7'", - "version": "==0.19" - }, "exceptiongroup": { "hashes": [ "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e", @@ -2215,14 +2176,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", @@ -2238,13 +2191,6 @@ "markers": "python_version >= '3.7'", "version": "==3.1.2" }, - "livereload": { - "hashes": [ - "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869", - "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4" - ], - "version": "==2.6.3" - }, "markdown": { "hashes": [ "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874", @@ -2253,14 +2199,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", @@ -2307,22 +2245,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", @@ -2362,14 +2284,6 @@ ], "version": "==0.4.3" }, - "myst-parser": { - "hashes": [ - "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8", - "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d" - ], - "index": "pypi", - "version": "==0.18.1" - }, "nodeenv": { "hashes": [ "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e", @@ -2519,14 +2433,6 @@ "index": "pypi", "version": "==2.21.0" }, - "pycodestyle": { - "hashes": [ - "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053", - "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610" - ], - "index": "pypi", - "version": "==2.10.0" - }, "pygments": { "hashes": [ "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1", @@ -2543,14 +2449,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", @@ -2607,13 +2505,6 @@ "index": "pypi", "version": "==2.8.2" }, - "pytz": { - "hashes": [ - "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", - "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" - ], - "version": "==2022.7" - }, "pywavelets": { "hashes": [ "sha256:030670a213ee8fefa56f6387b0c8e7d970c7f7ad6850dc048bd7c89364771b9b", @@ -2698,6 +2589,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", @@ -2751,77 +2736,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", 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/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 9ea46314d..1a8ef1710 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/users/*', { fixture: 'users/users.json', @@ -37,6 +37,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/app.module.ts b/src-ui/src/app/app.module.ts index 3592ff253..05ce2feee 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -89,6 +89,7 @@ import { PermissionsGroupComponent } from './components/common/input/permissions import { IfOwnerDirective } from './directives/if-owner.directive' import { IfObjectPermissionsDirective } from './directives/if-object-permissions.directive' +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' @@ -111,6 +112,7 @@ import localeZh from '@angular/common/locales/zh' import { PermissionsDialogComponent } from './components/common/permissions-dialog/permissions-dialog.component' import { PermissionsFormComponent } from './components/common/input/permissions/permissions-form/permissions-form.component' +registerLocaleData(localeAr) registerLocaleData(localeBe) registerLocaleData(localeCs) registerLocaleData(localeDa) 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 38a8bf44a..d1e74cb6d 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 - +
    @@ -191,9 +191,9 @@
    -   -   -   +   +   +  
    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 89662674b..169356eb2 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 9899c60ac..8936e2b43 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 ObjectWithPermissions { diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index 72a34ea15..5d8eb733f 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -163,6 +163,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-ui/src/locale/messages.ar_AR.xlf b/src-ui/src/locale/messages.ar_AR.xlf index 251aa265f..90b2a8ed1 100644 --- a/src-ui/src/locale/messages.ar_AR.xlf +++ b/src-ui/src/locale/messages.ar_AR.xlf @@ -6,24 +6,24 @@ 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: - - - - diff --git a/src/documents/index.py b/src/documents/index.py index 5b8504383..b60b33c14 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 guardian.shortcuts import get_users_with_perms from whoosh import classify @@ -50,6 +51,7 @@ def get_schema(): path=TEXT(sortable=True), path_id=NUMERIC(), has_path=BOOLEAN(), + comments=TEXT(), owner=TEXT(), owner_id=NUMERIC(), has_owner=BOOLEAN(), @@ -95,6 +97,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)]) users_with_perms = get_users_with_perms( doc, only_with_perms_in=["view_document"], @@ -120,6 +123,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, owner=doc.owner.username if doc.owner else None, owner_id=doc.owner.id if doc.owner else None, has_owner=doc.owner is not None, @@ -276,7 +280,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()) 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_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 c1b09c186..d14302ddf 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -35,7 +35,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 @@ -484,7 +483,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) @@ -504,9 +503,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") @@ -1084,7 +1083,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): @@ -1149,7 +1148,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_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/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/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")) diff --git a/src/documents/views.py b/src/documents/views.py index 734a2e8ac..fd0949fc1 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -494,10 +494,19 @@ class DocumentViewSet( class SearchResultSerializer(DocumentSerializer, PassUserMixin): 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, 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 "تعيين هذا المراسل" - diff --git a/src/paperless/settings.py b/src/paperless/settings.py index abd432da6..d3b4a443f 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -423,6 +423,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")), 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_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}") 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 000000000..3111b7c4c Binary files /dev/null and b/src/paperless_tesseract/tests/samples/multi-page-images-alpha-rgb.tiff differ diff --git a/src/paperless_tesseract/tests/samples/multi-page-images-alpha.tiff b/src/paperless_tesseract/tests/samples/multi-page-images-alpha.tiff new file mode 100644 index 000000000..c612cf4ba Binary files /dev/null and b/src/paperless_tesseract/tests/samples/multi-page-images-alpha.tiff differ diff --git a/src/paperless_tesseract/tests/samples/multi-page-images.tiff b/src/paperless_tesseract/tests/samples/multi-page-images.tiff new file mode 100644 index 000000000..0e62b6010 Binary files /dev/null and b/src/paperless_tesseract/tests/samples/multi-page-images.tiff differ diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 4d6890653..956c56862 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -542,6 +542,78 @@ 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) + 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): + """ + 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) + 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) params = parser.construct_ocrmypdf_parameters( 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