Compare commits

...
Author SHA1 Message Date
Crowdin Bot 8a505ce271 New Crowdin translations by GitHub Action 2026-10-10 12:28:37 +00:00
shamoon 138160cbda Fix: bulk reprocess latest version for root documents (#14385) 2026-10-08 18:50:44 +00:00
GitHub Actions 6d960c11d5 Auto translate strings 2026-10-08 18:40:22 +00:00
shamoon a35bd6e238 Fix: consistently use root doc for version action permissions (#14384) 2026-10-08 18:39:05 +00:00
Trenton H 474c630aa4 Fix: Don't attempt to index created dates which are not representable inside the FTS index (#14390) 2026-10-08 08:36:35 -07:00
Trenton H d7a9894400 Fix: retry a search index rebuild that was interrupted (#14379)
An interrupted rebuild left an empty index stamped as current, so the next
start reported it as up to date. Mark the rebuild as in progress and only
clear the marker once it completes.
2026-10-07 08:54:36 -07:00
GitHub Actions ee34a6598e Auto translate strings 2026-10-06 15:13:08 +00:00
Trenton H 3a3b3ef66a Chore: Upgrade runners to Ubuntu 26.04 (#14347)
* Moves runners to 26.04 and a few jobs to -slim variant

* Probably fixing the imagemagik 7 problems and maybe the frontend playwright thing?

* Compare thumbnails, but allow a little difference in the perceptual hash
2026-10-06 08:11:44 -07:00
83 changed files with 2236 additions and 2326 deletions

No files matched your search

+3 -3
View File
@@ -80,7 +80,7 @@ jobs:
needs: changes needs: changes
if: needs.changes.outputs.backend_changed == 'true' if: needs.changes.outputs.backend_changed == 'true'
name: "Python ${{ matrix.python-version }}" name: "Python ${{ matrix.python-version }}"
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
strategy: strategy:
@@ -114,7 +114,7 @@ jobs:
packages: unpaper tesseract-ocr imagemagick ghostscript poppler-utils packages: unpaper tesseract-ocr imagemagick ghostscript poppler-utils
- name: Configure ImageMagick - name: Configure ImageMagick
run: | run: |
sudo cp docker/rootfs/etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-6/policy.xml sudo cp docker/rootfs/etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-7/policy.xml
- name: Install Python dependencies - name: Install Python dependencies
env: env:
PYTHON_VERSION: ${{ steps.setup-python.outputs.python-version }} PYTHON_VERSION: ${{ steps.setup-python.outputs.python-version }}
@@ -158,7 +158,7 @@ jobs:
needs: changes needs: changes
if: needs.changes.outputs.backend_changed == 'true' if: needs.changes.outputs.backend_changed == 'true'
name: Check project typing name: Check project typing
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
env: env:
+3 -3
View File
@@ -24,10 +24,10 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- runner: ubuntu-24.04 - runner: ubuntu-26.04
arch: amd64 arch: amd64
platform: linux/amd64 platform: linux/amd64
- runner: ubuntu-24.04-arm - runner: ubuntu-26.04-arm
arch: arm64 arch: arm64
platform: linux/arm64 platform: linux/arm64
runs-on: ${{ matrix.runner }} runs-on: ${{ matrix.runner }}
@@ -163,7 +163,7 @@ jobs:
archive: false archive: false
merge-and-push: merge-and-push:
name: Merge and Push Manifest name: Merge and Push Manifest
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
needs: build-arch needs: build-arch
if: needs.build-arch.outputs.should-push == 'true' if: needs.build-arch.outputs.should-push == 'true'
environment: image-publishing environment: image-publishing
+2 -2
View File
@@ -65,7 +65,7 @@ jobs:
needs: changes needs: changes
if: needs.changes.outputs.docs_changed == 'true' if: needs.changes.outputs.docs_changed == 'true'
name: Build Documentation name: Build Documentation
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
steps: steps:
- uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0 - uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
- name: Checkout - name: Checkout
@@ -102,7 +102,7 @@ jobs:
name: Deploy Documentation name: Deploy Documentation
needs: [changes, build] needs: [changes, build]
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.changes.outputs.docs_changed == 'true' if: github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.changes.outputs.docs_changed == 'true'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
pages: write pages: write
id-token: write id-token: write
+6 -6
View File
@@ -72,7 +72,7 @@ jobs:
needs: changes needs: changes
if: needs.changes.outputs.frontend_changed == 'true' if: needs.changes.outputs.frontend_changed == 'true'
name: Install Dependencies name: Install Dependencies
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
steps: steps:
@@ -104,7 +104,7 @@ jobs:
name: Lint name: Lint
needs: [changes, install-dependencies] needs: [changes, install-dependencies]
if: needs.changes.outputs.frontend_changed == 'true' if: needs.changes.outputs.frontend_changed == 'true'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
steps: steps:
@@ -137,7 +137,7 @@ jobs:
name: "Unit Tests (${{ matrix.shard-index }}/${{ matrix.shard-count }})" name: "Unit Tests (${{ matrix.shard-index }}/${{ matrix.shard-count }})"
needs: [changes, install-dependencies] needs: [changes, install-dependencies]
if: needs.changes.outputs.frontend_changed == 'true' if: needs.changes.outputs.frontend_changed == 'true'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
strategy: strategy:
@@ -188,10 +188,10 @@ jobs:
name: E2E Tests name: E2E Tests
needs: [changes, install-dependencies] needs: [changes, install-dependencies]
if: needs.changes.outputs.frontend_changed == 'true' if: needs.changes.outputs.frontend_changed == 'true'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
container: mcr.microsoft.com/playwright:v1.62.1-noble container: mcr.microsoft.com/playwright:v1.62.1-resolute
env: env:
PLAYWRIGHT_BROWSERS_PATH: /ms-playwright PLAYWRIGHT_BROWSERS_PATH: /ms-playwright
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
@@ -246,7 +246,7 @@ jobs:
name: Frontend Build name: Frontend Build
needs: [changes, unit-tests, e2e-tests] needs: [changes, unit-tests, e2e-tests]
if: needs.changes.outputs.frontend_changed == 'true' if: needs.changes.outputs.frontend_changed == 'true'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
steps: steps:
+5 -5
View File
@@ -14,7 +14,7 @@ permissions: {}
jobs: jobs:
wait-for-docker: wait-for-docker:
name: Wait for Docker Build name: Wait for Docker Build
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
checks: read checks: read
statuses: read statuses: read
@@ -30,7 +30,7 @@ jobs:
build-release: build-release:
name: Build Release name: Build Release
needs: wait-for-docker needs: wait-for-docker
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
steps: steps:
@@ -73,7 +73,7 @@ jobs:
timeout-minutes: 12 timeout-minutes: 12
uses: $/.github/actions/apt-install uses: $/.github/actions/apt-install
with: with:
packages: gettext liblept5 packages: gettext libleptonica6
# ---- Build Documentation ---- # ---- Build Documentation ----
- name: Build documentation - name: Build documentation
env: env:
@@ -145,7 +145,7 @@ jobs:
publish-release: publish-release:
name: Publish Release name: Publish Release
needs: build-release needs: build-release
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: write contents: write
pull-requests: write pull-requests: write
@@ -197,7 +197,7 @@ jobs:
name: Append Changelog name: Append Changelog
needs: publish-release needs: publish-release
if: needs.publish-release.outputs.prerelease == 'false' if: needs.publish-release.outputs.prerelease == 'false'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: write contents: write
pull-requests: write pull-requests: write
+2 -2
View File
@@ -15,7 +15,7 @@ permissions:
jobs: jobs:
zizmor: zizmor:
name: Run zizmor name: Run zizmor
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
contents: read contents: read
actions: read actions: read
@@ -29,7 +29,7 @@ jobs:
uses: zizmorcore/zizmor-action@cc914d7f3750a2d13d75c7f184a1060aa0e9d482 # v0.6.4 uses: zizmorcore/zizmor-action@cc914d7f3750a2d13d75c7f184a1060aa0e9d482 # v0.6.4
semgrep: semgrep:
name: Semgrep CE name: Semgrep CE
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
container: container:
image: semgrep/semgrep:1.155.0@sha256:cc869c685dcc0fe497c86258da9f205397d8108e56d21a86082ea4886e52784d image: semgrep/semgrep:1.155.0@sha256:cc869c685dcc0fe497c86258da9f205397d8108e56d21a86082ea4886e52784d
if: github.actor != 'dependabot[bot]' if: github.actor != 'dependabot[bot]'
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
cleanup-images: cleanup-images:
name: Cleanup Image Tags for ${{ matrix.primary-name }} name: Cleanup Image Tags for ${{ matrix.primary-name }}
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
environment: registry-maintenance environment: registry-maintenance
strategy: strategy:
fail-fast: false fail-fast: false
@@ -42,7 +42,7 @@ jobs:
cleanup-untagged-images: cleanup-untagged-images:
name: Cleanup Untagged Images Tags for ${{ matrix.primary-name }} name: Cleanup Untagged Images Tags for ${{ matrix.primary-name }}
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
needs: needs:
- cleanup-images - cleanup-images
environment: registry-maintenance environment: registry-maintenance
+1 -1
View File
@@ -21,7 +21,7 @@ on:
jobs: jobs:
analyze: analyze:
name: Analyze name: Analyze
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
actions: read actions: read
contents: read contents: read
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
synchronize-with-crowdin: synchronize-with-crowdin:
name: Crowdin Sync name: Crowdin Sync
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
environment: translation-sync environment: translation-sync
steps: steps:
- name: Checkout - name: Checkout
+1 -1
View File
@@ -7,7 +7,7 @@ jobs:
# Note: peakoss/anti-slop does not support the `issues` event yet (all of its # Note: peakoss/anti-slop does not support the `issues` event yet (all of its
# issue inputs are still commented out upstream), so the checks that the PR Bot # issue inputs are still commented out upstream), so the checks that the PR Bot
# workflow gets from the action are implemented manually here. # workflow gets from the action are implemented manually here.
runs-on: ubuntu-latest runs-on: ubuntu-slim
permissions: permissions:
issues: write issues: write
steps: steps:
+2 -2
View File
@@ -4,7 +4,7 @@ on:
types: [opened] types: [opened]
jobs: jobs:
Anti-slop: Anti-slop:
runs-on: ubuntu-latest runs-on: ubuntu-slim
permissions: permissions:
contents: read contents: read
issues: read issues: read
@@ -24,7 +24,7 @@ jobs:
ASLOP-PR-VERIFY ASLOP-PR-VERIFY
pr-bot: pr-bot:
name: Automated PR Bot name: Automated PR Bot
runs-on: ubuntu-latest runs-on: ubuntu-slim
# Runs after Anti-slop so the welcome comment can see whether the PR was closed # Runs after Anti-slop so the welcome comment can see whether the PR was closed
# instead of racing it. Still runs if that job fails, so labeling is not lost. # instead of racing it. Still runs if that job fails, so labeling is not lost.
needs: Anti-slop needs: Anti-slop
+1 -1
View File
@@ -12,7 +12,7 @@ permissions:
jobs: jobs:
pr_opened_or_reopened: pr_opened_or_reopened:
name: pr_opened_or_reopened name: pr_opened_or_reopened
runs-on: ubuntu-24.04 runs-on: ubuntu-slim
permissions: permissions:
# write permission is required for autolabeler # write permission is required for autolabeler
pull-requests: write pull-requests: write
+5 -5
View File
@@ -9,7 +9,7 @@ jobs:
stale: stale:
name: 'Stale' name: 'Stale'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
issues: write issues: write
pull-requests: write pull-requests: write
@@ -34,7 +34,7 @@ jobs:
lock-threads: lock-threads:
name: 'Lock Old Threads' name: 'Lock Old Threads'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-26.04
permissions: permissions:
issues: write issues: write
pull-requests: write pull-requests: write
@@ -58,7 +58,7 @@ jobs:
close-answered-discussions: close-answered-discussions:
name: 'Close Answered Discussions' name: 'Close Answered Discussions'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-slim
permissions: permissions:
discussions: write discussions: write
steps: steps:
@@ -117,7 +117,7 @@ jobs:
close-outdated-discussions: close-outdated-discussions:
name: 'Close Outdated Discussions' name: 'Close Outdated Discussions'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-slim
permissions: permissions:
discussions: write discussions: write
steps: steps:
@@ -211,7 +211,7 @@ jobs:
close-unsupported-feature-requests: close-unsupported-feature-requests:
name: 'Close Unsupported Feature Requests' name: 'Close Unsupported Feature Requests'
if: github.repository_owner == 'paperless-ngx' if: github.repository_owner == 'paperless-ngx'
runs-on: ubuntu-24.04 runs-on: ubuntu-slim
permissions: permissions:
discussions: write discussions: write
steps: steps:
+1 -1
View File
@@ -8,7 +8,7 @@ env:
jobs: jobs:
generate-translate-strings: generate-translate-strings:
name: Generate Translation Strings name: Generate Translation Strings
runs-on: ubuntu-latest runs-on: ubuntu-26.04
environment: translation-sync environment: translation-sync
permissions: permissions:
contents: write contents: write
+1 -1
View File
@@ -8525,7 +8525,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">54</context> <context context-type="linenumber">54</context>
</context-group> </context-group>
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</target> <target state="translated">{VAR_PLURAL, plural, =1 {1 Vorschlag unten verfügbar} other {<x id="INTERPOLATION"/> Vorschläge unten verfügbar}}</target>
</trans-unit> </trans-unit>
<trans-unit id="4169875112244042673" datatype="html" approved="yes"> <trans-unit id="4169875112244042673" datatype="html" approved="yes">
<source>Suggestion options</source> <source>Suggestion options</source>
+4 -4
View File
@@ -8525,7 +8525,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">54</context> <context context-type="linenumber">54</context>
</context-group> </context-group>
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</target> <target state="translated">{VAR_PLURAL, plural, one {<x id="INTERPOLATION"/> suggerimenti disponibili sotto} =1 {1 suggerimento disponibile sotto} other {<x id="INTERPOLATION"/> suggerimenti disponibili sotto}}</target>
</trans-unit> </trans-unit>
<trans-unit id="4169875112244042673" datatype="html"> <trans-unit id="4169875112244042673" datatype="html">
<source>Suggestion options</source> <source>Suggestion options</source>
@@ -9219,7 +9219,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context>
<context context-type="linenumber">40,41</context> <context context-type="linenumber">40,41</context>
</context-group> </context-group>
<target state="needs-translation">Copy content</target> <target state="translated">Copia contenuto</target>
</trans-unit> </trans-unit>
<trans-unit id="2266163016683537825" datatype="html"> <trans-unit id="2266163016683537825" datatype="html">
<source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source>
@@ -9479,7 +9479,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">360,361</context> <context context-type="linenumber">360,361</context>
</context-group> </context-group>
<target state="needs-translation">Barcodes</target> <target state="translated">Codici a barre</target>
</trans-unit> </trans-unit>
<trans-unit id="6992781481378431874" datatype="html" approved="yes"> <trans-unit id="6992781481378431874" datatype="html" approved="yes">
<source>Original document metadata</source> <source>Original document metadata</source>
@@ -13376,7 +13376,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">335</context> <context context-type="linenumber">335</context>
</context-group> </context-group>
<target state="needs-translation">Store Barcode Contents</target> <target state="translated">Contenuti Codice a Barre</target>
</trans-unit> </trans-unit>
<trans-unit id="7011909364081812031" datatype="html"> <trans-unit id="7011909364081812031" datatype="html">
<source>AI Enabled</source> <source>AI Enabled</source>
+18 -18
View File
@@ -17,7 +17,7 @@
<context context-type="linenumber">386,393</context> <context context-type="linenumber">386,393</context>
</context-group> </context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note> <note priority="1" from="description">Currently selected slide number read by screen reader</note>
<target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> of <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target> <target state="translated"> Slajd <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> z <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html"> <trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source> <source>Previous</source>
@@ -507,7 +507,7 @@
<context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="sourcefile">src/app/app.component.ts</context>
<context context-type="linenumber">225</context> <context context-type="linenumber">225</context>
</context-group> </context-group>
<target state="needs-translation">Tasks helps you track background work, what needs attention, and what recently completed.</target> <target state="translated">Zadania pomagają śledzić pracę w tle, to, co wymaga uwagi i co zostało ostatnio ukończone.</target>
</trans-unit> </trans-unit>
<trans-unit id="2755033621682206902" datatype="html"> <trans-unit id="2755033621682206902" datatype="html">
<source>Check out the settings for various tweaks to the web app.</source> <source>Check out the settings for various tweaks to the web app.</source>
@@ -571,7 +571,7 @@
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context> <context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
<context context-type="linenumber">35</context> <context context-type="linenumber">35</context>
</context-group> </context-group>
<target state="needs-translation">This value overrides <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, which is set outside Paperless.</target> <target state="translated">Ta wartość zastępuje <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, która jest ustawiona poza Paperless.</target>
</trans-unit> </trans-unit>
<trans-unit id="7221396516204435584" datatype="html"> <trans-unit id="7221396516204435584" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</source> <source><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</source>
@@ -579,7 +579,7 @@
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context> <context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
<context context-type="linenumber">37</context> <context context-type="linenumber">37</context>
</context-group> </context-group>
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</target> <target state="translated"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> jest ustawiony poza Paperless. Wpisz tutaj wartość, aby go zastąpić.</target>
</trans-unit> </trans-unit>
<trans-unit id="8318849619178340389" datatype="html"> <trans-unit id="8318849619178340389" datatype="html">
<source>Use the externally configured value</source> <source>Use the externally configured value</source>
@@ -587,7 +587,7 @@
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context> <context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
<context context-type="linenumber">42</context> <context context-type="linenumber">42</context>
</context-group> </context-group>
<target state="needs-translation">Use the externally configured value</target> <target state="translated">Użyj wartości skonfigurowanej zewnętrznie</target>
</trans-unit> </trans-unit>
<trans-unit id="6032629623003430385" datatype="html"> <trans-unit id="6032629623003430385" datatype="html">
<source>Reset to external</source> <source>Reset to external</source>
@@ -595,7 +595,7 @@
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context> <context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<target state="needs-translation">Reset to external</target> <target state="translated">Zresetuj na zewnętrzny</target>
</trans-unit> </trans-unit>
<trans-unit id="7808756054397155068" datatype="html"> <trans-unit id="7808756054397155068" datatype="html">
<source>Reset</source> <source>Reset</source>
@@ -1411,7 +1411,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">264</context> <context context-type="linenumber">264</context>
</context-group> </context-group>
<target state="needs-translation">Both</target> <target state="translated">Obydwa</target>
</trans-unit> </trans-unit>
<trans-unit id="8967224283122923634" datatype="html"> <trans-unit id="8967224283122923634" datatype="html">
<source>ML only</source> <source>ML only</source>
@@ -1419,7 +1419,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">266</context> <context context-type="linenumber">266</context>
</context-group> </context-group>
<target state="needs-translation">ML only</target> <target state="translated">Tylko ML</target>
</trans-unit> </trans-unit>
<trans-unit id="6418969597665857901" datatype="html"> <trans-unit id="6418969597665857901" datatype="html">
<source>AI only</source> <source>AI only</source>
@@ -1427,7 +1427,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">268</context> <context context-type="linenumber">268</context>
</context-group> </context-group>
<target state="needs-translation">AI only</target> <target state="translated">Tylko SI</target>
</trans-unit> </trans-unit>
<trans-unit id="1043449647727456069" datatype="html"> <trans-unit id="1043449647727456069" datatype="html">
<source>Automatically request suggestions for inbox documents</source> <source>Automatically request suggestions for inbox documents</source>
@@ -2211,7 +2211,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context> <context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">4,5</context> <context context-type="linenumber">4,5</context>
</context-group> </context-group>
<target state="needs-translation">Tasks shows detailed information about document consumption and system tasks.</target> <target state="translated">Zadania zawierają szczegóły dotyczące przetwarzania dokumentów i zadań systemowych.</target>
</trans-unit> </trans-unit>
<trans-unit id="103921551219467537" datatype="html"> <trans-unit id="103921551219467537" datatype="html">
<source>Clear selection</source> <source>Clear selection</source>
@@ -2327,7 +2327,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context> <context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">92,93</context> <context context-type="linenumber">92,93</context>
</context-group> </context-group>
<target state="needs-translation">Search tasks</target> <target state="translated">Szukaj w zadaniach</target>
</trans-unit> </trans-unit>
<trans-unit id="6849725902312323996" datatype="html" approved="yes"> <trans-unit id="6849725902312323996" datatype="html" approved="yes">
<source>Reset filters</source> <source>Reset filters</source>
@@ -2651,7 +2651,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context> <context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">207</context> <context context-type="linenumber">207</context>
</context-group> </context-group>
<target state="needs-translation">View task details</target> <target state="translated">Wyświetl szczegóły zadania</target>
</trans-unit> </trans-unit>
<trans-unit id="1536087519743707362" datatype="html"> <trans-unit id="1536087519743707362" datatype="html">
<source>Dismiss</source> <source>Dismiss</source>
@@ -4555,7 +4555,7 @@
<context context-type="sourcefile">src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html</context>
<context context-type="linenumber">9</context> <context context-type="linenumber">9</context>
</context-group> </context-group>
<target state="needs-translation">Rotate counterclockwise</target> <target state="translated">Obróć w lewo</target>
</trans-unit> </trans-unit>
<trans-unit id="631338357809243389" datatype="html"> <trans-unit id="631338357809243389" datatype="html">
<source>Rotate clockwise</source> <source>Rotate clockwise</source>
@@ -4563,7 +4563,7 @@
<context context-type="sourcefile">src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/confirm-dialog/rotate-confirm-dialog/rotate-confirm-dialog.component.html</context>
<context context-type="linenumber">19</context> <context context-type="linenumber">19</context>
</context-group> </context-group>
<target state="needs-translation">Rotate clockwise</target> <target state="translated">Obróć w prawo</target>
</trans-unit> </trans-unit>
<trans-unit id="8157388568390631653" datatype="html"> <trans-unit id="8157388568390631653" datatype="html">
<source>Note that only PDFs will be rotated.</source> <source>Note that only PDFs will be rotated.</source>
@@ -7641,7 +7641,7 @@
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context> <context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
<context context-type="linenumber">17</context> <context context-type="linenumber">17</context>
</context-group> </context-group>
<target state="translated">Obróć wybrane strony przeciwnie do ruchu wskazówek zegara</target> <target state="translated">Obróć zaznaczone strony w lewo</target>
</trans-unit> </trans-unit>
<trans-unit id="4787219034890830544" datatype="html"> <trans-unit id="4787219034890830544" datatype="html">
<source>Rotate selected pages clockwise</source> <source>Rotate selected pages clockwise</source>
@@ -7649,7 +7649,7 @@
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context> <context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
<context context-type="linenumber">20</context> <context context-type="linenumber">20</context>
</context-group> </context-group>
<target state="translated">Obróć wybrane strony zgodnie z ruchem wskazówek zegara</target> <target state="translated">Obróć zaznaczone strony w prawo</target>
</trans-unit> </trans-unit>
<trans-unit id="3441043765105475130" datatype="html"> <trans-unit id="3441043765105475130" datatype="html">
<source>Delete selected pages</source> <source>Delete selected pages</source>
@@ -7665,7 +7665,7 @@
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context> <context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
<context context-type="linenumber">33</context> <context context-type="linenumber">33</context>
</context-group> </context-group>
<target state="translated">Obróć stronę przeciwnie do ruchu wskazówek zegara</target> <target state="translated">Obróć stronę w lewo</target>
</trans-unit> </trans-unit>
<trans-unit id="3450236521040548507" datatype="html"> <trans-unit id="3450236521040548507" datatype="html">
<source>Rotate page clockwise</source> <source>Rotate page clockwise</source>
@@ -7673,7 +7673,7 @@
<context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context> <context context-type="sourcefile">src/app/components/common/pdf-editor/pdf-editor.component.html</context>
<context context-type="linenumber">36</context> <context context-type="linenumber">36</context>
</context-group> </context-group>
<target state="translated">Obróć stronę zgodnie z ruchem wskazówek zegara</target> <target state="translated">Obróć stronę w prawo</target>
</trans-unit> </trans-unit>
<trans-unit id="7647925464077975347" datatype="html"> <trans-unit id="7647925464077975347" datatype="html">
<source>Delete page</source> <source>Delete page</source>
+14 -14
View File
@@ -17,7 +17,7 @@
<context context-type="linenumber">386,393</context> <context context-type="linenumber">386,393</context>
</context-group> </context-group>
<note priority="1" from="description">Currently selected slide number read by screen reader</note> <note priority="1" from="description">Currently selected slide number read by screen reader</note>
<target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> of <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target> <target state="translated"> Слайд <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> из <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
</trans-unit> </trans-unit>
<trans-unit id="ngb.carousel.previous" datatype="html"> <trans-unit id="ngb.carousel.previous" datatype="html">
<source>Previous</source> <source>Previous</source>
@@ -1403,7 +1403,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">259,260</context> <context context-type="linenumber">259,260</context>
</context-group> </context-group>
<target state="needs-translation">Suggestions default to</target> <target state="translated">Предложения по умолчанию для</target>
</trans-unit> </trans-unit>
<trans-unit id="6251586038459969294" datatype="html"> <trans-unit id="6251586038459969294" datatype="html">
<source>Both</source> <source>Both</source>
@@ -1411,7 +1411,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">264</context> <context context-type="linenumber">264</context>
</context-group> </context-group>
<target state="needs-translation">Both</target> <target state="translated">Оба</target>
</trans-unit> </trans-unit>
<trans-unit id="8967224283122923634" datatype="html"> <trans-unit id="8967224283122923634" datatype="html">
<source>ML only</source> <source>ML only</source>
@@ -1419,7 +1419,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">266</context> <context context-type="linenumber">266</context>
</context-group> </context-group>
<target state="needs-translation">ML only</target> <target state="translated">Только ML</target>
</trans-unit> </trans-unit>
<trans-unit id="6418969597665857901" datatype="html"> <trans-unit id="6418969597665857901" datatype="html">
<source>AI only</source> <source>AI only</source>
@@ -1427,7 +1427,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">268</context> <context context-type="linenumber">268</context>
</context-group> </context-group>
<target state="needs-translation">AI only</target> <target state="translated">Только ИИ</target>
</trans-unit> </trans-unit>
<trans-unit id="1043449647727456069" datatype="html"> <trans-unit id="1043449647727456069" datatype="html">
<source>Automatically request suggestions for inbox documents</source> <source>Automatically request suggestions for inbox documents</source>
@@ -8525,7 +8525,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">54</context> <context context-type="linenumber">54</context>
</context-group> </context-group>
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</target> <target state="translated">{VAR_PLURAL, plural, =1 {1 совет} other {<x id="INTERPOLATION"/> советов}}</target>
</trans-unit> </trans-unit>
<trans-unit id="4169875112244042673" datatype="html"> <trans-unit id="4169875112244042673" datatype="html">
<source>Suggestion options</source> <source>Suggestion options</source>
@@ -8533,7 +8533,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">65,66</context> <context context-type="linenumber">65,66</context>
</context-group> </context-group>
<target state="needs-translation">Suggestion options</target> <target state="translated">Настройки советов</target>
</trans-unit> </trans-unit>
<trans-unit id="3145824396228856507" datatype="html"> <trans-unit id="3145824396228856507" datatype="html">
<source>Not using default</source> <source>Not using default</source>
@@ -8541,7 +8541,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">69,70</context> <context context-type="linenumber">69,70</context>
</context-group> </context-group>
<target state="needs-translation">Not using default</target> <target state="translated">Не использует по умолчанию</target>
</trans-unit> </trans-unit>
<trans-unit id="8102623853570619759" datatype="html"> <trans-unit id="8102623853570619759" datatype="html">
<source>Suggest using:</source> <source>Suggest using:</source>
@@ -8549,7 +8549,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">74,75</context> <context context-type="linenumber">74,75</context>
</context-group> </context-group>
<target state="needs-translation">Suggest using:</target> <target state="translated">Предложить используя:</target>
</trans-unit> </trans-unit>
<trans-unit id="5799391967036896978" datatype="html"> <trans-unit id="5799391967036896978" datatype="html">
<source>ML</source> <source>ML</source>
@@ -8557,7 +8557,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">77</context> <context context-type="linenumber">77</context>
</context-group> </context-group>
<target state="needs-translation">ML</target> <target state="translated">ML</target>
</trans-unit> </trans-unit>
<trans-unit id="3484984238852181071" datatype="html"> <trans-unit id="3484984238852181071" datatype="html">
<source>AI</source> <source>AI</source>
@@ -8565,7 +8565,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">81</context> <context context-type="linenumber">81</context>
</context-group> </context-group>
<target state="needs-translation">AI</target> <target state="translated">ИИ</target>
</trans-unit> </trans-unit>
<trans-unit id="9180110319941008393" datatype="html"> <trans-unit id="9180110319941008393" datatype="html">
<source>Environment</source> <source>Environment</source>
@@ -9219,7 +9219,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context>
<context context-type="linenumber">40,41</context> <context context-type="linenumber">40,41</context>
</context-group> </context-group>
<target state="needs-translation">Copy content</target> <target state="translated">Скопировать содержимое</target>
</trans-unit> </trans-unit>
<trans-unit id="2266163016683537825" datatype="html"> <trans-unit id="2266163016683537825" datatype="html">
<source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source>
@@ -9479,7 +9479,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">360,361</context> <context context-type="linenumber">360,361</context>
</context-group> </context-group>
<target state="needs-translation">Barcodes</target> <target state="translated">Штрихкоды</target>
</trans-unit> </trans-unit>
<trans-unit id="6992781481378431874" datatype="html" approved="yes"> <trans-unit id="6992781481378431874" datatype="html" approved="yes">
<source>Original document metadata</source> <source>Original document metadata</source>
@@ -13375,7 +13375,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">335</context> <context context-type="linenumber">335</context>
</context-group> </context-group>
<target state="needs-translation">Store Barcode Contents</target> <target state="translated">Сохранить содержимое штрихкодов</target>
</trans-unit> </trans-unit>
<trans-unit id="7011909364081812031" datatype="html"> <trans-unit id="7011909364081812031" datatype="html">
<source>AI Enabled</source> <source>AI Enabled</source>
File diff suppressed because it is too large. Load diff
+58 -58
View File
@@ -595,7 +595,7 @@
<context context-type="sourcefile">src/app/components/admin/config/config.component.html</context> <context context-type="sourcefile">src/app/components/admin/config/config.component.html</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">43</context>
</context-group> </context-group>
<target state="needs-translation">Reset to external</target> <target state="translated">重置为外部</target>
</trans-unit> </trans-unit>
<trans-unit id="7808756054397155068" datatype="html"> <trans-unit id="7808756054397155068" datatype="html">
<source>Reset</source> <source>Reset</source>
@@ -1135,7 +1135,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">115,116</context> <context context-type="linenumber">115,116</context>
</context-group> </context-group>
<target state="needs-translation">Sidebar items to show:</target> <target state="translated">侧边栏显示项:</target>
</trans-unit> </trans-unit>
<trans-unit id="1356890996281769972" datatype="html"> <trans-unit id="1356890996281769972" datatype="html">
<source>Dark mode</source> <source>Dark mode</source>
@@ -1419,7 +1419,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">266</context> <context context-type="linenumber">266</context>
</context-group> </context-group>
<target state="needs-translation">ML only</target> <target state="translated">仅限 ML</target>
</trans-unit> </trans-unit>
<trans-unit id="6418969597665857901" datatype="html"> <trans-unit id="6418969597665857901" datatype="html">
<source>AI only</source> <source>AI only</source>
@@ -1427,7 +1427,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">268</context> <context context-type="linenumber">268</context>
</context-group> </context-group>
<target state="needs-translation">AI only</target> <target state="translated">仅限 AI</target>
</trans-unit> </trans-unit>
<trans-unit id="1043449647727456069" datatype="html"> <trans-unit id="1043449647727456069" datatype="html">
<source>Automatically request suggestions for inbox documents</source> <source>Automatically request suggestions for inbox documents</source>
@@ -2887,7 +2887,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context> <context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">104</context> <context context-type="linenumber">104</context>
</context-group> </context-group>
<target state="needs-translation">Apply AI Suggestions</target> <target state="translated">应用 AI 建议</target>
</trans-unit> </trans-unit>
<trans-unit id="9172233176401579786" datatype="html"> <trans-unit id="9172233176401579786" datatype="html">
<source>Scheduled</source> <source>Scheduled</source>
@@ -3939,7 +3939,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context>
<context context-type="linenumber">2,3</context> <context context-type="linenumber">2,3</context>
</context-group> </context-group>
<target state="needs-translation">Share links</target> <target state="translated">分享链接</target>
</trans-unit> </trans-unit>
<trans-unit id="7844706011418789951" datatype="html"> <trans-unit id="7844706011418789951" datatype="html">
<source>Administration</source> <source>Administration</source>
@@ -4259,7 +4259,7 @@
<context context-type="sourcefile">src/app/data/saved-view-icons.ts</context> <context context-type="sourcefile">src/app/data/saved-view-icons.ts</context>
<context context-type="linenumber">21</context> <context context-type="linenumber">21</context>
</context-group> </context-group>
<target state="needs-translation">Chat</target> <target state="translated">聊天</target>
</trans-unit> </trans-unit>
<trans-unit id="8066608938393600549" datatype="html"> <trans-unit id="8066608938393600549" datatype="html">
<source>Message</source> <source>Message</source>
@@ -4539,7 +4539,7 @@
<context context-type="sourcefile">src/app/components/common/confirm-dialog/reprocess-confirm-dialog/reprocess-confirm-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/confirm-dialog/reprocess-confirm-dialog/reprocess-confirm-dialog.component.html</context>
<context context-type="linenumber">16,17</context> <context context-type="linenumber">16,17</context>
</context-group> </context-group>
<target state="needs-translation">Use remote OCR</target> <target state="translated">使用远程 OCR</target>
</trans-unit> </trans-unit>
<trans-unit id="6733578401091585663" datatype="html"> <trans-unit id="6733578401091585663" datatype="html">
<source>Sends the document to the configured remote OCR service, which may incur costs.</source> <source>Sends the document to the configured remote OCR service, which may incur costs.</source>
@@ -4547,7 +4547,7 @@
<context context-type="sourcefile">src/app/components/common/confirm-dialog/reprocess-confirm-dialog/reprocess-confirm-dialog.component.html</context> <context context-type="sourcefile">src/app/components/common/confirm-dialog/reprocess-confirm-dialog/reprocess-confirm-dialog.component.html</context>
<context context-type="linenumber">17,18</context> <context context-type="linenumber">17,18</context>
</context-group> </context-group>
<target state="needs-translation">Sends the document to the configured remote OCR service, which may incur costs.</target> <target state="translated">将文档发送到已配置的远程 OCR 服务,可能会产生费用。</target>
</trans-unit> </trans-unit>
<trans-unit id="3883144805282469432" datatype="html"> <trans-unit id="3883144805282469432" datatype="html">
<source>Rotate counterclockwise</source> <source>Rotate counterclockwise</source>
@@ -4655,7 +4655,7 @@
<context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">16</context>
</context-group> </context-group>
<target state="needs-translation">Open date picker</target> <target state="translated">打开日期选择器</target>
</trans-unit> </trans-unit>
<trans-unit id="6048892649018070225" datatype="html"> <trans-unit id="6048892649018070225" datatype="html">
<source>Today</source> <source>Today</source>
@@ -4779,7 +4779,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">154</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<target state="needs-translation">Remove query</target> <target state="translated">移除查询</target>
</trans-unit> </trans-unit>
<trans-unit id="3184700926171002527" datatype="html"> <trans-unit id="3184700926171002527" datatype="html">
<source>Any</source> <source>Any</source>
@@ -4823,7 +4823,7 @@
<context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.html</context>
<context context-type="linenumber">196</context> <context context-type="linenumber">196</context>
</context-group> </context-group>
<target state="needs-translation">Remove expression</target> <target state="translated">移除表达式</target>
</trans-unit> </trans-unit>
<trans-unit id="6630533861307510614" datatype="html"> <trans-unit id="6630533861307510614" datatype="html">
<source>Clear created relative date</source> <source>Clear created relative date</source>
@@ -6931,7 +6931,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">58</context> <context context-type="linenumber">58</context>
</context-group> </context-group>
<target state="needs-translation">Remote OCR</target> <target state="translated">远程 OCR</target>
</trans-unit> </trans-unit>
<trans-unit id="4101630920511881483" datatype="html"> <trans-unit id="4101630920511881483" datatype="html">
<source>Apply AI suggestions</source> <source>Apply AI suggestions</source>
@@ -6939,7 +6939,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">159</context> <context context-type="linenumber">159</context>
</context-group> </context-group>
<target state="needs-translation">Apply AI suggestions</target> <target state="translated">应用 AI 建议</target>
</trans-unit> </trans-unit>
<trans-unit id="5701618810648052610" datatype="html"> <trans-unit id="5701618810648052610" datatype="html">
<source>Title</source> <source>Title</source>
@@ -6975,7 +6975,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">186</context> <context context-type="linenumber">186</context>
</context-group> </context-group>
<target state="needs-translation">Created date</target> <target state="translated">创建日期</target>
</trans-unit> </trans-unit>
<trans-unit id="4522609911791833187" datatype="html"> <trans-unit id="4522609911791833187" datatype="html">
<source>Has any of these tags</source> <source>Has any of these tags</source>
@@ -7396,7 +7396,7 @@
<context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context> <context context-type="sourcefile">src/app/components/common/input/document-link/document-link.component.html</context>
<context context-type="linenumber">52,53</context> <context context-type="linenumber">52,53</context>
</context-group> </context-group>
<target state="needs-translation">Unavailable</target> <target state="translated">不可用</target>
</trans-unit> </trans-unit>
<trans-unit id="5676637575587497817" datatype="html"> <trans-unit id="5676637575587497817" datatype="html">
<source>Search for documents</source> <source>Search for documents</source>
@@ -7440,7 +7440,7 @@
<context context-type="sourcefile">src/app/components/common/input/entries/entries.component.html</context> <context context-type="sourcefile">src/app/components/common/input/entries/entries.component.html</context>
<context context-type="linenumber">16</context> <context context-type="linenumber">16</context>
</context-group> </context-group>
<target state="needs-translation">Remove entry</target> <target state="translated">移除条目</target>
</trans-unit> </trans-unit>
<trans-unit id="6932865105766151309" datatype="html"> <trans-unit id="6932865105766151309" datatype="html">
<source>Upload</source> <source>Upload</source>
@@ -7493,7 +7493,7 @@
<context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context> <context context-type="sourcefile">src/app/components/common/input/select/select.component.html</context>
<context context-type="linenumber">41</context> <context context-type="linenumber">41</context>
</context-group> </context-group>
<target state="needs-translation">Remove item</target> <target state="translated">移除项目</target>
</trans-unit> </trans-unit>
<trans-unit id="3686284950598311784" datatype="html"> <trans-unit id="3686284950598311784" datatype="html">
<source>Private</source> <source>Private</source>
@@ -7769,7 +7769,7 @@
<context context-type="sourcefile">src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html</context>
<context context-type="linenumber">61</context> <context context-type="linenumber">61</context>
</context-group> </context-group>
<target state="needs-translation">Clear selected users</target> <target state="translated">清除选中的用户</target>
</trans-unit> </trans-unit>
<trans-unit id="8999708063434507268" datatype="html"> <trans-unit id="8999708063434507268" datatype="html">
<source>Hide unowned</source> <source>Hide unowned</source>
@@ -8481,7 +8481,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">12,13</context> <context context-type="linenumber">12,13</context>
</context-group> </context-group>
<target state="needs-translation">No suggestions</target> <target state="translated">无建议</target>
</trans-unit> </trans-unit>
<trans-unit id="5320136382998259826" datatype="html"> <trans-unit id="5320136382998259826" datatype="html">
<source>Suggest</source> <source>Suggest</source>
@@ -8533,7 +8533,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">65,66</context> <context context-type="linenumber">65,66</context>
</context-group> </context-group>
<target state="needs-translation">Suggestion options</target> <target state="translated">建议选项</target>
</trans-unit> </trans-unit>
<trans-unit id="3145824396228856507" datatype="html"> <trans-unit id="3145824396228856507" datatype="html">
<source>Not using default</source> <source>Not using default</source>
@@ -8541,7 +8541,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">69,70</context> <context context-type="linenumber">69,70</context>
</context-group> </context-group>
<target state="needs-translation">Not using default</target> <target state="translated">不使用默认值</target>
</trans-unit> </trans-unit>
<trans-unit id="8102623853570619759" datatype="html"> <trans-unit id="8102623853570619759" datatype="html">
<source>Suggest using:</source> <source>Suggest using:</source>
@@ -8549,7 +8549,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">74,75</context> <context context-type="linenumber">74,75</context>
</context-group> </context-group>
<target state="needs-translation">Suggest using:</target> <target state="translated">建议使用:</target>
</trans-unit> </trans-unit>
<trans-unit id="5799391967036896978" datatype="html"> <trans-unit id="5799391967036896978" datatype="html">
<source>ML</source> <source>ML</source>
@@ -8557,7 +8557,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">77</context> <context context-type="linenumber">77</context>
</context-group> </context-group>
<target state="needs-translation">ML</target> <target state="translated">ML</target>
</trans-unit> </trans-unit>
<trans-unit id="3484984238852181071" datatype="html"> <trans-unit id="3484984238852181071" datatype="html">
<source>AI</source> <source>AI</source>
@@ -8565,7 +8565,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">81</context> <context context-type="linenumber">81</context>
</context-group> </context-group>
<target state="needs-translation">AI</target> <target state="translated">AI</target>
</trans-unit> </trans-unit>
<trans-unit id="9180110319941008393" datatype="html"> <trans-unit id="9180110319941008393" datatype="html">
<source>Environment</source> <source>Environment</source>
@@ -9219,7 +9219,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context>
<context context-type="linenumber">40,41</context> <context context-type="linenumber">40,41</context>
</context-group> </context-group>
<target state="needs-translation">Copy content</target> <target state="translated">复制内容</target>
</trans-unit> </trans-unit>
<trans-unit id="2266163016683537825" datatype="html"> <trans-unit id="2266163016683537825" datatype="html">
<source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source>
@@ -9255,7 +9255,7 @@
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context> <context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<context context-type="linenumber">154</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<target state="needs-translation">Download options</target> <target state="translated">下载选项</target>
</trans-unit> </trans-unit>
<trans-unit id="8659635229098859487" datatype="html"> <trans-unit id="8659635229098859487" datatype="html">
<source>Download original</source> <source>Download original</source>
@@ -9479,7 +9479,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">360,361</context> <context context-type="linenumber">360,361</context>
</context-group> </context-group>
<target state="needs-translation">Barcodes</target> <target state="translated">条形码</target>
</trans-unit> </trans-unit>
<trans-unit id="6992781481378431874" datatype="html"> <trans-unit id="6992781481378431874" datatype="html">
<source>Original document metadata</source> <source>Original document metadata</source>
@@ -9727,7 +9727,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1074</context> <context context-type="linenumber">1074</context>
</context-group> </context-group>
<target state="needs-translation">You have unsaved changes to the content of this version.</target> <target state="translated">此版本的内容有未保存的更改。</target>
</trans-unit> </trans-unit>
<trans-unit id="85184271222513014" datatype="html"> <trans-unit id="85184271222513014" datatype="html">
<source>Switching versions will discard them.</source> <source>Switching versions will discard them.</source>
@@ -9735,7 +9735,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1075</context> <context context-type="linenumber">1075</context>
</context-group> </context-group>
<target state="needs-translation">Switching versions will discard them.</target> <target state="translated">切换版本将丢弃这些更改。</target>
</trans-unit> </trans-unit>
<trans-unit id="2565707334844767610" datatype="html"> <trans-unit id="2565707334844767610" datatype="html">
<source>Discard and switch</source> <source>Discard and switch</source>
@@ -9743,7 +9743,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1077</context> <context context-type="linenumber">1077</context>
</context-group> </context-group>
<target state="needs-translation">Discard and switch</target> <target state="translated">丢弃并切换</target>
</trans-unit> </trans-unit>
<trans-unit id="2109314380040637387" datatype="html"> <trans-unit id="2109314380040637387" datatype="html">
<source>Save and switch</source> <source>Save and switch</source>
@@ -9751,7 +9751,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1079</context> <context context-type="linenumber">1079</context>
</context-group> </context-group>
<target state="needs-translation">Save and switch</target> <target state="translated">保存并切换</target>
</trans-unit> </trans-unit>
<trans-unit id="3456881259945295697" datatype="html"> <trans-unit id="3456881259945295697" datatype="html">
<source>Error retrieving suggestions.</source> <source>Error retrieving suggestions.</source>
@@ -9967,7 +9967,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.html</context>
<context context-type="linenumber">13,14</context> <context context-type="linenumber">13,14</context>
</context-group> </context-group>
<target state="needs-translation">Select one document to add as a version.</target> <target state="translated">请选择一份文档,将其添加为新版本。</target>
</trans-unit> </trans-unit>
<trans-unit id="337558081609002420" datatype="html"> <trans-unit id="337558081609002420" datatype="html">
<source>Add version</source> <source>Add version</source>
@@ -10011,7 +10011,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">35,36</context> <context context-type="linenumber">35,36</context>
</context-group> </context-group>
<target state="needs-translation">Upload a new version</target> <target state="translated">上传新版本</target>
</trans-unit> </trans-unit>
<trans-unit id="278763911843514709" datatype="html"> <trans-unit id="278763911843514709" datatype="html">
<source>Use an existing document</source> <source>Use an existing document</source>
@@ -10019,7 +10019,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">44,45</context> <context context-type="linenumber">44,45</context>
</context-group> </context-group>
<target state="needs-translation">Use an existing document</target> <target state="translated">使用现有文档</target>
</trans-unit> </trans-unit>
<trans-unit id="1906507263389090131" datatype="html"> <trans-unit id="1906507263389090131" datatype="html">
<source>Existing</source> <source>Existing</source>
@@ -10027,7 +10027,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">47,48</context> <context context-type="linenumber">47,48</context>
</context-group> </context-group>
<target state="needs-translation">Existing</target> <target state="translated">已有的</target>
</trans-unit> </trans-unit>
<trans-unit id="3119565892291077820" datatype="html"> <trans-unit id="3119565892291077820" datatype="html">
<source>Uploading version...</source> <source>Uploading version...</source>
@@ -11234,7 +11234,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">208</context> <context context-type="linenumber">208</context>
</context-group> </context-group>
<target state="needs-translation">Duplicates</target> <target state="translated">创建副本</target>
</trans-unit> </trans-unit>
<trans-unit id="8492379284173601938" datatype="html"> <trans-unit id="8492379284173601938" datatype="html">
<source>Custom fields (Deprecated)</source> <source>Custom fields (Deprecated)</source>
@@ -11298,7 +11298,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">252</context> <context context-type="linenumber">252</context>
</context-group> </context-group>
<target state="needs-translation">exist</target> <target state="translated">存在</target>
</trans-unit> </trans-unit>
<trans-unit id="4528435301189613620" datatype="html"> <trans-unit id="4528435301189613620" datatype="html">
<source>do not exist</source> <source>do not exist</source>
@@ -11306,7 +11306,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">256</context> <context context-type="linenumber">256</context>
</context-group> </context-group>
<target state="needs-translation">do not exist</target> <target state="translated">不存在</target>
</trans-unit> </trans-unit>
<trans-unit id="5195932016807797291" datatype="html"> <trans-unit id="5195932016807797291" datatype="html">
<source>Correspondent: <x id="PH" equiv-text="this.correspondentSelectionModel.items.find( (c) =&gt; c.id == +rule.value )?.name"/></source> <source>Correspondent: <x id="PH" equiv-text="this.correspondentSelectionModel.items.find( (c) =&gt; c.id == +rule.value )?.name"/></source>
@@ -11378,7 +11378,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">343</context> <context context-type="linenumber">343</context>
</context-group> </context-group>
<target state="needs-translation">Without duplicates</target> <target state="translated">无重复项</target>
</trans-unit> </trans-unit>
<trans-unit id="8448347828886552444" datatype="html"> <trans-unit id="8448347828886552444" datatype="html">
<source>With duplicates</source> <source>With duplicates</source>
@@ -11386,7 +11386,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context> <context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">344</context> <context context-type="linenumber">344</context>
</context-group> </context-group>
<target state="needs-translation">With duplicates</target> <target state="translated">带重复项</target>
</trans-unit> </trans-unit>
<trans-unit id="8644099678903817943" datatype="html"> <trans-unit id="8644099678903817943" datatype="html">
<source>Custom fields query</source> <source>Custom fields query</source>
@@ -11462,7 +11462,7 @@
<context context-type="sourcefile">src/app/components/manage/saved-views/saved-views.component.html</context> <context context-type="sourcefile">src/app/components/manage/saved-views/saved-views.component.html</context>
<context context-type="linenumber">21</context> <context context-type="linenumber">21</context>
</context-group> </context-group>
<target state="needs-translation">Icon</target> <target state="translated">图标</target>
</trans-unit> </trans-unit>
<trans-unit id="8689274715612276035" datatype="html"> <trans-unit id="8689274715612276035" datatype="html">
<source>Show in sidebar</source> <source>Show in sidebar</source>
@@ -12515,7 +12515,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.html</context>
<context context-type="linenumber">40,41</context> <context context-type="linenumber">40,41</context>
</context-group> </context-group>
<target state="needs-translation">Expired</target> <target state="translated">已过期</target>
</trans-unit> </trans-unit>
<trans-unit id="2057574872309338088" datatype="html"> <trans-unit id="2057574872309338088" datatype="html">
<source>Copy share link</source> <source>Copy share link</source>
@@ -12559,7 +12559,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-bundle-list/share-link-bundle-list.component.html</context>
<context context-type="linenumber">164,165</context> <context context-type="linenumber">164,165</context>
</context-group> </context-group>
<target state="needs-translation">Share link bundles pagination</target> <target state="translated">分享链接合集分页</target>
</trans-unit> </trans-unit>
<trans-unit id="1541995860059283227" datatype="html"> <trans-unit id="1541995860059283227" datatype="html">
<source>Failed to load share link bundles.</source> <source>Failed to load share link bundles.</source>
@@ -12623,7 +12623,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.html</context>
<context context-type="linenumber">15,16</context> <context context-type="linenumber">15,16</context>
</context-group> </context-group>
<target state="needs-translation">Document</target> <target state="translated">文档</target>
</trans-unit> </trans-unit>
<trans-unit id="7420713064779772535" datatype="html"> <trans-unit id="7420713064779772535" datatype="html">
<source>Delete share link</source> <source>Delete share link</source>
@@ -12631,7 +12631,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.html</context>
<context context-type="linenumber">75,76</context> <context context-type="linenumber">75,76</context>
</context-group> </context-group>
<target state="needs-translation">Delete share link</target> <target state="translated">删除分享链接</target>
</trans-unit> </trans-unit>
<trans-unit id="5198271726831144068" datatype="html"> <trans-unit id="5198271726831144068" datatype="html">
<source>Share links pagination</source> <source>Share links pagination</source>
@@ -12647,7 +12647,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context>
<context context-type="linenumber">105</context> <context context-type="linenumber">105</context>
</context-group> </context-group>
<target state="needs-translation">Failed to load share links.</target> <target state="translated">加载分享链接失败。</target>
</trans-unit> </trans-unit>
<trans-unit id="4100863040928608880" datatype="html"> <trans-unit id="4100863040928608880" datatype="html">
<source>Error retrieving share links.</source> <source>Error retrieving share links.</source>
@@ -12655,7 +12655,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context>
<context context-type="linenumber">107</context> <context context-type="linenumber">107</context>
</context-group> </context-group>
<target state="needs-translation">Error retrieving share links.</target> <target state="translated">获取分享链接失败。</target>
</trans-unit> </trans-unit>
<trans-unit id="326120283142363299" datatype="html"> <trans-unit id="326120283142363299" datatype="html">
<source>Share link deleted.</source> <source>Share link deleted.</source>
@@ -12663,7 +12663,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context>
<context context-type="linenumber">154</context> <context context-type="linenumber">154</context>
</context-group> </context-group>
<target state="needs-translation">Share link deleted.</target> <target state="translated">分享链接已删除。</target>
</trans-unit> </trans-unit>
<trans-unit id="4964931417181298145" datatype="html"> <trans-unit id="4964931417181298145" datatype="html">
<source>Error deleting share link.</source> <source>Error deleting share link.</source>
@@ -12671,7 +12671,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-link-list/share-link-list.component.ts</context>
<context context-type="linenumber">159</context> <context context-type="linenumber">159</context>
</context-group> </context-group>
<target state="needs-translation">Error deleting share link.</target> <target state="translated">删除分享链接失败。</target>
</trans-unit> </trans-unit>
<trans-unit id="3439104787814858626" datatype="html"> <trans-unit id="3439104787814858626" datatype="html">
<source>Manage public links to individual documents and document bundles.</source> <source>Manage public links to individual documents and document bundles.</source>
@@ -12679,7 +12679,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context>
<context context-type="linenumber">4,5</context> <context context-type="linenumber">4,5</context>
</context-group> </context-group>
<target state="needs-translation">Manage public links to individual documents and document bundles.</target> <target state="translated">管理单个文档和文档合集的公开分享链接。</target>
</trans-unit> </trans-unit>
<trans-unit id="3740311348735113099" datatype="html"> <trans-unit id="3740311348735113099" datatype="html">
<source>Document links</source> <source>Document links</source>
@@ -12687,7 +12687,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context>
<context context-type="linenumber">18,19</context> <context context-type="linenumber">18,19</context>
</context-group> </context-group>
<target state="needs-translation">Document links</target> <target state="translated">文档链接</target>
</trans-unit> </trans-unit>
<trans-unit id="8216780576869093031" datatype="html"> <trans-unit id="8216780576869093031" datatype="html">
<source>Bundles</source> <source>Bundles</source>
@@ -12695,7 +12695,7 @@
<context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context> <context context-type="sourcefile">src/app/components/manage/share-links/share-links.component.html</context>
<context context-type="linenumber">26,27</context> <context context-type="linenumber">26,27</context>
</context-group> </context-group>
<target state="needs-translation">Bundles</target> <target state="translated">捆绑包</target>
</trans-unit> </trans-unit>
<trans-unit id="1229748338333965418" datatype="html"> <trans-unit id="1229748338333965418" datatype="html">
<source>Use workflows to customize the behavior of Paperless-ngx when events &apos;trigger&apos; a workflow.</source> <source>Use workflows to customize the behavior of Paperless-ngx when events &apos;trigger&apos; a workflow.</source>
@@ -13208,7 +13208,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">200</context> <context context-type="linenumber">200</context>
</context-group> </context-group>
<target state="needs-translation">Remote OCR Engine</target> <target state="translated">远程 OCR 引擎</target>
</trans-unit> </trans-unit>
<trans-unit id="2892372808177591734" datatype="html"> <trans-unit id="2892372808177591734" datatype="html">
<source>Enabling remote OCR sends documents to a third-party service for processing. Consider the privacy implications as well as potential costs before enabling.</source> <source>Enabling remote OCR sends documents to a third-party service for processing. Consider the privacy implications as well as potential costs before enabling.</source>
@@ -13224,7 +13224,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">210</context> <context context-type="linenumber">210</context>
</context-group> </context-group>
<target state="needs-translation">Remote OCR API Key</target> <target state="translated">远程 OCR API 密钥</target>
</trans-unit> </trans-unit>
<trans-unit id="8592973963881683840" datatype="html"> <trans-unit id="8592973963881683840" datatype="html">
<source>Remote OCR Endpoint</source> <source>Remote OCR Endpoint</source>
@@ -13232,7 +13232,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">218</context> <context context-type="linenumber">218</context>
</context-group> </context-group>
<target state="needs-translation">Remote OCR Endpoint</target> <target state="translated">远程 OCR 端点</target>
</trans-unit> </trans-unit>
<trans-unit id="2477780225973884032" datatype="html"> <trans-unit id="2477780225973884032" datatype="html">
<source>Required when using the Azure AI engine.</source> <source>Required when using the Azure AI engine.</source>
@@ -13240,7 +13240,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">223</context> <context context-type="linenumber">223</context>
</context-group> </context-group>
<target state="needs-translation">Required when using the Azure AI engine.</target> <target state="translated">使用 Azure AI 引擎时必填。</target>
</trans-unit> </trans-unit>
<trans-unit id="2908398258708722139" datatype="html"> <trans-unit id="2908398258708722139" datatype="html">
<source>Remote OCR Mode</source> <source>Remote OCR Mode</source>
@@ -13248,7 +13248,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">227</context> <context context-type="linenumber">227</context>
</context-group> </context-group>
<target state="needs-translation">Remote OCR Mode</target> <target state="translated">远程 OCR 模式</target>
</trans-unit> </trans-unit>
<trans-unit id="4022045371405916558" datatype="html"> <trans-unit id="4022045371405916558" datatype="html">
<source>Which documents are sent to the remote engine. Use &apos;workflow_only&apos; to keep remote OCR off unless a workflow enables it for a document.</source> <source>Which documents are sent to the remote engine. Use &apos;workflow_only&apos; to keep remote OCR off unless a workflow enables it for a document.</source>
+6 -6
View File
@@ -479,7 +479,7 @@
<context context-type="sourcefile">src/app/app.component.ts</context> <context context-type="sourcefile">src/app/app.component.ts</context>
<context context-type="linenumber">201</context> <context context-type="linenumber">201</context>
</context-group> </context-group>
<target state="translated">標籤、關聯方、文件類型、儲存路徑與自訂欄位等屬性皆可在此處管理,亦可在「文件編輯」檢視中建立。</target> <target state="translated">標籤、關聯方、文件類型、儲存路徑與自訂欄位等文件屬性皆可在此處管理,亦可在「文件編輯」檢視中建立。</target>
</trans-unit> </trans-unit>
<trans-unit id="7851939076947092983" datatype="html"> <trans-unit id="7851939076947092983" datatype="html">
<source>Manage e-mail accounts and rules for automatically importing documents.</source> <source>Manage e-mail accounts and rules for automatically importing documents.</source>
@@ -3859,7 +3859,7 @@
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context> <context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
<context context-type="linenumber">195</context> <context context-type="linenumber">195</context>
</context-group> </context-group>
<target state="translated">屬性</target> <target state="translated">文件屬性</target>
</trans-unit> </trans-unit>
<trans-unit id="7437910965833684826" datatype="html"> <trans-unit id="7437910965833684826" datatype="html">
<source>Correspondents</source> <source>Correspondents</source>
@@ -8525,7 +8525,7 @@
<context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context> <context context-type="sourcefile">src/app/components/common/suggestions-dropdown/suggestions-dropdown.component.html</context>
<context context-type="linenumber">54</context> <context context-type="linenumber">54</context>
</context-group> </context-group>
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</target> <target state="translated">{VAR_PLURAL, plural, =1 {以下有 1 個可用建議} other {以下有 <x id="INTERPOLATION"/> 個可用建議}}</target>
</trans-unit> </trans-unit>
<trans-unit id="4169875112244042673" datatype="html"> <trans-unit id="4169875112244042673" datatype="html">
<source>Suggestion options</source> <source>Suggestion options</source>
@@ -9219,7 +9219,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-barcodes/document-barcodes.component.html</context>
<context context-type="linenumber">40,41</context> <context context-type="linenumber">40,41</context>
</context-group> </context-group>
<target state="needs-translation">Copy content</target> <target state="translated">拷貝內容</target>
</trans-unit> </trans-unit>
<trans-unit id="2266163016683537825" datatype="html"> <trans-unit id="2266163016683537825" datatype="html">
<source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source> <source>of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></source>
@@ -9479,7 +9479,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context> <context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">360,361</context> <context context-type="linenumber">360,361</context>
</context-group> </context-group>
<target state="needs-translation">Barcodes</target> <target state="translated">條碼</target>
</trans-unit> </trans-unit>
<trans-unit id="6992781481378431874" datatype="html"> <trans-unit id="6992781481378431874" datatype="html">
<source>Original document metadata</source> <source>Original document metadata</source>
@@ -13376,7 +13376,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context> <context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">335</context> <context context-type="linenumber">335</context>
</context-group> </context-group>
<target state="needs-translation">Store Barcode Contents</target> <target state="translated">儲存條碼內容</target>
</trans-unit> </trans-unit>
<trans-unit id="7011909364081812031" datatype="html"> <trans-unit id="7011909364081812031" datatype="html">
<source>AI Enabled</source> <source>AI Enabled</source>
+27 -2
View File
@@ -13,8 +13,14 @@ from celery import group
from celery import shared_task from celery import shared_task
from django.conf import settings from django.conf import settings
from django.db import transaction from django.db import transaction
from django.db.models import Case
from django.db.models import F
from django.db.models import Max from django.db.models import Max
from django.db.models import OuterRef
from django.db.models import Q from django.db.models import Q
from django.db.models import Subquery
from django.db.models import When
from django.db.models.functions import Coalesce
from django.utils import timezone from django.utils import timezone
from documents.data_models import ConsumableDocument from documents.data_models import ConsumableDocument
@@ -36,6 +42,7 @@ from documents.tasks import remove_document_from_index
from documents.tasks import update_document_content_maybe_archive_file from documents.tasks import update_document_content_maybe_archive_file
from documents.versioning import get_latest_version_for_root from documents.versioning import get_latest_version_for_root
from documents.versioning import get_root_document from documents.versioning import get_root_document
from documents.versioning import versions_newest_first
if TYPE_CHECKING: if TYPE_CHECKING:
from collections.abc import Mapping from collections.abc import Mapping
@@ -408,10 +415,28 @@ def reprocess(doc_ids: list[int], *, remote_ocr: bool = False) -> Literal["OK"]:
Consumption workflows do not run here, so ``remote_ocr`` is how the user Consumption workflows do not run here, so ``remote_ocr`` is how the user
asks for the remote engine when it is not configured to handle everything. asks for the remote engine when it is not configured to handle everything.
A root document with versions reprocesses its latest version, which is the
file whose content, archive and thumbnail are shown for it.
""" """
for document_id in doc_ids: latest_version = versions_newest_first(
Document.objects.filter(root_document=OuterRef("pk")),
).values("id")[:1]
source_ids = (
Document.objects.filter(id__in=doc_ids)
.annotate(
source_id=Case(
When(root_document__isnull=False, then=F("id")),
default=Coalesce(Subquery(latest_version), F("id")),
),
)
.order_by()
.values_list("source_id", flat=True)
.distinct()
)
for source_id in source_ids:
update_document_content_maybe_archive_file.apply_async( update_document_content_maybe_archive_file.apply_async(
kwargs={"document_id": document_id, "remote_ocr": remote_ocr}, kwargs={"document_id": source_id, "remote_ocr": remote_ocr},
headers={"trigger_source": PaperlessTask.TriggerSource.MANUAL}, headers={"trigger_source": PaperlessTask.TriggerSource.MANUAL},
) )
+24
View File
@@ -14,6 +14,7 @@ from django.db.models import QuerySet
from django.db.models import Value from django.db.models import Value
from django.db.models import When from django.db.models import When
from django.db.models.functions import Cast from django.db.models.functions import Cast
from django.db.models.functions import Coalesce
from guardian.core import ObjectPermissionChecker from guardian.core import ObjectPermissionChecker
from guardian.models import GroupObjectPermission from guardian.models import GroupObjectPermission
from guardian.models import UserObjectPermission from guardian.models import UserObjectPermission
@@ -474,6 +475,29 @@ def permitted_document_ids(
return permitted_object_ids(user, Document, perm, include_deleted=include_deleted) return permitted_object_ids(user, Document, perm, include_deleted=include_deleted)
def documents_without_permitted_root(
documents: QuerySet[Document],
user: User | None,
*,
perm: str = "view_document",
include_deleted: bool = False,
) -> QuerySet[Document]:
"""
The documents the user lacks ``perm`` on. Versions are authorized by their
root document, so a version's own owner is ignored. A single query, without
loading the documents or joining the root.
"""
return documents.annotate(
root_id=Coalesce("root_document_id", "id"),
).exclude(
root_id__in=permitted_document_ids(
user,
perm=perm,
include_deleted=include_deleted,
),
)
def get_document_count_filter_for_user(user, related_name: str = "documents"): def get_document_count_filter_for_user(user, related_name: str = "documents"):
""" """
Return the Q object used to filter document counts for the given user. Return the Q object used to filter document counts for the given user.
+61 -33
View File
@@ -7,6 +7,7 @@ import threading
import time import time
from datetime import UTC from datetime import UTC
from datetime import datetime from datetime import datetime
from datetime import timedelta
from enum import StrEnum from enum import StrEnum
from itertools import islice from itertools import islice
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
@@ -31,6 +32,7 @@ from documents.search._query import parse_user_query
from documents.search._schema import _write_sentinels from documents.search._schema import _write_sentinels
from documents.search._schema import build_schema from documents.search._schema import build_schema
from documents.search._schema import open_or_rebuild_index from documents.search._schema import open_or_rebuild_index
from documents.search._schema import rebuild_in_progress
from documents.search._schema import wipe_index from documents.search._schema import wipe_index
from documents.search._tokenizer import ascii_fold from documents.search._tokenizer import ascii_fold
from documents.search._tokenizer import autocomplete_tokens from documents.search._tokenizer import autocomplete_tokens
@@ -54,6 +56,19 @@ if TYPE_CHECKING:
logger = logging.getLogger("paperless.search") logger = logging.getLogger("paperless.search")
# tantivy stores dates as signed 64-bit nanoseconds since the Unix epoch, which
# covers 1677-09-21T00:12:43 to 2262-04-11T23:47:16 UTC
_INDEX_DATE_NANOS_MIN: Final[int] = -(2**63)
_INDEX_DATE_NANOS_MAX: Final[int] = 2**63 - 1
_UNIX_EPOCH: Final[datetime] = datetime(1970, 1, 1, tzinfo=UTC)
def _is_indexable_date(value: datetime) -> bool:
"""Whether value, at whole-second precision, fits tantivy's date range."""
nanos = ((value - _UNIX_EPOCH) // timedelta(seconds=1)) * 1_000_000_000
return _INDEX_DATE_NANOS_MIN <= nanos <= _INDEX_DATE_NANOS_MAX
_LOCK_TIMEOUT_SECONDS: Final[float] = 10.0 # per-attempt acquire timeout _LOCK_TIMEOUT_SECONDS: Final[float] = 10.0 # per-attempt acquire timeout
_LOCK_RETRY_ATTEMPTS: Final[int] = 4 # total attempts (1 initial + 3 retries) _LOCK_RETRY_ATTEMPTS: Final[int] = 4 # total attempts (1 initial + 3 retries)
_LOCK_BACKOFF_BASE: Final[float] = 1.0 # seconds _LOCK_BACKOFF_BASE: Final[float] = 1.0 # seconds
@@ -627,7 +642,15 @@ class TantivyBackend:
document.created.day, document.created.day,
tzinfo=UTC, tzinfo=UTC,
) )
doc.add_date("created", created_date) if _is_indexable_date(created_date):
doc.add_date("created", created_date)
else:
logger.warning(
"Document %s has a created date (%s) outside the range the search "
"index can store; it will be indexed without a created date",
document.pk,
document.created,
)
doc.add_date("modified", document.modified) doc.add_date("modified", document.modified)
doc.add_date("added", document.added) doc.add_date("added", document.added)
@@ -1110,39 +1133,44 @@ class TantivyBackend:
flushing a segment, deferring merge work; they do not avoid it. flushing a segment, deferring merge work; they do not avoid it.
""" """
wipe_index(self._path) wipe_index(self._path)
new_index = tantivy.Index(build_schema(), path=str(self._path)) # The marker covers the window where the empty index is already stamped
_write_sentinels(self._path) # as current but not yet populated, so an interrupted rebuild is retried.
register_tokenizers(new_index, settings.SEARCH_LANGUAGE) with rebuild_in_progress(self._path):
new_index = tantivy.Index(build_schema(), path=str(self._path))
_write_sentinels(self._path)
register_tokenizers(new_index, settings.SEARCH_LANGUAGE)
# Point instance at the new index so _build_tantivy_doc uses it # Point instance at the new index so _build_tantivy_doc uses it
old_index, old_schema = self._raw_index, self._raw_schema old_index, old_schema = self._raw_index, self._raw_schema
self._raw_index = new_index self._raw_index = new_index
self._raw_schema = new_index.schema self._raw_schema = new_index.schema
# Stream documents one-by-one (so the progress bar advances per # Stream documents one-by-one (so the progress bar advances per
# document) while fetching viewer permissions one SQL query per chunk. # document) while fetching viewer permissions one SQL query per
# The stream is Sized, so iter_wrapper can still discover the total. # chunk. The stream is Sized, so iter_wrapper can still discover
documents_stream = _DocumentViewerStream(documents, chunk_size=1000) # the total.
try: documents_stream = _DocumentViewerStream(documents, chunk_size=1000)
writer = new_index.writer(heap_size=writer_heap_bytes) try:
for document, (viewer_ids, viewer_group_ids) in iter_wrapper( writer = new_index.writer(heap_size=writer_heap_bytes)
documents_stream, for document, (viewer_ids, viewer_group_ids) in iter_wrapper(
): documents_stream,
doc = self._build_tantivy_doc( ):
document, doc = self._build_tantivy_doc(
viewer_ids=viewer_ids, document,
viewer_group_ids=viewer_group_ids, viewer_ids=viewer_ids,
) viewer_group_ids=viewer_group_ids,
writer.add_document(doc) )
writer.commit() writer.add_document(doc)
# Wait for background merge threads to finish so all segments are writer.commit()
# fully merged and persisted before the index is considered rebuilt. # Wait for background merge threads to finish so all segments
writer.wait_merging_threads() # are fully merged and persisted before the index is considered
new_index.reload() # rebuilt.
except BaseException: # pragma: no cover writer.wait_merging_threads()
# Restore old index on failure so the backend remains usable new_index.reload()
self._raw_index = old_index except BaseException: # pragma: no cover
self._raw_schema = old_schema # Restore old index on failure so the backend remains usable
raise self._raw_index = old_index
self._raw_schema = old_schema
raise
def chunked(iterable, size): def chunked(iterable, size):
+45 -4
View File
@@ -4,6 +4,7 @@ import hashlib
import json import json
import logging import logging
import shutil import shutil
from contextlib import contextmanager
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from typing import Final from typing import Final
from typing import NamedTuple from typing import NamedTuple
@@ -16,6 +17,7 @@ from whoosh_compat import FieldKind
from documents.search._fields import PUBLIC_FIELDS from documents.search._fields import PUBLIC_FIELDS
if TYPE_CHECKING: if TYPE_CHECKING:
from collections.abc import Iterator
from pathlib import Path from pathlib import Path
logger = logging.getLogger("paperless.search") logger = logging.getLogger("paperless.search")
@@ -28,6 +30,11 @@ logger = logging.getLogger("paperless.search")
# v3 - barcodes JSON field for stored barcode contents # v3 - barcodes JSON field for stored barcode contents
SCHEMA_VERSION: Final[int] = 3 SCHEMA_VERSION: Final[int] = 3
# Present in the index directory from the moment a full rebuild starts until it
# finishes. If a rebuild is interrupted it is left behind, so the half-built
# index is not mistaken for a complete one.
REBUILD_MARKER: Final[str] = ".rebuilding"
class FieldDescriptor(NamedTuple): class FieldDescriptor(NamedTuple):
"""One tantivy field, in declaration order. """One tantivy field, in declaration order.
@@ -255,9 +262,9 @@ def needs_rebuild(index_dir: Path) -> bool:
""" """
Check if the search index needs rebuilding. Check if the search index needs rebuilding.
Reads .index_settings.json to compare the stored schema version, search True if a previous full rebuild never finished (the rebuild marker is still
language and schema fingerprint against the current configuration. Returns present), or if the index's stamped settings no longer match the current
True if the file is missing, unparsable, or any value mismatches. configuration. See _settings_mismatch().
Args: Args:
index_dir: Path to the search index directory index_dir: Path to the search index directory
@@ -265,6 +272,40 @@ def needs_rebuild(index_dir: Path) -> bool:
Returns: Returns:
True if the index needs rebuilding, False if it's up to date True if the index needs rebuilding, False if it's up to date
""" """
if (index_dir / REBUILD_MARKER).exists():
logger.warning("Previous search index rebuild did not finish - rebuilding.")
return True
return _settings_mismatch(index_dir)
@contextmanager
def rebuild_in_progress(index_dir: Path) -> Iterator[None]:
"""
Flag the index as incomplete for the duration of a full rebuild.
The marker is cleared only if the block exits cleanly. There is deliberately
no try/finally: an exception must leave the marker behind so the next
needs_rebuild() check retries the rebuild.
"""
marker = index_dir / REBUILD_MARKER
marker.touch()
yield
marker.unlink(missing_ok=True)
def _settings_mismatch(index_dir: Path) -> bool:
"""
Check the stamped settings against the current configuration.
Reads .index_settings.json to compare the stored schema version, search
language and schema fingerprint. Returns True if the file is missing,
unparsable, or any value mismatches.
This deliberately ignores the rebuild marker: open_or_rebuild_index() uses it
so that a process opening the index while another process is mid-rebuild
(or after one died) does not wipe the partial index out from under it.
Repopulating is the job of ``document_index reindex``.
"""
settings_file = index_dir / ".index_settings.json" settings_file = index_dir / ".index_settings.json"
if not settings_file.exists(): if not settings_file.exists():
return True return True
@@ -333,7 +374,7 @@ def open_or_rebuild_index(index_dir: Path | None = None) -> tantivy.Index:
index_dir = cast("Path", settings.INDEX_DIR) index_dir = cast("Path", settings.INDEX_DIR)
if not index_dir.exists(): if not index_dir.exists():
return tantivy.Index(build_schema()) return tantivy.Index(build_schema())
if needs_rebuild(index_dir): if _settings_mismatch(index_dir):
wipe_index(index_dir) wipe_index(index_dir)
idx = tantivy.Index(build_schema(), path=str(index_dir)) idx = tantivy.Index(build_schema(), path=str(index_dir))
_write_sentinels(index_dir) _write_sentinels(index_dir)
+2 -1
View File
@@ -90,6 +90,7 @@ from documents.templating.utils import convert_format_str_to_template_format
from documents.templating.workflows import validate_workflow_template from documents.templating.workflows import validate_workflow_template
from documents.validators import uri_validator from documents.validators import uri_validator
from documents.validators import url_validator from documents.validators import url_validator
from documents.versioning import get_root_document
from documents.versioning import has_prefetched_effective_content from documents.versioning import has_prefetched_effective_content
from documents.versioning import sort_versions_newest_first from documents.versioning import sort_versions_newest_first
@@ -2894,7 +2895,7 @@ class ShareLinkSerializer(OwnedObjectSerializer):
and has_perms_owner_aware( and has_perms_owner_aware(
self.user, self.user,
"view_document", "view_document",
document, get_root_document(document),
) )
): ):
return document return document
+8 -3
View File
@@ -490,18 +490,23 @@ def update_document_content_maybe_archive_file(
shutil.move(thumbnail, document.thumbnail_path) shutil.move(thumbnail, document.thumbnail_path)
document.refresh_from_db() document.refresh_from_db()
root_document = (
document.root_document if document.root_document_id else document
)
logger.info( logger.info(
f"Updating index for document {document_id} ({document.archive_checksum})", f"Updating index for document {root_document.pk} ({document.archive_checksum})",
) )
from documents.search import get_backend from documents.search import get_backend
get_backend().add_or_update(document) get_backend().add_or_update(root_document)
ai_config = AIConfig() ai_config = AIConfig()
if ai_config.llm_index_enabled: if ai_config.llm_index_enabled:
llm_index_add_or_update_document(document) llm_index_add_or_update_document(root_document)
clear_document_caches(document.pk) clear_document_caches(document.pk)
if root_document.pk != document.pk:
clear_document_caches(root_document.pk)
except Exception: except Exception:
logger.exception( logger.exception(
+125
View File
@@ -1,4 +1,6 @@
import json import json
import logging
from datetime import date
from pathlib import Path from pathlib import Path
import pytest import pytest
@@ -16,7 +18,10 @@ from documents.search._backend import TantivyBackend
from documents.search._backend import WriteBatch from documents.search._backend import WriteBatch
from documents.search._backend import get_backend from documents.search._backend import get_backend
from documents.search._backend import reset_backend from documents.search._backend import reset_backend
from documents.search._schema import REBUILD_MARKER
from documents.search._schema import needs_rebuild
from documents.signals.handlers import add_to_index from documents.signals.handlers import add_to_index
from paperless_testing.dirs import PaperlessDirs
from paperless_testing.factories import CorrespondentFactory from paperless_testing.factories import CorrespondentFactory
from paperless_testing.factories import DocumentFactory from paperless_testing.factories import DocumentFactory
from paperless_testing.factories import DocumentTypeFactory from paperless_testing.factories import DocumentTypeFactory
@@ -823,6 +828,53 @@ class TestRebuild:
backend.rebuild(Document.objects.all(), iter_wrapper=wrapper) backend.rebuild(Document.objects.all(), iter_wrapper=wrapper)
assert 30 in seen assert 30 in seen
def test_successful_rebuild_leaves_index_up_to_date(
self,
backend: TantivyBackend,
paperless_dirs: PaperlessDirs,
) -> None:
"""
GIVEN:
- A backend and one document
WHEN:
- rebuild() completes
THEN:
- needs_rebuild() is False and no rebuild marker remains
"""
DocumentFactory.create()
backend.rebuild(Document.objects.all())
assert needs_rebuild(paperless_dirs.index_dir) is False
assert not (paperless_dirs.index_dir / REBUILD_MARKER).exists()
def test_interrupted_rebuild_is_retried(
self,
backend: TantivyBackend,
paperless_dirs: PaperlessDirs,
) -> None:
"""
GIVEN:
- A rebuild that dies while indexing documents (e.g. the database
connection is lost)
WHEN:
- needs_rebuild() is checked afterwards
THEN:
- It is True, even though the empty index was already stamped with
current settings, so the next start rebuilds instead of reporting
the index as up to date
"""
DocumentFactory.create()
def die(pairs):
raise RuntimeError("terminating connection due to administrator command")
yield # pragma: no cover
with pytest.raises(RuntimeError):
backend.rebuild(Document.objects.all(), iter_wrapper=die)
assert needs_rebuild(paperless_dirs.index_dir) is True
def test_includes_group_granted_viewers(self, backend: TantivyBackend) -> None: def test_includes_group_granted_viewers(self, backend: TantivyBackend) -> None:
"""Rebuild must index viewer ids for group-only grants, not just direct ones. """Rebuild must index viewer ids for group-only grants, not just direct ones.
@@ -854,6 +906,79 @@ class TestRebuild:
assert ids == [doc.pk] assert ids == [doc.pk]
class TestCreatedDateOutOfRange:
"""The index stores dates as nanosecond i64 values (1677-09-22 to 2262-04-11).
A document whose created date falls outside that window must not abort
indexing: it is indexed without a created value and a warning names it.
"""
@pytest.mark.parametrize(
("created", "expected_warnings"),
[
pytest.param(date(1677, 9, 22), 0, id="first-representable-day"),
pytest.param(date(2262, 4, 11), 0, id="last-representable-day"),
pytest.param(date(1677, 9, 21), 1, id="day-before-first"),
pytest.param(date(2262, 4, 12), 1, id="day-after-last"),
pytest.param(date(16, 8, 30), 1, id="two-digit-year-read-as-year-16"),
pytest.param(date(9999, 12, 31), 1, id="max-python-date"),
],
)
def test_add_or_update_indexes_document_and_warns_when_out_of_range(
self,
backend: TantivyBackend,
caplog: pytest.LogCaptureFixture,
created: date,
expected_warnings: int,
) -> None:
"""
GIVEN:
- A document with a created date at or beyond the index date limits
WHEN:
- The document is added to the index
THEN:
- The document is indexed and searchable either way
- A warning naming the document is logged only for out-of-range dates
"""
doc = DocumentFactory(created=created, content="boundarycontent")
with caplog.at_level(logging.WARNING, logger="paperless.search"):
backend.add_or_update(doc)
assert backend.search_ids("boundarycontent", user=None) == [doc.pk]
warnings = [r for r in caplog.records if r.levelno == logging.WARNING]
assert len(warnings) == expected_warnings
if expected_warnings:
assert f"Document {doc.pk}" in warnings[0].getMessage()
def test_rebuild_continues_past_out_of_range_document(
self,
backend: TantivyBackend,
caplog: pytest.LogCaptureFixture,
) -> None:
"""
GIVEN:
- A document with an unrepresentable created date among valid ones
WHEN:
- The index is rebuilt
THEN:
- Rebuild completes and every document is searchable
- A warning names the offending document
"""
good = DocumentFactory(created=date(2016, 8, 30), content="rebuildcontent")
bad = DocumentFactory(created=date(16, 8, 30), content="rebuildcontent")
with caplog.at_level(logging.WARNING, logger="paperless.search"):
backend.rebuild(Document.objects.all())
assert sorted(backend.search_ids("rebuildcontent", user=None)) == sorted(
[good.pk, bad.pk],
)
warnings = [r for r in caplog.records if r.levelno == logging.WARNING]
assert len(warnings) == 1
assert f"Document {bad.pk}" in warnings[0].getMessage()
class TestAutocomplete: class TestAutocomplete:
"""Test autocomplete functionality.""" """Test autocomplete functionality."""
@@ -8,6 +8,7 @@ from auditlog.models import LogEntry # type: ignore[import-untyped]
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase as DjangoTestCase from django.test import TestCase as DjangoTestCase
from django.test import override_settings
from django.utils import timezone from django.utils import timezone
from rest_framework import status from rest_framework import status
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
@@ -16,13 +17,17 @@ from documents.data_models import DocumentSource
from documents.filters import EffectiveContentFilter from documents.filters import EffectiveContentFilter
from documents.filters import TitleContentFilter from documents.filters import TitleContentFilter
from documents.models import Document from documents.models import Document
from documents.models import Note
from documents.models import ShareLink
from documents.versioning import annotate_effective_content from documents.versioning import annotate_effective_content
from documents.views import DocumentSelectionMixin from documents.views import DocumentSelectionMixin
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.factories import UserFactory from paperless_testing.factories import UserFactory
from paperless_testing.http import read_streaming_response from paperless_testing.http import read_streaming_response
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
if TYPE_CHECKING: if TYPE_CHECKING:
from pathlib import Path from pathlib import Path
@@ -1043,3 +1048,152 @@ class TestBulkSelectionExcludesVersions(DjangoTestCase):
) )
self.assertEqual(selected, [root.id]) self.assertEqual(selected, [root.id])
class TestVersionActionPermissions(DirectoriesMixin, APITestCase):
def setUp(self):
super().setUp()
self.user = UserFactory()
grant_all_global(self.user)
self.client.force_authenticate(self.user)
self.root = DocumentFactory(owner=UserFactory())
self.version = DocumentFactory(root_document=self.root, owner=None)
@override_settings(AUDIT_LOG_ENABLED=True)
def test_actions_reject_stale_version_ownership(self):
note = Note.objects.create(document=self.version, note="Version note")
for owner in (None, self.user):
self.version.owner = owner
self.version.save(update_fields=["owner"])
for action in (
"notes",
"suggestions",
"ai_suggestions",
"history",
"share_links",
):
with self.subTest(owner=owner, action=action):
response = self.client.get(
f"/api/documents/{self.version.pk}/{action}/",
)
self.assertEqual(response.status_code, 403)
response = self.client.post(
f"/api/documents/{self.version.pk}/notes/",
{"note": "New note"},
)
self.assertEqual(response.status_code, 403)
response = self.client.delete(
f"/api/documents/{self.version.pk}/notes/?id={note.pk}",
)
self.assertEqual(response.status_code, 403)
response = self.client.post(
"/api/share_links/",
{"document": self.version.pk, "file_version": "original"},
)
self.assertEqual(response.status_code, 403)
response = self.client.post(
"/api/share_link_bundles/",
{"document_ids": [self.version.pk], "file_version": "original"},
format="json",
)
self.assertEqual(response.status_code, 400)
response = self.client.post(
"/api/documents/email/",
{
"documents": [self.version.pk],
"addresses": "recipient@example.com",
"subject": "Version",
"message": "Version",
},
format="json",
)
self.assertEqual(response.status_code, 403)
with (
mock.patch("documents.views.AIConfig") as ai_config,
mock.patch("documents.views.stream_chat_with_documents") as chat,
):
ai_config.return_value.ai_enabled = True
response = self.client.post(
"/api/documents/chat/",
{"q": "Version?", "document_id": self.version.pk},
format="json",
)
self.assertEqual(response.status_code, 403)
chat.assert_not_called()
self.assertTrue(Note.objects.filter(pk=note.pk).exists())
self.assertFalse(ShareLink.objects.exists())
@mock.patch("documents.views.build_share_link_bundle.apply_async")
def test_root_permissions_allow_sharing_a_private_version(self, build_mock):
self.version.owner = UserFactory()
self.version.save(update_fields=["owner"])
grant_object(self.user, self.root, "view_document", "change_document")
note = Note.objects.create(document=self.version, note="Version note")
response = self.client.get(f"/api/documents/{self.version.pk}/notes/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data[0]["id"], note.pk)
response = self.client.post(
"/api/share_links/",
{"document": self.version.pk, "file_version": "original"},
)
self.assertEqual(response.status_code, 201)
self.assertEqual(ShareLink.objects.get().document_id, self.version.pk)
response = self.client.get(f"/api/documents/{self.version.pk}/share_links/")
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data), 1)
response = self.client.post(
"/api/share_link_bundles/",
{"document_ids": [self.version.pk], "file_version": "original"},
format="json",
)
self.assertEqual(response.status_code, 201)
build_mock.assert_called_once()
def test_root_view_permission_does_not_allow_note_changes(self):
grant_object(self.user, self.root, "view_document")
note = Note.objects.create(document=self.version, note="Version note")
response = self.client.get(f"/api/documents/{self.version.pk}/notes/")
self.assertEqual(response.status_code, 200)
response = self.client.post(
f"/api/documents/{self.version.pk}/notes/",
{"note": "New note"},
)
self.assertEqual(response.status_code, 403)
response = self.client.delete(
f"/api/documents/{self.version.pk}/notes/?id={note.pk}",
)
self.assertEqual(response.status_code, 403)
self.assertTrue(Note.objects.filter(pk=note.pk).exists())
@override_settings(AUDIT_LOG_ENABLED=True)
def test_history_uses_root_ownership(self):
self.root.owner = self.user
self.root.save(update_fields=["owner"])
self.version.owner = UserFactory()
self.version.save(update_fields=["owner"])
response = self.client.get(f"/api/documents/{self.version.pk}/history/")
self.assertEqual(response.status_code, 200)
def test_selection_data_rejects_stale_version_ownership(self):
for owner in (None, self.user):
self.version.owner = owner
self.version.save(update_fields=["owner"])
with self.subTest(owner=owner):
response = self.client.post(
"/api/documents/selection_data/",
{"documents": [self.version.pk]},
format="json",
)
self.assertEqual(response.status_code, 403)
def test_selection_data_allows_private_version_of_permitted_root(self):
self.version.owner = UserFactory()
self.version.save(update_fields=["owner"])
grant_object(self.user, self.root, "view_document")
other = DocumentFactory(owner=self.user)
response = self.client.post(
"/api/documents/selection_data/",
{"documents": [self.version.pk, other.pk]},
format="json",
)
self.assertEqual(response.status_code, 200)
+51
View File
@@ -6,6 +6,7 @@ from rest_framework.test import APITestCase
from documents.models import Document from documents.models import Document
from paperless_testing.dirs import DirectoriesMixin from paperless_testing.dirs import DirectoriesMixin
from paperless_testing.factories import DocumentFactory
from paperless_testing.factories import UserFactory from paperless_testing.factories import UserFactory
from paperless_testing.permissions import grant_all_global from paperless_testing.permissions import grant_all_global
@@ -279,3 +280,53 @@ class TestTrashAPI(DirectoriesMixin, APITestCase):
Document.objects.filter(root_document=root).values_list("id", flat=True), Document.objects.filter(root_document=root).values_list("id", flat=True),
[version.pk for version in versions], [version.pk for version in versions],
) )
def test_api_trash_version_follows_root_owner(self) -> None:
"""
GIVEN:
- A deleted version of user2's document, owned by nobody
- A deleted version of the user's document, owned by user2
WHEN:
- The user lists the trash and tries to restore or empty the versions
THEN:
- Only the version of the user's own document is listed
- The other version can't be restored or emptied
- The version of the user's own document can be restored
"""
user2 = UserFactory(username="user2")
other_version = DocumentFactory(
root_document=DocumentFactory(owner=user2),
version_index=1,
)
other_version.delete()
own_version = DocumentFactory(
owner=user2,
root_document=DocumentFactory(owner=self.user),
version_index=1,
)
own_version.delete()
resp = self.client.get("/api/trash/")
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertEqual(
[doc["id"] for doc in resp.data["results"]],
[own_version.pk],
)
for action in ("restore", "empty"):
with self.subTest(action=action):
resp = self.client.post(
"/api/trash/",
{"action": action, "documents": [other_version.pk]},
)
self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN)
self.assertTrue(
Document.deleted_objects.filter(pk=other_version.pk).exists(),
)
resp = self.client.post(
"/api/trash/",
{"action": "restore", "documents": [own_version.pk]},
)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
self.assertTrue(Document.objects.filter(pk=own_version.pk).exists())
+91 -27
View File
@@ -4,6 +4,7 @@ from pathlib import Path
from unittest import mock from unittest import mock
import pikepdf import pikepdf
import pytest
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -12,6 +13,7 @@ from django.test import TestCase
from django.test.utils import CaptureQueriesContext from django.test.utils import CaptureQueriesContext
from guardian.shortcuts import get_groups_with_perms from guardian.shortcuts import get_groups_with_perms
from guardian.shortcuts import get_users_with_perms from guardian.shortcuts import get_users_with_perms
from pytest_mock import MockerFixture
from documents import bulk_edit from documents import bulk_edit
from documents.models import Correspondent from documents.models import Correspondent
@@ -23,6 +25,7 @@ from documents.models import StoragePath
from documents.models import Tag from documents.models import Tag
from documents.permissions import set_permissions_for_objects 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.permissions import grant_object from paperless_testing.permissions import grant_object
@@ -1970,18 +1973,22 @@ class TestPDFActions(DirectoriesMixin, TestCase):
self.assertIn("Error removing password from document", cm.output[0]) self.assertIn("Error removing password from document", cm.output[0])
class TestBulkEditReprocess(DirectoriesMixin, TestCase): @pytest.mark.django_db
def setUp(self) -> None: class TestBulkEditReprocess:
super().setUp() @pytest.fixture
def mock_task(self, mocker: MockerFixture) -> mock.MagicMock:
self.doc = Document.objects.create( return mocker.patch(
title="test", "documents.bulk_edit.update_document_content_maybe_archive_file",
checksum="A",
mime_type="application/pdf",
) )
@mock.patch("documents.bulk_edit.update_document_content_maybe_archive_file") @staticmethod
def test_reprocess_defaults_to_local(self, mock_task: mock.Mock) -> None: def _queued_ids(mock_task: mock.MagicMock) -> list[int]:
return [
call.kwargs["kwargs"]["document_id"]
for call in mock_task.apply_async.call_args_list
]
def test_reprocess_defaults_to_local(self, mock_task: mock.MagicMock) -> None:
""" """
GIVEN: GIVEN:
- A reprocess request that says nothing about remote OCR - A reprocess request that says nothing about remote OCR
@@ -1990,18 +1997,17 @@ class TestBulkEditReprocess(DirectoriesMixin, TestCase):
THEN: THEN:
- The task is queued without asking for the remote engine - The task is queued without asking for the remote engine
""" """
result = bulk_edit.reprocess([self.doc.id]) doc = DocumentFactory()
assert bulk_edit.reprocess([doc.id]) == "OK"
self.assertEqual(result, "OK")
mock_task.apply_async.assert_called_once() mock_task.apply_async.assert_called_once()
_, kwargs = mock_task.apply_async.call_args assert mock_task.apply_async.call_args.kwargs["kwargs"] == {
self.assertEqual( "document_id": doc.id,
kwargs["kwargs"], "remote_ocr": False,
{"document_id": self.doc.id, "remote_ocr": False}, }
)
@mock.patch("documents.bulk_edit.update_document_content_maybe_archive_file") def test_reprocess_passes_remote_ocr(self, mock_task: mock.MagicMock) -> None:
def test_reprocess_passes_remote_ocr(self, mock_task: mock.Mock) -> None:
""" """
GIVEN: GIVEN:
- A reprocess request that explicitly asks for remote OCR - A reprocess request that explicitly asks for remote OCR
@@ -2010,14 +2016,72 @@ class TestBulkEditReprocess(DirectoriesMixin, TestCase):
THEN: THEN:
- The request is forwarded to the task for every document - The request is forwarded to the task for every document
""" """
other = Document.objects.create( docs = DocumentFactory.create_batch(2)
title="test2",
checksum="B", bulk_edit.reprocess([doc.id for doc in docs], remote_ocr=True)
mime_type="application/pdf",
assert mock_task.apply_async.call_count == 2
for call in mock_task.apply_async.call_args_list:
assert call.kwargs["kwargs"]["remote_ocr"]
def test_reprocess_root_uses_latest_version(
self,
mock_task: mock.MagicMock,
) -> None:
"""
GIVEN:
- A root document with two versions
WHEN:
- reprocess is called with the root document
THEN:
- The latest version is reprocessed, not the root's original file
"""
root = DocumentFactory()
DocumentFactory(root_document=root, version_index=1)
latest = DocumentFactory(root_document=root, version_index=2)
bulk_edit.reprocess([root.id])
assert self._queued_ids(mock_task) == [latest.id]
def test_reprocess_explicit_version(self, mock_task: mock.MagicMock) -> None:
"""
GIVEN:
- A root document with two versions
WHEN:
- reprocess is called with the older version
THEN:
- That version is reprocessed
"""
root = DocumentFactory()
older = DocumentFactory(root_document=root, version_index=1)
DocumentFactory(root_document=root, version_index=2)
bulk_edit.reprocess([older.id])
assert self._queued_ids(mock_task) == [older.id]
def test_reprocess_root_and_latest_version_dispatches_once(
self,
mock_task: mock.MagicMock,
) -> None:
"""
GIVEN:
- A root document with two versions, the latest created on a
different date than the root
WHEN:
- reprocess is called with both the root and its latest version
THEN:
- The latest version is reprocessed only once
"""
root = DocumentFactory(created=date(2024, 1, 1))
DocumentFactory(root_document=root, version_index=1)
latest = DocumentFactory(
root_document=root,
version_index=2,
created=date(2025, 1, 1),
) )
bulk_edit.reprocess([self.doc.id, other.id], remote_ocr=True) bulk_edit.reprocess([root.id, latest.id])
self.assertEqual(mock_task.apply_async.call_count, 2) assert self._queued_ids(mock_task) == [latest.id]
for call in mock_task.apply_async.call_args_list:
self.assertTrue(call.kwargs["kwargs"]["remote_ocr"])
@@ -90,10 +90,13 @@ class ShareLinkBundleAPITests(DirectoriesMixin, APITestCase):
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("document_ids", response.data) self.assertIn("document_ids", response.data)
@mock.patch("documents.views.permitted_document_ids", return_value=set()) def test_create_bundle_rejects_insufficient_permissions(self) -> None:
def test_create_bundle_rejects_insufficient_permissions(self, perms_mock) -> None: requester = UserFactory(username="bundle_creator")
grant_global(requester, "add_sharelinkbundle", "view_document")
self.client.force_authenticate(requester)
document = DocumentFactory(owner=UserFactory(username="document_owner"))
payload = { payload = {
"document_ids": [self.document.pk], "document_ids": [self.document.pk, document.pk],
"file_version": ShareLink.FileVersion.ARCHIVE, "file_version": ShareLink.FileVersion.ARCHIVE,
"expiration_days": 7, "expiration_days": 7,
} }
@@ -101,8 +104,8 @@ class ShareLinkBundleAPITests(DirectoriesMixin, APITestCase):
response = self.client.post(self.ENDPOINT, payload, format="json") response = self.client.post(self.ENDPOINT, payload, format="json")
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn("document_ids", response.data) self.assertIn(str(document.pk), str(response.data["document_ids"]))
perms_mock.assert_called() self.assertFalse(ShareLinkBundle.objects.exists())
@mock.patch("documents.views.build_share_link_bundle.apply_async") @mock.patch("documents.views.build_share_link_bundle.apply_async")
def test_rebuild_bundle_resets_state(self, delay_mock) -> None: def test_rebuild_bundle_resets_state(self, delay_mock) -> None:
+77
View File
@@ -20,6 +20,7 @@ from documents.sanity_checker import SanityCheckMessages
from documents.tests.helpers import dummy_preprocess 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
@pytest.mark.django_db @pytest.mark.django_db
@@ -287,6 +288,82 @@ class TestUpdateContent(DirectoriesMixin, TestCase):
tasks.update_document_content_maybe_archive_file(doc.pk) tasks.update_document_content_maybe_archive_file(doc.pk)
self.assertNotEqual(Document.objects.get(pk=doc.pk).content, "test") self.assertNotEqual(Document.objects.get(pk=doc.pk).content, "test")
def _create_root_with_version(self) -> tuple[Document, Document]:
sample1 = self.dirs.scratch_dir / "sample.pdf"
shutil.copy(
Path(__file__).parent
/ "samples"
/ "documents"
/ "originals"
/ "0000001.pdf",
sample1,
)
root = DocumentFactory(content="root content", mime_type="application/pdf")
version = DocumentFactory(
content="my document",
filename=sample1,
mime_type="application/pdf",
root_document=root,
version_index=1,
)
return root, version
@mock.patch("documents.tasks.clear_document_caches")
@mock.patch("documents.search.get_backend")
def test_update_content_version_indexes_root(
self,
mock_get_backend: mock.Mock,
mock_clear_caches: mock.Mock,
) -> None:
"""
GIVEN:
- A root document with a version
WHEN:
- Update content task is called for the version
THEN:
- The version's content is updated
- The root document is indexed rather than the version
- Caches are cleared for both
"""
root, version = self._create_root_with_version()
tasks.update_document_content_maybe_archive_file(version.pk)
self.assertNotEqual(
Document.objects.get(pk=version.pk).content,
"my document",
)
self.assertEqual(Document.objects.get(pk=root.pk).content, "root content")
indexed = mock_get_backend.return_value.add_or_update.call_args.args[0]
self.assertEqual(indexed.pk, root.pk)
mock_clear_caches.assert_has_calls(
[mock.call(version.pk), mock.call(root.pk)],
)
@override_settings(AI_ENABLED=True, LLM_EMBEDDING_BACKEND="huggingface")
@mock.patch("documents.tasks.llm_index_add_or_update_document")
@mock.patch("documents.search.get_backend")
def test_update_content_version_updates_llm_index_for_root(
self,
mock_get_backend: mock.Mock,
mock_llm_index: mock.Mock,
) -> None:
"""
GIVEN:
- A root document with a version
- The LLM index is enabled
WHEN:
- Update content task is called for the version
THEN:
- The LLM index is updated for the root document, not the version
"""
root, version = self._create_root_with_version()
tasks.update_document_content_maybe_archive_file(version.pk)
mock_llm_index.assert_called_once()
self.assertEqual(mock_llm_index.call_args.args[0].pk, root.pk)
class TestUpdateContentRemoteOCR(DirectoriesMixin, TestCase): class TestUpdateContentRemoteOCR(DirectoriesMixin, TestCase):
""" """
+81 -41
View File
@@ -174,6 +174,7 @@ 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_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 documents_without_permitted_root
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_objects_for_user_owner_aware from documents.permissions import get_objects_for_user_owner_aware
from documents.permissions import has_global_statistics_permission from documents.permissions import has_global_statistics_permission
@@ -1550,13 +1551,16 @@ class DocumentViewSet(
) )
def suggestions(self, request, pk=None): def suggestions(self, request, pk=None):
doc = get_object_or_404( doc = get_object_or_404(
Document.objects.select_related("owner").prefetch_related("versions"), Document.objects.select_related(
"owner",
"root_document__owner",
).prefetch_related("versions"),
pk=pk, pk=pk,
) )
if request.user is not None and not has_perms_owner_aware( if request.user is not None and not has_perms_owner_aware(
request.user, request.user,
"change_document", "change_document",
doc, get_root_document(doc),
): ):
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
@@ -1610,13 +1614,16 @@ class DocumentViewSet(
@method_decorator(cache_control(no_cache=True)) @method_decorator(cache_control(no_cache=True))
def ai_suggestions(self, request, pk=None): def ai_suggestions(self, request, pk=None):
doc = get_object_or_404( doc = get_object_or_404(
Document.objects.select_related("owner").prefetch_related("versions"), Document.objects.select_related(
"owner",
"root_document__owner",
).prefetch_related("versions"),
pk=pk, pk=pk,
) )
if request.user is not None and not has_perms_owner_aware( if request.user is not None and not has_perms_owner_aware(
request.user, request.user,
"change_document", "change_document",
doc, get_root_document(doc),
): ):
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
@@ -1856,15 +1863,20 @@ class DocumentViewSet(
currentUser = request.user currentUser = request.user
try: try:
doc = ( doc = (
Document.objects.select_related("owner") Document.objects.select_related("owner", "root_document__owner")
.prefetch_related("notes") .prefetch_related("notes")
.only("pk", "owner__id") .only(
"pk",
"owner__id",
"root_document__id",
"root_document__owner__id",
)
.get(pk=pk) .get(pk=pk)
) )
if currentUser is not None and not has_perms_owner_aware( if currentUser is not None and not has_perms_owner_aware(
currentUser, currentUser,
"view_document", "view_document",
doc, get_root_document(doc),
): ):
return HttpResponseForbidden("Insufficient permissions to view notes") return HttpResponseForbidden("Insufficient permissions to view notes")
except Document.DoesNotExist: except Document.DoesNotExist:
@@ -1886,7 +1898,7 @@ class DocumentViewSet(
if currentUser is not None and not has_perms_owner_aware( if currentUser is not None and not has_perms_owner_aware(
currentUser, currentUser,
"change_document", "change_document",
doc, get_root_document(doc),
): ):
return HttpResponseForbidden( return HttpResponseForbidden(
"Insufficient permissions to create notes", "Insufficient permissions to create notes",
@@ -1929,7 +1941,7 @@ class DocumentViewSet(
if currentUser is not None and not has_perms_owner_aware( if currentUser is not None and not has_perms_owner_aware(
currentUser, currentUser,
"change_document", "change_document",
doc, get_root_document(doc),
): ):
return HttpResponseForbidden("Insufficient permissions to delete notes") return HttpResponseForbidden("Insufficient permissions to delete notes")
@@ -1973,11 +1985,13 @@ class DocumentViewSet(
def share_links(self, request, pk=None): def share_links(self, request, pk=None):
currentUser = request.user currentUser = request.user
try: try:
doc = Document.objects.select_related("owner").get(pk=pk) doc = Document.objects.select_related("owner", "root_document__owner").get(
pk=pk,
)
if currentUser is not None and not has_perms_owner_aware( if currentUser is not None and not has_perms_owner_aware(
currentUser, currentUser,
"change_document", "change_document",
doc, get_root_document(doc),
): ):
return HttpResponseForbidden( return HttpResponseForbidden(
"Insufficient permissions to add share link", "Insufficient permissions to add share link",
@@ -2008,10 +2022,11 @@ class DocumentViewSet(
if not settings.AUDIT_LOG_ENABLED: if not settings.AUDIT_LOG_ENABLED:
return HttpResponseBadRequest("Audit log is disabled") return HttpResponseBadRequest("Audit log is disabled")
try: try:
doc = Document.objects.get(pk=pk) doc = Document.objects.select_related("root_document__owner").get(pk=pk)
root_doc = get_root_document(doc)
if not request.user.has_perm("auditlog.view_logentry") or ( if not request.user.has_perm("auditlog.view_logentry") or (
doc.owner is not None root_doc.owner is not None
and doc.owner != request.user and root_doc.owner != request.user
and not request.user.is_superuser and not request.user.is_superuser
): ):
return HttpResponseForbidden( return HttpResponseForbidden(
@@ -2102,9 +2117,7 @@ class DocumentViewSet(
documents = Document.objects.filter(pk__in=document_ids) documents = Document.objects.filter(pk__in=document_ids)
if ( if (
request.user is not None request.user is not None
and documents.exclude( and documents_without_permitted_root(documents, request.user).exists()
pk__in=permitted_document_ids(request.user),
).exists()
): ):
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
@@ -2430,11 +2443,17 @@ class ChatStreamingView(GenericAPIView[Any]):
if doc_id: if doc_id:
try: try:
document = Document.objects.get(id=doc_id) document = Document.objects.select_related(
"root_document__owner",
).get(id=doc_id)
except Document.DoesNotExist: except Document.DoesNotExist:
return HttpResponseBadRequest("Document not found") return HttpResponseBadRequest("Document not found")
if not has_perms_owner_aware(request.user, "view_document", document): if not has_perms_owner_aware(
request.user,
"view_document",
get_root_document(document),
):
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
documents = Document.objects.filter(pk=document.pk) documents = Document.objects.filter(pk=document.pk)
@@ -3605,10 +3624,11 @@ class SelectionDataView(DocumentSelectionMixin, GenericAPIView[Any]):
user=request.user, user=request.user,
validated_data=serializer.validated_data, validated_data=serializer.validated_data,
) )
permitted_documents = Document.objects.filter( documents = Document.objects.filter(pk__in=ids)
id__in=permitted_document_ids(request.user), if (
) documents.count() != len(ids)
if permitted_documents.filter(pk__in=ids).count() != len(ids): or documents_without_permitted_root(documents, request.user).exists()
):
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
correspondents = Correspondent.objects.annotate( correspondents = Correspondent.objects.annotate(
@@ -4790,19 +4810,23 @@ class ShareLinkBundleViewSet(PassUserMixin, ModelViewSet[ShareLinkBundle]):
}, },
) )
documents = list(documents_qs) denied_id = (
permitted_ids = set(permitted_document_ids(request.user)) documents_without_permitted_root(documents_qs, request.user)
for document in documents: .order_by("pk")
if document.pk not in permitted_ids: .values_list("pk", flat=True)
raise ValidationError( .first()
{ )
"document_ids": _( if denied_id is not None:
"Insufficient permissions to share document %(id)s.", raise ValidationError(
) {
% {"id": document.pk}, "document_ids": _(
}, "Insufficient permissions to share document %(id)s.",
) )
% {"id": denied_id},
},
)
documents = list(documents_qs)
document_map = {document.pk: document for document in documents} document_map = {document.pk: document for document in documents}
ordered_documents = [document_map[doc_id] for doc_id in document_ids] ordered_documents = [document_map[doc_id] for doc_id in document_ids]
@@ -5587,6 +5611,23 @@ class TrashView(ListModelMixin, PassUserMixin):
class _TrashPermittedObjectsFilter(PermittedObjectsFilter): class _TrashPermittedObjectsFilter(PermittedObjectsFilter):
include_granted = False include_granted = False
def filter_queryset(self, request, queryset, view):
if request.user.is_superuser or not request.user.is_active:
return super().filter_queryset(request, queryset, view)
# A version belongs to whoever owns its root
def owned_or_unowned(prefix: str) -> Q:
return Q(**{f"{prefix}owner": request.user}) | Q(
**{f"{prefix}owner__isnull": True},
)
return queryset.filter(
(Q(root_document__isnull=True) & owned_or_unowned(""))
| (
Q(root_document__isnull=False) & owned_or_unowned("root_document__")
),
)
filter_backends = (_TrashPermittedObjectsFilter,) filter_backends = (_TrashPermittedObjectsFilter,)
pagination_class = StandardPagination pagination_class = StandardPagination
@@ -5616,12 +5657,11 @@ class TrashView(ListModelMixin, PassUserMixin):
if doc_ids is not None if doc_ids is not None
else self.filter_queryset(self.get_queryset()).all() else self.filter_queryset(self.get_queryset()).all()
) )
if docs.exclude( if documents_without_permitted_root(
pk__in=permitted_document_ids( docs,
request.user, request.user,
perm="delete_document", perm="delete_document",
include_deleted=True, include_deleted=True,
),
).exists(): ).exists():
return HttpResponseForbidden("Insufficient permissions") return HttpResponseForbidden("Insufficient permissions")
action = serializer.validated_data.get("action") action = serializer.validated_data.get("action")
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Afrikaans\n" "Language-Team: Afrikaans\n"
"Language: af_ZA\n" "Language: af_ZA\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ongeldige kleur." msgstr "Ongeldige kleur."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Ongeldige veranderlike bespeur." msgstr "Ongeldige veranderlike bespeur."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Amharic\n" "Language-Team: Amharic\n"
"Language: am_ET\n" "Language: am_ET\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"Language: ar_SA\n" "Language: ar_SA\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "لون خاطئ." msgstr "لون خاطئ."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "اكتشاف متغير خاطئ." msgstr "اكتشاف متغير خاطئ."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "أنت على وشك استعمال حسابك في %(provider_name)s ل
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "كخطوة أخيرة، يرجى ملء النموذج التالي:" msgstr "كخطوة أخيرة، يرجى ملء النموذج التالي:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Belarusian\n" "Language-Team: Belarusian\n"
"Language: be_BY\n" "Language: be_BY\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Няправільны колер." msgstr "Няправільны колер."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Выяўлена няправільная зменная." msgstr "Выяўлена няправільная зменная."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"Language: bg_BG\n" "Language: bg_BG\n"
@@ -1635,48 +1635,48 @@ msgstr "стартиране на работния процес"
msgid "workflow runs" msgid "workflow runs"
msgstr "стартиране на работните процеси" msgstr "стартиране на работните процеси"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Невалиден цвят." msgstr "Невалиден цвят."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Засечена е невалидна променлива." msgstr "Засечена е невалидна променлива."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "На път сте да използвате профила си в %(pr
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Като последна стъпка, моля, попълнете следната форма:" msgstr "Като последна стъпка, моля, попълнете следната форма:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Catalan\n" "Language-Team: Catalan\n"
"Language: ca_ES\n" "Language: ca_ES\n"
@@ -1635,48 +1635,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:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Color Invàlid." msgstr "Color Invàlid."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
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:2959
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:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, 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"
@@ -1913,59 +1913,44 @@ msgstr "Estàs a punt d'emprar el teu %(provider_name)s compte per a fer login."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Com a pas final, completa el següent formulari:" msgstr "Com a pas final, completa el següent formulari:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "No es pot analitzar l'URI {value}, falta l'esquema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "No es pot analitzar l'URI {value}, falta la ubicació de xarxa o la ruta"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "L'esquema d'URI '{parts.scheme}' no està permès. Esquemes permesos: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "No s'ha pogut analitzar l'URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Invalid more_like_id" msgstr "Invalid more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Configuració AI invàlida." msgstr "Configuració AI invàlida."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
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:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
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."
+24 -40
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Czech\n" "Language-Team: Czech\n"
"Language: cs_CZ\n" "Language: cs_CZ\n"
@@ -1635,48 +1635,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:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Neplatná barva." msgstr "Neplatná barva."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
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:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,60 +1913,44 @@ msgstr "Chystáte se použít svůj účet %(provider_name)s k přihlášení."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Jako poslední krok vyplňte následující formulář:" msgstr "Jako poslední krok vyplňte následující formulář:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Nelze analyzovat URI {value}, chybí schéma"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Nelze analyzovat URI {value}, chybí síťové umístění nebo cesta"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI schéma '{parts.scheme}' není povoleno. Povolená schémata: {',\n" msgstr ""
"'.join(allowed_schemes)}"
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nelze zpracovat URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Danish\n" "Language-Team: Danish\n"
"Language: da_DK\n" "Language: da_DK\n"
@@ -1635,48 +1635,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:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ugyldig farve." msgstr "Ugyldig farve."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Ugyldig variabel fundet." msgstr "Ugyldig variabel fundet."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "En %(provider_name)s-konto er ved at blive brugt til indlogning."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Som sidste trin, udfyld venligst flg. formular:" msgstr "Som sidste trin, udfyld venligst flg. formular:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\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"
@@ -1635,48 +1635,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:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ungültige Farbe." msgstr "Ungültige Farbe."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
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:2959
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:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, 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"
@@ -1913,59 +1913,44 @@ msgstr "Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung zu verwenden."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:" msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "URI {value} kann nicht gelesen werden, fehlendes Schema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "URI {value} kann nicht gelesen werden, Netzadresse oder Pfad fehlt"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI-Schema „{parts.scheme}“ ist nicht erlaubt. Erlaubte Schemata: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "URI {value} kann nicht gelesen werden"
#: documents/views.py:336 documents/views.py:2729
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:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Ungültige KI-Konfiguration." msgstr "Ungültige KI-Konfiguration."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
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:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
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."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-06 00:56\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: German\n" "Language-Team: German\n"
"Language: de_DE\n" "Language: de_DE\n"
@@ -1635,48 +1635,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:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ungültige Farbe." msgstr "Ungültige Farbe."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
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:2959
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:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, 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"
@@ -1913,59 +1913,44 @@ msgstr "Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung zu verwenden."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:" msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "URI {value} kann nicht gelesen werden, fehlendes Schema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "URI {value} kann nicht gelesen werden, Netzadresse oder Pfad fehlt"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI-Schema „{parts.scheme}“ ist nicht erlaubt. Erlaubte Schemata: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "URI {value} kann nicht gelesen werden"
#: documents/views.py:336 documents/views.py:2729
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:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Ungültige KI-Konfiguration." msgstr "Ungültige KI-Konfiguration."
#: documents/views.py:1687 #: documents/views.py:1694
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:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
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:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
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."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Greek\n" "Language-Team: Greek\n"
"Language: el_GR\n" "Language: el_GR\n"
@@ -1635,48 +1635,48 @@ msgstr "εκτέλεση ροής εργασίας"
msgid "workflow runs" msgid "workflow runs"
msgstr "εκτελέσεις ροής εργασίας" msgstr "εκτελέσεις ροής εργασίας"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Άκυρο χρώμα." msgstr "Άκυρο χρώμα."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή." msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "Πρόκειται να χρησιμοποιήσετε το λογαρι
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Ως τελικό βήμα, παρακαλούμε να συμπληρώσετε την ακόλουθη φόρμα:" msgstr "Ως τελικό βήμα, παρακαλούμε να συμπληρώσετε την ακόλουθη φόρμα:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+22 -39
View File
@@ -2,7 +2,7 @@ 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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2022-02-17 04:17\n" "PO-Revision-Date: 2022-02-17 04:17\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: English\n" "Language-Team: English\n"
@@ -1652,49 +1652,49 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
msgid "" msgid ""
"Custom fields must be a list of integers or an object mapping ids to values." "Custom fields must be a list of integers or an object mapping ids to values."
msgstr "" msgstr ""
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1941,61 +1941,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "" msgid ", "
"URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '."
"join(allowed_schemes)}"
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"Language: es_ES\n" "Language: es_ES\n"
@@ -1635,48 +1635,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:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Color inválido." msgstr "Color inválido."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variable inválida." msgstr "Variable inválida."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
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:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, 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"
@@ -1913,59 +1913,44 @@ msgstr "Estás a punto de usar tu cuenta de %(provider_name)s para iniciar sesi
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Como último paso, por favor complete el siguiente formulario:" msgstr "Como último paso, por favor complete el siguiente formulario:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "No se puede analizar la URI {value}, falta el esquema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "No se puede analizar la URI {value}, falta la ubicación de la red o la ruta"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "El esquema URI '{parts.scheme}' no está permitido. Esquemas permitidos: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "No se puede analizar la URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
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:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
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:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
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."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Estonian\n" "Language-Team: Estonian\n"
"Language: et_EE\n" "Language: et_EE\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Persian\n" "Language-Team: Persian\n"
"Language: fa_IR\n" "Language: fa_IR\n"
@@ -1635,48 +1635,48 @@ msgstr "گردش کار"
msgid "workflow runs" msgid "workflow runs"
msgstr "گردش کار اجرا می شود" msgstr "گردش کار اجرا می شود"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "رنگ نامعتبر" msgstr "رنگ نامعتبر"
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "متغیر نامعتبر شناسایی شده است." msgstr "متغیر نامعتبر شناسایی شده است."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "به عنوان مرحله آخر ، لطفاً فرم زیر را تکمیل کنید:" msgstr "به عنوان مرحله آخر ، لطفاً فرم زیر را تکمیل کنید:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"Language: fi_FI\n" "Language: fi_FI\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Virheellinen väri." msgstr "Virheellinen väri."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Tiedostotyyppiä %(type)s ei tueta" msgstr "Tiedostotyyppiä %(type)s ei tueta"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Virheellinen muuttuja havaittu." msgstr "Virheellinen muuttuja havaittu."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: French\n" "Language-Team: French\n"
"Language: fr_FR\n" "Language: fr_FR\n"
@@ -1635,48 +1635,48 @@ msgstr "exécution du workflow"
msgid "workflow runs" msgid "workflow runs"
msgstr "le flux de travail s'exécute" msgstr "le flux de travail s'exécute"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Droits insuffisants." msgstr "Droits insuffisants."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Couleur incorrecte." msgstr "Couleur incorrecte."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Type de fichier %(type)s non pris en charge" msgstr "Type de fichier %(type)s non pris en charge"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "L'id du champ personnalisé doit être un entier : %(id)s" msgstr "L'id du champ personnalisé doit être un entier : %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Le champ personnalisé avec l'id %(id)s n'existe pas" msgstr "Le champ personnalisé avec l'id %(id)s n'existe pas"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Les champs personnalisés doivent être une liste d'entiers ou un mappage d'identifiants à des valeurs." msgstr "Les champs personnalisés doivent être une liste d'entiers ou un mappage d'identifiants à des valeurs."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Certains champs personnalisés n'existent pas ou ont été spécifiés deux fois." msgstr "Certains champs personnalisés n'existent pas ou ont été spécifiés deux fois."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variable invalide détectée." msgstr "Variable invalide détectée."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Les identificateurs de document en double ne sont pas autorisés." msgstr "Les identificateurs de document en double ne sont pas autorisés."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Documents introuvables : %(ids)s" msgstr "Documents introuvables : %(ids)s"
@@ -1912,59 +1912,44 @@ msgstr "Vous vous apprêtez à utiliser votre compte %(provider_name)s pour vous
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Pour finir, veuillez remplir le formulaire suivant :" msgstr "Pour finir, veuillez remplir le formulaire suivant :"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Impossible d'analyser l'URI {value}, schéma manquant"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Impossible d'analyser l'URI {value}, emplacement réseau ou chemin manquant"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Le schéma d'URI « {parts.scheme} » n'est pas autorisé. Schémas autorisés : {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Impossible d'analyser l'URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "More_like_id invalide" msgstr "More_like_id invalide"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Configuration IA invalide." msgstr "Configuration IA invalide."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "La requête d'arrière-plan IA a expiré." msgstr "La requête d'arrière-plan IA a expiré."
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Spécifiez seulement un texte, titre, recherche ou more_like_id." msgstr "Spécifiez seulement un texte, titre, recherche ou more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Droits d'accès insuffisant pour partager %(id)s document." msgstr "Droits d'accès insuffisant pour partager %(id)s document."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Le paquet est déjà en cours de traitement." msgstr "Le paquet est déjà en cours de traitement."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Le lot de liens de partage est en cours de préparation. Veuillez réessayer plus tard." msgstr "Le lot de liens de partage est en cours de préparation. Veuillez réessayer plus tard."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Le lot de liens de partage n'est pas disponible." msgstr "Le lot de liens de partage n'est pas disponible."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Hebrew\n" "Language-Team: Hebrew\n"
"Language: he_IL\n" "Language: he_IL\n"
@@ -1636,48 +1636,48 @@ msgstr "הרצת זרימת עבודה"
msgid "workflow runs" msgid "workflow runs"
msgstr "הרצות זרימת עבודה" msgstr "הרצות זרימת עבודה"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "צבע לא חוקי." msgstr "צבע לא חוקי."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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 חייב להיות מספרי: %(id)s" msgstr "שדה מותאם אישית id חייב להיות מספרי: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "שדה מותאם אישית עם מזהה %(id)s איננו קיים" msgstr "שדה מותאם אישית עם מזהה %(id)s איננו קיים"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "משתנה לא חוקי זוהה." msgstr "משתנה לא חוקי זוהה."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "מזהי מסמכים כפולים אינם מורשים." msgstr "מזהי מסמכים כפולים אינם מורשים."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "מסמכים לא נמצאו: %(ids)s" msgstr "מסמכים לא נמצאו: %(ids)s"
@@ -1914,59 +1914,44 @@ msgstr "שלך כדי להתחבר %(provider_name)s אתה עומד להשתמ
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr ": כצעד אחרון, אנא מלא את הטופס הבא:" msgstr ": כצעד אחרון, אנא מלא את הטופס הבא:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "לא ניתן לפענח את ה-URI ‏{value}, חסר פרוטוקול (scheme)"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "לא ניתן לפענח את ה-URI ‏{value}, חסר מיקום רשת (net location) או נתיב"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "פרוטוקול ה-URI ‏'{parts.scheme}' אינו מורשה. הפרוטוקולים המורשים הם: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "לא ניתן לפענח את ה URI ‏{value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "מזהה more_like_id אינו תקין" msgstr "מזהה more_like_id אינו תקין"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "הגדרות בינה מלאכותית שגויות." msgstr "הגדרות בינה מלאכותית שגויות."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "יש לציין רק אחד מהבאים: text‏, title_search‏, query או more_like_id." msgstr "יש לציין רק אחד מהבאים: text‏, title_search‏, query או more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "הרשאות לא מספיקות לשיתוף מסמך %(id)s." msgstr "הרשאות לא מספיקות לשיתוף מסמך %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "החבילה (Bundle) כבר נמצאת בתהליך עיבוד." msgstr "החבילה (Bundle) כבר נמצאת בתהליך עיבוד."
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "חבילת קישור השיתוף אינה זמינה." msgstr "חבילת קישור השיתוף אינה זמינה."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Hindi\n" "Language-Team: Hindi\n"
"Language: hi_IN\n" "Language: hi_IN\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Croatian\n" "Language-Team: Croatian\n"
"Language: hr_HR\n" "Language: hr_HR\n"
@@ -1635,48 +1635,48 @@ msgstr "pokretanje tijeka rada"
msgid "workflow runs" msgid "workflow runs"
msgstr "tijek rada pokrenut" msgstr "tijek rada pokrenut"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Nedovoljne ovlasti." msgstr "Nedovoljne ovlasti."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Nevažeća boja." msgstr "Nevažeća boja."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Vrsta datoteke %(type)s nije podržana" msgstr "Vrsta datoteke %(type)s nije podržana"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 prilagođenog polja mora biti cijeli broj: %(id)s" msgstr "ID prilagođenog polja mora biti cijeli broj: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Prilagođeno polje s ID-om %(id)s ne postoji" msgstr "Prilagođeno polje s ID-om %(id)s ne postoji"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Prilagođena polja moraju biti popis cijelih brojeva ili ID-ova objekata koji preslikavaju vrijednosti." msgstr "Prilagođena polja moraju biti popis cijelih brojeva ili ID-ova objekata koji preslikavaju vrijednosti."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Neka prilagođena polja ne postoje ili su navedena dvaput." msgstr "Neka prilagođena polja ne postoje ili su navedena dvaput."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Otkrivena je nevaljana vrsta datoteke." msgstr "Otkrivena je nevaljana vrsta datoteke."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Duplicirani identifikatori dokumenata nisu dopušteni." msgstr "Duplicirani identifikatori dokumenata nisu dopušteni."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumenti nisu pronađeni: %(ids)s" msgstr "Dokumenti nisu pronađeni: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Upravo ćete koristiti svoj račun %(provider_name)s za prijavu."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Kao posljednji korak ispunite sljedeći obrazac:" msgstr "Kao posljednji korak ispunite sljedeći obrazac:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Nije moguće analizirati URI {value}, nedostaje shema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Nije moguće analizirati URI {value}, nedostaje mrežna lokacija ili put"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI shema '{parts.scheme}' nije dopuštena. Dopuštene sheme: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nije moguće raščlaniti URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Nevažeći more_like_id" msgstr "Nevažeći more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Nevažeća AI konfiguracija." msgstr "Nevažeća AI konfiguracija."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Zahtjev prema AI pozadinskom sustavu je istekao." msgstr "Zahtjev prema AI pozadinskom sustavu je istekao."
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "AI pozadinski sustav je odbio zahtjev. Provjerite zapise (logs) za više detalja." msgstr "AI pozadinski sustav je odbio zahtjev. Provjerite zapise (logs) za više detalja."
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Navedite samo jedno od: text, title_search, query ili more_like_id." msgstr "Navedite samo jedno od: text, title_search, query ili more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Nedovoljne ovlasti za dijeljenje dokumenta %(id)s." msgstr "Nedovoljne ovlasti za dijeljenje dokumenta %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paket se već obrađuje." msgstr "Paket se već obrađuje."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Paket linka za dijeljenje se još priprema. Pokušajte ponovo kasnije." msgstr "Paket linka za dijeljenje se još priprema. Pokušajte ponovo kasnije."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Paket linka za dijeljenje nije dostupan." msgstr "Paket linka za dijeljenje nije dostupan."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Hungarian\n" "Language-Team: Hungarian\n"
"Language: hu_HU\n" "Language: hu_HU\n"
@@ -1635,48 +1635,48 @@ msgstr "munkafolyamat futtatás"
msgid "workflow runs" msgid "workflow runs"
msgstr "munkafolyamat futtatások" msgstr "munkafolyamat futtatások"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Nincs jogosúltsága." msgstr "Nincs jogosúltsága."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Érvénytelen szín." msgstr "Érvénytelen szín."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "%(type)s fájltípus nem támogatott" msgstr "%(type)s fájltípus nem támogatott"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "Az egyéni mező azonosítójának egész számnak kell lennie: %(id)s" msgstr "Az egyéni mező azonosítójának egész számnak kell lennie: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "A(z) %(id)s azonosítójú egyéni mező nem létezik" msgstr "A(z) %(id)s azonosítójú egyéni mező nem létezik"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Az egyéni mezőknek egész számok listájának vagy azonosítókat értékekhez rendelő objektumnak kell lenniük." msgstr "Az egyéni mezőknek egész számok listájának vagy azonosítókat értékekhez rendelő objektumnak kell lenniük."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Néhány egyéni mező nem létezik, vagy kétszer lett megadva." msgstr "Néhány egyéni mező nem létezik, vagy kétszer lett megadva."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Érvénytelen változó észlelve." msgstr "Érvénytelen változó észlelve."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "A dokumentumazonosítók duplikálása nem megengedett." msgstr "A dokumentumazonosítók duplikálása nem megengedett."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumentumok nem találhatók: %(ids)s" msgstr "Dokumentumok nem találhatók: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "A %(provider_name)s felhasználói fiókkal fogsz belépni."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Utolsó lépésként kérjük válaszoljon az alábbi kérdésekre:" msgstr "Utolsó lépésként kérjük válaszoljon az alábbi kérdésekre:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "A {value} URI értelmezése sikertelen, hiányzó séma"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "A {value} URI értelmezése sikertelen, hiányzó hálózati vagy elérési útvonal"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "A '{parts.scheme}' séma nem engedélyezett. Engedélyezett sémák: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "A {value} URI értelmezése sikertelen"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Érvénytelen more_like_id" msgstr "Érvénytelen more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Érvénytelen MI konfiguráció." msgstr "Érvénytelen MI konfiguráció."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "A text, title_search, query, vagy more_like_id közül csak egyet adjon meg." msgstr "A text, title_search, query, vagy more_like_id közül csak egyet adjon meg."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Nincs megfelelő jogosultság a %(id)s dokumentum megosztásához." msgstr "Nincs megfelelő jogosultság a %(id)s dokumentum megosztásához."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "A csomag feldolgozása már folyamatban van." msgstr "A csomag feldolgozása már folyamatban van."
#: documents/views.py:4910 #: documents/views.py:4934
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 "A megosztási linkcsomag készítése folyamatban. Kérjük, próbálja meg később." msgstr "A megosztási linkcsomag készítése folyamatban. Kérjük, próbálja meg később."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "A megosztási linkcsomag nem elérhető." msgstr "A megosztási linkcsomag nem elérhető."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Indonesian\n" "Language-Team: Indonesian\n"
"Language: id_ID\n" "Language: id_ID\n"
@@ -1635,48 +1635,48 @@ msgstr "jalankan alur kerja"
msgid "workflow runs" msgid "workflow runs"
msgstr "daftar jalankan alur kerja" msgstr "daftar jalankan alur kerja"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Izin tidak mencukupi" msgstr "Izin tidak mencukupi"
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Warna tidak sesuai." msgstr "Warna tidak sesuai."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Jenis berkas %(type)s tidak didukung" msgstr "Jenis berkas %(type)s tidak didukung"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 kolom kustom harus berupa bilangan bulat: %(id)s" msgstr "Id kolom kustom harus berupa bilangan bulat: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Kolom kustom dengan id %(id)s tidak ada" msgstr "Kolom kustom dengan id %(id)s tidak ada"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Kolom kustom harus berupa daftar bilangan bulat atau objek yang memetakan id ke nilai." msgstr "Kolom kustom harus berupa daftar bilangan bulat atau objek yang memetakan id ke nilai."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Beberapa kolom kustom tidak ada atau ditentukan dua kali." msgstr "Beberapa kolom kustom tidak ada atau ditentukan dua kali."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variabel ilegal terdeteksi." msgstr "Variabel ilegal terdeteksi."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Penggunaan pengenal dokumen ganda tidak diperbolehkan." msgstr "Penggunaan pengenal dokumen ganda tidak diperbolehkan."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumen tidak ditemukan: %(ids)s" msgstr "Dokumen tidak ditemukan: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Anda akan menggunakan akun %(provider_name)s Anda untuk masuk."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Sebagai langkah terakhir, mohon formulir berikut:" msgstr "Sebagai langkah terakhir, mohon formulir berikut:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Gagal membaca URI {value}, skema tidak ditemukan"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Gagal membaca URI {value}, lokasi jaringan atau path tidak ditemukan"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Skema URI '{parts.scheme}' tidak diizinkan. Skema yang diizinkan: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Gagal membaca URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Izin tidak mencukupi untuk berbagi dokumen %(id)s" msgstr "Izin tidak mencukupi untuk berbagi dokumen %(id)s"
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paket sedang diproses." msgstr "Paket sedang diproses."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Bundel tautan berbagi masih dalam proses persiapan. Silakan coba lagi nanti." msgstr "Bundel tautan berbagi masih dalam proses persiapan. Silakan coba lagi nanti."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Bundel tautan berbagi tidak tersedia." msgstr "Bundel tautan berbagi tidak tersedia."
+33 -48
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-10 00:58\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"Language: it_IT\n" "Language: it_IT\n"
@@ -253,7 +253,7 @@ msgstr "documento radice per questa versione"
#: documents/models.py:325 #: documents/models.py:325
msgid "version index" msgid "version index"
msgstr "indice della versione" msgstr "indice versione"
#: documents/models.py:329 #: documents/models.py:329
msgid "Index of this version within the root document." msgid "Index of this version within the root document."
@@ -261,11 +261,11 @@ msgstr "Indice di questa versione all'interno del documento radice."
#: documents/models.py:333 #: documents/models.py:333
msgid "version label" msgid "version label"
msgstr "etichetta della versione" msgstr "etichetta versione"
#: documents/models.py:337 #: documents/models.py:337
msgid "Optional short label for a document version." msgid "Optional short label for a document version."
msgstr "Etichetta breve facoltativa per una versione del documento." msgstr "Etichetta abbreviata facoltativa per una versione del documento."
#: documents/models.py:342 documents/models.py:961 documents/models.py:992 #: documents/models.py:342 documents/models.py:961 documents/models.py:992
#: documents/models.py:1096 documents/models.py:2126 #: documents/models.py:1096 documents/models.py:2126
@@ -1006,23 +1006,23 @@ msgstr "note"
#: documents/models.py:996 #: documents/models.py:996
msgid "page" msgid "page"
msgstr "" msgstr "pagina"
#: documents/models.py:997 #: documents/models.py:997
msgid "Page of the original file, starting at 1" msgid "Page of the original file, starting at 1"
msgstr "" msgstr "Pagina del file originale, partendo da 1"
#: documents/models.py:1052 #: documents/models.py:1052
msgid "format" msgid "format"
msgstr "" msgstr "formato"
#: documents/models.py:1056 #: documents/models.py:1056
msgid "document barcode" msgid "document barcode"
msgstr "" msgstr "codice a barre del documento"
#: documents/models.py:1057 #: documents/models.py:1057
msgid "document barcodes" msgid "document barcodes"
msgstr "" msgstr "codici a barre del documento"
#: documents/models.py:1066 #: documents/models.py:1066
msgid "Original" msgid "Original"
@@ -1635,48 +1635,48 @@ msgstr "esecuzione del flusso di lavoro"
msgid "workflow runs" msgid "workflow runs"
msgstr "esecuzioni del flusso di lavoro" msgstr "esecuzioni del flusso di lavoro"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Autorizzazioni insufficienti." msgstr "Autorizzazioni insufficienti."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Colore non valido." msgstr "Colore non valido."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Il tipo di file %(type)s non è supportato" msgstr "Il tipo di file %(type)s non è supportato"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "L'ID del campo personalizzato deve essere un numero intero: %(id)s" msgstr "L'ID del campo personalizzato deve essere un numero intero: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Il campo personalizzato con ID %(id)s non esiste" msgstr "Il campo personalizzato con ID %(id)s non esiste"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "I campi personalizzati devono essere un elenco di numeri interi o un oggetto che mappa gli ID ai valori." msgstr "I campi personalizzati devono essere un elenco di numeri interi o un oggetto che mappa gli ID ai valori."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Alcuni campi personalizzati non esistono o sono stati specificati due volte." msgstr "Alcuni campi personalizzati non esistono o sono stati specificati due volte."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variabile non valida rilevata." msgstr "Variabile non valida rilevata."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Non sono consentiti identificatori di documenti duplicati." msgstr "Non sono consentiti identificatori di documenti duplicati."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Documenti non trovati: %(ids)s" msgstr "Documenti non trovati: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Stai per utilizzare il tuo account %(provider_name)s per effettuare il l
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Come ultimo passo, compila il seguente modulo:" msgstr "Come ultimo passo, compila il seguente modulo:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Impossibile analizzare l'URI {value}, schema mancante"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Impossibile analizzare l'URI {value}, posizione o percorso di rete mancante"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Lo schema URI '{parts.scheme}' non è consentito. Schemi consentiti: {', '.join(allowed_schemes)}" msgstr ", "
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Impossibile analizzare l'URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "more_like_id non valido" msgstr "more_like_id non valido"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Configurazione AI non valida." msgstr "Configurazione AI non valida."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Richiesta di backend AI scaduta." msgstr "Richiesta di backend AI scaduta."
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "Il backend IA ha rifiutato la richiesta. Controlla i log per i dettagli." msgstr "Il backend IA ha rifiutato la richiesta. Controlla i log per i dettagli."
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Specificare solo uno tra text, title_search, query o more_like_id." msgstr "Specificare solo uno tra text, title_search, query o more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Autorizzazioni insufficienti per condividere il documento %(id)s." msgstr "Autorizzazioni insufficienti per condividere il documento %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Il pacchetto è già in fase di elaborazione." msgstr "Il pacchetto è già in fase di elaborazione."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Il pacchetto di link di condivisione è ancora in fase di preparazione. Riprova più tardi." msgstr "Il pacchetto di link di condivisione è ancora in fase di preparazione. Riprova più tardi."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Il pacchetto di link di condivisione non è disponibile." msgstr "Il pacchetto di link di condivisione non è disponibile."
@@ -2183,7 +2168,7 @@ msgstr "Abilita la suddivisione sui codici a barre dei tag"
#: paperless/models.py:308 #: paperless/models.py:308
msgid "Stores the values of detected barcodes" msgid "Stores the values of detected barcodes"
msgstr "" msgstr "Memorizza i valori dei codici a barre individuati"
#: paperless/models.py:318 #: paperless/models.py:318
msgid "Sets the remote OCR engine" msgid "Sets the remote OCR engine"
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"Language: ja_JP\n" "Language: ja_JP\n"
@@ -1635,48 +1635,48 @@ msgstr "ワークフローの実行"
msgid "workflow runs" msgid "workflow runs"
msgstr "ワークフローの実行" msgstr "ワークフローの実行"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "無効な色" msgstr "無効な色"
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "無効な変数を検出しました" msgstr "無効な変数を検出しました"
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "%(provider_name)s アカウントでログインしようとしていま
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "最後のステップとして、以下のフォームに記入してください" msgstr "最後のステップとして、以下のフォームに記入してください"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Korean\n" "Language-Team: Korean\n"
"Language: ko_KR\n" "Language: ko_KR\n"
@@ -1635,48 +1635,48 @@ msgstr "워크플로 실행"
msgid "workflow runs" msgid "workflow runs"
msgstr "워크플로우 실행" msgstr "워크플로우 실행"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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 필드는 반드시 정수여야 합니다: %(id)s" msgstr "사용자 정의 ID 필드는 반드시 정수여야 합니다: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "%(id)s를 ID로 가지는 사용자 정의 필드가 존재하지 않습니다." msgstr "%(id)s를 ID로 가지는 사용자 정의 필드가 존재하지 않습니다."
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "사용자 정의 필드는 정수 리스트이거나, ID를 값에 매핑하는 객체여야 합니다." msgstr "사용자 정의 필드는 정수 리스트이거나, ID를 값에 매핑하는 객체여야 합니다."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "잘못된 변수가 감지되었습니다." msgstr "잘못된 변수가 감지되었습니다."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "%(provider_name)s 의 계정을 사용하여 로그인하려고 합니
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "마지막 단계로 다음 양식을 작성해 주세요:" msgstr "마지막 단계로 다음 양식을 작성해 주세요:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "{value} URI를 파싱할 수 없습니다: 스킴이 누락되었습니다."
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "{value} URI를 파싱할 수 없습니다: 네트워크 위치 또는 경로가 누락되었습니다."
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI 스킴 '{parts.scheme}'는 허용되지 않습니다. 허용된 스킴: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "{value} URI를 파싱할 수 없음"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Luxembourgish\n" "Language-Team: Luxembourgish\n"
"Language: lb_LU\n" "Language: lb_LU\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ongëlteg Faarf." msgstr "Ongëlteg Faarf."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Fichierstyp %(type)s net ënnerstëtzt" msgstr "Fichierstyp %(type)s net ënnerstëtzt"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Ongëlteg Zeechen detektéiert." msgstr "Ongëlteg Zeechen detektéiert."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Lithuanian\n" "Language-Team: Lithuanian\n"
"Language: lt_LT\n" "Language: lt_LT\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr "Ketinate prisijungimui naudoti savo %(provider_name)s paskyrą."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Galiausiai užpildykite šią formą:" msgstr "Galiausiai užpildykite šią formą:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Nepavyko apdoroti URI {value}, trūksta schemos"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Nepavyko apdoroti URI {value}, trūksta tinklo vietos arba kelio"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI schema '{parts.scheme}' nėra leistina. Galimos schemos: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nepavyko apdoroti URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Nepakanka leidimų bendrinti dokumentą %(id)s." msgstr "Nepakanka leidimų bendrinti dokumentą %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Rinkinys jau apdorojamas." msgstr "Rinkinys jau apdorojamas."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Bendrinimo nuorodų rinkinys vis dar ruošiamas. Bandykite dar kartą vėliau." msgstr "Bendrinimo nuorodų rinkinys vis dar ruošiamas. Bandykite dar kartą vėliau."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Dalinimos nuorodų rinkinys yra nepasiekiamas." msgstr "Dalinimos nuorodų rinkinys yra nepasiekiamas."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Latvian\n" "Language-Team: Latvian\n"
"Language: lv_LV\n" "Language: lv_LV\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Macedonian\n" "Language-Team: Macedonian\n"
"Language: mk_MK\n" "Language: mk_MK\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Malay\n" "Language-Team: Malay\n"
"Language: ms_MY\n" "Language: ms_MY\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "" msgstr ""
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "" msgstr ""
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
"Language: nl_NL\n" "Language: nl_NL\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ongeldig kleur." msgstr "Ongeldig kleur."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Bestandstype %(type)s niet ondersteund" msgstr "Bestandstype %(type)s niet ondersteund"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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:2421
#, 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 "Aangepast veld met id %(id)s bestaat niet" msgstr "Aangepast veld met id %(id)s bestaat niet"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Aangepaste velden moeten een lijst van numerieke waarden zijn of een object mapping id naar waarden." msgstr "Aangepaste velden moeten een lijst van numerieke waarden zijn of een object mapping id naar waarden."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Sommige aangepaste velden bestaan niet of zijn dubbel opgegeven." msgstr "Sommige aangepaste velden bestaan niet of zijn dubbel opgegeven."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Ongeldige variabele ontdekt." msgstr "Ongeldige variabele ontdekt."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "Je staat op het punt om met je %(provider_name)s account in te loggen."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Vul als laatste stap het volgende formulier in:" msgstr "Vul als laatste stap het volgende formulier in:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Norwegian\n" "Language-Team: Norwegian\n"
"Language: no_NO\n" "Language: no_NO\n"
@@ -1635,48 +1635,48 @@ msgstr "workflow run (NO)"
msgid "workflow runs" msgid "workflow runs"
msgstr "workflow runs (NO)" msgstr "workflow runs (NO)"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Utilstrekkelige tillatelser." msgstr "Utilstrekkelige tillatelser."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ugyldig farge." msgstr "Ugyldig farge."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Filtype %(type)s støttes ikke" msgstr "Filtype %(type)s støttes ikke"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "Egendefinert felt-id må være et heltall: %(id)s" msgstr "Egendefinert felt-id må være et heltall: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Egendefinert felt med id %(id)s finnes ikke" msgstr "Egendefinert felt med id %(id)s finnes ikke"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Custom fields must be a list of integers or an object mapping ids to values. (NO)" msgstr "Custom fields must be a list of integers or an object mapping ids to values. (NO)"
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Some custom fields don't exist or were specified twice. (NO)" msgstr "Some custom fields don't exist or were specified twice. (NO)"
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Ugyldig variabel oppdaget." msgstr "Ugyldig variabel oppdaget."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Duplicate document identifiers are not allowed. (NO)" msgstr "Duplicate document identifiers are not allowed. (NO)"
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Documents not found: %(ids)s (NO)" msgstr "Documents not found: %(ids)s (NO)"
@@ -1913,59 +1913,44 @@ msgstr "You are about to use your %(provider_name)s account to login. (NO)"
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "As a final step, please complete the following form: (NO)" msgstr "As a final step, please complete the following form: (NO)"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Unable to parse URI {value}, missing scheme (NO)"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Unable to parse URI {value}, missing net location or path (NO)"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)} (NO)" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Unable to parse URI {value} (NO)"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Invalid more_like_id (NO)" msgstr "Invalid more_like_id (NO)"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Invalid AI configuration. (NO)" msgstr "Invalid AI configuration. (NO)"
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Forespørselen til KI-tjenesten fikk tidsavbrudd." msgstr "Forespørselen til KI-tjenesten fikk tidsavbrudd."
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Specify only one of text, title_search, query, or more_like_id. (NO)" msgstr "Specify only one of text, title_search, query, or more_like_id. (NO)"
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Insufficient permissions to share document %(id)s. (NO)" msgstr "Insufficient permissions to share document %(id)s. (NO)"
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Bundle is already being processed. (NO)" msgstr "Bundle is already being processed. (NO)"
#: documents/views.py:4910 #: documents/views.py:4934
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 "The share link bundle is still being prepared. Please try again later. (NO)" msgstr "The share link bundle is still being prepared. Please try again later. (NO)"
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "The share link bundle is unavailable. (NO)" msgstr "The share link bundle is unavailable. (NO)"
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"Language: pl_PL\n" "Language: pl_PL\n"
@@ -1635,48 +1635,48 @@ msgstr "uruchomienie przepływu pracy"
msgid "workflow runs" msgid "workflow runs"
msgstr "uruchomienia przepływu pracy" msgstr "uruchomienia przepływu pracy"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Niewystarczające uprawnienia." msgstr "Niewystarczające uprawnienia."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Nieprawidłowy kolor." msgstr "Nieprawidłowy kolor."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Typ pliku %(type)s nie jest obsługiwany" msgstr "Typ pliku %(type)s nie jest obsługiwany"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "Identyfikator pola niestandardowego musi być liczbą całkowitą: %(id)s" msgstr "Identyfikator pola niestandardowego musi być liczbą całkowitą: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Pole niestandardowe z id %(id)s nie istnieje" msgstr "Pole niestandardowe z id %(id)s nie istnieje"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Pola niestandardowe muszą być listą liczb całkowitych lub obiektem mapującym identyfikatory na wartości." msgstr "Pola niestandardowe muszą być listą liczb całkowitych lub obiektem mapującym identyfikatory na wartości."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Niektóre niestandardowe pola nie istnieją lub zostały określone dwukrotnie." msgstr "Niektóre niestandardowe pola nie istnieją lub zostały określone dwukrotnie."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Wykryto nieprawidłową zmienną." msgstr "Wykryto nieprawidłową zmienną."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Nie dopuszcza się powielania identyfikatorów dokumentów." msgstr "Nie dopuszcza się powielania identyfikatorów dokumentów."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Nie znaleziono dokumentów: %(ids)s" msgstr "Nie znaleziono dokumentów: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Zamierzasz użyć konta %(provider_name)s aby się zalogować."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Na koniec należy wypełnić poniższy formularz:" msgstr "Na koniec należy wypełnić poniższy formularz:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Nie można przeanalizować URI {value}, brak schematu"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Nie można przeanalizować URI {value}, brak lokalizacji sieciowej lub ścieżki"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Schemat URI '{parts.scheme}' jest niedozwolony. Dozwolone schematy: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nie można przetworzyć URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Nieprawidłowy more_like_id" msgstr "Nieprawidłowy more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Brak uprawnień do udostępnienia dokumentu %(id)s." msgstr "Brak uprawnień do udostępnienia dokumentu %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Pakiet jest już przetwarzany." msgstr "Pakiet jest już przetwarzany."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Pakiet do udostępnienia jest nadal przygotowywany. Spróbuj ponownie później." msgstr "Pakiet do udostępnienia jest nadal przygotowywany. Spróbuj ponownie później."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Pakiet do udostępnienia jest niedostępny." msgstr "Pakiet do udostępnienia jest niedostępny."
+24 -40
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -1636,48 +1636,48 @@ msgstr "execução do fluxo de trabalho"
msgid "workflow runs" msgid "workflow runs"
msgstr "execução de fluxo de trabalho" msgstr "execução de fluxo de trabalho"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Permissões insuficientes." msgstr "Permissões insuficientes."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Cor inválida." msgstr "Cor inválida."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Tipo de arquivo %(type)s não suportado" msgstr "Tipo de arquivo %(type)s não suportado"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "O ID do campo personalizado deve ser um número inteiro: %(id)s" msgstr "O ID do campo personalizado deve ser um número inteiro: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Não existe um campo personalizado com o ID %(id)s" msgstr "Não existe um campo personalizado com o ID %(id)s"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Campos personalizados devem estar em uma lista de números inteiros ou em um objeto que relacione IDs a valores." msgstr "Campos personalizados devem estar em uma lista de números inteiros ou em um objeto que relacione IDs a valores."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Campos personalizados inválidos ou duplicados." msgstr "Campos personalizados inválidos ou duplicados."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variável inválida detectada." msgstr "Variável inválida detectada."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Não são permitidos identificadores de documento duplicados." msgstr "Não são permitidos identificadores de documento duplicados."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Documentos não encontrados: %(ids)s" msgstr "Documentos não encontrados: %(ids)s"
@@ -1914,60 +1914,44 @@ msgstr "Você está prestes a usar sua conta %(provider_name)s para entrar."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Como etapa final, por favor preencha o seguinte formulário:" msgstr "Como etapa final, por favor preencha o seguinte formulário:"
#: documents/validators.py:24 #: documents/validators.py:36
#, python-brace-format msgid ", "
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Não é possível analisar o URI {value}, esquema ausente"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "" msgstr ""
#: documents/validators.py:36 #: documents/views.py:337 documents/views.py:2748
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
msgstr "Esquema URI '{parts.scheme}' não é permitido. Esquemas permitidos:\n"
"{', '.join(allowed_schemes)}"
#: documents/validators.py:45
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Não é possível analisar o URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "more_like_id inválido" msgstr "more_like_id inválido"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Configuração de IA inválida." msgstr "Configuração de IA inválida."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "A requisição backend da IA expirou." msgstr "A requisição backend da IA expirou."
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 apenas um text, title_search, consulta ou mais_like_id." msgstr "Especifique apenas um text, title_search, consulta ou mais_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Permissões insuficientes para compartilhar o documento %(id)s." msgstr "Permissões insuficientes para compartilhar o documento %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Pacote já está sendo processado." msgstr "Pacote já está sendo processado."
#: documents/views.py:4910 #: documents/views.py:4934
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 "O pacote de link de compartilhamento ainda está sendo preparado. Tente novamente mais tarde." msgstr "O pacote de link de compartilhamento ainda está sendo preparado. Tente novamente mais tarde."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "O pacote de link de compartilhamento não está disponível." msgstr "O pacote de link de compartilhamento não está disponível."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"Language: pt_PT\n" "Language: pt_PT\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Cor invalida." msgstr "Cor invalida."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Tipo de arquivo %(type)s não suportado" msgstr "Tipo de arquivo %(type)s não suportado"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variável inválida detetada." msgstr "Variável inválida detetada."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Não foi possível analisar o URI {value}, o esquema está em falta"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Não foi possível analisar o URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Romanian\n" "Language-Team: Romanian\n"
"Language: ro_RO\n" "Language: ro_RO\n"
@@ -1635,48 +1635,48 @@ msgstr "rulare flux de lucru"
msgid "workflow runs" msgid "workflow runs"
msgstr "rulări flux de lucru" msgstr "rulări flux de lucru"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Culoare invalidă." msgstr "Culoare invalidă."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Tip de fișier %(type)s nesuportat" msgstr "Tip de fișier %(type)s nesuportat"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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-ul câmpului personalizat trebuie să fie un număr întreg: %(id)s" msgstr "Id-ul câmpului personalizat trebuie să fie un număr întreg: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Câmp personalizat cu id %(id)s nu există" msgstr "Câmp personalizat cu id %(id)s nu există"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Câmpurile personalizate trebuie să fie o listă de numere întregi sau un obiect mapping ids la valori." msgstr "Câmpurile personalizate trebuie să fie o listă de numere întregi sau un obiect mapping ids la valori."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Unele câmpuri personalizate nu există sau au fost specificate de două ori." msgstr "Unele câmpuri personalizate nu există sau au fost specificate de două ori."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Variabilă nevalidă detectată." msgstr "Variabilă nevalidă detectată."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "Sunteți pe cale să vă utilizați contul %(provider_name)s pentru a v
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "În etapa finală, vă rugăm să completați următorul formular:" msgstr "În etapa finală, vă rugăm să completați următorul formular:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Imposibil de analizat URI {value}, schemă lipsă"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Imposibil de analizat URI {value}, lipsă locație sau cale"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Schema URI '{parts.scheme}' nu este permisă. Schemele permise: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nu se poate analiza URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+30 -45
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Russian\n" "Language-Team: Russian\n"
"Language: ru_RU\n" "Language: ru_RU\n"
@@ -1006,23 +1006,23 @@ msgstr "заметки"
#: documents/models.py:996 #: documents/models.py:996
msgid "page" msgid "page"
msgstr "" msgstr "страница"
#: documents/models.py:997 #: documents/models.py:997
msgid "Page of the original file, starting at 1" msgid "Page of the original file, starting at 1"
msgstr "" msgstr "Страница исходного файла, начиная с 1"
#: documents/models.py:1052 #: documents/models.py:1052
msgid "format" msgid "format"
msgstr "" msgstr "формат"
#: documents/models.py:1056 #: documents/models.py:1056
msgid "document barcode" msgid "document barcode"
msgstr "" msgstr "штрих-код документа"
#: documents/models.py:1057 #: documents/models.py:1057
msgid "document barcodes" msgid "document barcodes"
msgstr "" msgstr "штрих-коды документа"
#: documents/models.py:1066 #: documents/models.py:1066
msgid "Original" msgid "Original"
@@ -1635,48 +1635,48 @@ msgstr "запуск рабочего процесса"
msgid "workflow runs" msgid "workflow runs"
msgstr "запуски рабочего процесса" msgstr "запуски рабочего процесса"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Неверный цвет." msgstr "Неверный цвет."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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)s" msgstr "Идентификатор настраиваемого поля должен быть целым числом: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Пользовательское поле с идентификатором %(id)s не существует" msgstr "Пользовательское поле с идентификатором %(id)s не существует"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Обнаружена неверная переменная." msgstr "Обнаружена неверная переменная."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Повторяющиеся идентификаторы документа не допускаются." msgstr "Повторяющиеся идентификаторы документа не допускаются."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Документы не найдены: %(ids)s" msgstr "Документы не найдены: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Вы собираетесь войти через сторонний с
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "На завершение, пожалуйста заполните следующую форму:" msgstr "На завершение, пожалуйста заполните следующую форму:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Не удается распознать URI {value}, отсутствует схема"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Не удалось распознать URI {value}, отсутствует сетевое расположение или путь"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Недопустимая схема URI '{parts.scheme}'. Разрешенные схемы: {', '.join(allowed_schemes)}" msgstr ", "
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Невозможно распознать URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Недопустимый more_like_id" msgstr "Недопустимый more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Неверная конфигурация ИИ." msgstr "Неверная конфигурация ИИ."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Таймаут запроса ИИ." msgstr "Таймаут запроса ИИ."
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Укажите только одно: текст, title_search, query или more _like_id." msgstr "Укажите только одно: текст, title_search, query или more _like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Недостаточно прав для совместного доступа к документу %(id)s." msgstr "Недостаточно прав для совместного доступа к документу %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Пакет уже обрабатывается." msgstr "Пакет уже обрабатывается."
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Пакет общих ссылок недоступен." msgstr "Пакет общих ссылок недоступен."
@@ -2183,7 +2168,7 @@ msgstr "Включает разделение на штрих-коды тего
#: paperless/models.py:308 #: paperless/models.py:308
msgid "Stores the values of detected barcodes" msgid "Stores the values of detected barcodes"
msgstr "" msgstr "Сохраняет значения обнаруженных штрих-кодов"
#: paperless/models.py:318 #: paperless/models.py:318
msgid "Sets the remote OCR engine" msgid "Sets the remote OCR engine"
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-06 02:00\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Slovak\n" "Language-Team: Slovak\n"
"Language: sk_SK\n" "Language: sk_SK\n"
@@ -1635,48 +1635,48 @@ msgstr "spustenie pracovného postupu"
msgid "workflow runs" msgid "workflow runs"
msgstr "spustenia pracovných postupov" msgstr "spustenia pracovných postupov"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Nedostatočné oprávnenia." msgstr "Nedostatočné oprávnenia."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Neplatná farba." msgstr "Neplatná farba."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Typ súboru %(type)s nie je podporovaný" msgstr "Typ súboru %(type)s nie je podporovaný"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 vlastného poľa musí byť celé číslo: %(id)s" msgstr "ID vlastného poľa musí byť celé číslo: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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:2438 documents/serialisers.py:2448
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é polia musia byť zoznamom celých čísel alebo objektom mapujúcim identifikátory na hodnoty." msgstr "Vlastné polia musia byť zoznamom celých čísel alebo objektom mapujúcim identifikátory na hodnoty."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Niektoré vlastné polia neexistujú alebo boli zadané dvakrát." msgstr "Niektoré vlastné polia neexistujú alebo boli zadané dvakrát."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Zistená neplatná premenná." msgstr "Zistená neplatná premenná."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Duplicitné identifikátory dokumentov nie sú povolené." msgstr "Duplicitné identifikátory dokumentov nie sú povolené."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumenty sa nenašli: %(ids)s" msgstr "Dokumenty sa nenašli: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Chystáte sa na prihlásenie použiť svoj účet %(provider_name)s."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Ako posledný krok vyplňte nasledujúci formulár:" msgstr "Ako posledný krok vyplňte nasledujúci formulár:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Nepodarilo sa analyzovať URI {value}, chýba schéma"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Nepodarilo sa analyzovať URI {value}; chýba sieťové umiestnenie alebo cesta."
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Schéma URI „{parts.scheme}“ nie je povolená. Povolené schémy: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nepodarilo sa analyzovať URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Neplatné more_like_id" msgstr "Neplatné more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Neplatná konfigurácia umelej inteligencie." msgstr "Neplatná konfigurácia umelej inteligencie."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Vypršal časový limit požiadavky na backend umelej inteligencie." msgstr "Vypršal časový limit požiadavky na backend umelej inteligencie."
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "Backend umelej inteligencie zamietol požiadavku. Podrobnosti nájdete v záznamoch." msgstr "Backend umelej inteligencie zamietol požiadavku. Podrobnosti nájdete v záznamoch."
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Zadajte iba jednu z možností: text, title_search, query alebo more_like_id." msgstr "Zadajte iba jednu z možností: text, title_search, query alebo more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Nedostatočné oprávnenia na zdieľanie dokumentu %(id)s." msgstr "Nedostatočné oprávnenia na zdieľanie dokumentu %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Balík sa už spracúva." msgstr "Balík sa už spracúva."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Balík odkazov na zdieľanie sa stále pripravuje. Skúste to znova neskôr." msgstr "Balík odkazov na zdieľanie sa stále pripravuje. Skúste to znova neskôr."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Balík odkazov na zdieľanie nie je k dispozícii." msgstr "Balík odkazov na zdieľanie nie je k dispozícii."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Slovenian\n" "Language-Team: Slovenian\n"
"Language: sl_SI\n" "Language: sl_SI\n"
@@ -1635,48 +1635,48 @@ msgstr "izvajanje poteka dela"
msgid "workflow runs" msgid "workflow runs"
msgstr "poteka dela" msgstr "poteka dela"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Nezadostna dovoljenja." msgstr "Nezadostna dovoljenja."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Napačna barva." msgstr "Napačna barva."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Vrsta datoteke %(type)s ni podprta" msgstr "Vrsta datoteke %(type)s ni podprta"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 polja po meri mora biti celo število: %(id)s" msgstr "ID polja po meri mora biti celo število: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Polje po meri z ID-jem %(id)s ne obstaja" msgstr "Polje po meri z ID-jem %(id)s ne obstaja"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Polja po meri morajo biti seznam celih števil ali objekt, ki preslika ID-je v vrednosti." msgstr "Polja po meri morajo biti seznam celih števil ali objekt, ki preslika ID-je v vrednosti."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Nekatera polja po meri ne obstajajo ali pa so bila navedena dvakrat." msgstr "Nekatera polja po meri ne obstajajo ali pa so bila navedena dvakrat."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Zaznani neveljavni znaki." msgstr "Zaznani neveljavni znaki."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Podvojeni identifikatorji dokumentov niso dovoljeni." msgstr "Podvojeni identifikatorji dokumentov niso dovoljeni."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumentov ni bilo mogoče najti: %(ids)s" msgstr "Dokumentov ni bilo mogoče najti: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Za prijavo boste uporabili račun ponudnika %(provider_name)s."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Kot zadnji korak vas prosimo, da izpolnite naslednji obrazec:" msgstr "Kot zadnji korak vas prosimo, da izpolnite naslednji obrazec:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Ni mogoče razčleniti URI-ja {value}, manjka shema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Ni mogoče razčleniti URI-ja {value}, manjka omrežna lokacija ali pot"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Shema URI '{parts.scheme}' ni dovoljena. Dovoljene sheme: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Ni mogoče razčleniti URI-ja {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Neveljaven more_like_id" msgstr "Neveljaven more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Neveljavna konfiguracija umetne inteligence." msgstr "Neveljavna konfiguracija umetne inteligence."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Časovna omejitev zahteve za umetno inteligenco je potekla." msgstr "Časovna omejitev zahteve za umetno inteligenco je potekla."
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "Zaledni sistem umetne inteligence je zavrnil zahtevo. Za podrobnosti preverite dnevnike." msgstr "Zaledni sistem umetne inteligence je zavrnil zahtevo. Za podrobnosti preverite dnevnike."
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Navedite samo eno od naslednjih vrednosti: text, title_search, query ali more_like_id." msgstr "Navedite samo eno od naslednjih vrednosti: text, title_search, query ali more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Nezadostna dovoljenja za skupno rabo dokumenta %(id)s." msgstr "Nezadostna dovoljenja za skupno rabo dokumenta %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paket se že obdeluje." msgstr "Paket se že obdeluje."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Paket povezav za deljenje je še vedno v pripravi. Poskusite znova pozneje." msgstr "Paket povezav za deljenje je še vedno v pripravi. Poskusite znova pozneje."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Paket povezav za deljenje ni na voljo." msgstr "Paket povezav za deljenje ni na voljo."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Albanian\n" "Language-Team: Albanian\n"
"Language: sq_AL\n" "Language: sq_AL\n"
@@ -1635,48 +1635,48 @@ msgstr "ekzekutim rrjedhe pune"
msgid "workflow runs" msgid "workflow runs"
msgstr "ekzekutime rrjedhash pune" msgstr "ekzekutime rrjedhash pune"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Leje të pamjaftueshme." msgstr "Leje të pamjaftueshme."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ngjyrë e pavlefshme." msgstr "Ngjyrë e pavlefshme."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Lloji i skedarit %(type)s nuk mbështetet" msgstr "Lloji i skedarit %(type)s nuk mbështetet"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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-ja e fushës së personalizuar duhet të jetë numër i plotë: %(id)s" msgstr "ID-ja e fushës së personalizuar duhet të jetë numër i plotë: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Fusha e personalizuar me ID %(id)s nuk ekziston" msgstr "Fusha e personalizuar me ID %(id)s nuk ekziston"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Disa fusha të personalizuara nuk ekzistojnë ose janë specifikuar dy herë." msgstr "Disa fusha të personalizuara nuk ekzistojnë ose janë specifikuar dy herë."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "U zbulua variabël e pavlefshme." msgstr "U zbulua variabël e pavlefshme."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Identifikuesit dublikatë të dokumenteve nuk lejohen." msgstr "Identifikuesit dublikatë të dokumenteve nuk lejohen."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumentet nuk u gjetën: %(ids)s" msgstr "Dokumentet nuk u gjetën: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "You are about to use your %(provider_name)s llogari to login."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Si hap i fundit, ju lutemi plotësoni formularin e mëposhtëm:" msgstr "Si hap i fundit, ju lutemi plotësoni formularin e mëposhtëm:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Konfigurim AI i pavlefshëm." msgstr "Konfigurim AI i pavlefshëm."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Leje të pamjaftueshme për të ndarë dokumentin %(id)s." msgstr "Leje të pamjaftueshme për të ndarë dokumentin %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paketa po përpunohet tashmë." msgstr "Paketa po përpunohet tashmë."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Paketa e lidhjes së ndarjes ende po përgatitet. Ju lutemi provoni përsëri më vonë." msgstr "Paketa e lidhjes së ndarjes ende po përgatitet. Ju lutemi provoni përsëri më vonë."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Paketa e lidhjes së ndarjes nuk është e disponueshme." msgstr "Paketa e lidhjes së ndarjes nuk është e disponueshme."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Serbian (Latin)\n" "Language-Team: Serbian (Latin)\n"
"Language: sr_CS\n" "Language: sr_CS\n"
@@ -1635,48 +1635,48 @@ msgstr "pokretanje radnog toka"
msgid "workflow runs" msgid "workflow runs"
msgstr "pokretanje tokova rada" msgstr "pokretanje tokova rada"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Nedovoljne dozvole." msgstr "Nedovoljne dozvole."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Nevažeća boja." msgstr "Nevažeća boja."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Vrsta datoteke %(type)s nije podržana" msgstr "Vrsta datoteke %(type)s nije podržana"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 prilagođenog polja mora biti ceo broj: %(id)s" msgstr "ID prilagođenog polja mora biti ceo broj: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Prilagođeno polje sa ID-em %(id)s ne postoji" msgstr "Prilagođeno polje sa ID-em %(id)s ne postoji"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Prilagođena polja moraju biti lista celih brojeva ili objekat koji mapira identifikatore na vrednosti." msgstr "Prilagođena polja moraju biti lista celih brojeva ili objekat koji mapira identifikatore na vrednosti."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Neka prilagođena polja ne postoje ili su navedena dva puta." msgstr "Neka prilagođena polja ne postoje ili su navedena dva puta."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Otkrivena je nevažeća promenljiva." msgstr "Otkrivena je nevažeća promenljiva."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Duplirani identifikatori dokumenata nisu dozvoljeni." msgstr "Duplirani identifikatori dokumenata nisu dozvoljeni."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumenti nisu pronađeni: %(ids)s" msgstr "Dokumenti nisu pronađeni: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Uskoro ćete koristiti svoj nalog na %(provider_name)s za prijavu."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Kao poslednji korak, molimo Vas da popunite sledeći obrazac:" msgstr "Kao poslednji korak, molimo Vas da popunite sledeći obrazac:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Nije moguće analizirati URI {value}, nedostaje šema"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Nije moguće analizirati URI {value}, nedostaje mrežan lokacija ili putanja"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Šema URI-ja '{parts.scheme}' nije dozvoljena. Dozvoljene šeme {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Nije moguće analizirati URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Nevažeći more_like_id" msgstr "Nevažeći more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Nevažeća konfiguracija veštačke inteligencije." msgstr "Nevažeća konfiguracija veštačke inteligencije."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Navedite samo jedno od sledećeg: text, title_search, query ili more_like_id." msgstr "Navedite samo jedno od sledećeg: text, title_search, query ili more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Nedovoljne dozvole za deljenje dokumenta %(id)s." msgstr "Nedovoljne dozvole za deljenje dokumenta %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paket se već obrađuje." msgstr "Paket se već obrađuje."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Paket linkova za deljenje se još uvek priprema. Molimo pokušajte ponovo kasnije." msgstr "Paket linkova za deljenje se još uvek priprema. Molimo pokušajte ponovo kasnije."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Paket linkova za deljenje nije dostupan." msgstr "Paket linkova za deljenje nije dostupan."
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Swedish\n" "Language-Team: Swedish\n"
"Language: sv_SE\n" "Language: sv_SE\n"
@@ -1635,48 +1635,48 @@ msgstr "Arbetsflödeskörning"
msgid "workflow runs" msgid "workflow runs"
msgstr "arbetsflöde körs" msgstr "arbetsflöde körs"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Otillräckliga behörigheter." msgstr "Otillräckliga behörigheter."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Ogiltig färg." msgstr "Ogiltig färg."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Filtypen %(type)s stöds inte" msgstr "Filtypen %(type)s stöds inte"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 "Anpassat fält-id måste vara ett heltal: %(id)s" msgstr "Anpassat fält-id måste vara ett heltal: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Anpassat fält med id %(id)s finns inte" msgstr "Anpassat fält med id %(id)s finns inte"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Anpassade fält måste vara en lista med heltal eller ett objekt som mappar ID:n till värden." msgstr "Anpassade fält måste vara en lista med heltal eller ett objekt som mappar ID:n till värden."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Vissa anpassade fält finns inte eller har angetts två gånger." msgstr "Vissa anpassade fält finns inte eller har angetts två gånger."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Ogiltig variabel upptäckt." msgstr "Ogiltig variabel upptäckt."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Dubbletter av dokumentidentifierare är inte tillåtna." msgstr "Dubbletter av dokumentidentifierare är inte tillåtna."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dokumenten hittades inte: %(ids)s" msgstr "Dokumenten hittades inte: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Du håller på att använda ditt %(provider_name)s-konto för att logga
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Slutför följande formulär som ett sista steg:" msgstr "Slutför följande formulär som ett sista steg:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Kunde inte tolka URI {value}, schema saknas"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Kunde inte tolka URI {value}, nätverksplats eller sökväg saknas"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI-schemat '{parts.scheme}' är inte tillåtet. Tillåtna scheman: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Kunde inte tolka URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Ogiltig more_like_id" msgstr "Ogiltig more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Ogiltig AI-konfiguration." msgstr "Ogiltig AI-konfiguration."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Begäran till AI-serverdelen tog för lång tid." msgstr "Begäran till AI-serverdelen tog för lång tid."
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "AI-serverdelen avvisade begäran. Kontrollera loggarna för detaljer." msgstr "AI-serverdelen avvisade begäran. Kontrollera loggarna för detaljer."
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Ange endast ett av text, title_search, query och more_like_id." msgstr "Ange endast ett av text, title_search, query och more_like_id."
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Otillräckliga behörigheter för att dela dokument %(id)s." msgstr "Otillräckliga behörigheter för att dela dokument %(id)s."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paketet behandlas redan." msgstr "Paketet behandlas redan."
#: documents/views.py:4910 #: documents/views.py:4934
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 "Delningslänkpaketet förbereds fortfarande. Försök igen senare." msgstr "Delningslänkpaketet förbereds fortfarande. Försök igen senare."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Delningslänkpaketet är inte tillgängligt." msgstr "Delningslänkpaketet är inte tillgängligt."
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Thai\n" "Language-Team: Thai\n"
"Language: th_TH\n" "Language: th_TH\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "สีไม่ถูกต้อง" msgstr "สีไม่ถูกต้อง"
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "ตรวจพบตัวแปรไม่ถูกต้อง" msgstr "ตรวจพบตัวแปรไม่ถูกต้อง"
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1912,59 +1912,44 @@ msgstr ""
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "" msgstr ""
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Turkish\n" "Language-Team: Turkish\n"
"Language: tr_TR\n" "Language: tr_TR\n"
@@ -1635,48 +1635,48 @@ msgstr "iş akışı çalıştırma"
msgid "workflow runs" msgid "workflow runs"
msgstr "iş akışı çalıştırma" msgstr "iş akışı çalıştırma"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Yetersiz izin." msgstr "Yetersiz izin."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Geçersiz renk." msgstr "Geçersiz renk."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Dosya türü %(type)s desteklenmiyor" msgstr "Dosya türü %(type)s desteklenmiyor"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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)s özel alan numarası tam sayı olmalıdır" msgstr "%(id)s özel alan numarası tam sayı olmalıdır"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "%(id)s numaralı özel alan mevcut değil" msgstr "%(id)s numaralı özel alan mevcut değil"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Özel alanlar bir tam sayı olarak veya bir nesne haritası numaraları olmalıdır." msgstr "Özel alanlar bir tam sayı olarak veya bir nesne haritası numaraları olmalıdır."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Bazı õzel alan numaraları mevcut değil yada iki kez tanımlanmıș." msgstr "Bazı õzel alan numaraları mevcut değil yada iki kez tanımlanmıș."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Geçersiz değişken algılandı." msgstr "Geçersiz değişken algılandı."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Doküman kimliği çakışmasına izin verilmiyor." msgstr "Doküman kimliği çakışmasına izin verilmiyor."
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Dosyalar bulunamadı: %(ids)s" msgstr "Dosyalar bulunamadı: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Giriş yapmak için %(provider_name)s hesabınızı kullanmak üzeresini
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Son adım olarak, lütfen aşağıdaki formu doldurun:" msgstr "Son adım olarak, lütfen aşağıdaki formu doldurun:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "URI {value} ayrıştırılamıyor, şema eksik"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "URI {value} ayrıştırılamıyor, ağ konumu veya yol eksik"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI şeması ‘{parts.scheme}’ izin verilmez. İzin verilen şemalar: {‘, ’.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "URI {value} işlenemiyor"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "Geçersiz more_like_id" msgstr "Geçersiz more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "Geçersiz yapay zeka konfigürasyonu." msgstr "Geçersiz yapay zeka konfigürasyonu."
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "Yapay zeka isteği zaman aşımına uğradı." msgstr "Yapay zeka isteği zaman aşımına uğradı."
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "Yalnızca bir metin, title_search, sorgu veya more_like_id" msgstr "Yalnızca bir metin, title_search, sorgu veya more_like_id"
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "%(id)s dosyasını paylaşmak için yetkiniz yok." msgstr "%(id)s dosyasını paylaşmak için yetkiniz yok."
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Paket zaten işlemede." msgstr "Paket zaten işlemede."
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+23 -38
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Ukrainian\n" "Language-Team: Ukrainian\n"
"Language: uk_UA\n" "Language: uk_UA\n"
@@ -1635,48 +1635,48 @@ msgstr ""
msgid "workflow runs" msgid "workflow runs"
msgstr "" msgstr ""
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Неправильний колір." msgstr "Неправильний колір."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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:2421
#, 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:2438 documents/serialisers.py:2448
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:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Виявлено неправильну змінну." msgstr "Виявлено неправильну змінну."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "" msgstr ""
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "" msgstr ""
@@ -1913,59 +1913,44 @@ msgstr "Ви збираєтеся використовувати ваш облі
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Як останній крок, будь ласка, заповніть наступну форму:" msgstr "Як останній крок, будь ласка, заповніть наступну форму:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr ""
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr ""
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, 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:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "" msgstr ""
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "" msgstr ""
+24 -39
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-08 18:40\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Vietnamese\n" "Language-Team: Vietnamese\n"
"Language: vi_VN\n" "Language: vi_VN\n"
@@ -1635,48 +1635,48 @@ msgstr "lần chạy quy trình"
msgid "workflow runs" msgid "workflow runs"
msgstr "các lần chạy quy trình" msgstr "các lần chạy quy trình"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: paperless_mail/serialisers.py:156 #: paperless_mail/serialisers.py:156
msgid "Insufficient permissions." msgid "Insufficient permissions."
msgstr "Không có đủ quyền." msgstr "Không có đủ quyền."
#: documents/serialisers.py:708 #: documents/serialisers.py:709
msgid "Invalid color." msgid "Invalid color."
msgstr "Màu không hợp lệ." msgstr "Màu không hợp lệ."
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, python-format #, python-format
msgid "File type %(type)s not supported" msgid "File type %(type)s not supported"
msgstr "Loại tập tin %(type)s không được hỗ trợ" msgstr "Loại tập tin %(type)s không được hỗ trợ"
#: documents/serialisers.py:2413 #: documents/serialisers.py:2414
#, 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 trường tùy chỉnh phải là số nguyên: %(id)s" msgstr "ID trường tùy chỉnh phải là số nguyên: %(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "Trường tùy chỉnh với ID %(id)s không tồn tại" msgstr "Trường tùy chỉnh với ID %(id)s không tồn tại"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "Trường tùy chỉnh phải là danh sách số nguyên hoặc đối tượng ánh xạ ID sang giá trị." msgstr "Trường tùy chỉnh phải là danh sách số nguyên hoặc đối tượng ánh xạ ID sang giá trị."
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
msgid "Some custom fields don't exist or were specified twice." msgid "Some custom fields don't exist or were specified twice."
msgstr "Một số trường tùy chỉnh không tồn tại hoặc được chỉ định hai lần." msgstr "Một số trường tùy chỉnh không tồn tại hoặc được chỉ định hai lần."
#: documents/serialisers.py:2589 #: documents/serialisers.py:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "Đã phát hiện biến số không hợp lệ." msgstr "Đã phát hiện biến số không hợp lệ."
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "Không cho phép các định danh tài liệu trùng lặp" msgstr "Không cho phép các định danh tài liệu trùng lặp"
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "Không tìm thấy tài liệu: %(ids)s" msgstr "Không tìm thấy tài liệu: %(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "Bạn sắp sử dụng tài khoản %(provider_name)s của bạn để
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "Là bước cuối cùng, vui lòng hoàn thành mẫu đơn sau:" msgstr "Là bước cuối cùng, vui lòng hoàn thành mẫu đơn sau:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "Không thể phân tích URI {value}, thiếu giao thức"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "Không thể phân tích URI {value}, thiếu tên miền hoặc đường dẫn"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "Giao thức URI '{parts.scheme}' không được phép. Các giao thức được phép: {', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "Không thể phân tích URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "" msgstr ""
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "" msgstr ""
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "" msgstr ""
#: documents/views.py:1699 #: documents/views.py:1706
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:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "Không đủ quyền để chia sẻ tài liệu %(id)s" msgstr "Không đủ quyền để chia sẻ tài liệu %(id)s"
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "Gói đang được xử lý" msgstr "Gói đang được xử lý"
#: documents/views.py:4910 #: documents/views.py:4934
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 "Liên kết chia sẻ gói vẫn đang được chuẩn bị. Vui lòng thử lại sau." msgstr "Liên kết chia sẻ gói vẫn đang được chuẩn bị. Vui lòng thử lại sau."
#: documents/views.py:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "Không tồn tại liên kết chia sẻ gói" msgstr "Không tồn tại liên kết chia sẻ gói"
+61 -76
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-10 12:28\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"Language: zh_CN\n" "Language: zh_CN\n"
@@ -286,11 +286,11 @@ msgstr "银行"
#: documents/models.py:564 #: documents/models.py:564
msgid "Basket" msgid "Basket"
msgstr "" msgstr "篮子"
#: documents/models.py:565 #: documents/models.py:565
msgid "Bell" msgid "Bell"
msgstr "" msgstr "铃铛"
#: documents/models.py:566 #: documents/models.py:566
msgid "Bookmark" msgid "Bookmark"
@@ -402,7 +402,7 @@ msgstr "过滤器"
#: documents/models.py:596 #: documents/models.py:596
msgid "Gear" msgid "Gear"
msgstr "" msgstr "齿轮"
#: documents/models.py:597 #: documents/models.py:597
msgid "Globe" msgid "Globe"
@@ -450,7 +450,7 @@ msgstr ""
#: documents/models.py:608 #: documents/models.py:608
msgid "Printer" msgid "Printer"
msgstr "" msgstr "打印机"
#: documents/models.py:609 #: documents/models.py:609
msgid "Receipt" msgid "Receipt"
@@ -458,19 +458,19 @@ msgstr "收据"
#: documents/models.py:610 #: documents/models.py:610
msgid "Safe" msgid "Safe"
msgstr "" msgstr "安全"
#: documents/models.py:611 #: documents/models.py:611
msgid "Search" msgid "Search"
msgstr "" msgstr "搜索"
#: documents/models.py:612 #: documents/models.py:612
msgid "Send" msgid "Send"
msgstr "" msgstr "发送"
#: documents/models.py:613 #: documents/models.py:613
msgid "Shop" msgid "Shop"
msgstr "" msgstr "商店"
#: documents/models.py:614 #: documents/models.py:614
msgid "Stack" msgid "Stack"
@@ -490,15 +490,15 @@ msgstr "标签"
#: documents/models.py:618 #: documents/models.py:618
msgid "Telephone" msgid "Telephone"
msgstr "" msgstr "电话"
#: documents/models.py:619 #: documents/models.py:619
msgid "Truck" msgid "Truck"
msgstr "" msgstr "货车"
#: documents/models.py:620 #: documents/models.py:620
msgid "Barcode" msgid "Barcode"
msgstr "" msgstr "条形码"
#: documents/models.py:621 #: documents/models.py:621
msgid "Wallet" msgid "Wallet"
@@ -562,7 +562,7 @@ msgstr "页"
#: documents/models.py:646 #: documents/models.py:646
msgid "icon" msgid "icon"
msgstr "" msgstr "图标"
#: documents/models.py:653 #: documents/models.py:653
msgid "sort field" msgid "sort field"
@@ -1006,7 +1006,7 @@ msgstr "备注"
#: documents/models.py:996 #: documents/models.py:996
msgid "page" msgid "page"
msgstr "" msgstr "页面"
#: documents/models.py:997 #: documents/models.py:997
msgid "Page of the original file, starting at 1" msgid "Page of the original file, starting at 1"
@@ -1014,15 +1014,15 @@ msgstr ""
#: documents/models.py:1052 #: documents/models.py:1052
msgid "format" msgid "format"
msgstr "" msgstr "格式"
#: documents/models.py:1056 #: documents/models.py:1056
msgid "document barcode" msgid "document barcode"
msgstr "" msgstr "文档条形码"
#: documents/models.py:1057 #: documents/models.py:1057
msgid "document barcodes" msgid "document barcodes"
msgstr "" msgstr "文档条形码"
#: documents/models.py:1066 #: documents/models.py:1066
msgid "Original" msgid "Original"
@@ -1404,23 +1404,23 @@ msgstr "移动到回收站"
#: documents/models.py:1795 #: documents/models.py:1795
msgid "Remote OCR" msgid "Remote OCR"
msgstr "" msgstr "远程 OCR"
#: documents/models.py:1799 #: documents/models.py:1799
msgid "Apply AI suggestions" msgid "Apply AI suggestions"
msgstr "" msgstr "应用 AI 建议"
#: documents/models.py:1806 #: documents/models.py:1806
msgid "Document type" msgid "Document type"
msgstr "" msgstr "文档类型"
#: documents/models.py:1807 #: documents/models.py:1807
msgid "Storage path" msgid "Storage path"
msgstr "" msgstr "保存路径"
#: documents/models.py:1808 #: documents/models.py:1808
msgid "Created date" msgid "Created date"
msgstr "" msgstr "创建日期"
#: documents/models.py:1811 #: documents/models.py:1811
msgid "Workflow Action Type" msgid "Workflow Action Type"
@@ -1573,27 +1573,27 @@ msgstr "移除PDF保护时的密码。用逗号或新行分隔。"
#: documents/models.py:2048 #: documents/models.py:2048
msgid "AI suggestion fields" msgid "AI suggestion fields"
msgstr "" msgstr "AI 建议字段"
#: documents/models.py:2052 #: documents/models.py:2052
msgid "Which of the AI-suggested fields to apply to the document." msgid "Which of the AI-suggested fields to apply to the document."
msgstr "" msgstr "适用于文档的 AI-建议字段中的哪一个。"
#: documents/models.py:2057 #: documents/models.py:2057
msgid "create missing objects" msgid "create missing objects"
msgstr "" msgstr "创建缺失对象"
#: documents/models.py:2060 #: documents/models.py:2060
msgid "Create suggested tags, correspondents, document types and storage paths that do not already exist instead of skipping them." msgid "Create suggested tags, correspondents, document types and storage paths that do not already exist instead of skipping them."
msgstr "" msgstr "创建建议的标签、往来方、文档类型和存储路径(如果这些项目尚不存在),而不是跳过它们。"
#: documents/models.py:2066 #: documents/models.py:2066
msgid "overwrite existing values" msgid "overwrite existing values"
msgstr "" msgstr "覆盖现有值"
#: documents/models.py:2069 #: documents/models.py:2069
msgid "Apply suggestions even if the document already has a value for that field. Tags are always added to, never replaced." msgid "Apply suggestions even if the document already has a value for that field. Tags are always added to, never replaced."
msgstr "" msgstr "即使文档的该字段已有值,也应用建议的内容。标签始终采用追加方式,不会替换现有标签。"
#: documents/models.py:2075 #: documents/models.py:2075
msgid "workflow action" msgid "workflow action"
@@ -1635,48 +1635,48 @@ msgstr "工作流运行"
msgid "workflow runs" msgid "workflow runs"
msgstr "工作流运行" msgstr "工作流运行"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "无效的颜色" msgstr "无效的颜色"
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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 必须是数字:%(id)s" msgstr "自定义字段 id 必须是数字:%(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "自定义字段 id %(id)s 不存在" msgstr "自定义字段 id %(id)s 不存在"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "自定义字段必须为整数列表,或是一个将ID映射到值的对象。" msgstr "自定义字段必须为整数列表,或是一个将ID映射到值的对象。"
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "检测到无效变量。" msgstr "检测到无效变量。"
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "不允许重复文档标识符。" msgstr "不允许重复文档标识符。"
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "未找到文档:%(ids)s" msgstr "未找到文档:%(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "您将使用您的 %(provider_name)s 账户登录."
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "作为最后一步,请填写以下表格:" msgstr "作为最后一步,请填写以下表格:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "无法解析 URI {value},缺少scheme"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "无法解析 URI {value},缺少网络位置或路径"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI 格式 '{parts.scheme}' 不支持。支持的格式有:{', '.join(allowed_schemes)}" msgstr ","
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "无法解析 URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "无效的more_like_id" msgstr "无效的more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "无效的 AI 配置。" msgstr "无效的 AI 配置。"
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "AI 后端请求超时。" msgstr "AI 后端请求超时。"
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "" msgstr "AI 后端拒绝了请求。请检查日志的详细信息。"
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "只能指定 text、title_search、query 或 more_like_id 中的一项。" msgstr "只能指定 text、title_search、query 或 more_like_id 中的一项。"
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "权限不足以分享文件:%(id)s。" msgstr "权限不足以分享文件:%(id)s。"
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "捆绑包已在处理中。" msgstr "捆绑包已在处理中。"
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "分享链接包不可用。" msgstr "分享链接包不可用。"
@@ -2051,15 +2036,15 @@ msgstr "CMYK"
#: paperless/models.py:82 #: paperless/models.py:82
msgid "Azure AI Document Intelligence" msgid "Azure AI Document Intelligence"
msgstr "" msgstr "Azure AI 文档智能"
#: paperless/models.py:90 #: paperless/models.py:90
msgid "All supported documents" msgid "All supported documents"
msgstr "" msgstr "所有支持的文档"
#: paperless/models.py:91 #: paperless/models.py:91
msgid "Only when a workflow enables it" msgid "Only when a workflow enables it"
msgstr "" msgstr "仅当工作流启用时"
#: paperless/models.py:95 paperless/models.py:105 #: paperless/models.py:95 paperless/models.py:105
msgid "OpenAI-compatible" msgid "OpenAI-compatible"
@@ -2183,23 +2168,23 @@ msgstr "启用标签条码拆分"
#: paperless/models.py:308 #: paperless/models.py:308
msgid "Stores the values of detected barcodes" msgid "Stores the values of detected barcodes"
msgstr "" msgstr "存储检测到条形码的值"
#: paperless/models.py:318 #: paperless/models.py:318
msgid "Sets the remote OCR engine" msgid "Sets the remote OCR engine"
msgstr "" msgstr "设置远程 OCR 引擎"
#: paperless/models.py:327 #: paperless/models.py:327
msgid "Sets the remote OCR API key" msgid "Sets the remote OCR API key"
msgstr "" msgstr "设置远程 OCR API 密钥"
#: paperless/models.py:335 #: paperless/models.py:335
msgid "Sets the remote OCR endpoint" msgid "Sets the remote OCR endpoint"
msgstr "" msgstr "设置远程 OCR 端点"
#: paperless/models.py:343 #: paperless/models.py:343
msgid "Sets which documents are sent to the remote OCR engine" msgid "Sets which documents are sent to the remote OCR engine"
msgstr "" msgstr "设置发送到远程 OCR 引擎的文档"
#: paperless/models.py:355 #: paperless/models.py:355
msgid "Enables AI features" msgid "Enables AI features"
@@ -2215,7 +2200,7 @@ msgstr "设置 LLM 嵌入模型"
#: paperless/models.py:375 #: paperless/models.py:375
msgid "Sets the LLM embedding API key" msgid "Sets the LLM embedding API key"
msgstr "" msgstr "设置 LLM 嵌入模型的 API 密钥"
#: paperless/models.py:382 #: paperless/models.py:382
msgid "Sets the LLM embedding endpoint, optional" msgid "Sets the LLM embedding endpoint, optional"
+27 -42
View File
@@ -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-05 16:26+0000\n" "POT-Creation-Date: 2026-10-08 18:39+0000\n"
"PO-Revision-Date: 2026-10-05 16:27\n" "PO-Revision-Date: 2026-10-09 12:30\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Chinese Traditional\n" "Language-Team: Chinese Traditional\n"
"Language: zh_TW\n" "Language: zh_TW\n"
@@ -1018,11 +1018,11 @@ msgstr ""
#: documents/models.py:1056 #: documents/models.py:1056
msgid "document barcode" msgid "document barcode"
msgstr "" msgstr "文件條碼"
#: documents/models.py:1057 #: documents/models.py:1057
msgid "document barcodes" msgid "document barcodes"
msgstr "" msgstr "文件條碼"
#: documents/models.py:1066 #: documents/models.py:1066
msgid "Original" msgid "Original"
@@ -1635,48 +1635,48 @@ msgstr "執行工作流程"
msgid "workflow runs" msgid "workflow runs"
msgstr "執行工作流程" msgstr "執行工作流程"
#: documents/serialisers.py:515 documents/serialisers.py:872 #: documents/serialisers.py:516 documents/serialisers.py:873
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732 #: documents/serialisers.py:2903 documents/views.py:344 documents/views.py:2751
#: 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:709
msgid "Invalid color." msgid "Invalid color."
msgstr "無效的顏色。" msgstr "無效的顏色。"
#: documents/serialisers.py:2369 #: documents/serialisers.py:2370
#, 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:2414
#, 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 必須是整數:%(id)s" msgstr "自定欄位 ID 必須是整數:%(id)s"
#: documents/serialisers.py:2420 #: documents/serialisers.py:2421
#, 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 "自定欄位 ID %(id)s 不存在" msgstr "自定欄位 ID %(id)s 不存在"
#: documents/serialisers.py:2437 documents/serialisers.py:2447 #: documents/serialisers.py:2438 documents/serialisers.py:2448
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 "自定欄位必須為整數列表,或是將 ID 對應到參數值的物件。" msgstr "自定欄位必須為整數列表,或是將 ID 對應到參數值的物件。"
#: documents/serialisers.py:2442 #: documents/serialisers.py:2443
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:2590
msgid "Invalid variable detected." msgid "Invalid variable detected."
msgstr "偵測到無效的變數。" msgstr "偵測到無效的變數。"
#: documents/serialisers.py:2958 #: documents/serialisers.py:2959
msgid "Duplicate document identifiers are not allowed." msgid "Duplicate document identifiers are not allowed."
msgstr "文件識別碼不得重複。" msgstr "文件識別碼不得重複。"
#: documents/serialisers.py:2988 documents/views.py:4787 #: documents/serialisers.py:2989 documents/views.py:4807
#, python-format #, python-format
msgid "Documents not found: %(ids)s" msgid "Documents not found: %(ids)s"
msgstr "找不到文件:%(ids)s" msgstr "找不到文件:%(ids)s"
@@ -1913,59 +1913,44 @@ msgstr "即將使用 %(provider_name)s 帳號登入。"
msgid "As a final step, please complete the following form:" msgid "As a final step, please complete the following form:"
msgstr "最後一步,請填寫以下表單:" msgstr "最後一步,請填寫以下表單:"
#: documents/validators.py:24
#, python-brace-format
msgid "Unable to parse URI {value}, missing scheme"
msgstr "無法解析 URI {value},缺少協定"
#: documents/validators.py:29
#, python-brace-format
msgid "Unable to parse URI {value}, missing net location or path"
msgstr "無法解析 URI {value},缺少網路位置或路徑"
#: documents/validators.py:36 #: documents/validators.py:36
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}" msgid ", "
msgstr "URI 協定「{parts.scheme}」不被允許。允許的協定有:{', '.join(allowed_schemes)}" msgstr ""
#: documents/validators.py:45 #: documents/views.py:337 documents/views.py:2748
#, python-brace-format
msgid "Unable to parse URI {value}"
msgstr "無法解析 URI {value}"
#: documents/views.py:336 documents/views.py:2729
msgid "Invalid more_like_id" msgid "Invalid more_like_id"
msgstr "無效的 more_like_id" msgstr "無效的 more_like_id"
#: documents/views.py:1676 #: documents/views.py:1683
msgid "Invalid AI configuration." msgid "Invalid AI configuration."
msgstr "無效的 AI 配置。" msgstr "無效的 AI 配置。"
#: documents/views.py:1687 #: documents/views.py:1694
msgid "AI backend request timed out." msgid "AI backend request timed out."
msgstr "AI 後端請求逾時。" msgstr "AI 後端請求逾時。"
#: documents/views.py:1699 #: documents/views.py:1706
msgid "AI backend rejected the request. Check logs for details." msgid "AI backend rejected the request. Check logs for details."
msgstr "AI 後端拒絕了請求。請檢查日誌以取得詳細資訊。" msgstr "AI 後端拒絕了請求。請檢查日誌以取得詳細資訊。"
#: documents/views.py:2554 documents/views.py:2870 #: documents/views.py:2573 documents/views.py:2889
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 "只能指定 text、title_search、query 或 more_like_id 的其中一項。" msgstr "只能指定 text、title_search、query 或 more_like_id 的其中一項。"
#: documents/views.py:4800 #: documents/views.py:4823
#, python-format #, python-format
msgid "Insufficient permissions to share document %(id)s." msgid "Insufficient permissions to share document %(id)s."
msgstr "權限不足,無法共用文件:%(id)s" msgstr "權限不足,無法共用文件:%(id)s"
#: documents/views.py:4846 #: documents/views.py:4870
msgid "Bundle is already being processed." msgid "Bundle is already being processed."
msgstr "組合已在處理中。" msgstr "組合已在處理中。"
#: documents/views.py:4910 #: documents/views.py:4934
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:4924 #: documents/views.py:4948
msgid "The share link bundle is unavailable." msgid "The share link bundle is unavailable."
msgstr "共用連結組合無法使用。" msgstr "共用連結組合無法使用。"
@@ -2183,7 +2168,7 @@ msgstr "啟用依標籤條碼進行拆分"
#: paperless/models.py:308 #: paperless/models.py:308
msgid "Stores the values of detected barcodes" msgid "Stores the values of detected barcodes"
msgstr "" msgstr "儲存檢測到的條碼參數值"
#: paperless/models.py:318 #: paperless/models.py:318
msgid "Sets the remote OCR engine" msgid "Sets the remote OCR engine"
@@ -137,9 +137,20 @@ class TestNginxService:
reason="No Gotenberg/Tika servers to test with", reason="No Gotenberg/Tika servers to test with",
) )
class TestParserLive: class TestParserLive:
@staticmethod # Rasterizer versions shift a few pixels, so compare perceptual hashes by
def imagehash(file: Path, hash_size: int = 18) -> str: # Hamming distance (out of 18 * 18 = 324 bits) rather than for equality
return f"{average_hash(Image.open(file), hash_size)}" MAX_HASH_DISTANCE = 8
@classmethod
def assert_thumbnails_similar(cls, generated: Path, expected: Path) -> None:
distance = average_hash(Image.open(generated), 18) - average_hash(
Image.open(expected),
18,
)
assert distance <= cls.MAX_HASH_DISTANCE, (
f"Thumbnail {generated} differs from {expected} by {distance} bits "
f"(max {cls.MAX_HASH_DISTANCE})"
)
def test_get_thumbnail( def test_get_thumbnail(
self, self,
@@ -168,12 +179,7 @@ class TestParserLive:
assert thumb.exists() assert thumb.exists()
assert thumb.is_file() assert thumb.is_file()
assert self.imagehash(thumb) == self.imagehash( self.assert_thumbnails_similar(thumb, simple_txt_email_thumbnail_file)
simple_txt_email_thumbnail_file,
), (
f"Created thumbnail {thumb} differs from expected file "
f"{simple_txt_email_thumbnail_file}"
)
def test_tika_parse_successful(self, mail_parser: MailDocumentParser) -> None: def test_tika_parse_successful(self, mail_parser: MailDocumentParser) -> None:
""" """
@@ -255,7 +261,7 @@ class TestParserLive:
THEN: THEN:
- Gotenberg shall be called to generate the PDF - Gotenberg shall be called to generate the PDF
- The archive PDF shall contain the expected content - The archive PDF shall contain the expected content
- The generated thumbnail shall match the expected image hash - The generated thumbnail shall be perceptually close to the expected image
""" """
util_call_with_backoff(mail_parser.parse, [html_email_file, "message/rfc822"]) util_call_with_backoff(mail_parser.parse, [html_email_file, "message/rfc822"])
@@ -272,14 +278,4 @@ class TestParserLive:
html_email_file, html_email_file,
"message/rfc822", "message/rfc822",
) )
generated_thumbnail_hash = self.imagehash(generated_thumbnail) self.assert_thumbnails_similar(generated_thumbnail, html_email_thumbnail_file)
# The created PDF is not reproducible, but the converted image
# should always look the same
expected_hash = self.imagehash(html_email_thumbnail_file)
assert generated_thumbnail_hash == expected_hash, (
f"PDF thumbnail differs from expected. "
f"Generated: {generated_thumbnail}, "
f"Hash: {generated_thumbnail_hash} vs {expected_hash}"
)