mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-10-11 02:27:13 +00:00
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
05f9f95df6 | ||
|
|
f8876c55e3 | ||
|
|
e5b215f9d3 | ||
|
|
94f10b8622 | ||
|
|
6f7ed1d4a7 | ||
|
|
0428bf6955 | ||
|
|
c63afb47b2 |
No files matched your search
@@ -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-26.04
|
runs-on: ubuntu-24.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-7/policy.xml
|
sudo cp docker/rootfs/etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-6/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-26.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- runner: ubuntu-26.04
|
- runner: ubuntu-24.04
|
||||||
arch: amd64
|
arch: amd64
|
||||||
platform: linux/amd64
|
platform: linux/amd64
|
||||||
- runner: ubuntu-26.04-arm
|
- runner: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.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
|
||||||
|
|||||||
@@ -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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
pages: write
|
pages: write
|
||||||
id-token: write
|
id-token: write
|
||||||
|
|||||||
@@ -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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
container: mcr.microsoft.com/playwright:v1.62.1-resolute
|
container: mcr.microsoft.com/playwright:v1.62.1-noble
|
||||||
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-26.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.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 libleptonica6
|
packages: gettext liblept5
|
||||||
# ---- 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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
zizmor:
|
zizmor:
|
||||||
name: Run zizmor
|
name: Run zizmor
|
||||||
runs-on: ubuntu-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.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]'
|
||||||
|
|||||||
@@ -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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.04
|
||||||
needs:
|
needs:
|
||||||
- cleanup-images
|
- cleanup-images
|
||||||
environment: registry-maintenance
|
environment: registry-maintenance
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
runs-on: ubuntu-26.04
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
actions: read
|
actions: read
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
@@ -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-26.04
|
runs-on: ubuntu-24.04
|
||||||
environment: translation-sync
|
environment: translation-sync
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
|||||||
@@ -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-slim
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ on:
|
|||||||
types: [opened]
|
types: [opened]
|
||||||
jobs:
|
jobs:
|
||||||
Anti-slop:
|
Anti-slop:
|
||||||
runs-on: ubuntu-slim
|
runs-on: ubuntu-latest
|
||||||
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-slim
|
runs-on: ubuntu-latest
|
||||||
# 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
|
||||||
|
|||||||
@@ -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-slim
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
# write permission is required for autolabeler
|
# write permission is required for autolabeler
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|||||||
@@ -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-26.04
|
runs-on: ubuntu-24.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-26.04
|
runs-on: ubuntu-24.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-slim
|
runs-on: ubuntu-24.04
|
||||||
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-slim
|
runs-on: ubuntu-24.04
|
||||||
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-slim
|
runs-on: ubuntu-24.04
|
||||||
permissions:
|
permissions:
|
||||||
discussions: write
|
discussions: write
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
generate-translate-strings:
|
generate-translate-strings:
|
||||||
name: Generate Translation Strings
|
name: Generate Translation Strings
|
||||||
runs-on: ubuntu-26.04
|
runs-on: ubuntu-latest
|
||||||
environment: translation-sync
|
environment: translation-sync
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Paperless-ngx is a document management system that transforms your physical docu
|
|||||||
|
|
||||||
Paperless-ngx is the official successor to the original [Paperless](https://github.com/the-paperless-project/paperless) & [Paperless-ng](https://github.com/jonaswinkler/paperless-ng) projects and is designed to distribute the responsibility of advancing and supporting the project among a team of people. [Consider joining us!](#community-support)
|
Paperless-ngx is the official successor to the original [Paperless](https://github.com/the-paperless-project/paperless) & [Paperless-ng](https://github.com/jonaswinkler/paperless-ng) projects and is designed to distribute the responsibility of advancing and supporting the project among a team of people. [Consider joining us!](#community-support)
|
||||||
|
|
||||||
Thanks to the generous folks at [DigitalOcean](https://m.do.co/c/8d70b916d462), a demo is available at [demo.paperless-ngx.com](https://demo.paperless-ngx.com) using login `demo` / `demo`. _Note: demo content is reset frequently and confidential information should not be uploaded._
|
Thanks to the generous folks at [Fyra Stack](https://fyrastack.com), a demo is available at [demo.paperless-ngx.com](https://demo.paperless-ngx.com) using login `demo` / `demo`. _Note: demo content is reset frequently and confidential information should not be uploaded._
|
||||||
|
|
||||||
- [Features](#features)
|
- [Features](#features)
|
||||||
- [Getting started](#getting-started)
|
- [Getting started](#getting-started)
|
||||||
@@ -33,13 +33,9 @@ Thanks to the generous folks at [DigitalOcean](https://m.do.co/c/8d70b916d462),
|
|||||||
- [Related Projects](#related-projects)
|
- [Related Projects](#related-projects)
|
||||||
- [Important Note](#important-note)
|
- [Important Note](#important-note)
|
||||||
|
|
||||||
<p align="right">This project is supported by:<br/>
|
<p align="right">Demo hosting provided by:<br/>
|
||||||
<a href="https://m.do.co/c/8d70b916d462" style="padding-top: 4px; display: block;">
|
<a href="https://fyrastack.com">
|
||||||
<picture>
|
<img src="docs/assets/sponsors/fyra-stack.svg" alt="" width="28px" align="absmiddle"> Fyra Stack
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_white.svg" width="140px">
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="140px">
|
|
||||||
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_black_.svg" width="140px">
|
|
||||||
</picture>
|
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- dbdata:/var/lib/mysql
|
- dbdata:/var/lib/mysql
|
||||||
environment:
|
environment:
|
||||||
MARIADB_HOST: paperless
|
|
||||||
MARIADB_DATABASE: paperless
|
MARIADB_DATABASE: paperless
|
||||||
MARIADB_USER: paperless
|
MARIADB_USER: paperless
|
||||||
MARIADB_PASSWORD: paperless
|
MARIADB_PASSWORD: paperless
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- dbdata:/var/lib/mysql
|
- dbdata:/var/lib/mysql
|
||||||
environment:
|
environment:
|
||||||
MARIADB_HOST: paperless
|
|
||||||
MARIADB_DATABASE: paperless
|
MARIADB_DATABASE: paperless
|
||||||
MARIADB_USER: paperless
|
MARIADB_USER: paperless
|
||||||
MARIADB_PASSWORD: paperless
|
MARIADB_PASSWORD: paperless
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="666.667" height="666.667" viewBox="0 0 666.667 666.667"><g stroke-width="1.333"><path fill="#fef400" d="m332.66668 418.66668h-84.66667v-85.33334-85.33333h84.66667 84.66667v-85.33334-85.333334h85.33333 85.33334v85.333334 85.33334h-85.33334-85.33333v85.33333 85.33334z"/><path fill="#fe6565" d="m248.00001 589.33335h-170.666674v-170.66667-170.66667h85.333334 85.33334v-85.33334-85.333334h84.66667 84.66667v85.333334 85.33334h85.33333 85.33334v85.33333 85.33334h-84.66667-84.66667v85.33334 85.33333zm84.66667-170.66667h84.66667v-85.33334-85.33333h-84.66667-84.66667v85.33333 85.33334z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 641 B |
@@ -1,5 +1,130 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## paperless-ngx 3.3.0
|
||||||
|
|
||||||
|
### Features / Enhancements
|
||||||
|
|
||||||
|
- Enhancement: more control over suggestion requests [@shamoon](https://github.com/shamoon) ([#14258](https://github.com/paperless-ngx/paperless-ngx/pull/14258))
|
||||||
|
- Chorehancement: set manifest CORS for credentials [@shamoon](https://github.com/shamoon) ([#14307](https://github.com/paperless-ngx/paperless-ngx/pull/14307))
|
||||||
|
- Enhancement: include Django admin with 2FA [@shamoon](https://github.com/shamoon) ([#14270](https://github.com/paperless-ngx/paperless-ngx/pull/14270))
|
||||||
|
- Feature: propagate resolved secrets to interactive container shells [@stumpylog](https://github.com/stumpylog) ([#14254](https://github.com/paperless-ngx/paperless-ngx/pull/14254))
|
||||||
|
- Enhancement: support separate embedding API key [@furkanural](https://github.com/furkanural) ([#14067](https://github.com/paperless-ngx/paperless-ngx/pull/14067))
|
||||||
|
- Enhancement: support passthrough extra params for LLMs [@shamoon](https://github.com/shamoon) ([#14202](https://github.com/paperless-ngx/paperless-ngx/pull/14202))
|
||||||
|
- Feature: store barcode contents, list and search them [@jurassicparkicecream](https://github.com/jurassicparkicecream) ([#14276](https://github.com/paperless-ngx/paperless-ngx/pull/14276))
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Fix: Set the ProcessedMail owner based on the rule owner in all cases [@stumpylog](https://github.com/stumpylog) ([#14356](https://github.com/paperless-ngx/paperless-ngx/pull/14356))
|
||||||
|
- Fix: Ensure log rotation settings are converted to integers [@stumpylog](https://github.com/stumpylog) ([#14343](https://github.com/paperless-ngx/paperless-ngx/pull/14343))
|
||||||
|
- Fix: Wrap apt calls into a retry so we can ideally jump a slow mirror [@stumpylog](https://github.com/stumpylog) ([#14344](https://github.com/paperless-ngx/paperless-ngx/pull/14344))
|
||||||
|
- Fix: ship pdf.js CMaps so CJK documents render in the viewer [@MrOggy85](https://github.com/MrOggy85) ([#14318](https://github.com/paperless-ngx/paperless-ngx/pull/14318))
|
||||||
|
- Fix: use version page\_count for versioned document [@shamoon](https://github.com/shamoon) ([#14280](https://github.com/paperless-ngx/paperless-ngx/pull/14280))
|
||||||
|
- Fix: allow pointer events for pdf links in pngx viewer [@shamoon](https://github.com/shamoon) ([#14264](https://github.com/paperless-ngx/paperless-ngx/pull/14264))
|
||||||
|
- Fix: During a move to the trash directory, only attempt to copy metadata [@stumpylog](https://github.com/stumpylog) ([#14250](https://github.com/paperless-ngx/paperless-ngx/pull/14250))
|
||||||
|
- Fix: convert file mtime to the configured time zone directly [@stumpylog](https://github.com/stumpylog) ([#14249](https://github.com/paperless-ngx/paperless-ngx/pull/14249))
|
||||||
|
- Fix: ensure documentDeleted subscription is discarded [@shamoon](https://github.com/shamoon) ([#14247](https://github.com/paperless-ngx/paperless-ngx/pull/14247))
|
||||||
|
- Chore: Fix bugs in the test suite [@stumpylog](https://github.com/stumpylog) ([#14244](https://github.com/paperless-ngx/paperless-ngx/pull/14244))
|
||||||
|
- Fix: ensure bulk operations are checked against version root [@shamoon](https://github.com/shamoon) ([#14246](https://github.com/paperless-ngx/paperless-ngx/pull/14246))
|
||||||
|
- Fix: indexing after document-added workflows signal [@shamoon](https://github.com/shamoon) ([#14242](https://github.com/paperless-ngx/paperless-ngx/pull/14242))
|
||||||
|
- Fix: Record full tag and custom field lists in bulk edit audit log [@stumpylog](https://github.com/stumpylog) ([#14236](https://github.com/paperless-ngx/paperless-ngx/pull/14236))
|
||||||
|
- Chore: update pikepdf for ocrmypdf requirement [@shamoon](https://github.com/shamoon) ([#14235](https://github.com/paperless-ngx/paperless-ngx/pull/14235))
|
||||||
|
- Fix: handle legacy bulk edit split page range with missing page\_count [@shamoon](https://github.com/shamoon) ([#14212](https://github.com/paperless-ngx/paperless-ngx/pull/14212))
|
||||||
|
- Fix: ignore invalid EXIF orientation when generating image archives [@zhzy0077](https://github.com/zhzy0077) ([#14203](https://github.com/paperless-ngx/paperless-ngx/pull/14203))
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- Documentation: correct duplicates info [@shamoon](https://github.com/shamoon) ([#14243](https://github.com/paperless-ngx/paperless-ngx/pull/14243))
|
||||||
|
|
||||||
|
### Maintenance
|
||||||
|
|
||||||
|
- Chore(deps): Bump the actions group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14332](https://github.com/paperless-ngx/paperless-ngx/pull/14332))
|
||||||
|
- Fix: Wrap apt calls into a retry so we can ideally jump a slow mirror [@stumpylog](https://github.com/stumpylog) ([#14344](https://github.com/paperless-ngx/paperless-ngx/pull/14344))
|
||||||
|
- Chore(deps): Bump the actions group across 1 directory with 10 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14301](https://github.com/paperless-ngx/paperless-ngx/pull/14301))
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>27 changes</summary>
|
||||||
|
|
||||||
|
- Chore(deps): Bump django-filter from 25.2 to 26.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#14337](https://github.com/paperless-ngx/paperless-ngx/pull/14337))
|
||||||
|
- Chore(deps): Bump the utilities-patch group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14338](https://github.com/paperless-ngx/paperless-ngx/pull/14338))
|
||||||
|
- Chore(deps): Bump the pre-commit-dependencies group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14351](https://github.com/paperless-ngx/paperless-ngx/pull/14351))
|
||||||
|
- Chore(deps-dev): Bump types-channels from 4.3.0.20260408 to 4.3.0.20260518 @[dependabot[bot]](https://github.com/apps/dependabot) ([#14335](https://github.com/paperless-ngx/paperless-ngx/pull/14335))
|
||||||
|
- docker(deps): Bump astral-sh/uv from 0.12.20-python3.14-trixie-slim to 0.12.23-python3.14-trixie-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#14327](https://github.com/paperless-ngx/paperless-ngx/pull/14327))
|
||||||
|
- Chore(deps): Bump the actions group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14332](https://github.com/paperless-ngx/paperless-ngx/pull/14332))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14325](https://github.com/paperless-ngx/paperless-ngx/pull/14325))
|
||||||
|
- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14329](https://github.com/paperless-ngx/paperless-ngx/pull/14329))
|
||||||
|
- Chore(deps-dev): Bump prettier from 3.9.8 to 3.9.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14331](https://github.com/paperless-ngx/paperless-ngx/pull/14331))
|
||||||
|
- Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14330](https://github.com/paperless-ngx/paperless-ngx/pull/14330))
|
||||||
|
- Chore(deps-dev): Bump zensical from 0.0.64 to 0.0.65 in the development group @[dependabot[bot]](https://github.com/apps/dependabot) ([#14326](https://github.com/paperless-ngx/paperless-ngx/pull/14326))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14314](https://github.com/paperless-ngx/paperless-ngx/pull/14314))
|
||||||
|
- Chore(deps): Bump the utilities-minor group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14305](https://github.com/paperless-ngx/paperless-ngx/pull/14305))
|
||||||
|
- docker-compose(deps): bump greenmail/standalone from 2.1.13 to 2.1.14 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#14281](https://github.com/paperless-ngx/paperless-ngx/pull/14281))
|
||||||
|
- docker(deps): Bump astral-sh/uv from 0.12.16-python3.14-trixie-slim to 0.12.20-python3.14-trixie-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#14282](https://github.com/paperless-ngx/paperless-ngx/pull/14282))
|
||||||
|
- Chore(deps): Bump the pre-commit-dependencies group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14283](https://github.com/paperless-ngx/paperless-ngx/pull/14283))
|
||||||
|
- Chore(deps): Bump the utilities-patch group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14297](https://github.com/paperless-ngx/paperless-ngx/pull/14297))
|
||||||
|
- Chore(deps): Bump the actions group across 1 directory with 10 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14301](https://github.com/paperless-ngx/paperless-ngx/pull/14301))
|
||||||
|
- Chore(deps-dev): Bump the frontend-jest-dependencies group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14286](https://github.com/paperless-ngx/paperless-ngx/pull/14286))
|
||||||
|
- Chore(deps-dev): Bump eslint from 10.10.0 to 10.11.0 in /src-ui in the frontend-eslint-dependencies group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#14287](https://github.com/paperless-ngx/paperless-ngx/pull/14287))
|
||||||
|
- Chore(deps-dev): Bump @types/node from 26.5.0 to 26.6.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14288](https://github.com/paperless-ngx/paperless-ngx/pull/14288))
|
||||||
|
- Chore(deps-dev): Bump prettier from 3.9.6 to 3.9.8 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14289](https://github.com/paperless-ngx/paperless-ngx/pull/14289))
|
||||||
|
- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 10 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14285](https://github.com/paperless-ngx/paperless-ngx/pull/14285))
|
||||||
|
- Chore: replace bleach with turbohtml [@gaborbernat](https://github.com/gaborbernat) ([#14269](https://github.com/paperless-ngx/paperless-ngx/pull/14269))
|
||||||
|
- Chore(deps): Bump autobahn from 25.12.2 to 26.7.1 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#14231](https://github.com/paperless-ngx/paperless-ngx/pull/14231))
|
||||||
|
- Chore: update pikepdf for ocrmypdf requirement [@shamoon](https://github.com/shamoon) ([#14235](https://github.com/paperless-ngx/paperless-ngx/pull/14235))
|
||||||
|
- Chore(deps): Bump the pre-commit-dependencies group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14133](https://github.com/paperless-ngx/paperless-ngx/pull/14133))
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### All App Changes
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>41 changes</summary>
|
||||||
|
|
||||||
|
- Feature: store barcode contents, list and search them [@jurassicparkicecream](https://github.com/jurassicparkicecream) ([#14276](https://github.com/paperless-ngx/paperless-ngx/pull/14276))
|
||||||
|
- Fix: Set the ProcessedMail owner based on the rule owner in all cases [@stumpylog](https://github.com/stumpylog) ([#14356](https://github.com/paperless-ngx/paperless-ngx/pull/14356))
|
||||||
|
- Chore(deps): Bump django-filter from 25.2 to 26.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#14337](https://github.com/paperless-ngx/paperless-ngx/pull/14337))
|
||||||
|
- Chore(deps): Bump the utilities-patch group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14338](https://github.com/paperless-ngx/paperless-ngx/pull/14338))
|
||||||
|
- Chore(deps-dev): Bump types-channels from 4.3.0.20260408 to 4.3.0.20260518 @[dependabot[bot]](https://github.com/apps/dependabot) ([#14335](https://github.com/paperless-ngx/paperless-ngx/pull/14335))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14325](https://github.com/paperless-ngx/paperless-ngx/pull/14325))
|
||||||
|
- Fix: Ensure log rotation settings are converted to integers [@stumpylog](https://github.com/stumpylog) ([#14343](https://github.com/paperless-ngx/paperless-ngx/pull/14343))
|
||||||
|
- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14329](https://github.com/paperless-ngx/paperless-ngx/pull/14329))
|
||||||
|
- Chore(deps-dev): Bump prettier from 3.9.8 to 3.9.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14331](https://github.com/paperless-ngx/paperless-ngx/pull/14331))
|
||||||
|
- Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14330](https://github.com/paperless-ngx/paperless-ngx/pull/14330))
|
||||||
|
- Fix: ship pdf.js CMaps so CJK documents render in the viewer [@MrOggy85](https://github.com/MrOggy85) ([#14318](https://github.com/paperless-ngx/paperless-ngx/pull/14318))
|
||||||
|
- Chore(deps-dev): Bump zensical from 0.0.64 to 0.0.65 in the development group @[dependabot[bot]](https://github.com/apps/dependabot) ([#14326](https://github.com/paperless-ngx/paperless-ngx/pull/14326))
|
||||||
|
- Enhancement: more control over suggestion requests [@shamoon](https://github.com/shamoon) ([#14258](https://github.com/paperless-ngx/paperless-ngx/pull/14258))
|
||||||
|
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14314](https://github.com/paperless-ngx/paperless-ngx/pull/14314))
|
||||||
|
- Chore: anchor admin url pattern [@shamoon](https://github.com/shamoon) ([#14316](https://github.com/paperless-ngx/paperless-ngx/pull/14316))
|
||||||
|
- Chorehancement: set manifest CORS for credentials [@shamoon](https://github.com/shamoon) ([#14307](https://github.com/paperless-ngx/paperless-ngx/pull/14307))
|
||||||
|
- Chore(deps): Bump the utilities-minor group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14305](https://github.com/paperless-ngx/paperless-ngx/pull/14305))
|
||||||
|
- Chore(deps): Bump the utilities-patch group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14297](https://github.com/paperless-ngx/paperless-ngx/pull/14297))
|
||||||
|
- Chore(deps-dev): Bump the frontend-jest-dependencies group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14286](https://github.com/paperless-ngx/paperless-ngx/pull/14286))
|
||||||
|
- Chore(deps-dev): Bump eslint from 10.10.0 to 10.11.0 in /src-ui in the frontend-eslint-dependencies group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#14287](https://github.com/paperless-ngx/paperless-ngx/pull/14287))
|
||||||
|
- Chore(deps-dev): Bump @types/node from 26.5.0 to 26.6.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14288](https://github.com/paperless-ngx/paperless-ngx/pull/14288))
|
||||||
|
- Chore(deps-dev): Bump prettier from 3.9.6 to 3.9.8 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#14289](https://github.com/paperless-ngx/paperless-ngx/pull/14289))
|
||||||
|
- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 10 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#14285](https://github.com/paperless-ngx/paperless-ngx/pull/14285))
|
||||||
|
- Fix: use version page\_count for versioned document [@shamoon](https://github.com/shamoon) ([#14280](https://github.com/paperless-ngx/paperless-ngx/pull/14280))
|
||||||
|
- Chore: replace bleach with turbohtml [@gaborbernat](https://github.com/gaborbernat) ([#14269](https://github.com/paperless-ngx/paperless-ngx/pull/14269))
|
||||||
|
- Enhancement: include Django admin with 2FA [@shamoon](https://github.com/shamoon) ([#14270](https://github.com/paperless-ngx/paperless-ngx/pull/14270))
|
||||||
|
- Fix: allow pointer events for pdf links in pngx viewer [@shamoon](https://github.com/shamoon) ([#14264](https://github.com/paperless-ngx/paperless-ngx/pull/14264))
|
||||||
|
- Feature: propagate resolved secrets to interactive container shells [@stumpylog](https://github.com/stumpylog) ([#14254](https://github.com/paperless-ngx/paperless-ngx/pull/14254))
|
||||||
|
- Fix: During a move to the trash directory, only attempt to copy metadata [@stumpylog](https://github.com/stumpylog) ([#14250](https://github.com/paperless-ngx/paperless-ngx/pull/14250))
|
||||||
|
- Fix: convert file mtime to the configured time zone directly [@stumpylog](https://github.com/stumpylog) ([#14249](https://github.com/paperless-ngx/paperless-ngx/pull/14249))
|
||||||
|
- Fix: ensure documentDeleted subscription is discarded [@shamoon](https://github.com/shamoon) ([#14247](https://github.com/paperless-ngx/paperless-ngx/pull/14247))
|
||||||
|
- Chore: Fix bugs in the test suite [@stumpylog](https://github.com/stumpylog) ([#14244](https://github.com/paperless-ngx/paperless-ngx/pull/14244))
|
||||||
|
- Fix: ensure bulk operations are checked against version root [@shamoon](https://github.com/shamoon) ([#14246](https://github.com/paperless-ngx/paperless-ngx/pull/14246))
|
||||||
|
- Enhancement: support separate embedding API key [@furkanural](https://github.com/furkanural) ([#14067](https://github.com/paperless-ngx/paperless-ngx/pull/14067))
|
||||||
|
- Enhancement: support passthrough extra params for LLMs [@shamoon](https://github.com/shamoon) ([#14202](https://github.com/paperless-ngx/paperless-ngx/pull/14202))
|
||||||
|
- Chore(deps): Bump autobahn from 25.12.2 to 26.7.1 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#14231](https://github.com/paperless-ngx/paperless-ngx/pull/14231))
|
||||||
|
- Fix: indexing after document-added workflows signal [@shamoon](https://github.com/shamoon) ([#14242](https://github.com/paperless-ngx/paperless-ngx/pull/14242))
|
||||||
|
- Fix: Record full tag and custom field lists in bulk edit audit log [@stumpylog](https://github.com/stumpylog) ([#14236](https://github.com/paperless-ngx/paperless-ngx/pull/14236))
|
||||||
|
- Chore: update pikepdf for ocrmypdf requirement [@shamoon](https://github.com/shamoon) ([#14235](https://github.com/paperless-ngx/paperless-ngx/pull/14235))
|
||||||
|
- Fix: handle legacy bulk edit split page range with missing page\_count [@shamoon](https://github.com/shamoon) ([#14212](https://github.com/paperless-ngx/paperless-ngx/pull/14212))
|
||||||
|
- Fix: ignore invalid EXIF orientation when generating image archives [@zhzy0077](https://github.com/zhzy0077) ([#14203](https://github.com/paperless-ngx/paperless-ngx/pull/14203))
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## paperless-ngx 3.2.1
|
## paperless-ngx 3.2.1
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|||||||
+3
-1
@@ -76,7 +76,9 @@ is not supported by any of the available parsers.
|
|||||||
|
|
||||||
**A:** Not by default. As of v3, a file whose contents match an existing document is still
|
**A:** Not by default. As of v3, a file whose contents match an existing document is still
|
||||||
consumed, and the duplicate is flagged in the UI — open the document and check the
|
consumed, and the duplicate is flagged in the UI — open the document and check the
|
||||||
**Duplicates** tab to review documents that share the same content. If you prefer the old
|
**Duplicates** tab to review documents that share the same content, or filter the document
|
||||||
|
list by **Duplicates** to find all of them (see
|
||||||
|
[Duplicate documents](usage.md#duplicate-documents)). If you prefer the old
|
||||||
behavior of rejecting duplicates during consumption, set
|
behavior of rejecting duplicates during consumption, set
|
||||||
[`PAPERLESS_CONSUMER_DELETE_DUPLICATES`](configuration.md#PAPERLESS_CONSUMER_DELETE_DUPLICATES)
|
[`PAPERLESS_CONSUMER_DELETE_DUPLICATES`](configuration.md#PAPERLESS_CONSUMER_DELETE_DUPLICATES)
|
||||||
to `true`.
|
to `true`.
|
||||||
|
|||||||
+2
-3
@@ -13,9 +13,8 @@ physical documents into a searchable online archive so you can keep, well, _less
|
|||||||
[Demo](https://demo.paperless-ngx.com){ .md-button .md-button--secondary target=\_blank }
|
[Demo](https://demo.paperless-ngx.com){ .md-button .md-button--secondary target=\_blank }
|
||||||
|
|
||||||
<div style="display: flex; justify-content: end; margin-top: -1.5rem;">
|
<div style="display: flex; justify-content: end; margin-top: -1.5rem;">
|
||||||
<a href="https://m.do.co/c/8d70b916d462" target="_blank">
|
<a href="https://fyrastack.com" target="_blank" aria-label="Demo hosting provided by Fyra Stack">
|
||||||
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_white.svg#only-dark" class="no-lightbox" width="150px">
|
<img src="assets/sponsors/fyra-stack.svg" alt="" class="no-lightbox" width="28px" style="vertical-align: middle;"> Fyra Stack
|
||||||
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_black.svg#only-light" class="no-lightbox" width="150px">
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -272,6 +272,65 @@ This error can occur in installations which have upgraded from a version of Pape
|
|||||||
$ python3 manage.py convert_mariadb_uuid
|
$ python3 manage.py convert_mariadb_uuid
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## MariaDB/MySQL error "Illegal mix of collations"
|
||||||
|
|
||||||
|
Consumption or other operations fail with an error like:
|
||||||
|
|
||||||
|
```
|
||||||
|
(1267, "Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and
|
||||||
|
(utf8mb4_unicode_ci,IMPLICIT) for operation '='")
|
||||||
|
```
|
||||||
|
|
||||||
|
This happens when the tables in your database do not all use the same
|
||||||
|
collation. It is most often seen on databases that existed before a
|
||||||
|
MariaDB/MySQL upgrade: older tables keep their original collation, while
|
||||||
|
tables created afterwards use the new server default.
|
||||||
|
|
||||||
|
To work around it, set the collation your existing tables use (the one in the error
|
||||||
|
that is not `utf8mb4_unicode_ci`) with
|
||||||
|
[`PAPERLESS_DB_OPTIONS`](configuration.md#PAPERLESS_DB_OPTIONS):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PAPERLESS_DB_OPTIONS="collation=utf8mb4_general_ci"
|
||||||
|
```
|
||||||
|
|
||||||
|
To fix it permanently, back up your database, then convert the database and
|
||||||
|
each table to a single collation and remove the override:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
ALTER DATABASE paperless CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
```
|
||||||
|
|
||||||
|
## PostgreSQL warns about a "collation version mismatch"
|
||||||
|
|
||||||
|
The PostgreSQL log shows a warning like:
|
||||||
|
|
||||||
|
```
|
||||||
|
WARNING: database "paperless" has a collation version mismatch
|
||||||
|
DETAIL: The database was created using collation version 2.36, but the operating system provides version 2.41.
|
||||||
|
HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE paperless REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
|
||||||
|
```
|
||||||
|
|
||||||
|
This comes from PostgreSQL, not Paperless-ngx. The `glibc` version that PostgreSQL
|
||||||
|
runs against changed, and the existing database was created with an older one. With
|
||||||
|
Docker, `glibc` comes from the PostgreSQL image's Debian base, not the host, so this
|
||||||
|
commonly happens when a new image is pulled after its base Debian release changed.
|
||||||
|
If PostgreSQL is installed directly on a host, it uses the host's `glibc` instead.
|
||||||
|
|
||||||
|
The warning is not an error and Paperless-ngx keeps working, but the database's text
|
||||||
|
indexes may be built with outdated sorting rules. To resolve it, back up your
|
||||||
|
database, then connect to it (for example with `psql -U paperless -d paperless`
|
||||||
|
inside the database container) and run:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
REINDEX DATABASE paperless;
|
||||||
|
ALTER DATABASE paperless REFRESH COLLATION VERSION;
|
||||||
|
```
|
||||||
|
|
||||||
|
To avoid this in the future, pin your PostgreSQL image to a specific Debian release,
|
||||||
|
for example `postgres:18-trixie`, rather than `postgres:18`.
|
||||||
|
|
||||||
## Platform-Specific Deployment Troubleshooting
|
## Platform-Specific Deployment Troubleshooting
|
||||||
|
|
||||||
A user-maintained wiki page is available to help troubleshoot issues that may arise when trying to deploy Paperless-ngx on specific platforms, for example SELinux. Please see [the wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Platform%E2%80%90Specific-Troubleshooting).
|
A user-maintained wiki page is available to help troubleshoot issues that may arise when trying to deploy Paperless-ngx on specific platforms, for example SELinux. Please see [the wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Platform%E2%80%90Specific-Troubleshooting).
|
||||||
+7
-8
@@ -299,19 +299,18 @@ for details.
|
|||||||
### Duplicate documents
|
### Duplicate documents
|
||||||
|
|
||||||
By default, Paperless-ngx **does not reject duplicates**. If you consume a file whose
|
By default, Paperless-ngx **does not reject duplicates**. If you consume a file whose
|
||||||
contents exactly match an existing document (same checksum), the new copy is still
|
contents match an existing document (same original or archive checksum), the new copy is
|
||||||
consumed and a warning is logged. The task entry for the upload also flags that a
|
still consumed and a warning is logged.
|
||||||
duplicate was detected and links to the existing document(s).
|
|
||||||
|
|
||||||
To review duplicates, open a document and switch to the **Duplicates** tab on the
|
When a document has duplicates, a **Duplicates** tab appears on its detail page, listing
|
||||||
document detail page. It lists other documents that share the same content, including any
|
the other documents you can view that share the same content (including any in the trash).
|
||||||
that are in the trash (shown with a badge), and links to each so you can decide which to
|
To find all documents with duplicates, choose **Duplicates** in the document list's text
|
||||||
keep.
|
filter dropdown, or use `has_duplicates=true` in the REST API.
|
||||||
|
|
||||||
If you would rather reject duplicates at consumption time (the pre-v3 behavior), set
|
If you would rather reject duplicates at consumption time (the pre-v3 behavior), set
|
||||||
[`PAPERLESS_CONSUMER_DELETE_DUPLICATES`](configuration.md#PAPERLESS_CONSUMER_DELETE_DUPLICATES)
|
[`PAPERLESS_CONSUMER_DELETE_DUPLICATES`](configuration.md#PAPERLESS_CONSUMER_DELETE_DUPLICATES)
|
||||||
to `true`. The duplicate file is then deleted instead of consumed, and the task fails with
|
to `true`. The duplicate file is then deleted instead of consumed, and the task fails with
|
||||||
a "document already exists" message.
|
a "Document already exists" message linking to the existing document.
|
||||||
|
|
||||||
## Document Suggestions
|
## Document Suggestions
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "paperless-ngx"
|
name = "paperless-ngx"
|
||||||
version = "3.2.1"
|
version = "3.3.0"
|
||||||
description = """\
|
description = """\
|
||||||
A community-supported supercharged document management system: scan, index and archive all your physical documents\
|
A community-supported supercharged document management system: scan, index and archive all your physical documents\
|
||||||
"""
|
"""
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "paperless-ngx-ui",
|
"name": "paperless-ngx-ui",
|
||||||
"version": "3.2.1",
|
"version": "3.3.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "npx only-allow pnpm",
|
"preinstall": "npx only-allow pnpm",
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const environment = {
|
|||||||
apiVersion: '10', // match src/paperless/settings.py
|
apiVersion: '10', // match src/paperless/settings.py
|
||||||
appTitle: DEFAULT_APP_TITLE,
|
appTitle: DEFAULT_APP_TITLE,
|
||||||
tag: 'prod',
|
tag: 'prod',
|
||||||
version: '3.2.1',
|
version: '3.3.0',
|
||||||
webSocketHost: window.location.host,
|
webSocketHost: window.location.host,
|
||||||
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
||||||
webSocketBaseUrl: base_url.pathname + 'ws/',
|
webSocketBaseUrl: base_url.pathname + 'ws/',
|
||||||
|
|||||||
@@ -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="translated">{VAR_PLURAL, plural, =1 {1 Vorschlag unten verfügbar} other {<x id="INTERPOLATION"/> Vorschläge unten verfügbar}}</target>
|
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</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>
|
||||||
|
|||||||
@@ -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="translated">{VAR_PLURAL, plural, one {<x id="INTERPOLATION"/> suggerimenti disponibili sotto} =1 {1 suggerimento disponibile sotto} other {<x id="INTERPOLATION"/> suggerimenti disponibili sotto}}</target>
|
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</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="translated">Copia contenuto</target>
|
<target state="needs-translation">Copy content</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="translated">Codici a barre</target>
|
<target state="needs-translation">Barcodes</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="translated">Contenuti Codice a Barre</target>
|
<target state="needs-translation">Store Barcode Contents</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>
|
||||||
|
|||||||
@@ -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="translated"> Slajd <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> z <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
|
<target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> of <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="translated">Zadania pomagają śledzić pracę w tle, to, co wymaga uwagi i co zostało ostatnio ukończone.</target>
|
<target state="needs-translation">Tasks helps you track background work, what needs attention, and what recently completed.</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="translated">Ta wartość zastępuje <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, która jest ustawiona poza Paperless.</target>
|
<target state="needs-translation">This value overrides <x id="INTERPOLATION" equiv-text="{{option.config_key}}"/>, which is set outside 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="translated"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> jest ustawiony poza Paperless. Wpisz tutaj wartość, aby go zastąpić.</target>
|
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="{{option.config_key}}"/> is set outside Paperless. Enter a value here to override it.</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="translated">Użyj wartości skonfigurowanej zewnętrznie</target>
|
<target state="needs-translation">Use the externally configured value</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="translated">Zresetuj na zewnętrzny</target>
|
<target state="needs-translation">Reset to external</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="translated">Obydwa</target>
|
<target state="needs-translation">Both</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="translated">Tylko ML</target>
|
<target state="needs-translation">ML only</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="translated">Tylko SI</target>
|
<target state="needs-translation">AI only</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="translated">Zadania zawierają szczegóły dotyczące przetwarzania dokumentów i zadań systemowych.</target>
|
<target state="needs-translation">Tasks shows detailed information about document consumption and system tasks.</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="translated">Szukaj w zadaniach</target>
|
<target state="needs-translation">Search tasks</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="translated">Wyświetl szczegóły zadania</target>
|
<target state="needs-translation">View task details</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="translated">Obróć w lewo</target>
|
<target state="needs-translation">Rotate counterclockwise</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="translated">Obróć w prawo</target>
|
<target state="needs-translation">Rotate clockwise</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óć zaznaczone strony w lewo</target>
|
<target state="translated">Obróć wybrane strony przeciwnie do ruchu wskazówek zegara</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óć zaznaczone strony w prawo</target>
|
<target state="translated">Obróć wybrane strony zgodnie z ruchem wskazówek zegara</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ę w lewo</target>
|
<target state="translated">Obróć stronę przeciwnie do ruchu wskazówek zegara</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ę w prawo</target>
|
<target state="translated">Obróć stronę zgodnie z ruchem wskazówek zegara</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>
|
||||||
|
|||||||
@@ -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="translated"> Слайд <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> из <x id="INTERPOLATION_1" equiv-text="this._cycleToSe"/> </target>
|
<target state="needs-translation"> Slide <x id="INTERPOLATION" equiv-text="xt(source?: Ngb"/> of <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="translated">Предложения по умолчанию для</target>
|
<target state="needs-translation">Suggestions default to</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="translated">Оба</target>
|
<target state="needs-translation">Both</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="translated">Только ML</target>
|
<target state="needs-translation">ML only</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="translated">Только ИИ</target>
|
<target state="needs-translation">AI only</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="translated">{VAR_PLURAL, plural, =1 {1 совет} other {<x id="INTERPOLATION"/> советов}}</target>
|
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</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="translated">Настройки советов</target>
|
<target state="needs-translation">Suggestion options</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="translated">Не использует по умолчанию</target>
|
<target state="needs-translation">Not using default</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="translated">Предложить используя:</target>
|
<target state="needs-translation">Suggest using:</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="translated">ML</target>
|
<target state="needs-translation">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="translated">ИИ</target>
|
<target state="needs-translation">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="translated">Скопировать содержимое</target>
|
<target state="needs-translation">Copy content</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="translated">Штрихкоды</target>
|
<target state="needs-translation">Barcodes</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="translated">Сохранить содержимое штрихкодов</target>
|
<target state="needs-translation">Store Barcode Contents</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
@@ -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="translated">重置为外部</target>
|
<target state="needs-translation">Reset to external</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="translated">侧边栏显示项:</target>
|
<target state="needs-translation">Sidebar items to show:</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="translated">仅限 ML</target>
|
<target state="needs-translation">ML only</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="translated">仅限 AI</target>
|
<target state="needs-translation">AI only</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="translated">应用 AI 建议</target>
|
<target state="needs-translation">Apply AI Suggestions</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="translated">分享链接</target>
|
<target state="needs-translation">Share links</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="translated">聊天</target>
|
<target state="needs-translation">Chat</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="translated">使用远程 OCR</target>
|
<target state="needs-translation">Use remote 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="translated">将文档发送到已配置的远程 OCR 服务,可能会产生费用。</target>
|
<target state="needs-translation">Sends the document to the configured remote OCR service, which may incur costs.</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="translated">打开日期选择器</target>
|
<target state="needs-translation">Open date picker</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="translated">移除查询</target>
|
<target state="needs-translation">Remove query</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="translated">移除表达式</target>
|
<target state="needs-translation">Remove expression</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="translated">远程 OCR</target>
|
<target state="needs-translation">Remote 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="translated">应用 AI 建议</target>
|
<target state="needs-translation">Apply AI suggestions</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="translated">创建日期</target>
|
<target state="needs-translation">Created date</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="translated">不可用</target>
|
<target state="needs-translation">Unavailable</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="translated">移除条目</target>
|
<target state="needs-translation">Remove entry</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="translated">移除项目</target>
|
<target state="needs-translation">Remove item</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="translated">清除选中的用户</target>
|
<target state="needs-translation">Clear selected users</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="translated">无建议</target>
|
<target state="needs-translation">No suggestions</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="translated">建议选项</target>
|
<target state="needs-translation">Suggestion options</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="translated">不使用默认值</target>
|
<target state="needs-translation">Not using default</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="translated">建议使用:</target>
|
<target state="needs-translation">Suggest using:</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="translated">ML</target>
|
<target state="needs-translation">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="translated">AI</target>
|
<target state="needs-translation">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="translated">复制内容</target>
|
<target state="needs-translation">Copy content</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="translated">下载选项</target>
|
<target state="needs-translation">Download options</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="translated">条形码</target>
|
<target state="needs-translation">Barcodes</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="translated">此版本的内容有未保存的更改。</target>
|
<target state="needs-translation">You have unsaved changes to the content of this version.</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="translated">切换版本将丢弃这些更改。</target>
|
<target state="needs-translation">Switching versions will discard them.</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="translated">丢弃并切换</target>
|
<target state="needs-translation">Discard and switch</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="translated">保存并切换</target>
|
<target state="needs-translation">Save and switch</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="translated">请选择一份文档,将其添加为新版本。</target>
|
<target state="needs-translation">Select one document to add as a version.</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="translated">上传新版本</target>
|
<target state="needs-translation">Upload a new version</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="translated">使用现有文档</target>
|
<target state="needs-translation">Use an existing document</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="translated">已有的</target>
|
<target state="needs-translation">Existing</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="translated">创建副本</target>
|
<target state="needs-translation">Duplicates</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="translated">存在</target>
|
<target state="needs-translation">exist</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="translated">不存在</target>
|
<target state="needs-translation">do not exist</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) => c.id == +rule.value )?.name"/></source>
|
<source>Correspondent: <x id="PH" equiv-text="this.correspondentSelectionModel.items.find( (c) => 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="translated">无重复项</target>
|
<target state="needs-translation">Without duplicates</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="translated">带重复项</target>
|
<target state="needs-translation">With duplicates</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="translated">图标</target>
|
<target state="needs-translation">Icon</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="translated">已过期</target>
|
<target state="needs-translation">Expired</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="translated">分享链接合集分页</target>
|
<target state="needs-translation">Share link bundles pagination</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="translated">文档</target>
|
<target state="needs-translation">Document</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="translated">删除分享链接</target>
|
<target state="needs-translation">Delete share link</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="translated">加载分享链接失败。</target>
|
<target state="needs-translation">Failed to load share links.</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="translated">获取分享链接失败。</target>
|
<target state="needs-translation">Error retrieving share links.</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="translated">分享链接已删除。</target>
|
<target state="needs-translation">Share link deleted.</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="translated">删除分享链接失败。</target>
|
<target state="needs-translation">Error deleting share link.</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="translated">管理单个文档和文档合集的公开分享链接。</target>
|
<target state="needs-translation">Manage public links to individual documents and document bundles.</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="translated">文档链接</target>
|
<target state="needs-translation">Document links</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="translated">捆绑包</target>
|
<target state="needs-translation">Bundles</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 'trigger' a workflow.</source>
|
<source>Use workflows to customize the behavior of Paperless-ngx when events 'trigger' 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="translated">远程 OCR 引擎</target>
|
<target state="needs-translation">Remote OCR Engine</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="translated">远程 OCR API 密钥</target>
|
<target state="needs-translation">Remote OCR API Key</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="translated">远程 OCR 端点</target>
|
<target state="needs-translation">Remote OCR Endpoint</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="translated">使用 Azure AI 引擎时必填。</target>
|
<target state="needs-translation">Required when using the Azure AI engine.</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="translated">远程 OCR 模式</target>
|
<target state="needs-translation">Remote OCR Mode</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 'workflow_only' to keep remote OCR off unless a workflow enables it for a document.</source>
|
<source>Which documents are sent to the remote engine. Use 'workflow_only' to keep remote OCR off unless a workflow enables it for a document.</source>
|
||||||
|
|||||||
@@ -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="translated">{VAR_PLURAL, plural, =1 {以下有 1 個可用建議} other {以下有 <x id="INTERPOLATION"/> 個可用建議}}</target>
|
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 suggestion available below} other {<x id="INTERPOLATION"/> suggestions available below}}</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="translated">拷貝內容</target>
|
<target state="needs-translation">Copy content</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="translated">條碼</target>
|
<target state="needs-translation">Barcodes</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="translated">儲存條碼內容</target>
|
<target state="needs-translation">Store Barcode Contents</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>
|
||||||
|
|||||||
@@ -13,14 +13,8 @@ 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
|
||||||
@@ -42,7 +36,6 @@ 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
|
||||||
@@ -415,28 +408,10 @@ 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.
|
|
||||||
"""
|
"""
|
||||||
latest_version = versions_newest_first(
|
for document_id in doc_ids:
|
||||||
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": source_id, "remote_ocr": remote_ocr},
|
kwargs={"document_id": document_id, "remote_ocr": remote_ocr},
|
||||||
headers={"trigger_source": PaperlessTask.TriggerSource.MANUAL},
|
headers={"trigger_source": PaperlessTask.TriggerSource.MANUAL},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ from django.contrib.auth.models import Permission
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db.models import Case
|
from django.db.models import Case
|
||||||
from django.db.models import CharField
|
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from django.db.models import F
|
|
||||||
from django.db.models import IntegerField
|
from django.db.models import IntegerField
|
||||||
from django.db.models import Model
|
from django.db.models import Model
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
@@ -16,7 +14,6 @@ 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
|
||||||
@@ -351,7 +348,6 @@ def permitted_object_ids(
|
|||||||
perm: str,
|
perm: str,
|
||||||
*,
|
*,
|
||||||
include_deleted: bool = False,
|
include_deleted: bool = False,
|
||||||
parent_field: str | None = None,
|
|
||||||
) -> QuerySet[int]:
|
) -> QuerySet[int]:
|
||||||
"""
|
"""
|
||||||
Generic version of ``permitted_document_ids`` for any model with an
|
Generic version of ``permitted_document_ids`` for any model with an
|
||||||
@@ -360,24 +356,6 @@ def permitted_object_ids(
|
|||||||
soft-delete pattern (currently only ``Document``); for every other model
|
soft-delete pattern (currently only ``Document``); for every other model
|
||||||
it is accepted but has no effect, since those models have no soft-delete
|
it is accepted but has no effect, since those models have no soft-delete
|
||||||
concept.
|
concept.
|
||||||
|
|
||||||
``parent_field`` names a self-referencing foreign key whose target
|
|
||||||
authorizes the row (``Document.root_document``). A row with a parent is
|
|
||||||
visible exactly when its parent is, judged by the parent's owner and
|
|
||||||
grants, so the row's own owner and grants are ignored.
|
|
||||||
|
|
||||||
Guardian stores ``object_pk`` as a string, so the row key is cast to a
|
|
||||||
string and tested against the user's and groups' grants with a single
|
|
||||||
uncorrelated ``IN``. Postgres and SQLite build that set once. MariaDB
|
|
||||||
evaluates it as an index probe per row, which is cheap because the
|
|
||||||
lookups use guardian's unique indexes. Casting every ``object_pk`` to an
|
|
||||||
integer instead cannot use an index, and MariaDB cannot materialize it
|
|
||||||
inside the owner ``OR``, so it re-scans the user's grants for every row.
|
|
||||||
A correlated ``EXISTS`` per grant fixes MariaDB too, but Postgres and
|
|
||||||
SQLite re-run it for every row and end up slower than the original. The
|
|
||||||
user's groups are matched with an ``IN`` subquery rather than a join
|
|
||||||
through the membership table, which SQLite plans badly once the grant
|
|
||||||
tables grow.
|
|
||||||
"""
|
"""
|
||||||
has_soft_delete = hasattr(model, "global_objects")
|
has_soft_delete = hasattr(model, "global_objects")
|
||||||
manager = (
|
manager = (
|
||||||
@@ -385,21 +363,8 @@ def permitted_object_ids(
|
|||||||
)
|
)
|
||||||
base_qs = manager.all().only("id", "owner")
|
base_qs = manager.all().only("id", "owner")
|
||||||
|
|
||||||
owner_field, key_field = "owner", "pk"
|
|
||||||
if parent_field is not None:
|
|
||||||
owner_field, key_field = "authorizing_owner", "authorizing_id"
|
|
||||||
base_qs = base_qs.annotate(
|
|
||||||
authorizing_id=Coalesce(f"{parent_field}_id", "id"),
|
|
||||||
authorizing_owner=Case(
|
|
||||||
When(**{f"{parent_field}_id__isnull": True}, then=F("owner_id")),
|
|
||||||
default=F(f"{parent_field}__owner_id"),
|
|
||||||
output_field=IntegerField(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
unowned = Q(**{f"{owner_field}__isnull": True})
|
|
||||||
|
|
||||||
if user is None or not getattr(user, "is_authenticated", False):
|
if user is None or not getattr(user, "is_authenticated", False):
|
||||||
return base_qs.filter(unowned).values_list("id", flat=True)
|
return base_qs.filter(owner__isnull=True).values_list("id", flat=True)
|
||||||
|
|
||||||
# Deactivated users get nothing, deactivated superusers included, so this
|
# Deactivated users get nothing, deactivated superusers included, so this
|
||||||
# has to come before the superuser shortcut. guardian's
|
# has to come before the superuser shortcut. guardian's
|
||||||
@@ -423,26 +388,21 @@ def permitted_object_ids(
|
|||||||
"permission__content_type": content_type,
|
"permission__content_type": content_type,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Both grant sets are compared to the row key as strings, exactly as
|
user_perm_ids = (
|
||||||
# guardian stores them, and are uncorrelated, so each engine can build the
|
UserObjectPermission.objects.filter(user=user, **perm_filter)
|
||||||
# set once instead of probing per row.
|
.annotate(object_pk_int=Cast("object_pk", IntegerField()))
|
||||||
user_keys = UserObjectPermission.objects.filter(
|
.values_list("object_pk_int", flat=True)
|
||||||
user=user,
|
|
||||||
**perm_filter,
|
|
||||||
).values_list("object_pk", flat=True)
|
|
||||||
group_keys = GroupObjectPermission.objects.filter(
|
|
||||||
group_id__in=user.groups.values("id"),
|
|
||||||
**perm_filter,
|
|
||||||
).values_list("object_pk", flat=True)
|
|
||||||
permitted_keys = user_keys.union(group_keys, all=True)
|
|
||||||
|
|
||||||
return (
|
|
||||||
base_qs.annotate(permitted_key=Cast(key_field, CharField(max_length=64)))
|
|
||||||
.filter(
|
|
||||||
Q(**{owner_field: user.pk}) | unowned | Q(permitted_key__in=permitted_keys),
|
|
||||||
)
|
|
||||||
.values_list("id", flat=True)
|
|
||||||
)
|
)
|
||||||
|
group_perm_ids = (
|
||||||
|
GroupObjectPermission.objects.filter(group__user=user, **perm_filter)
|
||||||
|
.annotate(object_pk_int=Cast("object_pk", IntegerField()))
|
||||||
|
.values_list("object_pk_int", flat=True)
|
||||||
|
)
|
||||||
|
permitted_ids = user_perm_ids.union(group_perm_ids)
|
||||||
|
|
||||||
|
return base_qs.filter(
|
||||||
|
Q(owner=user) | Q(owner__isnull=True) | Q(id__in=permitted_ids),
|
||||||
|
).values_list("id", flat=True)
|
||||||
|
|
||||||
|
|
||||||
ModelT = TypeVar("ModelT", bound=Model)
|
ModelT = TypeVar("ModelT", bound=Model)
|
||||||
@@ -510,17 +470,8 @@ def permitted_document_ids(
|
|||||||
``include_deleted=True`` for callers that need to check permission on
|
``include_deleted=True`` for callers that need to check permission on
|
||||||
soft-deleted documents (e.g. trash restore). This intentionally avoids
|
soft-deleted documents (e.g. trash restore). This intentionally avoids
|
||||||
``get_objects_for_user`` to keep the subquery small and index-friendly.
|
``get_objects_for_user`` to keep the subquery small and index-friendly.
|
||||||
|
|
||||||
A version is authorized by its root document, so a version's own owner and
|
|
||||||
grants never matter.
|
|
||||||
"""
|
"""
|
||||||
return permitted_object_ids(
|
return permitted_object_ids(user, Document, perm, include_deleted=include_deleted)
|
||||||
user,
|
|
||||||
Document,
|
|
||||||
perm,
|
|
||||||
include_deleted=include_deleted,
|
|
||||||
parent_field="root_document",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def get_document_count_filter_for_user(user, related_name: str = "documents"):
|
def get_document_count_filter_for_user(user, related_name: str = "documents"):
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ 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
|
||||||
@@ -32,7 +31,6 @@ 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
|
||||||
@@ -56,19 +54,6 @@ 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
|
||||||
@@ -642,15 +627,7 @@ class TantivyBackend:
|
|||||||
document.created.day,
|
document.created.day,
|
||||||
tzinfo=UTC,
|
tzinfo=UTC,
|
||||||
)
|
)
|
||||||
if _is_indexable_date(created_date):
|
doc.add_date("created", 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)
|
||||||
|
|
||||||
@@ -1133,44 +1110,39 @@ 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)
|
||||||
# The marker covers the window where the empty index is already stamped
|
new_index = tantivy.Index(build_schema(), path=str(self._path))
|
||||||
# as current but not yet populated, so an interrupted rebuild is retried.
|
_write_sentinels(self._path)
|
||||||
with rebuild_in_progress(self._path):
|
register_tokenizers(new_index, settings.SEARCH_LANGUAGE)
|
||||||
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
|
# document) while fetching viewer permissions one SQL query per chunk.
|
||||||
# chunk. The stream is Sized, so iter_wrapper can still discover
|
# The stream is Sized, so iter_wrapper can still discover the total.
|
||||||
# the total.
|
documents_stream = _DocumentViewerStream(documents, chunk_size=1000)
|
||||||
documents_stream = _DocumentViewerStream(documents, chunk_size=1000)
|
try:
|
||||||
try:
|
writer = new_index.writer(heap_size=writer_heap_bytes)
|
||||||
writer = new_index.writer(heap_size=writer_heap_bytes)
|
for document, (viewer_ids, viewer_group_ids) in iter_wrapper(
|
||||||
for document, (viewer_ids, viewer_group_ids) in iter_wrapper(
|
documents_stream,
|
||||||
documents_stream,
|
):
|
||||||
):
|
doc = self._build_tantivy_doc(
|
||||||
doc = self._build_tantivy_doc(
|
document,
|
||||||
document,
|
viewer_ids=viewer_ids,
|
||||||
viewer_ids=viewer_ids,
|
viewer_group_ids=viewer_group_ids,
|
||||||
viewer_group_ids=viewer_group_ids,
|
)
|
||||||
)
|
writer.add_document(doc)
|
||||||
writer.add_document(doc)
|
writer.commit()
|
||||||
writer.commit()
|
# Wait for background merge threads to finish so all segments are
|
||||||
# Wait for background merge threads to finish so all segments
|
# fully merged and persisted before the index is considered rebuilt.
|
||||||
# are fully merged and persisted before the index is considered
|
writer.wait_merging_threads()
|
||||||
# rebuilt.
|
new_index.reload()
|
||||||
writer.wait_merging_threads()
|
except BaseException: # pragma: no cover
|
||||||
new_index.reload()
|
# Restore old index on failure so the backend remains usable
|
||||||
except BaseException: # pragma: no cover
|
self._raw_index = old_index
|
||||||
# Restore old index on failure so the backend remains usable
|
self._raw_schema = old_schema
|
||||||
self._raw_index = old_index
|
raise
|
||||||
self._raw_schema = old_schema
|
|
||||||
raise
|
|
||||||
|
|
||||||
|
|
||||||
def chunked(iterable, size):
|
def chunked(iterable, size):
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ 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
|
||||||
@@ -17,7 +16,6 @@ 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")
|
||||||
@@ -30,11 +28,6 @@ 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.
|
||||||
@@ -262,9 +255,9 @@ def needs_rebuild(index_dir: Path) -> bool:
|
|||||||
"""
|
"""
|
||||||
Check if the search index needs rebuilding.
|
Check if the search index needs rebuilding.
|
||||||
|
|
||||||
True if a previous full rebuild never finished (the rebuild marker is still
|
Reads .index_settings.json to compare the stored schema version, search
|
||||||
present), or if the index's stamped settings no longer match the current
|
language and schema fingerprint against the current configuration. Returns
|
||||||
configuration. See _settings_mismatch().
|
True if the file is missing, unparsable, or any value mismatches.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
index_dir: Path to the search index directory
|
index_dir: Path to the search index directory
|
||||||
@@ -272,40 +265,6 @@ 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
|
||||||
@@ -374,7 +333,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 _settings_mismatch(index_dir):
|
if needs_rebuild(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)
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ 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
|
||||||
|
|
||||||
@@ -2895,7 +2894,7 @@ class ShareLinkSerializer(OwnedObjectSerializer):
|
|||||||
and has_perms_owner_aware(
|
and has_perms_owner_aware(
|
||||||
self.user,
|
self.user,
|
||||||
"view_document",
|
"view_document",
|
||||||
get_root_document(document),
|
document,
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
return document
|
return document
|
||||||
|
|||||||
@@ -490,23 +490,18 @@ 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 {root_document.pk} ({document.archive_checksum})",
|
f"Updating index for document {document_id} ({document.archive_checksum})",
|
||||||
)
|
)
|
||||||
from documents.search import get_backend
|
from documents.search import get_backend
|
||||||
|
|
||||||
get_backend().add_or_update(root_document)
|
get_backend().add_or_update(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(root_document)
|
llm_index_add_or_update_document(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(
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
from datetime import date
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -18,10 +16,7 @@ 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
|
||||||
@@ -828,53 +823,6 @@ 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.
|
||||||
|
|
||||||
@@ -906,79 +854,6 @@ 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,7 +8,6 @@ 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
|
||||||
@@ -17,17 +16,13 @@ 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
|
||||||
@@ -1048,152 +1043,3 @@ 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)
|
|
||||||
@@ -6,7 +6,6 @@ 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
|
||||||
|
|
||||||
@@ -280,53 +279,3 @@ 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())
|
|
||||||
@@ -4,7 +4,6 @@ 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
|
||||||
@@ -13,7 +12,6 @@ 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
|
||||||
@@ -25,7 +23,6 @@ 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
|
||||||
|
|
||||||
|
|
||||||
@@ -1973,22 +1970,18 @@ class TestPDFActions(DirectoriesMixin, TestCase):
|
|||||||
self.assertIn("Error removing password from document", cm.output[0])
|
self.assertIn("Error removing password from document", cm.output[0])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
class TestBulkEditReprocess(DirectoriesMixin, TestCase):
|
||||||
class TestBulkEditReprocess:
|
def setUp(self) -> None:
|
||||||
@pytest.fixture
|
super().setUp()
|
||||||
def mock_task(self, mocker: MockerFixture) -> mock.MagicMock:
|
|
||||||
return mocker.patch(
|
self.doc = Document.objects.create(
|
||||||
"documents.bulk_edit.update_document_content_maybe_archive_file",
|
title="test",
|
||||||
|
checksum="A",
|
||||||
|
mime_type="application/pdf",
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@mock.patch("documents.bulk_edit.update_document_content_maybe_archive_file")
|
||||||
def _queued_ids(mock_task: mock.MagicMock) -> list[int]:
|
def test_reprocess_defaults_to_local(self, mock_task: mock.Mock) -> None:
|
||||||
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
|
||||||
@@ -1997,17 +1990,18 @@ class TestBulkEditReprocess:
|
|||||||
THEN:
|
THEN:
|
||||||
- The task is queued without asking for the remote engine
|
- The task is queued without asking for the remote engine
|
||||||
"""
|
"""
|
||||||
doc = DocumentFactory()
|
result = bulk_edit.reprocess([self.doc.id])
|
||||||
|
|
||||||
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()
|
||||||
assert mock_task.apply_async.call_args.kwargs["kwargs"] == {
|
_, kwargs = mock_task.apply_async.call_args
|
||||||
"document_id": doc.id,
|
self.assertEqual(
|
||||||
"remote_ocr": False,
|
kwargs["kwargs"],
|
||||||
}
|
{"document_id": self.doc.id, "remote_ocr": False},
|
||||||
|
)
|
||||||
|
|
||||||
def test_reprocess_passes_remote_ocr(self, mock_task: mock.MagicMock) -> None:
|
@mock.patch("documents.bulk_edit.update_document_content_maybe_archive_file")
|
||||||
|
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
|
||||||
@@ -2016,72 +2010,14 @@ class TestBulkEditReprocess:
|
|||||||
THEN:
|
THEN:
|
||||||
- The request is forwarded to the task for every document
|
- The request is forwarded to the task for every document
|
||||||
"""
|
"""
|
||||||
docs = DocumentFactory.create_batch(2)
|
other = Document.objects.create(
|
||||||
|
title="test2",
|
||||||
bulk_edit.reprocess([doc.id for doc in docs], remote_ocr=True)
|
checksum="B",
|
||||||
|
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([root.id, latest.id])
|
bulk_edit.reprocess([self.doc.id, other.id], remote_ocr=True)
|
||||||
|
|
||||||
assert self._queued_ids(mock_task) == [latest.id]
|
self.assertEqual(mock_task.apply_async.call_count, 2)
|
||||||
|
for call in mock_task.apply_async.call_args_list:
|
||||||
|
self.assertTrue(call.kwargs["kwargs"]["remote_ocr"])
|
||||||
@@ -32,8 +32,6 @@ from paperless_testing.permissions import grant_global
|
|||||||
from paperless_testing.permissions import grant_object
|
from paperless_testing.permissions import grant_object
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from django.contrib.auth.models import User
|
|
||||||
|
|
||||||
from paperless_testing.dirs import PaperlessDirs
|
from paperless_testing.dirs import PaperlessDirs
|
||||||
|
|
||||||
|
|
||||||
@@ -180,296 +178,6 @@ class TestPermittedDocumentIdsIncludeDeleted:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
|
||||||
class TestPermittedDocumentIdsVersions:
|
|
||||||
"""
|
|
||||||
A version is authorized by its root document: the version's own owner and
|
|
||||||
grants never matter.
|
|
||||||
"""
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
("root_owner", "version_owner", "expected_visible"),
|
|
||||||
[
|
|
||||||
pytest.param(
|
|
||||||
"other",
|
|
||||||
"nobody",
|
|
||||||
False,
|
|
||||||
id="unowned-version-of-private-root",
|
|
||||||
),
|
|
||||||
pytest.param("other", "user", False, id="own-version-of-private-root"),
|
|
||||||
pytest.param("user", "other", True, id="foreign-version-of-own-root"),
|
|
||||||
pytest.param("user", "nobody", True, id="unowned-version-of-own-root"),
|
|
||||||
pytest.param("nobody", "other", True, id="private-version-of-unowned-root"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_version_follows_root_owner(
|
|
||||||
self,
|
|
||||||
root_owner: str,
|
|
||||||
version_owner: str,
|
|
||||||
*,
|
|
||||||
expected_visible: bool,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A root document and a version with differing owners
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for the user
|
|
||||||
THEN:
|
|
||||||
- The version is visible exactly when its root is
|
|
||||||
"""
|
|
||||||
user = UserFactory()
|
|
||||||
owners = {"user": user, "other": UserFactory(), "nobody": None}
|
|
||||||
root = DocumentFactory(owner=owners[root_owner])
|
|
||||||
version = DocumentFactory(root_document=root, owner=owners[version_owner])
|
|
||||||
|
|
||||||
visible = set(permitted_document_ids(user))
|
|
||||||
|
|
||||||
assert (version.pk in visible) is expected_visible
|
|
||||||
assert (root.pk in visible) is expected_visible
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def grantee(user: User, kind: str) -> User | Group:
|
|
||||||
"""The user itself, or a new group the user belongs to."""
|
|
||||||
if kind == "user":
|
|
||||||
return user
|
|
||||||
group = Group.objects.create(name="shared")
|
|
||||||
user.groups.add(group)
|
|
||||||
return group
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"grantee_kind",
|
|
||||||
[pytest.param("user", id="user"), pytest.param("group", id="group")],
|
|
||||||
)
|
|
||||||
def test_grant_on_root_applies_to_version(self, grantee_kind: str) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A private root document shared with a user or one of their groups
|
|
||||||
- A version of it owned by someone else
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for the user
|
|
||||||
THEN:
|
|
||||||
- Both the root and the version are visible
|
|
||||||
- A user without the grant sees neither
|
|
||||||
"""
|
|
||||||
user = UserFactory()
|
|
||||||
stranger = UserFactory()
|
|
||||||
root = DocumentFactory(owner=UserFactory())
|
|
||||||
version = DocumentFactory(root_document=root, owner=UserFactory())
|
|
||||||
grant_object(self.grantee(user, grantee_kind), root, "view_document")
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(user),
|
|
||||||
expected_visible=[root.pk, version.pk],
|
|
||||||
expected_hidden=[],
|
|
||||||
)
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(stranger),
|
|
||||||
expected_visible=[],
|
|
||||||
expected_hidden=[root.pk, version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"grantee_kind",
|
|
||||||
[pytest.param("user", id="user"), pytest.param("group", id="group")],
|
|
||||||
)
|
|
||||||
def test_grant_on_version_is_ignored(self, grantee_kind: str) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A private root document
|
|
||||||
- A version with an explicit grant for the user or one of their groups
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for the user
|
|
||||||
THEN:
|
|
||||||
- Neither the root nor the version is visible
|
|
||||||
"""
|
|
||||||
user = UserFactory()
|
|
||||||
root = DocumentFactory(owner=UserFactory())
|
|
||||||
version = DocumentFactory(root_document=root, owner=UserFactory())
|
|
||||||
grant_object(self.grantee(user, grantee_kind), version, "view_document")
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(user),
|
|
||||||
expected_visible=[],
|
|
||||||
expected_hidden=[root.pk, version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_grant_on_one_root_does_not_reach_another_roots_version(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- Two private roots, each with a version
|
|
||||||
- The user may view only the first root
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for the user
|
|
||||||
THEN:
|
|
||||||
- Only the first root and its version are visible
|
|
||||||
"""
|
|
||||||
user = UserFactory()
|
|
||||||
first = DocumentFactory(owner=UserFactory())
|
|
||||||
first_version = DocumentFactory(root_document=first, owner=UserFactory())
|
|
||||||
second = DocumentFactory(owner=UserFactory())
|
|
||||||
second_version = DocumentFactory(root_document=second, owner=user)
|
|
||||||
grant_object(user, first, "view_document")
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(user),
|
|
||||||
expected_visible=[first.pk, first_version.pk],
|
|
||||||
expected_hidden=[second.pk, second_version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_user_in_several_groups(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A user in two groups
|
|
||||||
- Two private roots shared with one group each, and a third shared with nobody
|
|
||||||
- A version of each root
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for the user
|
|
||||||
THEN:
|
|
||||||
- The two shared roots and their versions are visible
|
|
||||||
- The third root and its version are not
|
|
||||||
"""
|
|
||||||
user = UserFactory()
|
|
||||||
groups = [Group.objects.create(name=f"group{i}") for i in range(2)]
|
|
||||||
user.groups.add(*groups)
|
|
||||||
shared = [DocumentFactory(owner=UserFactory()) for _ in groups]
|
|
||||||
for root, group in zip(shared, groups, strict=True):
|
|
||||||
grant_object(group, root, "view_document")
|
|
||||||
unshared = DocumentFactory(owner=UserFactory())
|
|
||||||
shared_versions = [
|
|
||||||
DocumentFactory(root_document=root, owner=UserFactory()) for root in shared
|
|
||||||
]
|
|
||||||
unshared_version = DocumentFactory(root_document=unshared, owner=None)
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(user),
|
|
||||||
expected_visible=[
|
|
||||||
*(root.pk for root in shared),
|
|
||||||
*(version.pk for version in shared_versions),
|
|
||||||
],
|
|
||||||
expected_hidden=[unshared.pk, unshared_version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_permission_is_resolved_through_the_root(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A private root document where the user may view and change
|
|
||||||
WHEN:
|
|
||||||
- The permitted ids are resolved for view, change and delete
|
|
||||||
THEN:
|
|
||||||
- The version is visible for view and change only
|
|
||||||
"""
|
|
||||||
user = UserFactory()
|
|
||||||
root = DocumentFactory(owner=UserFactory())
|
|
||||||
version = DocumentFactory(root_document=root, owner=UserFactory())
|
|
||||||
grant_object(user, root, "view_document", "change_document")
|
|
||||||
|
|
||||||
assert version.pk in set(permitted_document_ids(user))
|
|
||||||
assert version.pk in set(permitted_document_ids(user, perm="change_document"))
|
|
||||||
assert version.pk in set(
|
|
||||||
permitted_document_ids(user, perm="documents.change_document"),
|
|
||||||
)
|
|
||||||
assert version.pk not in set(
|
|
||||||
permitted_document_ids(user, perm="delete_document"),
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_anonymous_sees_versions_of_unowned_roots_only(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A version owned by nobody under a private root
|
|
||||||
- A version owned by someone under an unowned root
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for an anonymous user
|
|
||||||
THEN:
|
|
||||||
- Only the version of the unowned root is visible
|
|
||||||
"""
|
|
||||||
private_root = DocumentFactory(owner=UserFactory())
|
|
||||||
private_version = DocumentFactory(root_document=private_root, owner=None)
|
|
||||||
open_root = DocumentFactory(owner=None)
|
|
||||||
open_version = DocumentFactory(root_document=open_root, owner=UserFactory())
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(AnonymousUser()),
|
|
||||||
expected_visible=[open_root.pk, open_version.pk],
|
|
||||||
expected_hidden=[private_root.pk, private_version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_deleted_versions_follow_their_deleted_root(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A soft-deleted root document and its version, which deleting the
|
|
||||||
root soft-deletes too; the version is owned by someone else
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved with and without deleted
|
|
||||||
documents
|
|
||||||
THEN:
|
|
||||||
- Nothing is visible by default
|
|
||||||
- With deleted documents included, the version is visible to the
|
|
||||||
root's owner and not to the version's own owner
|
|
||||||
"""
|
|
||||||
owner = UserFactory()
|
|
||||||
version_owner = UserFactory()
|
|
||||||
root = DocumentFactory(owner=owner)
|
|
||||||
version = DocumentFactory(root_document=root, owner=version_owner)
|
|
||||||
root.delete()
|
|
||||||
|
|
||||||
assert not {root.pk, version.pk} & set(permitted_document_ids(owner))
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(owner, include_deleted=True),
|
|
||||||
expected_visible=[root.pk, version.pk],
|
|
||||||
expected_hidden=[],
|
|
||||||
)
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(version_owner, include_deleted=True),
|
|
||||||
expected_visible=[],
|
|
||||||
expected_hidden=[root.pk, version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
"is_superuser",
|
|
||||||
[
|
|
||||||
pytest.param(False, id="regular-user"),
|
|
||||||
pytest.param(True, id="superuser"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
def test_inactive_user_sees_no_versions(self, *, is_superuser: bool) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- An inactive user, possibly a superuser, who owns a root and its version
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for them
|
|
||||||
THEN:
|
|
||||||
- Nothing is visible
|
|
||||||
"""
|
|
||||||
user = UserFactory(is_active=False, is_superuser=is_superuser)
|
|
||||||
root = DocumentFactory(owner=user)
|
|
||||||
version = DocumentFactory(root_document=root, owner=user)
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(user),
|
|
||||||
expected_visible=[],
|
|
||||||
expected_hidden=[root.pk, version.pk],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_superuser_sees_all_versions(self) -> None:
|
|
||||||
"""
|
|
||||||
GIVEN:
|
|
||||||
- A private root owned by someone else, with a version
|
|
||||||
WHEN:
|
|
||||||
- The permitted document ids are resolved for a superuser
|
|
||||||
THEN:
|
|
||||||
- Both the root and the version are visible
|
|
||||||
"""
|
|
||||||
superuser = UserFactory(superuser=True)
|
|
||||||
root = DocumentFactory(owner=UserFactory())
|
|
||||||
version = DocumentFactory(root_document=root, owner=UserFactory())
|
|
||||||
|
|
||||||
assert_visible_document_ids(
|
|
||||||
permitted_document_ids(superuser),
|
|
||||||
expected_visible=[root.pk, version.pk],
|
|
||||||
expected_hidden=[],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
class TestAiChatAllDocumentsPermissionBoundary:
|
class TestAiChatAllDocumentsPermissionBoundary:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -90,13 +90,10 @@ 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)
|
||||||
|
|
||||||
def test_create_bundle_rejects_insufficient_permissions(self) -> None:
|
@mock.patch("documents.views.permitted_document_ids", return_value=set())
|
||||||
requester = UserFactory(username="bundle_creator")
|
def test_create_bundle_rejects_insufficient_permissions(self, perms_mock) -> None:
|
||||||
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.pk],
|
"document_ids": [self.document.pk],
|
||||||
"file_version": ShareLink.FileVersion.ARCHIVE,
|
"file_version": ShareLink.FileVersion.ARCHIVE,
|
||||||
"expiration_days": 7,
|
"expiration_days": 7,
|
||||||
}
|
}
|
||||||
@@ -104,8 +101,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(str(document.pk), str(response.data["document_ids"]))
|
self.assertIn("document_ids", response.data)
|
||||||
self.assertFalse(ShareLinkBundle.objects.exists())
|
perms_mock.assert_called()
|
||||||
|
|
||||||
@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:
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ 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
|
||||||
@@ -288,82 +287,6 @@ 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):
|
||||||
"""
|
"""
|
||||||
|
|||||||
+53
-84
@@ -1550,16 +1550,13 @@ 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(
|
Document.objects.select_related("owner").prefetch_related("versions"),
|
||||||
"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",
|
||||||
get_root_document(doc),
|
doc,
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden("Insufficient permissions")
|
return HttpResponseForbidden("Insufficient permissions")
|
||||||
|
|
||||||
@@ -1613,16 +1610,13 @@ 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(
|
Document.objects.select_related("owner").prefetch_related("versions"),
|
||||||
"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",
|
||||||
get_root_document(doc),
|
doc,
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden("Insufficient permissions")
|
return HttpResponseForbidden("Insufficient permissions")
|
||||||
|
|
||||||
@@ -1862,20 +1856,15 @@ class DocumentViewSet(
|
|||||||
currentUser = request.user
|
currentUser = request.user
|
||||||
try:
|
try:
|
||||||
doc = (
|
doc = (
|
||||||
Document.objects.select_related("owner", "root_document__owner")
|
Document.objects.select_related("owner")
|
||||||
.prefetch_related("notes")
|
.prefetch_related("notes")
|
||||||
.only(
|
.only("pk", "owner__id")
|
||||||
"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",
|
||||||
get_root_document(doc),
|
doc,
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden("Insufficient permissions to view notes")
|
return HttpResponseForbidden("Insufficient permissions to view notes")
|
||||||
except Document.DoesNotExist:
|
except Document.DoesNotExist:
|
||||||
@@ -1897,7 +1886,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",
|
||||||
get_root_document(doc),
|
doc,
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden(
|
return HttpResponseForbidden(
|
||||||
"Insufficient permissions to create notes",
|
"Insufficient permissions to create notes",
|
||||||
@@ -1940,7 +1929,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",
|
||||||
get_root_document(doc),
|
doc,
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden("Insufficient permissions to delete notes")
|
return HttpResponseForbidden("Insufficient permissions to delete notes")
|
||||||
|
|
||||||
@@ -1984,13 +1973,11 @@ 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", "root_document__owner").get(
|
doc = Document.objects.select_related("owner").get(pk=pk)
|
||||||
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",
|
||||||
get_root_document(doc),
|
doc,
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden(
|
return HttpResponseForbidden(
|
||||||
"Insufficient permissions to add share link",
|
"Insufficient permissions to add share link",
|
||||||
@@ -2021,11 +2008,10 @@ 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.select_related("root_document__owner").get(pk=pk)
|
doc = Document.objects.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 (
|
||||||
root_doc.owner is not None
|
doc.owner is not None
|
||||||
and root_doc.owner != request.user
|
and doc.owner != request.user
|
||||||
and not request.user.is_superuser
|
and not request.user.is_superuser
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden(
|
return HttpResponseForbidden(
|
||||||
@@ -2116,7 +2102,9 @@ 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(id__in=permitted_document_ids(request.user)).exists()
|
and documents.exclude(
|
||||||
|
pk__in=permitted_document_ids(request.user),
|
||||||
|
).exists()
|
||||||
):
|
):
|
||||||
return HttpResponseForbidden("Insufficient permissions")
|
return HttpResponseForbidden("Insufficient permissions")
|
||||||
|
|
||||||
@@ -2442,17 +2430,11 @@ class ChatStreamingView(GenericAPIView[Any]):
|
|||||||
|
|
||||||
if doc_id:
|
if doc_id:
|
||||||
try:
|
try:
|
||||||
document = Document.objects.select_related(
|
document = Document.objects.get(id=doc_id)
|
||||||
"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(
|
if not has_perms_owner_aware(request.user, "view_document", document):
|
||||||
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)
|
||||||
@@ -3008,8 +2990,12 @@ class DocumentOperationPermissionMixin(PassUserMixin, DocumentSelectionMixin):
|
|||||||
user.has_perm(
|
user.has_perm(
|
||||||
"documents.change_document",
|
"documents.change_document",
|
||||||
)
|
)
|
||||||
and not Document.global_objects.filter(pk__in=documents)
|
and not Document.global_objects.filter(
|
||||||
.exclude(pk__in=permitted_document_ids(user, perm="change_document"))
|
pk__in=[doc.pk for doc in root_docs],
|
||||||
|
)
|
||||||
|
.exclude(
|
||||||
|
pk__in=permitted_document_ids(user, perm="change_document"),
|
||||||
|
)
|
||||||
.exists()
|
.exists()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -3619,11 +3605,10 @@ class SelectionDataView(DocumentSelectionMixin, GenericAPIView[Any]):
|
|||||||
user=request.user,
|
user=request.user,
|
||||||
validated_data=serializer.validated_data,
|
validated_data=serializer.validated_data,
|
||||||
)
|
)
|
||||||
documents = Document.objects.filter(pk__in=ids)
|
permitted_documents = Document.objects.filter(
|
||||||
if (
|
id__in=permitted_document_ids(request.user),
|
||||||
documents.count() != len(ids)
|
)
|
||||||
or documents.exclude(id__in=permitted_document_ids(request.user)).exists()
|
if permitted_documents.filter(pk__in=ids).count() != len(ids):
|
||||||
):
|
|
||||||
return HttpResponseForbidden("Insufficient permissions")
|
return HttpResponseForbidden("Insufficient permissions")
|
||||||
|
|
||||||
correspondents = Correspondent.objects.annotate(
|
correspondents = Correspondent.objects.annotate(
|
||||||
@@ -4119,16 +4104,21 @@ class BulkDownloadView(DocumentSelectionMixin, GenericAPIView[Any]):
|
|||||||
validated_data=serializer.validated_data,
|
validated_data=serializer.validated_data,
|
||||||
)
|
)
|
||||||
documents = Document.objects.filter(pk__in=ids)
|
documents = Document.objects.filter(pk__in=ids)
|
||||||
|
versioned_documents = []
|
||||||
compression = serializer.validated_data.get("compression")
|
compression = serializer.validated_data.get("compression")
|
||||||
content = serializer.validated_data.get("content")
|
content = serializer.validated_data.get("content")
|
||||||
follow_filename_format = serializer.validated_data.get("follow_formatting")
|
follow_filename_format = serializer.validated_data.get("follow_formatting")
|
||||||
|
|
||||||
if documents.exclude(id__in=permitted_document_ids(request.user)).exists():
|
permitted_ids = set(permitted_document_ids(request.user))
|
||||||
return HttpResponseForbidden("Insufficient permissions")
|
for document in documents:
|
||||||
versioned_documents = [
|
root_doc = get_root_document(document)
|
||||||
get_latest_version_for_root(get_root_document(document))
|
if root_doc.pk not in permitted_ids:
|
||||||
for document in documents
|
return HttpResponseForbidden("Insufficient permissions")
|
||||||
]
|
versioned_documents.append(
|
||||||
|
get_latest_version_for_root(
|
||||||
|
root_doc,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
if content == "both":
|
if content == "both":
|
||||||
strategy_class = OriginalAndArchiveStrategy
|
strategy_class = OriginalAndArchiveStrategy
|
||||||
@@ -4800,23 +4790,19 @@ class ShareLinkBundleViewSet(PassUserMixin, ModelViewSet[ShareLinkBundle]):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
denied_id = (
|
|
||||||
documents_qs.exclude(id__in=permitted_document_ids(request.user))
|
|
||||||
.order_by("pk")
|
|
||||||
.values_list("pk", flat=True)
|
|
||||||
.first()
|
|
||||||
)
|
|
||||||
if denied_id is not None:
|
|
||||||
raise ValidationError(
|
|
||||||
{
|
|
||||||
"document_ids": _(
|
|
||||||
"Insufficient permissions to share document %(id)s.",
|
|
||||||
)
|
|
||||||
% {"id": denied_id},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
documents = list(documents_qs)
|
documents = list(documents_qs)
|
||||||
|
permitted_ids = set(permitted_document_ids(request.user))
|
||||||
|
for document in documents:
|
||||||
|
if document.pk not in permitted_ids:
|
||||||
|
raise ValidationError(
|
||||||
|
{
|
||||||
|
"document_ids": _(
|
||||||
|
"Insufficient permissions to share document %(id)s.",
|
||||||
|
)
|
||||||
|
% {"id": document.pk},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
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]
|
||||||
|
|
||||||
@@ -5601,23 +5587,6 @@ 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
|
||||||
|
|
||||||
@@ -5648,7 +5617,7 @@ class TrashView(ListModelMixin, PassUserMixin):
|
|||||||
else self.filter_queryset(self.get_queryset()).all()
|
else self.filter_queryset(self.get_queryset()).all()
|
||||||
)
|
)
|
||||||
if docs.exclude(
|
if docs.exclude(
|
||||||
id__in=permitted_document_ids(
|
pk__in=permitted_document_ids(
|
||||||
request.user,
|
request.user,
|
||||||
perm="delete_document",
|
perm="delete_document",
|
||||||
include_deleted=True,
|
include_deleted=True,
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ongeldige kleur."
|
msgstr "Ongeldige kleur."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ongeldige veranderlike bespeur."
|
msgstr "Ongeldige veranderlike bespeur."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "لون خاطئ."
|
msgstr "لون خاطئ."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "اكتشاف متغير خاطئ."
|
msgstr "اكتشاف متغير خاطئ."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Няправільны колер."
|
msgstr "Няправільны колер."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Выяўлена няправільная зменная."
|
msgstr "Выяўлена няправільная зменная."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Невалиден цвят."
|
msgstr "Невалиден цвят."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Засечена е невалидна променлива."
|
msgstr "Засечена е невалидна променлива."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Color Invàlid."
|
msgstr "Color Invàlid."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variable detectada invàlida."
|
msgstr "Variable detectada invàlida."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "No es pot analitzar l'URI {value}, falta l'esquema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "L'esquema d'URI '{parts.scheme}' no està permès. Esquemes permesos: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuració AI invàlida."
|
msgstr "Configuració AI invàlida."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Neplatná barva."
|
msgstr "Neplatná barva."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
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:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,60 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Nelze analyzovat URI {value}, chybí schéma"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI schéma '{parts.scheme}' není povoleno. Povolená schémata: {',\n"
|
||||||
|
"'.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ugyldig farve."
|
msgstr "Ugyldig farve."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ugyldig variabel fundet."
|
msgstr "Ugyldig variabel fundet."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: German, Switzerland\n"
|
"Language-Team: German, Switzerland\n"
|
||||||
"Language: de_CH\n"
|
"Language: de_CH\n"
|
||||||
@@ -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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ungültige Farbe."
|
msgstr "Ungültige Farbe."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ungültige Variable erkannt."
|
msgstr "Ungültige Variable erkannt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "URI {value} kann nicht gelesen werden, fehlendes Schema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI-Schema „{parts.scheme}“ ist nicht erlaubt. Erlaubte Schemata: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ungültige KI-Konfiguration."
|
msgstr "Ungültige KI-Konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-06 00:56\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ungültige Farbe."
|
msgstr "Ungültige Farbe."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ungültige Variable erkannt."
|
msgstr "Ungültige Variable erkannt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "URI {value} kann nicht gelesen werden, fehlendes Schema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI-Schema „{parts.scheme}“ ist nicht erlaubt. Erlaubte Schemata: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ungültige KI-Konfiguration."
|
msgstr "Ungültige KI-Konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Άκυρο χρώμα."
|
msgstr "Άκυρο χρώμα."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή."
|
msgstr "Εντοπίστηκε μη έγκυρη μεταβλητή."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1941,44 +1941,61 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid ""
|
||||||
|
"URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '."
|
||||||
|
"join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Color inválido."
|
msgstr "Color inválido."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variable inválida."
|
msgstr "Variable inválida."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "No se puede analizar la URI {value}, falta el esquema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "El esquema URI '{parts.scheme}' no está permitido. Esquemas permitidos: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
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:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "رنگ نامعتبر"
|
msgstr "رنگ نامعتبر"
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "متغیر نامعتبر شناسایی شده است."
|
msgstr "متغیر نامعتبر شناسایی شده است."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Virheellinen väri."
|
msgstr "Virheellinen väri."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Virheellinen muuttuja havaittu."
|
msgstr "Virheellinen muuttuja havaittu."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Couleur incorrecte."
|
msgstr "Couleur incorrecte."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variable invalide détectée."
|
msgstr "Variable invalide détectée."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Impossible d'analyser l'URI {value}, schéma manquant"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Le schéma d'URI « {parts.scheme} » n'est pas autorisé. Schémas autorisés : {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configuration IA invalide."
|
msgstr "Configuration IA invalide."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "הרשאות אינן מספיקות."
|
msgstr "הרשאות אינן מספיקות."
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "צבע לא חוקי."
|
msgstr "צבע לא חוקי."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "משתנה לא חוקי זוהה."
|
msgstr "משתנה לא חוקי זוהה."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "מזהי מסמכים כפולים אינם מורשים."
|
msgstr "מזהי מסמכים כפולים אינם מורשים."
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "מסמכים לא נמצאו: %(ids)s"
|
msgstr "מסמכים לא נמצאו: %(ids)s"
|
||||||
@@ -1914,44 +1914,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "לא ניתן לפענח את ה-URI {value}, חסר פרוטוקול (scheme)"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "פרוטוקול ה-URI '{parts.scheme}' אינו מורשה. הפרוטוקולים המורשים הם: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "הגדרות בינה מלאכותית שגויות."
|
msgstr "הגדרות בינה מלאכותית שגויות."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "החבילה (Bundle) כבר נמצאת בתהליך עיבוד."
|
msgstr "החבילה (Bundle) כבר נמצאת בתהליך עיבוד."
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "חבילת קישור השיתוף אינה זמינה."
|
msgstr "חבילת קישור השיתוף אינה זמינה."
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Nevažeća boja."
|
msgstr "Nevažeća boja."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Otkrivena je nevaljana vrsta datoteke."
|
msgstr "Otkrivena je nevaljana vrsta datoteke."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Nije moguće analizirati URI {value}, nedostaje shema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI shema '{parts.scheme}' nije dopuštena. Dopuštene sheme: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Nevažeća AI konfiguracija."
|
msgstr "Nevažeća AI konfiguracija."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Érvénytelen szín."
|
msgstr "Érvénytelen szín."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Érvénytelen változó észlelve."
|
msgstr "Érvénytelen változó észlelve."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "A {value} URI értelmezése sikertelen, hiányzó séma"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "A '{parts.scheme}' séma nem engedélyezett. Engedélyezett sémák: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Érvénytelen MI konfiguráció."
|
msgstr "Érvénytelen MI konfiguráció."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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ő."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Warna tidak sesuai."
|
msgstr "Warna tidak sesuai."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variabel ilegal terdeteksi."
|
msgstr "Variabel ilegal terdeteksi."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Gagal membaca URI {value}, skema tidak ditemukan"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Skema URI '{parts.scheme}' tidak diizinkan. Skema yang diizinkan: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paket sedang diproses."
|
msgstr "Paket sedang diproses."
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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 versione"
|
msgstr "indice della 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 versione"
|
msgstr "etichetta della 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 abbreviata facoltativa per una versione del documento."
|
msgstr "Etichetta breve 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 "pagina"
|
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 "Pagina del file originale, partendo da 1"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1052
|
#: documents/models.py:1052
|
||||||
msgid "format"
|
msgid "format"
|
||||||
msgstr "formato"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1056
|
#: documents/models.py:1056
|
||||||
msgid "document barcode"
|
msgid "document barcode"
|
||||||
msgstr "codice a barre del documento"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1057
|
#: documents/models.py:1057
|
||||||
msgid "document barcodes"
|
msgid "document barcodes"
|
||||||
msgstr "codici a barre del documento"
|
msgstr ""
|
||||||
|
|
||||||
#: 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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Colore non valido."
|
msgstr "Colore non valido."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variabile non valida rilevata."
|
msgstr "Variabile non valida rilevata."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ", "
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Impossibile analizzare l'URI {value}, schema mancante"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Lo schema URI '{parts.scheme}' non è consentito. Schemi consentiti: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Configurazione AI non valida."
|
msgstr "Configurazione AI non valida."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
@@ -2168,7 +2183,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 "Memorizza i valori dei codici a barre individuati"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:318
|
#: paperless/models.py:318
|
||||||
msgid "Sets the remote OCR engine"
|
msgid "Sets the remote OCR engine"
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "無効な色"
|
msgstr "無効な色"
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "無効な変数を検出しました"
|
msgstr "無効な変数を検出しました"
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "잘못된 변수가 감지되었습니다."
|
msgstr "잘못된 변수가 감지되었습니다."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "{value} URI를 파싱할 수 없습니다: 스킴이 누락되었습니다."
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI 스킴 '{parts.scheme}'는 허용되지 않습니다. 허용된 스킴: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ongëlteg Faarf."
|
msgstr "Ongëlteg Faarf."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ongëlteg Zeechen detektéiert."
|
msgstr "Ongëlteg Zeechen detektéiert."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Nepavyko apdoroti URI {value}, trūksta schemos"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI schema '{parts.scheme}' nėra leistina. Galimos schemos: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Rinkinys jau apdorojamas."
|
msgstr "Rinkinys jau apdorojamas."
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File type %(type)s not supported"
|
msgid "File type %(type)s not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ongeldig kleur."
|
msgstr "Ongeldig kleur."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ongeldige variabele ontdekt."
|
msgstr "Ongeldige variabele ontdekt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ugyldig farge."
|
msgstr "Ugyldig farge."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ugyldig variabel oppdaget."
|
msgstr "Ugyldig variabel oppdaget."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Unable to parse URI {value}, missing scheme (NO)"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)} (NO)"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Invalid AI configuration. (NO)"
|
msgstr "Invalid AI configuration. (NO)"
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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)"
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Nieprawidłowy kolor."
|
msgstr "Nieprawidłowy kolor."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Wykryto nieprawidłową zmienną."
|
msgstr "Wykryto nieprawidłową zmienną."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Nie można przeanalizować URI {value}, brak schematu"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Schemat URI '{parts.scheme}' jest niedozwolony. Dozwolone schematy: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Cor inválida."
|
msgstr "Cor inválida."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variável inválida detectada."
|
msgstr "Variável inválida detectada."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1914,60 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
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/views.py:336 documents/views.py:2747
|
#: documents/validators.py:36
|
||||||
|
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:1682
|
#: documents/views.py:1676
|
||||||
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:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Cor invalida."
|
msgstr "Cor invalida."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variável inválida detetada."
|
msgstr "Variável inválida detetada."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, 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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Culoare invalidă."
|
msgstr "Culoare invalidă."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Variabilă nevalidă detectată."
|
msgstr "Variabilă nevalidă detectată."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Imposibil de analizat URI {value}, schemă lipsă"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Schema URI '{parts.scheme}' nu este permisă. Schemele permise: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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 "Страница исходного файла, начиная с 1"
|
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"
|
||||||
@@ -1635,48 +1635,48 @@ msgstr "запуск рабочего процесса"
|
|||||||
msgid "workflow runs"
|
msgid "workflow runs"
|
||||||
msgstr "запуски рабочего процесса"
|
msgstr "запуски рабочего процесса"
|
||||||
|
|
||||||
#: documents/serialisers.py:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "Недостаточно прав."
|
msgstr "Недостаточно прав."
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Неверный цвет."
|
msgstr "Неверный цвет."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Обнаружена неверная переменная."
|
msgstr "Обнаружена неверная переменная."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "Повторяющиеся идентификаторы документа не допускаются."
|
msgstr "Повторяющиеся идентификаторы документа не допускаются."
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "Документы не найдены: %(ids)s"
|
msgstr "Документы не найдены: %(ids)s"
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ", "
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Не удается распознать URI {value}, отсутствует схема"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Недопустимая схема URI '{parts.scheme}'. Разрешенные схемы: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Неверная конфигурация ИИ."
|
msgstr "Неверная конфигурация ИИ."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "Таймаут запроса ИИ."
|
msgstr "Таймаут запроса ИИ."
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Пакет уже обрабатывается."
|
msgstr "Пакет уже обрабатывается."
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "Пакет общих ссылок недоступен."
|
msgstr "Пакет общих ссылок недоступен."
|
||||||
|
|
||||||
@@ -2168,7 +2183,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"
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-06 02:00\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Neplatná farba."
|
msgstr "Neplatná farba."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Zistená neplatná premenná."
|
msgstr "Zistená neplatná premenná."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Nepodarilo sa analyzovať URI {value}, chýba schéma"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Schéma URI „{parts.scheme}“ nie je povolená. Povolené schémy: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Neplatná konfigurácia umelej inteligencie."
|
msgstr "Neplatná konfigurácia umelej inteligencie."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Napačna barva."
|
msgstr "Napačna barva."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Zaznani neveljavni znaki."
|
msgstr "Zaznani neveljavni znaki."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Ni mogoče razčleniti URI-ja {value}, manjka shema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Shema URI '{parts.scheme}' ni dovoljena. Dovoljene sheme: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Neveljavna konfiguracija umetne inteligence."
|
msgstr "Neveljavna konfiguracija umetne inteligence."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ngjyrë e pavlefshme."
|
msgstr "Ngjyrë e pavlefshme."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
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:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Konfigurim AI i pavlefshëm."
|
msgstr "Konfigurim AI i pavlefshëm."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Nevažeća boja."
|
msgstr "Nevažeća boja."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
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:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Nije moguće analizirati URI {value}, nedostaje šema"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Šema URI-ja '{parts.scheme}' nije dozvoljena. Dozvoljene šeme {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
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:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Ogiltig färg."
|
msgstr "Ogiltig färg."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Ogiltig variabel upptäckt."
|
msgstr "Ogiltig variabel upptäckt."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Kunde inte tolka URI {value}, schema saknas"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI-schemat '{parts.scheme}' är inte tillåtet. Tillåtna scheman: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "Ogiltig AI-konfiguration."
|
msgstr "Ogiltig AI-konfiguration."
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "Paketet behandlas redan."
|
msgstr "Paketet behandlas redan."
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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."
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "สีไม่ถูกต้อง"
|
msgstr "สีไม่ถูกต้อง"
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "ตรวจพบตัวแปรไม่ถูกต้อง"
|
msgstr "ตรวจพบตัวแปรไม่ถูกต้อง"
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1912,44 +1912,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Geçersiz renk."
|
msgstr "Geçersiz renk."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
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:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "URI {value} ayrıştırılamıyor, şema eksik"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI şeması ‘{parts.scheme}’ izin verilmez. İzin verilen şemalar: {‘, ’.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
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:1693
|
#: documents/views.py:1687
|
||||||
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:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "Неправильний колір."
|
msgstr "Неправильний колір."
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "Виявлено неправильну змінну."
|
msgstr "Виявлено неправильну змінну."
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: documents/validators.py:29
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unable to parse URI {value}, missing net location or path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:36
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: paperless-ngx\n"
|
"Project-Id-Version: paperless-ngx\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2026-10-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: 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:709
|
#: documents/serialisers.py:708
|
||||||
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:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
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:2959
|
#: documents/serialisers.py:2958
|
||||||
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:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, 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,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "Không thể phân tích URI {value}, thiếu giao thức"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "Giao thức URI '{parts.scheme}' không được phép. Các giao thức được phép: {', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
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:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
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"
|
||||||
|
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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 "远程 OCR"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/models.py:1799
|
#: documents/models.py:1799
|
||||||
msgid "Apply AI suggestions"
|
msgid "Apply AI suggestions"
|
||||||
msgstr "应用 AI 建议"
|
msgstr ""
|
||||||
|
|
||||||
#: 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 "AI 建议字段"
|
msgstr ""
|
||||||
|
|
||||||
#: 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 "适用于文档的 AI-建议字段中的哪一个。"
|
msgstr ""
|
||||||
|
|
||||||
#: 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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "权限不足。"
|
msgstr "权限不足。"
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "无效的颜色"
|
msgstr "无效的颜色"
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "检测到无效变量。"
|
msgstr "检测到无效变量。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "不允许重复文档标识符。"
|
msgstr "不允许重复文档标识符。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "未找到文档:%(ids)s"
|
msgstr "未找到文档:%(ids)s"
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ","
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "无法解析 URI {value},缺少scheme"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI 格式 '{parts.scheme}' 不支持。支持的格式有:{', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "无效的 AI 配置。"
|
msgstr "无效的 AI 配置。"
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "AI 后端请求超时。"
|
msgstr "AI 后端请求超时。"
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
msgid "AI backend rejected the request. Check logs for details."
|
msgid "AI backend rejected the request. Check logs for details."
|
||||||
msgstr "AI 后端拒绝了请求。请检查日志的详细信息。"
|
msgstr ""
|
||||||
|
|
||||||
#: documents/views.py:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "捆绑包已在处理中。"
|
msgstr "捆绑包已在处理中。"
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "分享链接包不可用。"
|
msgstr "分享链接包不可用。"
|
||||||
|
|
||||||
@@ -2036,15 +2051,15 @@ msgstr "CMYK"
|
|||||||
|
|
||||||
#: paperless/models.py:82
|
#: paperless/models.py:82
|
||||||
msgid "Azure AI Document Intelligence"
|
msgid "Azure AI Document Intelligence"
|
||||||
msgstr "Azure AI 文档智能"
|
msgstr ""
|
||||||
|
|
||||||
#: 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"
|
||||||
@@ -2168,23 +2183,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 "设置远程 OCR 引擎"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:327
|
#: paperless/models.py:327
|
||||||
msgid "Sets the remote OCR API key"
|
msgid "Sets the remote OCR API key"
|
||||||
msgstr "设置远程 OCR API 密钥"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:335
|
#: paperless/models.py:335
|
||||||
msgid "Sets the remote OCR endpoint"
|
msgid "Sets the remote OCR endpoint"
|
||||||
msgstr "设置远程 OCR 端点"
|
msgstr ""
|
||||||
|
|
||||||
#: 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 "设置发送到远程 OCR 引擎的文档"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:355
|
#: paperless/models.py:355
|
||||||
msgid "Enables AI features"
|
msgid "Enables AI features"
|
||||||
@@ -2200,7 +2215,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 "设置 LLM 嵌入模型的 API 密钥"
|
msgstr ""
|
||||||
|
|
||||||
#: paperless/models.py:382
|
#: paperless/models.py:382
|
||||||
msgid "Sets the LLM embedding endpoint, optional"
|
msgid "Sets the LLM embedding endpoint, optional"
|
||||||
|
|||||||
@@ -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-10 22:04+0000\n"
|
"POT-Creation-Date: 2026-10-05 16:26+0000\n"
|
||||||
"PO-Revision-Date: 2026-10-10 22:05\n"
|
"PO-Revision-Date: 2026-10-05 16:27\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:516 documents/serialisers.py:873
|
#: documents/serialisers.py:515 documents/serialisers.py:872
|
||||||
#: documents/serialisers.py:2903 documents/views.py:343 documents/views.py:2750
|
#: documents/serialisers.py:2902 documents/views.py:343 documents/views.py:2732
|
||||||
#: paperless_mail/serialisers.py:156
|
#: paperless_mail/serialisers.py:156
|
||||||
msgid "Insufficient permissions."
|
msgid "Insufficient permissions."
|
||||||
msgstr "權限不足。"
|
msgstr "權限不足。"
|
||||||
|
|
||||||
#: documents/serialisers.py:709
|
#: documents/serialisers.py:708
|
||||||
msgid "Invalid color."
|
msgid "Invalid color."
|
||||||
msgstr "無效的顏色。"
|
msgstr "無效的顏色。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2370
|
#: documents/serialisers.py:2369
|
||||||
#, 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:2414
|
#: documents/serialisers.py:2413
|
||||||
#, 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:2421
|
#: documents/serialisers.py:2420
|
||||||
#, 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:2438 documents/serialisers.py:2448
|
#: documents/serialisers.py:2437 documents/serialisers.py:2447
|
||||||
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:2443
|
#: documents/serialisers.py:2442
|
||||||
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:2590
|
#: documents/serialisers.py:2589
|
||||||
msgid "Invalid variable detected."
|
msgid "Invalid variable detected."
|
||||||
msgstr "偵測到無效的變數。"
|
msgstr "偵測到無效的變數。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2959
|
#: documents/serialisers.py:2958
|
||||||
msgid "Duplicate document identifiers are not allowed."
|
msgid "Duplicate document identifiers are not allowed."
|
||||||
msgstr "文件識別碼不得重複。"
|
msgstr "文件識別碼不得重複。"
|
||||||
|
|
||||||
#: documents/serialisers.py:2989 documents/views.py:4797
|
#: documents/serialisers.py:2988 documents/views.py:4787
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Documents not found: %(ids)s"
|
msgid "Documents not found: %(ids)s"
|
||||||
msgstr "找不到文件:%(ids)s"
|
msgstr "找不到文件:%(ids)s"
|
||||||
@@ -1913,44 +1913,59 @@ 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:36
|
#: documents/validators.py:24
|
||||||
msgid ", "
|
#, python-brace-format
|
||||||
msgstr ""
|
msgid "Unable to parse URI {value}, missing scheme"
|
||||||
|
msgstr "無法解析 URI {value},缺少協定"
|
||||||
|
|
||||||
#: documents/views.py:336 documents/views.py:2747
|
#: 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
|
||||||
|
msgid "URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '.join(allowed_schemes)}"
|
||||||
|
msgstr "URI 協定「{parts.scheme}」不被允許。允許的協定有:{', '.join(allowed_schemes)}"
|
||||||
|
|
||||||
|
#: documents/validators.py:45
|
||||||
|
#, 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:1682
|
#: documents/views.py:1676
|
||||||
msgid "Invalid AI configuration."
|
msgid "Invalid AI configuration."
|
||||||
msgstr "無效的 AI 配置。"
|
msgstr "無效的 AI 配置。"
|
||||||
|
|
||||||
#: documents/views.py:1693
|
#: documents/views.py:1687
|
||||||
msgid "AI backend request timed out."
|
msgid "AI backend request timed out."
|
||||||
msgstr "AI 後端請求逾時。"
|
msgstr "AI 後端請求逾時。"
|
||||||
|
|
||||||
#: documents/views.py:1705
|
#: documents/views.py:1699
|
||||||
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:2572 documents/views.py:2888
|
#: documents/views.py:2554 documents/views.py:2870
|
||||||
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:4813
|
#: documents/views.py:4800
|
||||||
#, 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:4860
|
#: documents/views.py:4846
|
||||||
msgid "Bundle is already being processed."
|
msgid "Bundle is already being processed."
|
||||||
msgstr "組合已在處理中。"
|
msgstr "組合已在處理中。"
|
||||||
|
|
||||||
#: documents/views.py:4924
|
#: documents/views.py:4910
|
||||||
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:4938
|
#: documents/views.py:4924
|
||||||
msgid "The share link bundle is unavailable."
|
msgid "The share link bundle is unavailable."
|
||||||
msgstr "共用連結組合無法使用。"
|
msgstr "共用連結組合無法使用。"
|
||||||
|
|
||||||
@@ -2168,7 +2183,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"
|
||||||
|
|||||||
+11
-10
@@ -272,26 +272,27 @@ def check_deprecated_db_settings(
|
|||||||
Detects legacy advanced options that should be migrated to
|
Detects legacy advanced options that should be migrated to
|
||||||
PAPERLESS_DB_OPTIONS. Returns one Warning per deprecated variable found.
|
PAPERLESS_DB_OPTIONS. Returns one Warning per deprecated variable found.
|
||||||
"""
|
"""
|
||||||
deprecated_vars = (
|
deprecated_vars: dict[str, str] = {
|
||||||
"PAPERLESS_DB_TIMEOUT",
|
"PAPERLESS_DB_TIMEOUT": "timeout",
|
||||||
"PAPERLESS_DB_POOLSIZE",
|
"PAPERLESS_DB_POOLSIZE": "pool.min_size / pool.max_size",
|
||||||
"PAPERLESS_DBSSLMODE",
|
"PAPERLESS_DBSSLMODE": "sslmode",
|
||||||
"PAPERLESS_DBSSLROOTCERT",
|
"PAPERLESS_DBSSLROOTCERT": "sslrootcert",
|
||||||
"PAPERLESS_DBSSLCERT",
|
"PAPERLESS_DBSSLCERT": "sslcert",
|
||||||
"PAPERLESS_DBSSLKEY",
|
"PAPERLESS_DBSSLKEY": "sslkey",
|
||||||
)
|
}
|
||||||
|
|
||||||
warnings: list[Warning] = []
|
warnings: list[Warning] = []
|
||||||
|
|
||||||
for var_name in deprecated_vars:
|
for var_name, db_option_key in deprecated_vars.items():
|
||||||
if not os.getenv(var_name):
|
if not os.getenv(var_name):
|
||||||
continue
|
continue
|
||||||
warnings.append(
|
warnings.append(
|
||||||
Warning(
|
Warning(
|
||||||
f"Deprecated environment variable: {var_name}",
|
f"Deprecated environment variable: {var_name}",
|
||||||
hint=(
|
hint=(
|
||||||
f"{var_name} is deprecated. "
|
f"{var_name} is no longer supported and will be removed in v3.2. "
|
||||||
f"Set the equivalent option via PAPERLESS_DB_OPTIONS instead. "
|
f"Set the equivalent option via PAPERLESS_DB_OPTIONS instead. "
|
||||||
|
f'Example: PAPERLESS_DB_OPTIONS=\'{{"{db_option_key}": "<value>"}}\'. '
|
||||||
"See https://docs.paperless-ngx.com/migration-v3/ for the full reference."
|
"See https://docs.paperless-ngx.com/migration-v3/ for the full reference."
|
||||||
),
|
),
|
||||||
id="paperless.W001",
|
id="paperless.W001",
|
||||||
|
|||||||
@@ -137,20 +137,9 @@ class TestNginxService:
|
|||||||
reason="No Gotenberg/Tika servers to test with",
|
reason="No Gotenberg/Tika servers to test with",
|
||||||
)
|
)
|
||||||
class TestParserLive:
|
class TestParserLive:
|
||||||
# Rasterizer versions shift a few pixels, so compare perceptual hashes by
|
@staticmethod
|
||||||
# Hamming distance (out of 18 * 18 = 324 bits) rather than for equality
|
def imagehash(file: Path, hash_size: int = 18) -> str:
|
||||||
MAX_HASH_DISTANCE = 8
|
return f"{average_hash(Image.open(file), hash_size)}"
|
||||||
|
|
||||||
@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,
|
||||||
@@ -179,7 +168,12 @@ class TestParserLive:
|
|||||||
assert thumb.exists()
|
assert thumb.exists()
|
||||||
assert thumb.is_file()
|
assert thumb.is_file()
|
||||||
|
|
||||||
self.assert_thumbnails_similar(thumb, simple_txt_email_thumbnail_file)
|
assert self.imagehash(thumb) == self.imagehash(
|
||||||
|
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:
|
||||||
"""
|
"""
|
||||||
@@ -261,7 +255,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 be perceptually close to the expected image
|
- The generated thumbnail shall match the expected image hash
|
||||||
"""
|
"""
|
||||||
util_call_with_backoff(mail_parser.parse, [html_email_file, "message/rfc822"])
|
util_call_with_backoff(mail_parser.parse, [html_email_file, "message/rfc822"])
|
||||||
|
|
||||||
@@ -278,4 +272,14 @@ class TestParserLive:
|
|||||||
html_email_file,
|
html_email_file,
|
||||||
"message/rfc822",
|
"message/rfc822",
|
||||||
)
|
)
|
||||||
self.assert_thumbnails_similar(generated_thumbnail, html_email_thumbnail_file)
|
generated_thumbnail_hash = self.imagehash(generated_thumbnail)
|
||||||
|
|
||||||
|
# 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}"
|
||||||
|
)
|
||||||
@@ -211,14 +211,14 @@ class TestAuditLogChecks:
|
|||||||
assert "auditlog table was found but audit log is disabled." in msgs[0].msg
|
assert "auditlog table was found but audit log is disabled." in msgs[0].msg
|
||||||
|
|
||||||
|
|
||||||
DEPRECATED_VARS = (
|
DEPRECATED_VARS: dict[str, str] = {
|
||||||
"PAPERLESS_DB_TIMEOUT",
|
"PAPERLESS_DB_TIMEOUT": "timeout",
|
||||||
"PAPERLESS_DB_POOLSIZE",
|
"PAPERLESS_DB_POOLSIZE": "pool.min_size / pool.max_size",
|
||||||
"PAPERLESS_DBSSLMODE",
|
"PAPERLESS_DBSSLMODE": "sslmode",
|
||||||
"PAPERLESS_DBSSLROOTCERT",
|
"PAPERLESS_DBSSLROOTCERT": "sslrootcert",
|
||||||
"PAPERLESS_DBSSLCERT",
|
"PAPERLESS_DBSSLCERT": "sslcert",
|
||||||
"PAPERLESS_DBSSLKEY",
|
"PAPERLESS_DBSSLKEY": "sslkey",
|
||||||
)
|
}
|
||||||
|
|
||||||
|
|
||||||
class TestDeprecatedDbSettings:
|
class TestDeprecatedDbSettings:
|
||||||
@@ -234,11 +234,26 @@ class TestDeprecatedDbSettings:
|
|||||||
result = check_deprecated_db_settings(None)
|
result = check_deprecated_db_settings(None)
|
||||||
assert result == []
|
assert result == []
|
||||||
|
|
||||||
@pytest.mark.parametrize("env_var", DEPRECATED_VARS)
|
@pytest.mark.parametrize(
|
||||||
|
("env_var", "db_option_key"),
|
||||||
|
[
|
||||||
|
pytest.param("PAPERLESS_DB_TIMEOUT", "timeout", id="db-timeout"),
|
||||||
|
pytest.param(
|
||||||
|
"PAPERLESS_DB_POOLSIZE",
|
||||||
|
"pool.min_size / pool.max_size",
|
||||||
|
id="db-poolsize",
|
||||||
|
),
|
||||||
|
pytest.param("PAPERLESS_DBSSLMODE", "sslmode", id="ssl-mode"),
|
||||||
|
pytest.param("PAPERLESS_DBSSLROOTCERT", "sslrootcert", id="ssl-rootcert"),
|
||||||
|
pytest.param("PAPERLESS_DBSSLCERT", "sslcert", id="ssl-cert"),
|
||||||
|
pytest.param("PAPERLESS_DBSSLKEY", "sslkey", id="ssl-key"),
|
||||||
|
],
|
||||||
|
)
|
||||||
def test_single_deprecated_var_produces_one_warning(
|
def test_single_deprecated_var_produces_one_warning(
|
||||||
self,
|
self,
|
||||||
mocker: MockerFixture,
|
mocker: MockerFixture,
|
||||||
env_var: str,
|
env_var: str,
|
||||||
|
db_option_key: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Each deprecated var in isolation produces exactly one warning."""
|
"""Each deprecated var in isolation produces exactly one warning."""
|
||||||
mocker.patch.dict(os.environ, {env_var: "some_value"}, clear=True)
|
mocker.patch.dict(os.environ, {env_var: "some_value"}, clear=True)
|
||||||
@@ -249,8 +264,7 @@ class TestDeprecatedDbSettings:
|
|||||||
assert isinstance(warning, Warning)
|
assert isinstance(warning, Warning)
|
||||||
assert warning.id == "paperless.W001"
|
assert warning.id == "paperless.W001"
|
||||||
assert env_var in warning.hint
|
assert env_var in warning.hint
|
||||||
assert "PAPERLESS_DB_OPTIONS" in warning.hint
|
assert db_option_key in warning.hint
|
||||||
assert "https://docs.paperless-ngx.com/migration-v3/" in warning.hint
|
|
||||||
|
|
||||||
def test_multiple_deprecated_vars_produce_one_warning_each(
|
def test_multiple_deprecated_vars_produce_one_warning_each(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Final
|
from typing import Final
|
||||||
|
|
||||||
__version__: Final[tuple[int, int, int]] = (3, 2, 1)
|
__version__: Final[tuple[int, int, int]] = (3, 3, 0)
|
||||||
# Version string like X.Y.Z
|
# Version string like X.Y.Z
|
||||||
__full_version_str__: Final[str] = ".".join(map(str, __version__))
|
__full_version_str__: Final[str] = ".".join(map(str, __version__))
|
||||||
# Version string like X.Y
|
# Version string like X.Y
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ from django.conf import settings
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from documents.models import Document
|
from documents.models import Document
|
||||||
from documents.permissions import permitted_document_ids
|
from documents.permissions import permitted_object_ids
|
||||||
|
from documents.permissions import restrict_queryset_to_visible
|
||||||
from documents.permissions import user_is_unrestricted
|
from documents.permissions import user_is_unrestricted
|
||||||
from paperless.config import AIConfig
|
from paperless.config import AIConfig
|
||||||
from paperless_ai.base_model import ClassificationSuggestions
|
from paperless_ai.base_model import ClassificationSuggestions
|
||||||
@@ -53,8 +54,8 @@ def _fulltext_similar_documents(
|
|||||||
active superuser - see user_is_unrestricted) is normalized to ``None``
|
active superuser - see user_is_unrestricted) is normalized to ``None``
|
||||||
before calling, since the backend's permission filter has no superuser
|
before calling, since the backend's permission filter has no superuser
|
||||||
short-circuit of its own. Results are re-checked with
|
short-circuit of its own. Results are re-checked with
|
||||||
permitted_document_ids() since Tantivy's indexed permission fields lag the
|
restrict_queryset_to_visible() since Tantivy's indexed permission fields
|
||||||
DB via async reindexing and judge a version by its own owner.
|
lag the DB via async reindexing.
|
||||||
"""
|
"""
|
||||||
from documents.search import get_backend
|
from documents.search import get_backend
|
||||||
|
|
||||||
@@ -68,9 +69,10 @@ def _fulltext_similar_documents(
|
|||||||
)
|
)
|
||||||
if not unrestricted:
|
if not unrestricted:
|
||||||
allowed_ids = set(
|
allowed_ids = set(
|
||||||
Document.objects.filter(
|
restrict_queryset_to_visible(
|
||||||
pk__in=similar_ids,
|
Document.objects.filter(pk__in=similar_ids),
|
||||||
id__in=permitted_document_ids(user),
|
user,
|
||||||
|
"view_document",
|
||||||
).values_list("pk", flat=True),
|
).values_list("pk", flat=True),
|
||||||
)
|
)
|
||||||
similar_ids = [doc_id for doc_id in similar_ids if doc_id in allowed_ids]
|
similar_ids = [doc_id for doc_id in similar_ids if doc_id in allowed_ids]
|
||||||
@@ -198,13 +200,13 @@ def get_taxonomy_context(
|
|||||||
# quadratic scan in the vector store at best, and past ~32,763
|
# quadratic scan in the vector store at best, and past ~32,763
|
||||||
# documents a hard sqlite3.OperationalError (SQLite's
|
# documents a hard sqlite3.OperationalError (SQLite's
|
||||||
# bound-parameter limit) at worst.
|
# bound-parameter limit) at worst.
|
||||||
# permitted_document_ids() has its own superuser shortcut that would
|
# permitted_object_ids() has its own superuser shortcut that would
|
||||||
# return every Document's id anyway, so this changes nothing about
|
# return every Document's id anyway, so this changes nothing about
|
||||||
# which documents are considered -- only how we get there.
|
# which documents are considered -- only how we get there.
|
||||||
visible_document_ids = (
|
visible_document_ids = (
|
||||||
None
|
None
|
||||||
if user_is_unrestricted(user)
|
if user_is_unrestricted(user)
|
||||||
else list(permitted_document_ids(user))
|
else list(permitted_object_ids(user, Document, "view_document"))
|
||||||
)
|
)
|
||||||
nodes = retrieve_similar_nodes(
|
nodes = retrieve_similar_nodes(
|
||||||
document,
|
document,
|
||||||
|
|||||||
Loaded 100 of 102 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user