Compare commits

..
Author SHA1 Message Date
stumpylog 5d8bbe1592 Chore: remove zip-compression-control plan/spec, moved to its own branch
That work now lives on feature-export-zip-compression, branched off
this one. No need to carry the planning docs here.
2026-07-23 13:09:59 -07:00
stumpylog 3963581af0 Chore: remove completed export-sink-architecture plan/spec
The design is now implemented (src/documents/export/sinks.py); the
planning docs served their purpose. The deferred zip-compression-control
follow-up plan/spec remains, since that work hasn't landed yet.
2026-07-23 13:01:42 -07:00
stumpylog 581fbab8f3 Polish: atomic zip commit via Path.replace, widen sink params to ExportSink
Path.rename() raises FileExistsError on Windows when the destination
already exists; Path.replace() is atomic cross-platform. Also widen
document_exporter's sink parameters from the concrete
DirectoryExportSink | ZipExportSink union to the ExportSink ABC, so a
future sink implementation is a pure addition rather than requiring
every call site's annotation to change.
2026-07-23 12:59:27 -07:00
stumpylog 7044d8ae5f Refactor: de-duplicate BLAKE2b compare and simplify zip dir-marker loop
DirectoryExportSink.add_json and _commit_streamed_file each inlined the
same hash-and-compare logic; extracted _content_unchanged(). Replaced
ZipExportSink._ensure_dirs's repeated slice/join with a prefix
accumulator and hoisted the _zip-is-open assertion out of the loop. No
behavioral change.
2026-07-23 12:27:15 -07:00
stumpylog 5e21ba891d Fix: annotate ExportSink.stream's return type for pyrefly
The abstract method had no return annotation, so pyrefly inferred -> None
and flagged both DirectoryExportSink.stream and ZipExportSink.stream as
incompatible overrides.
2026-07-23 12:20:29 -07:00
stumpylog c2c30541bb Test: guard --zip combined with --compare-* flags 2026-07-23 12:04:01 -07:00
stumpylogandClaude Sonnet 5 1ea9775ab4 Refactor: route document_exporter through ExportSink, direct-to-zip
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 11:53:45 -07:00
stumpylog 02b97fbaaf Fix: de-duplicate source_file fixture across sink test classes
TestDirectoryExportSink and TestZipExportSink each defined an
identical source_file fixture; hoist it to module scope.
2026-07-22 15:38:55 -07:00
stumpylog 0e538acdef Feature: add ZipExportSink with atomic finalize and manifest spooling 2026-07-22 15:36:50 -07:00
stumpylog 7f58d16758 Fix: make ExportSink a real ABC per design spec
The implementation plan for Task 2 diverged from the design spec
(export-sink-architecture-design.md), leaving ExportSink as a plain
class with NotImplementedError bodies instead of the specified
AbstractContextManager subclass. Use abc.ABC + @abstractmethod so a
concrete sink missing a required method fails at instantiation
rather than at first call.
2026-07-22 15:07:24 -07:00
stumpylog 344414bb47 Feature: add ExportSink ABC and DirectoryExportSink 2026-07-22 14:57:48 -07:00
stumpylog 8263f75643 Feature: add export package with StreamingManifestWriter and _dumps 2026-07-22 14:34:55 -07:00
stumpylog 72d031a7e2 Docs: remove specs/plans unrelated to direct-to-zip export
This branch is scoped to the export sink architecture + zip
compression control work; drop the search, bulk-edit,
ingestion-staging, vector-store, and other unrelated design docs
and scratch profiling scripts that had accumulated on it.
2026-07-22 14:26:08 -07:00
stumpylogandClaude Opus 4.8 1a253d0f26 Docs: ingestion staging & enqueue unification implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 dc4cb829a6 Docs: revise ingestion staging spec per critical review
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 cad2d2d151 Docs: ingestion staging & enqueue unification design spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 8db09d7c92 Docs: bulk-edit operation registry spec + implementation plan
Adds the extensibility design that hoists the bulk-edit operation
definition (today smeared across serialisers.py, views.py, bulk_edit.py
and keyed three different ways) behind a BulkEditOperation registry +
PermissionRequirements value object, with per-operation OpenAPI examples.
Contract-preserving refactor; both docs reviewed across multiple passes
(permission matrix verified, both view call sites accounted for).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 b02a151e45 Docs: export zip compression implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 0083443e77 Docs: verify zstd/3.14 facts in compression spec (empirical, uv --python 3.14)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 2cd9b94c43 Docs: export sink architecture implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 b76bd9a7bb Docs: revise export specs per critical review
- Preserve --zip --delete (real tested feature), only --compare-* hard-error
- Mandate .as_posix() arcnames; --data-only, SCRATCH_DIR, atomicity-honesty notes
- Progress tracking stays in command; sinks decoupled from PaperlessCommand
- Compression spec: gate/verify zstd, fix import failure mode, patchable probe seam

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 87a9fcadc8 Docs: export sink architecture + zip compression design specs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylogandClaude Opus 4.8 1c4f6b6144 Docs(beta): flesh out search error-shapes spec and implementation plan
Replace the search-error-shapes stub with a full design spec and a TDD
implementation plan for friendlier advanced-search error messages.
Empirically validated against a live Tantivy index: three error families
(UnknownFieldError, InvalidFieldValueError, MalformedQueryError),
proactive numeric validation plus a parse_query backstop, comparison
operators confirmed working, and a parse-based field drift guard.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 14:17:28 -07:00
stumpylog 2d985961b0 Fture search error ideas 2026-07-22 14:17:28 -07:00
Trenton Holmes 08a2186de1 Tracks the tanvity update blocker 2026-07-22 14:17:28 -07:00
Trenton Holmes a89fdfb033 Tracks the tanvity update blocker 2026-07-22 14:17:28 -07:00
Trenton Holmes c0fc6c0475 More done work 2026-07-22 14:17:27 -07:00
Trenton Holmes 28f291c503 Store more profiling files 2026-07-22 14:17:27 -07:00
stumpylog 8263460b7b Removes these for starting implementation 2026-07-22 14:17:27 -07:00
stumpylog f4e997e524 Marks some things as done 2026-07-22 14:17:27 -07:00
stumpylog 1944208de4 Storing more stuff for stuff 2026-07-22 14:17:27 -07:00
Trenton Holmes db14bd6b61 Storing more ideas/plans 2026-07-22 14:17:27 -07:00
stumpylog f41181f992 Additional ideas and plans 2026-07-22 14:17:27 -07:00
stumpylog b4729ec5d2 Minor plan updates 2026-07-22 14:17:26 -07:00
stumpylog 3cd772d8e9 Just for later ideas, store some brainstorming sessions with Claude 2026-07-22 14:17:26 -07:00
161 changed files with 5757 additions and 6665 deletions
+1 -1
View File
@@ -86,7 +86,7 @@ jobs:
# ---- Prepare Release ----
- name: Generate requirements file
run: |
uv export --quiet --no-dev --all-extras --emit-index-url --format requirements-txt --output-file requirements.txt
uv export --quiet --no-dev --all-extras --format requirements-txt --output-file requirements.txt
- name: Compile messages
env:
PAPERLESS_SECRET_KEY: "ci-release-not-a-real-secret"
+1 -1
View File
@@ -56,7 +56,7 @@ services:
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_DBENGINE: postgresql
PAPERLESS_DBENGINE: postgres
env_file:
- stack.env
volumes:
-17
View File
@@ -151,23 +151,6 @@ the background.
### Bare Metal Route {#bare-metal-updating}
!!! warning
Extracting a new release archive on top of an existing installation
(e.g. `tar -xf paperless-ngx-vX.Y.Z.tar.xz -C /opt/paperless`) only adds
and overwrites files -- it does not remove files that were deleted in
the new release. Leftover files from an old version, such as
superseded database migrations, can remain on disk and cause errors
like `NodeNotFoundError` during `manage.py migrate`.
Before unpacking a new release over an existing bare-metal
installation, remove the previous source tree first (everything
except your `media`, `data`, and `consume` directories and your
`paperless.conf`/`.env`), or unpack into a fresh directory and move
your persistent data and configuration over. Installations updated via
`git pull` on a clean checkout are not affected, since Git removes
files that no longer exist upstream.
After grabbing the new release and unpacking the contents, do the
following:
-59
View File
@@ -1,64 +1,5 @@
# Changelog
## paperless-ngx 3.0.2
### Bug Fixes
- Fix: fix broken migration in 3.0.1 [@shamoon](https://github.com/shamoon) ([#13242](https://github.com/paperless-ngx/paperless-ngx/pull/13242))
### All App Changes
- Fix: fix broken migration in 3.0.1 [@shamoon](https://github.com/shamoon) ([#13242](https://github.com/paperless-ngx/paperless-ngx/pull/13242))
## paperless-ngx 3.0.1
### Bug Fixes
- Fix: selection\_data re-derives the filtered document set 5 times over [@stumpylog](https://github.com/stumpylog) ([#13229](https://github.com/paperless-ngx/paperless-ngx/pull/13229))
- Fix: exclude source document from its own RAG similarity results [@stumpylog](https://github.com/stumpylog) ([#13233](https://github.com/paperless-ngx/paperless-ngx/pull/13233))
- Fix: split mailrule maximum\_age clamp into its own migration [@stumpylog](https://github.com/stumpylog) ([#13231](https://github.com/paperless-ngx/paperless-ngx/pull/13231))
- Chore: mark yes in confirm button for translation [@shamoon](https://github.com/shamoon) ([#13225](https://github.com/paperless-ngx/paperless-ngx/pull/13225))
- Fix: correct URL for W001 check [@shamoon](https://github.com/shamoon) ([#13220](https://github.com/paperless-ngx/paperless-ngx/pull/13220))
- Fix: ensure create dialog uses correct attribute type [@shamoon](https://github.com/shamoon) ([#13221](https://github.com/paperless-ngx/paperless-ngx/pull/13221))
- Fix: correct database engine from postgres to postgresql [@OberstVonGatow](https://github.com/OberstVonGatow) ([#13213](https://github.com/paperless-ngx/paperless-ngx/pull/13213))
- Fix: remove unnecessary .distinct() dominating document list queries [@stumpylog](https://github.com/stumpylog) ([#13205](https://github.com/paperless-ngx/paperless-ngx/pull/13205))
- Fix: also wrap non-breaking words in chat messages, handle whitespace [@shamoon](https://github.com/shamoon) ([#13211](https://github.com/paperless-ngx/paperless-ngx/pull/13211))
- Fix: tag/custom-field document\_count scales badly with tag count [@stumpylog](https://github.com/stumpylog) ([#13203](https://github.com/paperless-ngx/paperless-ngx/pull/13203))
- Fix: batch document user\_can\_change checks to avoid per-row N+1 [@stumpylog](https://github.com/stumpylog) ([#13204](https://github.com/paperless-ngx/paperless-ngx/pull/13204))
- Fix: fix app title restoration [@shamoon](https://github.com/shamoon) ([#13208](https://github.com/paperless-ngx/paperless-ngx/pull/13208))
- Fix: handle long wrapping titles in AI chat document list [@shamoon](https://github.com/shamoon) ([#13206](https://github.com/paperless-ngx/paperless-ngx/pull/13206))
### Dependencies
- Chore(deps-dev): Bump postcss from 8.5.6 to 8.5.22 in /src/paperless\_mail/templates in the npm\_and\_yarn group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13236](https://github.com/paperless-ngx/paperless-ngx/pull/13236))
- Chore(deps): Bump pyasn1 from 0.6.3 to 0.6.4 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13237](https://github.com/paperless-ngx/paperless-ngx/pull/13237))
- Chore(deps): Bump the uv group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13189](https://github.com/paperless-ngx/paperless-ngx/pull/13189))
### All App Changes
<details>
<summary>17 changes</summary>
- Chore(deps-dev): Bump postcss from 8.5.6 to 8.5.22 in /src/paperless\_mail/templates in the npm\_and\_yarn group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13236](https://github.com/paperless-ngx/paperless-ngx/pull/13236))
- Fix: selection\_data re-derives the filtered document set 5 times over [@stumpylog](https://github.com/stumpylog) ([#13229](https://github.com/paperless-ngx/paperless-ngx/pull/13229))
- Chore: reword "Settings > Default permissions" description for clarity [@NotaInutilis](https://github.com/NotaInutilis) ([#13232](https://github.com/paperless-ngx/paperless-ngx/pull/13232))
- Chore(deps): Bump pyasn1 from 0.6.3 to 0.6.4 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13237](https://github.com/paperless-ngx/paperless-ngx/pull/13237))
- Chore(deps): Bump the uv group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13189](https://github.com/paperless-ngx/paperless-ngx/pull/13189))
- Fix: exclude source document from its own RAG similarity results [@stumpylog](https://github.com/stumpylog) ([#13233](https://github.com/paperless-ngx/paperless-ngx/pull/13233))
- Fix: split mailrule maximum\_age clamp into its own migration [@stumpylog](https://github.com/stumpylog) ([#13231](https://github.com/paperless-ngx/paperless-ngx/pull/13231))
- Chore: mark yes in confirm button for translation [@shamoon](https://github.com/shamoon) ([#13225](https://github.com/paperless-ngx/paperless-ngx/pull/13225))
- Fix: correct URL for W001 check [@shamoon](https://github.com/shamoon) ([#13220](https://github.com/paperless-ngx/paperless-ngx/pull/13220))
- Fix: ensure create dialog uses correct attribute type [@shamoon](https://github.com/shamoon) ([#13221](https://github.com/paperless-ngx/paperless-ngx/pull/13221))
- Fix: correct database engine from postgres to postgresql [@OberstVonGatow](https://github.com/OberstVonGatow) ([#13213](https://github.com/paperless-ngx/paperless-ngx/pull/13213))
- Fix: remove unnecessary .distinct() dominating document list queries [@stumpylog](https://github.com/stumpylog) ([#13205](https://github.com/paperless-ngx/paperless-ngx/pull/13205))
- Fix: also wrap non-breaking words in chat messages, handle whitespace [@shamoon](https://github.com/shamoon) ([#13211](https://github.com/paperless-ngx/paperless-ngx/pull/13211))
- Fix: tag/custom-field document\_count scales badly with tag count [@stumpylog](https://github.com/stumpylog) ([#13203](https://github.com/paperless-ngx/paperless-ngx/pull/13203))
- Fix: batch document user\_can\_change checks to avoid per-row N+1 [@stumpylog](https://github.com/stumpylog) ([#13204](https://github.com/paperless-ngx/paperless-ngx/pull/13204))
- Fix: fix app title restoration [@shamoon](https://github.com/shamoon) ([#13208](https://github.com/paperless-ngx/paperless-ngx/pull/13208))
- Fix: handle long wrapping titles in AI chat document list [@shamoon](https://github.com/shamoon) ([#13206](https://github.com/paperless-ngx/paperless-ngx/pull/13206))
</details>
## paperless-ngx 3.0.0
### Breaking Changes
+7 -21
View File
@@ -522,36 +522,22 @@ do CORS calls. Set this to your public domain name.
fail2ban with log entries for failed authorization attempts. Value should be
IP address(es).
By default, this setting also controls allauth's trusted proxy count,
which is set to the number of proxies listed here. Override that default
with [`PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT`](#PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT)
when the list length does not match the number of proxy hops.
This setting also controls allauth's
[`ALLAUTH_TRUSTED_PROXY_COUNT`](https://docs.allauth.org/en/latest/account/configuration.html),
which is set to the number of proxies listed here. Without this,
allauth cannot determine the client IP address for rate limiting when
running behind a reverse proxy, resulting in a `403 Forbidden` on login.
Defaults to empty string.
#### [`PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT=<integer>`](#PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT) {#PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT}
: Sets allauth's
[`ALLAUTH_TRUSTED_PROXY_COUNT`](https://docs.allauth.org/en/latest/common/rate_limits.html#configuration).
This is the number of trusted proxy **hops** represented in each
`X-Forwarded-For` header, not the number of IP addresses through which those
proxies may be reached. For example, a single dual-stack proxy is one hop even
when its IPv4 and IPv6 addresses are both listed in
[`PAPERLESS_TRUSTED_PROXIES`](#PAPERLESS_TRUSTED_PROXIES).
Only trust `X-Forwarded-For` when untrusted clients cannot connect directly
to Paperless-ngx.
Defaults to the number of entries in `PAPERLESS_TRUSTED_PROXIES`.
#### [`PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER=<header-name>`](#PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER) {#PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER}
: Sets allauth's
[`ALLAUTH_TRUSTED_CLIENT_IP_HEADER`](https://docs.allauth.org/en/latest/common/rate_limits.html#configuration).
[`ALLAUTH_TRUSTED_CLIENT_IP_HEADER`](https://docs.allauth.org/en/latest/account/configuration.html).
Use this when your reverse proxy sets a dedicated header for the real
client IP instead of `X-Forwarded-For`, for example `X-Real-IP` (nginx)
or `CF-Connecting-IP` (Cloudflare). When set, this takes precedence over
`PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT`.
[`PAPERLESS_TRUSTED_PROXIES`](#PAPERLESS_TRUSTED_PROXIES).
Defaults to none.
+4 -65
View File
@@ -133,7 +133,7 @@ PAPERLESS_DB_OPTIONS="sslmode=require,sslrootcert=/certs/ca.pem,pool.max_size=10
## OCR and Archive File Generation Settings
The settings that control OCR behaviour and archive file generation have been redesigned. The old settings that coupled these two concerns together are **removed** - old values are not silently honoured; a startup warning is logged if any removed variable is still set in your environment.
The settings that control OCR behaviour and archive file generation have been redesigned. The old settings that coupled these two concerns together are **removed** old values are not silently honoured; a startup warning is logged if any removed variable is still set in your environment.
### Removed settings
@@ -166,7 +166,7 @@ Remove any `PAPERLESS_OCR_SKIP_ARCHIVE_FILE` variable from your environment. If
# v2: skip OCR when text present, always archive
PAPERLESS_OCR_MODE=skip
# v3: equivalent (auto is the new default)
# No change needed - auto is the default
# No change needed auto is the default
# v2: skip OCR when text present, skip archive too
PAPERLESS_OCR_MODE=skip_noarchive
@@ -189,7 +189,7 @@ PAPERLESS_ARCHIVE_FILE_GENERATION=auto
If you use the **remote OCR parser** (Azure AI), note that it always produces a
searchable PDF and stores it as the archive copy. `ARCHIVE_FILE_GENERATION=never`
has no effect for documents handled by the remote parser - the archive is produced
has no effect for documents handled by the remote parser the archive is produced
unconditionally by the remote engine.
## Search Index (Whoosh -> Tantivy)
@@ -324,69 +324,8 @@ option since v1.8.0.
Allauth changed how it determines the client IP address for login rate limiting. Users running
behind a reverse proxy may need to set
[`PAPERLESS_TRUSTED_PROXIES`](configuration.md#PAPERLESS_TRUSTED_PROXIES),
[`PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT`](configuration.md#PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT),
[`PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER`](configuration.md#PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER),
or a combination of these settings to avoid `403 Forbidden` errors on login.
The proxy count is the number of proxy hops in `X-Forwarded-For`, which may
differ from the number of configured proxy IP addresses.
## Minimum CPU Requirements (NumPy Baseline)
Starting with NumPy 2.4.0, official `manylinux` x86_64 wheels are compiled with a minimum
CPU baseline of `x86-64-v2`, which requires SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, and
CMPXCHG16B. This is a [deliberate upstream change](https://github.com/numpy/numpy/issues/27851)
citing that these instructions have been present in over 99.7% of CPUs since 2008
([Intel](<https://en.wikipedia.org/wiki/Nehalem_(microarchitecture)>)) or 2011
([AMD](<https://en.wikipedia.org/wiki/Bulldozer_(microarchitecture)>)).
NumPy is a dependency of the document classifier (via scikit-learn), so any CPU that
predates SSE4.2 support will crash with `SIGILL` (illegal instruction) when the classifier
is loaded or trained, regardless of whether AI features are enabled.
This differs from NumPy's optional SIMD dispatch (e.g. AVX2, AVX512), which is detected and
selected safely at runtime - the `x86-64-v2` requirement above is a hard floor baked into the
wheel, with no runtime fallback.
### Affected hardware
CPUs older than roughly 2008 (Intel) or 2011 (AMD) that lack SSE4.2 support. This is more
likely to affect low-power or embedded hardware - e.g. early Atom, Celeron, or pre-Bulldozer
AMD chips - than typical desktop or server hardware from the last decade.
Check for SSE4.2 support with:
```bash
grep -o -m1 sse4_2 /proc/cpuinfo
```
If this prints nothing, your CPU is affected.
### Symptoms
The Celery worker (and potentially the web server) repeatedly crashes and restarts with a
`SIGILL` error, typically visible in `dmesg`/`journalctl` as a `trap invalid opcode` inside
`_multiarray_umath...so`. Because the classifier is trained on a periodic schedule
(hourly, by default), affected instances see intermittent, hard-to-reproduce document
consumption failures whenever that scheduled task runs and takes down the worker process
mid-task.
### Action Required (for affected hardware only)
There is no way to make the classifier itself work on such CPUs - it requires an unofficial
NumPy build with `cpu-baseline=none`, which is not something we can ship. The practical
path forward is to stop the classifier from ever loading or training, which avoids
importing NumPy at all:
```bash
PAPERLESS_TRAIN_TASK_CRON=disable
```
This disables the periodic classifier training task (see
[`PAPERLESS_TRAIN_TASK_CRON`](configuration.md#PAPERLESS_TRAIN_TASK_CRON)). Automatic
matching based on the classifier (suggested correspondents, document types, tags, and
storage paths from trained rules) will no longer be available, but rule-based matching is
unaffected, and document consumption itself will no longer be at risk of crashing the
worker.
or both, to avoid `403 Forbidden` errors on login.
## Database Migrations
-8
View File
@@ -262,14 +262,6 @@ to a positive number to enable polling and disable native filesystem notificatio
and copy the contents to the home directory of the user you created
earlier (`/opt/paperless`).
!!! note
If you are updating an existing bare-metal installation rather than
installing for the first time, see the
[bare metal update instructions](administration.md#bare-metal-updating)
instead -- extracting a new release on top of an old one can leave
behind stale files from the previous version.
Optional: If you cloned the Git repository, you will need to
compile the frontend yourself. See [here](development.md#front-end-development)
and use the `build` step, not `serve`.
+9 -10
View File
@@ -833,10 +833,10 @@ contract you signed 8 years ago).
When you search paperless for a document, it tries to match this query
against your documents. Paperless will look for matching documents by
inspecting their content, title, correspondent, type, and tags. Paperless
returns a scored list of results, so that documents matching your query
better will appear further up in the search results. Notes and custom field
values can be searched using the advanced search syntax described below.
inspecting their content, title, correspondent, type, tags, notes, and
custom field values. Paperless returns a scored list of results, so that
documents matching your query better will appear further up in the search
results.
By default, paperless returns only documents which contain all words
typed in the search bar. A few things to know about how matching works:
@@ -891,9 +891,9 @@ Supported date keywords: `today`, `yesterday`, `previous week`,
#### Searching custom fields
Custom field names and values are included in the full-text index, but they
are not searched by a plain, unqualified query. Use the advanced search syntax
to search by field name or value:
Custom field values are included in the full-text index, so a plain search
already matches documents whose custom field values contain your search terms.
To narrow by field name or value specifically:
```
custom_fields.value:policy
@@ -921,9 +921,8 @@ custom_fields.name:"Contract Number" custom_fields.value:1312
#### Searching notes
Notes are included in the full-text index, but they are not searched by a
plain, unqualified query. Use the advanced search syntax to search by note
author or content:
Notes content is included in full-text search automatically. To search
by note author or content specifically:
```
notes.user:alice
+2 -2
View File
@@ -1,6 +1,6 @@
[project]
name = "paperless-ngx"
version = "3.0.2"
version = "3.0.0"
description = "A community-supported supercharged document management system: scan, index and archive all your physical documents"
readme = "README.md"
requires-python = ">=3.11"
@@ -75,7 +75,7 @@ dependencies = [
"sqlite-vec==0.1.9",
"tantivy~=0.26.0",
"tika-client~=0.11.0",
"torch~=2.13.0",
"torch~=2.12.0",
"watchfiles>=1.1.1",
"whitenoise~=6.11",
"zxing-cpp~=3.0.0",
@@ -1,4 +1,4 @@
import { expect, test, type WebSocketRoute } from '@playwright/test'
import { expect, test } from '@playwright/test'
import path from 'node:path'
const REQUESTS_HAR = path.join(__dirname, 'requests/api-document-detail.har')
@@ -95,60 +95,3 @@ test('should support quick filters', async ({ page }) => {
.click()
await expect(page).toHaveURL(/tags__id__all=4&sort=created&reverse=1&page=1/)
})
test('should finish reloading the preview after a remote document update', async ({
page,
}) => {
let resolveStatusSocket: (socket: WebSocketRoute) => void
const statusSocketReady = new Promise<WebSocketRoute>((resolve) => {
resolveStatusSocket = resolve
})
await page.routeWebSocket(/\/ws\/status\/$/, (socket) => {
resolveStatusSocket(socket)
})
await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' })
let previewRequestCount = 0
page.on('request', (request) => {
if (request.url().includes('/api/documents/175/preview/')) {
previewRequestCount++
}
})
await page.goto('/documents/175/details')
await page.locator('pngx-document-detail').waitFor()
await expect(page.getByTitle('Storage path', { exact: true })).toHaveText(
/\w+/
)
const previewWasLoaded = await page.evaluate(() => {
const detail = document.querySelector('pngx-document-detail')
const component = (window as any).ng.getComponent(detail)
component.pdfPreviewLoaded({ numPages: 1 })
return component.previewLoaded()
})
expect(previewWasLoaded).toBe(true)
const previewRequestsBeforeReload = previewRequestCount
const statusSocket = await statusSocketReady
const documentReloaded = page.waitForResponse(
(response) =>
response.url().includes('/api/documents/175/?full_perms=true') &&
response.request().method() === 'GET'
)
statusSocket.send(
JSON.stringify({
type: 'document_updated',
data: {
document_id: 175,
modified: '2026-07-26T20:00:00Z',
},
})
)
await documentReloaded
await expect(
page.getByText('Document reloaded with latest changes.').first()
).toBeVisible()
await expect
.poll(() => previewRequestCount)
.toBeGreaterThan(previewRequestsBeforeReload + 1)
})
+65 -69
View File
@@ -1277,7 +1277,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1791</context>
<context context-type="linenumber">1787</context>
</context-group>
</trans-unit>
<trans-unit id="1577733187050997705" datatype="html">
@@ -1393,8 +1393,8 @@
<context context-type="linenumber">302</context>
</context-group>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
@@ -2184,7 +2184,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">657</context>
<context context-type="linenumber">653</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
@@ -3087,11 +3087,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1409</context>
<context context-type="linenumber">1405</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1792</context>
<context context-type="linenumber">1788</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
@@ -3647,21 +3647,6 @@
<context context-type="linenumber">85</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -3688,7 +3673,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1362</context>
<context context-type="linenumber">1358</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
@@ -3800,7 +3785,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1845</context>
<context context-type="linenumber">1841</context>
</context-group>
</trans-unit>
<trans-unit id="6661109599266152398" datatype="html">
@@ -3811,7 +3796,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1846</context>
<context context-type="linenumber">1842</context>
</context-group>
</trans-unit>
<trans-unit id="5162686434580248853" datatype="html">
@@ -3822,7 +3807,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1847</context>
<context context-type="linenumber">1843</context>
</context-group>
</trans-unit>
<trans-unit id="8157388568390631653" datatype="html">
@@ -5724,7 +5709,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1366</context>
<context context-type="linenumber">1362</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
@@ -7459,6 +7444,17 @@
<context context-type="linenumber">92</context>
</context-group>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -7966,88 +7962,88 @@
<source>Enter Password</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">513</context>
<context context-type="linenumber">512</context>
</context-group>
</trans-unit>
<trans-unit id="5758784066858623886" datatype="html">
<source>Error retrieving metadata</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">424</context>
<context context-type="linenumber">423</context>
</context-group>
</trans-unit>
<trans-unit id="2218903673684131427" datatype="html">
<source>An error occurred loading content: <x id="PH" equiv-text="err.message ?? err.toString()"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">526,528</context>
<context context-type="linenumber">525,527</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">986,988</context>
<context context-type="linenumber">982,984</context>
</context-group>
</trans-unit>
<trans-unit id="6357361810318120957" datatype="html">
<source>Document was updated</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">652</context>
<context context-type="linenumber">648</context>
</context-group>
</trans-unit>
<trans-unit id="5154064822428631306" datatype="html">
<source>Document was updated at <x id="PH" equiv-text="formattedModified"/>.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">653</context>
<context context-type="linenumber">649</context>
</context-group>
</trans-unit>
<trans-unit id="8462497568316256794" datatype="html">
<source>Reload to discard your local unsaved edits and load the latest remote version.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">654</context>
<context context-type="linenumber">650</context>
</context-group>
</trans-unit>
<trans-unit id="7967484035994732534" datatype="html">
<source>Reload</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">656</context>
<context context-type="linenumber">652</context>
</context-group>
</trans-unit>
<trans-unit id="2907037627372942104" datatype="html">
<source>Document reloaded with latest changes.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">712</context>
<context context-type="linenumber">708</context>
</context-group>
</trans-unit>
<trans-unit id="6435639868943916539" datatype="html">
<source>Document reloaded.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">723</context>
<context context-type="linenumber">719</context>
</context-group>
</trans-unit>
<trans-unit id="6142395741265832184" datatype="html">
<source>Next document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">825</context>
<context context-type="linenumber">821</context>
</context-group>
</trans-unit>
<trans-unit id="651985345816518480" datatype="html">
<source>Previous document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">835</context>
<context context-type="linenumber">831</context>
</context-group>
</trans-unit>
<trans-unit id="2885986061416655600" datatype="html">
<source>Close document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">843</context>
<context context-type="linenumber">839</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
@@ -8058,67 +8054,67 @@
<source>Save document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">850</context>
<context context-type="linenumber">846</context>
</context-group>
</trans-unit>
<trans-unit id="1784543155727940353" datatype="html">
<source>Save and close / next</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">859</context>
<context context-type="linenumber">855</context>
</context-group>
</trans-unit>
<trans-unit id="7427704425579737895" datatype="html">
<source>Error retrieving version content</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">969</context>
<context context-type="linenumber">965</context>
</context-group>
</trans-unit>
<trans-unit id="3456881259945295697" datatype="html">
<source>Error retrieving suggestions.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1030</context>
<context context-type="linenumber">1026</context>
</context-group>
</trans-unit>
<trans-unit id="2194092841814123758" datatype="html">
<source>Document &quot;<x id="PH" equiv-text="newValues.title"/>&quot; saved successfully.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1242</context>
<context context-type="linenumber">1238</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1269</context>
<context context-type="linenumber">1265</context>
</context-group>
</trans-unit>
<trans-unit id="6626387786259219838" datatype="html">
<source>Error saving document &quot;<x id="PH" equiv-text="this.document().title"/>&quot;</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1275</context>
<context context-type="linenumber">1271</context>
</context-group>
</trans-unit>
<trans-unit id="448882439049417053" datatype="html">
<source>Error saving document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1330</context>
<context context-type="linenumber">1326</context>
</context-group>
</trans-unit>
<trans-unit id="8410796510716511826" datatype="html">
<source>Do you really want to move the document &quot;<x id="PH" equiv-text="this.document().title"/>&quot; to the trash?</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1363</context>
<context context-type="linenumber">1359</context>
</context-group>
</trans-unit>
<trans-unit id="282586936710748252" datatype="html">
<source>Documents can be restored prior to permanent deletion.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1364</context>
<context context-type="linenumber">1360</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
@@ -8129,14 +8125,14 @@
<source>Error deleting document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1385</context>
<context context-type="linenumber">1381</context>
</context-group>
</trans-unit>
<trans-unit id="619486176823357521" datatype="html">
<source>Reprocess confirm</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1405</context>
<context context-type="linenumber">1401</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
@@ -8147,102 +8143,102 @@
<source>This operation will permanently recreate the archive file for this document.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1406</context>
<context context-type="linenumber">1402</context>
</context-group>
</trans-unit>
<trans-unit id="302054111564709516" datatype="html">
<source>The archive file will be re-generated with the current settings.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1407</context>
<context context-type="linenumber">1403</context>
</context-group>
</trans-unit>
<trans-unit id="4700389117298802932" datatype="html">
<source>Reprocess operation for &quot;<x id="PH" equiv-text="this.document().title"/>&quot; will begin in the background.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1417</context>
<context context-type="linenumber">1413</context>
</context-group>
</trans-unit>
<trans-unit id="4409560272830824468" datatype="html">
<source>Error executing operation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1428</context>
<context context-type="linenumber">1424</context>
</context-group>
</trans-unit>
<trans-unit id="6030453331794586802" datatype="html">
<source>Error downloading document</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1491</context>
<context context-type="linenumber">1487</context>
</context-group>
</trans-unit>
<trans-unit id="4458954481601077369" datatype="html">
<source>Page Fit</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1569</context>
<context context-type="linenumber">1565</context>
</context-group>
</trans-unit>
<trans-unit id="4663705961777238777" datatype="html">
<source>PDF edit operation for &quot;<x id="PH" equiv-text="this.document().title"/>&quot; will begin in the background.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1812</context>
<context context-type="linenumber">1808</context>
</context-group>
</trans-unit>
<trans-unit id="9043972994040261999" datatype="html">
<source>Error executing PDF edit operation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1824</context>
<context context-type="linenumber">1820</context>
</context-group>
</trans-unit>
<trans-unit id="6172690334763056188" datatype="html">
<source>Please enter the current password before attempting to remove it.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1835</context>
<context context-type="linenumber">1831</context>
</context-group>
</trans-unit>
<trans-unit id="968660764814228922" datatype="html">
<source>Password removal operation for &quot;<x id="PH" equiv-text="this.document().title"/>&quot; will begin in the background.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1869</context>
<context context-type="linenumber">1865</context>
</context-group>
</trans-unit>
<trans-unit id="2282118435712883014" datatype="html">
<source>Error executing password removal operation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1883</context>
<context context-type="linenumber">1879</context>
</context-group>
</trans-unit>
<trans-unit id="3740891324955700797" datatype="html">
<source>Print failed.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1929</context>
<context context-type="linenumber">1925</context>
</context-group>
</trans-unit>
<trans-unit id="6457245677384603573" datatype="html">
<source>Error loading document for printing.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1942</context>
<context context-type="linenumber">1938</context>
</context-group>
</trans-unit>
<trans-unit id="6085793215710522488" datatype="html">
<source>An error occurred loading tiff: <x id="PH" equiv-text="err.toString()"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">2012</context>
<context context-type="linenumber">2008</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">2018</context>
<context context-type="linenumber">2014</context>
</context-group>
</trans-unit>
<trans-unit id="4958946940233632319" datatype="html">
@@ -11519,21 +11515,21 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
</trans-unit>
<trans-unit id="5558341108007064934" datatype="html">
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
</trans-unit>
<trans-unit id="1168781785897678748" datatype="html">
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
</trans-unit>
<trans-unit id="3852289441366561594" datatype="html">
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "paperless-ngx-ui",
"version": "3.0.2",
"version": "3.0.0",
"scripts": {
"preinstall": "npx only-allow pnpm",
"ng": "ng",
@@ -304,7 +304,7 @@
<div class="row mb-3">
<div class="col">
<p i18n>
Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents.
Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI.
</p>
</div>
</div>
@@ -280,52 +280,10 @@ main {
}
}
@media screen and (max-width: 575.98px) {
.navbar {
display: grid;
grid-template-columns: 1fr auto 1fr;
grid-template-areas:
"toggler brand actions"
"search search search";
}
@media screen and (min-width: 376px) and (max-width: 768px) {
.navbar-toggler {
grid-area: toggler;
text-align: left;
}
.navbar-brand {
grid-area: brand;
min-width: 0;
max-width: 100%;
justify-self: center;
overflow: hidden;
> div,
.custom-title {
min-width: 0;
max-width: 100%;
overflow: hidden;
}
.title,
.byline {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.search-container {
grid-area: search;
width: 100%;
}
.navbar > ul {
grid-area: actions;
justify-self: end;
flex-wrap: nowrap;
// compensate for 2 buttons on the right
margin-right: 45px;
}
}
@@ -335,6 +293,13 @@ main {
}
}
@media screen and (max-width: 345px) {
.custom-title {
max-width: 110px;
overflow: hidden;
}
}
:host ::ng-deep .dropdown.show .dropdown-toggle,
:host ::ng-deep .dropdown-toggle:hover {
opacity: 0.7;
@@ -9,14 +9,14 @@
@for (message of messages(); track message) {
<div class="message d-flex flex-row small" [class.justify-content-end]="message.role === 'user'">
<div class="p-2 m-2" [class.bg-body]="message.role === 'user'">
<span class="text-break">
<span>
{{ message.content }}
@if (message.isStreaming) { <span class="blinking-cursor">|</span> }
</span>
@if (message.role === 'assistant' && message.references?.length) {
<div class="chat-references list-group mt-3">
@for (reference of message.references; track reference.id) {
<a class="list-group-item list-group-item-action d-flex text-primary text-break" [routerLink]="['/documents', reference.id]">
<a class="list-group-item list-group-item-action text-primary" [routerLink]="['/documents', reference.id]">
<i-bs width="0.9em" height="0.9em" name="file-text" class="me-1"></i-bs><span>{{ reference.title }}</span>
</a>
}
@@ -5,7 +5,6 @@
.chat-messages {
max-height: 350px;
overflow-y: auto;
white-space: pre-wrap;
}
.chat-references {
@@ -17,6 +17,6 @@
<ng-template #popoverContent>
<div>
{{confirmMessage}}&nbsp;<button class="btn btn-link btn-sm text-danger p-0 m-0 lh-1" type="button" (click)="onConfirm($event)" i18n>Yes</button>
{{confirmMessage}}&nbsp;<button class="btn btn-link btn-sm text-danger p-0 m-0 lh-1" type="button" (click)="onConfirm($event)">Yes</button>
</div>
</ng-template>
@@ -283,22 +283,6 @@ describe('PngxPdfViewerComponent', () => {
expect(mockViewer.currentPageNumber).toBe(1)
})
it('reloads when the source revision changes', () => {
const resetSpy = jest.spyOn(component as any, 'resetViewerState')
const loadSpy = jest
.spyOn(component as any, 'loadDocument')
.mockImplementation(() => {})
component.src = 'test.pdf'
component.sourceRevision = 1
component.ngOnChanges({
sourceRevision: new SimpleChange(0, 1, false),
})
expect(resetSpy).toHaveBeenCalled()
expect(loadSpy).toHaveBeenCalled()
})
it('applies viewer state after view init when already loaded', () => {
const applySpy = jest.spyOn(component as any, 'applyViewerState')
;(component as any).hasLoaded = true
@@ -43,7 +43,6 @@ export class PngxPdfViewerComponent
private readonly document = inject<Document>(DOCUMENT)
@Input() src!: string
@Input() sourceRevision = 0
@Input() password?: string
@Input() page?: number
@Output() pageChange = new EventEmitter<number>()
@@ -94,7 +93,7 @@ export class PngxPdfViewerComponent
}
ngOnChanges(changes: SimpleChanges): void {
if (changes['src'] || changes['sourceRevision'] || changes['password']) {
if (changes['src'] || changes['password']) {
this.resetViewerState()
if (this.src) {
this.loadDocument()
@@ -472,7 +472,6 @@
<div class="preview-sticky pdf-viewer-container">
<pngx-pdf-viewer
[src]="pdfSource()"
[sourceRevision]="previewRevision()"
[password]="pdfPassword()"
[renderMode]="PdfRenderMode.All"
[page]="previewCurrentPage()" (pageChange)="previewCurrentPage.set($event)"
@@ -1602,7 +1602,6 @@ describe('DocumentDetailComponent', () => {
expect(openDoc.__changedFields).toEqual([])
expect(setDirtySpy).toHaveBeenCalledWith(openDoc, false)
expect(saveSpy).toHaveBeenCalled()
expect(component.previewRevision()).toBe(1)
})
it('should ignore incoming update for a different document id', () => {
@@ -249,7 +249,6 @@ export class DocumentDetailComponent
titleSubject: Subject<string> = new Subject()
readonly previewUrl = signal<string>(undefined)
readonly pdfSource = signal<string>(undefined)
readonly previewRevision = signal(0)
readonly pdfPassword = signal<string>(undefined)
readonly thumbUrl = signal<string>(undefined)
readonly previewText = signal<string>(undefined)
@@ -610,9 +609,6 @@ export class DocumentDetailComponent
.subscribe()
}
this.updateComponent(useDoc)
if (forceRemote) {
this.previewRevision.update((revision) => revision + 1)
}
this.titleSubject
.pipe(
debounceTime(1000),
@@ -25,7 +25,7 @@
<input #textFilterInput class="form-control form-control-sm" type="text"
[disabled]="textFilterModifierIsNull"
[(ngModel)]="textFilter"
(keydown)="textFilterKeydown($event)"
(keyup)="textFilterKeyup($event)"
[ngbTypeahead]="searchAutoComplete"
(selectItem)="itemSelected($event)"
[readonly]="textFilterTarget === 'fulltext-morelike'">
@@ -2180,17 +2180,17 @@ describe('FilterEditorComponent', () => {
it('should support Enter / Esc key on text field', () => {
component.textFilterInput.nativeElement.value = 'foo'
component.textFilterInput.nativeElement.dispatchEvent(
new KeyboardEvent('keydown', { key: 'Enter' })
new KeyboardEvent('keyup', { key: 'Enter' })
)
expect(component.textFilter).toEqual('foo')
component.textFilterInput.nativeElement.value = 'foo bar'
component.textFilterInput.nativeElement.dispatchEvent(
new KeyboardEvent('keydown', { key: 'Escape' })
new KeyboardEvent('keyup', { key: 'Escape' })
)
expect(component.textFilter).toEqual('')
const blurSpy = jest.spyOn(component.textFilterInput.nativeElement, 'blur')
component.textFilterInput.nativeElement.dispatchEvent(
new KeyboardEvent('keydown', { key: 'Escape' })
new KeyboardEvent('keyup', { key: 'Escape' })
)
expect(blurSpy).toHaveBeenCalled()
})
@@ -1312,7 +1312,7 @@ export class FilterEditorComponent
}
}
textFilterKeydown(event: KeyboardEvent) {
textFilterKeyup(event: KeyboardEvent) {
if (event.key == 'Enter') {
const filterString = (
this.textFilterInput.nativeElement as HTMLInputElement
@@ -18,7 +18,6 @@ import {
DocumentAttributesComponent,
DocumentAttributesSectionKind,
} from './document-attributes.component'
import { ManagementListComponent } from './management-list/management-list.component'
@Component({
selector: 'pngx-dummy-section',
@@ -171,32 +170,10 @@ describe('DocumentAttributesComponent', () => {
expect(component.activeManagementList).toBeNull()
component.activeNavID.set(1)
const managementList = Object.create(ManagementListComponent.prototype)
component.activeOutlet = {
componentInstance: managementList,
} as any
expect(component.activeSection.kind).toBe(
DocumentAttributesSectionKind.ManagementList
)
expect(component.activeManagementList).toBe(managementList)
})
it('should use the current component instance when the outlet is reused', () => {
jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true)
component.activeNavID.set(1)
const firstManagementList = Object.create(ManagementListComponent.prototype)
const secondManagementList = Object.create(
ManagementListComponent.prototype
)
component.activeOutlet = {
componentInstance: firstManagementList,
} as any
expect(component.activeManagementList).toBe(firstManagementList)
component.activeOutlet.componentInstance = secondManagementList
expect(component.activeManagementList).toBe(secondManagementList)
expect(component.activeManagementList).toBeDefined()
})
it('should return activeCustomFields correctly', () => {
@@ -132,8 +132,11 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy {
]
@ViewChild('activeOutlet', { read: NgComponentOutlet })
activeOutlet: NgComponentOutlet
set activeOutlet(outlet: NgComponentOutlet | undefined) {
this.activeComponent.set(outlet?.componentInstance ?? null)
}
readonly activeComponent = signal<unknown>(null)
readonly activeNavID = signal<number>(null)
get visibleSections(): DocumentAttributesSection[] {
@@ -158,14 +161,14 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy {
this.activeSection?.kind !== DocumentAttributesSectionKind.ManagementList
)
return null
const instance = this.activeOutlet?.componentInstance
const instance = this.activeComponent()
return instance instanceof ManagementListComponent ? instance : null
}
get activeCustomFields(): CustomFieldsComponent | null {
if (this.activeSection?.kind !== DocumentAttributesSectionKind.CustomFields)
return null
const instance = this.activeOutlet?.componentInstance
const instance = this.activeComponent()
return instance instanceof CustomFieldsComponent ? instance : null
}
@@ -108,18 +108,6 @@ describe('PermissionsService', () => {
actionKey: 'View', // PermissionAction.View
typeKey: 'Document', // PermissionType.Document
})
expect(
permissionsService.getPermissionKeys('view_global_statistics')
).toEqual({
actionKey: 'View', // PermissionAction.View
typeKey: 'GlobalStatistics', // PermissionType.GlobalStatistics
})
expect(
permissionsService.getPermissionKeys('view_system_monitoring')
).toEqual({
actionKey: 'View', // PermissionAction.View
typeKey: 'SystemMonitoring', // PermissionType.SystemMonitoring
})
})
it('correctly checks explicit global permissions', () => {
+10 -7
View File
@@ -110,16 +110,19 @@ export class PermissionsService {
actionKey: string
typeKey: string
} {
const matches = permissionStr.match(/(.+)_/)
let typeKey
let actionKey
const actionIndex = Object.values(PermissionAction).findIndex((action) =>
permissionStr.startsWith(`${action}_`)
)
if (actionIndex > -1) {
const action = Object.values(PermissionAction)[actionIndex]
actionKey = Object.keys(PermissionAction)[actionIndex]
if (matches?.length > 0) {
const action = matches[1]
const actionIndex = Object.values(PermissionAction).indexOf(
action as PermissionAction
)
if (actionIndex > -1) {
actionKey = Object.keys(PermissionAction)[actionIndex]
}
const typeIndex = Object.values(PermissionType).indexOf(
permissionStr.replace(`${action}_`, '%s_') as PermissionType
permissionStr.replace(action, '%s') as PermissionType
)
if (typeIndex > -1) {
typeKey = Object.keys(PermissionType)[typeIndex]
+4 -3
View File
@@ -17,7 +17,7 @@ import {
estimateBrightnessForColor,
hexToHsl,
} from 'src/app/utils/color'
import { DEFAULT_APP_TITLE, environment } from 'src/environments/environment'
import { environment } from 'src/environments/environment'
import { DEFAULT_DISPLAY_FIELDS, DisplayField } from '../data/document'
import { SavedView } from '../data/saved-view'
import {
@@ -359,8 +359,9 @@ export class SettingsService {
}),
tap((uisettings) => {
this.assignSafeSettings(uisettings.settings)
environment.appTitle =
this.get(SETTINGS_KEYS.APP_TITLE) || DEFAULT_APP_TITLE
if (this.get(SETTINGS_KEYS.APP_TITLE)?.length) {
environment.appTitle = this.get(SETTINGS_KEYS.APP_TITLE)
}
this.maybeMigrateSettings()
// to update lang cookie
if (this.settings['language']?.length)
+2 -4
View File
@@ -1,14 +1,12 @@
const base_url = new URL(document.baseURI)
export const DEFAULT_APP_TITLE = 'Paperless-ngx'
export const environment = {
production: true,
apiBaseUrl: document.baseURI + 'api/',
apiVersion: '10', // match src/paperless/settings.py
appTitle: DEFAULT_APP_TITLE,
appTitle: 'Paperless-ngx',
tag: 'prod',
version: '3.0.2',
version: '3.0.0',
webSocketHost: window.location.host,
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
webSocketBaseUrl: base_url.pathname + 'ws/',
+1 -3
View File
@@ -2,13 +2,11 @@
// `ng build --configuration production` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.
export const DEFAULT_APP_TITLE = 'Paperless-ngx'
export const environment = {
production: false,
apiBaseUrl: 'http://localhost:8000/api/',
apiVersion: '10',
appTitle: DEFAULT_APP_TITLE,
appTitle: 'Paperless-ngx',
tag: 'dev',
version: 'DEVELOPMENT',
webSocketHost: 'localhost:8000',
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Wis</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Eenmalige migrasie van instellings na die databasis is suksesvol voltooi!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Kan nie instellings na die databasis migreer nie, probeer handmatig bewaar.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">U kan die toer weer vanuit die instellingsblad begin.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="needs-translation">Clear</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">الصلاحيات الافتراضية</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">تنظيف</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">نعم</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">تصفية حسب المالك</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">نعم</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">تم بنجاح ترحيل الإعدادات مرة واحدة إلى قاعدة البيانات!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">غير قادر على ترحيل الإعدادات إلى قاعدة البيانات، الرجاء محاولة الحفظ يدوياً.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">يمكنك إعادة تشغيل الجولة من صفحة الإعدادات.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Ачысціць</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Так</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Так</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Паспяхова выканана аднаразовая міграцыя налад у базу!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Немагчыма перанесці налады ў базу дадзеных, паспрабуйце захаваць уручную.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Права по подразбиране</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Настройките се прилагат към този потребителски акаунт за обекти (маркери, правила за поща и т. н., но не и документи), създадени чрез уеб интерфейса. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Изчистване</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Да</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Филтър по собственик</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Да</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Успешно завършена еднократна миграция на настройките към базата данни!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Неуспешно мигриране на настройки в база данни, моля опитайте ръчно запазване.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Можете да рестартирате обиколката от страницата с настройки.</target>
</trans-unit>
+22 -26
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Permisos per defecte</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> S'apliquen a aquest compte d'usuari per als objectes (etiquetes, regles de correu, etc.) creats des de la interfície web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -1996,7 +1996,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<target state="translated">Descarta-ho tot</target>
<target state="needs-translation">Dismiss all</target>
</trans-unit>
<trans-unit id="1616102757855967475" datatype="html">
<source>All</source>
@@ -2076,7 +2076,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<target state="translated">Cerca tasques</target>
<target state="needs-translation">Search tasks</target>
</trans-unit>
<trans-unit id="6849725902312323996" datatype="html">
<source>Reset filters</source>
@@ -2696,7 +2696,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">348</context>
</context-group>
<target state="translated">Confirma Descarta Tot</target>
<target state="needs-translation">Confirm Dismiss All</target>
</trans-unit>
<trans-unit id="4157200209636243740" datatype="html">
<source>Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</source>
@@ -2704,7 +2704,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">349</context>
</context-group>
<target state="translated"/>
<target state="needs-translation">Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</target>
</trans-unit>
<trans-unit id="8149502458056418229" datatype="html">
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Neteja</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Sí</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrar per propietari</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Sí</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Completat correctament la migració de la configuració de la base de dades!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">No es pot migrar la configuració de la base de dades, prova manualment.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Pots reiniciar el tour des de les opcions.</target>
</trans-unit>
+105 -109
View File
@@ -828,7 +828,7 @@
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
<context context-type="linenumber">18</context>
</context-group>
<target state="translated">řádků</target>
<target state="translated">řádky</target>
</trans-unit>
<trans-unit id="8838884664569764142" datatype="html">
<source>Auto refresh</source>
@@ -1352,7 +1352,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">248</context>
</context-group>
<target state="translated">Vestavěná pole k zobrazení:</target>
<target state="needs-translation">Built-in fields to show:</target>
</trans-unit>
<trans-unit id="3467966318201103991" datatype="html">
<source>Uncheck fields to hide them on the document details page.</source>
@@ -1360,7 +1360,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">260</context>
</context-group>
<target state="translated">Zrušte zaškrtnutí polí pro jejich skrytí na stránce s podrobnostmi o dokumentu.</target>
<target state="needs-translation">Uncheck fields to hide them on the document details page.</target>
</trans-unit>
<trans-unit id="8508424367627989968" datatype="html" approved="yes">
<source>Bulk editing</source>
@@ -1400,7 +1400,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1787</context>
</context-group>
<target state="translated">Editor PDF</target>
<target state="translated">PDF editor</target>
</trans-unit>
<trans-unit id="1577733187050997705" datatype="html">
<source>Default editing mode</source>
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Výchozí oprávnění</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Nastavení se vztahují na tento uživatelský účet pro objekty (štítky, pravidla pošty atd. ale ne dokumenty) vytvořené prostřednictvím webového uživatelského rozhraní. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -1964,7 +1964,7 @@
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
<context context-type="linenumber">298</context>
</context-group>
<target state="translated">Úlohy</target>
<target state="needs-translation">Tasks</target>
</trans-unit>
<trans-unit id="8492095365580052820" datatype="html">
<source>Tasks shows detailed information about document consumption and system tasks.</source>
@@ -1972,7 +1972,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
<target state="translated">Úlohy zobrazují podrobné informace o zpracování dokumentů a systémových úlohách.</target>
<target state="needs-translation">Tasks shows detailed information about document consumption and system tasks.</target>
</trans-unit>
<trans-unit id="103921551219467537" datatype="html">
<source>Clear selection</source>
@@ -1996,7 +1996,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">15</context>
</context-group>
<target state="translated">Zahodit vše</target>
<target state="needs-translation">Dismiss all</target>
</trans-unit>
<trans-unit id="1616102757855967475" datatype="html" approved="yes">
<source>All</source>
@@ -2056,7 +2056,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">215</context>
</context-group>
<target state="translated">Všechny typy</target>
<target state="needs-translation">All types</target>
</trans-unit>
<trans-unit id="131016739441837046" datatype="html">
<source>All sources</source>
@@ -2068,7 +2068,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">227</context>
</context-group>
<target state="translated">Všechny zdroje</target>
<target state="needs-translation">All sources</target>
</trans-unit>
<trans-unit id="3570013039254960445" datatype="html">
<source>Search tasks</source>
@@ -2100,7 +2100,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">126</context>
</context-group>
<target state="translated">{VAR_PLURAL, plural, few {<x id="INTERPOLATION"/> úlohy} many {<x id="INTERPOLATION"/> úloh}=1 {1 úloha} other {<x id="INTERPOLATION"/> úloh}}</target>
<target state="needs-translation">{VAR_PLURAL, plural, =1 {1 task} other {<x id="INTERPOLATION"/> tasks}}</target>
</trans-unit>
<trans-unit id="8953033926734869941" datatype="html" approved="yes">
<source>Name</source>
@@ -2444,7 +2444,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">289</context>
</context-group>
<target state="translated">Zvoleným filtrům neodpovídají žádné úlohy.</target>
<target state="needs-translation">No tasks match the current filters.</target>
</trans-unit>
<trans-unit id="2525230676386818985" datatype="html">
<source>Result</source>
@@ -2460,7 +2460,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">55</context>
</context-group>
<target state="translated">Vyžaduje pozornost</target>
<target state="needs-translation">Needs attention</target>
</trans-unit>
<trans-unit id="3307214558906712688" datatype="html">
<source>In progress</source>
@@ -2468,7 +2468,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">56</context>
</context-group>
<target state="translated">Probíhá</target>
<target state="needs-translation">In progress</target>
</trans-unit>
<trans-unit id="1371178633976505412" datatype="html">
<source>Recently completed</source>
@@ -2476,7 +2476,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">57</context>
</context-group>
<target state="translated">Nedávno dokončené</target>
<target state="needs-translation">Recently completed</target>
</trans-unit>
<trans-unit id="2936452645673957909" datatype="html">
<source>Consume File</source>
@@ -2484,7 +2484,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">66</context>
</context-group>
<target state="translated">Zpracování souboru</target>
<target state="needs-translation">Consume File</target>
</trans-unit>
<trans-unit id="5622386857946132209" datatype="html">
<source>Train Classifier</source>
@@ -2492,7 +2492,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">70</context>
</context-group>
<target state="translated">Trénování klasifikátoru</target>
<target state="needs-translation">Train Classifier</target>
</trans-unit>
<trans-unit id="776309955507105337" datatype="html">
<source>Sanity Check</source>
@@ -2500,7 +2500,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">74</context>
</context-group>
<target state="translated">Kontrola zdraví</target>
<target state="needs-translation">Sanity Check</target>
</trans-unit>
<trans-unit id="7502272564743467653" datatype="html">
<source>Mail Fetch</source>
@@ -2520,7 +2520,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">77</context>
</context-group>
<target state="translated">Index LLM</target>
<target state="needs-translation">LLM Index</target>
</trans-unit>
<trans-unit id="6402092370576716734" datatype="html">
<source>Empty Trash</source>
@@ -2528,7 +2528,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">80</context>
</context-group>
<target state="translated">Vyprázdnění koše</target>
<target state="needs-translation">Empty Trash</target>
</trans-unit>
<trans-unit id="4173754487295857311" datatype="html">
<source>Check Workflows</source>
@@ -2536,7 +2536,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">84</context>
</context-group>
<target state="translated">Kontrola postupů</target>
<target state="needs-translation">Check Workflows</target>
</trans-unit>
<trans-unit id="2065831805515896240" datatype="html">
<source>Bulk Update</source>
@@ -2544,7 +2544,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">88</context>
</context-group>
<target state="translated">Hromadná aktualizace</target>
<target state="needs-translation">Bulk Update</target>
</trans-unit>
<trans-unit id="5062348912423871240" datatype="html">
<source>Reprocess Document</source>
@@ -2552,7 +2552,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">92</context>
</context-group>
<target state="translated">Opětovné zpracování dokumentu</target>
<target state="needs-translation">Reprocess Document</target>
</trans-unit>
<trans-unit id="6903696804811148799" datatype="html">
<source>Build Share Link</source>
@@ -2560,7 +2560,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">96</context>
</context-group>
<target state="translated">Sestavení odkazu ke sdílení</target>
<target state="needs-translation">Build Share Link</target>
</trans-unit>
<trans-unit id="6581973658756561124" datatype="html">
<source>Bulk Delete</source>
@@ -2568,7 +2568,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">100</context>
</context-group>
<target state="translated">Hromadné smazání</target>
<target state="needs-translation">Bulk Delete</target>
</trans-unit>
<trans-unit id="9172233176401579786" datatype="html">
<source>Scheduled</source>
@@ -2612,7 +2612,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">119</context>
</context-group>
<target state="translated">Zpracování složky</target>
<target state="needs-translation">Folder Consume</target>
</trans-unit>
<trans-unit id="1456901843819961615" datatype="html">
<source>Email Consume</source>
@@ -2620,7 +2620,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">123</context>
</context-group>
<target state="translated">Zpracování e-mailu</target>
<target state="needs-translation">Email Consume</target>
</trans-unit>
<trans-unit id="29832309535656200" datatype="html">
<source>System</source>
@@ -2628,7 +2628,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">125</context>
</context-group>
<target state="translated">Systém</target>
<target state="needs-translation">System</target>
</trans-unit>
<trans-unit id="2233560223291461480" datatype="html">
<source>Manual</source>
@@ -2636,7 +2636,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">126</context>
</context-group>
<target state="translated">Ruční</target>
<target state="needs-translation">Manual</target>
</trans-unit>
<trans-unit id="5404910960991552159" datatype="html">
<source>Dismiss selected</source>
@@ -2652,7 +2652,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">240</context>
</context-group>
<target state="translated">Zahodit viditelné</target>
<target state="needs-translation">Dismiss visible</target>
</trans-unit>
<trans-unit id="3169751690815214293" datatype="html">
<source>Confirm Dismiss</source>
@@ -2696,7 +2696,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">348</context>
</context-group>
<target state="translated">Potvrdit zahození všech</target>
<target state="needs-translation">Confirm Dismiss All</target>
</trans-unit>
<trans-unit id="4157200209636243740" datatype="html">
<source>Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</source>
@@ -2704,7 +2704,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">349</context>
</context-group>
<target state="translated">Zahodit všech <x id="PH" equiv-text="this.totalTasks()"/> úloh?</target>
<target state="needs-translation">Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</target>
</trans-unit>
<trans-unit id="8149502458056418229" datatype="html">
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
@@ -2712,7 +2712,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">408</context>
</context-group>
<target state="translated">Úspěch. Vytvořen nový dokument s ID <x id="PH" equiv-text="documentId"/></target>
<target state="needs-translation">Success. New document id <x id="PH" equiv-text="documentId"/> created</target>
</trans-unit>
<trans-unit id="8760066891202884337" datatype="html">
<source>Duplicate of document #<x id="PH" equiv-text="duplicateOf"/></source>
@@ -3540,7 +3540,7 @@
<context context-type="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
<context context-type="linenumber">183</context>
</context-group>
<target state="translated">Atributy</target>
<target state="needs-translation">Attributes</target>
</trans-unit>
<trans-unit id="7437910965833684826" datatype="html" approved="yes">
<source>Correspondents</source>
@@ -3572,7 +3572,7 @@
<context context-type="sourcefile">src/app/components/manage/document-attributes/document-attributes.component.ts</context>
<context context-type="linenumber">105</context>
</context-group>
<target state="translated">Typy dokumentů</target>
<target state="needs-translation">Document types</target>
</trans-unit>
<trans-unit id="8835528846812581148" datatype="html">
<source>Storage paths</source>
@@ -3584,7 +3584,7 @@
<context context-type="sourcefile">src/app/components/manage/document-attributes/document-attributes.component.ts</context>
<context context-type="linenumber">115</context>
</context-group>
<target state="translated">Cesty úložiště</target>
<target state="needs-translation">Storage paths</target>
</trans-unit>
<trans-unit id="9149498548977462220" datatype="html">
<source>Custom fields</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Smazat</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ano</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -5540,7 +5524,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html</context>
<context context-type="linenumber">26</context>
</context-group>
<target state="translated">Přístup ke stavu systému, protokolům, backendu Django</target>
<target state="needs-translation">Access system status, logs, Django backend</target>
</trans-unit>
<trans-unit id="1808271538028523977" datatype="html">
<source>Superuser</source>
@@ -5556,7 +5540,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html</context>
<context context-type="linenumber">30</context>
</context-group>
<target state="translated">Uděluje všechna oprávnění a může zobrazovat všechny objekty</target>
<target state="needs-translation">Grants all permissions and can view all objects</target>
</trans-unit>
<trans-unit id="8900662509426586619" datatype="html">
<source>Two-factor Authentication</source>
@@ -6344,7 +6328,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
<context context-type="linenumber">271</context>
</context-group>
<target state="translated">Má kterýkoli z následujících typů dokumentů</target>
<target state="needs-translation">Has any of these document types</target>
</trans-unit>
<trans-unit id="1507843981661822403" datatype="html">
<source>Does not have document types</source>
@@ -7546,7 +7530,7 @@
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<context context-type="linenumber">116</context>
</context-group>
<target state="translated">Spravovat balíčky sdílení odkazů</target>
<target state="needs-translation">Manage share link bundles</target>
</trans-unit>
<trans-unit id="1070687661569746428" datatype="html">
<source>Create share link bundle</source>
@@ -7554,7 +7538,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.ts</context>
<context context-type="linenumber">61</context>
</context-group>
<target state="translated">Vytvořit balíček sdílení odkazů</target>
<target state="needs-translation">Create share link bundle</target>
</trans-unit>
<trans-unit id="2362798555008696742" datatype="html">
<source>Create link</source>
@@ -7590,7 +7574,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.html</context>
<context context-type="linenumber">21</context>
</context-group>
<target state="translated">Aktualizace stavu každých pár sekund během přípravy balíčků.</target>
<target state="needs-translation">Status updates every few seconds while bundles are being prepared.</target>
</trans-unit>
<trans-unit id="5194711788228004418" datatype="html">
<source>No share link bundles currently exist.</source>
@@ -7598,7 +7582,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.html</context>
<context context-type="linenumber">25</context>
</context-group>
<target state="translated">V současné době neexistují žádné balíčky.</target>
<target state="needs-translation">No share link bundles currently exist.</target>
</trans-unit>
<trans-unit id="2841249062294860035" datatype="html">
<source>Built:</source>
@@ -7650,7 +7634,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.ts</context>
<context context-type="linenumber">42</context>
</context-group>
<target state="translated">Balíčky sdílení odkazů</target>
<target state="needs-translation">Share link bundles</target>
</trans-unit>
<trans-unit id="1541995860059283227" datatype="html">
<source>Failed to load share link bundles.</source>
@@ -7658,7 +7642,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.ts</context>
<context context-type="linenumber">65</context>
</context-group>
<target state="translated">Nepodařilo se načíst balíčky sdílení odkazů.</target>
<target state="needs-translation">Failed to load share link bundles.</target>
</trans-unit>
<trans-unit id="5417797597565486403" datatype="html">
<source>Error retrieving share link bundles.</source>
@@ -7942,7 +7926,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">147</context>
</context-group>
<target state="translated">Nedávná aktivita úloh <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;small text-muted fw-light&quot;&gt;"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> days)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
<target state="needs-translation">Recent Task Activity <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;small text-muted fw-light&quot;&gt;"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> days)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
</trans-unit>
<trans-unit id="3448462145758383019" datatype="html">
<source>Total</source>
@@ -7950,7 +7934,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">152</context>
</context-group>
<target state="translated">Celkem</target>
<target state="needs-translation">Total</target>
</trans-unit>
<trans-unit id="3521084103654700903" datatype="html">
<source>Successful</source>
@@ -7958,7 +7942,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">156</context>
</context-group>
<target state="translated">Úspěšných</target>
<target state="needs-translation">Successful</target>
</trans-unit>
<trans-unit id="7256395947475975935" datatype="html">
<source>Failed</source>
@@ -7970,7 +7954,7 @@
<context context-type="sourcefile">src/app/data/share-link-bundle.ts</context>
<context context-type="linenumber">44</context>
</context-group>
<target state="translated">Selhané</target>
<target state="needs-translation">Failed</target>
</trans-unit>
<trans-unit id="4416413576346763682" datatype="html">
<source>Pending</source>
@@ -7982,7 +7966,7 @@
<context context-type="sourcefile">src/app/data/share-link-bundle.ts</context>
<context context-type="linenumber">41</context>
</context-group>
<target state="translated">Čekající</target>
<target state="needs-translation">Pending</target>
</trans-unit>
<trans-unit id="2000433102211963975" datatype="html">
<source>No recent tasks</source>
@@ -7990,7 +7974,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">169</context>
</context-group>
<target state="translated">Žádné nedávné úlohy</target>
<target state="needs-translation">No recent tasks</target>
</trans-unit>
<trans-unit id="2041675390931385838" datatype="html">
<source>Health</source>
@@ -8090,7 +8074,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">283</context>
</context-group>
<target state="translated">Index AI</target>
<target state="needs-translation">AI Index</target>
</trans-unit>
<trans-unit id="6732151329960766506" datatype="html">
<source>Copy Raw Error</source>
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrovat podle vlastníka</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ano</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -8660,7 +8656,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">318</context>
</context-group>
<target state="translated">Původní kontrolní součet SHA256</target>
<target state="needs-translation">Original SHA256 checksum</target>
</trans-unit>
<trans-unit id="5888243105821763422" datatype="html" approved="yes">
<source>Original file size</source>
@@ -8684,7 +8680,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">331</context>
</context-group>
<target state="translated">Archivní kontrolní součet SHA256</target>
<target state="needs-translation">Archive SHA256 checksum</target>
</trans-unit>
<trans-unit id="6033581412811562084" datatype="html" approved="yes">
<source>Archive file size</source>
@@ -8716,7 +8712,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">368,371</context>
</context-group>
<target state="translated">Poznámky <x id="START_BLOCK_IF" equiv-text="@if (document()?.notes.length) {"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge text-bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/><x id="CLOSE_BLOCK_IF" equiv-text="}"/></target>
<target state="needs-translation">Notes <x id="START_BLOCK_IF" equiv-text="@if (document()?.notes.length) {"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge text-bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/><x id="CLOSE_BLOCK_IF" equiv-text="}"/></target>
</trans-unit>
<trans-unit id="186236568870281953" datatype="html">
<source>History</source>
@@ -9116,7 +9112,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
<target state="translated">Verze</target>
<target state="needs-translation">Versions</target>
</trans-unit>
<trans-unit id="4077520913910941990" datatype="html">
<source>Label</source>
@@ -9124,7 +9120,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
<target state="translated">Označení</target>
<target state="needs-translation">Label</target>
</trans-unit>
<trans-unit id="3915966149686975421" datatype="html">
<source>Optional</source>
@@ -9132,7 +9128,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">17</context>
</context-group>
<target state="translated">Volitelné</target>
<target state="needs-translation">Optional</target>
</trans-unit>
<trans-unit id="787787001194154763" datatype="html">
<source>Add new version</source>
@@ -9140,7 +9136,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">32</context>
</context-group>
<target state="translated">Přidat novou verzi</target>
<target state="needs-translation">Add new version</target>
</trans-unit>
<trans-unit id="3119565892291077820" datatype="html">
<source>Uploading version...</source>
@@ -9164,7 +9160,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">50</context>
</context-group>
<target state="translated">Nepodařilo se nahrát verzi.</target>
<target state="needs-translation">Version upload failed.</target>
</trans-unit>
<trans-unit id="6328986243040954523" datatype="html">
<source>Version label</source>
@@ -9176,7 +9172,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">85</context>
</context-group>
<target state="translated">Označení verze</target>
<target state="needs-translation">Version label</target>
</trans-unit>
<trans-unit id="2724055831234181057" datatype="html">
<source>Version</source>
@@ -9184,7 +9180,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<target state="translated">Verze</target>
<target state="needs-translation">Version</target>
</trans-unit>
<trans-unit id="2491751767883178298" datatype="html">
<source>Delete this version?</source>
@@ -9216,7 +9212,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
<context context-type="linenumber">189</context>
</context-group>
<target state="translated">Chyba při aktualizaci označení verze</target>
<target state="needs-translation">Error updating version label</target>
</trans-unit>
<trans-unit id="3567158019134759286" datatype="html">
<source>Uploading new version. Processing will happen in the background.</source>
@@ -9244,7 +9240,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
<context context-type="linenumber">271</context>
</context-group>
<target state="translated">Nahrání selhalo.</target>
<target state="needs-translation">Upload failed.</target>
</trans-unit>
<trans-unit id="8350861980330256599" datatype="html">
<source>Error uploading new version</source>
@@ -9348,7 +9344,7 @@
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
<context context-type="linenumber">113</context>
</context-group>
<target state="translated">Vytvořit balíček sdílení odkazů</target>
<target state="needs-translation">Create a share link bundle</target>
</trans-unit>
<trans-unit id="1015374532025907183" datatype="html">
<source>Include:</source>
@@ -9755,7 +9751,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">95,96</context>
</context-group>
<target state="translated">Vytvořeno: <x id="INTERPOLATION" equiv-text="{{ document().created | customDate }}"/></target>
<target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document().created | customDate }}"/></target>
</trans-unit>
<trans-unit id="2030261243264601523" datatype="html">
<source>Added: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></source>
@@ -9771,7 +9767,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">96,97</context>
</context-group>
<target state="translated">Přidáno: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></target>
<target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></target>
</trans-unit>
<trans-unit id="4235671847487610290" datatype="html">
<source>Modified: <x id="INTERPOLATION" equiv-text="{{ document().modified | customDate }}"/></source>
@@ -10247,7 +10243,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-list.component.ts</context>
<context context-type="linenumber">497</context>
</context-group>
<target state="translated">Pohled „<x id="PH" equiv-text="savedView.name"/>“ úspěšně vytvořen, nepodařilo se ale aktualizovat nastavení viditelnosti.</target>
<target state="needs-translation">View "<x id="PH" equiv-text="savedView.name"/>" created successfully, but could not update visibility settings.</target>
</trans-unit>
<trans-unit id="739880801667335279" datatype="html">
<source>Dates</source>
@@ -11367,7 +11363,7 @@
<context context-type="sourcefile">src/app/components/manage/saved-views/saved-views.component.html</context>
<context context-type="linenumber">35</context>
</context-group>
<target state="translated"><x id="START_TAG_I_BS" ctype="x-i_bs" equiv-text="bs class=&quot;me-1&quot; name=&quot;person-fill-lock&quot;&gt;"/><x id="CLOSE_TAG_I_BS" ctype="x-i_bs" equiv-text="Oprávnění&lt;"/>Oprávnění</target>
<target state="needs-translation"><x id="START_TAG_I_BS" ctype="x-i_bs" equiv-text="bs class=&quot;me-1&quot; name=&quot;person-fill-lock&quot;&gt;"/><x id="CLOSE_TAG_I_BS" ctype="x-i_bs" equiv-text="Permissions&lt;"/>Permissions</target>
</trans-unit>
<trans-unit id="6338800642797811873" datatype="html">
<source>Documents page size</source>
@@ -11415,7 +11411,7 @@
<context context-type="sourcefile">src/app/components/manage/saved-views/saved-views.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<target state="translated">Upozornění: pořadí nebude zachováno</target>
<target state="needs-translation">Note: ordering is not preserved</target>
</trans-unit>
<trans-unit id="7877440816920439876" datatype="html" approved="yes">
<source>No saved views defined.</source>
@@ -11864,7 +11860,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">54</context>
</context-group>
<target state="translated">Nastavení AI</target>
<target state="needs-translation">AI Settings</target>
</trans-unit>
<trans-unit id="1313137480169642057" datatype="html">
<source>Output Type</source>
@@ -11896,7 +11892,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">120</context>
</context-group>
<target state="translated">Generování archivních souborů</target>
<target state="needs-translation">Archive File Generation</target>
</trans-unit>
<trans-unit id="1115402553541327390" datatype="html">
<source>Image DPI</source>
@@ -12072,7 +12068,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">277</context>
</context-group>
<target state="translated">Rozdělení podle čárových kódů štítků</target>
<target state="needs-translation">Split on Tag Barcodes</target>
</trans-unit>
<trans-unit id="7011909364081812031" datatype="html">
<source>AI Enabled</source>
@@ -12080,7 +12076,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">284</context>
</context-group>
<target state="translated">AI povoleno</target>
<target state="needs-translation">AI Enabled</target>
</trans-unit>
<trans-unit id="8028880048909383956" datatype="html">
<source>Consider privacy implications when enabling AI features, especially if using a remote model.</source>
@@ -12088,7 +12084,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">288</context>
</context-group>
<target state="translated">Při aktivaci funkcí umělé inteligence zvažte dopady na ochranu osobních údajů, zejména pokud používáte vzdálený model.</target>
<target state="needs-translation">Consider privacy implications when enabling AI features, especially if using a remote model.</target>
</trans-unit>
<trans-unit id="8131374115579345652" datatype="html">
<source>LLM Embedding Backend</source>
@@ -12096,7 +12092,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">292</context>
</context-group>
<target state="translated">Backend pro vkládání LLM</target>
<target state="needs-translation">LLM Embedding Backend</target>
</trans-unit>
<trans-unit id="6647708571891295756" datatype="html">
<source>LLM Embedding Model</source>
@@ -12104,7 +12100,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">300</context>
</context-group>
<target state="translated">Model vkládání LLM</target>
<target state="needs-translation">LLM Embedding Model</target>
</trans-unit>
<trans-unit id="3554114880473286122" datatype="html">
<source>LLM Embedding Endpoint</source>
@@ -12112,7 +12108,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">307</context>
</context-group>
<target state="translated">Koncový bod vkládání LLM</target>
<target state="needs-translation">LLM Embedding Endpoint</target>
</trans-unit>
<trans-unit id="1044242175651289991" datatype="html">
<source>LLM Embedding Chunk Size</source>
@@ -12120,7 +12116,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">314</context>
</context-group>
<target state="translated">Velikost bloku vkládání LLM</target>
<target state="needs-translation">LLM Embedding Chunk Size</target>
</trans-unit>
<trans-unit id="7218245223139363113" datatype="html">
<source>LLM Context Size</source>
@@ -12128,7 +12124,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">321</context>
</context-group>
<target state="translated">Velikost kontextu LLM</target>
<target state="needs-translation">LLM Context Size</target>
</trans-unit>
<trans-unit id="4234495692726214397" datatype="html">
<source>LLM Backend</source>
@@ -12136,7 +12132,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">328</context>
</context-group>
<target state="translated">Backend LLM</target>
<target state="needs-translation">LLM Backend</target>
</trans-unit>
<trans-unit id="7935234833834000002" datatype="html">
<source>LLM Model</source>
@@ -12144,7 +12140,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">336</context>
</context-group>
<target state="translated">Model LLM</target>
<target state="needs-translation">LLM Model</target>
</trans-unit>
<trans-unit id="1980550530387803165" datatype="html">
<source>LLM API Key</source>
@@ -12152,7 +12148,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">343</context>
</context-group>
<target state="translated">Klíč API LLM</target>
<target state="needs-translation">LLM API Key</target>
</trans-unit>
<trans-unit id="6126617860376156501" datatype="html">
<source>LLM Endpoint</source>
@@ -12160,7 +12156,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">350</context>
</context-group>
<target state="translated">Koncový bod LLM</target>
<target state="needs-translation">LLM Endpoint</target>
</trans-unit>
<trans-unit id="6572826277249350975" datatype="html">
<source>LLM Output Language</source>
@@ -12168,7 +12164,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">357</context>
</context-group>
<target state="translated">Výstupní jazyk LLM</target>
<target state="needs-translation">LLM Output Language</target>
</trans-unit>
<trans-unit id="3284403507172415792" datatype="html">
<source>Language to use for generated AI suggestions. When unset, AI suggestions use the user&apos;s display language if explicitly set.</source>
@@ -12176,7 +12172,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">361</context>
</context-group>
<target state="translated">Jazyk, který se má použít pro návrhy generované AI. Pokud není nastaveno, návrhy AI použijí jazyk zobrazení uživatele, je-li explicitně nastaven.</target>
<target state="needs-translation">Language to use for generated AI suggestions. When unset, AI suggestions use the user's display language if explicitly set.</target>
</trans-unit>
<trans-unit id="4493921125434706859" datatype="html">
<source>LLM Request Timeout</source>
@@ -12184,7 +12180,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">365</context>
</context-group>
<target state="translated">Čawsový limit žádosti LLM</target>
<target state="needs-translation">LLM Request Timeout</target>
</trans-unit>
<trans-unit id="483994032066441287" datatype="html">
<source>Timeout in seconds for LLM requests.</source>
@@ -12192,7 +12188,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">369</context>
</context-group>
<target state="translated">Časový limit v sekundách pro žádosti LLM.</target>
<target state="needs-translation">Timeout in seconds for LLM requests.</target>
</trans-unit>
<trans-unit id="9155387182259025015" datatype="html">
<source>Processing</source>
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Úspěšně dokončena jednorázová migrace nastavení do databáze!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nelze přesunout nastavení do databáze, zkuste ho uložit ručně.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Prohlídku můžete znovu spustit ze stránky s nastavením.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Ryd</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Standardberechtigungen</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Einstellungen gelten für dieses Benutzerkonto für Objekte (Tags, E-Mail-Regeln, etc. - jedoch nicht für Dokumente), die über die Weboberfläche erstellt wurden. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Zurücksetzen</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Nach Eigentümer filtern</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Einmalige Migration der Einstellungen in die Datenbank erfolgreich abgeschlossen!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Einstellungen konnten nicht in die Datenbank migriert werden. Bitte versuchen Sie, manuell zu speichern.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Sie können die Tour in den Einstellungen erneut starten.</target>
</trans-unit>
+21 -25
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="final">Standardberechtigungen</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html" approved="yes">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="translated"> Die Einstellungen gelten für dieses Benutzerkonto in Bezug auf Objekte (Tags, E-Mail-Regeln usw.), die über die Weboberfläche erstellt wurden. Diese Einstellungen gelten nicht für Dokumente. </target>
<target state="final"> Einstellungen gelten für dieses Benutzerkonto für Objekte (Tags, E-Mail-Regeln, etc. - jedoch nicht für Dokumente), die über die Weboberfläche erstellt wurden. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Zurücksetzen</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html" approved="yes">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="final">Nach Eigentümer filtern</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -9719,7 +9715,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<target state="translated"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> Vorschau</target>
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> thumbnail</target>
</trans-unit>
<trans-unit id="2784168796433474565" datatype="html" approved="yes">
<source>Filter by tag</source>
@@ -12082,13 +12078,13 @@
</context-group>
<target state="final">KI aktiviert</target>
</trans-unit>
<trans-unit id="8028880048909383956" datatype="html" approved="yes">
<trans-unit id="8028880048909383956" datatype="html">
<source>Consider privacy implications when enabling AI features, especially if using a remote model.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">288</context>
</context-group>
<target state="final">Berücksichtigen Sie die Auswirkungen auf die Privatsphäre der Benutzer, wenn Sie KI-Funktionen aktivieren, insbesondere wenn Sie kein lokales Modell verwenden.</target>
<target state="translated">Berücksichtigen Sie die Auswirkungen auf die Privatsphäre der Benutzer, wenn Sie KI-Funktionen aktivieren, insbesondere wenn Sie ein nicht lokales Modell verwenden.</target>
</trans-unit>
<trans-unit id="8131374115579345652" datatype="html">
<source>LLM Embedding Backend</source>
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="final">Einmalige Migration der Einstellungen in die Datenbank erfolgreich abgeschlossen!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="final">Einstellungen konnten nicht in die Datenbank migriert werden. Bitte versuchen Sie, manuell zu speichern.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="final">Sie können die Tour in den Einstellungen erneut starten.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Προεπιλεγμένα δικαιώματα</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Καθαρισμός</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ναι</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ναι</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Ολοκληρώθηκε με επιτυχία η μετεγκατάσταση των ρυθμίσεων στη βάση δεδομένων!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Δεν είναι δυνατή η μετεγκατάσταση των ρυθμίσεων στη βάση δεδομένων, παρακαλώ δοκιμάστε χειροκίνητα.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Μπορείτε να επανεκκινήσετε την περιήγηση από τη σελίδα ρυθμίσεων.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Permisos por defecto</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> La configuración aplica a esta cuenta de usuario para objetos (Etiquetas, Reglas de correo, etc. pero no documentos) creados a través de la interfaz web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Limpiar</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Si</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrar por propietario</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Si</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">¡Se completó con éxito la migración única de la configuración a la base de datos!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">No se puede migrar la configuración a la base de datos, por favor intente guardarla manualmente.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Puede reiniciar la visita desde la página de configuración.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="needs-translation">Clear</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">مجوزهای پیش فرض</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated">تنظیمات برای این حساب کاربری برای اشیاء (برچسب ها ، قوانین نامه و غیره اما نه اسناد) ایجاد شده از طریق UI وب اعمال می شود.</target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">پاک کردن</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">بله</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">فیلتر توسط مالک</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">بله</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">با موفقیت مهاجرت یک بار تنظیمات به پایگاه داده را تکمیل کرد!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">برای انتقال تنظیمات به پایگاه داده امکان پذیر نیست ، لطفاً به صورت دستی ذخیره کنید.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">می توانید تور را از صفحه تنظیمات مجدداً راه اندازی کنید.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Oletusoikeudet</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Tyhjennä</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Kyllä</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Kyllä</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Kertaluontoinen asetusten migratointi tietokantaan suoritettu onnistuneesti!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Asetuksia ei saatu migratoitua tietokantaan. Yritä tallennusta manuaalisesti.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Voit käynnistää opastuksen uudelleen asetussivulta.</target>
</trans-unit>
+51 -55
View File
@@ -432,7 +432,7 @@
<context context-type="sourcefile">src/app/app.component.ts</context>
<context context-type="linenumber">171</context>
</context-group>
<target state="translated">Le tableau de bord peut être utilisé pour afficher les vues enregistrées, comme une boîte de réception. Les vues se trouvent dans Paramètres &gt; Vues enregistrées une fois que vous en avez créé.</target>
<target state="translated">Le tableau de bord peut être utilisé pour afficher les vues enregistrées, comme une boîte de réception. Les vues se trouvent dans Paramètres &gt; Vues enregistrées une fois que vous en avez créées.</target>
</trans-unit>
<trans-unit id="9075755296812854717" datatype="html" approved="yes">
<source>Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.</source>
@@ -1264,7 +1264,7 @@
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">185</context>
</context-group>
<target state="translated">Afficher le nombre de documents dans les vues enregistrées dans la barre latérale</target>
<target state="translated">Afficher le nombre de documents dans la barre latérale vues enregistrées</target>
</trans-unit>
<trans-unit id="8939587804990976924" datatype="html" approved="yes">
<source>Items per page</source>
@@ -1522,13 +1522,13 @@
</context-group>
<target state="final">Droits d'accès par défaut</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Les paramètres sappliquent à ce compte utilisateur pour les objets (étiquettes, règles de courriel, etc. à lexception des documents) créés via linterface web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
<source>Default Owner</source>
@@ -2484,7 +2484,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">66</context>
</context-group>
<target state="translated">Fichier à consommer</target>
<target state="needs-translation">Consume File</target>
</trans-unit>
<trans-unit id="5622386857946132209" datatype="html">
<source>Train Classifier</source>
@@ -2492,7 +2492,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">70</context>
</context-group>
<target state="translated">Entrainer le classificateur</target>
<target state="needs-translation">Train Classifier</target>
</trans-unit>
<trans-unit id="776309955507105337" datatype="html">
<source>Sanity Check</source>
@@ -2520,7 +2520,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">77</context>
</context-group>
<target state="translated">Index LLM</target>
<target state="needs-translation">LLM Index</target>
</trans-unit>
<trans-unit id="6402092370576716734" datatype="html">
<source>Empty Trash</source>
@@ -2528,7 +2528,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">80</context>
</context-group>
<target state="translated">Vider la corbeille</target>
<target state="translated">Vider la poubelle</target>
</trans-unit>
<trans-unit id="4173754487295857311" datatype="html">
<source>Check Workflows</source>
@@ -2536,7 +2536,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">84</context>
</context-group>
<target state="translated">Processus de contrôle</target>
<target state="needs-translation">Check Workflows</target>
</trans-unit>
<trans-unit id="2065831805515896240" datatype="html">
<source>Bulk Update</source>
@@ -2560,7 +2560,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">96</context>
</context-group>
<target state="translated">Créer un lien de partage</target>
<target state="needs-translation">Build Share Link</target>
</trans-unit>
<trans-unit id="6581973658756561124" datatype="html">
<source>Bulk Delete</source>
@@ -2696,7 +2696,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">348</context>
</context-group>
<target state="translated">Confirmer « Tout ignorer »</target>
<target state="needs-translation">Confirm Dismiss All</target>
</trans-unit>
<trans-unit id="4157200209636243740" datatype="html">
<source>Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</source>
@@ -2704,7 +2704,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">349</context>
</context-group>
<target state="translated">Ignorer toutes (<x id="PH" equiv-text="this.totalTasks()"/>) les tâches ?</target>
<target state="needs-translation">Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</target>
</trans-unit>
<trans-unit id="8149502458056418229" datatype="html">
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
@@ -2724,7 +2724,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">452</context>
</context-group>
<target state="translated">Doublon du document #<x id="PH" equiv-text="duplicateOf"/></target>
<target state="needs-translation">Duplicate of document #<x id="PH" equiv-text="duplicateOf"/></target>
</trans-unit>
<trans-unit id="3418677553313974490" datatype="html" approved="yes">
<source>Trash</source>
@@ -2772,7 +2772,7 @@
<context context-type="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
<context context-type="linenumber">89</context>
</context-group>
<target state="translated">Supprimer la sélection</target>
<target state="translated">Effacer le(s) sélectionné(s)</target>
</trans-unit>
<trans-unit id="8597030111956627342" datatype="html" approved="yes">
<source>Empty trash</source>
@@ -2984,7 +2984,7 @@
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
<context context-type="linenumber">78</context>
</context-group>
<target state="translated">Cette opération supprimera définitivement ce document.</target>
<target state="translated">Cette opération effacera définitivement ce document.</target>
</trans-unit>
<trans-unit id="5641451190833696892" datatype="html" approved="yes">
<source>This operation cannot be undone.</source>
@@ -3048,7 +3048,7 @@
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
<context context-type="linenumber">111</context>
</context-group>
<target state="translated">Cette action supprimera définitivement les documents sélectionnés.</target>
<target state="translated">Cette action effacera définitivement les documents sélectionnés.</target>
</trans-unit>
<trans-unit id="6804051092296228130" datatype="html">
<source>This operation will permanently delete all documents in the trash.</source>
@@ -3056,7 +3056,7 @@
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
<context context-type="linenumber">112</context>
</context-group>
<target state="translated">Cette opération supprimera définitivement tous les documents de la corbeille.</target>
<target state="translated">Cette opération effacera définitivement tous les documents de la corbeille.</target>
</trans-unit>
<trans-unit id="6996183233986182894" datatype="html">
<source>Document(s) deleted</source>
@@ -3064,7 +3064,7 @@
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
<context context-type="linenumber">123</context>
</context-group>
<target state="translated">Document(s) supprimé(s)</target>
<target state="translated">Document(s) effacé(s)</target>
</trans-unit>
<trans-unit id="6962724852893361467" datatype="html">
<source>Error deleting document(s)</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Réinitialiser</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Oui</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html" approved="yes">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -5780,7 +5764,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">158</context>
</context-group>
<target state="translated">Déclenche pour les documents qui correspondent à <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>tous<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> les filtres spécifiés ci-dessous.</target>
<target state="translated">Déclenche pour les documents qui correspondent à <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>tous<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/>les filtres spécifiés ci-dessous.</target>
</trans-unit>
<trans-unit id="7467799586957602479" datatype="html">
<source>Filter filename</source>
@@ -6100,7 +6084,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">418</context>
</context-group>
<target state="translated">URL du webhook</target>
<target state="translated">URL du Webhook</target>
</trans-unit>
<trans-unit id="7491983459027245019" datatype="html">
<source>Use parameters for webhook body</source>
@@ -6132,7 +6116,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">426</context>
</context-group>
<target state="translated">Corps du webhook</target>
<target state="translated">Corps du Webhook</target>
</trans-unit>
<trans-unit id="3829826512656746316" datatype="html">
<source>Webhook headers</source>
@@ -6140,7 +6124,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">428</context>
</context-group>
<target state="translated">En-têtes du webhook</target>
<target state="translated">En-têtes Webhook</target>
</trans-unit>
<trans-unit id="2114525789021600887" datatype="html">
<source>Include document</source>
@@ -6156,7 +6140,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
<context context-type="linenumber">436,438</context>
</context-group>
<target state="translated"> Un mot de passe par ligne. Le workflow les essaiera dans l'ordre jusqu'à ce qu'un réussisse. </target>
<target state="translated"> Un mot de passe par ligne. Le workflow va les essayer dans l'ordre jusqu'à ce que l'un d'entre eux réussisse. </target>
</trans-unit>
<trans-unit id="3853121441237751087" datatype="html">
<source>Passwords</source>
@@ -7614,7 +7598,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-manage-dialog/share-link-bundle-manage-dialog.component.html</context>
<context context-type="linenumber">62</context>
</context-group>
<target state="translated">Afficher les détails de l'erreur</target>
<target state="needs-translation">View error details</target>
</trans-unit>
<trans-unit id="2057574872309338088" datatype="html">
<source>Copy share link</source>
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrer par propriétaire</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Oui</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -8660,7 +8656,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">318</context>
</context-group>
<target state="translated">Somme de contrôle SHA256 de l'original</target>
<target state="needs-translation">Original SHA256 checksum</target>
</trans-unit>
<trans-unit id="5888243105821763422" datatype="html" approved="yes">
<source>Original file size</source>
@@ -8684,7 +8680,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">331</context>
</context-group>
<target state="translated">Somme de contrôle SHA256 de l'archive</target>
<target state="needs-translation">Archive SHA256 checksum</target>
</trans-unit>
<trans-unit id="6033581412811562084" datatype="html" approved="yes">
<source>Archive file size</source>
@@ -8740,7 +8736,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">407</context>
</context-group>
<target state="translated">Documents en double détectés :</target>
<target state="translated">Documents en double détectés:</target>
</trans-unit>
<trans-unit id="14058600336670816" datatype="html">
<source>In trash</source>
@@ -8936,7 +8932,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1271</context>
</context-group>
<target state="translated">Erreur lors de la sauvegarde du document "<x id="PH" equiv-text="this.document().title"/>"</target>
<target state="needs-translation">Error saving document "<x id="PH" equiv-text="this.document().title"/>"</target>
</trans-unit>
<trans-unit id="448882439049417053" datatype="html" approved="yes">
<source>Error saving document</source>
@@ -9232,7 +9228,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
<context context-type="linenumber">224</context>
</context-group>
<target state="translated">ID de tâche manquant.</target>
<target state="needs-translation">Missing task ID.</target>
</trans-unit>
<trans-unit id="205445381296663832" datatype="html">
<source>Upload failed.</source>
@@ -9252,7 +9248,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
<context context-type="linenumber">274</context>
</context-group>
<target state="translated">Erreur lors du téléversement de la nouvelle version</target>
<target state="needs-translation">Error uploading new version</target>
</trans-unit>
<trans-unit id="6299008920007331381" datatype="html" approved="yes">
<source>Edit:</source>
@@ -10279,7 +10275,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">212</context>
</context-group>
<target state="translated">Champs personnalisés (Obsolète)</target>
<target state="needs-translation">Custom fields (Deprecated)</target>
</trans-unit>
<trans-unit id="2649431021108393503" datatype="html" approved="yes">
<source>More like</source>
@@ -10415,7 +10411,7 @@
<context context-type="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
<context context-type="linenumber">332</context>
</context-group>
<target state="translated">Titre &amp; contenu : <x id="PH" equiv-text="rule.value"/></target>
<target state="needs-translation">Title &amp; content: <x id="PH" equiv-text="rule.value"/></target>
</trans-unit>
<trans-unit id="1872523635812236432" datatype="html" approved="yes">
<source>ASN: <x id="PH" equiv-text="rule.value"/></source>
@@ -10939,7 +10935,7 @@
<context context-type="sourcefile">src/app/components/manage/document-attributes/management-list/management-list.component.ts</context>
<context context-type="linenumber">453</context>
</context-group>
<target state="translated">Cette action supprimera définitivement les <x id="PH" equiv-text="this.typeNamePlural"/> documents sélectionnés.</target>
<target state="translated">Cette action effacera définitivement les <x id="PH" equiv-text="this.typeNamePlural"/> documents sélectionnés.</target>
</trans-unit>
<trans-unit id="5897787932098828336" datatype="html">
<source>Objects deleted successfully</source>
@@ -12184,7 +12180,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">365</context>
</context-group>
<target state="translated">Délai d'attente des requêtes LLM</target>
<target state="needs-translation">LLM Request Timeout</target>
</trans-unit>
<trans-unit id="483994032066441287" datatype="html">
<source>Timeout in seconds for LLM requests.</source>
@@ -12192,7 +12188,7 @@
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
<context context-type="linenumber">369</context>
</context-group>
<target state="translated">Délai d'attente en secondes pour les requêtes LLM.</target>
<target state="needs-translation">Timeout in seconds for LLM requests.</target>
</trans-unit>
<trans-unit id="9155387182259025015" datatype="html">
<source>Processing</source>
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="final">La migration des paramètres vers la base de données a été effectuée avec succès !</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="final">Impossible de migrer les paramètres vers la base de données, veuillez essayer denregistrer manuellement.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="final">Vous pouvez recommencer la visite depuis les paramètres.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">הרשאות ברירת מחדל</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> ההגדרות חלות על חשבון משתמש זה עבור אובייקטים (תגים, כללי דואר וכו'. אבל לא מסמכים) שנוצרו באמצעות ממשק המשתמש באינטרנט. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">ניקוי</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">כן</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">סינון לפי בעלים</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">כן</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">הושלמה בהצלחה העברה חד פעמית של הגדרות למסד הנתונים!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">לא ניתן לבצע העברה של הגדרות למסד הנתונים, נסה לשמור באופן ידני.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="needs-translation">Clear</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Zadane ovlasti</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated">Postavke se primjenjuju na ovaj korisnički račun za objekte (oznake, pravila pošte, itd. ali ne i dokumente) stvorene putem web sučelja.</target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Očisti</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Da</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtriraj po vlasniku</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Da</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Jednokratna migracija postavki u bazu podataka uspješno završena!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nije moguće migrirati postavke u bazu podataka, pokušajte ručno spremiti.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Možete ponovo pokrenuti obilazak sa stranice postavki.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Alapértelmezett engedélyek</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> A beállítások erre a felhasználói fiókra vonatkoznak a webes felületen létrehozott objektumok (címkék, levelezési szabályok stb. de nem a dokumentumok) esetében. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Törlés</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Igen</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Szűrés tulajdonos szerint</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Igen</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Sikeresen befejeződött a beállítások egyszeri migrálása az adatbázisba!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nem sikerült a beállításokat az adatbázisba migrálni, kérjük, próbálja meg manuálisan menteni.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">A túrát a beállítások oldalról indíthatja újra.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Izin bawaan</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Pengaturan berlaku untuk akun pengguna ini pada objek (Tag, Aturan Email, dsb. namun bukan dokumen) yang dibuat lewat antarmuka web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Bersihkan</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ya</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Saring berdasarkan pemilik</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ya</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Berhasil menyelesaikan migrasi pengaturan satu kali ke basis data!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Tidak dapat memigrasikan pengaturan ke basis data, silakan coba simpan secara manual.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Anda dapat memulai ulang tur dari halaman pengaturan.</target>
</trans-unit>
+19 -23
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Autorizzazioni predefinite</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="translated"> Le impostazioni si applicano a questo account utente per oggetti (Tag, Regole postali, ecc.) creati tramite l'interfaccia utente web. Queste impostazioni non sono applicabili ai documenti. </target>
<target state="translated"> Le impostazioni si applicano a questo account utente per gli oggetti (tag, regole di posta, ecc. ma non documenti) creati tramite l'interfaccia utente web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Pulisci</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Sì</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtra per proprietario</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Sì</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -9720,7 +9716,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<target state="translated"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> miniatura</target>
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> thumbnail</target>
</trans-unit>
<trans-unit id="2784168796433474565" datatype="html" approved="yes">
<source>Filter by tag</source>
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Migrazione una tantum delle impostazioni al database completata con successo!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Impossibile migrare le impostazioni nel database. Prova a salvarle manualmente.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Puoi riavviare il tour dalla pagina delle impostazioni.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">デフォルト権限</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> 設定はWeb UI 経由で作成されたオブジェクト (タグ、メール ルールなど、ドキュメントは除く) に対してこのユーザー アカウントに適用されます。 </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">解除</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">はい</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">所有者で絞り込む</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">はい</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">データベースへのワンタイム設定移行が正常に完了しました!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">データベースに設定を移行できません。手動で保存してみてください。</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">設定ページからツアーを再開することができます</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">기본 권한</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> 이 사용자 계정에는 웹 UI를 통해 만든 개체(문서가 아닌 태그, 메일 규칙 등)에 대한 설정이 적용됩니다 </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">지우기</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">예</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">예</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">데이터베이스에 대한 설정의 일회성 마이그레이션을 성공적으로 완료했습니다!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">설정을 데이터베이스로 마이그레이션할 수 없는 경우 수동으로 저장해 보세요.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">나중에 설정 페이지에서 다시 둘러보기를 할 수 있습니다.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Standardberechtegungen</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Läschen</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Jo</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Jo</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Išvalyti</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Taip</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Taip</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Nustatymų perkėlimas į duomenų bazę sėkmingai atliktas!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nepavyko perkelti nustatymų į duomenų bazę, pabandykite išsaugoti rankiniu būdu.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Ekskursiją galite paleisti iš naujo nustatymų puslapyje.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Noklusētās atļaujas</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Notīrīt</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="needs-translation">Clear</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="needs-translation">Clear</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="needs-translation">Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Standaard rechten</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Instellingen zijn van toepassing op dit account voor objecten (tags, mailregels, enz., maar niet op documenten) die via de webinterface zijn aangemaakt. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Leegmaken</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filter op eigenaar</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Eenmalige migratie van instellingen naar de database is succesvol voltooid!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Kan instellingen niet migreren naar de database, probeer handmatig op te slaan.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Je kan de rondleiding herstarten vanaf de instellingen pagina.</target>
</trans-unit>
+27 -31
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Standardtillatelser</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="translated"> Innstillinger gjelder denne brukerkontoen for objekter (Etiketter, postregler, etc.) som er opprettet via web-grensesnittet. Disse innstillingene gjelder ikke for dokumenter. </target>
<target state="translated"> Innstillingene gjelder denne brukerkontoen for objekter (Merker, postregler, etc. men ikke dokumenter) opprettet via webgrensesnittet. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -2076,7 +2076,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<target state="translated">Søk oppgaver</target>
<target state="needs-translation">Search tasks</target>
</trans-unit>
<trans-unit id="6849725902312323996" datatype="html">
<source>Reset filters</source>
@@ -2620,7 +2620,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">123</context>
</context-group>
<target state="translated">E-post-import</target>
<target state="translated">E-postforbruk</target>
</trans-unit>
<trans-unit id="29832309535656200" datatype="html">
<source>System</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Tøm</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -4924,7 +4908,7 @@
<context context-type="sourcefile">src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html</context>
<context context-type="linenumber">32</context>
</context-group>
<target state="translated">Paperless vil bare behandle e-poster som passer til <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>hele<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> av kriteriene som er angitt nedenfor.</target>
<target state="translated">Paperløst vil bare behandle e-poster som passer til <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/>hele<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> av kriteriene som er angitt nedenfor.</target>
</trans-unit>
<trans-unit id="7046259383943324039" datatype="html">
<source>Folder</source>
@@ -6810,7 +6794,7 @@
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
<context context-type="linenumber">56</context>
</context-group>
<target state="translated">Filtrer dokumenter med disse etikettene</target>
<target state="translated">Filtrer dokumenter med disse Etikettene</target>
</trans-unit>
<trans-unit id="1400555558847223243" datatype="html">
<source>Suggestion:</source>
@@ -7478,7 +7462,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.html</context>
<context context-type="linenumber">68</context>
</context-group>
<target state="translated">Del kobling</target>
<target state="needs-translation">Share link</target>
</trans-unit>
<trans-unit id="2618101617221155143" datatype="html">
<source>Copy link</source>
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrer etter eier</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -8416,7 +8412,7 @@
<context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<target state="translated">Søker etter dokument med asn<x id="INTERPOLATION" equiv-text="{{asn()}}"/></target>
<target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn()}}"/></target>
</trans-unit>
<trans-unit id="1407560924967345762" datatype="html">
<source>Page</source>
@@ -9720,7 +9716,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<target state="translated"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> miniatyr</target>
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> thumbnail</target>
</trans-unit>
<trans-unit id="2784168796433474565" datatype="html">
<source>Filter by tag</source>
@@ -10008,7 +10004,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">135</context>
</context-group>
<target state="translated">{VAR_PLURAL, plural, one {}=1 {1 dokument} other {<x id="INTERPOLATION"/> dokumenter}}</target>
<target state="translated">{VAR_PLURAL, plural, one {}=1 {1 dokument} other {E-post <x id="INTERPOLATION"/> dokumenter}}</target>
</trans-unit>
<trans-unit id="2243770355958919528" datatype="html">
<source>(filtered)</source>
@@ -11328,7 +11324,7 @@
<context context-type="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
<context context-type="linenumber">29</context>
</context-group>
<target state="translated">Velg alle behandlede e-postmeldinger</target>
<target state="needs-translation">Select all processed email messages</target>
</trans-unit>
<trans-unit id="8691920320483720007" datatype="html">
<source>Received</source>
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Engangs migrering av innstillinger ble fullført til databasen!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Kunne ikke overføre innstillinger til databasen, prøv å lagre manuelt.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Du kan starte omvisningen på nytt fra innstillingssiden.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Domyślnie uprawnienia</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated">Ustawienia dotyczą tego konta użytkownika dla obiektów (tagów, reguł poczty itd., ale nie dokumentów) tworzonych przez interfejs webowy.</target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Wyczyść</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Tak</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtruj wg właściciela</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Tak</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Pomyślnie zakończona jednorazowa migracja ustawień do bazy danych!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nie można przenieść ustawień do bazy danych, spróbuj zapisać ręcznie.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Możesz ponownie uruchomić przegląd aplikacji ze strony ustawień.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Permissões Padrão</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> As configurações se aplicam a esta conta de usuário para objetos (Tags, Regras de Mail, etc. mas não para documentos) criados através da interface web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Limpar</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Sim</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8217,6 +8201,18 @@ Erro ao enviar documentos por e-mail</target>
</context-group>
<target state="translated">Filtrar por proprietário</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Sim</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12776,7 +12772,7 @@ Erro ao enviar documentos por e-mail</target>
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">A migração de configurações para o banco de dados foi concluída com sucesso!</target>
</trans-unit>
@@ -12784,7 +12780,7 @@ Erro ao enviar documentos por e-mail</target>
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Não foi possível migrar as configurações para o banco de dados, por favor tente salvar manualmente.</target>
</trans-unit>
@@ -12792,7 +12788,7 @@ Erro ao enviar documentos por e-mail</target>
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Você pode reiniciar o tour na página de configurações..</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Permissões predefinidas</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated">As configurações se aplicam a esta conta de utilizador para objetos (Etiquetas, Regras de Mail, etc. mas não documentos) criados através da interface web.</target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Limpar</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Sim</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Sim</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Terminado com sucesso a migração única das definições na base de dados!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Incapaz de migrar as definições na base de dados, por favor, tente gravar manualmente.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Pode reiniciar o tutorial através da página das Configurações.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Permisiuni implicite</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Setările se aplică acestui cont de utilizator pentru obiecte (Etichete, Reguli de Mail etc. dar nu documente) create prin interfața web. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Curăță</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Da</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrare după proprietar</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Da</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Migrarea unică a setărilor în baza de date a fost finalizată cu succes!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nu s-a putut migra setările în baza de date. Te rugăm să încerci să le salvezi manual.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Poți reporni turul din pagina de setări.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Права по умолчанию</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated">Настройки применятся для этой учеткой записи к объектам (Теги, Почтовые правила, и т.д, но не к документам), созданным через Веб-интерфейс</target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Очистить</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Да</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Фильтровать по владельцу</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Да</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12774,7 +12770,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Одноразовая миграция настроек в базу данных завершена!</target>
</trans-unit>
@@ -12782,7 +12778,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Не удается перенести настройки в базу данных, пожалуйста, попробуйте сохранить вручную.</target>
</trans-unit>
@@ -12790,7 +12786,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Вы можете перезапустить тур со страницы настроек.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Predvolené povolenia</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Vymazať</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Áno</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrovať podľa vlastníka</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Áno</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Migrácia nastavení do databázy úspešne ukončená!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nie je možné migrovať nastavenia do databázy, skúste uložiť manuálne.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Sprievodcu môžete znova spustiť z nastavení.</target>
</trans-unit>
+40 -44
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Privzeta dovoljenja</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="translated"> Nastavitve veljajo za ta uporabniški račun za objekte (oznake, pravila za pošto itd.), ustvarjene prek spletnega uporabniškega vmesnika. Te nastavitve ne veljajo za dokumente. </target>
<target state="translated"> Nastavitve veljajo za ta uporabniški račun za objekte (oznake, pravila za pošto itd., ne pa za dokumente), ustvarjene prek spletnega uporabniškega vmesnika. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -2076,7 +2076,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
<context context-type="linenumber">96</context>
</context-group>
<target state="translated">Iskanje nalog</target>
<target state="needs-translation">Search tasks</target>
</trans-unit>
<trans-unit id="6849725902312323996" datatype="html">
<source>Reset filters</source>
@@ -2704,7 +2704,7 @@
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
<context context-type="linenumber">349</context>
</context-group>
<target state="translated">Opustim vse naloge <x id="PH" equiv-text="this.totalTasks()"/>?</target>
<target state="needs-translation">Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</target>
</trans-unit>
<trans-unit id="8149502458056418229" datatype="html">
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Počisti</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Da</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -7378,7 +7362,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.html</context>
<context context-type="linenumber">22</context>
</context-group>
<target state="translated">+ <x id="INTERPOLATION" equiv-text="{{ selectionCount() - documentPreview().length }}"/> več…</target>
<target state="needs-translation">+ <x id="INTERPOLATION" equiv-text="{{ selectionCount() - documentPreview().length }}"/> more…</target>
</trans-unit>
<trans-unit id="8037476586059399916" datatype="html">
<source>Expires</source>
@@ -7478,7 +7462,7 @@
<context context-type="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.html</context>
<context context-type="linenumber">68</context>
</context-group>
<target state="translated">Deli povezavo</target>
<target state="needs-translation">Share link</target>
</trans-unit>
<trans-unit id="2618101617221155143" datatype="html">
<source>Copy link</source>
@@ -7942,7 +7926,7 @@
<context context-type="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
<context context-type="linenumber">147</context>
</context-group>
<target state="translated">Nedavna aktivnost opravila <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;small text-muted fw-light&quot;&gt;"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> dni)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
<target state="needs-translation">Recent Task Activity <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;small text-muted fw-light&quot;&gt;"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> days)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></target>
</trans-unit>
<trans-unit id="3448462145758383019" datatype="html">
<source>Total</source>
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtriraj po lastniku</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Da</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -8416,7 +8412,7 @@
<context context-type="sourcefile">src/app/components/document-asn/document-asn.component.html</context>
<context context-type="linenumber">1</context>
</context-group>
<target state="translated">Iskanje dokumenta z asn <x id="INTERPOLATION" equiv-text="{{asn()}}"/></target>
<target state="needs-translation">Searching document with asn <x id="INTERPOLATION" equiv-text="{{asn()}}"/></target>
</trans-unit>
<trans-unit id="1407560924967345762" datatype="html">
<source>Page</source>
@@ -8440,7 +8436,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">7,8</context>
</context-group>
<target state="translated">od <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></target>
<target state="needs-translation">of <x id="INTERPOLATION" equiv-text="{{previewNumPages()}}"/></target>
</trans-unit>
<trans-unit id="8590109102084543521" datatype="html">
<source>-</source>
@@ -8660,7 +8656,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">318</context>
</context-group>
<target state="translated">Izvirna kontrolna vsota SHA256</target>
<target state="needs-translation">Original SHA256 checksum</target>
</trans-unit>
<trans-unit id="5888243105821763422" datatype="html">
<source>Original file size</source>
@@ -8684,7 +8680,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">331</context>
</context-group>
<target state="translated">Arhivska kontrolna vsota SHA256</target>
<target state="needs-translation">Archive SHA256 checksum</target>
</trans-unit>
<trans-unit id="6033581412811562084" datatype="html">
<source>Archive file size</source>
@@ -8716,7 +8712,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">368,371</context>
</context-group>
<target state="translated">Opombe <x id="START_BLOCK_IF" equiv-text="@if (document()?.notes.length) {"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge text-bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/><x id="CLOSE_BLOCK_IF" equiv-text="}"/></target>
<target state="needs-translation">Notes <x id="START_BLOCK_IF" equiv-text="@if (document()?.notes.length) {"/><x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge text-bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="length}}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/><x id="CLOSE_BLOCK_IF" equiv-text="}"/></target>
</trans-unit>
<trans-unit id="186236568870281953" datatype="html">
<source>History</source>
@@ -8732,7 +8728,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
<context context-type="linenumber">401,405</context>
</context-group>
<target state="translated"> Dvojniki <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge text-bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="cate_documents.length }}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/></target>
<target state="needs-translation"> Duplicates <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;badge text-bg-secondary ms-1&quot;&gt;"/><x id="INTERPOLATION" equiv-text="cate_documents.length }}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/></target>
</trans-unit>
<trans-unit id="6449374629822973702" datatype="html">
<source>Duplicate documents detected:</source>
@@ -8936,7 +8932,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1271</context>
</context-group>
<target state="translated">Napaka pri shranjevanju dokumenta "<x id="PH" equiv-text="this.document().title"/>"</target>
<target state="needs-translation">Error saving document "<x id="PH" equiv-text="this.document().title"/>"</target>
</trans-unit>
<trans-unit id="448882439049417053" datatype="html">
<source>Error saving document</source>
@@ -8952,7 +8948,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1359</context>
</context-group>
<target state="translated">Ali res želite premakniti dokument "<x id="PH" equiv-text="this.document().title"/>" v koš?</target>
<target state="needs-translation">Do you really want to move the document "<x id="PH" equiv-text="this.document().title"/>" to the trash?</target>
</trans-unit>
<trans-unit id="282586936710748252" datatype="html">
<source>Documents can be restored prior to permanent deletion.</source>
@@ -9008,7 +9004,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1413</context>
</context-group>
<target state="translated">V ozadju se bo začel postopek ponovne obdelave za "<x id="PH" equiv-text="this.document().title"/>".</target>
<target state="needs-translation">Reprocess operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</target>
</trans-unit>
<trans-unit id="4409560272830824468" datatype="html">
<source>Error executing operation</source>
@@ -9040,7 +9036,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1808</context>
</context-group>
<target state="translated">Urejanje PDF-ja za "<x id="PH" equiv-text="this.document().title"/>" se bo začelo v ozadju.</target>
<target state="needs-translation">PDF edit operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</target>
</trans-unit>
<trans-unit id="9043972994040261999" datatype="html">
<source>Error executing PDF edit operation</source>
@@ -9064,7 +9060,7 @@
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
<context context-type="linenumber">1865</context>
</context-group>
<target state="translated">Operacija odstranitve gesla za "<x id="PH" equiv-text="this.document().title"/>" se bo začela v ozadju.</target>
<target state="needs-translation">Password removal operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</target>
</trans-unit>
<trans-unit id="2282118435712883014" datatype="html">
<source>Error executing password removal operation</source>
@@ -9720,7 +9716,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
<target state="translated"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> sličica</target>
<target state="needs-translation"><x id="INTERPOLATION" equiv-text="document().title | documentTitle }}"/> thumbnail</target>
</trans-unit>
<trans-unit id="2784168796433474565" datatype="html">
<source>Filter by tag</source>
@@ -9756,7 +9752,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">95,96</context>
</context-group>
<target state="translated">Ustvarjeno: <x id="INTERPOLATION" equiv-text="{{ document().created | customDate }}"/></target>
<target state="needs-translation">Created: <x id="INTERPOLATION" equiv-text="{{ document().created | customDate }}"/></target>
</trans-unit>
<trans-unit id="2030261243264601523" datatype="html">
<source>Added: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></source>
@@ -9772,7 +9768,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">96,97</context>
</context-group>
<target state="translated">Dodano: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></target>
<target state="needs-translation">Added: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></target>
</trans-unit>
<trans-unit id="4235671847487610290" datatype="html">
<source>Modified: <x id="INTERPOLATION" equiv-text="{{ document().modified | customDate }}"/></source>
@@ -9788,7 +9784,7 @@
<context context-type="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
<context context-type="linenumber">97,98</context>
</context-group>
<target state="translated">Spremenjeno: <x id="INTERPOLATION" equiv-text="{{ document().modified | customDate }}"/></target>
<target state="needs-translation">Modified: <x id="INTERPOLATION" equiv-text="{{ document().modified | customDate }}"/></target>
</trans-unit>
<trans-unit id="197162226430950645" datatype="html">
<source>{VAR_PLURAL, plural, =1 {1 page} other {<x id="INTERPOLATION"/> pages}}</source>
@@ -11312,7 +11308,7 @@
<context context-type="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
<target state="translated">Obdelana pošta za <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/><x id="INTERPOLATION" equiv-text="{{ rule().name }}"/><x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
<target state="needs-translation">Processed Mail for <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;em&gt;"/><x id="INTERPOLATION" equiv-text="{{ rule().name }}"/><x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/></target>
</trans-unit>
<trans-unit id="1991019495862291373" datatype="html">
<source>No processed email messages found.</source>
@@ -11328,7 +11324,7 @@
<context context-type="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
<context context-type="linenumber">29</context>
</context-group>
<target state="translated">Izberi vsa obdelana e-poštna sporočila</target>
<target state="needs-translation">Select all processed email messages</target>
</trans-unit>
<trans-unit id="8691920320483720007" datatype="html">
<source>Received</source>
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Uspešno opravljena enkratna migracija nastavitev v bazo!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nastavitev ni mogoče preseliti v bazo podatkov, poskusite jih shraniti ročno.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Ogled lahko ponovite v nastavitvah.</target>
</trans-unit>
+18 -22
View File
@@ -1523,13 +1523,13 @@
</context-group>
<target state="translated">[SQ] Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3959,22 +3959,6 @@
</context-group>
<target state="translated">[SQ] Clear</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">[SQ] Yes</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8217,6 +8201,18 @@
</context-group>
<target state="translated">[SQ] Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">[SQ] Yes</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12776,7 +12772,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">[SQ] Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12784,7 +12780,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">[SQ] Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12792,7 +12788,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">[SQ] You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Podrazumevane dozvole</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Podešavanja se primenjuju na ovaj korisnički nalog za objekte (oznake, pravila za poštu i slično, ali ne i za dokumente) kreirane putem veb interfejsa. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Očisti</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Da</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtriraj po vlasniku</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Da</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12776,7 +12772,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Uspešno završena jednokratna migracija podešavanja u bazu podataka!</target>
</trans-unit>
@@ -12784,7 +12780,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Nije moguće preneti podešavanja u bazu podataka, pokušajte da ih sačuvate ručno.</target>
</trans-unit>
@@ -12792,7 +12788,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Možete ponovo da pokrenete obilazak sa stranice sa podešavanjima.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Standardbehörigheter</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="final">Rensa</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Filtrera efter ägare</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Ja</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Slutförde engångsmigreringen av inställningarna till databasen!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Kunde inte migrera inställningarna till databasen, försök spara manuellt.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Du kan starta om rundturen från inställningssidan.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="needs-translation">Default Permissions</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">ล้าง</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">ใช่</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="needs-translation">Filter by owner</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">ใช่</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="needs-translation">You can restart the tour from the settings page.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Varsayılan İzinler</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> Ayarlar, web kullanıcı arayüzü üzerinden oluşturulan nesneler (Etiketler, Posta Kuralları vb., ancak belgeler hariç) bu kullanıcı hesabına uygulanır </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Temizle</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Evet</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8218,6 +8202,18 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> krite
</context-group>
<target state="translated">Sahibine göre filtrele</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Evet</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12776,7 +12772,7 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> krite
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Ayarların veritabanına tek seferlik taşıma işlemi başarıyla tamamlandı!</target>
</trans-unit>
@@ -12784,7 +12780,7 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> krite
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Ayarları veritabanına taşıyamıyoruz, lütfen manuel olarak kaydetmeyi deneyin.</target>
</trans-unit>
@@ -12792,7 +12788,7 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="&lt;/em&gt;"/> krite
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Ayarlar sayfasından turu yeniden başlatabilirsiniz.</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">Типові дозволи</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">Очистити</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Так</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">Фільтрувати за власником</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">Так</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">Успішно завершено одноразову міграцію параметрів до бази даних!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">Не вдається перенести налаштування в базу даних, спробуйте зберегти вручну.</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">Ви можете пройти знайомство ще раз зі сторінки налаштувань.</target>
</trans-unit>
+20 -22
View File
@@ -1522,13 +1522,15 @@
</context-group>
<target state="final">Phân quyền mặc định</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html" approved="yes">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="final">
Cài đặt áp dụng cho tài khoản người dùng này cho các đối tượng (thẻ, quy tắc thư, v.v. nhưng không phải tài liệu) được tạo thông qua giao diện người dùng web.
</target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
<source>Default Owner</source>
@@ -3976,22 +3978,6 @@
</context-group>
<target state="final">Xóa bỏ</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Đúng</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html" approved="yes">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8262,6 +8248,18 @@
</context-group>
<target state="final">Lọc theo chủ sở hữu</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html" approved="yes">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="final">Đúng</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
<source>No</source>
<context-group purpose="location">
@@ -12909,7 +12907,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="final">quá trình cập nhật dữ liệu cấu hình</target>
</trans-unit>
@@ -12917,7 +12915,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="final">cập nhật dữ liệu cấu hình</target>
</trans-unit>
@@ -12925,7 +12923,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="final">khởi động lại hướng dẫn nhanh</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">默认权限</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> 对于通过网页界面创建的对象 (标签、邮件规则等,但不包括文档),这些设置将应用于此用户帐户。 </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">清除</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">是</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">按所有者筛选</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">是</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">成功完成设置一次性迁移到数据库!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">无法将设置迁移到数据库,请尝试手动保存。</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">你可以从设置页面重新开始导览。</target>
</trans-unit>
+18 -22
View File
@@ -1522,13 +1522,13 @@
</context-group>
<target state="translated">預設權限</target>
</trans-unit>
<trans-unit id="1267490156259885391" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </source>
<trans-unit id="6544153565064275581" datatype="html">
<source> Settings apply to this user account for objects (Tags, Mail Rules, etc. but not documents) created via the web UI. </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
<context context-type="linenumber">306,308</context>
</context-group>
<target state="needs-translation"> Settings apply to this user account for objects (Tags, Mail Rules, etc.) created via the web UI. These settings do not apply to documents. </target>
<target state="translated"> 此設定將套用至該使用者帳號,適用於透過網頁介面建立的項目(標籤、郵件規則等,但不包含文件)。 </target>
</trans-unit>
<trans-unit id="4292903881380648974" datatype="html">
<source>Default Owner</source>
@@ -3958,22 +3958,6 @@
</context-group>
<target state="translated">清除</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/confirm-button/confirm-button.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">是</target>
</trans-unit>
<trans-unit id="7515883357904500238" datatype="html">
<source>Are you sure?</source>
<context-group purpose="location">
@@ -8216,6 +8200,18 @@
</context-group>
<target state="translated">以擁有者篩選</target>
</trans-unit>
<trans-unit id="2807800733729323332" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html</context>
<context context-type="linenumber">102</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/document-list/document-list.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<target state="translated">是</target>
</trans-unit>
<trans-unit id="3542042671420335679" datatype="html">
<source>No</source>
<context-group purpose="location">
@@ -12775,7 +12771,7 @@
<source>Successfully completed one-time migratration of settings to the database!</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">635</context>
<context context-type="linenumber">636</context>
</context-group>
<target state="translated">設定值已成功移轉到資料庫!</target>
</trans-unit>
@@ -12783,7 +12779,7 @@
<source>Unable to migrate settings to the database, please try saving manually.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">636</context>
<context context-type="linenumber">637</context>
</context-group>
<target state="translated">無法將設定遷移至資料庫,請嘗試手動儲存。</target>
</trans-unit>
@@ -12791,7 +12787,7 @@
<source>You can restart the tour from the settings page.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
<context context-type="linenumber">708</context>
<context context-type="linenumber">709</context>
</context-group>
<target state="translated">可以從設定頁面重新開始導覽。</target>
</trans-unit>
View File
+342
View File
@@ -0,0 +1,342 @@
from __future__ import annotations
import abc
import hashlib
import json
import os
import shutil
import tempfile
import zipfile
from contextlib import AbstractContextManager
from contextlib import contextmanager
from pathlib import Path
from pathlib import PurePosixPath
from typing import TYPE_CHECKING
from django.conf import settings
from django.core.serializers.json import DjangoJSONEncoder
from documents.file_handling import delete_empty_directories
from documents.utils import compute_checksum
from documents.utils import copy_file_with_basic_stats
if TYPE_CHECKING:
from collections.abc import Iterator
from typing import TextIO
def _dumps(content: list | dict) -> str:
"""Serialize export JSON consistently across all sinks."""
return json.dumps(content, cls=DjangoJSONEncoder, indent=2, ensure_ascii=False)
class StreamingManifestWriter:
"""Incrementally writes a JSON array to a text handle, one record at a time.
Knows nothing about folders or zips: it writes the array framing and records
to whatever handle the sink's ``stream()`` yields. The sink owns the handle's
lifecycle (atomic rename, compare, spooling).
"""
def __init__(self, handle: TextIO) -> None:
self._file = handle
self._first = True
self._file.write("[")
def write_record(self, record: dict) -> None:
if not self._first:
self._file.write(",\n")
else:
self._first = False
self._file.write(_dumps(record))
def write_batch(self, records: list[dict]) -> None:
for record in records:
self.write_record(record)
def close(self) -> None:
"""Write the closing bracket. Does NOT close the handle (the sink owns it)."""
self._file.write("\n]")
class ExportSink(AbstractContextManager, abc.ABC):
"""Destination for a document export.
The command declares export contents via three verbs; the sink decides how to
persist each. ``arcname`` is always a relative POSIX path
(e.g. ``"manifest.json"``, ``"originals/foo.pdf"``).
Contract:
* At most one ``stream()`` open at a time (it is the manifest);
``add_file``/``add_json`` may be called while it is open.
* Context-manager: normal exit finalizes, an exception aborts. No partial or
failed run leaves a complete-looking artifact.
"""
@abc.abstractmethod
def add_file(
self,
source: Path,
arcname: str,
*,
checksum: str | None = None,
) -> None: ...
@abc.abstractmethod
def add_json(self, content: list | dict, arcname: str) -> None: ...
@abc.abstractmethod
def stream(self, arcname: str) -> AbstractContextManager[TextIO]: ...
def _open(self) -> None:
"""Hook called on context entry. Override as needed."""
@abc.abstractmethod
def _finalize(self) -> None:
"""Commit on clean exit."""
@abc.abstractmethod
def _abort(self) -> None:
"""Roll back on exception."""
def __enter__(self) -> ExportSink:
self._open()
return self
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
if exc_type is not None:
self._abort()
else:
self._finalize()
class DirectoryExportSink(ExportSink):
"""Writes loose files into a target directory, with incremental sync.
Owns the snapshot/skip/compare/prune machinery that used to live in the
command (``files_in_export_dir``, ``check_and_copy``, ``check_and_write_json``,
and the ``--delete`` pass).
"""
def __init__(
self,
target: Path,
*,
compare_checksums: bool,
compare_json: bool,
delete: bool,
) -> None:
self._target = target.resolve()
self._compare_checksums = compare_checksums
self._compare_json = compare_json
self._delete = delete
self._snapshot: set[Path] = set()
self._stream_open = False
def _open(self) -> None:
for x in self._target.glob("**/*"):
if x.is_file():
self._snapshot.add(x.resolve())
def add_file(
self,
source: Path,
arcname: str,
*,
checksum: str | None = None,
) -> None:
target = (self._target / arcname).resolve()
self._snapshot.discard(target)
perform_copy = False
if target.exists():
source_stat = source.stat()
target_stat = target.stat()
if self._compare_checksums and checksum:
perform_copy = compute_checksum(target) != checksum
elif (
source_stat.st_mtime != target_stat.st_mtime
or source_stat.st_size != target_stat.st_size
):
perform_copy = True
else:
perform_copy = True
if perform_copy:
target.parent.mkdir(parents=True, exist_ok=True)
copy_file_with_basic_stats(source, target)
@staticmethod
def _content_unchanged(target: Path, new_bytes: bytes) -> bool:
"""True if ``target`` already holds byte-identical content (BLAKE2b)."""
return (
hashlib.blake2b(target.read_bytes()).hexdigest()
== hashlib.blake2b(new_bytes).hexdigest()
)
def add_json(self, content: list | dict, arcname: str) -> None:
target = (self._target / arcname).resolve()
json_str = _dumps(content)
perform_write = True
if target in self._snapshot:
self._snapshot.discard(target)
if self._compare_json and self._content_unchanged(
target,
json_str.encode("utf-8"),
):
perform_write = False
if perform_write:
target.parent.mkdir(parents=True, exist_ok=True)
target.write_text(json_str, encoding="utf-8")
@contextmanager
def stream(self, arcname: str) -> Iterator[TextIO]:
if self._stream_open:
raise RuntimeError("A stream is already open on this sink")
target = (self._target / arcname).resolve()
tmp = target.with_suffix(target.suffix + ".tmp")
target.parent.mkdir(parents=True, exist_ok=True)
handle = tmp.open("w", encoding="utf-8")
self._stream_open = True
try:
yield handle
except BaseException:
handle.close()
tmp.unlink(missing_ok=True)
raise
else:
handle.close()
self._commit_streamed_file(target, tmp)
finally:
self._stream_open = False
def _commit_streamed_file(self, target: Path, tmp: Path) -> None:
if target in self._snapshot:
self._snapshot.discard(target)
if self._compare_json and self._content_unchanged(
target,
tmp.read_bytes(),
):
tmp.unlink()
return
tmp.rename(target)
def _finalize(self) -> None:
if self._delete:
for f in self._snapshot:
f.unlink()
delete_empty_directories(f.parent, self._target)
def _abort(self) -> None:
# Folder mode is in-place/incremental: streamed .tmp files are already
# cleaned in stream(); leave everything else intact and skip the prune.
return None
class ZipExportSink(ExportSink):
"""Writes a single zip archive, produced atomically only on success.
Builds into ``<target>/<zip_name>.zip.tmp`` and renames to ``.zip`` on clean
finalize. The manifest stream is spooled to a temp file in SCRATCH_DIR and
added as an entry at finalize (a zip entry cannot be interleaved with others).
"""
def __init__(self, target: Path, zip_name: str, *, delete: bool = False) -> None:
self._target = target.resolve()
self._zip_path = (self._target / zip_name).with_suffix(".zip")
self._tmp_path = self._zip_path.with_name(self._zip_path.name + ".tmp")
self._delete = delete
self._zip: zipfile.ZipFile | None = None
self._dirs: set[str] = set()
self._pending_manifest: tuple[Path, str] | None = None
self._stream_open = False
def _open(self) -> None:
settings.SCRATCH_DIR.mkdir(parents=True, exist_ok=True)
self._zip = zipfile.ZipFile(
self._tmp_path,
"w",
compression=zipfile.ZIP_DEFLATED,
allowZip64=True,
)
def _ensure_dirs(self, arcname: str) -> None:
assert self._zip is not None
dir_arc = ""
for part in PurePosixPath(arcname).parts[:-1]:
dir_arc += f"{part}/"
if dir_arc not in self._dirs:
self._dirs.add(dir_arc)
self._zip.mkdir(dir_arc)
def add_file(
self,
source: Path,
arcname: str,
*,
checksum: str | None = None,
) -> None:
assert self._zip is not None
self._ensure_dirs(arcname)
self._zip.write(source, arcname=arcname)
def add_json(self, content: list | dict, arcname: str) -> None:
assert self._zip is not None
self._ensure_dirs(arcname)
self._zip.writestr(arcname, _dumps(content))
@contextmanager
def stream(self, arcname: str) -> Iterator[TextIO]:
if self._stream_open:
raise RuntimeError("A stream is already open on this sink")
settings.SCRATCH_DIR.mkdir(parents=True, exist_ok=True)
fd, tmp_name = tempfile.mkstemp(
dir=settings.SCRATCH_DIR,
prefix="export-manifest-",
suffix=".json",
)
tmp = Path(tmp_name)
handle = os.fdopen(fd, "w", encoding="utf-8")
self._stream_open = True
try:
yield handle
except BaseException:
handle.close()
tmp.unlink(missing_ok=True)
raise
else:
handle.close()
self._pending_manifest = (tmp, arcname)
finally:
self._stream_open = False
def _finalize(self) -> None:
assert self._zip is not None
if self._pending_manifest is not None:
tmp, arcname = self._pending_manifest
self._ensure_dirs(arcname)
self._zip.write(tmp, arcname=arcname)
tmp.unlink(missing_ok=True)
self._pending_manifest = None
self._zip.close()
self._zip = None
if self._delete:
self._wipe_destination()
self._tmp_path.replace(self._zip_path)
def _wipe_destination(self) -> None:
skip = {self._zip_path.resolve(), self._tmp_path.resolve()}
for item in self._target.glob("*"):
if item.resolve() in skip:
continue
if item.is_dir():
shutil.rmtree(item)
else:
item.unlink()
def _abort(self) -> None:
if self._zip is not None:
self._zip.close()
self._zip = None
self._tmp_path.unlink(missing_ok=True)
if self._pending_manifest is not None:
self._pending_manifest[0].unlink(missing_ok=True)
self._pending_manifest = None
+2 -8
View File
@@ -161,9 +161,7 @@ class ObjectFilter(Filter):
class InboxFilter(Filter):
def filter(self, qs, value):
if value == "true":
# A document can have more than one tag flagged as an inbox tag
# (nothing enforces uniqueness), so this join can multiply rows.
return qs.filter(tags__is_inbox_tag=True).distinct()
return qs.filter(tags__is_inbox_tag=True)
elif value == "false":
return qs.exclude(tags__is_inbox_tag=True)
else:
@@ -270,10 +268,6 @@ class CustomFieldsFilter(Filter):
for _, option in enumerate(options):
if option.get("label").lower().find(value.lower()) != -1:
option_ids.extend([option.get("id")])
# A document with multiple custom field instances can match more
# than one of these OR-ed branches (or the same branch via
# different fields), each via its own join to custom_fields --
# dedupe explicitly rather than relying on the caller to.
return (
qs.filter(custom_fields__field__name__icontains=value)
| qs.filter(custom_fields__value_text__icontains=value)
@@ -286,7 +280,7 @@ class CustomFieldsFilter(Filter):
| qs.filter(custom_fields__value_document_ids__icontains=value)
| qs.filter(custom_fields__value_select__in=option_ids)
| qs.filter(custom_fields__value_long_text__icontains=value)
).distinct()
)
else:
return qs
@@ -1,8 +1,4 @@
import hashlib
import json
import os
import shutil
import tempfile
from itertools import islice
from pathlib import Path
from typing import TYPE_CHECKING
@@ -19,7 +15,6 @@ from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.core import serializers
from django.core.management.base import CommandError
from django.core.serializers.json import DjangoJSONEncoder
from django.db import transaction
from django.utils import timezone
from filelock import FileLock
@@ -34,7 +29,10 @@ if TYPE_CHECKING:
if settings.AUDIT_LOG_ENABLED:
from auditlog.models import LogEntry
from documents.file_handling import delete_empty_directories
from documents.export.sinks import DirectoryExportSink
from documents.export.sinks import ExportSink
from documents.export.sinks import StreamingManifestWriter
from documents.export.sinks import ZipExportSink
from documents.file_handling import generate_filename
from documents.management.commands.base import PaperlessCommand
from documents.management.commands.mixins import CryptMixin
@@ -60,8 +58,6 @@ from documents.settings import EXPORTER_ARCHIVE_NAME
from documents.settings import EXPORTER_FILE_NAME
from documents.settings import EXPORTER_SHARE_LINK_BUNDLE_NAME
from documents.settings import EXPORTER_THUMBNAIL_NAME
from documents.utils import compute_checksum
from documents.utils import copy_file_with_basic_stats
from paperless import version
from paperless.models import ApplicationConfiguration
from paperless_mail.models import MailAccount
@@ -84,87 +80,6 @@ def serialize_queryset_batched(
yield serializers.serialize("python", chunk)
class StreamingManifestWriter:
"""Incrementally writes a JSON array to a file, one record at a time.
Writes to <target>.tmp first; on close(), optionally BLAKE2b-compares
with the existing file (--compare-json) and renames or discards accordingly.
On exception, discard() deletes the tmp file and leaves the original intact.
"""
def __init__(
self,
path: Path,
*,
compare_json: bool = False,
files_in_export_dir: "set[Path] | None" = None,
) -> None:
self._path = path.resolve()
self._tmp_path = self._path.with_suffix(self._path.suffix + ".tmp")
self._compare_json = compare_json
self._files_in_export_dir: set[Path] = (
files_in_export_dir if files_in_export_dir is not None else set()
)
self._file = None
self._first = True
def open(self) -> None:
self._path.parent.mkdir(parents=True, exist_ok=True)
self._file = self._tmp_path.open("w", encoding="utf-8")
self._file.write("[")
self._first = True
def write_record(self, record: dict) -> None:
if not self._first:
self._file.write(",\n")
else:
self._first = False
self._file.write(
json.dumps(record, cls=DjangoJSONEncoder, indent=2, ensure_ascii=False),
)
def write_batch(self, records: list[dict]) -> None:
for record in records:
self.write_record(record)
def close(self) -> None:
if self._file is None:
return
self._file.write("\n]")
self._file.close()
self._file = None
self._finalize()
def discard(self) -> None:
if self._file is not None:
self._file.close()
self._file = None
if self._tmp_path.exists():
self._tmp_path.unlink()
def _finalize(self) -> None:
"""Compare with existing file (if --compare-json) then rename or discard tmp."""
if self._path in self._files_in_export_dir:
self._files_in_export_dir.remove(self._path)
if self._compare_json:
existing_hash = hashlib.blake2b(self._path.read_bytes()).hexdigest()
new_hash = hashlib.blake2b(self._tmp_path.read_bytes()).hexdigest()
if existing_hash == new_hash:
self._tmp_path.unlink()
return
self._tmp_path.rename(self._path)
def __enter__(self) -> "StreamingManifestWriter":
self.open()
return self
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
if exc_type is not None:
self.discard()
else:
self.close()
class Command(CryptMixin, PaperlessCommand):
help = (
"Decrypt and rename all files in our collection into a given target "
@@ -314,20 +229,13 @@ class Command(CryptMixin, PaperlessCommand):
self.passphrase: str | None = options.get("passphrase")
self.batch_size: int = options["batch_size"]
self.files_in_export_dir: set[Path] = set()
self.exported_files: set[str] = set()
# If zipping, save the original target for later and
# get a temporary directory for the target instead
temp_dir = None
self.original_target = self.target
if self.zip_export:
settings.SCRATCH_DIR.mkdir(parents=True, exist_ok=True)
temp_dir = tempfile.TemporaryDirectory(
dir=settings.SCRATCH_DIR,
prefix="paperless-export",
if self.zip_export and (self.compare_checksums or self.compare_json):
raise CommandError(
"--compare-checksums and --compare-json have no effect when "
"used with --zip",
)
self.target = Path(temp_dir.name).resolve()
if not self.target.exists():
raise CommandError("That path doesn't exist")
@@ -338,33 +246,28 @@ class Command(CryptMixin, PaperlessCommand):
if not os.access(self.target, os.W_OK):
raise CommandError("That path doesn't appear to be writable")
try:
# Prevent any ongoing changes in the documents
with FileLock(settings.MEDIA_LOCK):
self.dump()
sink: ExportSink
if self.zip_export:
sink = ZipExportSink(
self.target,
options["zip_name"],
delete=self.delete,
)
else:
sink = DirectoryExportSink(
self.target,
compare_checksums=self.compare_checksums,
compare_json=self.compare_json,
delete=self.delete,
)
# We've written everything to the temporary directory in this case,
# now make an archive in the original target, with all files stored
if self.zip_export and temp_dir is not None:
shutil.make_archive(
self.original_target / options["zip_name"],
format="zip",
root_dir=temp_dir.name,
)
# Prevent any ongoing changes in the documents while exporting
with FileLock(settings.MEDIA_LOCK), sink:
self.dump(sink)
finally:
# Always cleanup the temporary directory, if one was created
if self.zip_export and temp_dir is not None:
temp_dir.cleanup()
def dump(self) -> None:
# 1. Take a snapshot of what files exist in the current export folder
for x in self.target.glob("**/*"):
if x.is_file():
self.files_in_export_dir.add(x.resolve())
# 2. Create manifest, containing all correspondents, types, tags, storage paths
# note, documents and ui_settings
def dump(self, sink: ExportSink) -> None:
# 1. Create manifest, containing all correspondents, types, tags, storage
# paths, note, documents and ui_settings
_excluded_usernames = ["consumer", "AnonymousUser"]
manifest_key_to_object_query: dict[str, QuerySet[Any]] = {
"correspondents": Correspondent.objects.all(),
@@ -427,13 +330,9 @@ class Command(CryptMixin, PaperlessCommand):
document_manifest: list[dict] = []
share_link_bundle_manifest: list[dict] = []
manifest_path = (self.target / "manifest.json").resolve()
with StreamingManifestWriter(
manifest_path,
compare_json=self.compare_json,
files_in_export_dir=self.files_in_export_dir,
) as writer:
with sink.stream("manifest.json") as handle:
writer = StreamingManifestWriter(handle)
with transaction.atomic():
for key, qs in manifest_key_to_object_query.items():
if key == "documents":
@@ -479,84 +378,55 @@ class Command(CryptMixin, PaperlessCommand):
)
}
# 3. Export files from each document
for index, document_dict in enumerate(
self.track(
document_manifest,
description="Exporting documents...",
total=len(document_manifest),
),
# 2. Export files from each document
for document_dict in self.track(
document_manifest,
description="Exporting documents...",
total=len(document_manifest),
):
document = document_map[document_dict["pk"]]
# 3.1. generate a unique filename
# generate a unique filename, then the arcnames for its files
base_name = self.generate_base_name(document)
# 3.2. write filenames into manifest
original_target, thumbnail_target, archive_target = (
original_arc, thumbnail_arc, archive_arc = (
self.generate_document_targets(document, base_name, document_dict)
)
# 3.3. write files to target folder
if not self.data_only:
self.copy_document_files(
document,
original_target,
thumbnail_target,
archive_target,
sink,
original_arc,
thumbnail_arc,
archive_arc,
)
if self.split_manifest:
self._write_split_manifest(document_dict, document, base_name)
self._write_split_manifest(sink, document_dict, document, base_name)
else:
writer.write_record(document_dict)
for bundle_dict in share_link_bundle_manifest:
bundle = share_link_bundle_map[bundle_dict["pk"]]
bundle_target = self.generate_share_link_bundle_target(
bundle_arc = self.generate_share_link_bundle_target(
bundle,
bundle_dict,
)
if not self.data_only and bundle_target is not None:
self.copy_share_link_bundle_file(bundle, bundle_target)
if not self.data_only and bundle_arc is not None:
self.copy_share_link_bundle_file(bundle, sink, bundle_arc)
writer.write_record(bundle_dict)
# 4.2 write version information to target folder
extra_metadata_path = (self.target / "metadata.json").resolve()
writer.close()
# 3. Write version (and crypto params) to metadata.json
# Django stores most crypto values in the field itself; we store
# them once here for the whole export
metadata: dict[str, str | int | dict[str, str | int]] = {
"version": version.__full_version_str__,
}
# 4.2.1 If needed, write the crypto values into the metadata
# Django stores most of these in the field itself, we store them once here
if self.passphrase:
metadata.update(self.get_crypt_params())
self.check_and_write_json(
metadata,
extra_metadata_path,
)
if self.delete:
# 5. Remove files which we did not explicitly export in this run
if not self.zip_export:
for f in self.files_in_export_dir:
f.unlink()
delete_empty_directories(
f.parent,
self.target,
)
else:
# 5. Remove anything in the original location (before moving the zip)
for item in self.original_target.glob("*"):
if item.is_dir():
shutil.rmtree(item)
else:
item.unlink()
sink.add_json(metadata, "metadata.json")
def generate_base_name(self, document: Document) -> Path:
"""
@@ -584,73 +454,69 @@ class Command(CryptMixin, PaperlessCommand):
document: Document,
base_name: Path,
document_dict: dict,
) -> tuple[Path, Path | None, Path | None]:
) -> tuple[str, str | None, str | None]:
"""
Generates the targets for a given document, including the original file, archive file and thumbnail (depending on settings).
Generates the relative POSIX arcnames for a document's original, thumbnail
and archive files (depending on settings), and records them in the manifest.
"""
original_name = base_name
if self.use_folder_prefix:
original_name = Path("originals") / original_name
original_target = (self.target / original_name).resolve()
document_dict[EXPORTER_FILE_NAME] = str(original_name)
original_arc = original_name.as_posix()
document_dict[EXPORTER_FILE_NAME] = original_arc
if not self.no_thumbnail:
thumbnail_name = base_name.parent / (base_name.stem + "-thumbnail.webp")
if self.use_folder_prefix:
thumbnail_name = Path("thumbnails") / thumbnail_name
thumbnail_target = (self.target / thumbnail_name).resolve()
document_dict[EXPORTER_THUMBNAIL_NAME] = str(thumbnail_name)
thumbnail_arc = thumbnail_name.as_posix()
document_dict[EXPORTER_THUMBNAIL_NAME] = thumbnail_arc
else:
thumbnail_target = None
thumbnail_arc = None
if not self.no_archive and document.has_archive_version:
archive_name = base_name.parent / (base_name.stem + "-archive.pdf")
if self.use_folder_prefix:
archive_name = Path("archive") / archive_name
archive_target = (self.target / archive_name).resolve()
document_dict[EXPORTER_ARCHIVE_NAME] = str(archive_name)
archive_arc = archive_name.as_posix()
document_dict[EXPORTER_ARCHIVE_NAME] = archive_arc
else:
archive_target = None
archive_arc = None
return original_target, thumbnail_target, archive_target
return original_arc, thumbnail_arc, archive_arc
def copy_document_files(
self,
document: Document,
original_target: Path,
thumbnail_target: Path | None,
archive_target: Path | None,
sink: ExportSink,
original_arc: str,
thumbnail_arc: str | None,
archive_arc: str | None,
) -> None:
"""
Copies files from the document storage location to the specified target location.
If the document is encrypted, the files are decrypted before copying them to the target location.
Hands the document's files to the sink (original, thumbnail, archive).
"""
self.check_and_copy(
document.source_path,
document.checksum,
original_target,
)
sink.add_file(document.source_path, original_arc, checksum=document.checksum)
if thumbnail_target:
self.check_and_copy(document.thumbnail_path, None, thumbnail_target)
if thumbnail_arc:
sink.add_file(document.thumbnail_path, thumbnail_arc)
if archive_target:
if archive_arc:
if TYPE_CHECKING:
assert isinstance(document.archive_path, Path)
self.check_and_copy(
sink.add_file(
document.archive_path,
document.archive_checksum,
archive_target,
archive_arc,
checksum=document.archive_checksum,
)
def generate_share_link_bundle_target(
self,
bundle: ShareLinkBundle,
bundle_dict: dict,
) -> Path | None:
) -> str | None:
"""
Generates the export target for a share link bundle file, when present.
Generates the relative POSIX arcname for a share link bundle file, if any.
"""
if not bundle.file_path:
return None
@@ -666,25 +532,22 @@ class Command(CryptMixin, PaperlessCommand):
bundle_dict["fields"]["file_path"] = portable_bundle_path.as_posix()
bundle_dict[EXPORTER_SHARE_LINK_BUNDLE_NAME] = export_bundle_path.as_posix()
return (self.target / export_bundle_path).resolve()
return export_bundle_path.as_posix()
def copy_share_link_bundle_file(
self,
bundle: ShareLinkBundle,
bundle_target: Path,
sink: ExportSink,
bundle_arc: str,
) -> None:
"""
Copies a share link bundle ZIP into the export directory.
Hands a share link bundle ZIP to the sink.
"""
bundle_source_path = bundle.absolute_file_path
if bundle_source_path is None:
raise FileNotFoundError(f"Share link bundle {bundle.pk} has no file path")
self.check_and_copy(
bundle_source_path,
None,
bundle_target,
)
sink.add_file(bundle_source_path, bundle_arc)
def _encrypt_record_inline(self, record: dict) -> None:
"""Encrypt sensitive fields in a single record, if passphrase is set."""
@@ -700,6 +563,7 @@ class Command(CryptMixin, PaperlessCommand):
def _write_split_manifest(
self,
sink: ExportSink,
document_dict: dict,
document: Document,
base_name: Path,
@@ -721,81 +585,4 @@ class Command(CryptMixin, PaperlessCommand):
manifest_name = base_name.with_name(f"{base_name.stem}-manifest.json")
if self.use_folder_prefix:
manifest_name = Path("json") / manifest_name
manifest_name = (self.target / manifest_name).resolve()
manifest_name.parent.mkdir(parents=True, exist_ok=True)
self.check_and_write_json(content, manifest_name)
def check_and_write_json(
self,
content: list[dict] | dict,
target: Path,
) -> None:
"""
Writes the source content to the target json file.
If --compare-json arg was used, don't write to target file if
the file exists and checksum is identical to content checksum.
This preserves the file timestamps when no changes are made.
"""
target = target.resolve()
perform_write = True
if target in self.files_in_export_dir:
self.files_in_export_dir.remove(target)
if self.compare_json:
target_checksum = hashlib.blake2b(target.read_bytes()).hexdigest()
src_str = json.dumps(
content,
cls=DjangoJSONEncoder,
indent=2,
ensure_ascii=False,
)
src_checksum = hashlib.blake2b(src_str.encode("utf-8")).hexdigest()
if src_checksum == target_checksum:
perform_write = False
if perform_write:
target.write_text(
json.dumps(
content,
cls=DjangoJSONEncoder,
indent=2,
ensure_ascii=False,
),
encoding="utf-8",
)
def check_and_copy(
self,
source: Path,
source_checksum: str | None,
target: Path,
) -> None:
"""
Copies the source to the target, if target doesn't exist or the target doesn't seem to match
the source attributes
"""
target = target.resolve()
if target in self.files_in_export_dir:
self.files_in_export_dir.remove(target)
perform_copy = False
if target.exists():
source_stat = source.stat()
target_stat = target.stat()
if self.compare_checksums and source_checksum:
target_checksum = compute_checksum(target)
perform_copy = target_checksum != source_checksum
elif (
source_stat.st_mtime != target_stat.st_mtime
or source_stat.st_size != target_stat.st_size
):
perform_copy = True
else:
# Copy if it does not exist
perform_copy = True
if perform_copy:
target.parent.mkdir(parents=True, exist_ok=True)
copy_file_with_basic_stats(source, target)
sink.add_json(content, manifest_name.as_posix())
+28 -89
View File
@@ -4,14 +4,14 @@ from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.db.models import Case
from django.db.models import Count
from django.db.models import IntegerField
from django.db.models import OuterRef
from django.db.models import Q
from django.db.models import QuerySet
from django.db.models import Value
from django.db.models import When
from django.db.models import Subquery
from django.db.models.functions import Cast
from django.db.models.functions import Coalesce
from guardian.core import ObjectPermissionChecker
from guardian.models import GroupObjectPermission
from guardian.models import UserObjectPermission
@@ -204,95 +204,20 @@ def _permitted_document_ids(user):
).values_list("id", flat=True)
def get_document_count_filter_for_user(user, related_name: str = "documents"):
def get_document_count_filter_for_user(user):
"""
Return the Q object used to filter document counts for the given user.
The filter is expressed as an ``id__in`` against a small subquery of permitted
document IDs to keep the generated SQL simple and avoid large OR clauses.
``related_name`` is the ORM path from the annotated model to Document (e.g.
``"documents"`` for Tag's direct M2M, or ``"fields__document"`` for CustomField,
which only reaches Document via the CustomFieldInstance through-model).
"""
if getattr(user, "is_superuser", False):
# Superuser: no permission filtering needed
return Q(**{f"{related_name}__deleted_at__isnull": True})
return Q(documents__deleted_at__isnull=True)
permitted_ids = _permitted_document_ids(user)
return Q(**{f"{related_name}__id__in": permitted_ids})
def annotate_document_count_by_ids(
queryset: QuerySet[Any],
through_model: Any,
related_object_field: str,
document_ids: Any,
target_field: str = "document_id",
) -> QuerySet[Any]:
"""
Annotate a queryset with a document count for a relation to Document that
goes through an M2M/through-model table (e.g. Tag via
``Document.tags.through``, or CustomField via ``CustomFieldInstance``),
for an explicit, already-resolved set of document ids.
Counts are computed via a single, independent GROUP BY over the relation
table -- with the id filter expressed as a plain ``WHERE`` rather than an
aggregate ``FILTER`` -- then injected via ``Case``/``When``. This
deliberately avoids two slower alternatives found while building this:
- A per-outer-row correlated subquery (one execution per row of the
annotated queryset): fine at a handful of rows, catastrophic once the
queryset has hundreds/thousands of rows.
- ``Count(..., filter=Q(id__in=document_ids), distinct=True)`` applied
directly to the M2M relation: Postgres can fail to plan the ``id__in``
check as a semi-join and instead re-checks subquery membership once per
row of the (much larger) M2M join -- worse than the correlated subquery.
Aggregation is restricted to rows whose ``related_object_field`` is one of
``queryset``'s pks, so passing a subset (e.g. a handful of tag descendants)
doesn't pay the cost of counting for every row matching ``document_ids``.
Args:
queryset: base queryset to annotate (must contain pk)
through_model: model representing the relation (e.g., Document.tags.through
or CustomFieldInstance)
related_object_field: field on the relation pointing back to queryset pk
document_ids: the document ids to count against -- a concrete list/set,
or a simple (already resolved) queryset of ids. Callers
that need this filtered by a complex condition (e.g. a
permission check) should resolve it to a concrete list
first if the same ids will be reused across multiple
calls, rather than passing the complex queryset itself
into each -- see ``_get_selection_data_for_queryset``.
target_field: field on the relation pointing to Document id
"""
counts = (
through_model.objects.filter(
**{
f"{related_object_field}__in": queryset.values("pk"),
f"{target_field}__in": document_ids,
},
)
.values(related_object_field)
.annotate(c=Count(target_field, distinct=True))
)
counts_by_pk = {row[related_object_field]: row["c"] for row in counts}
if not counts_by_pk:
return queryset.annotate(
document_count=Value(0, output_field=IntegerField()),
)
return queryset.annotate(
document_count=Case(
*(When(pk=pk, then=Value(count)) for pk, count in counts_by_pk.items()),
default=Value(0),
output_field=IntegerField(),
),
)
return Q(documents__id__in=permitted_ids)
def annotate_document_count_for_related_queryset(
@@ -303,17 +228,31 @@ def annotate_document_count_for_related_queryset(
user: User | None = None,
) -> QuerySet[Any]:
"""
Same as ``annotate_document_count_by_ids``, but resolves the document ids
from the given user's view permissions rather than taking them directly.
Annotate a queryset with permissions-aware document counts using a subquery
against a relation table.
Args:
queryset: base queryset to annotate (must contain pk)
through_model: model representing the relation (e.g., Document.tags.through
or CustomFieldInstance)
source_field: field on the relation pointing back to queryset pk
target_field: field on the relation pointing to Document id
user: the user for whom to filter permitted document ids
"""
return annotate_document_count_by_ids(
queryset,
through_model=through_model,
related_object_field=related_object_field,
document_ids=_permitted_document_ids(user),
target_field=target_field,
permitted_ids = _permitted_document_ids(user)
counts = (
through_model.objects.filter(
**{
related_object_field: OuterRef("pk"),
f"{target_field}__in": permitted_ids,
},
)
.values(related_object_field)
.annotate(c=Count(target_field))
.values("c")
)
return queryset.annotate(document_count=Coalesce(Subquery(counts[:1]), 0))
def get_objects_for_user_owner_aware(
+1 -7
View File
@@ -475,13 +475,7 @@ class TantivyBackend:
note_texts: list[str] = []
for note in document.notes.all():
num_notes += 1
doc.add_json(
"notes",
{
"note": note.note,
"user": note.user.username if note.user else None,
},
)
doc.add_json("notes", {"note": note.note, "user": note.user.username})
note_texts.append(note.note)
if note_texts:
doc.add_text("notes_text", " ".join(note_texts))
+8 -27
View File
@@ -392,34 +392,15 @@ class OwnedObjectSerializer(
}
def get_user_can_change(self, obj) -> bool:
if obj.owner is None or obj.owner == self.user:
return True
if self.user is None:
return False
if self.user.is_active and self.user.is_superuser:
# Mirrors guardian's own ObjectPermissionChecker.has_perm() shortcut --
# superusers aren't necessarily granted explicit object permissions,
# so the batched context below would otherwise incorrectly say no.
return True
# Prefer the page-level batch computed by BulkPermissionMixin
# (get_serializer_context) over a fresh per-object guardian check,
# which would otherwise query the permission tables once per row.
users_change_perms = self.context.get("users_change_perms")
groups_change_perms = self.context.get("groups_change_perms")
if users_change_perms is not None and groups_change_perms is not None:
if self.user.pk in users_change_perms.get(obj.pk, []):
return True
user_group_ids = getattr(self, "_user_group_ids", None)
if user_group_ids is None:
user_group_ids = set(self.user.groups.values_list("id", flat=True))
self._user_group_ids = user_group_ids
return bool(
user_group_ids.intersection(groups_change_perms.get(obj.pk, [])),
checker = ObjectPermissionChecker(self.user) if self.user is not None else None
return (
obj.owner is None
or obj.owner == self.user
or (
self.user is not None
and checker.has_perm(f"change_{obj.__class__.__name__.lower()}", obj)
)
checker = ObjectPermissionChecker(self.user)
return checker.has_perm(f"change_{obj.__class__.__name__.lower()}", obj)
)
@staticmethod
def get_shared_object_pks(objects: Iterable):
+1 -11
View File
@@ -1264,17 +1264,7 @@ def task_failure_handler(
"error_message": str(exception) if exception else "Unknown error",
}
if traceback:
# billiard/celery pass a pre-formatted string instead of a real
# traceback object when the worker process itself died (e.g.
# WorkerLostError from a SIGILL) since there's no live traceback
# to walk in that case.
tb_str = (
traceback
if isinstance(traceback, str)
else "".join(
_tb.format_tb(traceback),
)
)
tb_str = "".join(_tb.format_tb(traceback))
result_data["traceback"] = tb_str[:5000]
now = timezone.now()
+289
View File
@@ -0,0 +1,289 @@
import io
import json
import os
import zipfile
from pathlib import Path
import pytest
from documents.export.sinks import DirectoryExportSink
from documents.export.sinks import ExportSink
from documents.export.sinks import StreamingManifestWriter
from documents.export.sinks import ZipExportSink
from documents.export.sinks import _dumps
@pytest.fixture()
def source_file(tmp_path: Path) -> Path:
src: Path = tmp_path / "src" / "doc.pdf"
src.parent.mkdir(parents=True)
src.write_bytes(b"PDF-CONTENT")
return src
class TestDumps:
def test_dumps_is_indented_unicode_json(self) -> None:
result: str = _dumps({"a": "é", "b": 1})
assert '"é"' in result # ensure_ascii=False keeps unicode literal
assert "\n" in result # indent=2 produces newlines
assert json.loads(result) == {"a": "é", "b": 1}
class TestStreamingManifestWriter:
def test_writes_json_array_of_records(self) -> None:
handle: io.StringIO = io.StringIO()
writer: StreamingManifestWriter = StreamingManifestWriter(handle)
writer.write_batch([{"pk": 1}, {"pk": 2}])
writer.write_record({"pk": 3})
writer.close()
assert json.loads(handle.getvalue()) == [{"pk": 1}, {"pk": 2}, {"pk": 3}]
def test_empty_manifest_is_valid_empty_array(self) -> None:
handle: io.StringIO = io.StringIO()
writer: StreamingManifestWriter = StreamingManifestWriter(handle)
writer.close()
assert json.loads(handle.getvalue()) == []
class TestDirectoryExportSink:
def test_add_file_copies_to_relative_arcname(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=False,
) as sink:
sink.add_file(source_file, "originals/doc.pdf")
assert (target / "originals" / "doc.pdf").read_bytes() == b"PDF-CONTENT"
def test_add_json_writes_file(self, tmp_path: Path) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=False,
) as sink:
sink.add_json({"version": "x"}, "metadata.json")
assert json.loads((target / "metadata.json").read_text()) == {"version": "x"}
def test_stream_writes_manifest(self, tmp_path: Path) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=False,
) as sink:
with sink.stream("manifest.json") as handle:
writer: StreamingManifestWriter = StreamingManifestWriter(handle)
writer.write_record({"pk": 1})
writer.close()
assert json.loads((target / "manifest.json").read_text()) == [{"pk": 1}]
def test_add_file_skips_when_size_and_mtime_match(
self,
tmp_path: Path,
source_file: Path,
) -> None:
# Pre-existing target with identical size+mtime but DIFFERENT content:
# if add_file skips (no compare-checksums), the old content survives.
target: Path = tmp_path / "out"
target.mkdir()
existing: Path = target / "originals" / "doc.pdf"
existing.parent.mkdir(parents=True)
# Same byte length as the source but different content + matching mtime,
# so a size/mtime comparison treats it as unchanged and skips the copy.
existing.write_bytes(b"X" * len(b"PDF-CONTENT"))
stat = source_file.stat()
os.utime(existing, (stat.st_atime, stat.st_mtime))
with DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=False,
) as sink:
sink.add_file(source_file, "originals/doc.pdf", checksum="abc")
assert existing.read_bytes() == b"X" * len(b"PDF-CONTENT") # skipped
def test_add_file_recopies_when_compare_checksums_differ(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
existing: Path = target / "originals" / "doc.pdf"
existing.parent.mkdir(parents=True)
existing.write_bytes(b"X" * len(b"PDF-CONTENT"))
stat = source_file.stat()
os.utime(existing, (stat.st_atime, stat.st_mtime))
with DirectoryExportSink(
target,
compare_checksums=True,
compare_json=False,
delete=False,
) as sink:
# wrong checksum forces recopy despite matching size/mtime
sink.add_file(source_file, "originals/doc.pdf", checksum="not-the-real-sum")
assert existing.read_bytes() == b"PDF-CONTENT" # recopied
def test_delete_prunes_unwritten_snapshot_files(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
stale: Path = target / "stale.pdf"
stale.write_bytes(b"STALE")
with DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=True,
) as sink:
sink.add_file(source_file, "originals/doc.pdf")
assert not stale.exists()
assert (target / "originals" / "doc.pdf").exists()
def test_no_delete_keeps_unwritten_files(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
stale: Path = target / "stale.pdf"
stale.write_bytes(b"STALE")
with DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=False,
) as sink:
sink.add_file(source_file, "originals/doc.pdf")
assert stale.exists()
class TestZipExportSink:
def test_round_trip_files_json_and_stream(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with ZipExportSink(target, "export", delete=False) as sink:
sink.add_file(source_file, "originals/doc.pdf")
sink.add_json({"version": "x"}, "metadata.json")
with sink.stream("manifest.json") as handle:
writer = StreamingManifestWriter(handle)
writer.write_record({"pk": 1})
writer.close()
zip_path: Path = target / "export.zip"
assert zip_path.exists()
assert not (target / "export.zip.tmp").exists()
with zipfile.ZipFile(zip_path) as zf:
names = set(zf.namelist())
assert {"originals/doc.pdf", "metadata.json", "manifest.json"} <= names
assert zf.read("originals/doc.pdf") == b"PDF-CONTENT"
assert json.loads(zf.read("manifest.json")) == [{"pk": 1}]
def test_nested_arcname_emits_directory_marker(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with ZipExportSink(target, "export", delete=False) as sink:
sink.add_file(source_file, "originals/doc.pdf")
with zipfile.ZipFile(target / "export.zip") as zf:
assert "originals/" in zf.namelist()
def test_flat_arcname_has_no_directory_markers(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with ZipExportSink(target, "export", delete=False) as sink:
sink.add_file(source_file, "doc.pdf")
with zipfile.ZipFile(target / "export.zip") as zf:
assert all(not n.endswith("/") for n in zf.namelist())
def test_exception_leaves_no_zip_and_no_tmp(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
with pytest.raises(RuntimeError):
with ZipExportSink(target, "export", delete=False) as sink:
sink.add_file(source_file, "doc.pdf")
raise RuntimeError("boom")
assert not (target / "export.zip").exists()
assert not (target / "export.zip.tmp").exists()
def test_delete_wipes_destination_on_success(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
(target / "preexisting.txt").write_text("old")
(target / "olddir").mkdir()
with ZipExportSink(target, "export", delete=True) as sink:
sink.add_file(source_file, "doc.pdf")
assert (target / "export.zip").exists()
assert not (target / "preexisting.txt").exists()
assert not (target / "olddir").exists()
def test_abort_with_delete_does_not_wipe_destination(
self,
tmp_path: Path,
source_file: Path,
) -> None:
target: Path = tmp_path / "out"
target.mkdir()
(target / "preexisting.txt").write_text("old")
with pytest.raises(RuntimeError):
with ZipExportSink(target, "export", delete=True) as sink:
sink.add_file(source_file, "doc.pdf")
raise RuntimeError("boom")
assert (target / "preexisting.txt").exists()
assert not (target / "export.zip").exists()
class TestStreamContract:
@pytest.fixture(params=["dir", "zip"])
def sink(self, request: pytest.FixtureRequest, tmp_path: Path) -> ExportSink:
target: Path = tmp_path / "out"
target.mkdir()
if request.param == "dir":
return DirectoryExportSink(
target,
compare_checksums=False,
compare_json=False,
delete=False,
)
return ZipExportSink(target, "export", delete=False)
def test_second_concurrent_stream_is_rejected(self, sink: ExportSink) -> None:
with sink:
with sink.stream("manifest.json"):
with pytest.raises(RuntimeError, match="already open"):
with sink.stream("other.json"):
pass
@@ -844,23 +844,6 @@ class TestFieldHandling:
f"Expected 1, got {len(ids)}. Note content should be searchable via notes.note: prefix."
)
def test_notes_without_user_are_indexed(self, backend: TantivyBackend) -> None:
"""Notes whose user was deleted (SET_NULL) must not break indexing."""
doc = Document.objects.create(
title="Doc with orphaned note",
content="test",
checksum="NT2",
pk=81,
)
Note.objects.create(document=doc, note="Orphaned note", user=None)
backend.add_or_update(doc)
ids = backend.search_ids("notes.note:orphaned", user=None)
assert len(ids) == 1, (
f"Expected 1, got {len(ids)}. Notes without a user should still be indexed."
)
class TestHighlightHits:
"""Test highlight_hits returns proper HTML strings, not raw Snippet objects."""
-113
View File
@@ -883,62 +883,6 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
results = response.data["results"]
self.assertEqual(len(results), 3)
def test_is_in_inbox_filter_no_duplicates_with_multiple_inbox_tags(self) -> None:
"""
GIVEN:
- A document tagged with two different inbox tags
WHEN:
- The document list is filtered by is_in_inbox=true
THEN:
- The document appears exactly once, not once per matching tag
"""
doc = Document.objects.create(title="doc", checksum="c1")
inbox_1 = Tag.objects.create(name="inbox1", is_inbox_tag=True)
inbox_2 = Tag.objects.create(name="inbox2", is_inbox_tag=True)
doc.tags.add(inbox_1, inbox_2)
response = self.client.get("/api/documents/?is_in_inbox=true")
self.assertEqual(response.status_code, status.HTTP_200_OK)
results = response.data["results"]
self.assertEqual(len(results), 1)
self.assertEqual(results[0]["id"], doc.id)
def test_custom_fields_icontains_filter_no_duplicates(self) -> None:
"""
GIVEN:
- A document with two custom field instances that both match the
same custom_fields__icontains search term
WHEN:
- The document list is filtered by custom_fields__icontains
THEN:
- The document appears exactly once, not once per matching field
"""
doc = Document.objects.create(title="doc", checksum="c1")
field_1 = CustomField.objects.create(
name="apple",
data_type=CustomField.FieldDataType.STRING,
)
field_2 = CustomField.objects.create(
name="apricot",
data_type=CustomField.FieldDataType.STRING,
)
CustomFieldInstance.objects.create(
document=doc,
field=field_1,
value_text="something",
)
CustomFieldInstance.objects.create(
document=doc,
field=field_2,
value_text="something else",
)
response = self.client.get("/api/documents/?custom_fields__icontains=ap")
self.assertEqual(response.status_code, status.HTTP_200_OK)
results = response.data["results"]
self.assertEqual(len(results), 1)
self.assertEqual(results[0]["id"], doc.id)
def test_custom_field_select_filter(self) -> None:
"""
GIVEN:
@@ -1347,63 +1291,6 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase):
self.assertEqual(selected_type["document_count"], 1)
self.assertEqual(selected_storage_path["document_count"], 1)
def test_selection_data_document_counts_per_tag(self) -> None:
"""
GIVEN:
- Multiple tags with different numbers of matching documents
within the filtered set, including one with no matches
WHEN:
- Requesting the document list with include_selection_data=true
THEN:
- Each tag's document_count reflects only documents in the
filtered set, not the instance-wide count
"""
tag_a = Tag.objects.create(name="a")
tag_b = Tag.objects.create(name="b")
tag_unused = Tag.objects.create(name="unused")
custom_field = CustomField.objects.create(
name="cf1",
data_type=CustomField.FieldDataType.STRING,
)
doc1 = Document.objects.create(checksum="1", correspondent=None)
doc1.tags.add(tag_a)
doc2 = Document.objects.create(checksum="2")
doc2.tags.add(tag_a, tag_b)
doc3 = Document.objects.create(checksum="3")
doc3.tags.add(tag_b)
CustomFieldInstance.objects.create(
document=doc1,
field=custom_field,
value_text="x",
)
# Excluded from the filtered set entirely.
excluded = Document.objects.create(checksum="4")
excluded.tags.add(tag_a, tag_b, tag_unused)
response = self.client.get(
f"/api/documents/?id__in={doc1.id},{doc2.id},{doc3.id}"
"&include_selection_data=true",
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
selection_data = response.data["selection_data"]
counts_by_tag = {
item["id"]: item["document_count"]
for item in selection_data["selected_tags"]
}
self.assertEqual(counts_by_tag[tag_a.id], 2)
self.assertEqual(counts_by_tag[tag_b.id], 2)
self.assertEqual(counts_by_tag[tag_unused.id], 0)
counts_by_field = {
item["id"]: item["document_count"]
for item in selection_data["selected_custom_fields"]
}
self.assertEqual(counts_by_field[custom_field.id], 1)
def test_statistics(self) -> None:
doc1 = Document.objects.create(
title="none1",
@@ -568,30 +568,6 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
self.assertNotIn("user_can_change", results[0])
self.assertNotIn("is_shared_by_requester", results[0])
def test_superuser_user_can_change_without_explicit_grant(self) -> None:
"""
A superuser has implicit change access to every document, even one
owned by someone else with no explicit guardian grant -- mirrors
guardian's own ObjectPermissionChecker.has_perm() superuser shortcut.
"""
superuser = User.objects.create_superuser(username="admin")
other_user = User.objects.create_user(username="user2")
Document.objects.create(
title="Test",
content="content",
checksum="1",
owner=other_user,
)
self.client.force_authenticate(superuser)
response = self.client.get("/api/documents/", format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
results = response.json()["results"]
self.assertEqual(len(results), 1)
self.assertTrue(results[0]["user_can_change"])
@mock.patch("allauth.mfa.adapter.DefaultMFAAdapter.is_mfa_enabled")
def test_basic_auth_mfa_enabled(self, mock_is_mfa_enabled) -> None:
"""
@@ -426,7 +426,7 @@ class TestExportImport(
st_mtime_1 = (self.target / "manifest.json").stat().st_mtime
with mock.patch(
"documents.management.commands.document_exporter.copy_file_with_basic_stats",
"documents.export.sinks.copy_file_with_basic_stats",
) as m:
self._do_export()
m.assert_not_called()
@@ -437,7 +437,7 @@ class TestExportImport(
Path(self.d1.source_path).touch()
with mock.patch(
"documents.management.commands.document_exporter.copy_file_with_basic_stats",
"documents.export.sinks.copy_file_with_basic_stats",
) as m:
self._do_export()
self.assertEqual(m.call_count, 1)
@@ -464,7 +464,7 @@ class TestExportImport(
self.assertIsFile(self.target / "manifest.json")
with mock.patch(
"documents.management.commands.document_exporter.copy_file_with_basic_stats",
"documents.export.sinks.copy_file_with_basic_stats",
) as m:
self._do_export()
m.assert_not_called()
@@ -475,7 +475,7 @@ class TestExportImport(
self.d2.save()
with mock.patch(
"documents.management.commands.document_exporter.copy_file_with_basic_stats",
"documents.export.sinks.copy_file_with_basic_stats",
) as m:
self._do_export(compare_checksums=True)
self.assertEqual(m.call_count, 1)
@@ -1058,6 +1058,26 @@ class TestExportImport(
self.assertEqual(Document.objects.all().count(), 4)
def test_zip_with_compare_flags_raises(self) -> None:
"""
GIVEN:
- A request to export to a zip file
WHEN:
- --compare-checksums or --compare-json is also passed
THEN:
- A CommandError is raised (the flags are no-ops in zip mode)
"""
for flag in ("--compare-checksums", "--compare-json"):
with self.subTest(flag=flag):
with self.assertRaises(CommandError):
call_command(
"document_exporter",
self.target,
"--zip",
flag,
skip_checks=True,
)
@pytest.mark.management
class TestCryptExportImport(
+30 -71
View File
@@ -169,7 +169,6 @@ from documents.permissions import PaperlessAdminPermissions
from documents.permissions import PaperlessNotePermissions
from documents.permissions import PaperlessObjectPermissions
from documents.permissions import ViewDocumentsPermissions
from documents.permissions import annotate_document_count_by_ids
from documents.permissions import annotate_document_count_for_related_queryset
from documents.permissions import get_document_count_filter_for_user
from documents.permissions import get_objects_for_user_owner_aware
@@ -432,12 +431,14 @@ class BulkPermissionMixin:
This avoid fetching permissions object by object in database.
"""
context = super().get_serializer_context()
try:
full_perms = get_boolean(
str(self.request.query_params.get("full_perms", "false")),
)
except ValueError:
full_perms = False
if getattr(self, "action", None) != "list":
# Batching only pays off across a page of objects; for single-object
# actions (retrieve, update, ...) the per-object fallback in
# get_user_can_change()/_get_perms() is cheap and avoids scanning
# the whole queryset here.
if not full_perms:
return context
# Check which objects are being paginated
@@ -483,15 +484,7 @@ class BulkPermissionMixin:
class PermissionsAwareDocumentCountMixin(BulkPermissionMixin, PassUserMixin):
"""Mixin to add document count to queryset, permissions-aware if needed"""
# Direct FK/M2M relation name from this model to Document, used for the
# cheap Count(filter=...) path (Correspondent, DocumentType, StoragePath).
document_count_related_name: str = "documents"
# Set both of these instead, for models that only reach Document through
# an M2M/through-model table (Tag, CustomField). A plain Count(filter=...)
# over such a relation is fine for a direct FK, but forces a much more
# expensive plan once an M2M bridge table is involved -- see
# annotate_document_count_for_related_queryset() for why.
# Default is simple relation path, override for through-table/count specialization.
document_count_through: type[Model] | None = None
document_count_source_field: str | None = None
@@ -507,14 +500,12 @@ class PermissionsAwareDocumentCountMixin(BulkPermissionMixin, PassUserMixin):
def get_document_count_filter(self):
request = getattr(self, "request", None)
user = getattr(request, "user", None) if request else None
return get_document_count_filter_for_user(
user,
related_name=self.document_count_related_name,
)
return get_document_count_filter_for_user(user)
def get_queryset(self):
base_qs = super().get_queryset()
# Use optimized through-table counting when configured.
if self.document_count_through:
user = getattr(getattr(self, "request", None), "user", None)
return annotate_document_count_for_related_queryset(
@@ -524,13 +515,10 @@ class PermissionsAwareDocumentCountMixin(BulkPermissionMixin, PassUserMixin):
user=user,
)
# Fallback: simple Count on relation with permission filter.
filter = self.get_document_count_filter()
return base_qs.annotate(
document_count=Count(
self.document_count_related_name,
filter=filter,
distinct=True,
),
document_count=Count("documents", filter=filter),
)
@@ -955,7 +943,6 @@ class EmailDocumentDetailSchema(EmailSerializer):
),
)
class DocumentViewSet(
BulkPermissionMixin,
PassUserMixin,
RetrieveModelMixin,
UpdateModelMixin,
@@ -993,54 +980,42 @@ class DocumentViewSet(
)
def _get_selection_data_for_queryset(self, queryset):
# Resolve once instead of once per model below. `queryset` can carry an
# arbitrarily expensive WHERE clause (user filters plus the permission
# filter); re-embedding it as a subquery inside 5 separate Count(...)
# calls forces the database to re-evaluate that whole thing 5 times, and
# -- for FK relations especially -- can defeat semi-join planning
# entirely at scale. A concrete id list is cheap to reuse.
# order_by() drops the default/user ordering -- irrelevant for a plain
# id list, but left in place it forces a sort over the full filtered
# set before the ids can even be collected.
document_ids = list(queryset.order_by().values_list("pk", flat=True))
correspondents = Correspondent.objects.annotate(
document_count=Count(
"documents",
filter=Q(documents__id__in=document_ids),
filter=Q(documents__in=queryset),
distinct=True,
),
)
tags = Tag.objects.annotate(
document_count=Count(
"documents",
filter=Q(documents__in=queryset),
distinct=True,
),
)
document_types = DocumentType.objects.annotate(
document_count=Count(
"documents",
filter=Q(documents__id__in=document_ids),
filter=Q(documents__in=queryset),
distinct=True,
),
)
storage_paths = StoragePath.objects.annotate(
document_count=Count(
"documents",
filter=Q(documents__id__in=document_ids),
filter=Q(documents__in=queryset),
distinct=True,
),
)
# Tag and CustomField reach Document through an M2M/through-model table;
# a plain Count(filter=...) there is a much more expensive plan than the
# FK relations above once the bridge table is large -- see
# annotate_document_count_by_ids() for why.
tags = annotate_document_count_by_ids(
Tag.objects.all(),
through_model=Document.tags.through,
related_object_field="tag_id",
document_ids=document_ids,
)
custom_fields = annotate_document_count_by_ids(
CustomField.objects.all(),
through_model=CustomFieldInstance,
related_object_field="field_id",
document_ids=document_ids,
custom_fields = CustomField.objects.annotate(
document_count=Count(
"fields__document",
filter=Q(fields__document__in=queryset),
distinct=True,
),
)
return {
"selected_correspondents": [
{"id": t.id, "document_count": t.document_count} for t in correspondents
@@ -1076,16 +1051,9 @@ class DocumentViewSet(
.values("count"),
output_field=IntegerField(),
)
# No .distinct() here: nothing in this base queryset can produce
# duplicate document rows (select_related below is all FK-to-PK;
# permission filtering is a boolean id__in predicate, not a join).
# M2M-based filters that *do* introduce a join (e.g. tags__id__in)
# already call .distinct() themselves where they need it -- see
# ObjectFilter.filter(). A blanket .distinct() here forces the
# database to fully sort and dedupe every visible document before
# it can apply LIMIT, which is disastrous at scale.
return (
Document.objects.filter(root_document__isnull=True)
.distinct()
.order_by("-created", "-id")
.annotate(effective_content=Coalesce(latest_version_content, F("content")))
.annotate(num_notes=Coalesce(note_count, 0))
@@ -2323,15 +2291,6 @@ class UnifiedSearchViewSet(DocumentViewSet):
return SearchResultSerializer
return DocumentSerializer
def get_serializer_context(self):
if self._is_search_request():
# BulkPermissionMixin.get_serializer_context() (inherited via
# DocumentViewSet) assumes it's batching permissions for a page of
# real Document instances. Tantivy search results are SearchHit/
# dict-like objects instead, so skip straight past it here.
return super(BulkPermissionMixin, self).get_serializer_context()
return super().get_serializer_context()
def _get_active_search_params(self, request: Request | None = None) -> list[str]:
request = request or self.request
return [
+67 -67
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-25 07:12+0000\n"
"PO-Revision-Date: 2026-07-25 07:14\n"
"POT-Creation-Date: 2026-07-22 15:44+0000\n"
"PO-Revision-Date: 2026-07-22 15:47\n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\n"
@@ -21,39 +21,39 @@ msgstr ""
msgid "Documents"
msgstr "Dokumente"
#: documents/filters.py:470
#: documents/filters.py:464
msgid "Value must be valid JSON."
msgstr "Waarde moet geldige JSON wees."
#: documents/filters.py:489
#: documents/filters.py:483
msgid "Invalid custom field query expression"
msgstr "Ongeldige gepasmaakte veldnavraaguitdrukking"
#: documents/filters.py:499
#: documents/filters.py:493
msgid "Invalid expression list. Must be nonempty."
msgstr "Ongeldige uitdrukking lys. Moet nie leeg wees nie."
#: documents/filters.py:520
#: documents/filters.py:514
msgid "Invalid logical operator {op!r}"
msgstr "Ongeldige logiese uitdrukking {op!r}"
#: documents/filters.py:534
#: documents/filters.py:528
msgid "Maximum number of query conditions exceeded."
msgstr ""
#: documents/filters.py:598
#: documents/filters.py:592
msgid "{name!r} is not a valid custom field."
msgstr ""
#: documents/filters.py:635
#: documents/filters.py:629
msgid "{data_type} does not support query expr {expr!r}."
msgstr ""
#: documents/filters.py:750 documents/models.py:136
#: documents/filters.py:744 documents/models.py:136
msgid "Maximum nesting depth exceeded."
msgstr ""
#: documents/filters.py:1067
#: documents/filters.py:1061
msgid "Custom field not found"
msgstr ""
@@ -1338,48 +1338,48 @@ msgstr ""
msgid "workflow runs"
msgstr ""
#: documents/serialisers.py:522 documents/serialisers.py:874
#: documents/serialisers.py:2763 documents/views.py:298 documents/views.py:2541
#: documents/serialisers.py:503 documents/serialisers.py:855
#: documents/serialisers.py:2744 documents/views.py:297 documents/views.py:2500
#: paperless_mail/serialisers.py:155
msgid "Insufficient permissions."
msgstr ""
#: documents/serialisers.py:710
#: documents/serialisers.py:691
msgid "Invalid color."
msgstr "Ongeldige kleur."
#: documents/serialisers.py:2235
#: documents/serialisers.py:2216
#, python-format
msgid "File type %(type)s not supported"
msgstr "Lêertipe %(type)s word nie ondersteun nie"
#: documents/serialisers.py:2279
#: documents/serialisers.py:2260
#, python-format
msgid "Custom field id must be an integer: %(id)s"
msgstr ""
#: documents/serialisers.py:2286
#: documents/serialisers.py:2267
#, python-format
msgid "Custom field with id %(id)s does not exist"
msgstr ""
#: documents/serialisers.py:2303 documents/serialisers.py:2313
#: documents/serialisers.py:2284 documents/serialisers.py:2294
msgid "Custom fields must be a list of integers or an object mapping ids to values."
msgstr ""
#: documents/serialisers.py:2308
#: documents/serialisers.py:2289
msgid "Some custom fields don't exist or were specified twice."
msgstr ""
#: documents/serialisers.py:2455
#: documents/serialisers.py:2436
msgid "Invalid variable detected."
msgstr "Ongeldige veranderlike bespeur."
#: documents/serialisers.py:2819
#: documents/serialisers.py:2800
msgid "Duplicate document identifiers are not allowed."
msgstr ""
#: documents/serialisers.py:2849 documents/views.py:4500
#: documents/serialisers.py:2830 documents/views.py:4459
#, python-format
msgid "Documents not found: %(ids)s"
msgstr ""
@@ -1634,36 +1634,36 @@ msgstr ""
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:291 documents/views.py:2538
#: documents/views.py:290 documents/views.py:2497
msgid "Invalid more_like_id"
msgstr ""
#: documents/views.py:1556
#: documents/views.py:1524
msgid "Invalid AI configuration."
msgstr ""
#: documents/views.py:1565
#: documents/views.py:1533
msgid "AI backend request timed out."
msgstr ""
#: documents/views.py:2363 documents/views.py:2684
#: documents/views.py:2322 documents/views.py:2643
msgid "Specify only one of text, title_search, query, or more_like_id."
msgstr ""
#: documents/views.py:4512
#: documents/views.py:4471
#, python-format
msgid "Insufficient permissions to share document %(id)s."
msgstr ""
#: documents/views.py:4558
#: documents/views.py:4517
msgid "Bundle is already being processed."
msgstr ""
#: documents/views.py:4619
#: documents/views.py:4578
msgid "The share link bundle is still being prepared. Please try again later."
msgstr ""
#: documents/views.py:4629
#: documents/views.py:4588
msgid "The share link bundle is unavailable."
msgstr ""
@@ -1919,151 +1919,151 @@ msgstr ""
msgid "paperless application settings"
msgstr ""
#: paperless/settings/__init__.py:556
#: paperless/settings/__init__.py:545
msgid "English (US)"
msgstr "Engels (VS)"
#: paperless/settings/__init__.py:557
#: paperless/settings/__init__.py:546
msgid "Arabic"
msgstr "Arabies"
#: paperless/settings/__init__.py:558
#: paperless/settings/__init__.py:547
msgid "Afrikaans"
msgstr ""
#: paperless/settings/__init__.py:559
#: paperless/settings/__init__.py:548
msgid "Belarusian"
msgstr "Belorussies"
#: paperless/settings/__init__.py:560
#: paperless/settings/__init__.py:549
msgid "Bulgarian"
msgstr ""
#: paperless/settings/__init__.py:561
#: paperless/settings/__init__.py:550
msgid "Catalan"
msgstr "Katalaans"
#: paperless/settings/__init__.py:562
#: paperless/settings/__init__.py:551
msgid "Czech"
msgstr "Tsjeggies"
#: paperless/settings/__init__.py:563
#: paperless/settings/__init__.py:552
msgid "Danish"
msgstr "Deens"
#: paperless/settings/__init__.py:564
#: paperless/settings/__init__.py:553
msgid "German"
msgstr "Duits"
#: paperless/settings/__init__.py:565
#: paperless/settings/__init__.py:554
msgid "Greek"
msgstr ""
#: paperless/settings/__init__.py:566
#: paperless/settings/__init__.py:555
msgid "English (GB)"
msgstr "Engels (GB)"
#: paperless/settings/__init__.py:567
#: paperless/settings/__init__.py:556
msgid "Spanish"
msgstr "Spaans"
#: paperless/settings/__init__.py:568
#: paperless/settings/__init__.py:557
msgid "Persian"
msgstr ""
#: paperless/settings/__init__.py:569
#: paperless/settings/__init__.py:558
msgid "Finnish"
msgstr "Fins"
#: paperless/settings/__init__.py:570
#: paperless/settings/__init__.py:559
msgid "French"
msgstr "Frans"
#: paperless/settings/__init__.py:571
#: paperless/settings/__init__.py:560
msgid "Hungarian"
msgstr ""
#: paperless/settings/__init__.py:572
#: paperless/settings/__init__.py:561
msgid "Indonesian"
msgstr ""
#: paperless/settings/__init__.py:573
#: paperless/settings/__init__.py:562
msgid "Italian"
msgstr "Italiaans"
#: paperless/settings/__init__.py:574
#: paperless/settings/__init__.py:563
msgid "Japanese"
msgstr ""
#: paperless/settings/__init__.py:575
#: paperless/settings/__init__.py:564
msgid "Korean"
msgstr ""
#: paperless/settings/__init__.py:576
#: paperless/settings/__init__.py:565
msgid "Luxembourgish"
msgstr "Luxemburgs"
#: paperless/settings/__init__.py:577
#: paperless/settings/__init__.py:566
msgid "Norwegian"
msgstr ""
#: paperless/settings/__init__.py:578
#: paperless/settings/__init__.py:567
msgid "Dutch"
msgstr "Nederlands"
#: paperless/settings/__init__.py:579
#: paperless/settings/__init__.py:568
msgid "Polish"
msgstr "Pools"
#: paperless/settings/__init__.py:580
#: paperless/settings/__init__.py:569
msgid "Portuguese (Brazil)"
msgstr "Portugees (Brasilië)"
#: paperless/settings/__init__.py:581
#: paperless/settings/__init__.py:570
msgid "Portuguese"
msgstr "Portugees"
#: paperless/settings/__init__.py:582
#: paperless/settings/__init__.py:571
msgid "Romanian"
msgstr "Roemeens"
#: paperless/settings/__init__.py:583
#: paperless/settings/__init__.py:572
msgid "Russian"
msgstr "Russies"
#: paperless/settings/__init__.py:584
#: paperless/settings/__init__.py:573
msgid "Slovak"
msgstr ""
#: paperless/settings/__init__.py:585
#: paperless/settings/__init__.py:574
msgid "Slovenian"
msgstr "Sloweens"
#: paperless/settings/__init__.py:586
#: paperless/settings/__init__.py:575
msgid "Serbian"
msgstr "Serwies"
#: paperless/settings/__init__.py:587
#: paperless/settings/__init__.py:576
msgid "Swedish"
msgstr "Sweeds"
#: paperless/settings/__init__.py:588
#: paperless/settings/__init__.py:577
msgid "Turkish"
msgstr "Turks"
#: paperless/settings/__init__.py:589
#: paperless/settings/__init__.py:578
msgid "Ukrainian"
msgstr ""
#: paperless/settings/__init__.py:590
#: paperless/settings/__init__.py:579
msgid "Vietnamese"
msgstr ""
#: paperless/settings/__init__.py:591
#: paperless/settings/__init__.py:580
msgid "Chinese Simplified"
msgstr "Vereenvoudigde Sjinees"
#: paperless/settings/__init__.py:592
#: paperless/settings/__init__.py:581
msgid "Chinese Traditional"
msgstr ""
+67 -67
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-25 07:12+0000\n"
"PO-Revision-Date: 2026-07-25 07:14\n"
"POT-Creation-Date: 2026-07-22 15:44+0000\n"
"PO-Revision-Date: 2026-07-22 15:48\n"
"Last-Translator: \n"
"Language-Team: Amharic\n"
"Language: am_ET\n"
@@ -21,39 +21,39 @@ msgstr ""
msgid "Documents"
msgstr "መዝገባት"
#: documents/filters.py:470
#: documents/filters.py:464
msgid "Value must be valid JSON."
msgstr "የሚሰራው እሴት \"JSON\" መሆን አለበት"
#: documents/filters.py:489
#: documents/filters.py:483
msgid "Invalid custom field query expression"
msgstr "ልክ ያልሆነ የተወሰነ የቦታ መጠይቅ አገላለጽ"
#: documents/filters.py:499
#: documents/filters.py:493
msgid "Invalid expression list. Must be nonempty."
msgstr "ልክ ያልሆነ የመግለጫ ዝርዝር። ባዶ መሆን የለበትም።"
#: documents/filters.py:520
#: documents/filters.py:514
msgid "Invalid logical operator {op!r}"
msgstr "ልክ ያልሆነ የሎጂክ ኦፕሬተር {op!r}"
#: documents/filters.py:534
#: documents/filters.py:528
msgid "Maximum number of query conditions exceeded."
msgstr "ከፍተኛው የጥያቄ ሁኔታዎች/መጠን ብዛት አልፏል።"
#: documents/filters.py:598
#: documents/filters.py:592
msgid "{name!r} is not a valid custom field."
msgstr "{name!r} ይሄ ታዐማኒነት ያለው ልማድ አይደለም።"
#: documents/filters.py:635
#: documents/filters.py:629
msgid "{data_type} does not support query expr {expr!r}."
msgstr "ጥያቄን አይደግፍም expr {expr!r}."
#: documents/filters.py:750 documents/models.py:136
#: documents/filters.py:744 documents/models.py:136
msgid "Maximum nesting depth exceeded."
msgstr "ከፍተኛው የጥገኝነት ጥልቀት አልፏል።"
#: documents/filters.py:1067
#: documents/filters.py:1061
msgid "Custom field not found"
msgstr "ይህ ልማድ አልተገኘም"
@@ -1338,48 +1338,48 @@ msgstr ""
msgid "workflow runs"
msgstr ""
#: documents/serialisers.py:522 documents/serialisers.py:874
#: documents/serialisers.py:2763 documents/views.py:298 documents/views.py:2541
#: documents/serialisers.py:503 documents/serialisers.py:855
#: documents/serialisers.py:2744 documents/views.py:297 documents/views.py:2500
#: paperless_mail/serialisers.py:155
msgid "Insufficient permissions."
msgstr ""
#: documents/serialisers.py:710
#: documents/serialisers.py:691
msgid "Invalid color."
msgstr ""
#: documents/serialisers.py:2235
#: documents/serialisers.py:2216
#, python-format
msgid "File type %(type)s not supported"
msgstr ""
#: documents/serialisers.py:2279
#: documents/serialisers.py:2260
#, python-format
msgid "Custom field id must be an integer: %(id)s"
msgstr ""
#: documents/serialisers.py:2286
#: documents/serialisers.py:2267
#, python-format
msgid "Custom field with id %(id)s does not exist"
msgstr ""
#: documents/serialisers.py:2303 documents/serialisers.py:2313
#: documents/serialisers.py:2284 documents/serialisers.py:2294
msgid "Custom fields must be a list of integers or an object mapping ids to values."
msgstr ""
#: documents/serialisers.py:2308
#: documents/serialisers.py:2289
msgid "Some custom fields don't exist or were specified twice."
msgstr ""
#: documents/serialisers.py:2455
#: documents/serialisers.py:2436
msgid "Invalid variable detected."
msgstr ""
#: documents/serialisers.py:2819
#: documents/serialisers.py:2800
msgid "Duplicate document identifiers are not allowed."
msgstr ""
#: documents/serialisers.py:2849 documents/views.py:4500
#: documents/serialisers.py:2830 documents/views.py:4459
#, python-format
msgid "Documents not found: %(ids)s"
msgstr ""
@@ -1634,36 +1634,36 @@ msgstr ""
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:291 documents/views.py:2538
#: documents/views.py:290 documents/views.py:2497
msgid "Invalid more_like_id"
msgstr ""
#: documents/views.py:1556
#: documents/views.py:1524
msgid "Invalid AI configuration."
msgstr ""
#: documents/views.py:1565
#: documents/views.py:1533
msgid "AI backend request timed out."
msgstr ""
#: documents/views.py:2363 documents/views.py:2684
#: documents/views.py:2322 documents/views.py:2643
msgid "Specify only one of text, title_search, query, or more_like_id."
msgstr ""
#: documents/views.py:4512
#: documents/views.py:4471
#, python-format
msgid "Insufficient permissions to share document %(id)s."
msgstr ""
#: documents/views.py:4558
#: documents/views.py:4517
msgid "Bundle is already being processed."
msgstr ""
#: documents/views.py:4619
#: documents/views.py:4578
msgid "The share link bundle is still being prepared. Please try again later."
msgstr ""
#: documents/views.py:4629
#: documents/views.py:4588
msgid "The share link bundle is unavailable."
msgstr ""
@@ -1919,151 +1919,151 @@ msgstr ""
msgid "paperless application settings"
msgstr ""
#: paperless/settings/__init__.py:556
#: paperless/settings/__init__.py:545
msgid "English (US)"
msgstr ""
#: paperless/settings/__init__.py:557
#: paperless/settings/__init__.py:546
msgid "Arabic"
msgstr ""
#: paperless/settings/__init__.py:558
#: paperless/settings/__init__.py:547
msgid "Afrikaans"
msgstr ""
#: paperless/settings/__init__.py:559
#: paperless/settings/__init__.py:548
msgid "Belarusian"
msgstr ""
#: paperless/settings/__init__.py:560
#: paperless/settings/__init__.py:549
msgid "Bulgarian"
msgstr ""
#: paperless/settings/__init__.py:561
#: paperless/settings/__init__.py:550
msgid "Catalan"
msgstr ""
#: paperless/settings/__init__.py:562
#: paperless/settings/__init__.py:551
msgid "Czech"
msgstr ""
#: paperless/settings/__init__.py:563
#: paperless/settings/__init__.py:552
msgid "Danish"
msgstr ""
#: paperless/settings/__init__.py:564
#: paperless/settings/__init__.py:553
msgid "German"
msgstr ""
#: paperless/settings/__init__.py:565
#: paperless/settings/__init__.py:554
msgid "Greek"
msgstr ""
#: paperless/settings/__init__.py:566
#: paperless/settings/__init__.py:555
msgid "English (GB)"
msgstr ""
#: paperless/settings/__init__.py:567
#: paperless/settings/__init__.py:556
msgid "Spanish"
msgstr ""
#: paperless/settings/__init__.py:568
#: paperless/settings/__init__.py:557
msgid "Persian"
msgstr ""
#: paperless/settings/__init__.py:569
#: paperless/settings/__init__.py:558
msgid "Finnish"
msgstr ""
#: paperless/settings/__init__.py:570
#: paperless/settings/__init__.py:559
msgid "French"
msgstr ""
#: paperless/settings/__init__.py:571
#: paperless/settings/__init__.py:560
msgid "Hungarian"
msgstr ""
#: paperless/settings/__init__.py:572
#: paperless/settings/__init__.py:561
msgid "Indonesian"
msgstr ""
#: paperless/settings/__init__.py:573
#: paperless/settings/__init__.py:562
msgid "Italian"
msgstr ""
#: paperless/settings/__init__.py:574
#: paperless/settings/__init__.py:563
msgid "Japanese"
msgstr ""
#: paperless/settings/__init__.py:575
#: paperless/settings/__init__.py:564
msgid "Korean"
msgstr ""
#: paperless/settings/__init__.py:576
#: paperless/settings/__init__.py:565
msgid "Luxembourgish"
msgstr ""
#: paperless/settings/__init__.py:577
#: paperless/settings/__init__.py:566
msgid "Norwegian"
msgstr ""
#: paperless/settings/__init__.py:578
#: paperless/settings/__init__.py:567
msgid "Dutch"
msgstr ""
#: paperless/settings/__init__.py:579
#: paperless/settings/__init__.py:568
msgid "Polish"
msgstr ""
#: paperless/settings/__init__.py:580
#: paperless/settings/__init__.py:569
msgid "Portuguese (Brazil)"
msgstr ""
#: paperless/settings/__init__.py:581
#: paperless/settings/__init__.py:570
msgid "Portuguese"
msgstr ""
#: paperless/settings/__init__.py:582
#: paperless/settings/__init__.py:571
msgid "Romanian"
msgstr ""
#: paperless/settings/__init__.py:583
#: paperless/settings/__init__.py:572
msgid "Russian"
msgstr ""
#: paperless/settings/__init__.py:584
#: paperless/settings/__init__.py:573
msgid "Slovak"
msgstr ""
#: paperless/settings/__init__.py:585
#: paperless/settings/__init__.py:574
msgid "Slovenian"
msgstr ""
#: paperless/settings/__init__.py:586
#: paperless/settings/__init__.py:575
msgid "Serbian"
msgstr ""
#: paperless/settings/__init__.py:587
#: paperless/settings/__init__.py:576
msgid "Swedish"
msgstr ""
#: paperless/settings/__init__.py:588
#: paperless/settings/__init__.py:577
msgid "Turkish"
msgstr ""
#: paperless/settings/__init__.py:589
#: paperless/settings/__init__.py:578
msgid "Ukrainian"
msgstr ""
#: paperless/settings/__init__.py:590
#: paperless/settings/__init__.py:579
msgid "Vietnamese"
msgstr ""
#: paperless/settings/__init__.py:591
#: paperless/settings/__init__.py:580
msgid "Chinese Simplified"
msgstr ""
#: paperless/settings/__init__.py:592
#: paperless/settings/__init__.py:581
msgid "Chinese Traditional"
msgstr ""
+67 -67
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-25 07:12+0000\n"
"PO-Revision-Date: 2026-07-25 07:14\n"
"POT-Creation-Date: 2026-07-22 15:44+0000\n"
"PO-Revision-Date: 2026-07-22 15:48\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
@@ -21,39 +21,39 @@ msgstr ""
msgid "Documents"
msgstr "المستندات"
#: documents/filters.py:470
#: documents/filters.py:464
msgid "Value must be valid JSON."
msgstr "يجب أن تكون القيمة JSON."
#: documents/filters.py:489
#: documents/filters.py:483
msgid "Invalid custom field query expression"
msgstr "تعبير استعلام غير صالح للحقول المخصصة"
#: documents/filters.py:499
#: documents/filters.py:493
msgid "Invalid expression list. Must be nonempty."
msgstr "قائمة عبارة خاطئة."
#: documents/filters.py:520
#: documents/filters.py:514
msgid "Invalid logical operator {op!r}"
msgstr ""
#: documents/filters.py:534
#: documents/filters.py:528
msgid "Maximum number of query conditions exceeded."
msgstr "تجاوز الحد الأقصى لعدد شروط الاستعلام."
#: documents/filters.py:598
#: documents/filters.py:592
msgid "{name!r} is not a valid custom field."
msgstr "{name!r} حقل مخصص غير صالح."
#: documents/filters.py:635
#: documents/filters.py:629
msgid "{data_type} does not support query expr {expr!r}."
msgstr "{data_type} لا يدعم تعبير الاستعلام {expr!r}."
#: documents/filters.py:750 documents/models.py:136
#: documents/filters.py:744 documents/models.py:136
msgid "Maximum nesting depth exceeded."
msgstr ""
#: documents/filters.py:1067
#: documents/filters.py:1061
msgid "Custom field not found"
msgstr "لم يتم العثور على حقل مخصص"
@@ -1338,48 +1338,48 @@ msgstr ""
msgid "workflow runs"
msgstr ""
#: documents/serialisers.py:522 documents/serialisers.py:874
#: documents/serialisers.py:2763 documents/views.py:298 documents/views.py:2541
#: documents/serialisers.py:503 documents/serialisers.py:855
#: documents/serialisers.py:2744 documents/views.py:297 documents/views.py:2500
#: paperless_mail/serialisers.py:155
msgid "Insufficient permissions."
msgstr ""
#: documents/serialisers.py:710
#: documents/serialisers.py:691
msgid "Invalid color."
msgstr "لون خاطئ."
#: documents/serialisers.py:2235
#: documents/serialisers.py:2216
#, python-format
msgid "File type %(type)s not supported"
msgstr "نوع الملف %(type)s غير مدعوم"
#: documents/serialisers.py:2279
#: documents/serialisers.py:2260
#, python-format
msgid "Custom field id must be an integer: %(id)s"
msgstr ""
#: documents/serialisers.py:2286
#: documents/serialisers.py:2267
#, python-format
msgid "Custom field with id %(id)s does not exist"
msgstr ""
#: documents/serialisers.py:2303 documents/serialisers.py:2313
#: documents/serialisers.py:2284 documents/serialisers.py:2294
msgid "Custom fields must be a list of integers or an object mapping ids to values."
msgstr ""
#: documents/serialisers.py:2308
#: documents/serialisers.py:2289
msgid "Some custom fields don't exist or were specified twice."
msgstr ""
#: documents/serialisers.py:2455
#: documents/serialisers.py:2436
msgid "Invalid variable detected."
msgstr "اكتشاف متغير خاطئ."
#: documents/serialisers.py:2819
#: documents/serialisers.py:2800
msgid "Duplicate document identifiers are not allowed."
msgstr ""
#: documents/serialisers.py:2849 documents/views.py:4500
#: documents/serialisers.py:2830 documents/views.py:4459
#, python-format
msgid "Documents not found: %(ids)s"
msgstr ""
@@ -1635,36 +1635,36 @@ msgstr ""
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:291 documents/views.py:2538
#: documents/views.py:290 documents/views.py:2497
msgid "Invalid more_like_id"
msgstr ""
#: documents/views.py:1556
#: documents/views.py:1524
msgid "Invalid AI configuration."
msgstr ""
#: documents/views.py:1565
#: documents/views.py:1533
msgid "AI backend request timed out."
msgstr ""
#: documents/views.py:2363 documents/views.py:2684
#: documents/views.py:2322 documents/views.py:2643
msgid "Specify only one of text, title_search, query, or more_like_id."
msgstr ""
#: documents/views.py:4512
#: documents/views.py:4471
#, python-format
msgid "Insufficient permissions to share document %(id)s."
msgstr ""
#: documents/views.py:4558
#: documents/views.py:4517
msgid "Bundle is already being processed."
msgstr ""
#: documents/views.py:4619
#: documents/views.py:4578
msgid "The share link bundle is still being prepared. Please try again later."
msgstr ""
#: documents/views.py:4629
#: documents/views.py:4588
msgid "The share link bundle is unavailable."
msgstr ""
@@ -1920,151 +1920,151 @@ msgstr ""
msgid "paperless application settings"
msgstr "إعدادات التطبيق paperless"
#: paperless/settings/__init__.py:556
#: paperless/settings/__init__.py:545
msgid "English (US)"
msgstr "الإنجليزية (الولايات المتحدة)"
#: paperless/settings/__init__.py:557
#: paperless/settings/__init__.py:546
msgid "Arabic"
msgstr "العربية"
#: paperless/settings/__init__.py:558
#: paperless/settings/__init__.py:547
msgid "Afrikaans"
msgstr "اللغة الأفريقانية"
#: paperless/settings/__init__.py:559
#: paperless/settings/__init__.py:548
msgid "Belarusian"
msgstr "البيلاروسية"
#: paperless/settings/__init__.py:560
#: paperless/settings/__init__.py:549
msgid "Bulgarian"
msgstr "البلغارية"
#: paperless/settings/__init__.py:561
#: paperless/settings/__init__.py:550
msgid "Catalan"
msgstr "اللغة الكتالونية"
#: paperless/settings/__init__.py:562
#: paperless/settings/__init__.py:551
msgid "Czech"
msgstr "التشيكية"
#: paperless/settings/__init__.py:563
#: paperless/settings/__init__.py:552
msgid "Danish"
msgstr "الدانماركية"
#: paperless/settings/__init__.py:564
#: paperless/settings/__init__.py:553
msgid "German"
msgstr "الألمانية"
#: paperless/settings/__init__.py:565
#: paperless/settings/__init__.py:554
msgid "Greek"
msgstr "اليونانية"
#: paperless/settings/__init__.py:566
#: paperless/settings/__init__.py:555
msgid "English (GB)"
msgstr "الإنجليزية (المملكة المتحدة)"
#: paperless/settings/__init__.py:567
#: paperless/settings/__init__.py:556
msgid "Spanish"
msgstr "الإسبانية"
#: paperless/settings/__init__.py:568
#: paperless/settings/__init__.py:557
msgid "Persian"
msgstr ""
#: paperless/settings/__init__.py:569
#: paperless/settings/__init__.py:558
msgid "Finnish"
msgstr "الفنلندية"
#: paperless/settings/__init__.py:570
#: paperless/settings/__init__.py:559
msgid "French"
msgstr "الفرنسية"
#: paperless/settings/__init__.py:571
#: paperless/settings/__init__.py:560
msgid "Hungarian"
msgstr "المجرية"
#: paperless/settings/__init__.py:572
#: paperless/settings/__init__.py:561
msgid "Indonesian"
msgstr ""
#: paperless/settings/__init__.py:573
#: paperless/settings/__init__.py:562
msgid "Italian"
msgstr "الإيطالية"
#: paperless/settings/__init__.py:574
#: paperless/settings/__init__.py:563
msgid "Japanese"
msgstr "اليابانية"
#: paperless/settings/__init__.py:575
#: paperless/settings/__init__.py:564
msgid "Korean"
msgstr ""
#: paperless/settings/__init__.py:576
#: paperless/settings/__init__.py:565
msgid "Luxembourgish"
msgstr "اللوكسمبرجية"
#: paperless/settings/__init__.py:577
#: paperless/settings/__init__.py:566
msgid "Norwegian"
msgstr "النرويجية"
#: paperless/settings/__init__.py:578
#: paperless/settings/__init__.py:567
msgid "Dutch"
msgstr "الهولندية"
#: paperless/settings/__init__.py:579
#: paperless/settings/__init__.py:568
msgid "Polish"
msgstr "البولندية"
#: paperless/settings/__init__.py:580
#: paperless/settings/__init__.py:569
msgid "Portuguese (Brazil)"
msgstr "البرتغالية (البرازيل)"
#: paperless/settings/__init__.py:581
#: paperless/settings/__init__.py:570
msgid "Portuguese"
msgstr "البرتغالية"
#: paperless/settings/__init__.py:582
#: paperless/settings/__init__.py:571
msgid "Romanian"
msgstr "الرومانية"
#: paperless/settings/__init__.py:583
#: paperless/settings/__init__.py:572
msgid "Russian"
msgstr "الروسية"
#: paperless/settings/__init__.py:584
#: paperless/settings/__init__.py:573
msgid "Slovak"
msgstr "السلوفاكية"
#: paperless/settings/__init__.py:585
#: paperless/settings/__init__.py:574
msgid "Slovenian"
msgstr "السلوفانية"
#: paperless/settings/__init__.py:586
#: paperless/settings/__init__.py:575
msgid "Serbian"
msgstr "الصربية"
#: paperless/settings/__init__.py:587
#: paperless/settings/__init__.py:576
msgid "Swedish"
msgstr "السويدية"
#: paperless/settings/__init__.py:588
#: paperless/settings/__init__.py:577
msgid "Turkish"
msgstr "التركية"
#: paperless/settings/__init__.py:589
#: paperless/settings/__init__.py:578
msgid "Ukrainian"
msgstr "الأوكرانية"
#: paperless/settings/__init__.py:590
#: paperless/settings/__init__.py:579
msgid "Vietnamese"
msgstr ""
#: paperless/settings/__init__.py:591
#: paperless/settings/__init__.py:580
msgid "Chinese Simplified"
msgstr "الصينية المبسطة"
#: paperless/settings/__init__.py:592
#: paperless/settings/__init__.py:581
msgid "Chinese Traditional"
msgstr ""
+67 -67
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-25 07:12+0000\n"
"PO-Revision-Date: 2026-07-25 07:14\n"
"POT-Creation-Date: 2026-07-22 15:44+0000\n"
"PO-Revision-Date: 2026-07-22 15:48\n"
"Last-Translator: \n"
"Language-Team: Belarusian\n"
"Language: be_BY\n"
@@ -21,39 +21,39 @@ msgstr ""
msgid "Documents"
msgstr "Дакументы"
#: documents/filters.py:470
#: documents/filters.py:464
msgid "Value must be valid JSON."
msgstr ""
#: documents/filters.py:489
#: documents/filters.py:483
msgid "Invalid custom field query expression"
msgstr ""
#: documents/filters.py:499
#: documents/filters.py:493
msgid "Invalid expression list. Must be nonempty."
msgstr ""
#: documents/filters.py:520
#: documents/filters.py:514
msgid "Invalid logical operator {op!r}"
msgstr ""
#: documents/filters.py:534
#: documents/filters.py:528
msgid "Maximum number of query conditions exceeded."
msgstr ""
#: documents/filters.py:598
#: documents/filters.py:592
msgid "{name!r} is not a valid custom field."
msgstr ""
#: documents/filters.py:635
#: documents/filters.py:629
msgid "{data_type} does not support query expr {expr!r}."
msgstr ""
#: documents/filters.py:750 documents/models.py:136
#: documents/filters.py:744 documents/models.py:136
msgid "Maximum nesting depth exceeded."
msgstr ""
#: documents/filters.py:1067
#: documents/filters.py:1061
msgid "Custom field not found"
msgstr ""
@@ -1338,48 +1338,48 @@ msgstr ""
msgid "workflow runs"
msgstr ""
#: documents/serialisers.py:522 documents/serialisers.py:874
#: documents/serialisers.py:2763 documents/views.py:298 documents/views.py:2541
#: documents/serialisers.py:503 documents/serialisers.py:855
#: documents/serialisers.py:2744 documents/views.py:297 documents/views.py:2500
#: paperless_mail/serialisers.py:155
msgid "Insufficient permissions."
msgstr ""
#: documents/serialisers.py:710
#: documents/serialisers.py:691
msgid "Invalid color."
msgstr "Няправільны колер."
#: documents/serialisers.py:2235
#: documents/serialisers.py:2216
#, python-format
msgid "File type %(type)s not supported"
msgstr "Тып файла %(type)s не падтрымліваецца"
#: documents/serialisers.py:2279
#: documents/serialisers.py:2260
#, python-format
msgid "Custom field id must be an integer: %(id)s"
msgstr ""
#: documents/serialisers.py:2286
#: documents/serialisers.py:2267
#, python-format
msgid "Custom field with id %(id)s does not exist"
msgstr ""
#: documents/serialisers.py:2303 documents/serialisers.py:2313
#: documents/serialisers.py:2284 documents/serialisers.py:2294
msgid "Custom fields must be a list of integers or an object mapping ids to values."
msgstr ""
#: documents/serialisers.py:2308
#: documents/serialisers.py:2289
msgid "Some custom fields don't exist or were specified twice."
msgstr ""
#: documents/serialisers.py:2455
#: documents/serialisers.py:2436
msgid "Invalid variable detected."
msgstr "Выяўлена няправільная зменная."
#: documents/serialisers.py:2819
#: documents/serialisers.py:2800
msgid "Duplicate document identifiers are not allowed."
msgstr ""
#: documents/serialisers.py:2849 documents/views.py:4500
#: documents/serialisers.py:2830 documents/views.py:4459
#, python-format
msgid "Documents not found: %(ids)s"
msgstr ""
@@ -1634,36 +1634,36 @@ msgstr ""
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:291 documents/views.py:2538
#: documents/views.py:290 documents/views.py:2497
msgid "Invalid more_like_id"
msgstr ""
#: documents/views.py:1556
#: documents/views.py:1524
msgid "Invalid AI configuration."
msgstr ""
#: documents/views.py:1565
#: documents/views.py:1533
msgid "AI backend request timed out."
msgstr ""
#: documents/views.py:2363 documents/views.py:2684
#: documents/views.py:2322 documents/views.py:2643
msgid "Specify only one of text, title_search, query, or more_like_id."
msgstr ""
#: documents/views.py:4512
#: documents/views.py:4471
#, python-format
msgid "Insufficient permissions to share document %(id)s."
msgstr ""
#: documents/views.py:4558
#: documents/views.py:4517
msgid "Bundle is already being processed."
msgstr ""
#: documents/views.py:4619
#: documents/views.py:4578
msgid "The share link bundle is still being prepared. Please try again later."
msgstr ""
#: documents/views.py:4629
#: documents/views.py:4588
msgid "The share link bundle is unavailable."
msgstr ""
@@ -1919,151 +1919,151 @@ msgstr ""
msgid "paperless application settings"
msgstr ""
#: paperless/settings/__init__.py:556
#: paperless/settings/__init__.py:545
msgid "English (US)"
msgstr "Англійская (ЗША)"
#: paperless/settings/__init__.py:557
#: paperless/settings/__init__.py:546
msgid "Arabic"
msgstr ""
#: paperless/settings/__init__.py:558
#: paperless/settings/__init__.py:547
msgid "Afrikaans"
msgstr ""
#: paperless/settings/__init__.py:559
#: paperless/settings/__init__.py:548
msgid "Belarusian"
msgstr "Беларуская"
#: paperless/settings/__init__.py:560
#: paperless/settings/__init__.py:549
msgid "Bulgarian"
msgstr ""
#: paperless/settings/__init__.py:561
#: paperless/settings/__init__.py:550
msgid "Catalan"
msgstr ""
#: paperless/settings/__init__.py:562
#: paperless/settings/__init__.py:551
msgid "Czech"
msgstr "Чэшская"
#: paperless/settings/__init__.py:563
#: paperless/settings/__init__.py:552
msgid "Danish"
msgstr "Дацкая"
#: paperless/settings/__init__.py:564
#: paperless/settings/__init__.py:553
msgid "German"
msgstr "Нямецкая"
#: paperless/settings/__init__.py:565
#: paperless/settings/__init__.py:554
msgid "Greek"
msgstr ""
#: paperless/settings/__init__.py:566
#: paperless/settings/__init__.py:555
msgid "English (GB)"
msgstr "Англійская (Вялікабрытанія)"
#: paperless/settings/__init__.py:567
#: paperless/settings/__init__.py:556
msgid "Spanish"
msgstr "Іспанская"
#: paperless/settings/__init__.py:568
#: paperless/settings/__init__.py:557
msgid "Persian"
msgstr ""
#: paperless/settings/__init__.py:569
#: paperless/settings/__init__.py:558
msgid "Finnish"
msgstr ""
#: paperless/settings/__init__.py:570
#: paperless/settings/__init__.py:559
msgid "French"
msgstr "Французская"
#: paperless/settings/__init__.py:571
#: paperless/settings/__init__.py:560
msgid "Hungarian"
msgstr ""
#: paperless/settings/__init__.py:572
#: paperless/settings/__init__.py:561
msgid "Indonesian"
msgstr ""
#: paperless/settings/__init__.py:573
#: paperless/settings/__init__.py:562
msgid "Italian"
msgstr "Італьянская"
#: paperless/settings/__init__.py:574
#: paperless/settings/__init__.py:563
msgid "Japanese"
msgstr ""
#: paperless/settings/__init__.py:575
#: paperless/settings/__init__.py:564
msgid "Korean"
msgstr ""
#: paperless/settings/__init__.py:576
#: paperless/settings/__init__.py:565
msgid "Luxembourgish"
msgstr "Люксембургская"
#: paperless/settings/__init__.py:577
#: paperless/settings/__init__.py:566
msgid "Norwegian"
msgstr ""
#: paperless/settings/__init__.py:578
#: paperless/settings/__init__.py:567
msgid "Dutch"
msgstr "Нідэрландская"
#: paperless/settings/__init__.py:579
#: paperless/settings/__init__.py:568
msgid "Polish"
msgstr "Польская"
#: paperless/settings/__init__.py:580
#: paperless/settings/__init__.py:569
msgid "Portuguese (Brazil)"
msgstr "Партугальская (Бразілія)"
#: paperless/settings/__init__.py:581
#: paperless/settings/__init__.py:570
msgid "Portuguese"
msgstr "Партугальская"
#: paperless/settings/__init__.py:582
#: paperless/settings/__init__.py:571
msgid "Romanian"
msgstr "Румынская"
#: paperless/settings/__init__.py:583
#: paperless/settings/__init__.py:572
msgid "Russian"
msgstr "Руская"
#: paperless/settings/__init__.py:584
#: paperless/settings/__init__.py:573
msgid "Slovak"
msgstr ""
#: paperless/settings/__init__.py:585
#: paperless/settings/__init__.py:574
msgid "Slovenian"
msgstr "Славенская"
#: paperless/settings/__init__.py:586
#: paperless/settings/__init__.py:575
msgid "Serbian"
msgstr "Сербская"
#: paperless/settings/__init__.py:587
#: paperless/settings/__init__.py:576
msgid "Swedish"
msgstr "Шведская"
#: paperless/settings/__init__.py:588
#: paperless/settings/__init__.py:577
msgid "Turkish"
msgstr "Турэцкая"
#: paperless/settings/__init__.py:589
#: paperless/settings/__init__.py:578
msgid "Ukrainian"
msgstr ""
#: paperless/settings/__init__.py:590
#: paperless/settings/__init__.py:579
msgid "Vietnamese"
msgstr ""
#: paperless/settings/__init__.py:591
#: paperless/settings/__init__.py:580
msgid "Chinese Simplified"
msgstr "Кітайская спрошчаная"
#: paperless/settings/__init__.py:592
#: paperless/settings/__init__.py:581
msgid "Chinese Traditional"
msgstr ""
+67 -67
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-25 07:12+0000\n"
"PO-Revision-Date: 2026-07-25 07:14\n"
"POT-Creation-Date: 2026-07-22 15:44+0000\n"
"PO-Revision-Date: 2026-07-22 15:48\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
@@ -21,39 +21,39 @@ msgstr ""
msgid "Documents"
msgstr "Документи"
#: documents/filters.py:470
#: documents/filters.py:464
msgid "Value must be valid JSON."
msgstr "Стойността трябва да е валидна JSON."
#: documents/filters.py:489
#: documents/filters.py:483
msgid "Invalid custom field query expression"
msgstr "Невалидна заявка на персонализираното полето"
#: documents/filters.py:499
#: documents/filters.py:493
msgid "Invalid expression list. Must be nonempty."
msgstr "Списък с невалиден израз. Не може да е празно."
#: documents/filters.py:520
#: documents/filters.py:514
msgid "Invalid logical operator {op!r}"
msgstr "Невалиден логически оператор {op!r}"
#: documents/filters.py:534
#: documents/filters.py:528
msgid "Maximum number of query conditions exceeded."
msgstr "Надвишен е максимален брой за заявки."
#: documents/filters.py:598
#: documents/filters.py:592
msgid "{name!r} is not a valid custom field."
msgstr "{name!r} не е валидно персонализирано поле."
#: documents/filters.py:635
#: documents/filters.py:629
msgid "{data_type} does not support query expr {expr!r}."
msgstr "{data_type} не поддържа заявка expr {expr!r}."
#: documents/filters.py:750 documents/models.py:136
#: documents/filters.py:744 documents/models.py:136
msgid "Maximum nesting depth exceeded."
msgstr "Надвишена е максималната дълбочина на вмъкване."
#: documents/filters.py:1067
#: documents/filters.py:1061
msgid "Custom field not found"
msgstr "Персонализирано поле не е намерено"
@@ -1338,48 +1338,48 @@ msgstr "стартиране на работния процес"
msgid "workflow runs"
msgstr "стартиране на работните процеси"
#: documents/serialisers.py:522 documents/serialisers.py:874
#: documents/serialisers.py:2763 documents/views.py:298 documents/views.py:2541
#: documents/serialisers.py:503 documents/serialisers.py:855
#: documents/serialisers.py:2744 documents/views.py:297 documents/views.py:2500
#: paperless_mail/serialisers.py:155
msgid "Insufficient permissions."
msgstr ""
#: documents/serialisers.py:710
#: documents/serialisers.py:691
msgid "Invalid color."
msgstr "Невалиден цвят."
#: documents/serialisers.py:2235
#: documents/serialisers.py:2216
#, python-format
msgid "File type %(type)s not supported"
msgstr "Файловия тип %(type)s не се поддържа"
#: documents/serialisers.py:2279
#: documents/serialisers.py:2260
#, python-format
msgid "Custom field id must be an integer: %(id)s"
msgstr ""
#: documents/serialisers.py:2286
#: documents/serialisers.py:2267
#, python-format
msgid "Custom field with id %(id)s does not exist"
msgstr ""
#: documents/serialisers.py:2303 documents/serialisers.py:2313
#: documents/serialisers.py:2284 documents/serialisers.py:2294
msgid "Custom fields must be a list of integers or an object mapping ids to values."
msgstr ""
#: documents/serialisers.py:2308
#: documents/serialisers.py:2289
msgid "Some custom fields don't exist or were specified twice."
msgstr ""
#: documents/serialisers.py:2455
#: documents/serialisers.py:2436
msgid "Invalid variable detected."
msgstr "Засечена е невалидна променлива."
#: documents/serialisers.py:2819
#: documents/serialisers.py:2800
msgid "Duplicate document identifiers are not allowed."
msgstr ""
#: documents/serialisers.py:2849 documents/views.py:4500
#: documents/serialisers.py:2830 documents/views.py:4459
#, python-format
msgid "Documents not found: %(ids)s"
msgstr ""
@@ -1635,36 +1635,36 @@ msgstr ""
msgid "Unable to parse URI {value}"
msgstr ""
#: documents/views.py:291 documents/views.py:2538
#: documents/views.py:290 documents/views.py:2497
msgid "Invalid more_like_id"
msgstr ""
#: documents/views.py:1556
#: documents/views.py:1524
msgid "Invalid AI configuration."
msgstr ""
#: documents/views.py:1565
#: documents/views.py:1533
msgid "AI backend request timed out."
msgstr ""
#: documents/views.py:2363 documents/views.py:2684
#: documents/views.py:2322 documents/views.py:2643
msgid "Specify only one of text, title_search, query, or more_like_id."
msgstr ""
#: documents/views.py:4512
#: documents/views.py:4471
#, python-format
msgid "Insufficient permissions to share document %(id)s."
msgstr ""
#: documents/views.py:4558
#: documents/views.py:4517
msgid "Bundle is already being processed."
msgstr ""
#: documents/views.py:4619
#: documents/views.py:4578
msgid "The share link bundle is still being prepared. Please try again later."
msgstr ""
#: documents/views.py:4629
#: documents/views.py:4588
msgid "The share link bundle is unavailable."
msgstr ""
@@ -1920,151 +1920,151 @@ msgstr ""
msgid "paperless application settings"
msgstr "настройки на софтуера"
#: paperless/settings/__init__.py:556
#: paperless/settings/__init__.py:545
msgid "English (US)"
msgstr "Английски (САЩ)"
#: paperless/settings/__init__.py:557
#: paperless/settings/__init__.py:546
msgid "Arabic"
msgstr "Арабски"
#: paperless/settings/__init__.py:558
#: paperless/settings/__init__.py:547
msgid "Afrikaans"
msgstr "Африканс"
#: paperless/settings/__init__.py:559
#: paperless/settings/__init__.py:548
msgid "Belarusian"
msgstr "Беларуски"
#: paperless/settings/__init__.py:560
#: paperless/settings/__init__.py:549
msgid "Bulgarian"
msgstr "Български"
#: paperless/settings/__init__.py:561
#: paperless/settings/__init__.py:550
msgid "Catalan"
msgstr "Каталунски"
#: paperless/settings/__init__.py:562
#: paperless/settings/__init__.py:551
msgid "Czech"
msgstr "Чешки"
#: paperless/settings/__init__.py:563
#: paperless/settings/__init__.py:552
msgid "Danish"
msgstr "Датски"
#: paperless/settings/__init__.py:564
#: paperless/settings/__init__.py:553
msgid "German"
msgstr "Немски"
#: paperless/settings/__init__.py:565
#: paperless/settings/__init__.py:554
msgid "Greek"
msgstr "Гръцки"
#: paperless/settings/__init__.py:566
#: paperless/settings/__init__.py:555
msgid "English (GB)"
msgstr "Английски (Великобритания)"
#: paperless/settings/__init__.py:567
#: paperless/settings/__init__.py:556
msgid "Spanish"
msgstr "Испански"
#: paperless/settings/__init__.py:568
#: paperless/settings/__init__.py:557
msgid "Persian"
msgstr ""
#: paperless/settings/__init__.py:569
#: paperless/settings/__init__.py:558
msgid "Finnish"
msgstr "Финландски"
#: paperless/settings/__init__.py:570
#: paperless/settings/__init__.py:559
msgid "French"
msgstr "Френски"
#: paperless/settings/__init__.py:571
#: paperless/settings/__init__.py:560
msgid "Hungarian"
msgstr "Унгарски"
#: paperless/settings/__init__.py:572
#: paperless/settings/__init__.py:561
msgid "Indonesian"
msgstr ""
#: paperless/settings/__init__.py:573
#: paperless/settings/__init__.py:562
msgid "Italian"
msgstr "Италиански"
#: paperless/settings/__init__.py:574
#: paperless/settings/__init__.py:563
msgid "Japanese"
msgstr "Японски"
#: paperless/settings/__init__.py:575
#: paperless/settings/__init__.py:564
msgid "Korean"
msgstr "Корейски"
#: paperless/settings/__init__.py:576
#: paperless/settings/__init__.py:565
msgid "Luxembourgish"
msgstr "Люксембургски"
#: paperless/settings/__init__.py:577
#: paperless/settings/__init__.py:566
msgid "Norwegian"
msgstr "Норвежки"
#: paperless/settings/__init__.py:578
#: paperless/settings/__init__.py:567
msgid "Dutch"
msgstr "Холандски"
#: paperless/settings/__init__.py:579
#: paperless/settings/__init__.py:568
msgid "Polish"
msgstr "Полски"
#: paperless/settings/__init__.py:580
#: paperless/settings/__init__.py:569
msgid "Portuguese (Brazil)"
msgstr "Португалски (Бразилия)"
#: paperless/settings/__init__.py:581
#: paperless/settings/__init__.py:570
msgid "Portuguese"
msgstr "Португалски"
#: paperless/settings/__init__.py:582
#: paperless/settings/__init__.py:571
msgid "Romanian"
msgstr "Румънски"
#: paperless/settings/__init__.py:583
#: paperless/settings/__init__.py:572
msgid "Russian"
msgstr "Руски"
#: paperless/settings/__init__.py:584
#: paperless/settings/__init__.py:573
msgid "Slovak"
msgstr "Словашки"
#: paperless/settings/__init__.py:585
#: paperless/settings/__init__.py:574
msgid "Slovenian"
msgstr "Словенски"
#: paperless/settings/__init__.py:586
#: paperless/settings/__init__.py:575
msgid "Serbian"
msgstr "Сръбски"
#: paperless/settings/__init__.py:587
#: paperless/settings/__init__.py:576
msgid "Swedish"
msgstr "Шведски"
#: paperless/settings/__init__.py:588
#: paperless/settings/__init__.py:577
msgid "Turkish"
msgstr "Турски"
#: paperless/settings/__init__.py:589
#: paperless/settings/__init__.py:578
msgid "Ukrainian"
msgstr "Украински"
#: paperless/settings/__init__.py:590
#: paperless/settings/__init__.py:579
msgid "Vietnamese"
msgstr ""
#: paperless/settings/__init__.py:591
#: paperless/settings/__init__.py:580
msgid "Chinese Simplified"
msgstr "Китайски опростен"
#: paperless/settings/__init__.py:592
#: paperless/settings/__init__.py:581
msgid "Chinese Traditional"
msgstr "Китайски традиционен"
+69 -69
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-25 07:12+0000\n"
"PO-Revision-Date: 2026-07-25 07:14\n"
"POT-Creation-Date: 2026-07-22 15:44+0000\n"
"PO-Revision-Date: 2026-07-22 15:48\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_ES\n"
@@ -21,39 +21,39 @@ msgstr ""
msgid "Documents"
msgstr "Documents "
#: documents/filters.py:470
#: documents/filters.py:464
msgid "Value must be valid JSON."
msgstr "Valor ha de ser un JSON valid."
#: documents/filters.py:489
#: documents/filters.py:483
msgid "Invalid custom field query expression"
msgstr "Expressió de camp de consulta invàlid"
#: documents/filters.py:499
#: documents/filters.py:493
msgid "Invalid expression list. Must be nonempty."
msgstr "Expressió de llista invàlida. No ha d'estar buida."
#: documents/filters.py:520
#: documents/filters.py:514
msgid "Invalid logical operator {op!r}"
msgstr "Invàlid operand lògic {op!r}"
#: documents/filters.py:534
#: documents/filters.py:528
msgid "Maximum number of query conditions exceeded."
msgstr "Condicions de consulta excedits."
#: documents/filters.py:598
#: documents/filters.py:592
msgid "{name!r} is not a valid custom field."
msgstr "{name!r} no és un camp personalitzat vàlid."
#: documents/filters.py:635
#: documents/filters.py:629
msgid "{data_type} does not support query expr {expr!r}."
msgstr "{data_type} no suporta expressió de consulta {expr!r}."
#: documents/filters.py:750 documents/models.py:136
#: documents/filters.py:744 documents/models.py:136
msgid "Maximum nesting depth exceeded."
msgstr "Màxima profunditat anidada excedida."
#: documents/filters.py:1067
#: documents/filters.py:1061
msgid "Custom field not found"
msgstr "Camp personalitzat no trobat"
@@ -1338,48 +1338,48 @@ msgstr "data del flux"
msgid "workflow runs"
msgstr "flux corrents"
#: documents/serialisers.py:522 documents/serialisers.py:874
#: documents/serialisers.py:2763 documents/views.py:298 documents/views.py:2541
#: documents/serialisers.py:503 documents/serialisers.py:855
#: documents/serialisers.py:2744 documents/views.py:297 documents/views.py:2500
#: paperless_mail/serialisers.py:155
msgid "Insufficient permissions."
msgstr "Permisos insuficients."
#: documents/serialisers.py:710
#: documents/serialisers.py:691
msgid "Invalid color."
msgstr "Color Invàlid."
#: documents/serialisers.py:2235
#: documents/serialisers.py:2216
#, python-format
msgid "File type %(type)s not supported"
msgstr "Tipus arxiu %(type)s no suportat"
#: documents/serialisers.py:2279
#: documents/serialisers.py:2260
#, python-format
msgid "Custom field id must be an integer: %(id)s"
msgstr "ID de camp personalizat ha de ser enter: %(id)s"
#: documents/serialisers.py:2286
#: documents/serialisers.py:2267
#, python-format
msgid "Custom field with id %(id)s does not exist"
msgstr "Camp personalitzat amb ID %(id)s no existeix"
#: documents/serialisers.py:2303 documents/serialisers.py:2313
#: documents/serialisers.py:2284 documents/serialisers.py:2294
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."
#: documents/serialisers.py:2308
#: documents/serialisers.py:2289
msgid "Some custom fields don't exist or were specified twice."
msgstr "Alguns camps personalitzats no existeixen o s'han especificat dues vegades."
#: documents/serialisers.py:2455
#: documents/serialisers.py:2436
msgid "Invalid variable detected."
msgstr "Variable detectada invàlida."
#: documents/serialisers.py:2819
#: documents/serialisers.py:2800
msgid "Duplicate document identifiers are not allowed."
msgstr "Duplicat d'identificadors de documents no permès."
#: documents/serialisers.py:2849 documents/views.py:4500
#: documents/serialisers.py:2830 documents/views.py:4459
#, python-format
msgid "Documents not found: %(ids)s"
msgstr "Documents no trobats: %(ids)s"
@@ -1635,36 +1635,36 @@ msgstr "L'esquema d'URI '{parts.scheme}' no està permès. Esquemes permesos: {'
msgid "Unable to parse URI {value}"
msgstr "No s'ha pogut analitzar l'URI {value}"
#: documents/views.py:291 documents/views.py:2538
#: documents/views.py:290 documents/views.py:2497
msgid "Invalid more_like_id"
msgstr "Invalid more_like_id"
#: documents/views.py:1556
#: documents/views.py:1524
msgid "Invalid AI configuration."
msgstr "Configuració AI invàlida."
#: documents/views.py:1565
#: documents/views.py:1533
msgid "AI backend request timed out."
msgstr ""
#: documents/views.py:2363 documents/views.py:2684
#: documents/views.py:2322 documents/views.py:2643
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."
#: documents/views.py:4512
#: documents/views.py:4471
#, python-format
msgid "Insufficient permissions to share document %(id)s."
msgstr "Permisos insuficients per compartir document %(id)s."
#: documents/views.py:4558
#: documents/views.py:4517
msgid "Bundle is already being processed."
msgstr "Paquet ja s'està processant."
#: documents/views.py:4619
#: documents/views.py:4578
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."
#: documents/views.py:4629
#: documents/views.py:4588
msgid "The share link bundle is unavailable."
msgstr "El paquet d'enllaç no està disponible."
@@ -1914,157 +1914,157 @@ msgstr "Estableix l'idioma de sortida de LLM"
#: paperless/models.py:370
msgid "Sets the LLM timeout in seconds"
msgstr "Estableix temps d'espera en segons"
msgstr ""
#: paperless/models.py:376
msgid "paperless application settings"
msgstr "configuració de l'aplicació paperless"
#: paperless/settings/__init__.py:556
#: paperless/settings/__init__.py:545
msgid "English (US)"
msgstr "Anglès (US)"
#: paperless/settings/__init__.py:557
#: paperless/settings/__init__.py:546
msgid "Arabic"
msgstr "Àrab"
#: paperless/settings/__init__.py:558
#: paperless/settings/__init__.py:547
msgid "Afrikaans"
msgstr "Africà"
#: paperless/settings/__init__.py:559
#: paperless/settings/__init__.py:548
msgid "Belarusian"
msgstr "Bielorús"
#: paperless/settings/__init__.py:560
#: paperless/settings/__init__.py:549
msgid "Bulgarian"
msgstr "Búlgar"
#: paperless/settings/__init__.py:561
#: paperless/settings/__init__.py:550
msgid "Catalan"
msgstr "Català"
#: paperless/settings/__init__.py:562
#: paperless/settings/__init__.py:551
msgid "Czech"
msgstr "Txec"
#: paperless/settings/__init__.py:563
#: paperless/settings/__init__.py:552
msgid "Danish"
msgstr "Danès"
#: paperless/settings/__init__.py:564
#: paperless/settings/__init__.py:553
msgid "German"
msgstr "Alemany"
#: paperless/settings/__init__.py:565
#: paperless/settings/__init__.py:554
msgid "Greek"
msgstr "Grec"
#: paperless/settings/__init__.py:566
#: paperless/settings/__init__.py:555
msgid "English (GB)"
msgstr "Anglès (GB)"
#: paperless/settings/__init__.py:567
#: paperless/settings/__init__.py:556
msgid "Spanish"
msgstr "Espanyol"
#: paperless/settings/__init__.py:568
#: paperless/settings/__init__.py:557
msgid "Persian"
msgstr "Persa"
#: paperless/settings/__init__.py:569
#: paperless/settings/__init__.py:558
msgid "Finnish"
msgstr "Finès"
#: paperless/settings/__init__.py:570
#: paperless/settings/__init__.py:559
msgid "French"
msgstr "Francès"
#: paperless/settings/__init__.py:571
#: paperless/settings/__init__.py:560
msgid "Hungarian"
msgstr "Hongarès"
#: paperless/settings/__init__.py:572
#: paperless/settings/__init__.py:561
msgid "Indonesian"
msgstr "Indonesi"
#: paperless/settings/__init__.py:573
#: paperless/settings/__init__.py:562
msgid "Italian"
msgstr "Italià"
#: paperless/settings/__init__.py:574
#: paperless/settings/__init__.py:563
msgid "Japanese"
msgstr "Japonès"
#: paperless/settings/__init__.py:575
#: paperless/settings/__init__.py:564
msgid "Korean"
msgstr "Coreà"
#: paperless/settings/__init__.py:576
#: paperless/settings/__init__.py:565
msgid "Luxembourgish"
msgstr "Luxemburguès"
#: paperless/settings/__init__.py:577
#: paperless/settings/__init__.py:566
msgid "Norwegian"
msgstr "Noruec"
#: paperless/settings/__init__.py:578
#: paperless/settings/__init__.py:567
msgid "Dutch"
msgstr "Holandès"
#: paperless/settings/__init__.py:579
#: paperless/settings/__init__.py:568
msgid "Polish"
msgstr "Polonès"
#: paperless/settings/__init__.py:580
#: paperless/settings/__init__.py:569
msgid "Portuguese (Brazil)"
msgstr "Portuguès (Brasil)"
#: paperless/settings/__init__.py:581
#: paperless/settings/__init__.py:570
msgid "Portuguese"
msgstr "Portuguès"
#: paperless/settings/__init__.py:582
#: paperless/settings/__init__.py:571
msgid "Romanian"
msgstr "Romanès"
#: paperless/settings/__init__.py:583
#: paperless/settings/__init__.py:572
msgid "Russian"
msgstr "Rus"
#: paperless/settings/__init__.py:584
#: paperless/settings/__init__.py:573
msgid "Slovak"
msgstr "Eslovac"
#: paperless/settings/__init__.py:585
#: paperless/settings/__init__.py:574
msgid "Slovenian"
msgstr "Eslovè"
#: paperless/settings/__init__.py:586
#: paperless/settings/__init__.py:575
msgid "Serbian"
msgstr "Serbi"
#: paperless/settings/__init__.py:587
#: paperless/settings/__init__.py:576
msgid "Swedish"
msgstr "Suec"
#: paperless/settings/__init__.py:588
#: paperless/settings/__init__.py:577
msgid "Turkish"
msgstr "Turc"
#: paperless/settings/__init__.py:589
#: paperless/settings/__init__.py:578
msgid "Ukrainian"
msgstr "Ucranià"
#: paperless/settings/__init__.py:590
#: paperless/settings/__init__.py:579
msgid "Vietnamese"
msgstr "Vietnamita"
#: paperless/settings/__init__.py:591
#: paperless/settings/__init__.py:580
msgid "Chinese Simplified"
msgstr "Xinès Simplificat"
#: paperless/settings/__init__.py:592
#: paperless/settings/__init__.py:581
msgid "Chinese Traditional"
msgstr "Xinès tradicional"
@@ -2386,7 +2386,7 @@ msgstr "uid"
#: paperless_mail/models.py:342
msgid "uid validity"
msgstr "validació uid"
msgstr ""
#: paperless_mail/models.py:350
msgid "subject"

Some files were not shown because too many files have changed in this diff Show More