mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-10-30 19:45:44 +00:00
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8fe0816f99 | ||
|
|
e240c89f27 | ||
|
|
ced3cf9303 | ||
|
|
08a7d1d4b8 | ||
|
|
47052d6506 | ||
|
|
9bd28d3e57 |
No files matched your search
@@ -1,5 +1,91 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## paperless-ngx 3.4.0
|
||||||
|
|
||||||
|
### Features / Enhancements
|
||||||
|
|
||||||
|
- Enhancement: support custom fields in workflow title templates [@shamoon](https://github.com/shamoon) ([#14564](https://github.com/paperless-ngx/paperless-ngx/pull/14564))
|
||||||
|
- Enhancement: relative date custom field queries [@shamoon](https://github.com/shamoon) ([#14549](https://github.com/paperless-ngx/paperless-ngx/pull/14549))
|
||||||
|
- Performance: reduce tasks badge load times [@JanKleine](https://github.com/JanKleine) ([#14552](https://github.com/paperless-ngx/paperless-ngx/pull/14552))
|
||||||
|
- Enhancement: skip local 2FA for trusted OIDC AMR [@shamoon](https://github.com/shamoon) ([#14403](https://github.com/paperless-ngx/paperless-ngx/pull/14403))
|
||||||
|
- Feature: Generate PDF thumbnails via poppler utils [@stumpylog](https://github.com/stumpylog) ([#14420](https://github.com/paperless-ngx/paperless-ngx/pull/14420))
|
||||||
|
- Enhancement: add upload count to button, link to tray, reduce notifications [@shamoon](https://github.com/shamoon) ([#14501](https://github.com/paperless-ngx/paperless-ngx/pull/14501))
|
||||||
|
- Enhancement: notifications improvements [@shamoon](https://github.com/shamoon) ([#14500](https://github.com/paperless-ngx/paperless-ngx/pull/14500))
|
||||||
|
- Enhancement: doc details ux improvements [@shamoon](https://github.com/shamoon) ([#14485](https://github.com/paperless-ngx/paperless-ngx/pull/14485))
|
||||||
|
- Enhancement (QoL): allow independently toggling child + parent tags in WF tag fields [@shamoon](https://github.com/shamoon) ([#14400](https://github.com/paperless-ngx/paperless-ngx/pull/14400))
|
||||||
|
- Tweak: drop the user dropdown caret [@shamoon](https://github.com/shamoon) ([#14444](https://github.com/paperless-ngx/paperless-ngx/pull/14444))
|
||||||
|
- Enhancement: navbar upload button [@shamoon](https://github.com/shamoon) ([#14442](https://github.com/paperless-ngx/paperless-ngx/pull/14442))
|
||||||
|
- Enhancement: AI chat UX tweaks [@shamoon](https://github.com/shamoon) ([#14415](https://github.com/paperless-ngx/paperless-ngx/pull/14415))
|
||||||
|
- Enhancement: support markdown in AI chat [@shamoon](https://github.com/shamoon) ([#14409](https://github.com/paperless-ngx/paperless-ngx/pull/14409))
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Fix: truncate long version labels in dropdown [@shamoon](https://github.com/shamoon) ([#14578](https://github.com/paperless-ngx/paperless-ngx/pull/14578))
|
||||||
|
- Fixhancement: show better result for revoked / expired tasks [@shamoon](https://github.com/shamoon) ([#14566](https://github.com/paperless-ngx/paperless-ngx/pull/14566))
|
||||||
|
- Fix: move re-index after workflow runs on doc edit [@shamoon](https://github.com/shamoon) ([#14558](https://github.com/paperless-ngx/paperless-ngx/pull/14558))
|
||||||
|
- Fix: folder export with --delete fails on a stale manifest.json.tmp [@benpetty](https://github.com/benpetty) ([#14526](https://github.com/paperless-ngx/paperless-ngx/pull/14526))
|
||||||
|
- Fix: fix list type for api schema document object filters [@shamoon](https://github.com/shamoon) ([#14524](https://github.com/paperless-ngx/paperless-ngx/pull/14524))
|
||||||
|
- Fix: standardize some dropdown sizing [@shamoon](https://github.com/shamoon) ([#14510](https://github.com/paperless-ngx/paperless-ngx/pull/14510))
|
||||||
|
- Fix: prevent doc permissions queries on schema view [@shamoon](https://github.com/shamoon) ([#14503](https://github.com/paperless-ngx/paperless-ngx/pull/14503))
|
||||||
|
- Fix: dont defer tag assignment when barcode will not result in a split [@shamoon](https://github.com/shamoon) ([#14497](https://github.com/paperless-ngx/paperless-ngx/pull/14497))
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>6 changes</summary>
|
||||||
|
|
||||||
|
- Chore: bump some frontend deps for security fixes [@shamoon](https://github.com/shamoon) ([#14581](https://github.com/paperless-ngx/paperless-ngx/pull/14581))
|
||||||
|
- Chore: bump brotli, djangorestframework, filelock, msgpack, setuptools for security fixes [@stumpylog](https://github.com/stumpylog) ([#14575](https://github.com/paperless-ngx/paperless-ngx/pull/14575))
|
||||||
|
- Chore: bump django-allauth to 65.20 and oauthlib to 4.0 [@stumpylog](https://github.com/stumpylog) ([#14570](https://github.com/paperless-ngx/paperless-ngx/pull/14570))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14517](https://github.com/paperless-ngx/paperless-ngx/pull/14517))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14493](https://github.com/paperless-ngx/paperless-ngx/pull/14493))
|
||||||
|
- Chore: Drop ImageMagik as a dependency [@stumpylog](https://github.com/stumpylog) ([#14440](https://github.com/paperless-ngx/paperless-ngx/pull/14440))
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### All App Changes
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>35 changes</summary>
|
||||||
|
|
||||||
|
- Chore: Consolidate test sample files [@stumpylog](https://github.com/stumpylog) ([#14430](https://github.com/paperless-ngx/paperless-ngx/pull/14430))
|
||||||
|
- Chore: bump some frontend deps for security fixes [@shamoon](https://github.com/shamoon) ([#14581](https://github.com/paperless-ngx/paperless-ngx/pull/14581))
|
||||||
|
- Enhancement: support custom fields in workflow title templates [@shamoon](https://github.com/shamoon) ([#14564](https://github.com/paperless-ngx/paperless-ngx/pull/14564))
|
||||||
|
- Enhancement: relative date custom field queries [@shamoon](https://github.com/shamoon) ([#14549](https://github.com/paperless-ngx/paperless-ngx/pull/14549))
|
||||||
|
- Fix: truncate long version labels in dropdown [@shamoon](https://github.com/shamoon) ([#14578](https://github.com/paperless-ngx/paperless-ngx/pull/14578))
|
||||||
|
- Chore: bump brotli, djangorestframework, filelock, msgpack, setuptools for security fixes [@stumpylog](https://github.com/stumpylog) ([#14575](https://github.com/paperless-ngx/paperless-ngx/pull/14575))
|
||||||
|
- Chore: bump django-allauth to 65.20 and oauthlib to 4.0 [@stumpylog](https://github.com/stumpylog) ([#14570](https://github.com/paperless-ngx/paperless-ngx/pull/14570))
|
||||||
|
- Fixhancement: show better result for revoked / expired tasks [@shamoon](https://github.com/shamoon) ([#14566](https://github.com/paperless-ngx/paperless-ngx/pull/14566))
|
||||||
|
- Fix: move re-index after workflow runs on doc edit [@shamoon](https://github.com/shamoon) ([#14558](https://github.com/paperless-ngx/paperless-ngx/pull/14558))
|
||||||
|
- Performance: reduce tasks badge load times [@JanKleine](https://github.com/JanKleine) ([#14552](https://github.com/paperless-ngx/paperless-ngx/pull/14552))
|
||||||
|
- Enhancement: skip local 2FA for trusted OIDC AMR [@shamoon](https://github.com/shamoon) ([#14403](https://github.com/paperless-ngx/paperless-ngx/pull/14403))
|
||||||
|
- Chore: consolidate direct permission grant lookups into one helper [@stumpylog](https://github.com/stumpylog) ([#14456](https://github.com/paperless-ngx/paperless-ngx/pull/14456))
|
||||||
|
- Chore: drop get\_groups\_with\_only\_permission [@stumpylog](https://github.com/stumpylog) ([#14454](https://github.com/paperless-ngx/paperless-ngx/pull/14454))
|
||||||
|
- Chore: Consolidate to a single way to set permission on an object [@stumpylog](https://github.com/stumpylog) ([#14453](https://github.com/paperless-ngx/paperless-ngx/pull/14453))
|
||||||
|
- Chore: Refactor bulk edit to remove PDF knowledge [@stumpylog](https://github.com/stumpylog) ([#14445](https://github.com/paperless-ngx/paperless-ngx/pull/14445))
|
||||||
|
- Fix: folder export with --delete fails on a stale manifest.json.tmp [@benpetty](https://github.com/benpetty) ([#14526](https://github.com/paperless-ngx/paperless-ngx/pull/14526))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14517](https://github.com/paperless-ngx/paperless-ngx/pull/14517))
|
||||||
|
- Fix: fix list type for api schema document object filters [@shamoon](https://github.com/shamoon) ([#14524](https://github.com/paperless-ngx/paperless-ngx/pull/14524))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14493](https://github.com/paperless-ngx/paperless-ngx/pull/14493))
|
||||||
|
- Chore: drop get\_objects\_for\_user\_owner\_aware [@stumpylog](https://github.com/stumpylog) ([#14457](https://github.com/paperless-ngx/paperless-ngx/pull/14457))
|
||||||
|
- Chore: update Angular components to 22.2.2 [@shamoon](https://github.com/shamoon) ([#14515](https://github.com/paperless-ngx/paperless-ngx/pull/14515))
|
||||||
|
- Chore: share one base class for the method-mapped permission classes [@stumpylog](https://github.com/stumpylog) ([#14458](https://github.com/paperless-ngx/paperless-ngx/pull/14458))
|
||||||
|
- Fix: standardize some dropdown sizing [@shamoon](https://github.com/shamoon) ([#14510](https://github.com/paperless-ngx/paperless-ngx/pull/14510))
|
||||||
|
- Chore: Drop ImageMagik as a dependency [@stumpylog](https://github.com/stumpylog) ([#14440](https://github.com/paperless-ngx/paperless-ngx/pull/14440))
|
||||||
|
- Feature: Generate PDF thumbnails via poppler utils [@stumpylog](https://github.com/stumpylog) ([#14420](https://github.com/paperless-ngx/paperless-ngx/pull/14420))
|
||||||
|
- Fix: prevent doc permissions queries on schema view [@shamoon](https://github.com/shamoon) ([#14503](https://github.com/paperless-ngx/paperless-ngx/pull/14503))
|
||||||
|
- Enhancement: add upload count to button, link to tray, reduce notifications [@shamoon](https://github.com/shamoon) ([#14501](https://github.com/paperless-ngx/paperless-ngx/pull/14501))
|
||||||
|
- Enhancement: notifications improvements [@shamoon](https://github.com/shamoon) ([#14500](https://github.com/paperless-ngx/paperless-ngx/pull/14500))
|
||||||
|
- Enhancement: doc details ux improvements [@shamoon](https://github.com/shamoon) ([#14485](https://github.com/paperless-ngx/paperless-ngx/pull/14485))
|
||||||
|
- Enhancement (QoL): allow independently toggling child + parent tags in WF tag fields [@shamoon](https://github.com/shamoon) ([#14400](https://github.com/paperless-ngx/paperless-ngx/pull/14400))
|
||||||
|
- Tweak: drop the user dropdown caret [@shamoon](https://github.com/shamoon) ([#14444](https://github.com/paperless-ngx/paperless-ngx/pull/14444))
|
||||||
|
- Enhancement: navbar upload button [@shamoon](https://github.com/shamoon) ([#14442](https://github.com/paperless-ngx/paperless-ngx/pull/14442))
|
||||||
|
- Enhancement: AI chat UX tweaks [@shamoon](https://github.com/shamoon) ([#14415](https://github.com/paperless-ngx/paperless-ngx/pull/14415))
|
||||||
|
- Enhancement: support markdown in AI chat [@shamoon](https://github.com/shamoon) ([#14409](https://github.com/paperless-ngx/paperless-ngx/pull/14409))
|
||||||
|
- Fix: dont defer tag assignment when barcode will not result in a split [@shamoon](https://github.com/shamoon) ([#14497](https://github.com/paperless-ngx/paperless-ngx/pull/14497))
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## paperless-ngx 3.3.4
|
## paperless-ngx 3.3.4
|
||||||
|
|
||||||
### All App Changes
|
### All App Changes
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "paperless-ngx"
|
name = "paperless-ngx"
|
||||||
version = "3.3.4"
|
version = "3.4.0"
|
||||||
description = """\
|
description = """\
|
||||||
A community-supported supercharged document management system: scan, index and archive all your physical documents\
|
A community-supported supercharged document management system: scan, index and archive all your physical documents\
|
||||||
"""
|
"""
|
||||||
@@ -256,8 +256,8 @@ isort.force-single-line = true
|
|||||||
[tool.codespell]
|
[tool.codespell]
|
||||||
ignore-words-list = "criterias,afterall,valeu,ureue,equest,ure,assertIn,Oktober,commitish,NIN,nin,reprot"
|
ignore-words-list = "criterias,afterall,valeu,ureue,equest,ure,assertIn,Oktober,commitish,NIN,nin,reprot"
|
||||||
skip = """\
|
skip = """\
|
||||||
src-ui/src/locale/*,src-ui/pnpm-lock.yaml,src-ui/e2e/*,src/paperless_mail/tests/samples/*,src/paperless/tests/samples\
|
src-ui/src/locale/*,src-ui/pnpm-lock.yaml,src-ui/e2e/*,src/paperless/tests/samples/mail/*,src/documents/tests/samples\
|
||||||
/mail/*,src/documents/tests/samples/*,*.po,*.json\
|
/*,src/paperless_testing/sample_files/*,*.po,*.json\
|
||||||
"""
|
"""
|
||||||
write-changes = true
|
write-changes = true
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,9 @@ def seed_database() -> None:
|
|||||||
originals.mkdir(parents=True)
|
originals.mkdir(parents=True)
|
||||||
thumbnails = Path(os.environ["PAPERLESS_MEDIA_ROOT"]) / "documents" / "thumbnails"
|
thumbnails = Path(os.environ["PAPERLESS_MEDIA_ROOT"]) / "documents" / "thumbnails"
|
||||||
thumbnails.mkdir(parents=True)
|
thumbnails.mkdir(parents=True)
|
||||||
sample_pdf = SOURCE_ROOT / "documents" / "tests" / "samples" / "simple.pdf"
|
sample_pdf = (
|
||||||
|
SOURCE_ROOT / "paperless_testing" / "sample_files" / "simple-digital.pdf"
|
||||||
|
)
|
||||||
for document in documents:
|
for document in documents:
|
||||||
shutil.copyfile(sample_pdf, originals / document.filename)
|
shutil.copyfile(sample_pdf, originals / document.filename)
|
||||||
shutil.copyfile(
|
shutil.copyfile(
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "paperless-ngx-ui",
|
"name": "paperless-ngx-ui",
|
||||||
"version": "3.3.4",
|
"version": "3.4.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "npx only-allow pnpm",
|
"preinstall": "npx only-allow pnpm",
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
|
|||||||
Generated
+228
-35
@@ -4,6 +4,10 @@ settings:
|
|||||||
autoInstallPeers: false
|
autoInstallPeers: false
|
||||||
excludeLinksFromLockfile: false
|
excludeLinksFromLockfile: false
|
||||||
|
|
||||||
|
overrides:
|
||||||
|
vite@>=8.3.0 <8.3.3: ^8.3.3
|
||||||
|
zod@<4.6.6: ^4.6.6
|
||||||
|
|
||||||
importers:
|
importers:
|
||||||
|
|
||||||
.:
|
.:
|
||||||
@@ -1650,6 +1654,9 @@ packages:
|
|||||||
'@oxc-project/types@0.150.0':
|
'@oxc-project/types@0.150.0':
|
||||||
resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==}
|
resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==}
|
||||||
|
|
||||||
|
'@oxc-project/types@0.155.0':
|
||||||
|
resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==}
|
||||||
|
|
||||||
'@parcel/watcher-android-arm64@2.6.0':
|
'@parcel/watcher-android-arm64@2.6.0':
|
||||||
resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==}
|
resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==}
|
||||||
engines: {node: '>= 10.0.0'}
|
engines: {node: '>= 10.0.0'}
|
||||||
@@ -1748,42 +1755,85 @@ packages:
|
|||||||
'@popperjs/core@2.11.8':
|
'@popperjs/core@2.11.8':
|
||||||
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
|
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
|
||||||
|
|
||||||
|
'@rolldown/binding-android-arm-eabi@1.2.15':
|
||||||
|
resolution: {integrity: sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
'@rolldown/binding-android-arm-eabi@1.2.8':
|
'@rolldown/binding-android-arm-eabi@1.2.8':
|
||||||
resolution: {integrity: sha512-tN5aztYkKCte4i5SIrrz5yK/HMjEuCqCSCJa418jOV8tZ1cBY3YF2otxB1ktPxzsLA1BeTqwapK0bfjxNvHJVw==}
|
resolution: {integrity: sha512-tN5aztYkKCte4i5SIrrz5yK/HMjEuCqCSCJa418jOV8tZ1cBY3YF2otxB1ktPxzsLA1BeTqwapK0bfjxNvHJVw==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [android]
|
os: [android]
|
||||||
|
|
||||||
|
'@rolldown/binding-android-arm64@1.2.15':
|
||||||
|
resolution: {integrity: sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [android]
|
||||||
|
|
||||||
'@rolldown/binding-android-arm64@1.2.8':
|
'@rolldown/binding-android-arm64@1.2.8':
|
||||||
resolution: {integrity: sha512-dIYTWl9XprMUiQFoc55KUyk/oS8SKYH3zFl0LTR7RT0Xj4hgSVyuJcroH8JUu8RcpF8fTB6E0aOwCkZoYPcDSQ==}
|
resolution: {integrity: sha512-dIYTWl9XprMUiQFoc55KUyk/oS8SKYH3zFl0LTR7RT0Xj4hgSVyuJcroH8JUu8RcpF8fTB6E0aOwCkZoYPcDSQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
|
|
||||||
|
'@rolldown/binding-darwin-arm64@1.2.15':
|
||||||
|
resolution: {integrity: sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
'@rolldown/binding-darwin-arm64@1.2.8':
|
'@rolldown/binding-darwin-arm64@1.2.8':
|
||||||
resolution: {integrity: sha512-PCSDQGXD2IyTEFrcgPyBM8jJuGmrbCMuoIOXdbEGVemruKACXoLQJrb+A45Z0L5t1RQkdfJprAYPkikbh7dzdA==}
|
resolution: {integrity: sha512-PCSDQGXD2IyTEFrcgPyBM8jJuGmrbCMuoIOXdbEGVemruKACXoLQJrb+A45Z0L5t1RQkdfJprAYPkikbh7dzdA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
|
'@rolldown/binding-darwin-x64@1.2.15':
|
||||||
|
resolution: {integrity: sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [darwin]
|
||||||
|
|
||||||
'@rolldown/binding-darwin-x64@1.2.8':
|
'@rolldown/binding-darwin-x64@1.2.8':
|
||||||
resolution: {integrity: sha512-Uk7lRsGhPFHVX/sAUC6D5H9Ol30dFHd6iquokll2th3LpdJ3F5CzQB+7DHn0Ri2mG+U7k2zXiPHDrwZenXhwSA==}
|
resolution: {integrity: sha512-Uk7lRsGhPFHVX/sAUC6D5H9Ol30dFHd6iquokll2th3LpdJ3F5CzQB+7DHn0Ri2mG+U7k2zXiPHDrwZenXhwSA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
|
'@rolldown/binding-freebsd-x64@1.2.15':
|
||||||
|
resolution: {integrity: sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [freebsd]
|
||||||
|
|
||||||
'@rolldown/binding-freebsd-x64@1.2.8':
|
'@rolldown/binding-freebsd-x64@1.2.8':
|
||||||
resolution: {integrity: sha512-DjszaTEVogPqA5bYzsEeqDCQxbcp2fexQwKcRspYji2yzR68fCf+e4fx6kBSRDwX5/brZaHw/hWS9+A/+/w9sQ==}
|
resolution: {integrity: sha512-DjszaTEVogPqA5bYzsEeqDCQxbcp2fexQwKcRspYji2yzR68fCf+e4fx6kBSRDwX5/brZaHw/hWS9+A/+/w9sQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-arm-gnueabihf@1.2.15':
|
||||||
|
resolution: {integrity: sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm]
|
||||||
|
os: [linux]
|
||||||
|
|
||||||
'@rolldown/binding-linux-arm-gnueabihf@1.2.8':
|
'@rolldown/binding-linux-arm-gnueabihf@1.2.8':
|
||||||
resolution: {integrity: sha512-zmwa7FTmdzB6aaEEuuls18H6Ap5JmJPSoPTuXixeJZV6tG40SyLkApQtz1g8ptZtiEKqj9OM0oNLPh1AgvE31Q==}
|
resolution: {integrity: sha512-zmwa7FTmdzB6aaEEuuls18H6Ap5JmJPSoPTuXixeJZV6tG40SyLkApQtz1g8ptZtiEKqj9OM0oNLPh1AgvE31Q==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-arm64-gnu@1.2.15':
|
||||||
|
resolution: {integrity: sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rolldown/binding-linux-arm64-gnu@1.2.8':
|
'@rolldown/binding-linux-arm64-gnu@1.2.8':
|
||||||
resolution: {integrity: sha512-KdYQDPHwJVnbFwdTGMgxsI9SqblBlz6STGM+w1We/d5B8OWWidYH0MwkU/uA1wM5fIpO2MkOVxXrNzzuZhw9ew==}
|
resolution: {integrity: sha512-KdYQDPHwJVnbFwdTGMgxsI9SqblBlz6STGM+w1We/d5B8OWWidYH0MwkU/uA1wM5fIpO2MkOVxXrNzzuZhw9ew==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -1791,6 +1841,13 @@ packages:
|
|||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-arm64-musl@1.2.15':
|
||||||
|
resolution: {integrity: sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rolldown/binding-linux-arm64-musl@1.2.8':
|
'@rolldown/binding-linux-arm64-musl@1.2.8':
|
||||||
resolution: {integrity: sha512-jFJTifHnNPY+yzOoNZQfSIysrVyXzEQPhPnOUjmD1bcQGHH6s7c8cViKWar8YplQImE5N9JRqMCLrM2CdxOrZA==}
|
resolution: {integrity: sha512-jFJTifHnNPY+yzOoNZQfSIysrVyXzEQPhPnOUjmD1bcQGHH6s7c8cViKWar8YplQImE5N9JRqMCLrM2CdxOrZA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -1798,6 +1855,13 @@ packages:
|
|||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [musl]
|
libc: [musl]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-ppc64-gnu@1.2.15':
|
||||||
|
resolution: {integrity: sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [ppc64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rolldown/binding-linux-ppc64-gnu@1.2.8':
|
'@rolldown/binding-linux-ppc64-gnu@1.2.8':
|
||||||
resolution: {integrity: sha512-FhiOziBDWPBjbcmRzfLyIJnaP7AVMFXT7YCXPjXxj7wKU3vx24RjrCNN/zjvVa+N2vVoHJwCoUBvsrN/DG3zIA==}
|
resolution: {integrity: sha512-FhiOziBDWPBjbcmRzfLyIJnaP7AVMFXT7YCXPjXxj7wKU3vx24RjrCNN/zjvVa+N2vVoHJwCoUBvsrN/DG3zIA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -1805,6 +1869,13 @@ packages:
|
|||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-s390x-gnu@1.2.15':
|
||||||
|
resolution: {integrity: sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [s390x]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rolldown/binding-linux-s390x-gnu@1.2.8':
|
'@rolldown/binding-linux-s390x-gnu@1.2.8':
|
||||||
resolution: {integrity: sha512-WnHfADMzOV2Y55wlx1hzzQnar/wDt/VdvWSD99r18Mz9ylNieIGOkRx3UV21h7m/eJvjySYJkO26VvGNFkwsIQ==}
|
resolution: {integrity: sha512-WnHfADMzOV2Y55wlx1hzzQnar/wDt/VdvWSD99r18Mz9ylNieIGOkRx3UV21h7m/eJvjySYJkO26VvGNFkwsIQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -1812,6 +1883,13 @@ packages:
|
|||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-x64-gnu@1.2.15':
|
||||||
|
resolution: {integrity: sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [glibc]
|
||||||
|
|
||||||
'@rolldown/binding-linux-x64-gnu@1.2.8':
|
'@rolldown/binding-linux-x64-gnu@1.2.8':
|
||||||
resolution: {integrity: sha512-H9tRr5ibfXFVLxbPOseVewewFpl28zcEdjRDt2FTUZU7odxP0gEv1ki4/kGmcGOh78oRwZuuQllGLZ9zTJp84g==}
|
resolution: {integrity: sha512-H9tRr5ibfXFVLxbPOseVewewFpl28zcEdjRDt2FTUZU7odxP0gEv1ki4/kGmcGOh78oRwZuuQllGLZ9zTJp84g==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -1819,6 +1897,13 @@ packages:
|
|||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [glibc]
|
libc: [glibc]
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-x64-musl@1.2.15':
|
||||||
|
resolution: {integrity: sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [linux]
|
||||||
|
libc: [musl]
|
||||||
|
|
||||||
'@rolldown/binding-linux-x64-musl@1.2.8':
|
'@rolldown/binding-linux-x64-musl@1.2.8':
|
||||||
resolution: {integrity: sha512-UefiqfM3D6IVNlZ8tSGs9+Ejjud2T+oxO0IHADU45Y+lyEjD2dVFyZHbkfX0LUb5Zugo/oIv1eCO/KVYhgYJYA==}
|
resolution: {integrity: sha512-UefiqfM3D6IVNlZ8tSGs9+Ejjud2T+oxO0IHADU45Y+lyEjD2dVFyZHbkfX0LUb5Zugo/oIv1eCO/KVYhgYJYA==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -1826,18 +1911,36 @@ packages:
|
|||||||
os: [linux]
|
os: [linux]
|
||||||
libc: [musl]
|
libc: [musl]
|
||||||
|
|
||||||
|
'@rolldown/binding-openharmony-arm64@1.2.15':
|
||||||
|
resolution: {integrity: sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openharmony]
|
||||||
|
|
||||||
'@rolldown/binding-openharmony-arm64@1.2.8':
|
'@rolldown/binding-openharmony-arm64@1.2.8':
|
||||||
resolution: {integrity: sha512-637Ke4kWSy6rp9cxQ9gMOXlxPgIw/c1beASV4M//3+9I4uwBVOOl74G+e3zyU3u19U7RkRl/HuewixZ/Z6+Rjg==}
|
resolution: {integrity: sha512-637Ke4kWSy6rp9cxQ9gMOXlxPgIw/c1beASV4M//3+9I4uwBVOOl74G+e3zyU3u19U7RkRl/HuewixZ/Z6+Rjg==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [openharmony]
|
os: [openharmony]
|
||||||
|
|
||||||
|
'@rolldown/binding-win32-arm64-msvc@1.2.15':
|
||||||
|
resolution: {integrity: sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
'@rolldown/binding-win32-arm64-msvc@1.2.8':
|
'@rolldown/binding-win32-arm64-msvc@1.2.8':
|
||||||
resolution: {integrity: sha512-xWBkPOF1Q9k/Gv1nQXnVdLxKu74jXppuOM4Z3mnypVUJJJwLsMl7hNJGRAUJoG8A5MgOI1ACKM+wBFxSJzKy4A==}
|
resolution: {integrity: sha512-xWBkPOF1Q9k/Gv1nQXnVdLxKu74jXppuOM4Z3mnypVUJJJwLsMl7hNJGRAUJoG8A5MgOI1ACKM+wBFxSJzKy4A==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
|
'@rolldown/binding-win32-x64-msvc@1.2.15':
|
||||||
|
resolution: {integrity: sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
cpu: [x64]
|
||||||
|
os: [win32]
|
||||||
|
|
||||||
'@rolldown/binding-win32-x64-msvc@1.2.8':
|
'@rolldown/binding-win32-x64-msvc@1.2.8':
|
||||||
resolution: {integrity: sha512-uz2ZvfgXbxqNwijjjbxrnvALwpyODDcgc1T1N8N3rf/DXKQmaFwmB4LX4yyjggpwN2obdQLb2rgirX5ffCWYng==}
|
resolution: {integrity: sha512-uz2ZvfgXbxqNwijjjbxrnvALwpyODDcgc1T1N8N3rf/DXKQmaFwmB4LX4yyjggpwN2obdQLb2rgirX5ffCWYng==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -2132,7 +2235,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==}
|
resolution: {integrity: sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==}
|
||||||
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
|
vite: ^8.3.3
|
||||||
|
|
||||||
acorn-jsx@5.3.2:
|
acorn-jsx@5.3.2:
|
||||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||||
@@ -2261,8 +2364,8 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@popperjs/core': ^2.11.8
|
'@popperjs/core': ^2.11.8
|
||||||
|
|
||||||
brace-expansion@2.1.4:
|
brace-expansion@2.1.7:
|
||||||
resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==}
|
resolution: {integrity: sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==}
|
||||||
|
|
||||||
brace-expansion@5.0.12:
|
brace-expansion@5.0.12:
|
||||||
resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==}
|
resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==}
|
||||||
@@ -2597,8 +2700,8 @@ packages:
|
|||||||
fast-string-width@3.0.2:
|
fast-string-width@3.0.2:
|
||||||
resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
|
resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
|
||||||
|
|
||||||
fast-uri@3.1.8:
|
fast-uri@3.1.9:
|
||||||
resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==}
|
resolution: {integrity: sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==}
|
||||||
|
|
||||||
fast-wrap-ansi@0.2.2:
|
fast-wrap-ansi@0.2.2:
|
||||||
resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
|
resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
|
||||||
@@ -3029,8 +3132,8 @@ packages:
|
|||||||
js-tokens@4.0.0:
|
js-tokens@4.0.0:
|
||||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||||
|
|
||||||
js-yaml@3.15.1:
|
js-yaml@3.15.2:
|
||||||
resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==}
|
resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
jsdom@26.1.0:
|
jsdom@26.1.0:
|
||||||
@@ -3280,6 +3383,11 @@ packages:
|
|||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
nanoid@3.3.20:
|
||||||
|
resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==}
|
||||||
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
napi-postinstall@0.3.4:
|
napi-postinstall@0.3.4:
|
||||||
resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
|
resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
|
||||||
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
||||||
@@ -3510,6 +3618,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==}
|
resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==}
|
||||||
engines: {node: ^10 || ^12 || >=14}
|
engines: {node: ^10 || ^12 || >=14}
|
||||||
|
|
||||||
|
postcss@8.5.31:
|
||||||
|
resolution: {integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==}
|
||||||
|
engines: {node: ^10 || ^12 || >=14}
|
||||||
|
|
||||||
prelude-ls@1.2.1:
|
prelude-ls@1.2.1:
|
||||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
@@ -3601,6 +3713,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
|
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
rolldown@1.2.15:
|
||||||
|
resolution: {integrity: sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==}
|
||||||
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
rolldown@1.2.8:
|
rolldown@1.2.8:
|
||||||
resolution: {integrity: sha512-Z67nTmhZe7anqnM/EjI392w5i/ANUinjip7QYsOyN37oayduxt3ksdX0hf5OOamkAd53BiIHfbfSzfUmzKFQqQ==}
|
resolution: {integrity: sha512-Z67nTmhZe7anqnM/EjI392w5i/ANUinjip7QYsOyN37oayduxt3ksdX0hf5OOamkAd53BiIHfbfSzfUmzKFQqQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
@@ -3773,8 +3890,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-aBY19bn/XA+hKOKX0qL7Z0UfdBsbQvc9hn993U8ALUjzxCvDcuZqLoRXjGJrUARWAlwMnsRVD9sw2AFNOYvalA==}
|
resolution: {integrity: sha512-aBY19bn/XA+hKOKX0qL7Z0UfdBsbQvc9hn993U8ALUjzxCvDcuZqLoRXjGJrUARWAlwMnsRVD9sw2AFNOYvalA==}
|
||||||
engines: {node: '>=22'}
|
engines: {node: '>=22'}
|
||||||
|
|
||||||
source-map-js@1.2.1:
|
source-map-js@1.2.2:
|
||||||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
source-map-support@0.5.21:
|
source-map-support@0.5.21:
|
||||||
@@ -4005,13 +4122,13 @@ packages:
|
|||||||
resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==}
|
resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==}
|
||||||
engines: {node: '>=18.12.0'}
|
engines: {node: '>=18.12.0'}
|
||||||
|
|
||||||
vite@8.3.0:
|
vite@8.3.5:
|
||||||
resolution: {integrity: sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==}
|
resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@types/node': ^20.19.0 || >=22.12.0
|
'@types/node': ^20.19.0 || >=22.12.0
|
||||||
'@vitejs/devtools': ^0.7.1
|
'@vitejs/devtools': ^0.7.1 || ^0.8.0
|
||||||
esbuild: ^0.27.0 || ^0.28.0
|
esbuild: ^0.27.0 || ^0.28.0
|
||||||
jiti: '>=1.21.0'
|
jiti: '>=1.21.0'
|
||||||
less: ^4.0.0
|
less: ^4.0.0
|
||||||
@@ -4168,8 +4285,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==}
|
resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
zod@4.6.5:
|
zod@4.6.7:
|
||||||
resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==}
|
resolution: {integrity: sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==}
|
||||||
|
|
||||||
snapshots:
|
snapshots:
|
||||||
|
|
||||||
@@ -4369,7 +4486,7 @@ snapshots:
|
|||||||
'@babel/core': 8.0.5
|
'@babel/core': 8.0.5
|
||||||
'@inquirer/confirm': 6.3.2(@types/node@26.6.2)
|
'@inquirer/confirm': 6.3.2(@types/node@26.6.2)
|
||||||
'@parcel/watcher': 2.6.0
|
'@parcel/watcher': 2.6.0
|
||||||
'@vitejs/plugin-basic-ssl': 2.3.0(vite@8.3.0(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1))
|
'@vitejs/plugin-basic-ssl': 2.3.0(vite@8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1))
|
||||||
beasties: 0.5.4
|
beasties: 0.5.4
|
||||||
browserslist: 4.29.1
|
browserslist: 4.29.1
|
||||||
chokidar: 5.0.0
|
chokidar: 5.0.0
|
||||||
@@ -4391,7 +4508,7 @@ snapshots:
|
|||||||
tinyglobby: 0.2.17
|
tinyglobby: 0.2.17
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
typescript: 6.0.3
|
typescript: 6.0.3
|
||||||
vite: 8.3.0(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)
|
vite: 8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)
|
||||||
xxhash-wasm: 1.1.0
|
xxhash-wasm: 1.1.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)
|
'@angular/core': 22.2.2(@angular/compiler@22.2.2)(rxjs@7.8.2)
|
||||||
@@ -4437,7 +4554,7 @@ snapshots:
|
|||||||
parse5-html-rewriting-stream: 8.0.1
|
parse5-html-rewriting-stream: 8.0.1
|
||||||
semver: 7.8.5
|
semver: 7.8.5
|
||||||
yargs: 18.1.0
|
yargs: 18.1.0
|
||||||
zod: 4.6.5
|
zod: 4.6.7
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
- chokidar
|
- chokidar
|
||||||
@@ -4481,7 +4598,7 @@ snapshots:
|
|||||||
'@standard-schema/spec': 1.1.0
|
'@standard-schema/spec': 1.1.0
|
||||||
rxjs: 7.8.2
|
rxjs: 7.8.2
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
zod: 4.6.5
|
zod: 4.6.7
|
||||||
|
|
||||||
'@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2)':
|
'@angular/localize@22.2.2(@angular/compiler-cli@22.2.2(@angular/compiler@22.2.2)(typescript@6.0.3))(@angular/compiler@22.2.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -5118,7 +5235,7 @@ snapshots:
|
|||||||
camelcase: 5.3.1
|
camelcase: 5.3.1
|
||||||
find-up: 4.1.0
|
find-up: 4.1.0
|
||||||
get-package-type: 0.1.0
|
get-package-type: 0.1.0
|
||||||
js-yaml: 3.15.1
|
js-yaml: 3.15.2
|
||||||
resolve-from: 5.0.0
|
resolve-from: 5.0.0
|
||||||
|
|
||||||
'@istanbuljs/schema@0.1.6': {}
|
'@istanbuljs/schema@0.1.6': {}
|
||||||
@@ -5412,12 +5529,12 @@ snapshots:
|
|||||||
|
|
||||||
'@modelcontextprotocol/core@2.3.1':
|
'@modelcontextprotocol/core@2.3.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
zod: 4.6.5
|
zod: 4.6.7
|
||||||
|
|
||||||
'@modelcontextprotocol/server@2.3.1':
|
'@modelcontextprotocol/server@2.3.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@modelcontextprotocol/core': 2.3.1
|
'@modelcontextprotocol/core': 2.3.1
|
||||||
zod: 4.6.5
|
zod: 4.6.7
|
||||||
|
|
||||||
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4':
|
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4':
|
||||||
optional: true
|
optional: true
|
||||||
@@ -5652,6 +5769,8 @@ snapshots:
|
|||||||
|
|
||||||
'@oxc-project/types@0.150.0': {}
|
'@oxc-project/types@0.150.0': {}
|
||||||
|
|
||||||
|
'@oxc-project/types@0.155.0': {}
|
||||||
|
|
||||||
'@parcel/watcher-android-arm64@2.6.0':
|
'@parcel/watcher-android-arm64@2.6.0':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -5719,48 +5838,93 @@ snapshots:
|
|||||||
|
|
||||||
'@popperjs/core@2.11.8': {}
|
'@popperjs/core@2.11.8': {}
|
||||||
|
|
||||||
|
'@rolldown/binding-android-arm-eabi@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-android-arm-eabi@1.2.8':
|
'@rolldown/binding-android-arm-eabi@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-android-arm64@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-android-arm64@1.2.8':
|
'@rolldown/binding-android-arm64@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-darwin-arm64@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-darwin-arm64@1.2.8':
|
'@rolldown/binding-darwin-arm64@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-darwin-x64@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-darwin-x64@1.2.8':
|
'@rolldown/binding-darwin-x64@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-freebsd-x64@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-freebsd-x64@1.2.8':
|
'@rolldown/binding-freebsd-x64@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-arm-gnueabihf@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-arm-gnueabihf@1.2.8':
|
'@rolldown/binding-linux-arm-gnueabihf@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-arm64-gnu@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-arm64-gnu@1.2.8':
|
'@rolldown/binding-linux-arm64-gnu@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-arm64-musl@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-arm64-musl@1.2.8':
|
'@rolldown/binding-linux-arm64-musl@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-ppc64-gnu@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-ppc64-gnu@1.2.8':
|
'@rolldown/binding-linux-ppc64-gnu@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-s390x-gnu@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-s390x-gnu@1.2.8':
|
'@rolldown/binding-linux-s390x-gnu@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-x64-gnu@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-x64-gnu@1.2.8':
|
'@rolldown/binding-linux-x64-gnu@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-linux-x64-musl@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-linux-x64-musl@1.2.8':
|
'@rolldown/binding-linux-x64-musl@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-openharmony-arm64@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-openharmony-arm64@1.2.8':
|
'@rolldown/binding-openharmony-arm64@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-win32-arm64-msvc@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-win32-arm64-msvc@1.2.8':
|
'@rolldown/binding-win32-arm64-msvc@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@rolldown/binding-win32-x64-msvc@1.2.15':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-win32-x64-msvc@1.2.8':
|
'@rolldown/binding-win32-x64-msvc@1.2.8':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@@ -6051,9 +6215,9 @@ snapshots:
|
|||||||
'@unrs/resolver-binding-win32-x64-msvc@1.12.2':
|
'@unrs/resolver-binding-win32-x64-msvc@1.12.2':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.0(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1))':
|
'@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
vite: 8.3.0(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)
|
vite: 8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)
|
||||||
|
|
||||||
acorn-jsx@5.3.2(acorn@8.18.0):
|
acorn-jsx@5.3.2(acorn@8.18.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -6083,7 +6247,7 @@ snapshots:
|
|||||||
ajv@8.20.0:
|
ajv@8.20.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal: 3.1.3
|
fast-deep-equal: 3.1.3
|
||||||
fast-uri: 3.1.8
|
fast-uri: 3.1.9
|
||||||
json-schema-traverse: 1.0.0
|
json-schema-traverse: 1.0.0
|
||||||
require-from-string: 2.0.2
|
require-from-string: 2.0.2
|
||||||
|
|
||||||
@@ -6198,7 +6362,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@popperjs/core': 2.11.8
|
'@popperjs/core': 2.11.8
|
||||||
|
|
||||||
brace-expansion@2.1.4:
|
brace-expansion@2.1.7:
|
||||||
dependencies:
|
dependencies:
|
||||||
balanced-match: 1.0.2
|
balanced-match: 1.0.2
|
||||||
|
|
||||||
@@ -6543,7 +6707,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fast-string-truncated-width: 3.0.3
|
fast-string-truncated-width: 3.0.3
|
||||||
|
|
||||||
fast-uri@3.1.8: {}
|
fast-uri@3.1.9: {}
|
||||||
|
|
||||||
fast-wrap-ansi@0.2.2:
|
fast-wrap-ansi@0.2.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -7193,7 +7357,7 @@ snapshots:
|
|||||||
|
|
||||||
js-tokens@4.0.0: {}
|
js-tokens@4.0.0: {}
|
||||||
|
|
||||||
js-yaml@3.15.1:
|
js-yaml@3.15.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
argparse: 1.0.10
|
argparse: 1.0.10
|
||||||
esprima: 4.0.1
|
esprima: 4.0.1
|
||||||
@@ -7393,7 +7557,7 @@ snapshots:
|
|||||||
|
|
||||||
minimatch@9.0.9:
|
minimatch@9.0.9:
|
||||||
dependencies:
|
dependencies:
|
||||||
brace-expansion: 2.1.4
|
brace-expansion: 2.1.7
|
||||||
|
|
||||||
minimist@1.2.8: {}
|
minimist@1.2.8: {}
|
||||||
|
|
||||||
@@ -7428,6 +7592,8 @@ snapshots:
|
|||||||
|
|
||||||
nanoid@3.3.18: {}
|
nanoid@3.3.18: {}
|
||||||
|
|
||||||
|
nanoid@3.3.20: {}
|
||||||
|
|
||||||
napi-postinstall@0.3.4: {}
|
napi-postinstall@0.3.4: {}
|
||||||
|
|
||||||
natural-compare@1.4.0: {}
|
natural-compare@1.4.0: {}
|
||||||
@@ -7674,7 +7840,13 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
nanoid: 3.3.18
|
nanoid: 3.3.18
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.2
|
||||||
|
|
||||||
|
postcss@8.5.31:
|
||||||
|
dependencies:
|
||||||
|
nanoid: 3.3.20
|
||||||
|
picocolors: 1.1.1
|
||||||
|
source-map-js: 1.2.2
|
||||||
|
|
||||||
prelude-ls@1.2.1: {}
|
prelude-ls@1.2.1: {}
|
||||||
|
|
||||||
@@ -7742,6 +7914,27 @@ snapshots:
|
|||||||
onetime: 7.0.0
|
onetime: 7.0.0
|
||||||
signal-exit: 4.1.0
|
signal-exit: 4.1.0
|
||||||
|
|
||||||
|
rolldown@1.2.15:
|
||||||
|
dependencies:
|
||||||
|
'@oxc-project/types': 0.155.0
|
||||||
|
'@rolldown/pluginutils': 1.0.1
|
||||||
|
optionalDependencies:
|
||||||
|
'@rolldown/binding-android-arm-eabi': 1.2.15
|
||||||
|
'@rolldown/binding-android-arm64': 1.2.15
|
||||||
|
'@rolldown/binding-darwin-arm64': 1.2.15
|
||||||
|
'@rolldown/binding-darwin-x64': 1.2.15
|
||||||
|
'@rolldown/binding-freebsd-x64': 1.2.15
|
||||||
|
'@rolldown/binding-linux-arm-gnueabihf': 1.2.15
|
||||||
|
'@rolldown/binding-linux-arm64-gnu': 1.2.15
|
||||||
|
'@rolldown/binding-linux-arm64-musl': 1.2.15
|
||||||
|
'@rolldown/binding-linux-ppc64-gnu': 1.2.15
|
||||||
|
'@rolldown/binding-linux-s390x-gnu': 1.2.15
|
||||||
|
'@rolldown/binding-linux-x64-gnu': 1.2.15
|
||||||
|
'@rolldown/binding-linux-x64-musl': 1.2.15
|
||||||
|
'@rolldown/binding-openharmony-arm64': 1.2.15
|
||||||
|
'@rolldown/binding-win32-arm64-msvc': 1.2.15
|
||||||
|
'@rolldown/binding-win32-x64-msvc': 1.2.15
|
||||||
|
|
||||||
rolldown@1.2.8:
|
rolldown@1.2.8:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@oxc-project/types': 0.149.0
|
'@oxc-project/types': 0.149.0
|
||||||
@@ -7862,7 +8055,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
chokidar: 5.0.0
|
chokidar: 5.0.0
|
||||||
immutable: 5.1.9
|
immutable: 5.1.9
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@parcel/watcher': 2.6.0
|
'@parcel/watcher': 2.6.0
|
||||||
|
|
||||||
@@ -7891,7 +8084,7 @@ snapshots:
|
|||||||
ansi-styles: 6.2.3
|
ansi-styles: 6.2.3
|
||||||
is-fullwidth-code-point: 5.1.0
|
is-fullwidth-code-point: 5.1.0
|
||||||
|
|
||||||
source-map-js@1.2.1: {}
|
source-map-js@1.2.2: {}
|
||||||
|
|
||||||
source-map-support@0.5.21:
|
source-map-support@0.5.21:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -8118,12 +8311,12 @@ snapshots:
|
|||||||
|
|
||||||
verkit@0.3.2: {}
|
verkit@0.3.2: {}
|
||||||
|
|
||||||
vite@8.3.0(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1):
|
vite@8.3.5(@types/node@26.6.2)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
lightningcss: 1.33.0
|
lightningcss: 1.33.0
|
||||||
picomatch: 4.0.7
|
picomatch: 4.0.7
|
||||||
postcss: 8.5.28
|
postcss: 8.5.31
|
||||||
rolldown: 1.2.8
|
rolldown: 1.2.15
|
||||||
tinyglobby: 0.2.17
|
tinyglobby: 0.2.17
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 26.6.2
|
'@types/node': 26.6.2
|
||||||
@@ -8241,4 +8434,4 @@ snapshots:
|
|||||||
|
|
||||||
yoctocolors@2.2.0: {}
|
yoctocolors@2.2.0: {}
|
||||||
|
|
||||||
zod@4.6.5: {}
|
zod@4.6.7: {}
|
||||||
@@ -24,3 +24,6 @@ onlyBuiltDependencies:
|
|||||||
ignoredBuiltDependencies:
|
ignoredBuiltDependencies:
|
||||||
- normalize-diacritics
|
- normalize-diacritics
|
||||||
- unrs-resolver
|
- unrs-resolver
|
||||||
|
overrides:
|
||||||
|
"vite@>=8.3.0 <8.3.3": "^8.3.3"
|
||||||
|
"zod@<4.6.6": "^4.6.6"
|
||||||
@@ -8,7 +8,7 @@ export const environment = {
|
|||||||
apiVersion: '10', // match src/paperless/settings.py
|
apiVersion: '10', // match src/paperless/settings.py
|
||||||
appTitle: DEFAULT_APP_TITLE,
|
appTitle: DEFAULT_APP_TITLE,
|
||||||
tag: 'prod',
|
tag: 'prod',
|
||||||
version: '3.3.4',
|
version: '3.4.0',
|
||||||
webSocketHost: window.location.host,
|
webSocketHost: window.location.host,
|
||||||
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
||||||
webSocketBaseUrl: base_url.pathname + 'ws/',
|
webSocketBaseUrl: base_url.pathname + 'ws/',
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -11,6 +11,8 @@ from typing import TYPE_CHECKING
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from paperless_testing import samples
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -149,3 +151,39 @@ def fake_progress_manager(
|
|||||||
|
|
||||||
monkeypatch.setattr("documents.tasks.ProgressManager", FakeProgressManager)
|
monkeypatch.setattr("documents.tasks.ProgressManager", FakeProgressManager)
|
||||||
return FakeProgressManager
|
return FakeProgressManager
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def shared_samples_dir() -> Path:
|
||||||
|
"""Directory of sample files used by more than one app's tests."""
|
||||||
|
return samples.SHARED_SAMPLES_DIR
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def simple_digital_pdf_file() -> Path:
|
||||||
|
"""One-page PDF with a text layer."""
|
||||||
|
return samples.SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def multi_page_digital_pdf_file() -> Path:
|
||||||
|
"""Three-page PDF with a text layer."""
|
||||||
|
return samples.MULTI_PAGE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def with_form_pdf_file() -> Path:
|
||||||
|
"""PDF containing a fillable form."""
|
||||||
|
return samples.WITH_FORM_PDF
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def multi_page_images_pdf_file() -> Path:
|
||||||
|
"""Multi-page PDF of scanned images, no text layer."""
|
||||||
|
return samples.MULTI_PAGE_IMAGES_PDF
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def thumbnail_webp_file() -> Path:
|
||||||
|
"""Small WebP thumbnail."""
|
||||||
|
return samples.THUMBNAIL_WEBP
|
||||||
@@ -576,12 +576,9 @@ def annotate_document_count_by_ids(
|
|||||||
or CustomFieldInstance)
|
or CustomFieldInstance)
|
||||||
related_object_field: field on the relation pointing back to queryset pk
|
related_object_field: field on the relation pointing back to queryset pk
|
||||||
document_ids: the document ids to count against -- a concrete list/set,
|
document_ids: the document ids to count against -- a concrete list/set,
|
||||||
or a simple (already resolved) queryset of ids. Callers
|
or a simple (already resolved) queryset of ids. Keep
|
||||||
that need this filtered by a complex condition (e.g. a
|
the list small: it is embedded in the statement as
|
||||||
permission check) should resolve it to a concrete list
|
literal parameters.
|
||||||
first if the same ids will be reused across multiple
|
|
||||||
calls, rather than passing the complex queryset itself
|
|
||||||
into each -- see ``_get_selection_data_for_queryset``.
|
|
||||||
target_field: field on the relation pointing to Document id
|
target_field: field on the relation pointing to Document id
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
@@ -476,13 +476,13 @@ def update_filename_and_move_files(
|
|||||||
return
|
return
|
||||||
|
|
||||||
with FileLock(settings.MEDIA_LOCK):
|
with FileLock(settings.MEDIA_LOCK):
|
||||||
# If this was waiting for the lock, the filename or archive_filename
|
|
||||||
# of this document may have been updated. This happens if multiple updates
|
|
||||||
# get queued from the UI for the same document
|
|
||||||
# So freshen up the data before doing anything
|
|
||||||
instance.refresh_from_db()
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# If this was waiting for the lock, the filename or archive_filename
|
||||||
|
# of this document may have been updated. This happens if multiple updates
|
||||||
|
# get queued from the UI for the same document
|
||||||
|
# So freshen up the data before doing anything
|
||||||
|
instance.refresh_from_db()
|
||||||
|
|
||||||
old_filename = instance.filename
|
old_filename = instance.filename
|
||||||
old_source_path = instance.source_path
|
old_source_path = instance.source_path
|
||||||
move_original = False
|
move_original = False
|
||||||
|
|||||||
@@ -44,10 +44,7 @@ def localize_date(value: date | datetime | str, format: str, locale: str) -> str
|
|||||||
|
|
||||||
def format_datetime(value: str | datetime, format: str) -> str:
|
def format_datetime(value: str | datetime, format: str) -> str:
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
parsed = parse_datetime(value) or parse_date(value)
|
value = parse_date(value)
|
||||||
if parsed is None:
|
|
||||||
raise ValueError(f"Invalid date or datetime string: {value!r}")
|
|
||||||
return parsed.strftime(format=format)
|
|
||||||
return value.strftime(format=format)
|
return value.strftime(format=format)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,29 +12,25 @@ if TYPE_CHECKING:
|
|||||||
from paperless_testing.dirs import PaperlessDirs
|
from paperless_testing.dirs import PaperlessDirs
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
|
||||||
def document_samples_dir() -> Path:
|
|
||||||
"""Path to the shared test sample documents."""
|
|
||||||
return Path(__file__).parent / "samples" / "documents"
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def sample_doc(
|
def sample_doc(
|
||||||
paperless_dirs: "PaperlessDirs",
|
paperless_dirs: "PaperlessDirs",
|
||||||
document_samples_dir: Path,
|
simple_digital_pdf_file: Path,
|
||||||
|
multi_page_images_pdf_file: Path,
|
||||||
|
thumbnail_webp_file: Path,
|
||||||
) -> "Document":
|
) -> "Document":
|
||||||
"""Create a document with valid files and matching checksums."""
|
"""Create a document with valid files and matching checksums."""
|
||||||
with filelock.FileLock(paperless_dirs.media_lock):
|
with filelock.FileLock(paperless_dirs.media_lock):
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
document_samples_dir / "originals" / "0000001.pdf",
|
simple_digital_pdf_file,
|
||||||
paperless_dirs.originals_dir / "0000001.pdf",
|
paperless_dirs.originals_dir / "0000001.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
document_samples_dir / "archive" / "0000001.pdf",
|
multi_page_images_pdf_file,
|
||||||
paperless_dirs.archive_dir / "0000001.pdf",
|
paperless_dirs.archive_dir / "0000001.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
document_samples_dir / "thumbnails" / "0000001.webp",
|
thumbnail_webp_file,
|
||||||
paperless_dirs.thumbnail_dir / "0000001.webp",
|
paperless_dirs.thumbnail_dir / "0000001.webp",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
This is a test file.
|
|
||||||
@@ -53,7 +53,7 @@ class TestBulkDownload(DirectoriesMixin, SampleDirMixin, APITestCase):
|
|||||||
archive_checksum="D",
|
archive_checksum="D",
|
||||||
)
|
)
|
||||||
|
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", self.doc2.source_path)
|
shutil.copy(self.SIMPLE_PDF, self.doc2.source_path)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.png", self.doc2b.source_path)
|
shutil.copy(self.SAMPLE_DIR / "simple.png", self.doc2b.source_path)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.jpg", self.doc3.source_path)
|
shutil.copy(self.SAMPLE_DIR / "simple.jpg", self.doc3.source_path)
|
||||||
shutil.copy(self.SAMPLE_DIR / "test_with_bom.pdf", self.doc3.archive_path)
|
shutil.copy(self.SAMPLE_DIR / "test_with_bom.pdf", self.doc3.archive_path)
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ from paperless_testing.http import read_streaming_response
|
|||||||
from paperless_testing.permissions import grant_all_global
|
from paperless_testing.permissions import grant_all_global
|
||||||
from paperless_testing.permissions import grant_global
|
from paperless_testing.permissions import grant_global
|
||||||
from paperless_testing.permissions import grant_object
|
from paperless_testing.permissions import grant_object
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
from paperless_testing.samples import THUMBNAIL_WEBP
|
||||||
|
|
||||||
|
|
||||||
class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
||||||
@@ -1917,7 +1919,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SimpleUploadedFile(
|
||||||
|
"simple.pdf",
|
||||||
|
SIMPLE_DIGITAL_PDF.read_bytes(),
|
||||||
|
content_type="application/pdf",
|
||||||
|
) as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f},
|
{"document": f},
|
||||||
@@ -1945,7 +1951,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
|
|
||||||
payload = SimpleUploadedFile(
|
payload = SimpleUploadedFile(
|
||||||
"../../outside.pdf",
|
"../../outside.pdf",
|
||||||
(Path(__file__).parent / "samples" / "simple.pdf").read_bytes(),
|
SIMPLE_DIGITAL_PDF.read_bytes(),
|
||||||
content_type="application/pdf",
|
content_type="application/pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1974,7 +1980,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
pdf_bytes = (Path(__file__).parent / "samples" / "simple.pdf").read_bytes()
|
pdf_bytes = SIMPLE_DIGITAL_PDF.read_bytes()
|
||||||
boundary = "paperless-boundary"
|
boundary = "paperless-boundary"
|
||||||
payload = (
|
payload = (
|
||||||
(
|
(
|
||||||
@@ -2050,7 +2056,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
def test_upload_insufficient_permissions(self) -> None:
|
def test_upload_insufficient_permissions(self) -> None:
|
||||||
self.client.force_authenticate(user=UserFactory(username="testuser2"))
|
self.client.force_authenticate(user=UserFactory(username="testuser2"))
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f},
|
{"document": f},
|
||||||
@@ -2063,7 +2069,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SimpleUploadedFile(
|
||||||
|
"simple.pdf",
|
||||||
|
SIMPLE_DIGITAL_PDF.read_bytes(),
|
||||||
|
content_type="application/pdf",
|
||||||
|
) as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{
|
{
|
||||||
@@ -2096,7 +2106,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"documenst": f},
|
{"documenst": f},
|
||||||
@@ -2122,7 +2132,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "title": "my custom title"},
|
{"document": f, "title": "my custom title"},
|
||||||
@@ -2142,7 +2152,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
c = Correspondent.objects.create(name="test-corres")
|
c = Correspondent.objects.create(name="test-corres")
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "correspondent": c.id},
|
{"document": f, "correspondent": c.id},
|
||||||
@@ -2161,7 +2171,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "correspondent": 3456},
|
{"document": f, "correspondent": 3456},
|
||||||
@@ -2176,7 +2186,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
dt = DocumentType.objects.create(name="invoice")
|
dt = DocumentType.objects.create(name="invoice")
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "document_type": dt.id},
|
{"document": f, "document_type": dt.id},
|
||||||
@@ -2195,7 +2205,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "document_type": 34578},
|
{"document": f, "document_type": 34578},
|
||||||
@@ -2210,7 +2220,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
sp = StoragePath.objects.create(name="invoices")
|
sp = StoragePath.objects.create(name="invoices")
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "storage_path": sp.id},
|
{"document": f, "storage_path": sp.id},
|
||||||
@@ -2229,7 +2239,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "storage_path": 34578},
|
{"document": f, "storage_path": 34578},
|
||||||
@@ -2245,7 +2255,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
|
|
||||||
t1 = Tag.objects.create(name="tag1")
|
t1 = Tag.objects.create(name="tag1")
|
||||||
t2 = Tag.objects.create(name="tag2")
|
t2 = Tag.objects.create(name="tag2")
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "tags": [t2.id, t1.id]},
|
{"document": f, "tags": [t2.id, t1.id]},
|
||||||
@@ -2266,7 +2276,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
|
|
||||||
t1 = Tag.objects.create(name="tag1")
|
t1 = Tag.objects.create(name="tag1")
|
||||||
t2 = Tag.objects.create(name="tag2")
|
t2 = Tag.objects.create(name="tag2")
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "tags": [t2.id, t1.id, 734563]},
|
{"document": f, "tags": [t2.id, t1.id, 734563]},
|
||||||
@@ -2290,7 +2300,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
0,
|
0,
|
||||||
tzinfo=zoneinfo.ZoneInfo("America/Los_Angeles"),
|
tzinfo=zoneinfo.ZoneInfo("America/Los_Angeles"),
|
||||||
)
|
)
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "created": created},
|
{"document": f, "created": created},
|
||||||
@@ -2306,7 +2316,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SimpleUploadedFile(
|
||||||
|
"simple.pdf",
|
||||||
|
SIMPLE_DIGITAL_PDF.read_bytes(),
|
||||||
|
content_type="application/pdf",
|
||||||
|
) as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "archive_serial_number": 500},
|
{"document": f, "archive_serial_number": 500},
|
||||||
@@ -2333,7 +2347,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
data_type=CustomField.FieldDataType.STRING,
|
data_type=CustomField.FieldDataType.STRING,
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SimpleUploadedFile(
|
||||||
|
"simple.pdf",
|
||||||
|
SIMPLE_DIGITAL_PDF.read_bytes(),
|
||||||
|
content_type="application/pdf",
|
||||||
|
) as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{
|
{
|
||||||
@@ -2388,7 +2406,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
w1.actions.add(action1)
|
w1.actions.add(action1)
|
||||||
w1.save()
|
w1.save()
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{
|
{
|
||||||
@@ -2429,7 +2447,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
data_type=CustomField.FieldDataType.INT,
|
data_type=CustomField.FieldDataType.INT,
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SimpleUploadedFile(
|
||||||
|
"simple.pdf",
|
||||||
|
SIMPLE_DIGITAL_PDF.read_bytes(),
|
||||||
|
content_type="application/pdf",
|
||||||
|
) as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{
|
{
|
||||||
@@ -2478,7 +2500,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
]
|
]
|
||||||
|
|
||||||
for payload in error_payloads:
|
for payload in error_payloads:
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
data = {"document": f, **payload}
|
data = {"document": f, **payload}
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
@@ -2536,7 +2558,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
id=str(uuid.uuid4()),
|
id=str(uuid.uuid4()),
|
||||||
)
|
)
|
||||||
|
|
||||||
with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f:
|
with SIMPLE_DIGITAL_PDF.open("rb") as f:
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
"/api/documents/post_document/",
|
"/api/documents/post_document/",
|
||||||
{"document": f, "from_webui": True},
|
{"document": f, "from_webui": True},
|
||||||
@@ -2575,14 +2597,8 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
archive_filename="archive.pdf",
|
archive_filename="archive.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
source_file: Path = (
|
source_file: Path = THUMBNAIL_WEBP
|
||||||
Path(__file__).parent
|
archive_file: Path = SIMPLE_DIGITAL_PDF
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "thumbnails"
|
|
||||||
/ "0000001.webp"
|
|
||||||
)
|
|
||||||
archive_file: Path = Path(__file__).parent / "samples" / "simple.pdf"
|
|
||||||
|
|
||||||
shutil.copy(source_file, doc.source_path)
|
shutil.copy(source_file, doc.source_path)
|
||||||
shutil.copy(archive_file, doc.archive_path)
|
shutil.copy(archive_file, doc.archive_path)
|
||||||
@@ -2615,7 +2631,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
mime_type="application/pdf",
|
mime_type="application/pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
shutil.copy(Path(__file__).parent / "samples" / "simple.pdf", doc.source_path)
|
shutil.copy(SIMPLE_DIGITAL_PDF, doc.source_path)
|
||||||
|
|
||||||
response = self.client.get(f"/api/documents/{doc.pk}/metadata/")
|
response = self.client.get(f"/api/documents/{doc.pk}/metadata/")
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
@@ -4381,8 +4397,8 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
|
|||||||
filename="test2.pdf",
|
filename="test2.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
archive_file = Path(__file__).parent / "samples" / "simple.pdf"
|
archive_file = SIMPLE_DIGITAL_PDF
|
||||||
source_file = Path(__file__).parent / "samples" / "simple.pdf"
|
source_file = SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
shutil.copy(archive_file, doc.archive_path)
|
shutil.copy(archive_file, doc.archive_path)
|
||||||
shutil.copy(source_file, doc2.source_path)
|
shutil.copy(source_file, doc2.source_path)
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ from documents.tests.utils import SampleDirMixin
|
|||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
from paperless_testing.factories import UserFactory
|
from paperless_testing.factories import UserFactory
|
||||||
from paperless_testing.permissions import grant_global
|
from paperless_testing.permissions import grant_global
|
||||||
|
from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
from paperless_testing.samples import WITH_FORM_PDF
|
||||||
|
|
||||||
|
|
||||||
class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase):
|
class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase):
|
||||||
@@ -42,15 +45,15 @@ class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase):
|
|||||||
|
|
||||||
# Copy sample files to document paths (using different files to distinguish versions)
|
# Copy sample files to document paths (using different files to distinguish versions)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
self.SAMPLE_DIR / "documents" / "originals" / "0000001.pdf",
|
SIMPLE_DIGITAL_PDF,
|
||||||
self.doc1.archive_path,
|
self.doc1.archive_path,
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
self.SAMPLE_DIR / "documents" / "originals" / "0000002.pdf",
|
MULTI_PAGE_DIGITAL_PDF,
|
||||||
self.doc1.source_path,
|
self.doc1.source_path,
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
self.SAMPLE_DIR / "documents" / "originals" / "0000003.pdf",
|
WITH_FORM_PDF,
|
||||||
self.doc2.source_path,
|
self.doc2.source_path,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -377,7 +380,7 @@ class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase):
|
|||||||
checksum="3",
|
checksum="3",
|
||||||
filename="test3.pdf",
|
filename="test3.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", doc3.source_path)
|
shutil.copy(self.SIMPLE_PDF, doc3.source_path)
|
||||||
|
|
||||||
doc4 = Document.objects.create(
|
doc4 = Document.objects.create(
|
||||||
title="test1",
|
title="test1",
|
||||||
@@ -386,7 +389,7 @@ class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase):
|
|||||||
checksum="4",
|
checksum="4",
|
||||||
filename="test4.pdf",
|
filename="test4.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", doc4.source_path)
|
shutil.copy(self.SIMPLE_PDF, doc4.source_path)
|
||||||
|
|
||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
self.ENDPOINT,
|
self.ENDPOINT,
|
||||||
|
|||||||
@@ -539,50 +539,3 @@ class TestSystemStatus(APITestCase):
|
|||||||
self.assertEqual(response.data["tasks"]["summary"]["success_count"], 1)
|
self.assertEqual(response.data["tasks"]["summary"]["success_count"], 1)
|
||||||
self.assertEqual(response.data["tasks"]["summary"]["failure_count"], 1)
|
self.assertEqual(response.data["tasks"]["summary"]["failure_count"], 1)
|
||||||
self.assertEqual(response.data["tasks"]["summary"]["pending_count"], 1)
|
self.assertEqual(response.data["tasks"]["summary"]["pending_count"], 1)
|
||||||
|
|
||||||
def test_system_status_reports_database_error(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Reading the migration state fails
|
|
||||||
WHEN:
|
|
||||||
- The system status is requested
|
|
||||||
THEN:
|
|
||||||
- The response reports the database error rather than a server error
|
|
||||||
"""
|
|
||||||
self.client.force_login(self.user)
|
|
||||||
with mock.patch(
|
|
||||||
"documents.views.MigrationLoader",
|
|
||||||
side_effect=Exception("database is down"),
|
|
||||||
):
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
database = response.data["database"]
|
|
||||||
self.assertEqual(database["status"], "ERROR")
|
|
||||||
self.assertIsNotNone(database["error"])
|
|
||||||
self.assertEqual(
|
|
||||||
database["migration_status"],
|
|
||||||
{"latest_migration": None, "unapplied_migrations": []},
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_system_status_migration_query_error(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- The migration graph loads but reading the applied migrations fails
|
|
||||||
WHEN:
|
|
||||||
- The system status is requested
|
|
||||||
THEN:
|
|
||||||
- No migrations are reported as unapplied, since the state is unknown
|
|
||||||
"""
|
|
||||||
self.client.force_login(self.user)
|
|
||||||
with mock.patch("documents.views.MigrationRecorder") as recorder:
|
|
||||||
recorder.Migration.objects.all.side_effect = Exception("query failed")
|
|
||||||
response = self.client.get(self.ENDPOINT)
|
|
||||||
|
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
||||||
database = response.data["database"]
|
|
||||||
self.assertEqual(database["status"], "ERROR")
|
|
||||||
self.assertEqual(
|
|
||||||
database["migration_status"],
|
|
||||||
{"latest_migration": None, "unapplied_migrations": []},
|
|
||||||
)
|
|
||||||
@@ -169,7 +169,7 @@ class TestBarcode(
|
|||||||
- No barcodes detected
|
- No barcodes detected
|
||||||
- No pages to split on
|
- No pages to split on
|
||||||
"""
|
"""
|
||||||
test_file = self.SAMPLE_DIR / "simple.pdf"
|
test_file = self.SIMPLE_PDF
|
||||||
with self.get_reader(test_file) as reader:
|
with self.get_reader(test_file) as reader:
|
||||||
reader.detect()
|
reader.detect()
|
||||||
separator_page_numbers = reader.get_separation_pages()
|
separator_page_numbers = reader.get_separation_pages()
|
||||||
@@ -461,7 +461,7 @@ class TestBarcode(
|
|||||||
THEN:
|
THEN:
|
||||||
- Nothing happens
|
- Nothing happens
|
||||||
"""
|
"""
|
||||||
test_file = self.SAMPLE_DIR / "simple.pdf"
|
test_file = self.SIMPLE_PDF
|
||||||
|
|
||||||
with self.get_reader(test_file) as reader:
|
with self.get_reader(test_file) as reader:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ from documents.permissions import set_permissions_for_objects
|
|||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
from paperless_testing.factories import DocumentFactory
|
from paperless_testing.factories import DocumentFactory
|
||||||
from paperless_testing.permissions import grant_object
|
from paperless_testing.permissions import grant_object
|
||||||
|
from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
from paperless_testing.samples import WITH_FORM_PDF
|
||||||
|
|
||||||
|
|
||||||
class TestBulkEdit(DirectoriesMixin, TestCase):
|
class TestBulkEdit(DirectoriesMixin, TestCase):
|
||||||
@@ -706,47 +709,27 @@ class TestPDFActions(DirectoriesMixin, TestCase):
|
|||||||
super().setUp()
|
super().setUp()
|
||||||
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
SIMPLE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
sample1,
|
sample1,
|
||||||
)
|
)
|
||||||
sample1_archive = self.dirs.archive_dir / "sample_archive.pdf"
|
sample1_archive = self.dirs.archive_dir / "sample_archive.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
SIMPLE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
sample1_archive,
|
sample1_archive,
|
||||||
)
|
)
|
||||||
sample2 = self.dirs.scratch_dir / "sample2.pdf"
|
sample2 = self.dirs.scratch_dir / "sample2.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
MULTI_PAGE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000002.pdf",
|
|
||||||
sample2,
|
sample2,
|
||||||
)
|
)
|
||||||
sample2_archive = self.dirs.archive_dir / "sample2_archive.pdf"
|
sample2_archive = self.dirs.archive_dir / "sample2_archive.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
MULTI_PAGE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000002.pdf",
|
|
||||||
sample2_archive,
|
sample2_archive,
|
||||||
)
|
)
|
||||||
sample3 = self.dirs.scratch_dir / "sample3.pdf"
|
sample3 = self.dirs.scratch_dir / "sample3.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
WITH_FORM_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000003.pdf",
|
|
||||||
sample3,
|
sample3,
|
||||||
)
|
)
|
||||||
self.doc1 = Document.objects.create(
|
self.doc1 = Document.objects.create(
|
||||||
@@ -780,11 +763,7 @@ class TestPDFActions(DirectoriesMixin, TestCase):
|
|||||||
)
|
)
|
||||||
img_doc_archive = self.dirs.archive_dir / "sample_image.pdf"
|
img_doc_archive = self.dirs.archive_dir / "sample_image.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
SIMPLE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
img_doc_archive,
|
img_doc_archive,
|
||||||
)
|
)
|
||||||
self.img_doc = Document.objects.create(
|
self.img_doc = Document.objects.create(
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ from paperless_testing.factories import TagFactory
|
|||||||
from paperless_testing.factories import UserFactory
|
from paperless_testing.factories import UserFactory
|
||||||
from paperless_testing.fakes.progress import FakeProgressManager
|
from paperless_testing.fakes.progress import FakeProgressManager
|
||||||
from paperless_testing.permissions import grant_object
|
from paperless_testing.permissions import grant_object
|
||||||
|
from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF
|
||||||
|
from paperless_testing.samples import MULTI_PAGE_IMAGES_PDF
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
class _BaseNewStyleParser:
|
class _BaseNewStyleParser:
|
||||||
@@ -115,9 +118,7 @@ class _BaseNewStyleParser:
|
|||||||
|
|
||||||
|
|
||||||
class DummyParser(_BaseNewStyleParser):
|
class DummyParser(_BaseNewStyleParser):
|
||||||
_ARCHIVE_SRC = (
|
_ARCHIVE_SRC = MULTI_PAGE_IMAGES_PDF
|
||||||
Path(__file__).parent / "samples" / "documents" / "archive" / "0000001.pdf"
|
|
||||||
)
|
|
||||||
|
|
||||||
def parse(self, document_path, mime_type, *, produce_archive: bool = True) -> None:
|
def parse(self, document_path, mime_type, *, produce_archive: bool = True) -> None:
|
||||||
self._text = "The Text"
|
self._text = "The Text"
|
||||||
@@ -203,33 +204,19 @@ class TestConsumer(
|
|||||||
self.addCleanup(patcher.stop)
|
self.addCleanup(patcher.stop)
|
||||||
|
|
||||||
def get_test_file(self):
|
def get_test_file(self):
|
||||||
src = (
|
src = SIMPLE_DIGITAL_PDF
|
||||||
Path(__file__).parent
|
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf"
|
|
||||||
)
|
|
||||||
dst = self.dirs.scratch_dir / "sample.pdf"
|
dst = self.dirs.scratch_dir / "sample.pdf"
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
return dst
|
return dst
|
||||||
|
|
||||||
def get_test_file2(self):
|
def get_test_file2(self):
|
||||||
src = (
|
src = MULTI_PAGE_DIGITAL_PDF
|
||||||
Path(__file__).parent
|
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000002.pdf"
|
|
||||||
)
|
|
||||||
dst = self.dirs.scratch_dir / "sample2.pdf"
|
dst = self.dirs.scratch_dir / "sample2.pdf"
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
return dst
|
return dst
|
||||||
|
|
||||||
def get_test_archive_file(self):
|
def get_test_archive_file(self):
|
||||||
src = (
|
src = MULTI_PAGE_IMAGES_PDF
|
||||||
Path(__file__).parent / "samples" / "documents" / "archive" / "0000001.pdf"
|
|
||||||
)
|
|
||||||
dst = self.dirs.scratch_dir / "sample_archive.pdf"
|
dst = self.dirs.scratch_dir / "sample_archive.pdf"
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
return dst
|
return dst
|
||||||
@@ -1124,7 +1111,7 @@ class TestConsumer(
|
|||||||
@mock.patch("documents.consumer.get_parser_registry")
|
@mock.patch("documents.consumer.get_parser_registry")
|
||||||
def test_similar_filenames(self, m) -> None:
|
def test_similar_filenames(self, m) -> None:
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent / "samples" / "simple.pdf",
|
SIMPLE_DIGITAL_PDF,
|
||||||
settings.CONSUMPTION_DIR / "simple.pdf",
|
settings.CONSUMPTION_DIR / "simple.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
@@ -1665,13 +1652,7 @@ class TestConsumerRemoteOCR(
|
|||||||
self.addCleanup(patcher.stop)
|
self.addCleanup(patcher.stop)
|
||||||
|
|
||||||
def _consume(self, *, overrides: DocumentMetadataOverrides | None = None) -> bool:
|
def _consume(self, *, overrides: DocumentMetadataOverrides | None = None) -> bool:
|
||||||
src = (
|
src = SIMPLE_DIGITAL_PDF
|
||||||
Path(__file__).parent
|
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf"
|
|
||||||
)
|
|
||||||
dst = self.dirs.scratch_dir / "sample.pdf"
|
dst = self.dirs.scratch_dir / "sample.pdf"
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
|
|
||||||
|
|||||||
@@ -37,12 +37,15 @@ class TestDoubleSided(
|
|||||||
self.double_sided_dir.mkdir()
|
self.double_sided_dir.mkdir()
|
||||||
self.staging_file = self.dirs.scratch_dir / STAGING_FILE_NAME
|
self.staging_file = self.dirs.scratch_dir / STAGING_FILE_NAME
|
||||||
|
|
||||||
|
def _sample(self, name: str) -> Path:
|
||||||
|
return self.SIMPLE_PDF if name == "simple.pdf" else self.SAMPLE_DIR / name
|
||||||
|
|
||||||
def consume_file(self, srcname, dstname: str | Path = "foo.pdf"):
|
def consume_file(self, srcname, dstname: str | Path = "foo.pdf"):
|
||||||
"""
|
"""
|
||||||
Starts the consume process and also ensures the
|
Starts the consume process and also ensures the
|
||||||
destination file does not exist afterwards
|
destination file does not exist afterwards
|
||||||
"""
|
"""
|
||||||
src = self.SAMPLE_DIR / srcname
|
src = self._sample(srcname)
|
||||||
dst = self.double_sided_dir / dstname
|
dst = self.double_sided_dir / dstname
|
||||||
dst.parent.mkdir(parents=True, exist_ok=True)
|
dst.parent.mkdir(parents=True, exist_ok=True)
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
@@ -57,7 +60,7 @@ class TestDoubleSided(
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
def create_staging_file(self, src="double-sided-odd.pdf", datetime=None) -> None:
|
def create_staging_file(self, src="double-sided-odd.pdf", datetime=None) -> None:
|
||||||
shutil.copy(self.SAMPLE_DIR / src, self.staging_file)
|
shutil.copy(self._sample(src), self.staging_file)
|
||||||
if datetime is None:
|
if datetime is None:
|
||||||
datetime = dt.datetime.now()
|
datetime = dt.datetime.now()
|
||||||
os.utime(str(self.staging_file), (datetime.timestamp(),) * 2)
|
os.utime(str(self.staging_file), (datetime.timestamp(),) * 2)
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ from documents.serialisers import DocumentSerializer
|
|||||||
from documents.tasks import empty_trash
|
from documents.tasks import empty_trash
|
||||||
from paperless_testing.assertions import FileSystemAssertsMixin
|
from paperless_testing.assertions import FileSystemAssertsMixin
|
||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
from paperless_testing.dirs import PaperlessDirs
|
|
||||||
from paperless_testing.factories import DocumentFactory
|
from paperless_testing.factories import DocumentFactory
|
||||||
from paperless_testing.factories import UserFactory
|
from paperless_testing.factories import UserFactory
|
||||||
|
|
||||||
@@ -2135,28 +2134,3 @@ class TestPathDateLocalization:
|
|||||||
with override_settings(FILENAME_FORMAT=filename_format):
|
with override_settings(FILENAME_FORMAT=filename_format):
|
||||||
filename = generate_filename(document)
|
filename = generate_filename(document)
|
||||||
assert filename == Path(expected_filename)
|
assert filename == Path(expected_filename)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_refresh_failure_surfaces_database_error(
|
|
||||||
paperless_dirs: PaperlessDirs,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A document with a stored filename
|
|
||||||
WHEN:
|
|
||||||
- Saving it triggers a filename update and refreshing it from the database fails
|
|
||||||
THEN:
|
|
||||||
- The database error is raised, not an unbound variable error from the rollback
|
|
||||||
"""
|
|
||||||
document = DocumentFactory(filename="some.pdf")
|
|
||||||
|
|
||||||
with (
|
|
||||||
mock.patch.object(
|
|
||||||
Document,
|
|
||||||
"refresh_from_db",
|
|
||||||
side_effect=DatabaseError("database is locked"),
|
|
||||||
),
|
|
||||||
pytest.raises(DatabaseError, match="database is locked"),
|
|
||||||
):
|
|
||||||
document.save()
|
|
||||||
@@ -4,7 +4,6 @@ from typing import Literal
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from documents.templating.filters import format_datetime
|
|
||||||
from documents.templating.filters import localize_date
|
from documents.templating.filters import localize_date
|
||||||
|
|
||||||
|
|
||||||
@@ -295,23 +294,3 @@ class TestDateLocalization:
|
|||||||
Tests `localize_date` with `date` string across different locales and formats.
|
Tests `localize_date` with `date` string across different locales and formats.
|
||||||
"""
|
"""
|
||||||
assert localize_date(value, format_style, locale_str) == expected_output
|
assert localize_date(value, format_style, locale_str) == expected_output
|
||||||
|
|
||||||
|
|
||||||
class TestFormatDatetime:
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("value", "expected"),
|
|
||||||
[
|
|
||||||
pytest.param("2026-09-21", "2026-09-21 00:00", id="date"),
|
|
||||||
pytest.param(
|
|
||||||
"2026-09-21T13:45:00+00:00",
|
|
||||||
"2026-09-21 13:45",
|
|
||||||
id="datetime",
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_parses_iso_strings(self, value: str, expected: str) -> None:
|
|
||||||
assert format_datetime(value, "%Y-%m-%d %H:%M") == expected
|
|
||||||
|
|
||||||
def test_rejects_unparseable_string(self) -> None:
|
|
||||||
with pytest.raises(ValueError, match="not a date"):
|
|
||||||
format_datetime("not a date", "%Y")
|
|
||||||
@@ -23,8 +23,9 @@ from documents.tasks import update_document_content_maybe_archive_file
|
|||||||
from paperless_testing.assertions import FileSystemAssertsMixin
|
from paperless_testing.assertions import FileSystemAssertsMixin
|
||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
from paperless_testing.factories import DocumentFactory
|
from paperless_testing.factories import DocumentFactory
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
sample_file: Path = Path(__file__).parent / "samples" / "simple.pdf"
|
sample_file: Path = SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.management
|
@pytest.mark.management
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ from paperless_testing.dirs import paperless_environment
|
|||||||
from paperless_testing.factories import DocumentBarcodeFactory
|
from paperless_testing.factories import DocumentBarcodeFactory
|
||||||
from paperless_testing.factories import DocumentFactory
|
from paperless_testing.factories import DocumentFactory
|
||||||
from paperless_testing.permissions import grant_object
|
from paperless_testing.permissions import grant_object
|
||||||
|
from paperless_testing.samples import install_document_samples
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.management
|
@pytest.mark.management
|
||||||
@@ -204,10 +205,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_exporter(self, *, use_filename_format=False) -> None:
|
def test_exporter(self, *, use_filename_format=False) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
num_permission_objects = Permission.objects.count()
|
num_permission_objects = Permission.objects.count()
|
||||||
|
|
||||||
@@ -311,10 +309,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_exporter_with_filename_format(self) -> None:
|
def test_exporter_with_filename_format(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
with override_settings(
|
with override_settings(
|
||||||
FILENAME_FORMAT="{created_year}/{correspondent}/{title}",
|
FILENAME_FORMAT="{created_year}/{correspondent}/{title}",
|
||||||
@@ -323,10 +318,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_exporter_includes_share_links_and_bundles(self) -> None:
|
def test_exporter_includes_share_links_and_bundles(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
share_link = ShareLink.objects.create(
|
share_link = ShareLink.objects.create(
|
||||||
slug="share-link-slug",
|
slug="share-link-slug",
|
||||||
@@ -425,10 +417,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_update_export_changed_time(self) -> None:
|
def test_update_export_changed_time(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
self._do_export()
|
self._do_export()
|
||||||
self.assertIsFile(self.target / "manifest.json")
|
self.assertIsFile(self.target / "manifest.json")
|
||||||
@@ -464,10 +453,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_update_export_changed_checksum(self) -> None:
|
def test_update_export_changed_checksum(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
self._do_export()
|
self._do_export()
|
||||||
|
|
||||||
@@ -494,10 +480,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_update_export_deleted_document(self) -> None:
|
def test_update_export_deleted_document(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
manifest = self._do_export()
|
manifest = self._do_export()
|
||||||
|
|
||||||
@@ -529,10 +512,7 @@ class TestExportImport(
|
|||||||
@override_settings(FILENAME_FORMAT="{title}/{correspondent}")
|
@override_settings(FILENAME_FORMAT="{title}/{correspondent}")
|
||||||
def test_update_export_changed_location(self) -> None:
|
def test_update_export_changed_location(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
self._do_export(use_filename_format=True)
|
self._do_export(use_filename_format=True)
|
||||||
self.assertIsFile(self.target / "wow1" / "c.pdf")
|
self.assertIsFile(self.target / "wow1" / "c.pdf")
|
||||||
@@ -574,10 +554,7 @@ class TestExportImport(
|
|||||||
- Zipfile contains exported files
|
- Zipfile contains exported files
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
args = ["document_exporter", self.target, "--zip"]
|
args = ["document_exporter", self.target, "--zip"]
|
||||||
|
|
||||||
@@ -606,10 +583,7 @@ class TestExportImport(
|
|||||||
- Zipfile contains exported files
|
- Zipfile contains exported files
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
args = ["document_exporter", self.target, "--zip", "--use-filename-format"]
|
args = ["document_exporter", self.target, "--zip", "--use-filename-format"]
|
||||||
|
|
||||||
@@ -645,10 +619,7 @@ class TestExportImport(
|
|||||||
- The existing file and directory in target are removed
|
- The existing file and directory in target are removed
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
# Create stuff in target directory
|
# Create stuff in target directory
|
||||||
existing_file = self.target / "test.txt"
|
existing_file = self.target / "test.txt"
|
||||||
@@ -744,10 +715,7 @@ class TestExportImport(
|
|||||||
- Documents can be imported again
|
- Documents can be imported again
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
manifest = self._do_export()
|
manifest = self._do_export()
|
||||||
has_archive = False
|
has_archive = False
|
||||||
@@ -790,10 +758,7 @@ class TestExportImport(
|
|||||||
- Documents can be imported again
|
- Documents can be imported again
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
manifest = self._do_export()
|
manifest = self._do_export()
|
||||||
has_thumbnail = False
|
has_thumbnail = False
|
||||||
@@ -838,10 +803,7 @@ class TestExportImport(
|
|||||||
- Documents can be imported again
|
- Documents can be imported again
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
manifest = self._do_export(split_manifest=True)
|
manifest = self._do_export(split_manifest=True)
|
||||||
has_document = False
|
has_document = False
|
||||||
@@ -866,10 +828,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def _export_import_barcodes(self, *, split_manifest: bool) -> None:
|
def _export_import_barcodes(self, *, split_manifest: bool) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
DocumentBarcodeFactory(document=self.d1, value="https://example.com")
|
DocumentBarcodeFactory(document=self.d1, value="https://example.com")
|
||||||
DocumentBarcodeFactory(document=self.d2, page=2, value="DE8937")
|
DocumentBarcodeFactory(document=self.d2, page=2, value="DE8937")
|
||||||
|
|
||||||
@@ -905,10 +864,7 @@ class TestExportImport(
|
|||||||
- Documents can be imported again
|
- Documents can be imported again
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
self._do_export(use_folder_prefix=True)
|
self._do_export(use_folder_prefix=True)
|
||||||
|
|
||||||
@@ -935,10 +891,7 @@ class TestExportImport(
|
|||||||
- Documents can be imported again
|
- Documents can be imported again
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
self._do_export(use_folder_prefix=True, split_manifest=True)
|
self._do_export(use_folder_prefix=True, split_manifest=True)
|
||||||
|
|
||||||
@@ -965,10 +918,7 @@ class TestExportImport(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
num_content_type_objects = ContentType.objects.count()
|
num_content_type_objects = ContentType.objects.count()
|
||||||
num_permission_objects = Permission.objects.count()
|
num_permission_objects = Permission.objects.count()
|
||||||
@@ -1005,10 +955,7 @@ class TestExportImport(
|
|||||||
|
|
||||||
def test_exporter_with_auditlog_disabled(self) -> None:
|
def test_exporter_with_auditlog_disabled(self) -> None:
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
with override_settings(
|
with override_settings(
|
||||||
AUDIT_LOG_ENABLED=False,
|
AUDIT_LOG_ENABLED=False,
|
||||||
@@ -1028,10 +975,7 @@ class TestExportImport(
|
|||||||
survive the round-trip with deleted_at preserved
|
survive the round-trip with deleted_at preserved
|
||||||
"""
|
"""
|
||||||
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
shutil.rmtree(Path(self.dirs.media_dir) / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(Path(self.dirs.media_dir) / "documents")
|
||||||
Path(__file__).parent / "samples" / "documents",
|
|
||||||
Path(self.dirs.media_dir) / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
# d1 has self.note and self.cfi1 attached via setUp
|
# d1 has self.note and self.cfi1 attached via setUp
|
||||||
self.d1.delete()
|
self.d1.delete()
|
||||||
@@ -1075,10 +1019,7 @@ class TestExportImport(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
shutil.rmtree(self.dirs.media_dir / "documents")
|
shutil.rmtree(self.dirs.media_dir / "documents")
|
||||||
shutil.copytree(
|
install_document_samples(self.dirs.media_dir / "documents")
|
||||||
self.SAMPLE_DIR / "documents",
|
|
||||||
self.dirs.media_dir / "documents",
|
|
||||||
)
|
|
||||||
|
|
||||||
_ = self._do_export(data_only=True)
|
_ = self._do_export(data_only=True)
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from documents.models import Document
|
|||||||
from documents.parsers import get_default_thumbnail
|
from documents.parsers import get_default_thumbnail
|
||||||
from paperless_testing.assertions import FileSystemAssertsMixin
|
from paperless_testing.assertions import FileSystemAssertsMixin
|
||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.management
|
@pytest.mark.management
|
||||||
@@ -24,7 +25,7 @@ class TestMakeThumbnails(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
filename="test.pdf",
|
filename="test.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent / "samples" / "simple.pdf",
|
SIMPLE_DIGITAL_PDF,
|
||||||
self.d1.source_path,
|
self.d1.source_path,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ class TestMakeThumbnails(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
filename="test2.pdf",
|
filename="test2.pdf",
|
||||||
)
|
)
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent / "samples" / "simple.pdf",
|
SIMPLE_DIGITAL_PDF,
|
||||||
self.d2.source_path,
|
self.d2.source_path,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,11 @@ import pytest
|
|||||||
|
|
||||||
from documents import pdf_ops
|
from documents import pdf_ops
|
||||||
from documents.pdf_ops import PageSpec
|
from documents.pdf_ops import PageSpec
|
||||||
|
from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF
|
||||||
|
|
||||||
SRC_ROOT = Path(__file__).parents[2]
|
SRC_ROOT = Path(__file__).parents[2]
|
||||||
SAMPLES = Path(__file__).parent / "samples"
|
SAMPLES = Path(__file__).parent / "samples"
|
||||||
THREE_PAGES = SAMPLES / "documents" / "originals" / "0000002.pdf"
|
THREE_PAGES = MULTI_PAGE_DIGITAL_PDF
|
||||||
TWELVE_PAGES = SAMPLES / "barcodes" / "split-by-asn-2.pdf"
|
TWELVE_PAGES = SAMPLES / "barcodes" / "split-by-asn-2.pdf"
|
||||||
ENCRYPTED = SAMPLES / "password-is-test.pdf"
|
ENCRYPTED = SAMPLES / "password-is-test.pdf"
|
||||||
SIGNED = SRC_ROOT / "paperless" / "tests" / "samples" / "tesseract" / "signed.pdf"
|
SIGNED = SRC_ROOT / "paperless" / "tests" / "samples" / "tesseract" / "signed.pdf"
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from documents.tests.helpers import dummy_preprocess
|
|||||||
from paperless_testing.assertions import FileSystemAssertsMixin
|
from paperless_testing.assertions import FileSystemAssertsMixin
|
||||||
from paperless_testing.dirs import DirectoriesMixin
|
from paperless_testing.dirs import DirectoriesMixin
|
||||||
from paperless_testing.factories import DocumentFactory
|
from paperless_testing.factories import DocumentFactory
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@@ -229,20 +230,12 @@ class TestUpdateContent(DirectoriesMixin, TestCase):
|
|||||||
"""
|
"""
|
||||||
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
SIMPLE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
sample1,
|
sample1,
|
||||||
)
|
)
|
||||||
sample1_archive = self.dirs.archive_dir / "sample_archive.pdf"
|
sample1_archive = self.dirs.archive_dir / "sample_archive.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
SIMPLE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
sample1_archive,
|
sample1_archive,
|
||||||
)
|
)
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@@ -270,11 +263,7 @@ class TestUpdateContent(DirectoriesMixin, TestCase):
|
|||||||
"""
|
"""
|
||||||
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
Path(__file__).parent
|
SIMPLE_DIGITAL_PDF,
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
sample1,
|
sample1,
|
||||||
)
|
)
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@@ -290,14 +279,7 @@ class TestUpdateContent(DirectoriesMixin, TestCase):
|
|||||||
|
|
||||||
def _create_root_with_version(self) -> tuple[Document, Document]:
|
def _create_root_with_version(self) -> tuple[Document, Document]:
|
||||||
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
sample1 = self.dirs.scratch_dir / "sample.pdf"
|
||||||
shutil.copy(
|
shutil.copy(SIMPLE_DIGITAL_PDF, sample1)
|
||||||
Path(__file__).parent
|
|
||||||
/ "samples"
|
|
||||||
/ "documents"
|
|
||||||
/ "originals"
|
|
||||||
/ "0000001.pdf",
|
|
||||||
sample1,
|
|
||||||
)
|
|
||||||
root = DocumentFactory(content="root content", mime_type="application/pdf")
|
root = DocumentFactory(content="root content", mime_type="application/pdf")
|
||||||
version = DocumentFactory(
|
version = DocumentFactory(
|
||||||
content="my document",
|
content="my document",
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ class TestWorkflows(
|
|||||||
self.assertEqual(action.__str__(), "WorkflowAction 1")
|
self.assertEqual(action.__str__(), "WorkflowAction 1")
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -290,7 +290,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ class TestWorkflows(
|
|||||||
w2.save()
|
w2.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -478,7 +478,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -531,7 +531,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -608,7 +608,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -687,7 +687,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -765,7 +765,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -876,7 +876,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -928,7 +928,7 @@ class TestWorkflows(
|
|||||||
generated = generate_unique_filename(doc)
|
generated = generate_unique_filename(doc)
|
||||||
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
||||||
create_source_path_directory(destination)
|
create_source_path_directory(destination)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination)
|
shutil.copy(self.SIMPLE_PDF, destination)
|
||||||
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
||||||
doc.refresh_from_db()
|
doc.refresh_from_db()
|
||||||
|
|
||||||
@@ -2067,7 +2067,7 @@ class TestWorkflows(
|
|||||||
superuser = UserFactory(username="superuser", superuser=True)
|
superuser = UserFactory(username="superuser", superuser=True)
|
||||||
self.client.force_authenticate(user=superuser)
|
self.client.force_authenticate(user=superuser)
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
tasks.consume_file(
|
tasks.consume_file(
|
||||||
@@ -3053,7 +3053,7 @@ class TestWorkflows(
|
|||||||
generated = generate_unique_filename(doc)
|
generated = generate_unique_filename(doc)
|
||||||
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
||||||
create_source_path_directory(destination)
|
create_source_path_directory(destination)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination)
|
shutil.copy(self.SIMPLE_PDF, destination)
|
||||||
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
||||||
doc.refresh_from_db()
|
doc.refresh_from_db()
|
||||||
doc.tags.set([self.t1, self.t2])
|
doc.tags.set([self.t1, self.t2])
|
||||||
@@ -3117,7 +3117,7 @@ class TestWorkflows(
|
|||||||
generated = generate_unique_filename(doc)
|
generated = generate_unique_filename(doc)
|
||||||
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
||||||
create_source_path_directory(destination)
|
create_source_path_directory(destination)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination)
|
shutil.copy(self.SIMPLE_PDF, destination)
|
||||||
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
||||||
doc.refresh_from_db()
|
doc.refresh_from_db()
|
||||||
doc.tags.set([self.t1])
|
doc.tags.set([self.t1])
|
||||||
@@ -3266,7 +3266,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -3390,7 +3390,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -3540,7 +3540,7 @@ class TestWorkflows(
|
|||||||
workflow.actions.set([assignment_action, email_action])
|
workflow.actions.set([assignment_action, email_action])
|
||||||
|
|
||||||
temp_working_copy = shutil.copy(
|
temp_working_copy = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "working-copy.pdf",
|
self.dirs.scratch_dir / "working-copy.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -3640,7 +3640,7 @@ class TestWorkflows(
|
|||||||
|
|
||||||
# move the file
|
# move the file
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -3748,7 +3748,7 @@ class TestWorkflows(
|
|||||||
generated = generate_unique_filename(doc)
|
generated = generate_unique_filename(doc)
|
||||||
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
destination = (settings.ORIGINALS_DIR / generated).resolve()
|
||||||
create_source_path_directory(destination)
|
create_source_path_directory(destination)
|
||||||
shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination)
|
shutil.copy(self.SIMPLE_PDF, destination)
|
||||||
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix())
|
||||||
|
|
||||||
run_workflows(WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED, doc)
|
run_workflows(WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED, doc)
|
||||||
@@ -3959,7 +3959,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -4080,7 +4080,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -4431,7 +4431,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -4879,7 +4879,7 @@ class TestWorkflows(
|
|||||||
w.save()
|
w.save()
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -5071,7 +5071,7 @@ class TestWorkflows(
|
|||||||
|
|
||||||
# Create a test file to be consumed
|
# Create a test file to be consumed
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
test_file_path = Path(test_file)
|
test_file_path = Path(test_file)
|
||||||
@@ -5135,7 +5135,7 @@ class TestWorkflows(
|
|||||||
|
|
||||||
# Create a test file to be consumed
|
# Create a test file to be consumed
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple2.pdf",
|
self.dirs.scratch_dir / "simple2.pdf",
|
||||||
)
|
)
|
||||||
test_file_path = Path(test_file)
|
test_file_path = Path(test_file)
|
||||||
@@ -5639,7 +5639,7 @@ class TestDateWorkflowLocalization(
|
|||||||
)
|
)
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
tmp_path / "simple.pdf",
|
tmp_path / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -5706,7 +5706,7 @@ class TestRemoteOCRWorkflowAction(DirectoriesMixin, SampleDirMixin, APITestCase)
|
|||||||
self._make_workflow(WorkflowTrigger.WorkflowTriggerType.CONSUMPTION)
|
self._make_workflow(WorkflowTrigger.WorkflowTriggerType.CONSUMPTION)
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
overrides = DocumentMetadataOverrides()
|
overrides = DocumentMetadataOverrides()
|
||||||
@@ -5924,7 +5924,7 @@ class TestApplyAISuggestionsWorkflowAction(
|
|||||||
)
|
)
|
||||||
|
|
||||||
test_file = shutil.copy(
|
test_file = shutil.copy(
|
||||||
self.SAMPLE_DIR / "simple.pdf",
|
self.SIMPLE_PDF,
|
||||||
self.dirs.scratch_dir / "simple.pdf",
|
self.dirs.scratch_dir / "simple.pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from documents.data_models import ConsumableDocument
|
|||||||
from documents.data_models import DocumentMetadataOverrides
|
from documents.data_models import DocumentMetadataOverrides
|
||||||
from documents.data_models import DocumentSource
|
from documents.data_models import DocumentSource
|
||||||
from paperless_testing.fakes.progress import FakeProgressManager
|
from paperless_testing.fakes.progress import FakeProgressManager
|
||||||
|
from paperless_testing.samples import SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
class ConsumeTaskMixin:
|
class ConsumeTaskMixin:
|
||||||
@@ -53,6 +54,8 @@ class SampleDirMixin:
|
|||||||
|
|
||||||
BARCODE_SAMPLE_DIR = SAMPLE_DIR / "barcodes"
|
BARCODE_SAMPLE_DIR = SAMPLE_DIR / "barcodes"
|
||||||
|
|
||||||
|
SIMPLE_PDF = SIMPLE_DIGITAL_PDF
|
||||||
|
|
||||||
|
|
||||||
class GetConsumerMixin:
|
class GetConsumerMixin:
|
||||||
@contextmanager
|
@contextmanager
|
||||||
|
|||||||
+56
-73
@@ -168,7 +168,6 @@ from documents.permissions import PaperlessNotePermissions
|
|||||||
from documents.permissions import PaperlessObjectPermissions
|
from documents.permissions import PaperlessObjectPermissions
|
||||||
from documents.permissions import TrashPermissions
|
from documents.permissions import TrashPermissions
|
||||||
from documents.permissions import ViewDocumentsPermissions
|
from documents.permissions import ViewDocumentsPermissions
|
||||||
from documents.permissions import annotate_document_count_by_ids
|
|
||||||
from documents.permissions import annotate_document_count_for_related_queryset
|
from documents.permissions import annotate_document_count_for_related_queryset
|
||||||
from documents.permissions import get_document_count_filter_for_user
|
from documents.permissions import get_document_count_filter_for_user
|
||||||
from documents.permissions import get_permission_grantees
|
from documents.permissions import get_permission_grantees
|
||||||
@@ -1023,70 +1022,61 @@ class DocumentViewSet(
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _get_selection_data_for_queryset(self, queryset):
|
def _get_selection_data_for_queryset(self, queryset):
|
||||||
# Resolve once instead of once per model below. `queryset` can carry an
|
# The filtered queryset (user filters plus the permission filter) is
|
||||||
# arbitrarily expensive WHERE clause (user filters plus the permission
|
# kept as SQL and handed to the database, never resolved to a Python id
|
||||||
# filter); re-embedding it as a subquery inside 5 separate Count(...)
|
# list: at hundreds of thousands of documents that list becomes a
|
||||||
# calls forces the database to re-evaluate that whole thing 5 times, and
|
# multi-MB IN (...) clause per statement, which is slow to plan and, on
|
||||||
# -- for FK relations especially -- can defeat semi-join planning
|
# SQLite, exceeds the bound-parameter limit outright. Each relation
|
||||||
# entirely at scale. A concrete id list is cheap to reuse.
|
# instead gets one GROUP BY with the filter as a plain WHERE
|
||||||
# order_by() drops the default/user ordering -- irrelevant for a plain
|
# (foreign keys) or a semi-join subquery (link tables).
|
||||||
# id list, but left in place it forces a sort over the full filtered
|
# order_by() drops the default/user ordering, which is irrelevant for
|
||||||
# set before the ids can even be collected.
|
# counting and would otherwise force a sort.
|
||||||
document_ids = list(queryset.order_by().values_list("pk", flat=True))
|
documents = queryset.order_by()
|
||||||
|
document_ids = documents.values("pk")
|
||||||
|
|
||||||
|
def foreign_key_counts(field_name: str) -> dict[int, int]:
|
||||||
|
# distinct: filters can join (and so repeat) a document row.
|
||||||
|
return dict(
|
||||||
|
documents.filter(**{f"{field_name}__isnull": False})
|
||||||
|
.values_list(field_name)
|
||||||
|
.annotate(document_count=Count("pk", distinct=True)),
|
||||||
|
)
|
||||||
|
|
||||||
|
def link_table_counts(link_model, field_name: str) -> dict[int, int]:
|
||||||
|
return dict(
|
||||||
|
link_model.objects.filter(document_id__in=document_ids)
|
||||||
|
.values_list(field_name)
|
||||||
|
.annotate(document_count=Count("document_id")),
|
||||||
|
)
|
||||||
|
|
||||||
|
def selection(model, counts: dict[int, int]) -> list[dict[str, int]]:
|
||||||
|
# Every object is listed, with 0 for those with no matching document.
|
||||||
|
return [
|
||||||
|
{"id": pk, "document_count": counts.get(pk, 0)}
|
||||||
|
for pk in model.objects.values_list("pk", flat=True)
|
||||||
|
]
|
||||||
|
|
||||||
correspondents = Correspondent.objects.annotate(
|
|
||||||
document_count=Count(
|
|
||||||
"documents",
|
|
||||||
filter=Q(documents__id__in=document_ids),
|
|
||||||
distinct=True,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
document_types = DocumentType.objects.annotate(
|
|
||||||
document_count=Count(
|
|
||||||
"documents",
|
|
||||||
filter=Q(documents__id__in=document_ids),
|
|
||||||
distinct=True,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
storage_paths = StoragePath.objects.annotate(
|
|
||||||
document_count=Count(
|
|
||||||
"documents",
|
|
||||||
filter=Q(documents__id__in=document_ids),
|
|
||||||
distinct=True,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
# Tag and CustomField reach Document through an M2M/through-model table;
|
|
||||||
# a plain Count(filter=...) there is a much more expensive plan than the
|
|
||||||
# FK relations above once the bridge table is large -- see
|
|
||||||
# annotate_document_count_by_ids() for why.
|
|
||||||
tags = annotate_document_count_by_ids(
|
|
||||||
Tag.objects.all(),
|
|
||||||
through_model=Document.tags.through,
|
|
||||||
related_object_field="tag_id",
|
|
||||||
document_ids=document_ids,
|
|
||||||
)
|
|
||||||
custom_fields = annotate_document_count_by_ids(
|
|
||||||
CustomField.objects.all(),
|
|
||||||
through_model=CustomFieldInstance,
|
|
||||||
related_object_field="field_id",
|
|
||||||
document_ids=document_ids,
|
|
||||||
)
|
|
||||||
return {
|
return {
|
||||||
"selected_correspondents": [
|
"selected_correspondents": selection(
|
||||||
{"id": t.id, "document_count": t.document_count} for t in correspondents
|
Correspondent,
|
||||||
],
|
foreign_key_counts("correspondent_id"),
|
||||||
"selected_tags": [
|
),
|
||||||
{"id": t.id, "document_count": t.document_count} for t in tags
|
"selected_tags": selection(
|
||||||
],
|
Tag,
|
||||||
"selected_document_types": [
|
link_table_counts(Document.tags.through, "tag_id"),
|
||||||
{"id": t.id, "document_count": t.document_count} for t in document_types
|
),
|
||||||
],
|
"selected_document_types": selection(
|
||||||
"selected_storage_paths": [
|
DocumentType,
|
||||||
{"id": t.id, "document_count": t.document_count} for t in storage_paths
|
foreign_key_counts("document_type_id"),
|
||||||
],
|
),
|
||||||
"selected_custom_fields": [
|
"selected_storage_paths": selection(
|
||||||
{"id": t.id, "document_count": t.document_count} for t in custom_fields
|
StoragePath,
|
||||||
],
|
foreign_key_counts("storage_path_id"),
|
||||||
|
),
|
||||||
|
"selected_custom_fields": selection(
|
||||||
|
CustomField,
|
||||||
|
link_table_counts(CustomFieldInstance, "field_id"),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -5267,9 +5257,7 @@ class CustomFieldViewSet(PermissionsAwareDocumentCountMixin, ModelViewSet[Custom
|
|||||||
"migration_status": inline_serializer(
|
"migration_status": inline_serializer(
|
||||||
name="MigrationStatus",
|
name="MigrationStatus",
|
||||||
fields={
|
fields={
|
||||||
"latest_migration": serializers.CharField(
|
"latest_migration": serializers.CharField(),
|
||||||
allow_null=True,
|
|
||||||
),
|
|
||||||
"unapplied_migrations": serializers.ListSerializer(
|
"unapplied_migrations": serializers.ListSerializer(
|
||||||
child=serializers.CharField(),
|
child=serializers.CharField(),
|
||||||
),
|
),
|
||||||
@@ -5344,8 +5332,6 @@ class SystemStatusView(PassUserMixin):
|
|||||||
db_conn = connections["default"]
|
db_conn = connections["default"]
|
||||||
db_url = str(db_conn.settings_dict["NAME"])
|
db_url = str(db_conn.settings_dict["NAME"])
|
||||||
db_error = None
|
db_error = None
|
||||||
all_migrations: list[str] = []
|
|
||||||
applied_migrations: list[str] = []
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
db_conn.ensure_connection()
|
db_conn.ensure_connection()
|
||||||
@@ -5356,8 +5342,7 @@ class SystemStatusView(PassUserMixin):
|
|||||||
f"{m.app}.{m.name}"
|
f"{m.app}.{m.name}"
|
||||||
for m in MigrationRecorder.Migration.objects.all().order_by("id")
|
for m in MigrationRecorder.Migration.objects.all().order_by("id")
|
||||||
]
|
]
|
||||||
except Exception as e:
|
except Exception as e: # pragma: no cover
|
||||||
all_migrations = []
|
|
||||||
applied_migrations = []
|
applied_migrations = []
|
||||||
db_status = "ERROR"
|
db_status = "ERROR"
|
||||||
logger.exception(
|
logger.exception(
|
||||||
@@ -5553,9 +5538,7 @@ class SystemStatusView(PassUserMixin):
|
|||||||
"status": db_status,
|
"status": db_status,
|
||||||
"error": db_error,
|
"error": db_error,
|
||||||
"migration_status": {
|
"migration_status": {
|
||||||
"latest_migration": (
|
"latest_migration": applied_migrations[-1],
|
||||||
applied_migrations[-1] if applied_migrations else None
|
|
||||||
),
|
|
||||||
"unapplied_migrations": [
|
"unapplied_migrations": [
|
||||||
m for m in all_migrations if m not in applied_migrations
|
m for m in all_migrations if m not in applied_migrations
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Afrikaans\n"
|
"Language-Team: Afrikaans\n"
|
||||||
"Language: af_ZA\n"
|
"Language: af_ZA\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Dokumente"
|
msgstr "Dokumente"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Waarde moet geldige JSON wees."
|
msgstr "Waarde moet geldige JSON wees."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Ongeldige gepasmaakte veldnavraaguitdrukking"
|
msgstr "Ongeldige gepasmaakte veldnavraaguitdrukking"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Ongeldige uitdrukking lys. Moet nie leeg wees nie."
|
msgstr "Ongeldige uitdrukking lys. Moet nie leeg wees nie."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Ongeldige logiese uitdrukking {op!r}"
|
msgstr "Ongeldige logiese uitdrukking {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr ""
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ongeldige kleur."
|
msgstr "Ongeldige kleur."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Lêertipe %(type)s word nie ondersteun nie"
|
msgstr "Lêertipe %(type)s word nie ondersteun nie"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ongeldige veranderlike bespeur."
|
msgstr "Ongeldige veranderlike bespeur."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1920,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2241,151 +2245,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Engels (VS)"
|
msgstr "Engels (VS)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Arabies"
|
msgstr "Arabies"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Belorussies"
|
msgstr "Belorussies"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Katalaans"
|
msgstr "Katalaans"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Tsjeggies"
|
msgstr "Tsjeggies"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Deens"
|
msgstr "Deens"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Duits"
|
msgstr "Duits"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Engels (GB)"
|
msgstr "Engels (GB)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Spaans"
|
msgstr "Spaans"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Fins"
|
msgstr "Fins"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Frans"
|
msgstr "Frans"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italiaans"
|
msgstr "Italiaans"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Luxemburgs"
|
msgstr "Luxemburgs"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Nederlands"
|
msgstr "Nederlands"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Pools"
|
msgstr "Pools"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portugees (Brasilië)"
|
msgstr "Portugees (Brasilië)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portugees"
|
msgstr "Portugees"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Roemeens"
|
msgstr "Roemeens"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Russies"
|
msgstr "Russies"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Sloweens"
|
msgstr "Sloweens"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Serwies"
|
msgstr "Serwies"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Sweeds"
|
msgstr "Sweeds"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Turks"
|
msgstr "Turks"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Vereenvoudigde Sjinees"
|
msgstr "Vereenvoudigde Sjinees"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Amharic\n"
|
"Language-Team: Amharic\n"
|
||||||
"Language: am_ET\n"
|
"Language: am_ET\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "መዝገባት"
|
msgstr "መዝገባት"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "የሚሰራው እሴት \"JSON\" መሆን አለበት"
|
msgstr "የሚሰራው እሴት \"JSON\" መሆን አለበት"
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "ልክ ያልሆነ የተወሰነ የቦታ መጠይቅ አገላለጽ"
|
msgstr "ልክ ያልሆነ የተወሰነ የቦታ መጠይቅ አገላለጽ"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "ልክ ያልሆነ የመግለጫ ዝርዝር። ባዶ መሆን የለበትም።"
|
msgstr "ልክ ያልሆነ የመግለጫ ዝርዝር። ባዶ መሆን የለበትም።"
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "ልክ ያልሆነ የሎጂክ ኦፕሬተር {op!r}"
|
msgstr "ልክ ያልሆነ የሎጂክ ኦፕሬተር {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "ከፍተኛው የጥያቄ ሁኔታዎች/መጠን ብዛት አልፏል።"
|
msgstr "ከፍተኛው የጥያቄ ሁኔታዎች/መጠን ብዛት አልፏል።"
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} ይሄ ታዐማኒነት ያለው ልማድ አይደለም።"
|
msgstr "{name!r} ይሄ ታዐማኒነት ያለው ልማድ አይደለም።"
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "ጥያቄን አይደግፍም expr {expr!r}."
|
msgstr "ጥያቄን አይደግፍም expr {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "ከፍተኛው የጥገኝነት ጥልቀት አልፏል።"
|
msgstr "ከፍተኛው የጥገኝነት ጥልቀት አልፏል።"
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "ይህ ልማድ አልተገኘም"
|
msgstr "ይህ ልማድ አልተገኘም"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr ""
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1920,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2241,151 +2245,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Arabic\n"
|
"Language-Team: Arabic\n"
|
||||||
"Language: ar_SA\n"
|
"Language: ar_SA\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "المستندات"
|
msgstr "المستندات"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "يجب أن تكون القيمة JSON."
|
msgstr "يجب أن تكون القيمة JSON."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "تعبير استعلام غير صالح للحقول المخصصة"
|
msgstr "تعبير استعلام غير صالح للحقول المخصصة"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "قائمة عبارة خاطئة."
|
msgstr "قائمة عبارة خاطئة."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "تجاوز الحد الأقصى لعدد شروط الاستعلام."
|
msgstr "تجاوز الحد الأقصى لعدد شروط الاستعلام."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} حقل مخصص غير صالح."
|
msgstr "{name!r} حقل مخصص غير صالح."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} لا يدعم تعبير الاستعلام {expr!r}."
|
msgstr "{data_type} لا يدعم تعبير الاستعلام {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "لم يتم العثور على حقل مخصص"
|
msgstr "لم يتم العثور على حقل مخصص"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr ""
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "لون خاطئ."
|
msgstr "لون خاطئ."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "نوع الملف %(type)s غير مدعوم"
|
msgstr "نوع الملف %(type)s غير مدعوم"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "اكتشاف متغير خاطئ."
|
msgstr "اكتشاف متغير خاطئ."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "كخطوة أخيرة، يرجى ملء النموذج التالي:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "إعدادات التطبيق paperless"
|
msgstr "إعدادات التطبيق paperless"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "الإنجليزية (الولايات المتحدة)"
|
msgstr "الإنجليزية (الولايات المتحدة)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "العربية"
|
msgstr "العربية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "اللغة الأفريقانية"
|
msgstr "اللغة الأفريقانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "البيلاروسية"
|
msgstr "البيلاروسية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "البلغارية"
|
msgstr "البلغارية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "اللغة الكتالونية"
|
msgstr "اللغة الكتالونية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "التشيكية"
|
msgstr "التشيكية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "الدانماركية"
|
msgstr "الدانماركية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "الألمانية"
|
msgstr "الألمانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "اليونانية"
|
msgstr "اليونانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "الإنجليزية (المملكة المتحدة)"
|
msgstr "الإنجليزية (المملكة المتحدة)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "الإسبانية"
|
msgstr "الإسبانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "الفنلندية"
|
msgstr "الفنلندية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "الفرنسية"
|
msgstr "الفرنسية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "المجرية"
|
msgstr "المجرية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "الإيطالية"
|
msgstr "الإيطالية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "اليابانية"
|
msgstr "اليابانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "اللوكسمبرجية"
|
msgstr "اللوكسمبرجية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "النرويجية"
|
msgstr "النرويجية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "الهولندية"
|
msgstr "الهولندية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "البولندية"
|
msgstr "البولندية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "البرتغالية (البرازيل)"
|
msgstr "البرتغالية (البرازيل)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "البرتغالية"
|
msgstr "البرتغالية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "الرومانية"
|
msgstr "الرومانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "الروسية"
|
msgstr "الروسية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "السلوفاكية"
|
msgstr "السلوفاكية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "السلوفانية"
|
msgstr "السلوفانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "الصربية"
|
msgstr "الصربية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "السويدية"
|
msgstr "السويدية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "التركية"
|
msgstr "التركية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "الأوكرانية"
|
msgstr "الأوكرانية"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "الصينية المبسطة"
|
msgstr "الصينية المبسطة"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Belarusian\n"
|
"Language-Team: Belarusian\n"
|
||||||
"Language: be_BY\n"
|
"Language: be_BY\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Дакументы"
|
msgstr "Дакументы"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr ""
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Няправільны колер."
|
msgstr "Няправільны колер."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Тып файла %(type)s не падтрымліваецца"
|
msgstr "Тып файла %(type)s не падтрымліваецца"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Выяўлена няправільная зменная."
|
msgstr "Выяўлена няправільная зменная."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1916,40 +1920,40 @@ msgstr ""
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2241,151 +2245,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Англійская (ЗША)"
|
msgstr "Англійская (ЗША)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Беларуская"
|
msgstr "Беларуская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Чэшская"
|
msgstr "Чэшская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Дацкая"
|
msgstr "Дацкая"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Нямецкая"
|
msgstr "Нямецкая"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Англійская (Вялікабрытанія)"
|
msgstr "Англійская (Вялікабрытанія)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Іспанская"
|
msgstr "Іспанская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Французская"
|
msgstr "Французская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Італьянская"
|
msgstr "Італьянская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Люксембургская"
|
msgstr "Люксембургская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Нідэрландская"
|
msgstr "Нідэрландская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Польская"
|
msgstr "Польская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Партугальская (Бразілія)"
|
msgstr "Партугальская (Бразілія)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Партугальская"
|
msgstr "Партугальская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Румынская"
|
msgstr "Румынская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Руская"
|
msgstr "Руская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Славенская"
|
msgstr "Славенская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Сербская"
|
msgstr "Сербская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Шведская"
|
msgstr "Шведская"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Турэцкая"
|
msgstr "Турэцкая"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Кітайская спрошчаная"
|
msgstr "Кітайская спрошчаная"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Bulgarian\n"
|
"Language-Team: Bulgarian\n"
|
||||||
"Language: bg_BG\n"
|
"Language: bg_BG\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Документи"
|
msgstr "Документи"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Стойността трябва да е валидна JSON."
|
msgstr "Стойността трябва да е валидна JSON."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Невалидна заявка на персонализираното полето"
|
msgstr "Невалидна заявка на персонализираното полето"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Списък с невалиден израз. Не може да е празно."
|
msgstr "Списък с невалиден израз. Не може да е празно."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Невалиден логически оператор {op!r}"
|
msgstr "Невалиден логически оператор {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Надвишен е максимален брой за заявки."
|
msgstr "Надвишен е максимален брой за заявки."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} не е валидно персонализирано поле."
|
msgstr "{name!r} не е валидно персонализирано поле."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} не поддържа заявка expr {expr!r}."
|
msgstr "{data_type} не поддържа заявка expr {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Надвишена е максималната дълбочина на вмъкване."
|
msgstr "Надвишена е максималната дълбочина на вмъкване."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Персонализирано поле не е намерено"
|
msgstr "Персонализирано поле не е намерено"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "стартиране на работния процес"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "стартиране на работните процеси"
|
msgstr "стартиране на работните процеси"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Невалиден цвят."
|
msgstr "Невалиден цвят."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Файловия тип %(type)s не се поддържа"
|
msgstr "Файловия тип %(type)s не се поддържа"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Засечена е невалидна променлива."
|
msgstr "Засечена е невалидна променлива."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Като последна стъпка, моля, попълнете с
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "настройки на софтуера"
|
msgstr "настройки на софтуера"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Английски (САЩ)"
|
msgstr "Английски (САЩ)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Арабски"
|
msgstr "Арабски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Африканс"
|
msgstr "Африканс"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Беларуски"
|
msgstr "Беларуски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Български"
|
msgstr "Български"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Каталунски"
|
msgstr "Каталунски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Чешки"
|
msgstr "Чешки"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Датски"
|
msgstr "Датски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Немски"
|
msgstr "Немски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Гръцки"
|
msgstr "Гръцки"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Английски (Великобритания)"
|
msgstr "Английски (Великобритания)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Испански"
|
msgstr "Испански"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Финландски"
|
msgstr "Финландски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Френски"
|
msgstr "Френски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Унгарски"
|
msgstr "Унгарски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Италиански"
|
msgstr "Италиански"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Японски"
|
msgstr "Японски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Корейски"
|
msgstr "Корейски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Люксембургски"
|
msgstr "Люксембургски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Норвежки"
|
msgstr "Норвежки"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Холандски"
|
msgstr "Холандски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Полски"
|
msgstr "Полски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Португалски (Бразилия)"
|
msgstr "Португалски (Бразилия)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Португалски"
|
msgstr "Португалски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Румънски"
|
msgstr "Румънски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Руски"
|
msgstr "Руски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Словашки"
|
msgstr "Словашки"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Словенски"
|
msgstr "Словенски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Сръбски"
|
msgstr "Сръбски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Шведски"
|
msgstr "Шведски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Турски"
|
msgstr "Турски"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Украински"
|
msgstr "Украински"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Китайски опростен"
|
msgstr "Китайски опростен"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Китайски традиционен"
|
msgstr "Китайски традиционен"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Catalan\n"
|
"Language-Team: Catalan\n"
|
||||||
"Language: ca_ES\n"
|
"Language: ca_ES\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Documents "
|
msgstr "Documents "
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Valor ha de ser un JSON valid."
|
msgstr "Valor ha de ser un JSON valid."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Expressió de camp de consulta invàlid"
|
msgstr "Expressió de camp de consulta invàlid"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Expressió de llista invàlida. No ha d'estar buida."
|
msgstr "Expressió de llista invàlida. No ha d'estar buida."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Invàlid operand lògic {op!r}"
|
msgstr "Invàlid operand lògic {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Condicions de consulta excedits."
|
msgstr "Condicions de consulta excedits."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} no és un camp personalitzat vàlid."
|
msgstr "{name!r} no és un camp personalitzat vàlid."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} no suporta expressió de consulta {expr!r}."
|
msgstr "{data_type} no suporta expressió de consulta {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Màxima profunditat anidada excedida."
|
msgstr "Màxima profunditat anidada excedida."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Camp personalitzat no trobat"
|
msgstr "Camp personalitzat no trobat"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "data del flux"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "flux corrents"
|
msgstr "flux corrents"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Permisos insuficients."
|
msgstr "Permisos insuficients."
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Color Invàlid."
|
msgstr "Color Invàlid."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Tipus arxiu %(type)s no suportat"
|
msgstr "Tipus arxiu %(type)s no suportat"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr "ID de camp personalizat ha de ser enter: %(id)s"
|
msgstr "ID de camp personalizat ha de ser enter: %(id)s"
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr "Camp personalitzat amb ID %(id)s no existeix"
|
msgstr "Camp personalitzat amb ID %(id)s no existeix"
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr "Camps personalitzats han de ser una llista d'enters o un objecte que mapegi els identificadors amb els valors."
|
msgstr "Camps personalitzats han de ser una llista d'enters o un objecte que mapegi els identificadors amb els valors."
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr "Alguns camps personalitzats no existeixen o s'han especificat dues vegades."
|
msgstr "Alguns camps personalitzats no existeixen o s'han especificat dues vegades."
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variable detectada invàlida."
|
msgstr "Variable detectada invàlida."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Duplicat d'identificadors de documents no permès."
|
msgstr "Duplicat d'identificadors de documents no permès."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documents no trobats: %(ids)s"
|
msgstr "Documents no trobats: %(ids)s"
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Com a pas final, completa el següent formulari:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr "Especifica només un dels següents valors: text, title_search, query o more_like_id."
|
msgstr "Especifica només un dels següents valors: text, title_search, query o more_like_id."
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Invalid more_like_id"
|
msgstr "Invalid more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuració AI invàlida."
|
msgstr "Configuració AI invàlida."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Permisos insuficients per compartir document %(id)s."
|
msgstr "Permisos insuficients per compartir document %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paquet ja s'està processant."
|
msgstr "Paquet ja s'està processant."
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "El paquet de link encarà s'està preparant. Prova de nou més tard."
|
msgstr "El paquet de link encarà s'està preparant. Prova de nou més tard."
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "El paquet d'enllaç no està disponible."
|
msgstr "El paquet d'enllaç no està disponible."
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr "Estableix temps d'espera en segons"
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "configuració de l'aplicació paperless"
|
msgstr "configuració de l'aplicació paperless"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Anglès (US)"
|
msgstr "Anglès (US)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Àrab"
|
msgstr "Àrab"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Africà"
|
msgstr "Africà"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Bielorús"
|
msgstr "Bielorús"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Búlgar"
|
msgstr "Búlgar"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Català"
|
msgstr "Català"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Txec"
|
msgstr "Txec"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Danès"
|
msgstr "Danès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Alemany"
|
msgstr "Alemany"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Grec"
|
msgstr "Grec"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Anglès (GB)"
|
msgstr "Anglès (GB)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Espanyol"
|
msgstr "Espanyol"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr "Persa"
|
msgstr "Persa"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Finès"
|
msgstr "Finès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Francès"
|
msgstr "Francès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Hongarès"
|
msgstr "Hongarès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr "Indonesi"
|
msgstr "Indonesi"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italià"
|
msgstr "Italià"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japonès"
|
msgstr "Japonès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Coreà"
|
msgstr "Coreà"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Luxemburguès"
|
msgstr "Luxemburguès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Noruec"
|
msgstr "Noruec"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Holandès"
|
msgstr "Holandès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Polonès"
|
msgstr "Polonès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portuguès (Brasil)"
|
msgstr "Portuguès (Brasil)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portuguès"
|
msgstr "Portuguès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Romanès"
|
msgstr "Romanès"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Rus"
|
msgstr "Rus"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Eslovac"
|
msgstr "Eslovac"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Eslovè"
|
msgstr "Eslovè"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Serbi"
|
msgstr "Serbi"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Suec"
|
msgstr "Suec"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Turc"
|
msgstr "Turc"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ucranià"
|
msgstr "Ucranià"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr "Vietnamita"
|
msgstr "Vietnamita"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Xinès Simplificat"
|
msgstr "Xinès Simplificat"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Xinès tradicional"
|
msgstr "Xinès tradicional"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Czech\n"
|
"Language-Team: Czech\n"
|
||||||
"Language: cs_CZ\n"
|
"Language: cs_CZ\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Dokumenty"
|
msgstr "Dokumenty"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Hodnota musí být platný JSON."
|
msgstr "Hodnota musí být platný JSON."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Neplatný výraz dotazu na vlastní pole"
|
msgstr "Neplatný výraz dotazu na vlastní pole"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Neplatný seznam výrazů. Nesmí být prázdný."
|
msgstr "Neplatný seznam výrazů. Nesmí být prázdný."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Neplatný logický operátor {op!r}"
|
msgstr "Neplatný logický operátor {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Překročen maximální počet podmínek dotazu."
|
msgstr "Překročen maximální počet podmínek dotazu."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} není platné vlastní pole."
|
msgstr "{name!r} není platné vlastní pole."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} nepodporuje výraz dotazu {expr!r}."
|
msgstr "{data_type} nepodporuje výraz dotazu {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Překročena maximální hloubka větvení."
|
msgstr "Překročena maximální hloubka větvení."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Vlastní pole nebylo nalezeno"
|
msgstr "Vlastní pole nebylo nalezeno"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "spuštění pracovního postupu"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "spuštění pracovních postupů"
|
msgstr "spuštění pracovních postupů"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Nedostatečná oprávnění."
|
msgstr "Nedostatečná oprávnění."
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Neplatná barva."
|
msgstr "Neplatná barva."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Typ souboru %(type)s není podporován"
|
msgstr "Typ souboru %(type)s není podporován"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr "Vlastní ID pole musí být celé číslo: %(id)s"
|
msgstr "Vlastní ID pole musí být celé číslo: %(id)s"
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr "Vlastní pole s ID %(id)s neexistuje"
|
msgstr "Vlastní pole s ID %(id)s neexistuje"
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr "Vlastní pole musí být seznam celých čísel nebo ID pro mapování objektů na hodnoty."
|
msgstr "Vlastní pole musí být seznam celých čísel nebo ID pro mapování objektů na hodnoty."
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr "Některá vlastní pole neexistují nebo byla zadána dvakrát."
|
msgstr "Některá vlastní pole neexistují nebo byla zadána dvakrát."
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Zjištěna neplatná proměnná."
|
msgstr "Zjištěna neplatná proměnná."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Jako poslední krok vyplňte následující formulář:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Nedostatečná oprávnění ke sdílení dokumentu %(id)s."
|
msgstr "Nedostatečná oprávnění ke sdílení dokumentu %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr "Nastaví časový limit LLM v sekundách"
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "nastavení aplikace paperless"
|
msgstr "nastavení aplikace paperless"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Angličtina (US)"
|
msgstr "Angličtina (US)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Arabština"
|
msgstr "Arabština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Afrikánština"
|
msgstr "Afrikánština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Běloruština"
|
msgstr "Běloruština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Bulharština"
|
msgstr "Bulharština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Katalánština"
|
msgstr "Katalánština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Čeština"
|
msgstr "Čeština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Dánština"
|
msgstr "Dánština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Němčina"
|
msgstr "Němčina"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Řečtina"
|
msgstr "Řečtina"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Angličtina (GB)"
|
msgstr "Angličtina (GB)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Španělština"
|
msgstr "Španělština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr "Perština"
|
msgstr "Perština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Finština"
|
msgstr "Finština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Francouzština"
|
msgstr "Francouzština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Maďarština"
|
msgstr "Maďarština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr "Indonéština"
|
msgstr "Indonéština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italština"
|
msgstr "Italština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japonština"
|
msgstr "Japonština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Korejština"
|
msgstr "Korejština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Lucemburština"
|
msgstr "Lucemburština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Norština"
|
msgstr "Norština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Holandština"
|
msgstr "Holandština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Polština"
|
msgstr "Polština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portugalština (Brazílie)"
|
msgstr "Portugalština (Brazílie)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portugalština"
|
msgstr "Portugalština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Rumunština"
|
msgstr "Rumunština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Ruština"
|
msgstr "Ruština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Slovenština"
|
msgstr "Slovenština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Slovinština"
|
msgstr "Slovinština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Srbština"
|
msgstr "Srbština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Švédština"
|
msgstr "Švédština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Turečtina"
|
msgstr "Turečtina"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ukrajinština"
|
msgstr "Ukrajinština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr "Vietnamština"
|
msgstr "Vietnamština"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Čínština (zjednodušená)"
|
msgstr "Čínština (zjednodušená)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Čínština (tradiční)"
|
msgstr "Čínština (tradiční)"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Danish\n"
|
"Language-Team: Danish\n"
|
||||||
"Language: da_DK\n"
|
"Language: da_DK\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Dokumenter"
|
msgstr "Dokumenter"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Værdien skal være gyldig JSON."
|
msgstr "Værdien skal være gyldig JSON."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Ugyldigt tilpasset feltforespørgselsudtryk"
|
msgstr "Ugyldigt tilpasset feltforespørgselsudtryk"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Ugyldig udtryksliste. Må ikke være tom."
|
msgstr "Ugyldig udtryksliste. Må ikke være tom."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Ugyldig logisk operatør {op!r}"
|
msgstr "Ugyldig logisk operatør {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Maksimalt antal forespørgselsbetingelser overskredet."
|
msgstr "Maksimalt antal forespørgselsbetingelser overskredet."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} er ikke et gyldigt tilpasset felt."
|
msgstr "{name!r} er ikke et gyldigt tilpasset felt."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} understøtter ikke forespørgsel expr {expr!r}."
|
msgstr "{data_type} understøtter ikke forespørgsel expr {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Maksimal indlejringsdybde overskredet."
|
msgstr "Maksimal indlejringsdybde overskredet."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Tilpasset felt ikke fundet"
|
msgstr "Tilpasset felt ikke fundet"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "workflow-kørsel"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "workflow-kørsler"
|
msgstr "workflow-kørsler"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ugyldig farve."
|
msgstr "Ugyldig farve."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Filtype %(type)s understøttes ikke"
|
msgstr "Filtype %(type)s understøttes ikke"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ugyldig variabel fundet."
|
msgstr "Ugyldig variabel fundet."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Som sidste trin, udfyld venligst flg. formular:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "paperless-applikationsindstillinger"
|
msgstr "paperless-applikationsindstillinger"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Engelsk (USA)"
|
msgstr "Engelsk (USA)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Afrikaans"
|
msgstr "Afrikaans"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Hviderussisk"
|
msgstr "Hviderussisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Bulgarsk"
|
msgstr "Bulgarsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Katalansk"
|
msgstr "Katalansk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Tjekkisk"
|
msgstr "Tjekkisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Dansk"
|
msgstr "Dansk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Tysk"
|
msgstr "Tysk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Græsk"
|
msgstr "Græsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Engelsk (GB)"
|
msgstr "Engelsk (GB)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Spansk"
|
msgstr "Spansk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Finsk"
|
msgstr "Finsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Fransk"
|
msgstr "Fransk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Ungarsk"
|
msgstr "Ungarsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italiensk"
|
msgstr "Italiensk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japansk"
|
msgstr "Japansk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Koreansk"
|
msgstr "Koreansk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Luxemburgsk"
|
msgstr "Luxemburgsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Norsk"
|
msgstr "Norsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Hollandsk"
|
msgstr "Hollandsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Polsk"
|
msgstr "Polsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portugisisk (Brasilien)"
|
msgstr "Portugisisk (Brasilien)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portugisisk"
|
msgstr "Portugisisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Romansk"
|
msgstr "Romansk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Russisk"
|
msgstr "Russisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Slovakisk"
|
msgstr "Slovakisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Slovensk"
|
msgstr "Slovensk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Serbisk"
|
msgstr "Serbisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Svensk"
|
msgstr "Svensk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Tyrkisk"
|
msgstr "Tyrkisk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ukrainsk"
|
msgstr "Ukrainsk"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Kinesisk, forenklet"
|
msgstr "Kinesisk, forenklet"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Kinesisk, traditionelt"
|
msgstr "Kinesisk, traditionelt"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: German, Switzerland\n"
|
"Language-Team: German, Switzerland\n"
|
||||||
"Language: de_CH\n"
|
"Language: de_CH\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Dokumente"
|
msgstr "Dokumente"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Wert muss gültiges JSON sein."
|
msgstr "Wert muss gültiges JSON sein."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Ungültiger benutzerdefinierter Feldabfrageausdruck"
|
msgstr "Ungültiger benutzerdefinierter Feldabfrageausdruck"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Ungültige Ausdrucksliste. Darf nicht leer sein."
|
msgstr "Ungültige Ausdrucksliste. Darf nicht leer sein."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Ungültiger logischer Operator {op!r}"
|
msgstr "Ungültiger logischer Operator {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Maximale Anzahl an Abfragebedingungen überschritten."
|
msgstr "Maximale Anzahl an Abfragebedingungen überschritten."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} ist kein gültiges Zusatzfeld."
|
msgstr "{name!r} ist kein gültiges Zusatzfeld."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} unterstützt den Abfrageausdruck {expr!r} nicht."
|
msgstr "{data_type} unterstützt den Abfrageausdruck {expr!r} nicht."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Maximale Verschachtelungstiefe überschritten."
|
msgstr "Maximale Verschachtelungstiefe überschritten."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Benutzerdefiniertes Feld nicht gefunden"
|
msgstr "Benutzerdefiniertes Feld nicht gefunden"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "Arbeitsablauf-Ausführung"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "Arbeitsablauf wird ausgeführt"
|
msgstr "Arbeitsablauf wird ausgeführt"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Unzureichende Berechtigungen."
|
msgstr "Unzureichende Berechtigungen."
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ungültige Farbe."
|
msgstr "Ungültige Farbe."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Dateityp %(type)s nicht unterstützt"
|
msgstr "Dateityp %(type)s nicht unterstützt"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr "Feld-ID eines benutzerdefinierten Felds muss eine Ganzzahl sein: %(id)s"
|
msgstr "Feld-ID eines benutzerdefinierten Felds muss eine Ganzzahl sein: %(id)s"
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr "Benutzerdefiniertes Feld mit ID %(id)s existiert nicht"
|
msgstr "Benutzerdefiniertes Feld mit ID %(id)s existiert nicht"
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr "Benutzerdefinierte Felder müssen eine Liste von Ganzzahlen oder ein Objekt mit Zuordnung von IDs zu Werten sein."
|
msgstr "Benutzerdefinierte Felder müssen eine Liste von Ganzzahlen oder ein Objekt mit Zuordnung von IDs zu Werten sein."
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr "Einige benutzerdefinierte Felder existieren nicht oder wurden zweimal angegeben."
|
msgstr "Einige benutzerdefinierte Felder existieren nicht oder wurden zweimal angegeben."
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ungültige Variable erkannt."
|
msgstr "Ungültige Variable erkannt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumente nicht gefunden: %(ids)s"
|
msgstr "Dokumente nicht gefunden: %(ids)s"
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Ungültige more_like_id"
|
msgstr "Ungültige more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ungültige KI-Konfiguration."
|
msgstr "Ungültige KI-Konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket wird bereits verarbeitet."
|
msgstr "Paket wird bereits verarbeitet."
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "Paperless-ngx-Anwendungseinstellungen"
|
msgstr "Paperless-ngx-Anwendungseinstellungen"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Englisch (US)"
|
msgstr "Englisch (US)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Arabisch"
|
msgstr "Arabisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Afrikanisch"
|
msgstr "Afrikanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Belarussisch"
|
msgstr "Belarussisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Bulgarisch"
|
msgstr "Bulgarisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Katalanisch"
|
msgstr "Katalanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Tschechisch"
|
msgstr "Tschechisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Dänisch"
|
msgstr "Dänisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Deutsch"
|
msgstr "Deutsch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Griechisch"
|
msgstr "Griechisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Englisch (UK)"
|
msgstr "Englisch (UK)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Spanisch"
|
msgstr "Spanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr "Persisch"
|
msgstr "Persisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Finnisch"
|
msgstr "Finnisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Französisch"
|
msgstr "Französisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Ungarisch"
|
msgstr "Ungarisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr "Indonesisch"
|
msgstr "Indonesisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italienisch"
|
msgstr "Italienisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japanisch"
|
msgstr "Japanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Koreanisch"
|
msgstr "Koreanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Luxemburgisch"
|
msgstr "Luxemburgisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Norwegisch"
|
msgstr "Norwegisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Niederländisch"
|
msgstr "Niederländisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Polnisch"
|
msgstr "Polnisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portugiesisch (Brasilien)"
|
msgstr "Portugiesisch (Brasilien)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portugiesisch"
|
msgstr "Portugiesisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Rumänisch"
|
msgstr "Rumänisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Russisch"
|
msgstr "Russisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Slowakisch"
|
msgstr "Slowakisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Slowenisch"
|
msgstr "Slowenisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Serbisch"
|
msgstr "Serbisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Schwedisch"
|
msgstr "Schwedisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Türkisch"
|
msgstr "Türkisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ukrainisch"
|
msgstr "Ukrainisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr "Vietnamesisch"
|
msgstr "Vietnamesisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Chinesisch (vereinfacht)"
|
msgstr "Chinesisch (vereinfacht)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Chinesisch (traditionell)"
|
msgstr "Chinesisch (traditionell)"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"Language: de_DE\n"
|
"Language: de_DE\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Dokumente"
|
msgstr "Dokumente"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Wert muss gültiges JSON sein."
|
msgstr "Wert muss gültiges JSON sein."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Ungültiger Zusatzfeld-Abfrageausdruck"
|
msgstr "Ungültiger Zusatzfeld-Abfrageausdruck"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Ungültige Ausdrucksliste. Darf nicht leer sein."
|
msgstr "Ungültige Ausdrucksliste. Darf nicht leer sein."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Ungültiger logischer Operator {op!r}"
|
msgstr "Ungültiger logischer Operator {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Maximale Anzahl an Abfragebedingungen überschritten."
|
msgstr "Maximale Anzahl an Abfragebedingungen überschritten."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{name!r} ist kein gültiges Zusatzfeld."
|
msgstr "{name!r} ist kein gültiges Zusatzfeld."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} unterstützt den Abfrageausdruck {expr!r} nicht."
|
msgstr "{data_type} unterstützt den Abfrageausdruck {expr!r} nicht."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Maximale Verschachtelungstiefe überschritten."
|
msgstr "Maximale Verschachtelungstiefe überschritten."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Zusatzfeld nicht gefunden"
|
msgstr "Zusatzfeld nicht gefunden"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "Arbeitsablauf-Ausführung"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "Arbeitsablauf wird ausgeführt"
|
msgstr "Arbeitsablauf wird ausgeführt"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Unzureichende Berechtigungen."
|
msgstr "Unzureichende Berechtigungen."
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ungültige Farbe."
|
msgstr "Ungültige Farbe."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Dateityp %(type)s nicht unterstützt"
|
msgstr "Dateityp %(type)s nicht unterstützt"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr "Zusatzfeld-ID muss eine Ganzzahl sein: %(id)s"
|
msgstr "Zusatzfeld-ID muss eine Ganzzahl sein: %(id)s"
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr "Zusatzfeld mit ID %(id)s existiert nicht"
|
msgstr "Zusatzfeld mit ID %(id)s existiert nicht"
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr "Zusatzfelder müssen eine Liste von Ganzzahlen oder ein Objekt mit Zuordnung von IDs zu Werten sein."
|
msgstr "Zusatzfelder müssen eine Liste von Ganzzahlen oder ein Objekt mit Zuordnung von IDs zu Werten sein."
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr "Einige Zusatzfelder existieren nicht oder wurden zweimal angegeben."
|
msgstr "Einige Zusatzfelder existieren nicht oder wurden zweimal angegeben."
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ungültige Variable erkannt."
|
msgstr "Ungültige Variable erkannt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
msgstr "Doppelte Dokumentbezeichner sind nicht erlaubt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Dokumente nicht gefunden: %(ids)s"
|
msgstr "Dokumente nicht gefunden: %(ids)s"
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ", "
|
msgstr ", "
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
msgstr "Geben Sie nur einen von text, title_search, query, oder more_like_id an."
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr "Ungültige more_like_id"
|
msgstr "Ungültige more_like_id"
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ungültige KI-Konfiguration."
|
msgstr "Ungültige KI-Konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Zeitüberschreitung bei der KI-Backendanfrage."
|
msgstr "Zeitüberschreitung bei der KI-Backendanfrage."
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "Das KI-Backend hat die Anfrage abgelehnt. Details in den Protokollen."
|
msgstr "Das KI-Backend hat die Anfrage abgelehnt. Details in den Protokollen."
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
msgstr "Unzureichende Berechtigungen, um Dokument %(id)s zu teilen."
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket wird bereits verarbeitet."
|
msgstr "Paket wird bereits verarbeitet."
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
msgstr "Das Freigabelink-Paket wird noch vorbereitet. Bitte versuchen Sie es später erneut."
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
msgstr "Das Freigabelink-Paket ist nicht verfügbar."
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr "Legt das LLM-Zeitlimit in Sekunden fest"
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "Paperless-ngx-Anwendungseinstellungen"
|
msgstr "Paperless-ngx-Anwendungseinstellungen"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Englisch (US)"
|
msgstr "Englisch (US)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Arabisch"
|
msgstr "Arabisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Afrikanisch"
|
msgstr "Afrikanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Belarussisch"
|
msgstr "Belarussisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Bulgarisch"
|
msgstr "Bulgarisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Katalanisch"
|
msgstr "Katalanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Tschechisch"
|
msgstr "Tschechisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Dänisch"
|
msgstr "Dänisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Deutsch"
|
msgstr "Deutsch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Griechisch"
|
msgstr "Griechisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Englisch (UK)"
|
msgstr "Englisch (UK)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Spanisch"
|
msgstr "Spanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr "Persisch"
|
msgstr "Persisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Finnisch"
|
msgstr "Finnisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Französisch"
|
msgstr "Französisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Ungarisch"
|
msgstr "Ungarisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr "Indonesisch"
|
msgstr "Indonesisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italienisch"
|
msgstr "Italienisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japanisch"
|
msgstr "Japanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Koreanisch"
|
msgstr "Koreanisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Luxemburgisch"
|
msgstr "Luxemburgisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Norwegisch"
|
msgstr "Norwegisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Niederländisch"
|
msgstr "Niederländisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Polnisch"
|
msgstr "Polnisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portugiesisch (Brasilien)"
|
msgstr "Portugiesisch (Brasilien)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portugiesisch"
|
msgstr "Portugiesisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Rumänisch"
|
msgstr "Rumänisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Russisch"
|
msgstr "Russisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Slowakisch"
|
msgstr "Slowakisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Slowenisch"
|
msgstr "Slowenisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Serbisch"
|
msgstr "Serbisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Schwedisch"
|
msgstr "Schwedisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Türkisch"
|
msgstr "Türkisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ukrainisch"
|
msgstr "Ukrainisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr "Vietnamesisch"
|
msgstr "Vietnamesisch"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Chinesisch (vereinfacht)"
|
msgstr "Chinesisch (vereinfacht)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Chinesisch (traditionell)"
|
msgstr "Chinesisch (traditionell)"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Greek\n"
|
"Language-Team: Greek\n"
|
||||||
"Language: el_GR\n"
|
"Language: el_GR\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Έγγραφα"
|
msgstr "Έγγραφα"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "Η τιμή πρέπει να είναι σε έγκυρη μορφή JSON."
|
msgstr "Η τιμή πρέπει να είναι σε έγκυρη μορφή JSON."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Μη έγκυρη έκφραση προσαρμοσμένου ερωτήματος πεδίου"
|
msgstr "Μη έγκυρη έκφραση προσαρμοσμένου ερωτήματος πεδίου"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Μη έγκυρη λίστα έκφρασης. Πρέπει να είναι μη κενή."
|
msgstr "Μη έγκυρη λίστα έκφρασης. Πρέπει να είναι μη κενή."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Μη έγκυρος λογικός τελεστής {op!r}"
|
msgstr "Μη έγκυρος λογικός τελεστής {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Υπέρβαση μέγιστου αριθμού συνθηκών ερωτήματος."
|
msgstr "Υπέρβαση μέγιστου αριθμού συνθηκών ερωτήματος."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "Το προσαρμοσμένο πεδίο {name!r} δεν είναι ένα έγκυρο."
|
msgstr "Το προσαρμοσμένο πεδίο {name!r} δεν είναι ένα έγκυρο."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "Το {data_type} δεν υποστηρίζει το ερώτημα expr {expr!r}s."
|
msgstr "Το {data_type} δεν υποστηρίζει το ερώτημα expr {expr!r}s."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Υπέρβαση μέγιστου βάθους εμφώλευσης."
|
msgstr "Υπέρβαση μέγιστου βάθους εμφώλευσης."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Το προσαρμοσμένο πεδίο δε βρέθηκε"
|
msgstr "Το προσαρμοσμένο πεδίο δε βρέθηκε"
|
||||||
|
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "εκτέλεση ροής εργασίας"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "εκτελέσεις ροής εργασίας"
|
msgstr "εκτελέσεις ροής εργασίας"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Άκυρο χρώμα."
|
msgstr "Άκυρο χρώμα."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Ο τύπος αρχείου %(type)s δεν υποστηρίζεται"
|
msgstr "Ο τύπος αρχείου %(type)s δεν υποστηρίζεται"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή."
|
msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Ως τελικό βήμα, παρακαλούμε να συμπληρώ
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr ""
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "ρυθμίσεις εφαρμογής paperless"
|
msgstr "ρυθμίσεις εφαρμογής paperless"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Αγγλικά (ΗΠΑ)"
|
msgstr "Αγγλικά (ΗΠΑ)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Αραβικά"
|
msgstr "Αραβικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Αφρικανικά"
|
msgstr "Αφρικανικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Λευκορωσικά"
|
msgstr "Λευκορωσικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Βουλγαρικά"
|
msgstr "Βουλγαρικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Καταλανικά"
|
msgstr "Καταλανικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Τσέχικα"
|
msgstr "Τσέχικα"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Δανέζικα"
|
msgstr "Δανέζικα"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Γερμανικά"
|
msgstr "Γερμανικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Ελληνικά"
|
msgstr "Ελληνικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Αγγλικά (Ηνωμένο Βασίλειο)"
|
msgstr "Αγγλικά (Ηνωμένο Βασίλειο)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Ισπανικά"
|
msgstr "Ισπανικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Φινλανδικά"
|
msgstr "Φινλανδικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Γαλλικά"
|
msgstr "Γαλλικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Ουγγρικά"
|
msgstr "Ουγγρικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Ιταλικά"
|
msgstr "Ιταλικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Ιαπωνικά"
|
msgstr "Ιαπωνικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Κορεάτικα"
|
msgstr "Κορεάτικα"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Λουξεμβουργικά"
|
msgstr "Λουξεμβουργικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Νορβηγικά"
|
msgstr "Νορβηγικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Ολλανδικά"
|
msgstr "Ολλανδικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Πολωνικά"
|
msgstr "Πολωνικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Πορτογαλικά (Βραζιλίας)"
|
msgstr "Πορτογαλικά (Βραζιλίας)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Πορτογαλικά"
|
msgstr "Πορτογαλικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Ρουμάνικα"
|
msgstr "Ρουμάνικα"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Ρωσικά"
|
msgstr "Ρωσικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Σλοβακικά"
|
msgstr "Σλοβακικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Σλοβενικά"
|
msgstr "Σλοβενικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Σερβικά"
|
msgstr "Σερβικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Σουηδικά"
|
msgstr "Σουηδικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Τούρκικα"
|
msgstr "Τούρκικα"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ουκρανικά"
|
msgstr "Ουκρανικά"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Κινέζικα Απλοποιημένα"
|
msgstr "Κινέζικα Απλοποιημένα"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Κινεζικά Παραδοσιακά"
|
msgstr "Κινεζικά Παραδοσιακά"
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-19 15:40+0000\n"
|
"POT-Creation-Date: 2026-10-29 17:25+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-19 15:42\n"
|
"PO-Revision-Date: 2026-10-29 17:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
"Language: es_ES\n"
|
"Language: es_ES\n"
|
||||||
@@ -21,39 +21,43 @@ msgstr ""
|
|||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Documentos"
|
msgstr "Documentos"
|
||||||
|
|
||||||
#: documents/filters.py:464
|
#: documents/filters.py:337
|
||||||
|
msgid "Expected a date or a relative date such as \"today\" or \"in 30 days\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/filters.py:513
|
||||||
msgid "Value must be valid JSON."
|
msgid "Value must be valid JSON."
|
||||||
msgstr "El valor debe ser un JSON válido."
|
msgstr "El valor debe ser un JSON válido."
|
||||||
|
|
||||||
#: documents/filters.py:483
|
#: documents/filters.py:534
|
||||||
msgid "Invalid custom field query expression"
|
msgid "Invalid custom field query expression"
|
||||||
msgstr "Expresión de consulta de campo personalizado no válida"
|
msgstr "Expresión de consulta de campo personalizado no válida"
|
||||||
|
|
||||||
#: documents/filters.py:493
|
#: documents/filters.py:544
|
||||||
msgid "Invalid expression list. Must be nonempty."
|
msgid "Invalid expression list. Must be nonempty."
|
||||||
msgstr "Lista de expresiones no válida. No debe estar vacía."
|
msgstr "Lista de expresiones no válida. No debe estar vacía."
|
||||||
|
|
||||||
#: documents/filters.py:514
|
#: documents/filters.py:565
|
||||||
msgid "Invalid logical operator {op!r}"
|
msgid "Invalid logical operator {op!r}"
|
||||||
msgstr "Operador lógico inválido {op!r}"
|
msgstr "Operador lógico inválido {op!r}"
|
||||||
|
|
||||||
#: documents/filters.py:528
|
#: documents/filters.py:579
|
||||||
msgid "Maximum number of query conditions exceeded."
|
msgid "Maximum number of query conditions exceeded."
|
||||||
msgstr "Se ha superado el número máximo de condiciones de consulta."
|
msgstr "Se ha superado el número máximo de condiciones de consulta."
|
||||||
|
|
||||||
#: documents/filters.py:592
|
#: documents/filters.py:643
|
||||||
msgid "{name!r} is not a valid custom field."
|
msgid "{name!r} is not a valid custom field."
|
||||||
msgstr "{nombre!r} no es un campo personalizado válido."
|
msgstr "{nombre!r} no es un campo personalizado válido."
|
||||||
|
|
||||||
#: documents/filters.py:629
|
#: documents/filters.py:680
|
||||||
msgid "{data_type} does not support query expr {expr!r}."
|
msgid "{data_type} does not support query expr {expr!r}."
|
||||||
msgstr "{data_type} no admite la consulta expr {expr!r}."
|
msgstr "{data_type} no admite la consulta expr {expr!r}."
|
||||||
|
|
||||||
#: documents/filters.py:748 documents/models.py:137
|
#: documents/filters.py:801 documents/models.py:137
|
||||||
msgid "Maximum nesting depth exceeded."
|
msgid "Maximum nesting depth exceeded."
|
||||||
msgstr "Profundidad máxima de nidificación superada."
|
msgstr "Profundidad máxima de nidificación superada."
|
||||||
|
|
||||||
#: documents/filters.py:1125
|
#: documents/filters.py:1178
|
||||||
msgid "Custom field not found"
|
msgid "Custom field not found"
|
||||||
msgstr "Campo personalizado no encontrado"
|
msgstr "Campo personalizado no encontrado"
|
||||||
|
|
||||||
@@ -346,11 +350,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:590
|
#: documents/models.py:590
|
||||||
msgid "Credit card"
|
msgid "Credit card"
|
||||||
msgstr ""
|
msgstr "Tarjeta de crédito"
|
||||||
|
|
||||||
#: documents/models.py:591
|
#: documents/models.py:591
|
||||||
msgid "Download"
|
msgid "Download"
|
||||||
msgstr ""
|
msgstr "Descarga"
|
||||||
|
|
||||||
#: documents/models.py:592
|
#: documents/models.py:592
|
||||||
msgid "Envelope"
|
msgid "Envelope"
|
||||||
@@ -362,7 +366,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:594
|
#: documents/models.py:594
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr ""
|
msgstr "Archivo"
|
||||||
|
|
||||||
#: documents/models.py:595
|
#: documents/models.py:595
|
||||||
msgid "Checked file"
|
msgid "Checked file"
|
||||||
@@ -374,7 +378,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:597
|
#: documents/models.py:597
|
||||||
msgid "Medical file"
|
msgid "Medical file"
|
||||||
msgstr ""
|
msgstr "Ficha médica"
|
||||||
|
|
||||||
#: documents/models.py:598
|
#: documents/models.py:598
|
||||||
msgid "Person file"
|
msgid "Person file"
|
||||||
@@ -382,7 +386,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:601
|
#: documents/models.py:601
|
||||||
msgid "Spreadsheet"
|
msgid "Spreadsheet"
|
||||||
msgstr ""
|
msgstr "Hoja de cálculo"
|
||||||
|
|
||||||
#: documents/models.py:603
|
#: documents/models.py:603
|
||||||
msgid "Text file"
|
msgid "Text file"
|
||||||
@@ -422,7 +426,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:612
|
#: documents/models.py:612
|
||||||
msgid "Inbox"
|
msgid "Inbox"
|
||||||
msgstr ""
|
msgstr "Bandeja de entrada"
|
||||||
|
|
||||||
#: documents/models.py:613
|
#: documents/models.py:613
|
||||||
msgid "Journals"
|
msgid "Journals"
|
||||||
@@ -462,11 +466,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: documents/models.py:622
|
#: documents/models.py:622
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr "Búsqueda"
|
||||||
|
|
||||||
#: documents/models.py:623
|
#: documents/models.py:623
|
||||||
msgid "Send"
|
msgid "Send"
|
||||||
msgstr ""
|
msgstr "Enviar"
|
||||||
|
|
||||||
#: documents/models.py:624
|
#: documents/models.py:624
|
||||||
msgid "Shop"
|
msgid "Shop"
|
||||||
@@ -1635,48 +1639,48 @@ msgstr "ejecución del flujo de trabajo"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "ejecuciones de flujo de trabajo"
|
msgstr "ejecuciones de flujo de trabajo"
|
||||||
|
|
||||||
#: documents/serialisers.py:515 documents/serialisers.py:872
|
#: documents/serialisers.py:483 documents/serialisers.py:840
|
||||||
#: documents/serialisers.py:2902 documents/views.py:363 documents/views.py:2768
|
#: documents/serialisers.py:2872 documents/views.py:360 documents/views.py:2730
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Permisos insuficientes."
|
msgstr "Permisos insuficientes."
|
||||||
|
|
||||||
#: documents/serialisers.py:708
|
#: documents/serialisers.py:676
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Color inválido."
|
msgstr "Color inválido."
|
||||||
|
|
||||||
#: documents/serialisers.py:2369
|
#: documents/serialisers.py:2339
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr "Tipo de fichero %(type)s no suportado"
|
msgstr "Tipo de fichero %(type)s no suportado"
|
||||||
|
|
||||||
#: documents/serialisers.py:2413
|
#: documents/serialisers.py:2383
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field id must be an integer: %(id)s"
|
msgid "Custom field id must be an integer: %(id)s"
|
||||||
msgstr "El id del campo personalizado debe ser un entero: %(id)s"
|
msgstr "El id del campo personalizado debe ser un entero: %(id)s"
|
||||||
|
|
||||||
#: documents/serialisers.py:2420
|
#: documents/serialisers.py:2390
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Custom field with id %(id)s does not exist"
|
msgid "Custom field with id %(id)s does not exist"
|
||||||
msgstr "El campo personalizado con identificador %(id)s no existe"
|
msgstr "El campo personalizado con identificador %(id)s no existe"
|
||||||
|
|
||||||
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
#: documents/serialisers.py:2407 documents/serialisers.py:2417
|
||||||
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
msgid "Custom fields must be a list of integers or an object mapping ids to values."
|
||||||
msgstr "Los campos personalizados deben ser una lista de enteros o un identificador de mapeo de objetos a valores."
|
msgstr "Los campos personalizados deben ser una lista de enteros o un identificador de mapeo de objetos a valores."
|
||||||
|
|
||||||
#: documents/serialisers.py:2442
|
#: documents/serialisers.py:2412
|
||||||
msgid "Some custom fields don't exist or were specified twice."
|
msgid "Some custom fields don't exist or were specified twice."
|
||||||
msgstr "Algunos campos personalizados no existen o fueron especificados dos veces."
|
msgstr "Algunos campos personalizados no existen o fueron especificados dos veces."
|
||||||
|
|
||||||
#: documents/serialisers.py:2589
|
#: documents/serialisers.py:2559
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variable inválida."
|
msgstr "Variable inválida."
|
||||||
|
|
||||||
#: documents/serialisers.py:2958
|
#: documents/serialisers.py:2928
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "No se permiten identificadores de documento duplicados."
|
msgstr "No se permiten identificadores de documento duplicados."
|
||||||
|
|
||||||
#: documents/serialisers.py:2988 documents/views.py:4816
|
#: documents/serialisers.py:2958 documents/views.py:4780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Documentos no encontrados: %(ids)s"
|
msgstr "Documentos no encontrados: %(ids)s"
|
||||||
@@ -1917,40 +1921,40 @@ msgstr "Como último paso, por favor complete el siguiente formulario:"
|
|||||||
msgid ", "
|
msgid ", "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:318
|
#: documents/views.py:315
|
||||||
msgid "Specify only one of text, title_search, query, or more_like_id."
|
msgid "Specify only one of text, title_search, query, or more_like_id."
|
||||||
msgstr "Especifique solo uno entre text, title_search, query, o more_like_id."
|
msgstr "Especifique solo uno entre text, title_search, query, o more_like_id."
|
||||||
|
|
||||||
#: documents/views.py:356 documents/views.py:2765
|
#: documents/views.py:353 documents/views.py:2727
|
||||||
msgid "Invalid more_like_id"
|
msgid "Invalid more_like_id"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1703
|
#: documents/views.py:1665
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuración de IA inválida."
|
msgstr "Configuración de IA inválida."
|
||||||
|
|
||||||
#: documents/views.py:1714
|
#: documents/views.py:1676
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1726
|
#: documents/views.py:1688
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4832
|
#: documents/views.py:4796
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient permissions to share document %(id)s."
|
msgid "Insufficient permissions to share document %(id)s."
|
||||||
msgstr "Permisos insuficientes para compartir el documento %(id)s."
|
msgstr "Permisos insuficientes para compartir el documento %(id)s."
|
||||||
|
|
||||||
#: documents/views.py:4879
|
#: documents/views.py:4843
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "El paquete ya está siendo procesado."
|
msgstr "El paquete ya está siendo procesado."
|
||||||
|
|
||||||
#: documents/views.py:4945
|
#: documents/views.py:4909
|
||||||
msgid "The share link bundle is still being prepared. Please try again later."
|
msgid "The share link bundle is still being prepared. Please try again later."
|
||||||
msgstr "El paquete de enlace compartido aún está siendo preparado. Por favor, inténtalo de nuevo más tarde."
|
msgstr "El paquete de enlace compartido aún está siendo preparado. Por favor, inténtalo de nuevo más tarde."
|
||||||
|
|
||||||
#: documents/views.py:4959
|
#: documents/views.py:4923
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "El paquete de enlace compartido no está disponible."
|
msgstr "El paquete de enlace compartido no está disponible."
|
||||||
|
|
||||||
@@ -2242,151 +2246,151 @@ msgstr "Establece el tiempo de espera de LLM en segundos"
|
|||||||
msgid "paperless application settings"
|
msgid "paperless application settings"
|
||||||
msgstr "Ajustes de la aplicación paperless"
|
msgstr "Ajustes de la aplicación paperless"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:562
|
#: paperless/settings/__init__.py:566
|
||||||
msgid "English (US)"
|
msgid "English (US)"
|
||||||
msgstr "Inglés (US)"
|
msgstr "Inglés (US)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:563
|
#: paperless/settings/__init__.py:567
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
msgstr "Árabe"
|
msgstr "Árabe"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:564
|
#: paperless/settings/__init__.py:568
|
||||||
msgid "Afrikaans"
|
msgid "Afrikaans"
|
||||||
msgstr "Africano"
|
msgstr "Africano"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:565
|
#: paperless/settings/__init__.py:569
|
||||||
msgid "Belarusian"
|
msgid "Belarusian"
|
||||||
msgstr "Bielorruso"
|
msgstr "Bielorruso"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:566
|
#: paperless/settings/__init__.py:570
|
||||||
msgid "Bulgarian"
|
msgid "Bulgarian"
|
||||||
msgstr "Búlgaro"
|
msgstr "Búlgaro"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:567
|
#: paperless/settings/__init__.py:571
|
||||||
msgid "Catalan"
|
msgid "Catalan"
|
||||||
msgstr "Catalán"
|
msgstr "Catalán"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:568
|
#: paperless/settings/__init__.py:572
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr "Checo"
|
msgstr "Checo"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:569
|
#: paperless/settings/__init__.py:573
|
||||||
msgid "Danish"
|
msgid "Danish"
|
||||||
msgstr "Danés"
|
msgstr "Danés"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:570
|
#: paperless/settings/__init__.py:574
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Alemán"
|
msgstr "Alemán"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:571
|
#: paperless/settings/__init__.py:575
|
||||||
msgid "Greek"
|
msgid "Greek"
|
||||||
msgstr "Griego"
|
msgstr "Griego"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:572
|
#: paperless/settings/__init__.py:576
|
||||||
msgid "English (GB)"
|
msgid "English (GB)"
|
||||||
msgstr "Inglés (Gran Bretaña)"
|
msgstr "Inglés (Gran Bretaña)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:573
|
#: paperless/settings/__init__.py:577
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Español"
|
msgstr "Español"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:574
|
#: paperless/settings/__init__.py:578
|
||||||
msgid "Persian"
|
msgid "Persian"
|
||||||
msgstr "Persa"
|
msgstr "Persa"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:575
|
#: paperless/settings/__init__.py:579
|
||||||
msgid "Finnish"
|
msgid "Finnish"
|
||||||
msgstr "Finlandés"
|
msgstr "Finlandés"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:576
|
#: paperless/settings/__init__.py:580
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Francés"
|
msgstr "Francés"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:577
|
#: paperless/settings/__init__.py:581
|
||||||
msgid "Hungarian"
|
msgid "Hungarian"
|
||||||
msgstr "Húngaro"
|
msgstr "Húngaro"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:578
|
#: paperless/settings/__init__.py:582
|
||||||
msgid "Indonesian"
|
msgid "Indonesian"
|
||||||
msgstr "Indonesio"
|
msgstr "Indonesio"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:579
|
#: paperless/settings/__init__.py:583
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italiano"
|
msgstr "Italiano"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:580
|
#: paperless/settings/__init__.py:584
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japonés"
|
msgstr "Japonés"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:581
|
#: paperless/settings/__init__.py:585
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Coreano"
|
msgstr "Coreano"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:582
|
#: paperless/settings/__init__.py:586
|
||||||
msgid "Luxembourgish"
|
msgid "Luxembourgish"
|
||||||
msgstr "Luxemburgués"
|
msgstr "Luxemburgués"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:583
|
#: paperless/settings/__init__.py:587
|
||||||
msgid "Norwegian"
|
msgid "Norwegian"
|
||||||
msgstr "Noruego"
|
msgstr "Noruego"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:584
|
#: paperless/settings/__init__.py:588
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr "Alemán"
|
msgstr "Alemán"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:585
|
#: paperless/settings/__init__.py:589
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr "Polaco"
|
msgstr "Polaco"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:586
|
#: paperless/settings/__init__.py:590
|
||||||
msgid "Portuguese (Brazil)"
|
msgid "Portuguese (Brazil)"
|
||||||
msgstr "Portugués (Brasil)"
|
msgstr "Portugués (Brasil)"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:587
|
#: paperless/settings/__init__.py:591
|
||||||
msgid "Portuguese"
|
msgid "Portuguese"
|
||||||
msgstr "Portugués"
|
msgstr "Portugués"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:588
|
#: paperless/settings/__init__.py:592
|
||||||
msgid "Romanian"
|
msgid "Romanian"
|
||||||
msgstr "Rumano"
|
msgstr "Rumano"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:589
|
#: paperless/settings/__init__.py:593
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Ruso"
|
msgstr "Ruso"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:590
|
#: paperless/settings/__init__.py:594
|
||||||
msgid "Slovak"
|
msgid "Slovak"
|
||||||
msgstr "Eslovaco"
|
msgstr "Eslovaco"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:591
|
#: paperless/settings/__init__.py:595
|
||||||
msgid "Slovenian"
|
msgid "Slovenian"
|
||||||
msgstr "Esloveno"
|
msgstr "Esloveno"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:592
|
#: paperless/settings/__init__.py:596
|
||||||
msgid "Serbian"
|
msgid "Serbian"
|
||||||
msgstr "Serbio"
|
msgstr "Serbio"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:593
|
#: paperless/settings/__init__.py:597
|
||||||
msgid "Swedish"
|
msgid "Swedish"
|
||||||
msgstr "Sueco"
|
msgstr "Sueco"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:594
|
#: paperless/settings/__init__.py:598
|
||||||
msgid "Turkish"
|
msgid "Turkish"
|
||||||
msgstr "Turco"
|
msgstr "Turco"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:595
|
#: paperless/settings/__init__.py:599
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr "Ucraniano"
|
msgstr "Ucraniano"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:596
|
#: paperless/settings/__init__.py:600
|
||||||
msgid "Vietnamese"
|
msgid "Vietnamese"
|
||||||
msgstr "Vietnamita"
|
msgstr "Vietnamita"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:597
|
#: paperless/settings/__init__.py:601
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Chino simplificado"
|
msgstr "Chino simplificado"
|
||||||
|
|
||||||
#: paperless/settings/__init__.py:598
|
#: paperless/settings/__init__.py:602
|
||||||
msgid "Chinese Traditional"
|
msgid "Chinese Traditional"
|
||||||
msgstr "Chino tradicional"
|
msgstr "Chino tradicional"
|
||||||
|
|
||||||
|
|||||||
Loaded 100 of 158 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user