mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-07-30 07:44:54 +00:00
Compare commits
45
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c573fa61cb | ||
|
|
5d0fb476cf | ||
|
|
e3d8bcb102 | ||
|
|
9558ede894 | ||
|
|
437a219658 | ||
|
|
396c0b539c | ||
|
|
50dec14653 | ||
|
|
cc4917efec | ||
|
|
672fc6a0d4 | ||
|
|
943d322196 | ||
|
|
4d956fa13b | ||
|
|
3963581af0 | ||
|
|
581fbab8f3 | ||
|
|
7044d8ae5f | ||
|
|
5e21ba891d | ||
|
|
c2c30541bb | ||
|
|
1ea9775ab4 | ||
|
|
02b97fbaaf | ||
|
|
0e538acdef | ||
|
|
7f58d16758 | ||
|
|
344414bb47 | ||
|
|
8263f75643 | ||
|
|
72d031a7e2 | ||
|
|
1a253d0f26 | ||
|
|
dc4cb829a6 | ||
|
|
cad2d2d151 | ||
|
|
8db09d7c92 | ||
|
|
b02a151e45 | ||
|
|
0083443e77 | ||
|
|
2cd9b94c43 | ||
|
|
b76bd9a7bb | ||
|
|
87a9fcadc8 | ||
|
|
1c4f6b6144 | ||
|
|
2d985961b0 | ||
|
|
08a2186de1 | ||
|
|
a89fdfb033 | ||
|
|
c0fc6c0475 | ||
|
|
28f291c503 | ||
|
|
8263460b7b | ||
|
|
f4e997e524 | ||
|
|
1944208de4 | ||
|
|
db14bd6b61 | ||
|
|
f41181f992 | ||
|
|
b4729ec5d2 | ||
|
|
3cd772d8e9 |
@@ -86,7 +86,7 @@ jobs:
|
|||||||
# ---- Prepare Release ----
|
# ---- Prepare Release ----
|
||||||
- name: Generate requirements file
|
- name: Generate requirements file
|
||||||
run: |
|
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
|
- name: Compile messages
|
||||||
env:
|
env:
|
||||||
PAPERLESS_SECRET_KEY: "ci-release-not-a-real-secret"
|
PAPERLESS_SECRET_KEY: "ci-release-not-a-real-secret"
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
PAPERLESS_REDIS: redis://broker:6379
|
PAPERLESS_REDIS: redis://broker:6379
|
||||||
PAPERLESS_DBHOST: db
|
PAPERLESS_DBHOST: db
|
||||||
PAPERLESS_DBENGINE: postgresql
|
PAPERLESS_DBENGINE: postgres
|
||||||
env_file:
|
env_file:
|
||||||
- stack.env
|
- stack.env
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
+15
-17
@@ -151,23 +151,6 @@ the background.
|
|||||||
|
|
||||||
### Bare Metal Route {#bare-metal-updating}
|
### 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
|
After grabbing the new release and unpacking the contents, do the
|
||||||
following:
|
following:
|
||||||
|
|
||||||
@@ -289,6 +272,8 @@ optional arguments:
|
|||||||
-sm, --split-manifest
|
-sm, --split-manifest
|
||||||
-z, --zip
|
-z, --zip
|
||||||
-zn, --zip-name
|
-zn, --zip-name
|
||||||
|
--zip-compression
|
||||||
|
--zip-compression-level
|
||||||
--data-only
|
--data-only
|
||||||
--no-progress-bar
|
--no-progress-bar
|
||||||
--passphrase
|
--passphrase
|
||||||
@@ -351,6 +336,19 @@ If `-z` or `--zip` is provided, the export will be a zip file
|
|||||||
in the target directory, named according to the current local date or the
|
in the target directory, named according to the current local date or the
|
||||||
value set in `-zn` or `--zip-name`.
|
value set in `-zn` or `--zip-name`.
|
||||||
|
|
||||||
|
The compression method for the zip can be set with `--zip-compression`
|
||||||
|
(`stored`, `deflated` (default), `bzip2`, `lzma`, or `zstd`) and tuned with
|
||||||
|
`--zip-compression-level` (deflated: 0–9, bzip2: 1–9, zstd: -22–22; ignored
|
||||||
|
for `stored` and `lzma`). Both options require `--zip`.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
|
||||||
|
`zstd` compression requires Python 3.14 or newer on **both** the machine
|
||||||
|
creating the export and any machine importing it. An archive compressed with
|
||||||
|
`zstd` (or `lzma`/`bzip2` where those modules are unavailable) cannot be
|
||||||
|
imported on a runtime that lacks the codec; the importer will refuse it with
|
||||||
|
a clear error. The default `deflated` is universally readable.
|
||||||
|
|
||||||
If `--data-only` is provided, only the database will be exported. This option is intended
|
If `--data-only` is provided, only the database will be exported. This option is intended
|
||||||
to facilitate database upgrades without needing to clean documents and thumbnails from the media directory.
|
to facilitate database upgrades without needing to clean documents and thumbnails from the media directory.
|
||||||
|
|
||||||
|
|||||||
@@ -1,64 +1,5 @@
|
|||||||
# Changelog
|
# 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
|
## paperless-ngx 3.0.0
|
||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
|||||||
+8
-22
@@ -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
|
fail2ban with log entries for failed authorization attempts. Value should be
|
||||||
IP address(es).
|
IP address(es).
|
||||||
|
|
||||||
By default, this setting also controls allauth's trusted proxy count,
|
This setting also controls allauth's
|
||||||
which is set to the number of proxies listed here. Override that default
|
[`ALLAUTH_TRUSTED_PROXY_COUNT`](https://docs.allauth.org/en/latest/account/configuration.html),
|
||||||
with [`PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT`](#PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT)
|
which is set to the number of proxies listed here. Without this,
|
||||||
when the list length does not match the number of proxy hops.
|
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.
|
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}
|
#### [`PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER=<header-name>`](#PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER) {#PAPERLESS_ALLAUTH_TRUSTED_CLIENT_IP_HEADER}
|
||||||
|
|
||||||
: Sets allauth's
|
: 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
|
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)
|
client IP instead of `X-Forwarded-For`, for example `X-Real-IP` (nginx)
|
||||||
or `CF-Connecting-IP` (Cloudflare). When set, this takes precedence over
|
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.
|
Defaults to none.
|
||||||
|
|
||||||
@@ -2135,7 +2121,7 @@ used with the OpenAI-compatible backend to target a custom provider or local gat
|
|||||||
|
|
||||||
Defaults to None.
|
Defaults to None.
|
||||||
|
|
||||||
#### [`PAPERLESS_AI_LLM_OUTPUT_LANGUAGE=<str>`](#PAPERLESS_AI_LLM_OUTPUT_LANGUAGE) {#PAPERLESS_AI_LLM_OUTPUT_LANGUAGE}
|
### [`PAPERLESS_AI_LLM_OUTPUT_LANGUAGE=<str>`](#PAPERLESS_AI_LLM_OUTPUT_LANGUAGE) {#PAPERLESS_AI_LLM_OUTPUT_LANGUAGE}
|
||||||
|
|
||||||
: The language to use for AI suggestions (results may vary by LLM model). If not supplied, defaults to the user's UI language setting or None.
|
: The language to use for AI suggestions (results may vary by LLM model). If not supplied, defaults to the user's UI language setting or None.
|
||||||
|
|
||||||
|
|||||||
+4
-65
@@ -133,7 +133,7 @@ PAPERLESS_DB_OPTIONS="sslmode=require,sslrootcert=/certs/ca.pem,pool.max_size=10
|
|||||||
|
|
||||||
## OCR and Archive File Generation Settings
|
## 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
|
### 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
|
# v2: skip OCR when text present, always archive
|
||||||
PAPERLESS_OCR_MODE=skip
|
PAPERLESS_OCR_MODE=skip
|
||||||
# v3: equivalent (auto is the new default)
|
# 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
|
# v2: skip OCR when text present, skip archive too
|
||||||
PAPERLESS_OCR_MODE=skip_noarchive
|
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
|
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`
|
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.
|
unconditionally by the remote engine.
|
||||||
|
|
||||||
## Search Index (Whoosh -> Tantivy)
|
## 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
|
Allauth changed how it determines the client IP address for login rate limiting. Users running
|
||||||
behind a reverse proxy may need to set
|
behind a reverse proxy may need to set
|
||||||
[`PAPERLESS_TRUSTED_PROXIES`](configuration.md#PAPERLESS_TRUSTED_PROXIES),
|
[`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),
|
[`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.
|
or both, 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.
|
|
||||||
|
|
||||||
## Database Migrations
|
## Database Migrations
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
and copy the contents to the home directory of the user you created
|
||||||
earlier (`/opt/paperless`).
|
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
|
Optional: If you cloned the Git repository, you will need to
|
||||||
compile the frontend yourself. See [here](development.md#front-end-development)
|
compile the frontend yourself. See [here](development.md#front-end-development)
|
||||||
and use the `build` step, not `serve`.
|
and use the `build` step, not `serve`.
|
||||||
|
|||||||
@@ -0,0 +1,839 @@
|
|||||||
|
# Export Zip Compression Control Implementation Plan
|
||||||
|
|
||||||
|
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||||
|
|
||||||
|
**Goal:** Add `--zip-compression {stored,deflated,bzip2,lzma,zstd}` and `--zip-compression-level N` flags to `document_exporter`, threaded into `ZipExportSink`, with import-side safety for codecs the running Python can't read.
|
||||||
|
|
||||||
|
**Architecture:** A new pure-data module `documents/export/compression.py` owns the method↔constant map, per-method level bounds, the runtime availability probe, and a compress-type readability check. `ZipExportSink` gains `compression`/`compresslevel` constructor params. The command validates flags up front (fail-fast `CommandError`) and constructs the sink; the importer pre-checks entry compress types before extracting.
|
||||||
|
|
||||||
|
**Tech Stack:** Python ≥3.11 (zstd only on 3.14+), `zipfile`, `compression.zstd` (PEP 784), pytest + pytest-mock + factory-boy. Backend tests run on the Linux VM (Python 3.11 — zstd positive tests are `skipif`-guarded); `ruff` runs locally.
|
||||||
|
|
||||||
|
**Spec:** `docs/superpowers/specs/2026-06-16-export-zip-compression-design.md`
|
||||||
|
|
||||||
|
**PREREQUISITE:** The base refactor `docs/superpowers/plans/2026-06-16-export-sink-architecture.md` MUST be merged first. This plan assumes `src/documents/export/sinks.py` exists with `ZipExportSink(target, zip_name, *, delete=False)` opening its `ZipFile` in `_open()`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verified facts (CPython 3.14.3, via `uv run --python 3.14 --no-project`)
|
||||||
|
|
||||||
|
- Constants: `ZIP_STORED=0`, `ZIP_DEFLATED=8`, `ZIP_BZIP2=12`, `ZIP_LZMA=14`, `ZIP_ZSTANDARD=93` (zstd added 3.14; absent on < 3.14).
|
||||||
|
- `ZipFile(file, "w", compression=…, compresslevel=…)` applies both as the default for every `write`/`writestr` — no per-entry args needed (verified).
|
||||||
|
- Level bounds: `deflated` 0–9, `bzip2` 1–9, `lzma`/`stored` ignore level, `zstd` -131072…22 (`compression.zstd.CompressionParameter.compression_level.bounds() == (-131072, 22)`).
|
||||||
|
- An invalid level fails at the **first write** (`ValueError: Invalid initialization option` / `compresslevel must be between 1 and 9`), plus GC-time `AttributeError` noise on close — hence up-front validation.
|
||||||
|
- zstd is backed by `compression.zstd`; `zipfile` raises `RuntimeError` if it's unavailable.
|
||||||
|
|
||||||
|
## Conventions for every task
|
||||||
|
|
||||||
|
- **Run backend tests on the VM:** `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "<targets>"` (never locally).
|
||||||
|
- **Lint locally:** `ruff check <paths> && ruff format <paths>` (global ruff, not `uv run`).
|
||||||
|
- **Tests are pytest-style:** classes, `@pytest.mark.django_db` on the class only where DB is needed (the `compression.py` and sink tests need no DB), factory-boy, `mocker`, `parametrize`, full type annotations.
|
||||||
|
- The VM runs Python 3.11, so **zstd positive tests must be `@pytest.mark.skipif(...)`-guarded**; they will simply not run there. zstd _rejection_ tests (the < 3.14 path) DO run on the VM.
|
||||||
|
|
||||||
|
## File structure
|
||||||
|
|
||||||
|
- **Create** `src/documents/export/compression.py` — method map, CLI choices, level bounds, `compression_available()`, `level_error()`, `compress_type_readable()`, `unreadable_method_names()`. Pure, no Django.
|
||||||
|
- **Create** `src/documents/tests/export/test_compression.py` — unit tests for the above.
|
||||||
|
- **Modify** `src/documents/export/sinks.py` — `ZipExportSink.__init__` gains `compression`/`compresslevel`; `_open()` passes them to `ZipFile`.
|
||||||
|
- **Modify** `src/documents/tests/export/test_sinks.py` — assert the chosen `compress_type` is applied.
|
||||||
|
- **Modify** `src/documents/management/commands/document_exporter.py` — add the two CLI flags, up-front validation, and pass resolved values to `ZipExportSink`.
|
||||||
|
- **Modify** `src/documents/tests/test_management_exporter.py` — flag validation + default-unchanged tests.
|
||||||
|
- **Modify** `src/documents/management/commands/document_importer.py` — pre-extract compress-type check.
|
||||||
|
- **Modify** `src/documents/tests/test_management_importer.py` — unsupported-codec → `CommandError`.
|
||||||
|
- **Modify** `docs/administration.md` — document both flags + zstd portability caveat.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 1: `documents/export/compression.py` (pure compression policy)
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
|
||||||
|
- Create: `src/documents/export/compression.py`
|
||||||
|
- Test: `src/documents/tests/export/test_compression.py`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write the failing tests**
|
||||||
|
|
||||||
|
Create `src/documents/tests/export/test_compression.py`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import sys
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from documents.export import compression
|
||||||
|
|
||||||
|
|
||||||
|
class TestCompressionMethods:
|
||||||
|
def test_choices_always_include_zstd(self) -> None:
|
||||||
|
# zstd is offered regardless of runtime; availability is checked separately
|
||||||
|
assert compression.COMPRESSION_CHOICES == (
|
||||||
|
"stored",
|
||||||
|
"deflated",
|
||||||
|
"bzip2",
|
||||||
|
"lzma",
|
||||||
|
"zstd",
|
||||||
|
)
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("name", "constant"),
|
||||||
|
[
|
||||||
|
("stored", zipfile.ZIP_STORED),
|
||||||
|
("deflated", zipfile.ZIP_DEFLATED),
|
||||||
|
("bzip2", zipfile.ZIP_BZIP2),
|
||||||
|
("lzma", zipfile.ZIP_LZMA),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_method_maps_to_zipfile_constant(self, name: str, constant: int) -> None:
|
||||||
|
assert compression.COMPRESSION_METHODS[name] == constant
|
||||||
|
|
||||||
|
def test_stored_and_deflated_always_available(self) -> None:
|
||||||
|
assert compression.compression_available("stored")
|
||||||
|
assert compression.compression_available("deflated")
|
||||||
|
|
||||||
|
def test_zstd_availability_tracks_runtime(self) -> None:
|
||||||
|
expected: bool = sys.version_info >= (3, 14)
|
||||||
|
assert compression.compression_available("zstd") == expected
|
||||||
|
|
||||||
|
|
||||||
|
class TestLevelError:
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("method", "level"),
|
||||||
|
[
|
||||||
|
("deflated", 0),
|
||||||
|
("deflated", 9),
|
||||||
|
("bzip2", 1),
|
||||||
|
("bzip2", 9),
|
||||||
|
("deflated", None),
|
||||||
|
("stored", None),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_valid_levels_return_none(self, method: str, level: int | None) -> None:
|
||||||
|
assert compression.level_error(method, level) is None
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("method", "level"),
|
||||||
|
[
|
||||||
|
("deflated", 10),
|
||||||
|
("deflated", -1),
|
||||||
|
("bzip2", 0),
|
||||||
|
("bzip2", 10),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_out_of_range_levels_return_message(
|
||||||
|
self,
|
||||||
|
method: str,
|
||||||
|
level: int,
|
||||||
|
) -> None:
|
||||||
|
msg: str | None = compression.level_error(method, level)
|
||||||
|
assert msg is not None
|
||||||
|
assert "between" in msg
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("method", ["stored", "lzma"])
|
||||||
|
def test_level_on_levelless_method_is_rejected(self, method: str) -> None:
|
||||||
|
msg: str | None = compression.level_error(method, 5)
|
||||||
|
assert msg is not None
|
||||||
|
assert "no effect" in msg
|
||||||
|
|
||||||
|
|
||||||
|
class TestCompressTypeReadable:
|
||||||
|
@pytest.mark.parametrize("ct", [zipfile.ZIP_STORED, zipfile.ZIP_DEFLATED])
|
||||||
|
def test_stored_and_deflated_always_readable(self, ct: int) -> None:
|
||||||
|
assert compression.compress_type_readable(ct)
|
||||||
|
|
||||||
|
def test_zstd_compress_type_readability_tracks_runtime(self) -> None:
|
||||||
|
# 93 = ZIP_ZSTANDARD; 20 = legacy zstd method id (read-only)
|
||||||
|
expected: bool = sys.version_info >= (3, 14)
|
||||||
|
assert compression.compress_type_readable(93) == expected
|
||||||
|
assert compression.compress_type_readable(20) == expected
|
||||||
|
|
||||||
|
def test_unknown_compress_type_is_unreadable(self) -> None:
|
||||||
|
assert not compression.compress_type_readable(9999)
|
||||||
|
|
||||||
|
def test_unreadable_method_names_lists_methods(self) -> None:
|
||||||
|
# An unknown method id maps to no name and is reported generically.
|
||||||
|
names: set[str] = compression.unreadable_method_names({9999})
|
||||||
|
assert names == {"method 9999"}
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Run to verify it fails**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/export/test_compression.py -v"`
|
||||||
|
Expected: FAIL with `ModuleNotFoundError: No module named 'documents.export.compression'`.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Implement `compression.py`**
|
||||||
|
|
||||||
|
Create `src/documents/export/compression.py`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import importlib
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
# ZIP_ZSTANDARD exists only on Python 3.14+ (PEP 784). None elsewhere.
|
||||||
|
ZSTD: int | None = getattr(zipfile, "ZIP_ZSTANDARD", None)
|
||||||
|
|
||||||
|
# CLI choices are fixed across runtimes so argparse never hides zstd; runtime
|
||||||
|
# availability is enforced separately in compression_available().
|
||||||
|
COMPRESSION_CHOICES: tuple[str, ...] = (
|
||||||
|
"stored",
|
||||||
|
"deflated",
|
||||||
|
"bzip2",
|
||||||
|
"lzma",
|
||||||
|
"zstd",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Method name -> zipfile compression constant (zstd only when supported).
|
||||||
|
COMPRESSION_METHODS: dict[str, int] = {
|
||||||
|
"stored": zipfile.ZIP_STORED,
|
||||||
|
"deflated": zipfile.ZIP_DEFLATED,
|
||||||
|
"bzip2": zipfile.ZIP_BZIP2,
|
||||||
|
"lzma": zipfile.ZIP_LZMA,
|
||||||
|
}
|
||||||
|
if ZSTD is not None:
|
||||||
|
COMPRESSION_METHODS["zstd"] = ZSTD
|
||||||
|
|
||||||
|
# Inclusive (min, max) level bounds per method; None => level not applicable.
|
||||||
|
# Verified on CPython 3.14.3.
|
||||||
|
LEVEL_BOUNDS: dict[str, tuple[int, int] | None] = {
|
||||||
|
"stored": None,
|
||||||
|
"deflated": (0, 9),
|
||||||
|
"bzip2": (1, 9),
|
||||||
|
"lzma": None,
|
||||||
|
"zstd": (-131072, 22),
|
||||||
|
}
|
||||||
|
|
||||||
|
# zipfile compress_type id -> method name. 93 = current zstd id, 20 = legacy
|
||||||
|
# zstd id that zipfile can still read.
|
||||||
|
_COMPRESS_TYPE_TO_METHOD: dict[int, str] = {
|
||||||
|
zipfile.ZIP_STORED: "stored",
|
||||||
|
zipfile.ZIP_DEFLATED: "deflated",
|
||||||
|
zipfile.ZIP_BZIP2: "bzip2",
|
||||||
|
zipfile.ZIP_LZMA: "lzma",
|
||||||
|
93: "zstd",
|
||||||
|
20: "zstd",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def compression_available(method: str) -> bool:
|
||||||
|
"""Whether the running interpreter can actually use the given method."""
|
||||||
|
if method in ("stored", "deflated"):
|
||||||
|
# zlib is a hard CPython dependency; stored needs nothing.
|
||||||
|
return True
|
||||||
|
if method == "bzip2":
|
||||||
|
return _module_importable("bz2")
|
||||||
|
if method == "lzma":
|
||||||
|
return _module_importable("lzma")
|
||||||
|
if method == "zstd":
|
||||||
|
return ZSTD is not None and _module_importable("compression.zstd")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _module_importable(name: str) -> bool:
|
||||||
|
try:
|
||||||
|
importlib.import_module(name)
|
||||||
|
except ImportError:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def level_error(method: str, level: int | None) -> str | None:
|
||||||
|
"""Return a human message if (method, level) is invalid, else None."""
|
||||||
|
if level is None:
|
||||||
|
return None
|
||||||
|
bounds = LEVEL_BOUNDS[method]
|
||||||
|
if bounds is None:
|
||||||
|
return f"--zip-compression-level has no effect for '{method}'"
|
||||||
|
low, high = bounds
|
||||||
|
if not (low <= level <= high):
|
||||||
|
return (
|
||||||
|
f"--zip-compression-level for '{method}' must be between "
|
||||||
|
f"{low} and {high}"
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def compress_type_readable(compress_type: int) -> bool:
|
||||||
|
"""Whether this interpreter can decompress an entry of the given type."""
|
||||||
|
method = _COMPRESS_TYPE_TO_METHOD.get(compress_type)
|
||||||
|
if method is None:
|
||||||
|
return False
|
||||||
|
return compression_available(method)
|
||||||
|
|
||||||
|
|
||||||
|
def unreadable_method_names(compress_types: set[int]) -> set[str]:
|
||||||
|
"""Map a set of compress_type ids to human method names for error messages."""
|
||||||
|
names: set[str] = set()
|
||||||
|
for ct in compress_types:
|
||||||
|
names.add(_COMPRESS_TYPE_TO_METHOD.get(ct, f"method {ct}"))
|
||||||
|
return names
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 4: Run to verify it passes**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/export/test_compression.py -v"`
|
||||||
|
Expected: PASS (on the 3.11 VM, `test_zstd_availability_tracks_runtime` and `test_zstd_compress_type_readability_tracks_runtime` assert `False`).
|
||||||
|
|
||||||
|
- [ ] **Step 5: Lint**
|
||||||
|
|
||||||
|
Run: `ruff check src/documents/export/compression.py src/documents/tests/export/test_compression.py && ruff format src/documents/export/compression.py src/documents/tests/export/test_compression.py`
|
||||||
|
Expected: no errors.
|
||||||
|
|
||||||
|
- [ ] **Step 6: Commit**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add src/documents/export/compression.py src/documents/tests/export/test_compression.py
|
||||||
|
git commit -m "Feature: add export compression policy module"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 2: `ZipExportSink` accepts compression method + level
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
|
||||||
|
- Modify: `src/documents/export/sinks.py`
|
||||||
|
- Test: `src/documents/tests/export/test_sinks.py`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write the failing test**
|
||||||
|
|
||||||
|
Append to `src/documents/tests/export/test_sinks.py` (the top-of-file block already imports `zipfile`, `Path`, `pytest`, `ZipExportSink`, `StreamingManifestWriter` from the base-refactor plan):
|
||||||
|
|
||||||
|
```python
|
||||||
|
class TestZipExportSinkCompression:
|
||||||
|
@pytest.fixture()
|
||||||
|
def source_file(self, tmp_path: Path) -> Path:
|
||||||
|
src: Path = tmp_path / "src" / "doc.pdf"
|
||||||
|
src.parent.mkdir(parents=True)
|
||||||
|
src.write_bytes(b"PDF-CONTENT" * 100)
|
||||||
|
return src
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("method", "constant"),
|
||||||
|
[
|
||||||
|
("stored", zipfile.ZIP_STORED),
|
||||||
|
("deflated", zipfile.ZIP_DEFLATED),
|
||||||
|
("bzip2", zipfile.ZIP_BZIP2),
|
||||||
|
("lzma", zipfile.ZIP_LZMA),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_compression_method_is_applied_to_file_entries(
|
||||||
|
self,
|
||||||
|
tmp_path: Path,
|
||||||
|
source_file: Path,
|
||||||
|
method: str,
|
||||||
|
constant: int,
|
||||||
|
) -> None:
|
||||||
|
target: Path = tmp_path / "out"
|
||||||
|
target.mkdir()
|
||||||
|
with ZipExportSink(
|
||||||
|
target,
|
||||||
|
"export",
|
||||||
|
delete=False,
|
||||||
|
compression=constant,
|
||||||
|
) as sink:
|
||||||
|
sink.add_file(source_file, "doc.pdf")
|
||||||
|
with zipfile.ZipFile(target / "export.zip") as zf:
|
||||||
|
info = zf.getinfo("doc.pdf")
|
||||||
|
assert info.compress_type == constant
|
||||||
|
|
||||||
|
def test_compressing_method_beats_stored(
|
||||||
|
self,
|
||||||
|
tmp_path: Path,
|
||||||
|
source_file: Path,
|
||||||
|
) -> None:
|
||||||
|
# Robust size invariant: a compressing method must be <= stored on
|
||||||
|
# compressible content (avoids flaky level-9-vs-level-1 comparisons).
|
||||||
|
sizes: dict[str, int] = {}
|
||||||
|
for name, constant in (("stored", zipfile.ZIP_STORED), ("deflated", zipfile.ZIP_DEFLATED)):
|
||||||
|
target: Path = tmp_path / name
|
||||||
|
target.mkdir()
|
||||||
|
with ZipExportSink(target, "export", delete=False, compression=constant) as sink:
|
||||||
|
sink.add_file(source_file, "doc.pdf")
|
||||||
|
sizes[name] = (target / "export.zip").stat().st_size
|
||||||
|
assert sizes["deflated"] <= sizes["stored"]
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Run to verify it fails**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/export/test_sinks.py::TestZipExportSinkCompression -v"`
|
||||||
|
Expected: FAIL with `TypeError: __init__() got an unexpected keyword argument 'compression'`.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Add the params to `ZipExportSink`**
|
||||||
|
|
||||||
|
In `src/documents/export/sinks.py`, change `ZipExportSink.__init__` to accept the new keyword-only params and store them, and pass them in `_open()`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
target: Path,
|
||||||
|
zip_name: str,
|
||||||
|
*,
|
||||||
|
delete: bool = False,
|
||||||
|
compression: int = zipfile.ZIP_DEFLATED,
|
||||||
|
compresslevel: int | None = None,
|
||||||
|
) -> 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._compression = compression
|
||||||
|
self._compresslevel = compresslevel
|
||||||
|
self._zip: zipfile.ZipFile | None = None
|
||||||
|
self._dirs: set[str] = set()
|
||||||
|
self._pending_manifest: tuple[Path, str] | None = None
|
||||||
|
self._stream_open = False
|
||||||
|
```
|
||||||
|
|
||||||
|
And in `_open()`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def _open(self) -> None:
|
||||||
|
settings.SCRATCH_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
self._zip = zipfile.ZipFile(
|
||||||
|
self._tmp_path,
|
||||||
|
"w",
|
||||||
|
compression=self._compression,
|
||||||
|
compresslevel=self._compresslevel,
|
||||||
|
allowZip64=True,
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 4: Run to verify it passes**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/export/test_sinks.py -v"`
|
||||||
|
Expected: PASS (all sink tests, including the four method params and the size invariant). `bzip2`/`lzma` are present on the VM's CPython, so those params pass.
|
||||||
|
|
||||||
|
- [ ] **Step 5: Lint**
|
||||||
|
|
||||||
|
Run: `ruff check src/documents/export/sinks.py && ruff format src/documents/export/sinks.py`
|
||||||
|
Expected: no errors.
|
||||||
|
|
||||||
|
- [ ] **Step 6: Commit**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add src/documents/export/sinks.py src/documents/tests/export/test_sinks.py
|
||||||
|
git commit -m "Feature: ZipExportSink accepts compression method and level"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 3: Wire CLI flags + validation into `document_exporter`
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
|
||||||
|
- Modify: `src/documents/management/commands/document_exporter.py`
|
||||||
|
- Test: `src/documents/tests/test_management_exporter.py`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Add the argparse flags**
|
||||||
|
|
||||||
|
In `document_exporter.py`, add the import near the other `documents.export` import:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from documents.export.compression import COMPRESSION_CHOICES
|
||||||
|
from documents.export.compression import COMPRESSION_METHODS
|
||||||
|
from documents.export.compression import compression_available
|
||||||
|
from documents.export.compression import level_error
|
||||||
|
from documents.export.compression import ZSTD
|
||||||
|
```
|
||||||
|
|
||||||
|
In `add_arguments`, after the `--zip-name` argument, add:
|
||||||
|
|
||||||
|
```python
|
||||||
|
parser.add_argument(
|
||||||
|
"--zip-compression",
|
||||||
|
choices=COMPRESSION_CHOICES,
|
||||||
|
default=None,
|
||||||
|
help=(
|
||||||
|
"Compression method for the export zip (requires --zip). "
|
||||||
|
"Default: deflated. 'zstd' requires Python 3.14+ on both the "
|
||||||
|
"exporting and importing machine."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--zip-compression-level",
|
||||||
|
type=int,
|
||||||
|
default=None,
|
||||||
|
help=(
|
||||||
|
"Compression level for the export zip (requires --zip). "
|
||||||
|
"deflated: 0-9, bzip2: 1-9, zstd: -131072..22; ignored for "
|
||||||
|
"stored/lzma."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Read + validate the flags in `handle()`**
|
||||||
|
|
||||||
|
In `handle()`, after the existing `--compare-*` + `--zip` guard, add the compression flag handling. Insert before the sink construction:
|
||||||
|
|
||||||
|
```python
|
||||||
|
zip_compression: str | None = options["zip_compression"]
|
||||||
|
zip_compression_level: int | None = options["zip_compression_level"]
|
||||||
|
|
||||||
|
if not self.zip_export and (
|
||||||
|
zip_compression is not None or zip_compression_level is not None
|
||||||
|
):
|
||||||
|
raise CommandError(
|
||||||
|
"--zip-compression and --zip-compression-level require --zip",
|
||||||
|
)
|
||||||
|
|
||||||
|
compression_method = zip_compression or "deflated"
|
||||||
|
if self.zip_export:
|
||||||
|
if not compression_available(compression_method):
|
||||||
|
if compression_method == "zstd" and ZSTD is None:
|
||||||
|
raise CommandError(
|
||||||
|
"zstd compression requires Python 3.14 or newer",
|
||||||
|
)
|
||||||
|
raise CommandError(
|
||||||
|
f"Compression method '{compression_method}' is not "
|
||||||
|
f"available on this Python runtime",
|
||||||
|
)
|
||||||
|
level_msg = level_error(compression_method, zip_compression_level)
|
||||||
|
if level_msg is not None:
|
||||||
|
raise CommandError(level_msg)
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 3: Pass the resolved values into `ZipExportSink`**
|
||||||
|
|
||||||
|
Change the `ZipExportSink(...)` construction in `handle()` to:
|
||||||
|
|
||||||
|
```python
|
||||||
|
if self.zip_export:
|
||||||
|
sink = ZipExportSink(
|
||||||
|
self.target,
|
||||||
|
options["zip_name"],
|
||||||
|
delete=self.delete,
|
||||||
|
compression=COMPRESSION_METHODS[compression_method],
|
||||||
|
compresslevel=zip_compression_level,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
sink = DirectoryExportSink(
|
||||||
|
self.target,
|
||||||
|
compare_checksums=self.compare_checksums,
|
||||||
|
compare_json=self.compare_json,
|
||||||
|
delete=self.delete,
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 4: Write the command-level tests**
|
||||||
|
|
||||||
|
Add to the `TestExportImport` class in `src/documents/tests/test_management_exporter.py` (imports `call_command`, `CommandError`, `ZipFile`, `timezone` already present):
|
||||||
|
|
||||||
|
```python
|
||||||
|
def test_compression_flags_require_zip(self) -> None:
|
||||||
|
for args in (
|
||||||
|
["--zip-compression", "lzma"],
|
||||||
|
["--zip-compression-level", "5"],
|
||||||
|
):
|
||||||
|
with self.assertRaises(CommandError):
|
||||||
|
call_command(
|
||||||
|
"document_exporter",
|
||||||
|
self.target,
|
||||||
|
*args,
|
||||||
|
skip_checks=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_zip_compression_level_out_of_range_raises(self) -> None:
|
||||||
|
with self.assertRaises(CommandError):
|
||||||
|
call_command(
|
||||||
|
"document_exporter",
|
||||||
|
self.target,
|
||||||
|
"--zip",
|
||||||
|
"--zip-compression",
|
||||||
|
"deflated",
|
||||||
|
"--zip-compression-level",
|
||||||
|
"99",
|
||||||
|
skip_checks=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_zip_compression_level_rejected_for_stored(self) -> None:
|
||||||
|
with self.assertRaises(CommandError):
|
||||||
|
call_command(
|
||||||
|
"document_exporter",
|
||||||
|
self.target,
|
||||||
|
"--zip",
|
||||||
|
"--zip-compression",
|
||||||
|
"stored",
|
||||||
|
"--zip-compression-level",
|
||||||
|
"5",
|
||||||
|
skip_checks=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_zip_lzma_compression_round_trips(self) -> None:
|
||||||
|
call_command(
|
||||||
|
"document_exporter",
|
||||||
|
self.target,
|
||||||
|
"--zip",
|
||||||
|
"--zip-compression",
|
||||||
|
"lzma",
|
||||||
|
skip_checks=True,
|
||||||
|
)
|
||||||
|
expected = str(
|
||||||
|
self.target / f"export-{timezone.localdate().isoformat()}.zip",
|
||||||
|
)
|
||||||
|
self.assertIsFile(expected)
|
||||||
|
with ZipFile(expected) as zip_file:
|
||||||
|
info = zip_file.getinfo("manifest.json")
|
||||||
|
# manifest.json carries the chosen method; deflated is the default
|
||||||
|
self.assertEqual(info.compress_type, 14) # ZIP_LZMA
|
||||||
|
|
||||||
|
def test_default_zip_uses_deflate(self) -> None:
|
||||||
|
call_command(
|
||||||
|
"document_exporter",
|
||||||
|
self.target,
|
||||||
|
"--zip",
|
||||||
|
skip_checks=True,
|
||||||
|
)
|
||||||
|
expected = str(
|
||||||
|
self.target / f"export-{timezone.localdate().isoformat()}.zip",
|
||||||
|
)
|
||||||
|
with ZipFile(expected) as zip_file:
|
||||||
|
info = zip_file.getinfo("manifest.json")
|
||||||
|
self.assertEqual(info.compress_type, 8) # ZIP_DEFLATED
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 5: Run the tests**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/test_management_exporter.py -v"`
|
||||||
|
Expected: PASS — the new tests plus all existing exporter tests stay green.
|
||||||
|
|
||||||
|
- [ ] **Step 6: Lint**
|
||||||
|
|
||||||
|
Run: `ruff check src/documents/management/commands/document_exporter.py src/documents/tests/test_management_exporter.py && ruff format src/documents/management/commands/document_exporter.py src/documents/tests/test_management_exporter.py`
|
||||||
|
Expected: no errors.
|
||||||
|
|
||||||
|
- [ ] **Step 7: Commit**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add src/documents/management/commands/document_exporter.py src/documents/tests/test_management_exporter.py
|
||||||
|
git commit -m "Feature: add --zip-compression and --zip-compression-level flags"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 4: Importer pre-check for unreadable codecs
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
|
||||||
|
- Modify: `src/documents/management/commands/document_importer.py`
|
||||||
|
- Test: `src/documents/tests/test_management_importer.py`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write the failing test**
|
||||||
|
|
||||||
|
The importer test file `src/documents/tests/test_management_importer.py` is
|
||||||
|
`TestCase`-style (`class TestCommandImport(... TestCase)`, `self.assertRaises`,
|
||||||
|
`DirectoriesMixin` gives `self.dirs.scratch_dir`). Match that style. Add this
|
||||||
|
method to `TestCommandImport`. It builds a valid zip and patches the readability
|
||||||
|
probe so the check fires deterministically on any runtime:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def test_import_rejects_unreadable_compression(self) -> None:
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- A zip archive with an entry whose compression this Python can't read
|
||||||
|
WHEN:
|
||||||
|
- Import is attempted
|
||||||
|
THEN:
|
||||||
|
- A CommandError naming the issue is raised, before extraction
|
||||||
|
"""
|
||||||
|
import zipfile
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
archive = Path(self.dirs.scratch_dir) / "export.zip"
|
||||||
|
with zipfile.ZipFile(archive, "w") as zf:
|
||||||
|
zf.writestr("manifest.json", "[]")
|
||||||
|
|
||||||
|
with mock.patch(
|
||||||
|
"documents.management.commands.document_importer.compress_type_readable",
|
||||||
|
return_value=False,
|
||||||
|
):
|
||||||
|
with self.assertRaises(CommandError) as e:
|
||||||
|
call_command(
|
||||||
|
"document_importer",
|
||||||
|
str(archive),
|
||||||
|
"--no-progress-bar",
|
||||||
|
skip_checks=True,
|
||||||
|
)
|
||||||
|
self.assertIn("compression", str(e.exception))
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Run to verify it fails**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/test_management_importer.py -k unreadable_compression -v"`
|
||||||
|
Expected: FAIL — no pre-check exists yet, so the import proceeds (or fails with a different error).
|
||||||
|
|
||||||
|
- [ ] **Step 3: Implement the pre-check**
|
||||||
|
|
||||||
|
In `document_importer.py`, add the import:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from documents.export.compression import compress_type_readable
|
||||||
|
from documents.export.compression import unreadable_method_names
|
||||||
|
```
|
||||||
|
|
||||||
|
Find the zip-handling block (around `document_importer.py:453`):
|
||||||
|
|
||||||
|
```python
|
||||||
|
with ZipFile(self.source) as zf:
|
||||||
|
zf.extractall(tmp_dir)
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace it with a pre-check before extraction:
|
||||||
|
|
||||||
|
```python
|
||||||
|
with ZipFile(self.source) as zf:
|
||||||
|
unsupported = {
|
||||||
|
info.compress_type
|
||||||
|
for info in zf.infolist()
|
||||||
|
if not compress_type_readable(info.compress_type)
|
||||||
|
}
|
||||||
|
if unsupported:
|
||||||
|
names = ", ".join(sorted(unreadable_method_names(unsupported)))
|
||||||
|
raise CommandError(
|
||||||
|
f"This archive uses compression this Python cannot "
|
||||||
|
f"read ({names}). zstd archives require Python 3.14+.",
|
||||||
|
)
|
||||||
|
zf.extractall(tmp_dir)
|
||||||
|
```
|
||||||
|
|
||||||
|
Confirm `CommandError` is imported in `document_importer.py` (it is used elsewhere; if not, add `from django.core.management.base import CommandError`).
|
||||||
|
|
||||||
|
- [ ] **Step 4: Run to verify it passes**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/test_management_importer.py -v"`
|
||||||
|
Expected: PASS — the new test plus all existing importer tests (normal deflated/stored archives still import).
|
||||||
|
|
||||||
|
- [ ] **Step 5: Lint**
|
||||||
|
|
||||||
|
Run: `ruff check src/documents/management/commands/document_importer.py src/documents/tests/test_management_importer.py && ruff format src/documents/management/commands/document_importer.py src/documents/tests/test_management_importer.py`
|
||||||
|
Expected: no errors.
|
||||||
|
|
||||||
|
- [ ] **Step 6: Commit**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add src/documents/management/commands/document_importer.py src/documents/tests/test_management_importer.py
|
||||||
|
git commit -m "Feature: importer rejects archives with unreadable compression"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 5: Document the flags
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
|
||||||
|
- Modify: `docs/administration.md`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Add the flags to the option list**
|
||||||
|
|
||||||
|
In `docs/administration.md`, update the usage block (around line 257) to include the new flags:
|
||||||
|
|
||||||
|
```
|
||||||
|
document_exporter target [-c] [-d] [-f] [-na] [-nt] [-p] [-sm] [-z]
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-c, --compare-checksums
|
||||||
|
-cj, --compare-json
|
||||||
|
-d, --delete
|
||||||
|
-f, --use-filename-format
|
||||||
|
-na, --no-archive
|
||||||
|
-nt, --no-thumbnail
|
||||||
|
-p, --use-folder-prefix
|
||||||
|
-sm, --split-manifest
|
||||||
|
-z, --zip
|
||||||
|
-zn, --zip-name
|
||||||
|
--zip-compression
|
||||||
|
--zip-compression-level
|
||||||
|
--data-only
|
||||||
|
--no-progress-bar
|
||||||
|
--passphrase
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 2: Add the prose**
|
||||||
|
|
||||||
|
After the `-z`/`--zip` paragraph (around line 330), add:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
The compression method for the zip can be set with `--zip-compression`
|
||||||
|
(`stored`, `deflated` (default), `bzip2`, `lzma`, or `zstd`) and tuned with
|
||||||
|
`--zip-compression-level` (deflated: 0–9, bzip2: 1–9, zstd: -131072–22; ignored
|
||||||
|
for `stored` and `lzma`). Both options require `--zip`.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
|
||||||
|
`zstd` compression requires Python 3.14 or newer on **both** the machine
|
||||||
|
creating the export and any machine importing it. An archive compressed with
|
||||||
|
`zstd` (or `lzma`/`bzip2` where those modules are unavailable) cannot be
|
||||||
|
imported on a runtime that lacks the codec; the importer will refuse it with
|
||||||
|
a clear error. The default `deflated` is universally readable.
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] **Step 3: Verify the docs build is not broken (lint markdown)**
|
||||||
|
|
||||||
|
Run: `ruff check docs/ 2>/dev/null; echo "docs are markdown; rely on prettier pre-commit"`
|
||||||
|
(No code to test. The prettier pre-commit hook will reformat on commit.)
|
||||||
|
|
||||||
|
- [ ] **Step 4: Commit**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add docs/administration.md
|
||||||
|
git commit -m "Docs: document --zip-compression and --zip-compression-level"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Task 6: Final verification
|
||||||
|
|
||||||
|
**Files:** none (verification only).
|
||||||
|
|
||||||
|
- [ ] **Step 1: Full backend suites on the VM**
|
||||||
|
|
||||||
|
Run: `bash /c/Users/tholmes/Documents/Coding/paperless/vmtest.sh "src/documents/tests/export/ src/documents/tests/test_management_exporter.py src/documents/tests/test_management_importer.py -v"`
|
||||||
|
Expected: PASS, no failures.
|
||||||
|
|
||||||
|
- [ ] **Step 2: Spot-check the zstd happy path on Python 3.14 (cannot run under Django on the 3.11 VM)**
|
||||||
|
|
||||||
|
The zstd positive round-trip can't run in the 3.11 test env. Confirm the policy module behaves on a real 3.14 interpreter with a standalone check (no Django needed):
|
||||||
|
|
||||||
|
Run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
uv run --python 3.14 --no-project python -c "import sys; sys.path.insert(0,'src'); import django; print('skip')" 2>/dev/null || \
|
||||||
|
uv run --python 3.14 --no-project python -c "
|
||||||
|
import zipfile, io
|
||||||
|
from compression.zstd import CompressionParameter as CP
|
||||||
|
print('zstd const', zipfile.ZIP_ZSTANDARD, 'bounds', CP.compression_level.bounds())
|
||||||
|
buf = io.BytesIO()
|
||||||
|
with zipfile.ZipFile(buf,'w',compression=zipfile.ZIP_ZSTANDARD,compresslevel=19) as zf:
|
||||||
|
zf.writestr('a.txt','x'*1000)
|
||||||
|
with zipfile.ZipFile(buf) as zf:
|
||||||
|
assert zf.getinfo('a.txt').compress_type == zipfile.ZIP_ZSTANDARD
|
||||||
|
assert zf.read('a.txt') == b'x'*1000
|
||||||
|
print('zstd round-trip OK')
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: prints `zstd const 93 bounds (-131072, 22)` and `zstd round-trip OK`. This validates the constant, bounds, and that a zstd archive round-trips — the parts the 3.11 CI cannot exercise.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Type-check on the VM (pyrefly)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tar czf - src pyproject.toml uv.lock .pyrefly-baseline.json | ssh -o BatchMode=yes -p 2244 trenton@localhost 'tar xzf - -C ~/projects/paperless-ngx'
|
||||||
|
ssh -o BatchMode=yes -p 2244 trenton@localhost 'bash -lc "cd ~/projects/paperless-ngx && uv run pyrefly check"'
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected: no new type errors beyond the baseline. (Note: `import compression.zstd` is guarded behind `importlib.import_module`, so it is never statically resolved on the 3.11 baseline.)
|
||||||
|
|
||||||
|
- [ ] **Step 4: Final lint**
|
||||||
|
|
||||||
|
Run: `ruff check src/documents/export/ src/documents/management/commands/document_exporter.py src/documents/management/commands/document_importer.py && ruff format --check src/documents/export/ src/documents/management/commands/document_exporter.py src/documents/management/commands/document_importer.py`
|
||||||
|
Expected: clean.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes for the implementer
|
||||||
|
|
||||||
|
- **Default behavior is unchanged:** with no flags, the sink is constructed with `compression=ZIP_DEFLATED, compresslevel=None` — byte-method-identical to today (`shutil.make_archive` used `ZIP_DEFLATED` with no level). `test_default_zip_uses_deflate` pins this.
|
||||||
|
- **zstd availability is gated three ways and never imported statically:** the constant via `getattr`, the codec via `importlib.import_module("compression.zstd")`, and the CLI value rejected with a friendly message on < 3.14. The choices list always contains `zstd` so argparse doesn't hide it.
|
||||||
|
- **The importer pre-check is the safety net** for portability foot-guns — without it an unreadable entry raises a bare `NotImplementedError` mid-`extractall`. The check runs on `infolist()` (metadata only) before any extraction.
|
||||||
|
- **Why `--zip-compression` defaults to `None`, not `"deflated"`:** so `handle()` can detect "user passed it without `--zip`" and fail fast. The effective default is resolved as `zip_compression or "deflated"`.
|
||||||
@@ -0,0 +1,236 @@
|
|||||||
|
# Export Zip Compression Control — Design
|
||||||
|
|
||||||
|
**Date:** 2026-06-16
|
||||||
|
**Branch base:** `dev`
|
||||||
|
**Status:** Design complete (zstd facts verified on CPython 3.14.3) — **depends on**
|
||||||
|
`2026-06-16-export-sink-architecture-design.md` being implemented first.
|
||||||
|
|
||||||
|
## Prerequisite
|
||||||
|
|
||||||
|
This builds directly on the export sink refactor. It assumes `ZipExportSink`
|
||||||
|
already exists and is the single place that owns `zipfile.ZipFile` creation and
|
||||||
|
entry writes. Do not start this until that refactor has landed; without it, the
|
||||||
|
change would have to touch the command's zip branches again.
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
Zip export is hardwired to `ZIP_DEFLATED` at the library default level. Users
|
||||||
|
have no way to trade speed against archive size — a fast `ZIP_STORED` pass for a
|
||||||
|
quick local copy, or a maximal `ZIP_LZMA` pass for the smallest off-site backup.
|
||||||
|
The sink refactor turns "which compression" into a single constructor argument,
|
||||||
|
so exposing it is now a small, isolated change.
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Let the operator choose the zip compression method and level from the CLI, with
|
||||||
|
behavior identical to today when the flags are omitted. All knowledge of
|
||||||
|
compression stays inside `ZipExportSink`; the command only parses flags and maps
|
||||||
|
them to sink arguments.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
In scope:
|
||||||
|
|
||||||
|
- `ZipExportSink` gains `compression: int` and `compresslevel: int | None`
|
||||||
|
constructor parameters (default `ZIP_DEFLATED`, `None` → library default),
|
||||||
|
passed straight to `zipfile.ZipFile(...)`.
|
||||||
|
- New `document_exporter` flags: `--zip-compression` and
|
||||||
|
`--zip-compression-level`, valid only with `--zip`.
|
||||||
|
- Validation: method availability, level range per method, and the
|
||||||
|
requires-`--zip` guard.
|
||||||
|
- Import-side: a pre-extract support check in `document_importer` that turns an
|
||||||
|
unsupported codec into a clear `CommandError` (the importer otherwise decompresses
|
||||||
|
transparently via `ZipFile.extractall`).
|
||||||
|
- Docs: add both flags and the zstd-portability caveat to `docs/administration.md`
|
||||||
|
(the `document_exporter` option list, lines ~257-270 and the `-z`/`-zn` section,
|
||||||
|
lines ~328-330). New flags are long-form only (`--zip-compression`,
|
||||||
|
`--zip-compression-level`) — no short aliases, to avoid `-zc`/`-zl` collisions
|
||||||
|
with the existing `-z`/`-zn`.
|
||||||
|
|
||||||
|
Out of scope:
|
||||||
|
|
||||||
|
- Compression for any non-zip sink (folder has none; a future S3 sink would
|
||||||
|
handle its own object storage compression separately).
|
||||||
|
- Changing the default. Omitting the flags must produce a byte-compatible-method
|
||||||
|
archive to today's (`ZIP_DEFLATED`, default level).
|
||||||
|
|
||||||
|
## Design
|
||||||
|
|
||||||
|
### `ZipExportSink` changes
|
||||||
|
|
||||||
|
The base sink's signature is `ZipExportSink(target, zip_name, *, delete)`; this
|
||||||
|
adds two keyword-only params after `delete`:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
target: Path,
|
||||||
|
zip_name: str,
|
||||||
|
*,
|
||||||
|
delete: bool = False,
|
||||||
|
compression: int = zipfile.ZIP_DEFLATED,
|
||||||
|
compresslevel: int | None = None,
|
||||||
|
) -> None:
|
||||||
|
...
|
||||||
|
# opened in __enter__:
|
||||||
|
self._zip = zipfile.ZipFile(
|
||||||
|
self._tmp_path,
|
||||||
|
"w",
|
||||||
|
compression=compression,
|
||||||
|
compresslevel=compresslevel,
|
||||||
|
allowZip64=True,
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
`ZipFile` applies `compression`/`compresslevel` as the default for every
|
||||||
|
`write`/`writestr` (verified: a `ZipFile(..., compression=ZIP_BZIP2)` yields
|
||||||
|
entries with `compress_type == ZIP_BZIP2` without per-call args), so `add_file` /
|
||||||
|
`add_json` / the manifest entry need no changes. Directory marker entries are
|
||||||
|
empty so their compressed payload is zero, but they are still _tagged_ with the
|
||||||
|
chosen `compress_type` — harmless, but tests that read `infolist()` should filter
|
||||||
|
or account for marker entries (see Testing).
|
||||||
|
|
||||||
|
### CLI flags (`document_exporter`)
|
||||||
|
|
||||||
|
- `--zip-compression {stored,deflated,bzip2,lzma}` — and `zstd` **when the
|
||||||
|
runtime supports it** (see below). Maps to the matching `zipfile.ZIP_*`
|
||||||
|
constant. Default `deflated`.
|
||||||
|
- `--zip-compression-level N` — integer. Per-method accepted ranges (verified
|
||||||
|
against the [3.14 `zipfile` docs](https://docs.python.org/3.14/library/zipfile.html#zipfile.ZipFile)):
|
||||||
|
- `deflated`: **0–9** (`zlib` also accepts `-1` = "default", identical to
|
||||||
|
omitting the flag / `compresslevel=None`).
|
||||||
|
- `bzip2`: **1–9** (`0` is invalid for bzip2).
|
||||||
|
- `lzma`, `stored`: level has **no effect** — passing `--zip-compression-level`
|
||||||
|
with either is a `CommandError`, not a silent accept (consistent with the
|
||||||
|
base refactor's fail-fast posture).
|
||||||
|
- `zstd`: **-131072 … 22** (the documented commonly-accepted range; the
|
||||||
|
authoritative bounds are
|
||||||
|
`compression.zstd.CompressionParameter.compression_level.bounds()`).
|
||||||
|
|
||||||
|
Default: unset → library default (`compresslevel=None`).
|
||||||
|
|
||||||
|
Both flags require `--zip`; passing either without `--zip` raises a
|
||||||
|
`CommandError`, matching the incremental-flag rule from the base refactor.
|
||||||
|
|
||||||
|
**Why validate up front (not let `zipfile` raise) — verified on 3.14.3:** an
|
||||||
|
invalid level does _not_ fail at `ZipFile(...)` construction — it fails at the
|
||||||
|
**first `write`/`writestr` call**, with an opaque message
|
||||||
|
(`ValueError: Invalid initialization option` for deflated > 9, or
|
||||||
|
`ValueError: compresslevel must be between 1 and 9` for bzip2). Worse, on context
|
||||||
|
exit the half-initialized write handle emits a secondary
|
||||||
|
`AttributeError: '_ZipWriteFile' object has no attribute '_compressor'` during GC
|
||||||
|
finalization, so the user sees stack-trace noise unrelated to the real cause.
|
||||||
|
Up-front validation turns all of that into a single clean `CommandError`.
|
||||||
|
|
||||||
|
### Validation (in `handle()`, before constructing the sink)
|
||||||
|
|
||||||
|
1. **Requires `--zip`.** Either flag without `--zip` → `CommandError`.
|
||||||
|
2. **Method availability — via a named, patchable seam.** Expose a module-level
|
||||||
|
helper `compression_available(method: str) -> bool` that does
|
||||||
|
`try: import bz2 / import lzma / from compression import zstd except ImportError:
|
||||||
|
return False` — **not** `importlib.util.find_spec`, which can report a stdlib
|
||||||
|
C-extension as present when importing it actually fails. `stored`/`deflated`
|
||||||
|
are always available (`zlib` is a hard CPython dependency). For `zstd` the probe
|
||||||
|
must import `compression.zstd` (3.14+), not merely check that
|
||||||
|
`zipfile.ZIP_ZSTANDARD` exists. Making this a named function is also what lets
|
||||||
|
the test patch "method unavailable" with `mocker`. If the chosen method is
|
||||||
|
unavailable, raise a `CommandError` naming the missing capability — `zipfile`
|
||||||
|
itself would otherwise raise a bare `RuntimeError`
|
||||||
|
("Compression requires the (missing) … module").
|
||||||
|
3. **Level range.** Reject an out-of-range `--zip-compression-level` for the
|
||||||
|
chosen method with a clear `CommandError`; reject the flag entirely for
|
||||||
|
`stored`/`lzma` (see above).
|
||||||
|
|
||||||
|
### zstd (Python 3.14+)
|
||||||
|
|
||||||
|
**Verified empirically on CPython 3.14.3** (via `uv run --python 3.14 --no-project`)
|
||||||
|
and against [PEP 784](https://peps.python.org/pep-0784/) +
|
||||||
|
[the 3.14 `zipfile` docs](https://docs.python.org/3.14/library/zipfile.html):
|
||||||
|
|
||||||
|
- The compression-method constant is **`zipfile.ZIP_ZSTANDARD`** (added 3.14; its
|
||||||
|
numeric value is `93`). It does **not** exist on < 3.14.
|
||||||
|
- It is backed by the new **`compression.zstd`** stdlib module (PEP 784 added a
|
||||||
|
`compression` namespace package; legacy `bz2`/`lzma`/`zlib` imports are
|
||||||
|
unchanged). `zipfile` raises `RuntimeError` if `compression.zstd` is
|
||||||
|
unavailable when zstd is requested.
|
||||||
|
- Accepted `compresslevel` is **`-131072 … 22`**, confirmed at runtime via
|
||||||
|
`compression.zstd.CompressionParameter.compression_level.bounds() == (-131072, 22)`.
|
||||||
|
|
||||||
|
Gate everything zstd-related at runtime so nothing is imported or referenced on
|
||||||
|
< 3.14 (the project targets Python ≥ 3.11):
|
||||||
|
|
||||||
|
```python
|
||||||
|
_ZSTD: int | None = getattr(zipfile, "ZIP_ZSTANDARD", None) # None before 3.14
|
||||||
|
```
|
||||||
|
|
||||||
|
Presence of the _constant_ does not guarantee the _codec_ is usable, so the
|
||||||
|
availability probe (validation step 2) imports `compression.zstd`, not merely
|
||||||
|
checks the constant.
|
||||||
|
|
||||||
|
Keep `zstd` in the `--zip-compression` `choices` **always** (even on < 3.14), and
|
||||||
|
reject it in validation with a friendly "zstd requires Python 3.14+" message. If
|
||||||
|
it were dropped from `choices` on older runtimes, argparse would emit a generic
|
||||||
|
"invalid choice" that reads as though the option never existed — worse UX.
|
||||||
|
|
||||||
|
### Import-side compatibility
|
||||||
|
|
||||||
|
`document_importer` reads zips with `ZipFile(self.source).extractall(...)`
|
||||||
|
(`document_importer.py:453`), which decompresses each entry transparently using
|
||||||
|
whatever method it was stored with — **provided the matching module exists on the
|
||||||
|
importing machine.**
|
||||||
|
|
||||||
|
The failure mode when it doesn't is unfriendly and must be handled: a zstd (or
|
||||||
|
otherwise unsupported) entry raises a bare `NotImplementedError` **per-entry,
|
||||||
|
during `extractall`** — _not_ at `ZipFile(self.source)` open, and `is_zipfile()`
|
||||||
|
still returns true (a zstd archive is a valid zip container). So the importer
|
||||||
|
enters the zip branch, creates its temp dir, may partially extract other entries,
|
||||||
|
then blows up mid-extract with no context. **Mitigation (in scope here):** before
|
||||||
|
extracting, inspect `ZipFile(self.source).infolist()` compress types and, if any
|
||||||
|
is unsupported on this runtime, raise a `CommandError` naming the method and the
|
||||||
|
requirement (e.g. "this archive uses zstd, which needs Python 3.14+") instead of
|
||||||
|
letting `NotImplementedError` escape.
|
||||||
|
|
||||||
|
Per-method summary (document in help text + `administration.md`):
|
||||||
|
|
||||||
|
- `deflated`/`stored`: universally importable.
|
||||||
|
- `bzip2`/`lzma`: importable wherever the `bz2`/`lzma` modules are present
|
||||||
|
(essentially always).
|
||||||
|
- `zstd`: importable only on Python 3.14+. An archive compressed with `zstd` is
|
||||||
|
**not** importable on older runtimes.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
New cases in the sink tests and an export→import round-trip
|
||||||
|
(pytest classes, factory-boy, `mocker`, `parametrize`, typed; run on the VM):
|
||||||
|
|
||||||
|
- **Round-trip per method.** Parametrize over the available methods (skip `zstd`
|
||||||
|
below 3.14, skip `bzip2`/`lzma` if the module is somehow absent): export a
|
||||||
|
small library, import it back, assert documents/manifest match.
|
||||||
|
- **Method is applied.** Assert each written _file_ entry's `compress_type`
|
||||||
|
equals the requested method (read back via `ZipFile.infolist()`), filtering out
|
||||||
|
directory marker entries (which are tagged but empty).
|
||||||
|
- **Level affects size — robustly.** Do **not** compare deflate level 9 vs 1
|
||||||
|
(on small or incompressible fixtures level 9 can equal or slightly exceed level
|
||||||
|
1, causing flaky CI). Instead assert that a compressing method on a
|
||||||
|
moderately-compressible fixture yields a total smaller than `stored`
|
||||||
|
(`ZIP_STORED`), which is a stable invariant.
|
||||||
|
- **Validation.** Each flag without `--zip` → `CommandError`; out-of-range level
|
||||||
|
(`--zip-compression-level 99`) → a clean `CommandError` from validation
|
||||||
|
(asserting we never reach the `writestr` that would raise the masked
|
||||||
|
`ValueError`); `--zip-compression-level` with `stored`/`lzma` → `CommandError`;
|
||||||
|
unavailable method (patch the named availability seam with `mocker`) →
|
||||||
|
`CommandError`; on < 3.14, `--zip-compression zstd` → the friendly
|
||||||
|
"requires 3.14+" `CommandError`.
|
||||||
|
- **Import pre-check.** An archive containing an unsupported compress type
|
||||||
|
produces a `CommandError` from the importer naming the method, not a raw
|
||||||
|
`NotImplementedError` (simulate by patching the importer's support probe).
|
||||||
|
- **Default unchanged.** Omitting both flags yields file entries with
|
||||||
|
`compress_type == ZIP_DEFLATED`, identical to pre-feature behavior.
|
||||||
|
|
||||||
|
## Risks
|
||||||
|
|
||||||
|
- **Foot-gun archives.** A user could produce a `zstd`/`lzma` archive their
|
||||||
|
import target can't read. Mitigation: explicit help text and the import-side
|
||||||
|
notes above; the default stays the universally-readable `deflated`.
|
||||||
|
- **Optional-module assumptions.** Don't assume `bz2`/`lzma` are always compiled
|
||||||
|
in; probe and error clearly. Mitigation: the availability validation step.
|
||||||
+9
-10
@@ -833,10 +833,10 @@ contract you signed 8 years ago).
|
|||||||
|
|
||||||
When you search paperless for a document, it tries to match this query
|
When you search paperless for a document, it tries to match this query
|
||||||
against your documents. Paperless will look for matching documents by
|
against your documents. Paperless will look for matching documents by
|
||||||
inspecting their content, title, correspondent, type, and tags. Paperless
|
inspecting their content, title, correspondent, type, tags, notes, and
|
||||||
returns a scored list of results, so that documents matching your query
|
custom field values. Paperless returns a scored list of results, so that
|
||||||
better will appear further up in the search results. Notes and custom field
|
documents matching your query better will appear further up in the search
|
||||||
values can be searched using the advanced search syntax described below.
|
results.
|
||||||
|
|
||||||
By default, paperless returns only documents which contain all words
|
By default, paperless returns only documents which contain all words
|
||||||
typed in the search bar. A few things to know about how matching works:
|
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
|
#### Searching custom fields
|
||||||
|
|
||||||
Custom field names and values are included in the full-text index, but they
|
Custom field values are included in the full-text index, so a plain search
|
||||||
are not searched by a plain, unqualified query. Use the advanced search syntax
|
already matches documents whose custom field values contain your search terms.
|
||||||
to search by field name or value:
|
To narrow by field name or value specifically:
|
||||||
|
|
||||||
```
|
```
|
||||||
custom_fields.value:policy
|
custom_fields.value:policy
|
||||||
@@ -921,9 +921,8 @@ custom_fields.name:"Contract Number" custom_fields.value:1312
|
|||||||
|
|
||||||
#### Searching notes
|
#### Searching notes
|
||||||
|
|
||||||
Notes are included in the full-text index, but they are not searched by a
|
Notes content is included in full-text search automatically. To search
|
||||||
plain, unqualified query. Use the advanced search syntax to search by note
|
by note author or content specifically:
|
||||||
author or content:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
notes.user:alice
|
notes.user:alice
|
||||||
|
|||||||
@@ -1,123 +0,0 @@
|
|||||||
# profiling/harness.py
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import json
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from datetime import UTC
|
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import TYPE_CHECKING
|
|
||||||
from typing import Any
|
|
||||||
from typing import Generic
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
from django.db import connection
|
|
||||||
from django.test.utils import CaptureQueriesContext
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from collections.abc import Callable
|
|
||||||
|
|
||||||
from django.db.models import QuerySet
|
|
||||||
|
|
||||||
from profiling.seed import ScaleProfile
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
|
||||||
|
|
||||||
|
|
||||||
def require_postgres() -> None:
|
|
||||||
if connection.vendor != "postgresql":
|
|
||||||
pytest.skip(
|
|
||||||
"Profiling requires PostgreSQL to reflect production query "
|
|
||||||
"planning; SQLite does not reproduce the varchar-cast planner "
|
|
||||||
"pathology this work fixes.",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, slots=True)
|
|
||||||
class ProfileResult(Generic[T]):
|
|
||||||
best_seconds: float
|
|
||||||
all_seconds: tuple[float, ...]
|
|
||||||
query_count: int
|
|
||||||
result: T
|
|
||||||
|
|
||||||
|
|
||||||
def run_profile(fn: Callable[[], T], *, repeat: int = 5) -> ProfileResult[T]:
|
|
||||||
require_postgres()
|
|
||||||
all_seconds: list[float] = []
|
|
||||||
result: T | None = None
|
|
||||||
query_count = 0
|
|
||||||
for i in range(repeat):
|
|
||||||
with CaptureQueriesContext(connection) as ctx:
|
|
||||||
start = time.perf_counter()
|
|
||||||
result = fn()
|
|
||||||
all_seconds.append(time.perf_counter() - start)
|
|
||||||
if i == repeat - 1:
|
|
||||||
query_count = len(ctx.captured_queries)
|
|
||||||
assert result is not None # repeat >= 1 guarantees at least one assignment
|
|
||||||
return ProfileResult(
|
|
||||||
best_seconds=min(all_seconds),
|
|
||||||
all_seconds=tuple(all_seconds),
|
|
||||||
query_count=query_count,
|
|
||||||
result=result,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def capture_explain_analyze(queryset: QuerySet[Any]) -> str:
|
|
||||||
if connection.vendor != "postgresql":
|
|
||||||
raise RuntimeError("EXPLAIN ANALYZE capture is Postgres-only")
|
|
||||||
sql, params = queryset.query.sql_with_params()
|
|
||||||
with connection.cursor() as cur:
|
|
||||||
cur.execute(f"EXPLAIN ANALYZE {sql}", params)
|
|
||||||
return "\n".join(row[0] for row in cur.fetchall())
|
|
||||||
|
|
||||||
|
|
||||||
def _current_git_ref() -> str:
|
|
||||||
result = subprocess.run(
|
|
||||||
["git", "rev-parse", "--short", "HEAD"],
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
check=False,
|
|
||||||
)
|
|
||||||
return result.stdout.strip() or "unknown"
|
|
||||||
|
|
||||||
|
|
||||||
def append_profiling_history(
|
|
||||||
*,
|
|
||||||
stage: str,
|
|
||||||
scenario: str,
|
|
||||||
best_seconds: float,
|
|
||||||
query_count: int,
|
|
||||||
scale: ScaleProfile,
|
|
||||||
code_ref: str | None = None,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
Append one line to profiling/results/history.jsonl -- an append-only,
|
|
||||||
cross-session record of every profiling run. Unlike the per-stage
|
|
||||||
before/after snapshot JSON files (which the next run of the same stage
|
|
||||||
overwrites), this never gets clobbered, so a profiling effort picked
|
|
||||||
back up days later has a full timeline to resume from instead of only
|
|
||||||
the single most recent comparison.
|
|
||||||
|
|
||||||
``code_ref`` should identify the *production* code under test (a short
|
|
||||||
SHA on the feature branch, not this `profiling` branch) -- pass it
|
|
||||||
explicitly when known. Left as ``None``, it falls back to this repo's
|
|
||||||
current ``git rev-parse --short HEAD``, which is only meaningful if
|
|
||||||
you're actually running from a checkout where that reflects the code
|
|
||||||
being measured.
|
|
||||||
"""
|
|
||||||
results_dir = Path(__file__).parent / "results"
|
|
||||||
results_dir.mkdir(exist_ok=True)
|
|
||||||
entry = {
|
|
||||||
"timestamp": datetime.now(UTC).isoformat(),
|
|
||||||
"code_ref": code_ref or _current_git_ref(),
|
|
||||||
"stage": stage,
|
|
||||||
"scenario": scenario,
|
|
||||||
"scale": scale,
|
|
||||||
"best_seconds": best_seconds,
|
|
||||||
"query_count": query_count,
|
|
||||||
}
|
|
||||||
with (results_dir / "history.jsonl").open("a") as f:
|
|
||||||
f.write(json.dumps(entry) + "\n")
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
[tool.pytest]
|
|
||||||
ini_options.pythonpath = [ "../src", "..", "." ]
|
|
||||||
ini_options.markers = [
|
|
||||||
"""\
|
|
||||||
profiling: Profiling scripts comparing old vs new query patterns; require a throwaway PostgreSQL container, not run \
|
|
||||||
as part of the normal test suite\
|
|
||||||
""",
|
|
||||||
]
|
|
||||||
ini_options.DJANGO_SETTINGS_MODULE = "paperless.settings"
|
|
||||||
|
|
||||||
[tool.pytest_env]
|
|
||||||
# Standalone config: this directory must be independently runnable without
|
|
||||||
# the rest of the dev stack (Redis, etc) present -- only Postgres is required,
|
|
||||||
# via run_with_postgres.sh.
|
|
||||||
PAPERLESS_SECRET_KEY = "profiling-only-insecure-key"
|
|
||||||
PAPERLESS_DISABLE_DBHANDLER = "true"
|
|
||||||
PAPERLESS_CACHE_BACKEND = "django.core.cache.backends.locmem.LocMemCache"
|
|
||||||
PAPERLESS_CHANNELS_BACKEND = "channels.layers.InMemoryChannelLayer"
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{"timestamp": "2026-07-27T22:47:46.677504+00:00", "code_ref": "test-run", "stage": "self-check", "scenario": "test_append_profiling_history_writes_a_valid_json_line", "scale": "medium", "best_seconds": 0.001, "query_count": 0}
|
|
||||||
{"timestamp": "2026-07-27T22:49:03.762638+00:00", "code_ref": "test-run", "stage": "self-check", "scenario": "test_append_profiling_history_writes_a_valid_json_line", "scale": "medium", "best_seconds": 0.001, "query_count": 0}
|
|
||||||
{"timestamp": "2026-07-27T23:01:49.777269+00:00", "code_ref": "0506dcad0", "stage": "stage1", "scenario": "get_objects_for_user_owner_aware_document_baseline", "scale": "medium", "best_seconds": 0.025123266968876123, "query_count": 1}
|
|
||||||
{"timestamp": "2026-07-28T01:38:32.706519+00:00", "code_ref": "e80ede4cb", "stage": "stage1", "scenario": "get_objects_for_user_owner_aware_document_baseline", "scale": "medium", "best_seconds": 31.46481539506931, "query_count": 1}
|
|
||||||
{"timestamp": "2026-07-28T03:53:46.770669+00:00", "code_ref": "d4fa85237", "stage": "stage1", "scenario": "get_objects_for_user_owner_aware_document_baseline", "scale": "medium", "best_seconds": 31.671881378046237, "query_count": 1}
|
|
||||||
{"timestamp": "2026-07-28T04:02:41.942168+00:00", "code_ref": "d4fa85237", "stage": "stage1", "scenario": "permitted_document_ids_after_stage1", "scale": "medium", "best_seconds": 0.07956207206007093, "query_count": 1}
|
|
||||||
{"timestamp": "2026-07-28T23:30:28.602501+00:00", "code_ref": "86846255f", "stage": "stage2", "scenario": "per_row_checker_vs_resolved_set_old", "scale": "medium", "best_seconds": 3.4628250940004364, "query_count": 692}
|
|
||||||
{"timestamp": "2026-07-28T23:30:28.606987+00:00", "code_ref": "86846255f", "stage": "stage2", "scenario": "per_row_checker_vs_resolved_set_new", "scale": "medium", "best_seconds": 0.10436739504802972, "query_count": 1}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"permitted_document_ids": {
|
|
||||||
"best_seconds": 0.07956207206007093,
|
|
||||||
"query_count": 1
|
|
||||||
},
|
|
||||||
"baseline_best_seconds": 31.671881378046237,
|
|
||||||
"baseline_query_count": 1,
|
|
||||||
"speedup_x": 398.07763370131113
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
Index Scan Backward using documents_document_created_bedd0818 on documents_document v0 (cost=91.31..99.33 rows=1 width=2900) (actual time=68.340..77.517 rows=12024.00 loops=1)
|
|
||||||
Filter: ((deleted_at IS NULL) AND ((owner_id = 12) OR (owner_id IS NULL) OR (ANY (id = (hashed SubPlan 1).col1))))
|
|
||||||
Rows Removed by Filter: 7976
|
|
||||||
Index Searches: 1
|
|
||||||
Buffers: shared hit=74978
|
|
||||||
SubPlan 1
|
|
||||||
-> Unique (cost=91.04..91.05 rows=2 width=4) (actual time=64.698..66.622 rows=9136.00 loops=1)
|
|
||||||
Buffers: shared hit=73487
|
|
||||||
-> Sort (cost=91.04..91.05 rows=2 width=4) (actual time=64.697..65.202 rows=9262.00 loops=1)
|
|
||||||
Sort Key: ((u0.object_pk)::integer)
|
|
||||||
Sort Method: quicksort Memory: 385kB
|
|
||||||
Buffers: shared hit=73487
|
|
||||||
-> Append (cost=0.27..91.03 rows=2 width=4) (actual time=0.026..63.201 rows=9262.00 loops=1)
|
|
||||||
Buffers: shared hit=73487
|
|
||||||
-> Nested Loop (cost=0.27..12.79 rows=1 width=4) (actual time=0.026..1.834 rows=237.00 loops=1)
|
|
||||||
Join Filter: (u0.permission_id = u1.id)
|
|
||||||
Buffers: shared hit=696
|
|
||||||
-> Index Only Scan using guardian_userobjectpermi_user_id_permission_id_ob_b0b3d2fc_uniq on guardian_userobjectpermission u0 (cost=0.27..8.29 rows=1 width=520) (actual time=0.012..0.131 rows=237.00 loops=1)
|
|
||||||
Index Cond: (user_id = 12)
|
|
||||||
Heap Fetches: 237
|
|
||||||
Index Searches: 1
|
|
||||||
Buffers: shared hit=222
|
|
||||||
-> Seq Scan on auth_permission u1 (cost=0.00..4.49 rows=1 width=4) (actual time=0.006..0.006 rows=1.00 loops=237)
|
|
||||||
Filter: (((codename)::text = 'view_document'::text) AND (content_type_id = 17))
|
|
||||||
Rows Removed by Filter: 67
|
|
||||||
Buffers: shared hit=474
|
|
||||||
-> Nested Loop (cost=4.73..78.23 rows=1 width=4) (actual time=1.119..60.528 rows=9025.00 loops=1)
|
|
||||||
Buffers: shared hit=72791
|
|
||||||
-> Nested Loop (cost=4.59..78.05 rows=1 width=524) (actual time=1.115..50.521 rows=9025.00 loops=1)
|
|
||||||
Buffers: shared hit=54741
|
|
||||||
-> Nested Loop (cost=4.44..73.62 rows=24 width=520) (actual time=1.109..13.226 rows=45387.00 loops=1)
|
|
||||||
Buffers: shared hit=329
|
|
||||||
-> Seq Scan on auth_permission u4 (cost=0.00..4.49 rows=1 width=4) (actual time=0.008..0.017 rows=1.00 loops=1)
|
|
||||||
Filter: (((codename)::text = 'view_document'::text) AND (content_type_id = 17))
|
|
||||||
Rows Removed by Filter: 165
|
|
||||||
Buffers: shared hit=2
|
|
||||||
-> Bitmap Heap Scan on guardian_groupobjectpermission u0_1 (cost=4.44..68.93 rows=20 width=524) (actual time=1.100..8.095 rows=45387.00 loops=1)
|
|
||||||
Recheck Cond: (permission_id = u4.id)
|
|
||||||
Heap Blocks: exact=290
|
|
||||||
Buffers: shared hit=327
|
|
||||||
-> Bitmap Index Scan on guardian_groupobjectpermission_permission_id_36572738 (cost=0.00..4.43 rows=20 width=0) (actual time=1.052..1.053 rows=45387.00 loops=1)
|
|
||||||
Index Cond: (permission_id = u4.id)
|
|
||||||
Index Searches: 1
|
|
||||||
Buffers: shared hit=37
|
|
||||||
-> Index Only Scan using auth_user_groups_user_id_group_id_94350c0c_uniq on auth_user_groups u2 (cost=0.15..0.18 rows=1 width=4) (actual time=0.001..0.001 rows=0.20 loops=45387)
|
|
||||||
Index Cond: ((user_id = 12) AND (group_id = u0_1.group_id))
|
|
||||||
Heap Fetches: 9025
|
|
||||||
Index Searches: 45387
|
|
||||||
Buffers: shared hit=54412
|
|
||||||
-> Index Only Scan using auth_group_pkey on auth_group u1_1 (cost=0.14..0.17 rows=1 width=4) (actual time=0.001..0.001 rows=1.00 loops=9025)
|
|
||||||
Index Cond: (id = u0_1.group_id)
|
|
||||||
Heap Fetches: 9025
|
|
||||||
Index Searches: 9025
|
|
||||||
Buffers: shared hit=18050
|
|
||||||
Planning:
|
|
||||||
Buffers: shared hit=2
|
|
||||||
Planning Time: 1.089 ms
|
|
||||||
Execution Time: 78.020 ms
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"get_objects_for_user_owner_aware_document": {
|
|
||||||
"best_seconds": 31.671881378046237,
|
|
||||||
"query_count": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
Sort (cost=3790.80..3790.82 rows=9 width=2900) (actual time=39120.166..39120.831 rows=12024.00 loops=1)
|
|
||||||
Sort Key: documents_document.created DESC
|
|
||||||
Sort Method: quicksort Memory: 3230kB
|
|
||||||
Buffers: shared hit=8598270
|
|
||||||
-> Seq Scan on documents_document (cost=2550.72..3790.65 rows=9 width=2900) (actual time=0.009..39114.720 rows=12024.00 loops=1)
|
|
||||||
Filter: ((deleted_at IS NULL) AND ((owner_id = 2) OR (owner_id IS NULL) OR (ANY (id = (hashed SubPlan 1).col1)) OR (ANY (id = (hashed SubPlan 2).col1))))
|
|
||||||
Rows Removed by Filter: 7976
|
|
||||||
Buffers: shared hit=8598270
|
|
||||||
SubPlan 1
|
|
||||||
-> Nested Loop Semi Join (cost=0.00..1245.63 rows=1 width=8) (actual time=4.254..969.033 rows=237.00 loops=1)
|
|
||||||
Join Filter: ((((v0.object_pk)::bigint)::character varying)::text = (((u0.id)::bigint)::character varying)::text)
|
|
||||||
Rows Removed by Join Filter: 2539276
|
|
||||||
Buffers: shared hit=214835
|
|
||||||
-> Nested Loop (cost=0.00..23.30 rows=1 width=516) (actual time=0.031..2.425 rows=237.00 loops=1)
|
|
||||||
Join Filter: (v0.permission_id = v2.id)
|
|
||||||
Buffers: shared hit=490
|
|
||||||
-> Seq Scan on guardian_userobjectpermission v0 (cost=0.00..18.80 rows=1 width=520) (actual time=0.021..0.424 rows=237.00 loops=1)
|
|
||||||
Filter: (user_id = 2)
|
|
||||||
Rows Removed by Filter: 2120
|
|
||||||
Buffers: shared hit=16
|
|
||||||
-> Seq Scan on auth_permission v2 (cost=0.00..4.49 rows=1 width=4) (actual time=0.006..0.006 rows=1.00 loops=237)
|
|
||||||
Filter: ((content_type_id = 17) AND ((codename)::text = 'view_document'::text))
|
|
||||||
Rows Removed by Filter: 67
|
|
||||||
Buffers: shared hit=474
|
|
||||||
-> Seq Scan on documents_document u0 (cost=0.00..1221.96 rows=12 width=4) (actual time=0.002..1.917 rows=10715.24 loops=237)
|
|
||||||
Filter: (deleted_at IS NULL)
|
|
||||||
Buffers: shared hit=214345
|
|
||||||
SubPlan 2
|
|
||||||
-> Nested Loop Semi Join (cost=4.73..1305.09 rows=1 width=8) (actual time=6.729..38127.912 rows=9025.00 loops=1)
|
|
||||||
Join Filter: ((((v0_1.object_pk)::bigint)::character varying)::text = (((u0_2.id)::bigint)::character varying)::text)
|
|
||||||
Rows Removed by Join Filter: 98955406
|
|
||||||
Buffers: shared hit=8382237
|
|
||||||
-> Nested Loop Semi Join (cost=4.73..82.77 rows=1 width=516) (actual time=1.109..137.661 rows=9025.00 loops=1)
|
|
||||||
Buffers: shared hit=145515
|
|
||||||
-> Nested Loop (cost=4.44..73.62 rows=24 width=520) (actual time=1.090..18.002 rows=45387.00 loops=1)
|
|
||||||
Buffers: shared hit=329
|
|
||||||
-> Seq Scan on auth_permission v2_1 (cost=0.00..4.49 rows=1 width=4) (actual time=0.011..0.023 rows=1.00 loops=1)
|
|
||||||
Filter: (((codename)::text = 'view_document'::text) AND (content_type_id = 17))
|
|
||||||
Rows Removed by Filter: 165
|
|
||||||
Buffers: shared hit=2
|
|
||||||
-> Bitmap Heap Scan on guardian_groupobjectpermission v0_1 (cost=4.44..68.93 rows=20 width=524) (actual time=1.077..10.777 rows=45387.00 loops=1)
|
|
||||||
Recheck Cond: (permission_id = v2_1.id)
|
|
||||||
Heap Blocks: exact=290
|
|
||||||
Buffers: shared hit=327
|
|
||||||
-> Bitmap Index Scan on guardian_groupobjectpermission_permission_id_36572738 (cost=0.00..4.43 rows=20 width=0) (actual time=1.026..1.026 rows=45387.00 loops=1)
|
|
||||||
Index Cond: (permission_id = v2_1.id)
|
|
||||||
Index Searches: 1
|
|
||||||
Buffers: shared hit=37
|
|
||||||
-> Nested Loop (cost=0.30..0.37 rows=1 width=8) (actual time=0.002..0.002 rows=0.20 loops=45387)
|
|
||||||
Join Filter: (u0_1.id = u1.group_id)
|
|
||||||
Buffers: shared hit=145186
|
|
||||||
-> Index Only Scan using auth_group_pkey on auth_group u0_1 (cost=0.14..0.17 rows=1 width=4) (actual time=0.001..0.001 rows=1.00 loops=45387)
|
|
||||||
Index Cond: (id = v0_1.group_id)
|
|
||||||
Heap Fetches: 45387
|
|
||||||
Index Searches: 45387
|
|
||||||
Buffers: shared hit=90774
|
|
||||||
-> Index Only Scan using auth_user_groups_user_id_group_id_94350c0c_uniq on auth_user_groups u1 (cost=0.15..0.18 rows=1 width=4) (actual time=0.001..0.001 rows=0.20 loops=45387)
|
|
||||||
Index Cond: ((user_id = 2) AND (group_id = v0_1.group_id))
|
|
||||||
Heap Fetches: 9025
|
|
||||||
Index Searches: 45387
|
|
||||||
Buffers: shared hit=54412
|
|
||||||
-> Seq Scan on documents_document u0_2 (cost=0.00..1221.96 rows=12 width=4) (actual time=0.002..1.956 rows=10965.59 loops=9025)
|
|
||||||
Filter: (deleted_at IS NULL)
|
|
||||||
Buffers: shared hit=8236722
|
|
||||||
Planning:
|
|
||||||
Buffers: shared hit=3
|
|
||||||
Planning Time: 1.119 ms
|
|
||||||
Execution Time: 39121.312 ms
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# profiling/run_with_postgres.sh
|
|
||||||
#
|
|
||||||
# Starts a PostgreSQL 18 container (matching
|
|
||||||
# docker/compose/docker-compose.postgres.yml's image) if one isn't already
|
|
||||||
# running, waits for it to accept connections, force-terminates any
|
|
||||||
# leftover connections from a previous run that crashed or was killed, then
|
|
||||||
# runs the given command against it with the right PAPERLESS_DB* env vars
|
|
||||||
# set. The container is intentionally left running afterward -- see
|
|
||||||
# stop_postgres.sh to tear it down explicitly once you're done profiling
|
|
||||||
# for the session.
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
CONTAINER_NAME="pngx-profiling-pg"
|
|
||||||
HOST_PORT="55432"
|
|
||||||
|
|
||||||
if ! docker inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
|
|
||||||
docker run --rm -d \
|
|
||||||
--name "$CONTAINER_NAME" \
|
|
||||||
-e POSTGRES_DB=paperless \
|
|
||||||
-e POSTGRES_USER=paperless \
|
|
||||||
-e POSTGRES_PASSWORD=paperless \
|
|
||||||
-p "${HOST_PORT}:5432" \
|
|
||||||
docker.io/library/postgres:18 >/dev/null
|
|
||||||
echo "Started profiling Postgres container '$CONTAINER_NAME' on port $HOST_PORT (left running -- see profiling/stop_postgres.sh)." >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
until docker exec "$CONTAINER_NAME" pg_isready -U paperless >/dev/null 2>&1; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# Reap any connections left over from a previous run that crashed, was
|
|
||||||
# killed, or timed out mid-query -- without this, a persistent container
|
|
||||||
# can accumulate stuck backends that block later test-database
|
|
||||||
# create/drop operations indefinitely.
|
|
||||||
docker exec "$CONTAINER_NAME" psql -U paperless -d paperless -v ON_ERROR_STOP=0 -c "
|
|
||||||
SELECT pg_terminate_backend(pid)
|
|
||||||
FROM pg_stat_activity
|
|
||||||
WHERE datname IN ('paperless', 'test_paperless')
|
|
||||||
AND pid <> pg_backend_pid();
|
|
||||||
" >/dev/null 2>&1 || true
|
|
||||||
|
|
||||||
PAPERLESS_DBHOST=localhost \
|
|
||||||
PAPERLESS_DBNAME=paperless \
|
|
||||||
PAPERLESS_DBUSER=paperless \
|
|
||||||
PAPERLESS_DBPASS=paperless \
|
|
||||||
PAPERLESS_DBPORT="${HOST_PORT}" \
|
|
||||||
"$@"
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
# profiling/seed.py
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import random
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from typing import TYPE_CHECKING
|
|
||||||
from typing import Literal
|
|
||||||
|
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from guardian.shortcuts import assign_perm
|
|
||||||
|
|
||||||
from documents.models import Document
|
|
||||||
from documents.tests.factories import CorrespondentFactory
|
|
||||||
from documents.tests.factories import DocumentFactory
|
|
||||||
from documents.tests.factories import DocumentTypeFactory
|
|
||||||
from documents.tests.factories import StoragePathFactory
|
|
||||||
from documents.tests.factories import TagFactory
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from documents.models import Correspondent
|
|
||||||
from documents.models import DocumentType
|
|
||||||
from documents.models import StoragePath
|
|
||||||
from documents.models import Tag
|
|
||||||
|
|
||||||
ScaleProfile = Literal["medium", "large"]
|
|
||||||
|
|
||||||
# Fraction of seeded documents given a real owner; the remainder stays
|
|
||||||
# owner=None, mirroring a real install's mix of owned and legacy/imported
|
|
||||||
# unowned documents.
|
|
||||||
_OWNED_FRACTION = 0.9
|
|
||||||
|
|
||||||
|
|
||||||
class _ScaleCounts:
|
|
||||||
__slots__ = (
|
|
||||||
"correspondents",
|
|
||||||
"document_types",
|
|
||||||
"documents",
|
|
||||||
"groups",
|
|
||||||
"storage_paths",
|
|
||||||
"tags",
|
|
||||||
"users",
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
*,
|
|
||||||
documents: int,
|
|
||||||
tags: int,
|
|
||||||
correspondents: int,
|
|
||||||
document_types: int,
|
|
||||||
storage_paths: int,
|
|
||||||
users: int,
|
|
||||||
groups: int,
|
|
||||||
) -> None:
|
|
||||||
self.documents = documents
|
|
||||||
self.tags = tags
|
|
||||||
self.correspondents = correspondents
|
|
||||||
self.document_types = document_types
|
|
||||||
self.storage_paths = storage_paths
|
|
||||||
self.users = users
|
|
||||||
self.groups = groups
|
|
||||||
|
|
||||||
|
|
||||||
_SCALE_PROFILES: dict[ScaleProfile, _ScaleCounts] = {
|
|
||||||
"medium": _ScaleCounts(
|
|
||||||
documents=20_000,
|
|
||||||
tags=100,
|
|
||||||
correspondents=300,
|
|
||||||
document_types=50,
|
|
||||||
storage_paths=20,
|
|
||||||
users=10,
|
|
||||||
groups=5,
|
|
||||||
),
|
|
||||||
"large": _ScaleCounts(
|
|
||||||
documents=360_000,
|
|
||||||
tags=1_000,
|
|
||||||
correspondents=5_000,
|
|
||||||
document_types=300,
|
|
||||||
storage_paths=50,
|
|
||||||
users=25,
|
|
||||||
groups=10,
|
|
||||||
),
|
|
||||||
}
|
|
||||||
# Ratios measured from a real install (discussion #13276): 1,414 user-perm
|
|
||||||
# rows / 27,232 group-perm rows over 12,000 documents.
|
|
||||||
_USER_PERM_ROWS_PER_DOC = 1_414 / 12_000
|
|
||||||
_GROUP_PERM_ROWS_PER_DOC = 27_232 / 12_000
|
|
||||||
|
|
||||||
|
|
||||||
def _sample_distinct_pairs(
|
|
||||||
rng: random.Random,
|
|
||||||
n_subjects: int,
|
|
||||||
n_objects: int,
|
|
||||||
count: int,
|
|
||||||
) -> set[tuple[int, int]]:
|
|
||||||
"""
|
|
||||||
Rejection-sample `count` distinct (subject_index, object_index) pairs.
|
|
||||||
`count` is always well under `n_subjects * n_objects` for every scale
|
|
||||||
profile, so this terminates quickly.
|
|
||||||
"""
|
|
||||||
if count > n_subjects * n_objects:
|
|
||||||
msg = (
|
|
||||||
f"cannot sample {count} distinct pairs from only "
|
|
||||||
f"{n_subjects * n_objects} possible (subject, object) slots"
|
|
||||||
)
|
|
||||||
raise ValueError(msg)
|
|
||||||
pairs: set[tuple[int, int]] = set()
|
|
||||||
while len(pairs) < count:
|
|
||||||
pairs.add((rng.randrange(n_subjects), rng.randrange(n_objects)))
|
|
||||||
return pairs
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, slots=True)
|
|
||||||
class SeededData:
|
|
||||||
users: tuple[User, ...]
|
|
||||||
groups: tuple[Group, ...]
|
|
||||||
documents: tuple[Document, ...]
|
|
||||||
tags: tuple[Tag, ...]
|
|
||||||
correspondents: tuple[Correspondent, ...]
|
|
||||||
document_types: tuple[DocumentType, ...]
|
|
||||||
storage_paths: tuple[StoragePath, ...]
|
|
||||||
|
|
||||||
|
|
||||||
def seed_permission_dataset(
|
|
||||||
scale: ScaleProfile = "medium",
|
|
||||||
*,
|
|
||||||
seed: int = 1337,
|
|
||||||
) -> SeededData:
|
|
||||||
"""
|
|
||||||
Build a dataset whose document count and guardian-permission-row ratios
|
|
||||||
mirror real bug reports, so profiling results are representative of
|
|
||||||
actual large installs rather than an arbitrary small fixture.
|
|
||||||
"""
|
|
||||||
counts = _SCALE_PROFILES[scale]
|
|
||||||
rng = random.Random(seed)
|
|
||||||
|
|
||||||
users = tuple(
|
|
||||||
User.objects.create_user(username=f"profile_user_{i}")
|
|
||||||
for i in range(counts.users)
|
|
||||||
)
|
|
||||||
groups = tuple(
|
|
||||||
Group.objects.create(name=f"profile_group_{i}") for i in range(counts.groups)
|
|
||||||
)
|
|
||||||
for user in users:
|
|
||||||
user.groups.add(rng.choice(groups))
|
|
||||||
|
|
||||||
documents = list(DocumentFactory.create_batch(counts.documents))
|
|
||||||
|
|
||||||
# Assign realistic ownership -- without this, every document stays
|
|
||||||
# owner=None and the "owned or unowned" visibility clause is trivially
|
|
||||||
# true for every row, so no guardian permission check ever needs to run
|
|
||||||
# (see the amendment note above this code block).
|
|
||||||
owned_documents = []
|
|
||||||
for document in documents:
|
|
||||||
if rng.random() < _OWNED_FRACTION:
|
|
||||||
document.owner = rng.choice(users)
|
|
||||||
owned_documents.append(document)
|
|
||||||
Document.objects.bulk_update(owned_documents, ["owner"], batch_size=2_000)
|
|
||||||
documents = tuple(documents)
|
|
||||||
|
|
||||||
tags = tuple(TagFactory.create_batch(counts.tags))
|
|
||||||
correspondents = tuple(CorrespondentFactory.create_batch(counts.correspondents))
|
|
||||||
document_types = tuple(DocumentTypeFactory.create_batch(counts.document_types))
|
|
||||||
storage_paths = tuple(StoragePathFactory.create_batch(counts.storage_paths))
|
|
||||||
|
|
||||||
n_user_perms = round(counts.documents * _USER_PERM_ROWS_PER_DOC)
|
|
||||||
n_group_perms = round(counts.documents * _GROUP_PERM_ROWS_PER_DOC)
|
|
||||||
|
|
||||||
# Grant permissions only on OWNED documents -- a grant on an already-
|
|
||||||
# unowned document is a no-op for visibility (unowned documents are
|
|
||||||
# visible to everyone regardless), so restricting the pool here is what
|
|
||||||
# makes each assign_perm() call actually matter for someone, and is
|
|
||||||
# what exercises the guardian-permission-join code path this profiling
|
|
||||||
# effort exists to measure.
|
|
||||||
for user_idx, owned_idx in _sample_distinct_pairs(
|
|
||||||
rng,
|
|
||||||
len(users),
|
|
||||||
len(owned_documents),
|
|
||||||
n_user_perms,
|
|
||||||
):
|
|
||||||
assign_perm("view_document", users[user_idx], owned_documents[owned_idx])
|
|
||||||
for group_idx, owned_idx in _sample_distinct_pairs(
|
|
||||||
rng,
|
|
||||||
len(groups),
|
|
||||||
len(owned_documents),
|
|
||||||
n_group_perms,
|
|
||||||
):
|
|
||||||
assign_perm("view_document", groups[group_idx], owned_documents[owned_idx])
|
|
||||||
|
|
||||||
return SeededData(
|
|
||||||
users=users,
|
|
||||||
groups=groups,
|
|
||||||
documents=documents,
|
|
||||||
tags=tags,
|
|
||||||
correspondents=correspondents,
|
|
||||||
document_types=document_types,
|
|
||||||
storage_paths=storage_paths,
|
|
||||||
)
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# profiling/stop_postgres.sh
|
|
||||||
#
|
|
||||||
# Explicit, manual teardown of the profiling Postgres container. Not called
|
|
||||||
# automatically by run_with_postgres.sh -- run this yourself once you're
|
|
||||||
# done with a profiling session, so a seeded `large`-scale dataset can be
|
|
||||||
# reused across several script runs first. Terminates any active backends
|
|
||||||
# before stopping, so a stuck query can't stall `docker stop` waiting for
|
|
||||||
# a graceful Postgres shutdown that never comes.
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
CONTAINER_NAME="pngx-profiling-pg"
|
|
||||||
|
|
||||||
if docker inspect "$CONTAINER_NAME" >/dev/null 2>&1; then
|
|
||||||
docker exec "$CONTAINER_NAME" psql -U paperless -d paperless -v ON_ERROR_STOP=0 -c "
|
|
||||||
SELECT pg_terminate_backend(pid)
|
|
||||||
FROM pg_stat_activity
|
|
||||||
WHERE pid <> pg_backend_pid();
|
|
||||||
" >/dev/null 2>&1 || true
|
|
||||||
docker stop "$CONTAINER_NAME" >/dev/null
|
|
||||||
echo "Stopped and removed profiling Postgres container."
|
|
||||||
else
|
|
||||||
echo "No profiling Postgres container was running."
|
|
||||||
fi
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
# profiling/test_harness_self_check.py
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
from profiling.harness import append_profiling_history
|
|
||||||
from profiling.harness import require_postgres
|
|
||||||
from profiling.harness import run_profile
|
|
||||||
from profiling.seed import seed_permission_dataset
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.profiling
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_seed_medium_scale_produces_expected_counts() -> None:
|
|
||||||
require_postgres()
|
|
||||||
data = seed_permission_dataset(scale="medium")
|
|
||||||
assert len(data.documents) == 20_000
|
|
||||||
assert len(data.tags) == 100
|
|
||||||
assert len(data.correspondents) == 300
|
|
||||||
assert len(data.document_types) == 50
|
|
||||||
assert len(data.storage_paths) == 20
|
|
||||||
|
|
||||||
from guardian.models import GroupObjectPermission
|
|
||||||
from guardian.models import UserObjectPermission
|
|
||||||
|
|
||||||
user_perm_count = UserObjectPermission.objects.count()
|
|
||||||
group_perm_count = GroupObjectPermission.objects.count()
|
|
||||||
# within 5% of the ratio-derived target -- exact counts depend on random
|
|
||||||
# sampling without replacement, see seed.py
|
|
||||||
assert 2_242 <= user_perm_count <= 2_478
|
|
||||||
assert 43_111 <= group_perm_count <= 47_649
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.profiling
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_run_profile_reports_query_count_and_timing() -> None:
|
|
||||||
require_postgres()
|
|
||||||
|
|
||||||
def trivial() -> list[int]:
|
|
||||||
from documents.models import Document
|
|
||||||
|
|
||||||
return list(Document.objects.values_list("id", flat=True)[:1])
|
|
||||||
|
|
||||||
result = run_profile(trivial, repeat=3)
|
|
||||||
assert result.best_seconds >= 0
|
|
||||||
assert len(result.all_seconds) == 3
|
|
||||||
assert result.query_count >= 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_append_profiling_history_writes_a_valid_json_line() -> None:
|
|
||||||
history_path = Path(__file__).parent / "results" / "history.jsonl"
|
|
||||||
before_lines = (
|
|
||||||
history_path.read_text().splitlines() if history_path.exists() else []
|
|
||||||
)
|
|
||||||
|
|
||||||
append_profiling_history(
|
|
||||||
stage="self-check",
|
|
||||||
scenario="test_append_profiling_history_writes_a_valid_json_line",
|
|
||||||
best_seconds=0.001,
|
|
||||||
query_count=0,
|
|
||||||
scale="medium",
|
|
||||||
code_ref="test-run",
|
|
||||||
)
|
|
||||||
|
|
||||||
after_lines = history_path.read_text().splitlines()
|
|
||||||
assert len(after_lines) == len(before_lines) + 1
|
|
||||||
entry = json.loads(after_lines[-1])
|
|
||||||
assert entry["stage"] == "self-check"
|
|
||||||
assert entry["code_ref"] == "test-run"
|
|
||||||
assert entry["scale"] == "medium"
|
|
||||||
assert "timestamp" in entry
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
from documents.models import Document
|
|
||||||
from documents.permissions import get_objects_for_user_owner_aware
|
|
||||||
from documents.permissions import permitted_document_ids
|
|
||||||
from profiling.harness import append_profiling_history
|
|
||||||
from profiling.harness import capture_explain_analyze
|
|
||||||
from profiling.harness import require_postgres
|
|
||||||
from profiling.harness import run_profile
|
|
||||||
from profiling.seed import seed_permission_dataset
|
|
||||||
|
|
||||||
RESULTS_DIR = Path(__file__).parent / "results"
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.profiling
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_profile_get_objects_for_user_owner_aware_document_baseline() -> None:
|
|
||||||
require_postgres()
|
|
||||||
data = seed_permission_dataset(scale="medium")
|
|
||||||
user = data.users[0]
|
|
||||||
|
|
||||||
def call() -> list[int]:
|
|
||||||
return list(
|
|
||||||
get_objects_for_user_owner_aware(
|
|
||||||
user,
|
|
||||||
"documents.view_document",
|
|
||||||
Document,
|
|
||||||
).values_list("id", flat=True),
|
|
||||||
)
|
|
||||||
|
|
||||||
profile = run_profile(call, repeat=3)
|
|
||||||
plan = capture_explain_analyze(
|
|
||||||
get_objects_for_user_owner_aware(user, "documents.view_document", Document),
|
|
||||||
)
|
|
||||||
|
|
||||||
RESULTS_DIR.mkdir(exist_ok=True)
|
|
||||||
(RESULTS_DIR / "stage1_baseline.json").write_text(
|
|
||||||
json.dumps(
|
|
||||||
{
|
|
||||||
"get_objects_for_user_owner_aware_document": {
|
|
||||||
"best_seconds": profile.best_seconds,
|
|
||||||
"query_count": profile.query_count,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
indent=2,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
(RESULTS_DIR / "stage1_baseline_explain.txt").write_text(plan)
|
|
||||||
append_profiling_history(
|
|
||||||
stage="stage1",
|
|
||||||
scenario="get_objects_for_user_owner_aware_document_baseline",
|
|
||||||
best_seconds=profile.best_seconds,
|
|
||||||
query_count=profile.query_count,
|
|
||||||
scale="medium",
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"\nBASELINE best={profile.best_seconds:.4f}s queries={profile.query_count}") # noqa: T201
|
|
||||||
print(plan) # noqa: T201
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.profiling
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_profile_permitted_document_ids_after_stage1() -> None:
|
|
||||||
require_postgres()
|
|
||||||
data = seed_permission_dataset(scale="medium")
|
|
||||||
user = data.users[0]
|
|
||||||
|
|
||||||
def call():
|
|
||||||
return list(
|
|
||||||
Document.objects.filter(id__in=permitted_document_ids(user)).values_list(
|
|
||||||
"id",
|
|
||||||
flat=True,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
profile = run_profile(call, repeat=3)
|
|
||||||
plan = capture_explain_analyze(
|
|
||||||
Document.objects.filter(id__in=permitted_document_ids(user)),
|
|
||||||
)
|
|
||||||
|
|
||||||
baseline = json.loads((RESULTS_DIR / "stage1_baseline.json").read_text())
|
|
||||||
baseline_seconds = baseline["get_objects_for_user_owner_aware_document"][
|
|
||||||
"best_seconds"
|
|
||||||
]
|
|
||||||
baseline_queries = baseline["get_objects_for_user_owner_aware_document"][
|
|
||||||
"query_count"
|
|
||||||
]
|
|
||||||
|
|
||||||
(RESULTS_DIR / "stage1_after.json").write_text(
|
|
||||||
json.dumps(
|
|
||||||
{
|
|
||||||
"permitted_document_ids": {
|
|
||||||
"best_seconds": profile.best_seconds,
|
|
||||||
"query_count": profile.query_count,
|
|
||||||
},
|
|
||||||
"baseline_best_seconds": baseline_seconds,
|
|
||||||
"baseline_query_count": baseline_queries,
|
|
||||||
"speedup_x": baseline_seconds / profile.best_seconds
|
|
||||||
if profile.best_seconds
|
|
||||||
else None,
|
|
||||||
},
|
|
||||||
indent=2,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
(RESULTS_DIR / "stage1_after_explain.txt").write_text(plan)
|
|
||||||
append_profiling_history(
|
|
||||||
stage="stage1",
|
|
||||||
scenario="permitted_document_ids_after_stage1",
|
|
||||||
best_seconds=profile.best_seconds,
|
|
||||||
query_count=profile.query_count,
|
|
||||||
scale="medium",
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"\nBEFORE best={baseline_seconds:.4f}s queries={baseline_queries}") # noqa: T201
|
|
||||||
print(f"AFTER best={profile.best_seconds:.4f}s queries={profile.query_count}") # noqa: T201
|
|
||||||
|
|
||||||
# Hard gate: must not be a regression, and should be meaningfully faster
|
|
||||||
# at this scale (the whole point of this stage).
|
|
||||||
assert profile.best_seconds < baseline_seconds
|
|
||||||
assert profile.query_count <= baseline_queries
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
# profiling/test_stage2_document_loops.py
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
from documents.permissions import has_perms_owner_aware
|
|
||||||
from documents.permissions import permitted_document_ids
|
|
||||||
from profiling.harness import append_profiling_history
|
|
||||||
from profiling.harness import require_postgres
|
|
||||||
from profiling.harness import run_profile
|
|
||||||
from profiling.seed import seed_permission_dataset
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.profiling
|
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_profile_per_row_checker_vs_resolved_set_for_bulk_operation() -> None:
|
|
||||||
require_postgres()
|
|
||||||
data = seed_permission_dataset(scale="medium")
|
|
||||||
user = data.users[0]
|
|
||||||
# simulate a bulk operation over 500 documents the user can actually see
|
|
||||||
# (bulk-edit/share/trash all operate on a user's own selection) -- built
|
|
||||||
# from confirmed-visible documents so all() can't short-circuit unfairly
|
|
||||||
# in either old_style or new_style, see amendment note above
|
|
||||||
permitted_ids = set(permitted_document_ids(user))
|
|
||||||
batch = [doc for doc in data.documents if doc.pk in permitted_ids][:500]
|
|
||||||
assert len(batch) == 500, (
|
|
||||||
f"expected at least 500 visible documents to build a fair batch, "
|
|
||||||
f"got {len(batch)} -- scale profile or seed ratios may need adjusting"
|
|
||||||
)
|
|
||||||
|
|
||||||
def old_style():
|
|
||||||
return all(has_perms_owner_aware(user, "view_document", doc) for doc in batch)
|
|
||||||
|
|
||||||
def new_style():
|
|
||||||
permitted = set(permitted_document_ids(user))
|
|
||||||
return all(doc.pk in permitted for doc in batch)
|
|
||||||
|
|
||||||
old_profile = run_profile(old_style, repeat=3)
|
|
||||||
new_profile = run_profile(new_style, repeat=3)
|
|
||||||
|
|
||||||
append_profiling_history(
|
|
||||||
stage="stage2",
|
|
||||||
scenario="per_row_checker_vs_resolved_set_old",
|
|
||||||
best_seconds=old_profile.best_seconds,
|
|
||||||
query_count=old_profile.query_count,
|
|
||||||
scale="medium",
|
|
||||||
)
|
|
||||||
append_profiling_history(
|
|
||||||
stage="stage2",
|
|
||||||
scenario="per_row_checker_vs_resolved_set_new",
|
|
||||||
best_seconds=new_profile.best_seconds,
|
|
||||||
query_count=new_profile.query_count,
|
|
||||||
scale="medium",
|
|
||||||
)
|
|
||||||
|
|
||||||
print( # noqa: T201
|
|
||||||
f"\nOLD (per-row checker): best={old_profile.best_seconds:.4f}s queries={old_profile.query_count}",
|
|
||||||
)
|
|
||||||
print( # noqa: T201
|
|
||||||
f"NEW (resolved set): best={new_profile.best_seconds:.4f}s queries={new_profile.query_count}",
|
|
||||||
)
|
|
||||||
|
|
||||||
assert new_profile.query_count < old_profile.query_count
|
|
||||||
assert new_profile.best_seconds < old_profile.best_seconds
|
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "paperless-ngx"
|
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"
|
description = "A community-supported supercharged document management system: scan, index and archive all your physical documents"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
@@ -75,7 +75,7 @@ dependencies = [
|
|||||||
"sqlite-vec==0.1.9",
|
"sqlite-vec==0.1.9",
|
||||||
"tantivy~=0.26.0",
|
"tantivy~=0.26.0",
|
||||||
"tika-client~=0.11.0",
|
"tika-client~=0.11.0",
|
||||||
"torch~=2.13.0",
|
"torch~=2.12.0",
|
||||||
"watchfiles>=1.1.1",
|
"watchfiles>=1.1.1",
|
||||||
"whitenoise~=6.11",
|
"whitenoise~=6.11",
|
||||||
"zxing-cpp~=3.0.0",
|
"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'
|
import path from 'node:path'
|
||||||
|
|
||||||
const REQUESTS_HAR = path.join(__dirname, 'requests/api-document-detail.har')
|
const REQUESTS_HAR = path.join(__dirname, 'requests/api-document-detail.har')
|
||||||
@@ -95,60 +95,3 @@ test('should support quick filters', async ({ page }) => {
|
|||||||
.click()
|
.click()
|
||||||
await expect(page).toHaveURL(/tags__id__all=4&sort=created&reverse=1&page=1/)
|
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
@@ -1277,7 +1277,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1791</context>
|
<context context-type="linenumber">1787</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1577733187050997705" datatype="html">
|
<trans-unit id="1577733187050997705" datatype="html">
|
||||||
@@ -1393,8 +1393,8 @@
|
|||||||
<context context-type="linenumber">302</context>
|
<context context-type="linenumber">302</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
@@ -2184,7 +2184,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">657</context>
|
<context context-type="linenumber">653</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
@@ -3087,11 +3087,11 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1409</context>
|
<context context-type="linenumber">1405</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1792</context>
|
<context context-type="linenumber">1788</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
|
<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 context-type="linenumber">85</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -3688,7 +3673,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1362</context>
|
<context context-type="linenumber">1358</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
|
||||||
@@ -3800,7 +3785,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1845</context>
|
<context context-type="linenumber">1841</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6661109599266152398" datatype="html">
|
<trans-unit id="6661109599266152398" datatype="html">
|
||||||
@@ -3811,7 +3796,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1846</context>
|
<context context-type="linenumber">1842</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5162686434580248853" datatype="html">
|
<trans-unit id="5162686434580248853" datatype="html">
|
||||||
@@ -3822,7 +3807,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1847</context>
|
<context context-type="linenumber">1843</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8157388568390631653" datatype="html">
|
<trans-unit id="8157388568390631653" datatype="html">
|
||||||
@@ -5724,7 +5709,7 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1366</context>
|
<context context-type="linenumber">1362</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
|
<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 context-type="linenumber">92</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -7966,88 +7962,88 @@
|
|||||||
<source>Enter Password</source>
|
<source>Enter Password</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">513</context>
|
<context context-type="linenumber">512</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5758784066858623886" datatype="html">
|
<trans-unit id="5758784066858623886" datatype="html">
|
||||||
<source>Error retrieving metadata</source>
|
<source>Error retrieving metadata</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">424</context>
|
<context context-type="linenumber">423</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2218903673684131427" datatype="html">
|
<trans-unit id="2218903673684131427" datatype="html">
|
||||||
<source>An error occurred loading content: <x id="PH" equiv-text="err.message ?? err.toString()"/></source>
|
<source>An error occurred loading content: <x id="PH" equiv-text="err.message ?? err.toString()"/></source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">526,528</context>
|
<context context-type="linenumber">525,527</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">986,988</context>
|
<context context-type="linenumber">982,984</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6357361810318120957" datatype="html">
|
<trans-unit id="6357361810318120957" datatype="html">
|
||||||
<source>Document was updated</source>
|
<source>Document was updated</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">652</context>
|
<context context-type="linenumber">648</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5154064822428631306" datatype="html">
|
<trans-unit id="5154064822428631306" datatype="html">
|
||||||
<source>Document was updated at <x id="PH" equiv-text="formattedModified"/>.</source>
|
<source>Document was updated at <x id="PH" equiv-text="formattedModified"/>.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">653</context>
|
<context context-type="linenumber">649</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8462497568316256794" datatype="html">
|
<trans-unit id="8462497568316256794" datatype="html">
|
||||||
<source>Reload to discard your local unsaved edits and load the latest remote version.</source>
|
<source>Reload to discard your local unsaved edits and load the latest remote version.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">654</context>
|
<context context-type="linenumber">650</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7967484035994732534" datatype="html">
|
<trans-unit id="7967484035994732534" datatype="html">
|
||||||
<source>Reload</source>
|
<source>Reload</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">656</context>
|
<context context-type="linenumber">652</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2907037627372942104" datatype="html">
|
<trans-unit id="2907037627372942104" datatype="html">
|
||||||
<source>Document reloaded with latest changes.</source>
|
<source>Document reloaded with latest changes.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">712</context>
|
<context context-type="linenumber">708</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6435639868943916539" datatype="html">
|
<trans-unit id="6435639868943916539" datatype="html">
|
||||||
<source>Document reloaded.</source>
|
<source>Document reloaded.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">723</context>
|
<context context-type="linenumber">719</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6142395741265832184" datatype="html">
|
<trans-unit id="6142395741265832184" datatype="html">
|
||||||
<source>Next document</source>
|
<source>Next document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">825</context>
|
<context context-type="linenumber">821</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="651985345816518480" datatype="html">
|
<trans-unit id="651985345816518480" datatype="html">
|
||||||
<source>Previous document</source>
|
<source>Previous document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">835</context>
|
<context context-type="linenumber">831</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2885986061416655600" datatype="html">
|
<trans-unit id="2885986061416655600" datatype="html">
|
||||||
<source>Close document</source>
|
<source>Close document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">843</context>
|
<context context-type="linenumber">839</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
|
<context context-type="sourcefile">src/app/services/open-documents.service.ts</context>
|
||||||
@@ -8058,67 +8054,67 @@
|
|||||||
<source>Save document</source>
|
<source>Save document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">850</context>
|
<context context-type="linenumber">846</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1784543155727940353" datatype="html">
|
<trans-unit id="1784543155727940353" datatype="html">
|
||||||
<source>Save and close / next</source>
|
<source>Save and close / next</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">859</context>
|
<context context-type="linenumber">855</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7427704425579737895" datatype="html">
|
<trans-unit id="7427704425579737895" datatype="html">
|
||||||
<source>Error retrieving version content</source>
|
<source>Error retrieving version content</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">969</context>
|
<context context-type="linenumber">965</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3456881259945295697" datatype="html">
|
<trans-unit id="3456881259945295697" datatype="html">
|
||||||
<source>Error retrieving suggestions.</source>
|
<source>Error retrieving suggestions.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1030</context>
|
<context context-type="linenumber">1026</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2194092841814123758" datatype="html">
|
<trans-unit id="2194092841814123758" datatype="html">
|
||||||
<source>Document "<x id="PH" equiv-text="newValues.title"/>" saved successfully.</source>
|
<source>Document "<x id="PH" equiv-text="newValues.title"/>" saved successfully.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1242</context>
|
<context context-type="linenumber">1238</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1269</context>
|
<context context-type="linenumber">1265</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6626387786259219838" datatype="html">
|
<trans-unit id="6626387786259219838" datatype="html">
|
||||||
<source>Error saving document "<x id="PH" equiv-text="this.document().title"/>"</source>
|
<source>Error saving document "<x id="PH" equiv-text="this.document().title"/>"</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1275</context>
|
<context context-type="linenumber">1271</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="448882439049417053" datatype="html">
|
<trans-unit id="448882439049417053" datatype="html">
|
||||||
<source>Error saving document</source>
|
<source>Error saving document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1330</context>
|
<context context-type="linenumber">1326</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8410796510716511826" datatype="html">
|
<trans-unit id="8410796510716511826" datatype="html">
|
||||||
<source>Do you really want to move the document "<x id="PH" equiv-text="this.document().title"/>" to the trash?</source>
|
<source>Do you really want to move the document "<x id="PH" equiv-text="this.document().title"/>" to the trash?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1363</context>
|
<context context-type="linenumber">1359</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="282586936710748252" datatype="html">
|
<trans-unit id="282586936710748252" datatype="html">
|
||||||
<source>Documents can be restored prior to permanent deletion.</source>
|
<source>Documents can be restored prior to permanent deletion.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1364</context>
|
<context context-type="linenumber">1360</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
|
<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>
|
<source>Error deleting document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1385</context>
|
<context context-type="linenumber">1381</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="619486176823357521" datatype="html">
|
<trans-unit id="619486176823357521" datatype="html">
|
||||||
<source>Reprocess confirm</source>
|
<source>Reprocess confirm</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1405</context>
|
<context context-type="linenumber">1401</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.ts</context>
|
<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>
|
<source>This operation will permanently recreate the archive file for this document.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1406</context>
|
<context context-type="linenumber">1402</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="302054111564709516" datatype="html">
|
<trans-unit id="302054111564709516" datatype="html">
|
||||||
<source>The archive file will be re-generated with the current settings.</source>
|
<source>The archive file will be re-generated with the current settings.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1407</context>
|
<context context-type="linenumber">1403</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4700389117298802932" datatype="html">
|
<trans-unit id="4700389117298802932" datatype="html">
|
||||||
<source>Reprocess operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</source>
|
<source>Reprocess operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1417</context>
|
<context context-type="linenumber">1413</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4409560272830824468" datatype="html">
|
<trans-unit id="4409560272830824468" datatype="html">
|
||||||
<source>Error executing operation</source>
|
<source>Error executing operation</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1428</context>
|
<context context-type="linenumber">1424</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6030453331794586802" datatype="html">
|
<trans-unit id="6030453331794586802" datatype="html">
|
||||||
<source>Error downloading document</source>
|
<source>Error downloading document</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1491</context>
|
<context context-type="linenumber">1487</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4458954481601077369" datatype="html">
|
<trans-unit id="4458954481601077369" datatype="html">
|
||||||
<source>Page Fit</source>
|
<source>Page Fit</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1569</context>
|
<context context-type="linenumber">1565</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4663705961777238777" datatype="html">
|
<trans-unit id="4663705961777238777" datatype="html">
|
||||||
<source>PDF edit operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</source>
|
<source>PDF edit operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1812</context>
|
<context context-type="linenumber">1808</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="9043972994040261999" datatype="html">
|
<trans-unit id="9043972994040261999" datatype="html">
|
||||||
<source>Error executing PDF edit operation</source>
|
<source>Error executing PDF edit operation</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1824</context>
|
<context context-type="linenumber">1820</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6172690334763056188" datatype="html">
|
<trans-unit id="6172690334763056188" datatype="html">
|
||||||
<source>Please enter the current password before attempting to remove it.</source>
|
<source>Please enter the current password before attempting to remove it.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1835</context>
|
<context context-type="linenumber">1831</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="968660764814228922" datatype="html">
|
<trans-unit id="968660764814228922" datatype="html">
|
||||||
<source>Password removal operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</source>
|
<source>Password removal operation for "<x id="PH" equiv-text="this.document().title"/>" will begin in the background.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1869</context>
|
<context context-type="linenumber">1865</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2282118435712883014" datatype="html">
|
<trans-unit id="2282118435712883014" datatype="html">
|
||||||
<source>Error executing password removal operation</source>
|
<source>Error executing password removal operation</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1883</context>
|
<context context-type="linenumber">1879</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3740891324955700797" datatype="html">
|
<trans-unit id="3740891324955700797" datatype="html">
|
||||||
<source>Print failed.</source>
|
<source>Print failed.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1929</context>
|
<context context-type="linenumber">1925</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6457245677384603573" datatype="html">
|
<trans-unit id="6457245677384603573" datatype="html">
|
||||||
<source>Error loading document for printing.</source>
|
<source>Error loading document for printing.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1942</context>
|
<context context-type="linenumber">1938</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6085793215710522488" datatype="html">
|
<trans-unit id="6085793215710522488" datatype="html">
|
||||||
<source>An error occurred loading tiff: <x id="PH" equiv-text="err.toString()"/></source>
|
<source>An error occurred loading tiff: <x id="PH" equiv-text="err.toString()"/></source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">2012</context>
|
<context context-type="linenumber">2008</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">2018</context>
|
<context context-type="linenumber">2014</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4958946940233632319" datatype="html">
|
<trans-unit id="4958946940233632319" datatype="html">
|
||||||
@@ -11519,21 +11515,21 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5558341108007064934" datatype="html">
|
<trans-unit id="5558341108007064934" datatype="html">
|
||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1168781785897678748" datatype="html">
|
<trans-unit id="1168781785897678748" datatype="html">
|
||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3852289441366561594" datatype="html">
|
<trans-unit id="3852289441366561594" datatype="html">
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "paperless-ngx-ui",
|
"name": "paperless-ngx-ui",
|
||||||
"version": "3.0.2",
|
"version": "3.0.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "npx only-allow pnpm",
|
"preinstall": "npx only-allow pnpm",
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
|
|||||||
@@ -2,9 +2,6 @@ packages:
|
|||||||
- "."
|
- "."
|
||||||
minimumReleaseAge: 10080
|
minimumReleaseAge: 10080
|
||||||
trustPolicy: no-downgrade
|
trustPolicy: no-downgrade
|
||||||
trustPolicyExclude:
|
|
||||||
- "chokidar@4.0.3"
|
|
||||||
- "semver@6.3.1 || 5.7.2"
|
|
||||||
allowBuilds:
|
allowBuilds:
|
||||||
"@parcel/watcher": true
|
"@parcel/watcher": true
|
||||||
canvas: true
|
canvas: true
|
||||||
|
|||||||
@@ -304,7 +304,7 @@
|
|||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<p i18n>
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -280,52 +280,10 @@ main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 575.98px) {
|
@media screen and (min-width: 376px) and (max-width: 768px) {
|
||||||
.navbar {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr auto 1fr;
|
|
||||||
grid-template-areas:
|
|
||||||
"toggler brand actions"
|
|
||||||
"search search search";
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-toggler {
|
.navbar-toggler {
|
||||||
grid-area: toggler;
|
// compensate for 2 buttons on the right
|
||||||
text-align: left;
|
margin-right: 45px;
|
||||||
}
|
|
||||||
|
|
||||||
.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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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.show .dropdown-toggle,
|
||||||
:host ::ng-deep .dropdown-toggle:hover {
|
:host ::ng-deep .dropdown-toggle:hover {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
|
|||||||
@@ -9,14 +9,14 @@
|
|||||||
@for (message of messages(); track message) {
|
@for (message of messages(); track message) {
|
||||||
<div class="message d-flex flex-row small" [class.justify-content-end]="message.role === 'user'">
|
<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'">
|
<div class="p-2 m-2" [class.bg-body]="message.role === 'user'">
|
||||||
<span class="text-break">
|
<span>
|
||||||
{{ message.content }}
|
{{ message.content }}
|
||||||
@if (message.isStreaming) { <span class="blinking-cursor">|</span> }
|
@if (message.isStreaming) { <span class="blinking-cursor">|</span> }
|
||||||
</span>
|
</span>
|
||||||
@if (message.role === 'assistant' && message.references?.length) {
|
@if (message.role === 'assistant' && message.references?.length) {
|
||||||
<div class="chat-references list-group mt-3">
|
<div class="chat-references list-group mt-3">
|
||||||
@for (reference of message.references; track reference.id) {
|
@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>
|
<i-bs width="0.9em" height="0.9em" name="file-text" class="me-1"></i-bs><span>{{ reference.title }}</span>
|
||||||
</a>
|
</a>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
.chat-messages {
|
.chat-messages {
|
||||||
max-height: 350px;
|
max-height: 350px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
white-space: pre-wrap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-references {
|
.chat-references {
|
||||||
|
|||||||
@@ -17,6 +17,6 @@
|
|||||||
|
|
||||||
<ng-template #popoverContent>
|
<ng-template #popoverContent>
|
||||||
<div>
|
<div>
|
||||||
{{confirmMessage}} <button class="btn btn-link btn-sm text-danger p-0 m-0 lh-1" type="button" (click)="onConfirm($event)" i18n>Yes</button>
|
{{confirmMessage}} <button class="btn btn-link btn-sm text-danger p-0 m-0 lh-1" type="button" (click)="onConfirm($event)">Yes</button>
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|||||||
@@ -283,22 +283,6 @@ describe('PngxPdfViewerComponent', () => {
|
|||||||
expect(mockViewer.currentPageNumber).toBe(1)
|
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', () => {
|
it('applies viewer state after view init when already loaded', () => {
|
||||||
const applySpy = jest.spyOn(component as any, 'applyViewerState')
|
const applySpy = jest.spyOn(component as any, 'applyViewerState')
|
||||||
;(component as any).hasLoaded = true
|
;(component as any).hasLoaded = true
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ export class PngxPdfViewerComponent
|
|||||||
private readonly document = inject<Document>(DOCUMENT)
|
private readonly document = inject<Document>(DOCUMENT)
|
||||||
|
|
||||||
@Input() src!: string
|
@Input() src!: string
|
||||||
@Input() sourceRevision = 0
|
|
||||||
@Input() password?: string
|
@Input() password?: string
|
||||||
@Input() page?: number
|
@Input() page?: number
|
||||||
@Output() pageChange = new EventEmitter<number>()
|
@Output() pageChange = new EventEmitter<number>()
|
||||||
@@ -94,7 +93,7 @@ export class PngxPdfViewerComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnChanges(changes: SimpleChanges): void {
|
ngOnChanges(changes: SimpleChanges): void {
|
||||||
if (changes['src'] || changes['sourceRevision'] || changes['password']) {
|
if (changes['src'] || changes['password']) {
|
||||||
this.resetViewerState()
|
this.resetViewerState()
|
||||||
if (this.src) {
|
if (this.src) {
|
||||||
this.loadDocument()
|
this.loadDocument()
|
||||||
|
|||||||
@@ -472,7 +472,6 @@
|
|||||||
<div class="preview-sticky pdf-viewer-container">
|
<div class="preview-sticky pdf-viewer-container">
|
||||||
<pngx-pdf-viewer
|
<pngx-pdf-viewer
|
||||||
[src]="pdfSource()"
|
[src]="pdfSource()"
|
||||||
[sourceRevision]="previewRevision()"
|
|
||||||
[password]="pdfPassword()"
|
[password]="pdfPassword()"
|
||||||
[renderMode]="PdfRenderMode.All"
|
[renderMode]="PdfRenderMode.All"
|
||||||
[page]="previewCurrentPage()" (pageChange)="previewCurrentPage.set($event)"
|
[page]="previewCurrentPage()" (pageChange)="previewCurrentPage.set($event)"
|
||||||
|
|||||||
@@ -1602,7 +1602,6 @@ describe('DocumentDetailComponent', () => {
|
|||||||
expect(openDoc.__changedFields).toEqual([])
|
expect(openDoc.__changedFields).toEqual([])
|
||||||
expect(setDirtySpy).toHaveBeenCalledWith(openDoc, false)
|
expect(setDirtySpy).toHaveBeenCalledWith(openDoc, false)
|
||||||
expect(saveSpy).toHaveBeenCalled()
|
expect(saveSpy).toHaveBeenCalled()
|
||||||
expect(component.previewRevision()).toBe(1)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should ignore incoming update for a different document id', () => {
|
it('should ignore incoming update for a different document id', () => {
|
||||||
|
|||||||
@@ -249,7 +249,6 @@ export class DocumentDetailComponent
|
|||||||
titleSubject: Subject<string> = new Subject()
|
titleSubject: Subject<string> = new Subject()
|
||||||
readonly previewUrl = signal<string>(undefined)
|
readonly previewUrl = signal<string>(undefined)
|
||||||
readonly pdfSource = signal<string>(undefined)
|
readonly pdfSource = signal<string>(undefined)
|
||||||
readonly previewRevision = signal(0)
|
|
||||||
readonly pdfPassword = signal<string>(undefined)
|
readonly pdfPassword = signal<string>(undefined)
|
||||||
readonly thumbUrl = signal<string>(undefined)
|
readonly thumbUrl = signal<string>(undefined)
|
||||||
readonly previewText = signal<string>(undefined)
|
readonly previewText = signal<string>(undefined)
|
||||||
@@ -610,9 +609,6 @@ export class DocumentDetailComponent
|
|||||||
.subscribe()
|
.subscribe()
|
||||||
}
|
}
|
||||||
this.updateComponent(useDoc)
|
this.updateComponent(useDoc)
|
||||||
if (forceRemote) {
|
|
||||||
this.previewRevision.update((revision) => revision + 1)
|
|
||||||
}
|
|
||||||
this.titleSubject
|
this.titleSubject
|
||||||
.pipe(
|
.pipe(
|
||||||
debounceTime(1000),
|
debounceTime(1000),
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
<input #textFilterInput class="form-control form-control-sm" type="text"
|
<input #textFilterInput class="form-control form-control-sm" type="text"
|
||||||
[disabled]="textFilterModifierIsNull"
|
[disabled]="textFilterModifierIsNull"
|
||||||
[(ngModel)]="textFilter"
|
[(ngModel)]="textFilter"
|
||||||
(keydown)="textFilterKeydown($event)"
|
(keyup)="textFilterKeyup($event)"
|
||||||
[ngbTypeahead]="searchAutoComplete"
|
[ngbTypeahead]="searchAutoComplete"
|
||||||
(selectItem)="itemSelected($event)"
|
(selectItem)="itemSelected($event)"
|
||||||
[readonly]="textFilterTarget === 'fulltext-morelike'">
|
[readonly]="textFilterTarget === 'fulltext-morelike'">
|
||||||
|
|||||||
+3
-3
@@ -2180,17 +2180,17 @@ describe('FilterEditorComponent', () => {
|
|||||||
it('should support Enter / Esc key on text field', () => {
|
it('should support Enter / Esc key on text field', () => {
|
||||||
component.textFilterInput.nativeElement.value = 'foo'
|
component.textFilterInput.nativeElement.value = 'foo'
|
||||||
component.textFilterInput.nativeElement.dispatchEvent(
|
component.textFilterInput.nativeElement.dispatchEvent(
|
||||||
new KeyboardEvent('keydown', { key: 'Enter' })
|
new KeyboardEvent('keyup', { key: 'Enter' })
|
||||||
)
|
)
|
||||||
expect(component.textFilter).toEqual('foo')
|
expect(component.textFilter).toEqual('foo')
|
||||||
component.textFilterInput.nativeElement.value = 'foo bar'
|
component.textFilterInput.nativeElement.value = 'foo bar'
|
||||||
component.textFilterInput.nativeElement.dispatchEvent(
|
component.textFilterInput.nativeElement.dispatchEvent(
|
||||||
new KeyboardEvent('keydown', { key: 'Escape' })
|
new KeyboardEvent('keyup', { key: 'Escape' })
|
||||||
)
|
)
|
||||||
expect(component.textFilter).toEqual('')
|
expect(component.textFilter).toEqual('')
|
||||||
const blurSpy = jest.spyOn(component.textFilterInput.nativeElement, 'blur')
|
const blurSpy = jest.spyOn(component.textFilterInput.nativeElement, 'blur')
|
||||||
component.textFilterInput.nativeElement.dispatchEvent(
|
component.textFilterInput.nativeElement.dispatchEvent(
|
||||||
new KeyboardEvent('keydown', { key: 'Escape' })
|
new KeyboardEvent('keyup', { key: 'Escape' })
|
||||||
)
|
)
|
||||||
expect(blurSpy).toHaveBeenCalled()
|
expect(blurSpy).toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1312,7 +1312,7 @@ export class FilterEditorComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
textFilterKeydown(event: KeyboardEvent) {
|
textFilterKeyup(event: KeyboardEvent) {
|
||||||
if (event.key == 'Enter') {
|
if (event.key == 'Enter') {
|
||||||
const filterString = (
|
const filterString = (
|
||||||
this.textFilterInput.nativeElement as HTMLInputElement
|
this.textFilterInput.nativeElement as HTMLInputElement
|
||||||
|
|||||||
+1
-24
@@ -18,7 +18,6 @@ import {
|
|||||||
DocumentAttributesComponent,
|
DocumentAttributesComponent,
|
||||||
DocumentAttributesSectionKind,
|
DocumentAttributesSectionKind,
|
||||||
} from './document-attributes.component'
|
} from './document-attributes.component'
|
||||||
import { ManagementListComponent } from './management-list/management-list.component'
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'pngx-dummy-section',
|
selector: 'pngx-dummy-section',
|
||||||
@@ -171,32 +170,10 @@ describe('DocumentAttributesComponent', () => {
|
|||||||
expect(component.activeManagementList).toBeNull()
|
expect(component.activeManagementList).toBeNull()
|
||||||
|
|
||||||
component.activeNavID.set(1)
|
component.activeNavID.set(1)
|
||||||
const managementList = Object.create(ManagementListComponent.prototype)
|
|
||||||
component.activeOutlet = {
|
|
||||||
componentInstance: managementList,
|
|
||||||
} as any
|
|
||||||
expect(component.activeSection.kind).toBe(
|
expect(component.activeSection.kind).toBe(
|
||||||
DocumentAttributesSectionKind.ManagementList
|
DocumentAttributesSectionKind.ManagementList
|
||||||
)
|
)
|
||||||
expect(component.activeManagementList).toBe(managementList)
|
expect(component.activeManagementList).toBeDefined()
|
||||||
})
|
|
||||||
|
|
||||||
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)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should return activeCustomFields correctly', () => {
|
it('should return activeCustomFields correctly', () => {
|
||||||
|
|||||||
+6
-3
@@ -132,8 +132,11 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy {
|
|||||||
]
|
]
|
||||||
|
|
||||||
@ViewChild('activeOutlet', { read: NgComponentOutlet })
|
@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)
|
readonly activeNavID = signal<number>(null)
|
||||||
|
|
||||||
get visibleSections(): DocumentAttributesSection[] {
|
get visibleSections(): DocumentAttributesSection[] {
|
||||||
@@ -158,14 +161,14 @@ export class DocumentAttributesComponent implements OnInit, OnDestroy {
|
|||||||
this.activeSection?.kind !== DocumentAttributesSectionKind.ManagementList
|
this.activeSection?.kind !== DocumentAttributesSectionKind.ManagementList
|
||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
const instance = this.activeOutlet?.componentInstance
|
const instance = this.activeComponent()
|
||||||
return instance instanceof ManagementListComponent ? instance : null
|
return instance instanceof ManagementListComponent ? instance : null
|
||||||
}
|
}
|
||||||
|
|
||||||
get activeCustomFields(): CustomFieldsComponent | null {
|
get activeCustomFields(): CustomFieldsComponent | null {
|
||||||
if (this.activeSection?.kind !== DocumentAttributesSectionKind.CustomFields)
|
if (this.activeSection?.kind !== DocumentAttributesSectionKind.CustomFields)
|
||||||
return null
|
return null
|
||||||
const instance = this.activeOutlet?.componentInstance
|
const instance = this.activeComponent()
|
||||||
return instance instanceof CustomFieldsComponent ? instance : null
|
return instance instanceof CustomFieldsComponent ? instance : null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,18 +108,6 @@ describe('PermissionsService', () => {
|
|||||||
actionKey: 'View', // PermissionAction.View
|
actionKey: 'View', // PermissionAction.View
|
||||||
typeKey: 'Document', // PermissionType.Document
|
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', () => {
|
it('correctly checks explicit global permissions', () => {
|
||||||
|
|||||||
@@ -110,16 +110,19 @@ export class PermissionsService {
|
|||||||
actionKey: string
|
actionKey: string
|
||||||
typeKey: string
|
typeKey: string
|
||||||
} {
|
} {
|
||||||
|
const matches = permissionStr.match(/(.+)_/)
|
||||||
let typeKey
|
let typeKey
|
||||||
let actionKey
|
let actionKey
|
||||||
const actionIndex = Object.values(PermissionAction).findIndex((action) =>
|
if (matches?.length > 0) {
|
||||||
permissionStr.startsWith(`${action}_`)
|
const action = matches[1]
|
||||||
)
|
const actionIndex = Object.values(PermissionAction).indexOf(
|
||||||
if (actionIndex > -1) {
|
action as PermissionAction
|
||||||
const action = Object.values(PermissionAction)[actionIndex]
|
)
|
||||||
actionKey = Object.keys(PermissionAction)[actionIndex]
|
if (actionIndex > -1) {
|
||||||
|
actionKey = Object.keys(PermissionAction)[actionIndex]
|
||||||
|
}
|
||||||
const typeIndex = Object.values(PermissionType).indexOf(
|
const typeIndex = Object.values(PermissionType).indexOf(
|
||||||
permissionStr.replace(`${action}_`, '%s_') as PermissionType
|
permissionStr.replace(action, '%s') as PermissionType
|
||||||
)
|
)
|
||||||
if (typeIndex > -1) {
|
if (typeIndex > -1) {
|
||||||
typeKey = Object.keys(PermissionType)[typeIndex]
|
typeKey = Object.keys(PermissionType)[typeIndex]
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
estimateBrightnessForColor,
|
estimateBrightnessForColor,
|
||||||
hexToHsl,
|
hexToHsl,
|
||||||
} from 'src/app/utils/color'
|
} 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 { DEFAULT_DISPLAY_FIELDS, DisplayField } from '../data/document'
|
||||||
import { SavedView } from '../data/saved-view'
|
import { SavedView } from '../data/saved-view'
|
||||||
import {
|
import {
|
||||||
@@ -359,8 +359,9 @@ export class SettingsService {
|
|||||||
}),
|
}),
|
||||||
tap((uisettings) => {
|
tap((uisettings) => {
|
||||||
this.assignSafeSettings(uisettings.settings)
|
this.assignSafeSettings(uisettings.settings)
|
||||||
environment.appTitle =
|
if (this.get(SETTINGS_KEYS.APP_TITLE)?.length) {
|
||||||
this.get(SETTINGS_KEYS.APP_TITLE) || DEFAULT_APP_TITLE
|
environment.appTitle = this.get(SETTINGS_KEYS.APP_TITLE)
|
||||||
|
}
|
||||||
this.maybeMigrateSettings()
|
this.maybeMigrateSettings()
|
||||||
// to update lang cookie
|
// to update lang cookie
|
||||||
if (this.settings['language']?.length)
|
if (this.settings['language']?.length)
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
const base_url = new URL(document.baseURI)
|
const base_url = new URL(document.baseURI)
|
||||||
|
|
||||||
export const DEFAULT_APP_TITLE = 'Paperless-ngx'
|
|
||||||
|
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: true,
|
production: true,
|
||||||
apiBaseUrl: document.baseURI + 'api/',
|
apiBaseUrl: document.baseURI + 'api/',
|
||||||
apiVersion: '10', // match src/paperless/settings.py
|
apiVersion: '10', // match src/paperless/settings.py
|
||||||
appTitle: DEFAULT_APP_TITLE,
|
appTitle: 'Paperless-ngx',
|
||||||
tag: 'prod',
|
tag: 'prod',
|
||||||
version: '3.0.2',
|
version: '3.0.0',
|
||||||
webSocketHost: window.location.host,
|
webSocketHost: window.location.host,
|
||||||
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
|
||||||
webSocketBaseUrl: base_url.pathname + 'ws/',
|
webSocketBaseUrl: base_url.pathname + 'ws/',
|
||||||
|
|||||||
@@ -2,13 +2,11 @@
|
|||||||
// `ng build --configuration production` replaces `environment.ts` with `environment.prod.ts`.
|
// `ng build --configuration production` replaces `environment.ts` with `environment.prod.ts`.
|
||||||
// The list of file replacements can be found in `angular.json`.
|
// The list of file replacements can be found in `angular.json`.
|
||||||
|
|
||||||
export const DEFAULT_APP_TITLE = 'Paperless-ngx'
|
|
||||||
|
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: false,
|
production: false,
|
||||||
apiBaseUrl: 'http://localhost:8000/api/',
|
apiBaseUrl: 'http://localhost:8000/api/',
|
||||||
apiVersion: '10',
|
apiVersion: '10',
|
||||||
appTitle: DEFAULT_APP_TITLE,
|
appTitle: 'Paperless-ngx',
|
||||||
tag: 'dev',
|
tag: 'dev',
|
||||||
version: 'DEVELOPMENT',
|
version: 'DEVELOPMENT',
|
||||||
webSocketHost: 'localhost:8000',
|
webSocketHost: 'localhost:8000',
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Wis</target>
|
<target state="translated">Wis</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Eenmalige migrasie van instellings na die databasis is suksesvol voltooi!</target>
|
<target state="translated">Eenmalige migrasie van instellings na die databasis is suksesvol voltooi!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Kan nie instellings na die databasis migreer nie, probeer handmatig bewaar.</target>
|
<target state="translated">Kan nie instellings na die databasis migreer nie, probeer handmatig bewaar.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">U kan die toer weer vanuit die instellingsblad begin.</target>
|
<target state="translated">U kan die toer weer vanuit die instellingsblad begin.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Clear</target>
|
<target state="needs-translation">Clear</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">الصلاحيات الافتراضية</target>
|
<target state="translated">الصلاحيات الافتراضية</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">تنظيف</target>
|
<target state="translated">تنظيف</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">تصفية حسب المالك</target>
|
<target state="translated">تصفية حسب المالك</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">تم بنجاح ترحيل الإعدادات مرة واحدة إلى قاعدة البيانات!</target>
|
<target state="translated">تم بنجاح ترحيل الإعدادات مرة واحدة إلى قاعدة البيانات!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">غير قادر على ترحيل الإعدادات إلى قاعدة البيانات، الرجاء محاولة الحفظ يدوياً.</target>
|
<target state="translated">غير قادر على ترحيل الإعدادات إلى قاعدة البيانات، الرجاء محاولة الحفظ يدوياً.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">يمكنك إعادة تشغيل الجولة من صفحة الإعدادات.</target>
|
<target state="translated">يمكنك إعادة تشغيل الجولة من صفحة الإعدادات.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Ачысціць</target>
|
<target state="translated">Ачысціць</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Паспяхова выканана аднаразовая міграцыя налад у базу!</target>
|
<target state="translated">Паспяхова выканана аднаразовая міграцыя налад у базу!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Немагчыма перанесці налады ў базу дадзеных, паспрабуйце захаваць уручную.</target>
|
<target state="translated">Немагчыма перанесці налады ў базу дадзеных, паспрабуйце захаваць уручную.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Права по подразбиране</target>
|
<target state="translated">Права по подразбиране</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Изчистване</target>
|
<target state="translated">Изчистване</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Филтър по собственик</target>
|
<target state="translated">Филтър по собственик</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Успешно завършена еднократна миграция на настройките към базата данни!</target>
|
<target state="translated">Успешно завършена еднократна миграция на настройките към базата данни!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Неуспешно мигриране на настройки в база данни, моля опитайте ръчно запазване.</target>
|
<target state="translated">Неуспешно мигриране на настройки в база данни, моля опитайте ръчно запазване.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Можете да рестартирате обиколката от страницата с настройки.</target>
|
<target state="translated">Можете да рестартирате обиколката от страницата с настройки.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Permisos per defecte</target>
|
<target state="translated">Permisos per defecte</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -1996,7 +1996,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">15</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Descarta-ho tot</target>
|
<target state="needs-translation">Dismiss all</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1616102757855967475" datatype="html">
|
<trans-unit id="1616102757855967475" datatype="html">
|
||||||
<source>All</source>
|
<source>All</source>
|
||||||
@@ -2076,7 +2076,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Cerca tasques</target>
|
<target state="needs-translation">Search tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6849725902312323996" datatype="html">
|
<trans-unit id="6849725902312323996" datatype="html">
|
||||||
<source>Reset filters</source>
|
<source>Reset filters</source>
|
||||||
@@ -2696,7 +2696,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">348</context>
|
<context context-type="linenumber">348</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Confirma Descarta Tot</target>
|
<target state="needs-translation">Confirm Dismiss All</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4157200209636243740" datatype="html">
|
<trans-unit id="4157200209636243740" datatype="html">
|
||||||
<source>Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">349</context>
|
<context context-type="linenumber">349</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated"/>
|
<target state="needs-translation">Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8149502458056418229" datatype="html">
|
<trans-unit id="8149502458056418229" datatype="html">
|
||||||
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
|
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Neteja</target>
|
<target state="translated">Neteja</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrar per propietari</target>
|
<target state="translated">Filtrar per propietari</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Completat correctament la migració de la configuració de la base de dades!</target>
|
<target state="translated">Completat correctament la migració de la configuració de la base de dades!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">No es pot migrar la configuració de la base de dades, prova manualment.</target>
|
<target state="translated">No es pot migrar la configuració de la base de dades, prova manualment.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Pots reiniciar el tour des de les opcions.</target>
|
<target state="translated">Pots reiniciar el tour des de les opcions.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -828,7 +828,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/logs/logs.component.html</context>
|
||||||
<context context-type="linenumber">18</context>
|
<context context-type="linenumber">18</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">řádků</target>
|
<target state="translated">řádky</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8838884664569764142" datatype="html">
|
<trans-unit id="8838884664569764142" datatype="html">
|
||||||
<source>Auto refresh</source>
|
<source>Auto refresh</source>
|
||||||
@@ -1352,7 +1352,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">248</context>
|
<context context-type="linenumber">248</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="3467966318201103991" datatype="html">
|
<trans-unit id="3467966318201103991" datatype="html">
|
||||||
<source>Uncheck fields to hide them on the document details page.</source>
|
<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="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">260</context>
|
<context context-type="linenumber">260</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8508424367627989968" datatype="html" approved="yes">
|
<trans-unit id="8508424367627989968" datatype="html" approved="yes">
|
||||||
<source>Bulk editing</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1787</context>
|
<context context-type="linenumber">1787</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Editor PDF</target>
|
<target state="translated">PDF editor</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1577733187050997705" datatype="html">
|
<trans-unit id="1577733187050997705" datatype="html">
|
||||||
<source>Default editing mode</source>
|
<source>Default editing mode</source>
|
||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Výchozí oprávnění</target>
|
<target state="translated">Výchozí oprávnění</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<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="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
||||||
<context context-type="linenumber">298</context>
|
<context context-type="linenumber">298</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Úlohy</target>
|
<target state="needs-translation">Tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8492095365580052820" datatype="html">
|
<trans-unit id="8492095365580052820" datatype="html">
|
||||||
<source>Tasks shows detailed information about document consumption and system tasks.</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">4</context>
|
<context context-type="linenumber">4</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="103921551219467537" datatype="html">
|
<trans-unit id="103921551219467537" datatype="html">
|
||||||
<source>Clear selection</source>
|
<source>Clear selection</source>
|
||||||
@@ -1996,7 +1996,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">15</context>
|
<context context-type="linenumber">15</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zahodit vše</target>
|
<target state="needs-translation">Dismiss all</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1616102757855967475" datatype="html" approved="yes">
|
<trans-unit id="1616102757855967475" datatype="html" approved="yes">
|
||||||
<source>All</source>
|
<source>All</source>
|
||||||
@@ -2056,7 +2056,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">215</context>
|
<context context-type="linenumber">215</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Všechny typy</target>
|
<target state="needs-translation">All types</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="131016739441837046" datatype="html">
|
<trans-unit id="131016739441837046" datatype="html">
|
||||||
<source>All sources</source>
|
<source>All sources</source>
|
||||||
@@ -2068,7 +2068,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">227</context>
|
<context context-type="linenumber">227</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Všechny zdroje</target>
|
<target state="needs-translation">All sources</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3570013039254960445" datatype="html">
|
<trans-unit id="3570013039254960445" datatype="html">
|
||||||
<source>Search tasks</source>
|
<source>Search tasks</source>
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">126</context>
|
<context context-type="linenumber">126</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8953033926734869941" datatype="html" approved="yes">
|
<trans-unit id="8953033926734869941" datatype="html" approved="yes">
|
||||||
<source>Name</source>
|
<source>Name</source>
|
||||||
@@ -2444,7 +2444,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">289</context>
|
<context context-type="linenumber">289</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2525230676386818985" datatype="html">
|
<trans-unit id="2525230676386818985" datatype="html">
|
||||||
<source>Result</source>
|
<source>Result</source>
|
||||||
@@ -2460,7 +2460,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">55</context>
|
<context context-type="linenumber">55</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Vyžaduje pozornost</target>
|
<target state="needs-translation">Needs attention</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3307214558906712688" datatype="html">
|
<trans-unit id="3307214558906712688" datatype="html">
|
||||||
<source>In progress</source>
|
<source>In progress</source>
|
||||||
@@ -2468,7 +2468,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">56</context>
|
<context context-type="linenumber">56</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Probíhá</target>
|
<target state="needs-translation">In progress</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1371178633976505412" datatype="html">
|
<trans-unit id="1371178633976505412" datatype="html">
|
||||||
<source>Recently completed</source>
|
<source>Recently completed</source>
|
||||||
@@ -2476,7 +2476,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">57</context>
|
<context context-type="linenumber">57</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nedávno dokončené</target>
|
<target state="needs-translation">Recently completed</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2936452645673957909" datatype="html">
|
<trans-unit id="2936452645673957909" datatype="html">
|
||||||
<source>Consume File</source>
|
<source>Consume File</source>
|
||||||
@@ -2484,7 +2484,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">66</context>
|
<context context-type="linenumber">66</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zpracování souboru</target>
|
<target state="needs-translation">Consume File</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5622386857946132209" datatype="html">
|
<trans-unit id="5622386857946132209" datatype="html">
|
||||||
<source>Train Classifier</source>
|
<source>Train Classifier</source>
|
||||||
@@ -2492,7 +2492,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">70</context>
|
<context context-type="linenumber">70</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Trénování klasifikátoru</target>
|
<target state="needs-translation">Train Classifier</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="776309955507105337" datatype="html">
|
<trans-unit id="776309955507105337" datatype="html">
|
||||||
<source>Sanity Check</source>
|
<source>Sanity Check</source>
|
||||||
@@ -2500,7 +2500,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">74</context>
|
<context context-type="linenumber">74</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Kontrola zdraví</target>
|
<target state="needs-translation">Sanity Check</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7502272564743467653" datatype="html">
|
<trans-unit id="7502272564743467653" datatype="html">
|
||||||
<source>Mail Fetch</source>
|
<source>Mail Fetch</source>
|
||||||
@@ -2520,7 +2520,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">77</context>
|
<context context-type="linenumber">77</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Index LLM</target>
|
<target state="needs-translation">LLM Index</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6402092370576716734" datatype="html">
|
<trans-unit id="6402092370576716734" datatype="html">
|
||||||
<source>Empty Trash</source>
|
<source>Empty Trash</source>
|
||||||
@@ -2528,7 +2528,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">80</context>
|
<context context-type="linenumber">80</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Vyprázdnění koše</target>
|
<target state="needs-translation">Empty Trash</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4173754487295857311" datatype="html">
|
<trans-unit id="4173754487295857311" datatype="html">
|
||||||
<source>Check Workflows</source>
|
<source>Check Workflows</source>
|
||||||
@@ -2536,7 +2536,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">84</context>
|
<context context-type="linenumber">84</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Kontrola postupů</target>
|
<target state="needs-translation">Check Workflows</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2065831805515896240" datatype="html">
|
<trans-unit id="2065831805515896240" datatype="html">
|
||||||
<source>Bulk Update</source>
|
<source>Bulk Update</source>
|
||||||
@@ -2544,7 +2544,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">88</context>
|
<context context-type="linenumber">88</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Hromadná aktualizace</target>
|
<target state="needs-translation">Bulk Update</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5062348912423871240" datatype="html">
|
<trans-unit id="5062348912423871240" datatype="html">
|
||||||
<source>Reprocess Document</source>
|
<source>Reprocess Document</source>
|
||||||
@@ -2552,7 +2552,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">92</context>
|
<context context-type="linenumber">92</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Opětovné zpracování dokumentu</target>
|
<target state="needs-translation">Reprocess Document</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6903696804811148799" datatype="html">
|
<trans-unit id="6903696804811148799" datatype="html">
|
||||||
<source>Build Share Link</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Sestavení odkazu ke sdílení</target>
|
<target state="needs-translation">Build Share Link</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6581973658756561124" datatype="html">
|
<trans-unit id="6581973658756561124" datatype="html">
|
||||||
<source>Bulk Delete</source>
|
<source>Bulk Delete</source>
|
||||||
@@ -2568,7 +2568,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">100</context>
|
<context context-type="linenumber">100</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Hromadné smazání</target>
|
<target state="needs-translation">Bulk Delete</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="9172233176401579786" datatype="html">
|
<trans-unit id="9172233176401579786" datatype="html">
|
||||||
<source>Scheduled</source>
|
<source>Scheduled</source>
|
||||||
@@ -2612,7 +2612,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">119</context>
|
<context context-type="linenumber">119</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zpracování složky</target>
|
<target state="needs-translation">Folder Consume</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1456901843819961615" datatype="html">
|
<trans-unit id="1456901843819961615" datatype="html">
|
||||||
<source>Email Consume</source>
|
<source>Email Consume</source>
|
||||||
@@ -2620,7 +2620,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">123</context>
|
<context context-type="linenumber">123</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zpracování e-mailu</target>
|
<target state="needs-translation">Email Consume</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="29832309535656200" datatype="html">
|
<trans-unit id="29832309535656200" datatype="html">
|
||||||
<source>System</source>
|
<source>System</source>
|
||||||
@@ -2628,7 +2628,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">125</context>
|
<context context-type="linenumber">125</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Systém</target>
|
<target state="needs-translation">System</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2233560223291461480" datatype="html">
|
<trans-unit id="2233560223291461480" datatype="html">
|
||||||
<source>Manual</source>
|
<source>Manual</source>
|
||||||
@@ -2636,7 +2636,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">126</context>
|
<context context-type="linenumber">126</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Ruční</target>
|
<target state="needs-translation">Manual</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5404910960991552159" datatype="html">
|
<trans-unit id="5404910960991552159" datatype="html">
|
||||||
<source>Dismiss selected</source>
|
<source>Dismiss selected</source>
|
||||||
@@ -2652,7 +2652,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">240</context>
|
<context context-type="linenumber">240</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zahodit viditelné</target>
|
<target state="needs-translation">Dismiss visible</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3169751690815214293" datatype="html">
|
<trans-unit id="3169751690815214293" datatype="html">
|
||||||
<source>Confirm Dismiss</source>
|
<source>Confirm Dismiss</source>
|
||||||
@@ -2696,7 +2696,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">348</context>
|
<context context-type="linenumber">348</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Potvrdit zahození všech</target>
|
<target state="needs-translation">Confirm Dismiss All</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4157200209636243740" datatype="html">
|
<trans-unit id="4157200209636243740" datatype="html">
|
||||||
<source>Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">349</context>
|
<context context-type="linenumber">349</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8149502458056418229" datatype="html">
|
<trans-unit id="8149502458056418229" datatype="html">
|
||||||
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">408</context>
|
<context context-type="linenumber">408</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8760066891202884337" datatype="html">
|
<trans-unit id="8760066891202884337" datatype="html">
|
||||||
<source>Duplicate of document #<x id="PH" equiv-text="duplicateOf"/></source>
|
<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="sourcefile">src/app/components/app-frame/app-frame.component.html</context>
|
||||||
<context context-type="linenumber">183</context>
|
<context context-type="linenumber">183</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Atributy</target>
|
<target state="needs-translation">Attributes</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7437910965833684826" datatype="html" approved="yes">
|
<trans-unit id="7437910965833684826" datatype="html" approved="yes">
|
||||||
<source>Correspondents</source>
|
<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="sourcefile">src/app/components/manage/document-attributes/document-attributes.component.ts</context>
|
||||||
<context context-type="linenumber">105</context>
|
<context context-type="linenumber">105</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Typy dokumentů</target>
|
<target state="needs-translation">Document types</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8835528846812581148" datatype="html">
|
<trans-unit id="8835528846812581148" datatype="html">
|
||||||
<source>Storage paths</source>
|
<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="sourcefile">src/app/components/manage/document-attributes/document-attributes.component.ts</context>
|
||||||
<context context-type="linenumber">115</context>
|
<context context-type="linenumber">115</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Cesty úložiště</target>
|
<target state="needs-translation">Storage paths</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="9149498548977462220" datatype="html">
|
<trans-unit id="9149498548977462220" datatype="html">
|
||||||
<source>Custom fields</source>
|
<source>Custom fields</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Smazat</target>
|
<target state="final">Smazat</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">26</context>
|
<context context-type="linenumber">26</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="1808271538028523977" datatype="html">
|
<trans-unit id="1808271538028523977" datatype="html">
|
||||||
<source>Superuser</source>
|
<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="sourcefile">src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">30</context>
|
<context context-type="linenumber">30</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8900662509426586619" datatype="html">
|
<trans-unit id="8900662509426586619" datatype="html">
|
||||||
<source>Two-factor Authentication</source>
|
<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="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts</context>
|
||||||
<context context-type="linenumber">271</context>
|
<context context-type="linenumber">271</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="1507843981661822403" datatype="html">
|
<trans-unit id="1507843981661822403" datatype="html">
|
||||||
<source>Does not have document types</source>
|
<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="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
|
||||||
<context context-type="linenumber">116</context>
|
<context context-type="linenumber">116</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="1070687661569746428" datatype="html">
|
<trans-unit id="1070687661569746428" datatype="html">
|
||||||
<source>Create share link bundle</source>
|
<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="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.ts</context>
|
||||||
<context context-type="linenumber">61</context>
|
<context context-type="linenumber">61</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2362798555008696742" datatype="html">
|
<trans-unit id="2362798555008696742" datatype="html">
|
||||||
<source>Create link</source>
|
<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="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 context-type="linenumber">21</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="5194711788228004418" datatype="html">
|
<trans-unit id="5194711788228004418" datatype="html">
|
||||||
<source>No share link bundles currently exist.</source>
|
<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="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 context-type="linenumber">25</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2841249062294860035" datatype="html">
|
<trans-unit id="2841249062294860035" datatype="html">
|
||||||
<source>Built:</source>
|
<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="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 context-type="linenumber">42</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Balíčky sdílení odkazů</target>
|
<target state="needs-translation">Share link bundles</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1541995860059283227" datatype="html">
|
<trans-unit id="1541995860059283227" datatype="html">
|
||||||
<source>Failed to load share link bundles.</source>
|
<source>Failed to load share link bundles.</source>
|
||||||
@@ -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="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 context-type="linenumber">65</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="5417797597565486403" datatype="html">
|
<trans-unit id="5417797597565486403" datatype="html">
|
||||||
<source>Error retrieving share link bundles.</source>
|
<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="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||||
<context context-type="linenumber">147</context>
|
<context context-type="linenumber">147</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nedávná aktivita úloh <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="small text-muted fw-light">"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> days)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
|
<target state="needs-translation">Recent Task Activity <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="small text-muted fw-light">"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> days)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3448462145758383019" datatype="html">
|
<trans-unit id="3448462145758383019" datatype="html">
|
||||||
<source>Total</source>
|
<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="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||||
<context context-type="linenumber">152</context>
|
<context context-type="linenumber">152</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Celkem</target>
|
<target state="needs-translation">Total</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3521084103654700903" datatype="html">
|
<trans-unit id="3521084103654700903" datatype="html">
|
||||||
<source>Successful</source>
|
<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="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||||
<context context-type="linenumber">156</context>
|
<context context-type="linenumber">156</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Úspěšných</target>
|
<target state="needs-translation">Successful</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7256395947475975935" datatype="html">
|
<trans-unit id="7256395947475975935" datatype="html">
|
||||||
<source>Failed</source>
|
<source>Failed</source>
|
||||||
@@ -7970,7 +7954,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/share-link-bundle.ts</context>
|
<context context-type="sourcefile">src/app/data/share-link-bundle.ts</context>
|
||||||
<context context-type="linenumber">44</context>
|
<context context-type="linenumber">44</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Selhané</target>
|
<target state="needs-translation">Failed</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4416413576346763682" datatype="html">
|
<trans-unit id="4416413576346763682" datatype="html">
|
||||||
<source>Pending</source>
|
<source>Pending</source>
|
||||||
@@ -7982,7 +7966,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/share-link-bundle.ts</context>
|
<context context-type="sourcefile">src/app/data/share-link-bundle.ts</context>
|
||||||
<context context-type="linenumber">41</context>
|
<context context-type="linenumber">41</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Čekající</target>
|
<target state="needs-translation">Pending</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2000433102211963975" datatype="html">
|
<trans-unit id="2000433102211963975" datatype="html">
|
||||||
<source>No recent tasks</source>
|
<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="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||||
<context context-type="linenumber">169</context>
|
<context context-type="linenumber">169</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Žádné nedávné úlohy</target>
|
<target state="needs-translation">No recent tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2041675390931385838" datatype="html">
|
<trans-unit id="2041675390931385838" datatype="html">
|
||||||
<source>Health</source>
|
<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="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||||
<context context-type="linenumber">283</context>
|
<context context-type="linenumber">283</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Index AI</target>
|
<target state="needs-translation">AI Index</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6732151329960766506" datatype="html">
|
<trans-unit id="6732151329960766506" datatype="html">
|
||||||
<source>Copy Raw Error</source>
|
<source>Copy Raw Error</source>
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrovat podle vlastníka</target>
|
<target state="translated">Filtrovat podle vlastníka</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">318</context>
|
<context context-type="linenumber">318</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Původní kontrolní součet SHA256</target>
|
<target state="needs-translation">Original SHA256 checksum</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5888243105821763422" datatype="html" approved="yes">
|
<trans-unit id="5888243105821763422" datatype="html" approved="yes">
|
||||||
<source>Original file size</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">331</context>
|
<context context-type="linenumber">331</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Archivní kontrolní součet SHA256</target>
|
<target state="needs-translation">Archive SHA256 checksum</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6033581412811562084" datatype="html" approved="yes">
|
<trans-unit id="6033581412811562084" datatype="html" approved="yes">
|
||||||
<source>Archive file size</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">368,371</context>
|
<context context-type="linenumber">368,371</context>
|
||||||
</context-group>
|
</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="<span class="badge text-bg-secondary ms-1">"/><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="<span class="badge text-bg-secondary ms-1">"/><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>
|
||||||
<trans-unit id="186236568870281953" datatype="html">
|
<trans-unit id="186236568870281953" datatype="html">
|
||||||
<source>History</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">4</context>
|
<context context-type="linenumber">4</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Verze</target>
|
<target state="needs-translation">Versions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4077520913910941990" datatype="html">
|
<trans-unit id="4077520913910941990" datatype="html">
|
||||||
<source>Label</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">10</context>
|
<context context-type="linenumber">10</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Označení</target>
|
<target state="needs-translation">Label</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3915966149686975421" datatype="html">
|
<trans-unit id="3915966149686975421" datatype="html">
|
||||||
<source>Optional</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">17</context>
|
<context context-type="linenumber">17</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Volitelné</target>
|
<target state="needs-translation">Optional</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="787787001194154763" datatype="html">
|
<trans-unit id="787787001194154763" datatype="html">
|
||||||
<source>Add new version</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">32</context>
|
<context context-type="linenumber">32</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Přidat novou verzi</target>
|
<target state="needs-translation">Add new version</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3119565892291077820" datatype="html">
|
<trans-unit id="3119565892291077820" datatype="html">
|
||||||
<source>Uploading version...</source>
|
<source>Uploading version...</source>
|
||||||
@@ -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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">50</context>
|
<context context-type="linenumber">50</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nepodařilo se nahrát verzi.</target>
|
<target state="needs-translation">Version upload failed.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6328986243040954523" datatype="html">
|
<trans-unit id="6328986243040954523" datatype="html">
|
||||||
<source>Version label</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">85</context>
|
<context context-type="linenumber">85</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Označení verze</target>
|
<target state="needs-translation">Version label</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2724055831234181057" datatype="html">
|
<trans-unit id="2724055831234181057" datatype="html">
|
||||||
<source>Version</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.html</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Verze</target>
|
<target state="needs-translation">Version</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2491751767883178298" datatype="html">
|
<trans-unit id="2491751767883178298" datatype="html">
|
||||||
<source>Delete this version?</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
|
||||||
<context context-type="linenumber">189</context>
|
<context context-type="linenumber">189</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="3567158019134759286" datatype="html">
|
<trans-unit id="3567158019134759286" datatype="html">
|
||||||
<source>Uploading new version. Processing will happen in the background.</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
|
||||||
<context context-type="linenumber">271</context>
|
<context context-type="linenumber">271</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nahrání selhalo.</target>
|
<target state="needs-translation">Upload failed.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8350861980330256599" datatype="html">
|
<trans-unit id="8350861980330256599" datatype="html">
|
||||||
<source>Error uploading new version</source>
|
<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="sourcefile">src/app/components/document-list/bulk-editor/bulk-editor.component.html</context>
|
||||||
<context context-type="linenumber">113</context>
|
<context context-type="linenumber">113</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="1015374532025907183" datatype="html">
|
<trans-unit id="1015374532025907183" datatype="html">
|
||||||
<source>Include:</source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">95,96</context>
|
<context context-type="linenumber">95,96</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2030261243264601523" datatype="html">
|
<trans-unit id="2030261243264601523" datatype="html">
|
||||||
<source>Added: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">96,97</context>
|
<context context-type="linenumber">96,97</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4235671847487610290" datatype="html">
|
<trans-unit id="4235671847487610290" datatype="html">
|
||||||
<source>Modified: <x id="INTERPOLATION" equiv-text="{{ document().modified | customDate }}"/></source>
|
<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="sourcefile">src/app/components/document-list/document-list.component.ts</context>
|
||||||
<context context-type="linenumber">497</context>
|
<context context-type="linenumber">497</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="739880801667335279" datatype="html">
|
<trans-unit id="739880801667335279" datatype="html">
|
||||||
<source>Dates</source>
|
<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="sourcefile">src/app/components/manage/saved-views/saved-views.component.html</context>
|
||||||
<context context-type="linenumber">35</context>
|
<context context-type="linenumber">35</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated"><x id="START_TAG_I_BS" ctype="x-i_bs" equiv-text="bs class="me-1" name="person-fill-lock">"/><x id="CLOSE_TAG_I_BS" ctype="x-i_bs" equiv-text="Oprávnění<"/>Oprávnění</target>
|
<target state="needs-translation"><x id="START_TAG_I_BS" ctype="x-i_bs" equiv-text="bs class="me-1" name="person-fill-lock">"/><x id="CLOSE_TAG_I_BS" ctype="x-i_bs" equiv-text="Permissions<"/>Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6338800642797811873" datatype="html">
|
<trans-unit id="6338800642797811873" datatype="html">
|
||||||
<source>Documents page size</source>
|
<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="sourcefile">src/app/components/manage/saved-views/saved-views.component.html</context>
|
||||||
<context context-type="linenumber">62</context>
|
<context context-type="linenumber">62</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="7877440816920439876" datatype="html" approved="yes">
|
<trans-unit id="7877440816920439876" datatype="html" approved="yes">
|
||||||
<source>No saved views defined.</source>
|
<source>No saved views defined.</source>
|
||||||
@@ -11864,7 +11860,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">54</context>
|
<context context-type="linenumber">54</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nastavení AI</target>
|
<target state="needs-translation">AI Settings</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1313137480169642057" datatype="html">
|
<trans-unit id="1313137480169642057" datatype="html">
|
||||||
<source>Output Type</source>
|
<source>Output Type</source>
|
||||||
@@ -11896,7 +11892,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">120</context>
|
<context context-type="linenumber">120</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Generování archivních souborů</target>
|
<target state="needs-translation">Archive File Generation</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1115402553541327390" datatype="html">
|
<trans-unit id="1115402553541327390" datatype="html">
|
||||||
<source>Image DPI</source>
|
<source>Image DPI</source>
|
||||||
@@ -12072,7 +12068,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">277</context>
|
<context context-type="linenumber">277</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="7011909364081812031" datatype="html">
|
<trans-unit id="7011909364081812031" datatype="html">
|
||||||
<source>AI Enabled</source>
|
<source>AI Enabled</source>
|
||||||
@@ -12080,7 +12076,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">284</context>
|
<context context-type="linenumber">284</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">AI povoleno</target>
|
<target state="needs-translation">AI Enabled</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8028880048909383956" datatype="html">
|
<trans-unit id="8028880048909383956" datatype="html">
|
||||||
<source>Consider privacy implications when enabling AI features, especially if using a remote model.</source>
|
<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="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">288</context>
|
<context context-type="linenumber">288</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8131374115579345652" datatype="html">
|
<trans-unit id="8131374115579345652" datatype="html">
|
||||||
<source>LLM Embedding Backend</source>
|
<source>LLM Embedding Backend</source>
|
||||||
@@ -12096,7 +12092,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">292</context>
|
<context context-type="linenumber">292</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Backend pro vkládání LLM</target>
|
<target state="needs-translation">LLM Embedding Backend</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6647708571891295756" datatype="html">
|
<trans-unit id="6647708571891295756" datatype="html">
|
||||||
<source>LLM Embedding Model</source>
|
<source>LLM Embedding Model</source>
|
||||||
@@ -12104,7 +12100,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">300</context>
|
<context context-type="linenumber">300</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Model vkládání LLM</target>
|
<target state="needs-translation">LLM Embedding Model</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3554114880473286122" datatype="html">
|
<trans-unit id="3554114880473286122" datatype="html">
|
||||||
<source>LLM Embedding Endpoint</source>
|
<source>LLM Embedding Endpoint</source>
|
||||||
@@ -12112,7 +12108,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">307</context>
|
<context context-type="linenumber">307</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Koncový bod vkládání LLM</target>
|
<target state="needs-translation">LLM Embedding Endpoint</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1044242175651289991" datatype="html">
|
<trans-unit id="1044242175651289991" datatype="html">
|
||||||
<source>LLM Embedding Chunk Size</source>
|
<source>LLM Embedding Chunk Size</source>
|
||||||
@@ -12120,7 +12116,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">314</context>
|
<context context-type="linenumber">314</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="7218245223139363113" datatype="html">
|
<trans-unit id="7218245223139363113" datatype="html">
|
||||||
<source>LLM Context Size</source>
|
<source>LLM Context Size</source>
|
||||||
@@ -12128,7 +12124,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">321</context>
|
<context context-type="linenumber">321</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Velikost kontextu LLM</target>
|
<target state="needs-translation">LLM Context Size</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4234495692726214397" datatype="html">
|
<trans-unit id="4234495692726214397" datatype="html">
|
||||||
<source>LLM Backend</source>
|
<source>LLM Backend</source>
|
||||||
@@ -12136,7 +12132,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">328</context>
|
<context context-type="linenumber">328</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Backend LLM</target>
|
<target state="needs-translation">LLM Backend</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7935234833834000002" datatype="html">
|
<trans-unit id="7935234833834000002" datatype="html">
|
||||||
<source>LLM Model</source>
|
<source>LLM Model</source>
|
||||||
@@ -12144,7 +12140,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">336</context>
|
<context context-type="linenumber">336</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Model LLM</target>
|
<target state="needs-translation">LLM Model</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1980550530387803165" datatype="html">
|
<trans-unit id="1980550530387803165" datatype="html">
|
||||||
<source>LLM API Key</source>
|
<source>LLM API Key</source>
|
||||||
@@ -12152,7 +12148,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">343</context>
|
<context context-type="linenumber">343</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Klíč API LLM</target>
|
<target state="needs-translation">LLM API Key</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6126617860376156501" datatype="html">
|
<trans-unit id="6126617860376156501" datatype="html">
|
||||||
<source>LLM Endpoint</source>
|
<source>LLM Endpoint</source>
|
||||||
@@ -12160,7 +12156,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">350</context>
|
<context context-type="linenumber">350</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Koncový bod LLM</target>
|
<target state="needs-translation">LLM Endpoint</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6572826277249350975" datatype="html">
|
<trans-unit id="6572826277249350975" datatype="html">
|
||||||
<source>LLM Output Language</source>
|
<source>LLM Output Language</source>
|
||||||
@@ -12168,7 +12164,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">357</context>
|
<context context-type="linenumber">357</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Výstupní jazyk LLM</target>
|
<target state="needs-translation">LLM Output Language</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3284403507172415792" datatype="html">
|
<trans-unit id="3284403507172415792" datatype="html">
|
||||||
<source>Language to use for generated AI suggestions. When unset, AI suggestions use the user's display language if explicitly set.</source>
|
<source>Language to use for generated AI suggestions. When unset, AI suggestions use the user'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="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">361</context>
|
<context context-type="linenumber">361</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4493921125434706859" datatype="html">
|
<trans-unit id="4493921125434706859" datatype="html">
|
||||||
<source>LLM Request Timeout</source>
|
<source>LLM Request Timeout</source>
|
||||||
@@ -12184,7 +12180,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">365</context>
|
<context context-type="linenumber">365</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Čawsový limit žádosti LLM</target>
|
<target state="needs-translation">LLM Request Timeout</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="483994032066441287" datatype="html">
|
<trans-unit id="483994032066441287" datatype="html">
|
||||||
<source>Timeout in seconds for LLM requests.</source>
|
<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="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">369</context>
|
<context context-type="linenumber">369</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="9155387182259025015" datatype="html">
|
<trans-unit id="9155387182259025015" datatype="html">
|
||||||
<source>Processing</source>
|
<source>Processing</source>
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Úspěšně dokončena jednorázová migrace nastavení do databáze!</target>
|
<target state="translated">Úspěšně dokončena jednorázová migrace nastavení do databáze!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nelze přesunout nastavení do databáze, zkuste ho uložit ručně.</target>
|
<target state="translated">Nelze přesunout nastavení do databáze, zkuste ho uložit ručně.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Prohlídku můžete znovu spustit ze stránky s nastavením.</target>
|
<target state="translated">Prohlídku můžete znovu spustit ze stránky s nastavením.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Ryd</target>
|
<target state="translated">Ryd</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Standardberechtigungen</target>
|
<target state="translated">Standardberechtigungen</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zurücksetzen</target>
|
<target state="translated">Zurücksetzen</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nach Eigentümer filtern</target>
|
<target state="translated">Nach Eigentümer filtern</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Einmalige Migration der Einstellungen in die Datenbank erfolgreich abgeschlossen!</target>
|
<target state="translated">Einmalige Migration der Einstellungen in die Datenbank erfolgreich abgeschlossen!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Einstellungen konnten nicht in die Datenbank migriert werden. Bitte versuchen Sie, manuell zu speichern.</target>
|
<target state="translated">Einstellungen konnten nicht in die Datenbank migriert werden. Bitte versuchen Sie, manuell zu speichern.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Sie können die Tour in den Einstellungen erneut starten.</target>
|
<target state="translated">Sie können die Tour in den Einstellungen erneut starten.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Standardberechtigungen</target>
|
<target state="final">Standardberechtigungen</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" datatype="html" approved="yes">
|
||||||
<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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
|
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Zurücksetzen</target>
|
<target state="final">Zurücksetzen</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html" approved="yes">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Nach Eigentümer filtern</target>
|
<target state="final">Nach Eigentümer filtern</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">8</context>
|
<context context-type="linenumber">8</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2784168796433474565" datatype="html" approved="yes">
|
<trans-unit id="2784168796433474565" datatype="html" approved="yes">
|
||||||
<source>Filter by tag</source>
|
<source>Filter by tag</source>
|
||||||
@@ -12082,13 +12078,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">KI aktiviert</target>
|
<target state="final">KI aktiviert</target>
|
||||||
</trans-unit>
|
</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>
|
<source>Consider privacy implications when enabling AI features, especially if using a remote model.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">288</context>
|
<context context-type="linenumber">288</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8131374115579345652" datatype="html">
|
<trans-unit id="8131374115579345652" datatype="html">
|
||||||
<source>LLM Embedding Backend</source>
|
<source>LLM Embedding Backend</source>
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">Einmalige Migration der Einstellungen in die Datenbank erfolgreich abgeschlossen!</target>
|
<target state="final">Einmalige Migration der Einstellungen in die Datenbank erfolgreich abgeschlossen!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">Einstellungen konnten nicht in die Datenbank migriert werden. Bitte versuchen Sie, manuell zu speichern.</target>
|
<target state="final">Einstellungen konnten nicht in die Datenbank migriert werden. Bitte versuchen Sie, manuell zu speichern.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">Sie können die Tour in den Einstellungen erneut starten.</target>
|
<target state="final">Sie können die Tour in den Einstellungen erneut starten.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Προεπιλεγμένα δικαιώματα</target>
|
<target state="translated">Προεπιλεγμένα δικαιώματα</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Καθαρισμός</target>
|
<target state="translated">Καθαρισμός</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ολοκληρώθηκε με επιτυχία η μετεγκατάσταση των ρυθμίσεων στη βάση δεδομένων!</target>
|
<target state="translated">Ολοκληρώθηκε με επιτυχία η μετεγκατάσταση των ρυθμίσεων στη βάση δεδομένων!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Δεν είναι δυνατή η μετεγκατάσταση των ρυθμίσεων στη βάση δεδομένων, παρακαλώ δοκιμάστε χειροκίνητα.</target>
|
<target state="translated">Δεν είναι δυνατή η μετεγκατάσταση των ρυθμίσεων στη βάση δεδομένων, παρακαλώ δοκιμάστε χειροκίνητα.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Μπορείτε να επανεκκινήσετε την περιήγηση από τη σελίδα ρυθμίσεων.</target>
|
<target state="translated">Μπορείτε να επανεκκινήσετε την περιήγηση από τη σελίδα ρυθμίσεων.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Permisos por defecto</target>
|
<target state="translated">Permisos por defecto</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Limpiar</target>
|
<target state="final">Limpiar</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrar por propietario</target>
|
<target state="translated">Filtrar por propietario</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">¡Se completó con éxito la migración única de la configuración a la base de datos!</target>
|
<target state="translated">¡Se completó con éxito la migración única de la configuración a la base de datos!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">No se puede migrar la configuración a la base de datos, por favor intente guardarla manualmente.</target>
|
<target state="translated">No se puede migrar la configuración a la base de datos, por favor intente guardarla manualmente.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Puede reiniciar la visita desde la página de configuración.</target>
|
<target state="translated">Puede reiniciar la visita desde la página de configuración.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Clear</target>
|
<target state="needs-translation">Clear</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">مجوزهای پیش فرض</target>
|
<target state="translated">مجوزهای پیش فرض</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">پاک کردن</target>
|
<target state="translated">پاک کردن</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">فیلتر توسط مالک</target>
|
<target state="translated">فیلتر توسط مالک</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">با موفقیت مهاجرت یک بار تنظیمات به پایگاه داده را تکمیل کرد!</target>
|
<target state="translated">با موفقیت مهاجرت یک بار تنظیمات به پایگاه داده را تکمیل کرد!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">برای انتقال تنظیمات به پایگاه داده امکان پذیر نیست ، لطفاً به صورت دستی ذخیره کنید.</target>
|
<target state="translated">برای انتقال تنظیمات به پایگاه داده امکان پذیر نیست ، لطفاً به صورت دستی ذخیره کنید.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">می توانید تور را از صفحه تنظیمات مجدداً راه اندازی کنید.</target>
|
<target state="translated">می توانید تور را از صفحه تنظیمات مجدداً راه اندازی کنید.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Oletusoikeudet</target>
|
<target state="translated">Oletusoikeudet</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Tyhjennä</target>
|
<target state="translated">Tyhjennä</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Kertaluontoinen asetusten migratointi tietokantaan suoritettu onnistuneesti!</target>
|
<target state="translated">Kertaluontoinen asetusten migratointi tietokantaan suoritettu onnistuneesti!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Asetuksia ei saatu migratoitua tietokantaan. Yritä tallennusta manuaalisesti.</target>
|
<target state="translated">Asetuksia ei saatu migratoitua tietokantaan. Yritä tallennusta manuaalisesti.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Voit käynnistää opastuksen uudelleen asetussivulta.</target>
|
<target state="translated">Voit käynnistää opastuksen uudelleen asetussivulta.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -432,7 +432,7 @@
|
|||||||
<context context-type="sourcefile">src/app/app.component.ts</context>
|
<context context-type="sourcefile">src/app/app.component.ts</context>
|
||||||
<context context-type="linenumber">171</context>
|
<context context-type="linenumber">171</context>
|
||||||
</context-group>
|
</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 > 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 > Vues enregistrées une fois que vous en avez créées.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="9075755296812854717" datatype="html" approved="yes">
|
<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>
|
<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="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">185</context>
|
<context context-type="linenumber">185</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8939587804990976924" datatype="html" approved="yes">
|
<trans-unit id="8939587804990976924" datatype="html" approved="yes">
|
||||||
<source>Items per page</source>
|
<source>Items per page</source>
|
||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Droits d'accès par défaut</target>
|
<target state="final">Droits d'accès par défaut</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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 s’appliquent à ce compte utilisateur pour les objets (étiquettes, règles de courriel, etc. à l’exception des documents) créés via l’interface web. </target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
|
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -2484,7 +2484,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">66</context>
|
<context context-type="linenumber">66</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Fichier à consommer</target>
|
<target state="needs-translation">Consume File</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5622386857946132209" datatype="html">
|
<trans-unit id="5622386857946132209" datatype="html">
|
||||||
<source>Train Classifier</source>
|
<source>Train Classifier</source>
|
||||||
@@ -2492,7 +2492,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">70</context>
|
<context context-type="linenumber">70</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Entrainer le classificateur</target>
|
<target state="needs-translation">Train Classifier</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="776309955507105337" datatype="html">
|
<trans-unit id="776309955507105337" datatype="html">
|
||||||
<source>Sanity Check</source>
|
<source>Sanity Check</source>
|
||||||
@@ -2520,7 +2520,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">77</context>
|
<context context-type="linenumber">77</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Index LLM</target>
|
<target state="needs-translation">LLM Index</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6402092370576716734" datatype="html">
|
<trans-unit id="6402092370576716734" datatype="html">
|
||||||
<source>Empty Trash</source>
|
<source>Empty Trash</source>
|
||||||
@@ -2528,7 +2528,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">80</context>
|
<context context-type="linenumber">80</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Vider la corbeille</target>
|
<target state="translated">Vider la poubelle</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4173754487295857311" datatype="html">
|
<trans-unit id="4173754487295857311" datatype="html">
|
||||||
<source>Check Workflows</source>
|
<source>Check Workflows</source>
|
||||||
@@ -2536,7 +2536,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">84</context>
|
<context context-type="linenumber">84</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Processus de contrôle</target>
|
<target state="needs-translation">Check Workflows</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2065831805515896240" datatype="html">
|
<trans-unit id="2065831805515896240" datatype="html">
|
||||||
<source>Bulk Update</source>
|
<source>Bulk Update</source>
|
||||||
@@ -2560,7 +2560,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Créer un lien de partage</target>
|
<target state="needs-translation">Build Share Link</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6581973658756561124" datatype="html">
|
<trans-unit id="6581973658756561124" datatype="html">
|
||||||
<source>Bulk Delete</source>
|
<source>Bulk Delete</source>
|
||||||
@@ -2696,7 +2696,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">348</context>
|
<context context-type="linenumber">348</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Confirmer « Tout ignorer »</target>
|
<target state="needs-translation">Confirm Dismiss All</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="4157200209636243740" datatype="html">
|
<trans-unit id="4157200209636243740" datatype="html">
|
||||||
<source>Dismiss all <x id="PH" equiv-text="this.totalTasks()"/> tasks?</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">349</context>
|
<context context-type="linenumber">349</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8149502458056418229" datatype="html">
|
<trans-unit id="8149502458056418229" datatype="html">
|
||||||
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
|
<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="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">452</context>
|
<context context-type="linenumber">452</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="3418677553313974490" datatype="html" approved="yes">
|
<trans-unit id="3418677553313974490" datatype="html" approved="yes">
|
||||||
<source>Trash</source>
|
<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="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
|
||||||
<context context-type="linenumber">89</context>
|
<context context-type="linenumber">89</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Supprimer la sélection</target>
|
<target state="translated">Effacer le(s) sélectionné(s)</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="8597030111956627342" datatype="html" approved="yes">
|
<trans-unit id="8597030111956627342" datatype="html" approved="yes">
|
||||||
<source>Empty trash</source>
|
<source>Empty trash</source>
|
||||||
@@ -2984,7 +2984,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
|
||||||
<context context-type="linenumber">78</context>
|
<context context-type="linenumber">78</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="5641451190833696892" datatype="html" approved="yes">
|
<trans-unit id="5641451190833696892" datatype="html" approved="yes">
|
||||||
<source>This operation cannot be undone.</source>
|
<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="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
|
||||||
<context context-type="linenumber">111</context>
|
<context context-type="linenumber">111</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="6804051092296228130" datatype="html">
|
<trans-unit id="6804051092296228130" datatype="html">
|
||||||
<source>This operation will permanently delete all documents in the trash.</source>
|
<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="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
|
||||||
<context context-type="linenumber">112</context>
|
<context context-type="linenumber">112</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="6996183233986182894" datatype="html">
|
<trans-unit id="6996183233986182894" datatype="html">
|
||||||
<source>Document(s) deleted</source>
|
<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="sourcefile">src/app/components/admin/trash/trash.component.ts</context>
|
||||||
<context context-type="linenumber">123</context>
|
<context context-type="linenumber">123</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Document(s) supprimé(s)</target>
|
<target state="translated">Document(s) effacé(s)</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6962724852893361467" datatype="html">
|
<trans-unit id="6962724852893361467" datatype="html">
|
||||||
<source>Error deleting document(s)</source>
|
<source>Error deleting document(s)</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Réinitialiser</target>
|
<target state="final">Réinitialiser</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html" approved="yes">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">158</context>
|
<context context-type="linenumber">158</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Déclenche pour les documents qui correspondent à <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>tous<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> 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="<em>"/>tous<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/>les filtres spécifiés ci-dessous.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7467799586957602479" datatype="html">
|
<trans-unit id="7467799586957602479" datatype="html">
|
||||||
<source>Filter filename</source>
|
<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="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">418</context>
|
<context context-type="linenumber">418</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">URL du webhook</target>
|
<target state="translated">URL du Webhook</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7491983459027245019" datatype="html">
|
<trans-unit id="7491983459027245019" datatype="html">
|
||||||
<source>Use parameters for webhook body</source>
|
<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="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">426</context>
|
<context context-type="linenumber">426</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Corps du webhook</target>
|
<target state="translated">Corps du Webhook</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3829826512656746316" datatype="html">
|
<trans-unit id="3829826512656746316" datatype="html">
|
||||||
<source>Webhook headers</source>
|
<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="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">428</context>
|
<context context-type="linenumber">428</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">En-têtes du webhook</target>
|
<target state="translated">En-têtes Webhook</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2114525789021600887" datatype="html">
|
<trans-unit id="2114525789021600887" datatype="html">
|
||||||
<source>Include document</source>
|
<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="sourcefile">src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html</context>
|
||||||
<context context-type="linenumber">436,438</context>
|
<context context-type="linenumber">436,438</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="3853121441237751087" datatype="html">
|
<trans-unit id="3853121441237751087" datatype="html">
|
||||||
<source>Passwords</source>
|
<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="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 context-type="linenumber">62</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2057574872309338088" datatype="html">
|
<trans-unit id="2057574872309338088" datatype="html">
|
||||||
<source>Copy share link</source>
|
<source>Copy share link</source>
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrer par propriétaire</target>
|
<target state="translated">Filtrer par propriétaire</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">318</context>
|
<context context-type="linenumber">318</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="5888243105821763422" datatype="html" approved="yes">
|
<trans-unit id="5888243105821763422" datatype="html" approved="yes">
|
||||||
<source>Original file size</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">331</context>
|
<context context-type="linenumber">331</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="6033581412811562084" datatype="html" approved="yes">
|
<trans-unit id="6033581412811562084" datatype="html" approved="yes">
|
||||||
<source>Archive file size</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">407</context>
|
<context context-type="linenumber">407</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="14058600336670816" datatype="html">
|
<trans-unit id="14058600336670816" datatype="html">
|
||||||
<source>In trash</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1271</context>
|
<context context-type="linenumber">1271</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="448882439049417053" datatype="html" approved="yes">
|
<trans-unit id="448882439049417053" datatype="html" approved="yes">
|
||||||
<source>Error saving document</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
|
||||||
<context context-type="linenumber">224</context>
|
<context context-type="linenumber">224</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ID de tâche manquant.</target>
|
<target state="needs-translation">Missing task ID.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="205445381296663832" datatype="html">
|
<trans-unit id="205445381296663832" datatype="html">
|
||||||
<source>Upload failed.</source>
|
<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="sourcefile">src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts</context>
|
||||||
<context context-type="linenumber">274</context>
|
<context context-type="linenumber">274</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="6299008920007331381" datatype="html" approved="yes">
|
<trans-unit id="6299008920007331381" datatype="html" approved="yes">
|
||||||
<source>Edit:</source>
|
<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="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
|
||||||
<context context-type="linenumber">212</context>
|
<context context-type="linenumber">212</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Champs personnalisés (Obsolète)</target>
|
<target state="needs-translation">Custom fields (Deprecated)</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2649431021108393503" datatype="html" approved="yes">
|
<trans-unit id="2649431021108393503" datatype="html" approved="yes">
|
||||||
<source>More like</source>
|
<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="sourcefile">src/app/components/document-list/filter-editor/filter-editor.component.ts</context>
|
||||||
<context context-type="linenumber">332</context>
|
<context context-type="linenumber">332</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Titre & contenu : <x id="PH" equiv-text="rule.value"/></target>
|
<target state="needs-translation">Title & content: <x id="PH" equiv-text="rule.value"/></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1872523635812236432" datatype="html" approved="yes">
|
<trans-unit id="1872523635812236432" datatype="html" approved="yes">
|
||||||
<source>ASN: <x id="PH" equiv-text="rule.value"/></source>
|
<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="sourcefile">src/app/components/manage/document-attributes/management-list/management-list.component.ts</context>
|
||||||
<context context-type="linenumber">453</context>
|
<context context-type="linenumber">453</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="5897787932098828336" datatype="html">
|
<trans-unit id="5897787932098828336" datatype="html">
|
||||||
<source>Objects deleted successfully</source>
|
<source>Objects deleted successfully</source>
|
||||||
@@ -12184,7 +12180,7 @@
|
|||||||
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
<context context-type="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">365</context>
|
<context context-type="linenumber">365</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="483994032066441287" datatype="html">
|
<trans-unit id="483994032066441287" datatype="html">
|
||||||
<source>Timeout in seconds for LLM requests.</source>
|
<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="sourcefile">src/app/data/paperless-config.ts</context>
|
||||||
<context context-type="linenumber">369</context>
|
<context context-type="linenumber">369</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="9155387182259025015" datatype="html">
|
<trans-unit id="9155387182259025015" datatype="html">
|
||||||
<source>Processing</source>
|
<source>Processing</source>
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">La migration des paramètres vers la base de données a été effectuée avec succès !</target>
|
<target state="final">La migration des paramètres vers la base de données a été effectuée avec succès !</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">Impossible de migrer les paramètres vers la base de données, veuillez essayer d’enregistrer manuellement.</target>
|
<target state="final">Impossible de migrer les paramètres vers la base de données, veuillez essayer d’enregistrer manuellement.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">Vous pouvez recommencer la visite depuis les paramètres.</target>
|
<target state="final">Vous pouvez recommencer la visite depuis les paramètres.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">הרשאות ברירת מחדל</target>
|
<target state="translated">הרשאות ברירת מחדל</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ניקוי</target>
|
<target state="translated">ניקוי</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">סינון לפי בעלים</target>
|
<target state="translated">סינון לפי בעלים</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">הושלמה בהצלחה העברה חד פעמית של הגדרות למסד הנתונים!</target>
|
<target state="translated">הושלמה בהצלחה העברה חד פעמית של הגדרות למסד הנתונים!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">לא ניתן לבצע העברה של הגדרות למסד הנתונים, נסה לשמור באופן ידני.</target>
|
<target state="translated">לא ניתן לבצע העברה של הגדרות למסד הנתונים, נסה לשמור באופן ידני.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Clear</target>
|
<target state="needs-translation">Clear</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Zadane ovlasti</target>
|
<target state="translated">Zadane ovlasti</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Očisti</target>
|
<target state="translated">Očisti</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtriraj po vlasniku</target>
|
<target state="translated">Filtriraj po vlasniku</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Jednokratna migracija postavki u bazu podataka uspješno završena!</target>
|
<target state="translated">Jednokratna migracija postavki u bazu podataka uspješno završena!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nije moguće migrirati postavke u bazu podataka, pokušajte ručno spremiti.</target>
|
<target state="translated">Nije moguće migrirati postavke u bazu podataka, pokušajte ručno spremiti.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Možete ponovo pokrenuti obilazak sa stranice postavki.</target>
|
<target state="translated">Možete ponovo pokrenuti obilazak sa stranice postavki.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Alapértelmezett engedélyek</target>
|
<target state="translated">Alapértelmezett engedélyek</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Törlés</target>
|
<target state="translated">Törlés</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Szűrés tulajdonos szerint</target>
|
<target state="translated">Szűrés tulajdonos szerint</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Sikeresen befejeződött a beállítások egyszeri migrálása az adatbázisba!</target>
|
<target state="translated">Sikeresen befejeződött a beállítások egyszeri migrálása az adatbázisba!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</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>
|
<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>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">A túrát a beállítások oldalról indíthatja újra.</target>
|
<target state="translated">A túrát a beállítások oldalról indíthatja újra.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Izin bawaan</target>
|
<target state="translated">Izin bawaan</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Bersihkan</target>
|
<target state="translated">Bersihkan</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Saring berdasarkan pemilik</target>
|
<target state="translated">Saring berdasarkan pemilik</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Berhasil menyelesaikan migrasi pengaturan satu kali ke basis data!</target>
|
<target state="translated">Berhasil menyelesaikan migrasi pengaturan satu kali ke basis data!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Tidak dapat memigrasikan pengaturan ke basis data, silakan coba simpan secara manual.</target>
|
<target state="translated">Tidak dapat memigrasikan pengaturan ke basis data, silakan coba simpan secara manual.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Anda dapat memulai ulang tur dari halaman pengaturan.</target>
|
<target state="translated">Anda dapat memulai ulang tur dari halaman pengaturan.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Autorizzazioni predefinite</target>
|
<target state="translated">Autorizzazioni predefinite</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Pulisci</target>
|
<target state="final">Pulisci</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtra per proprietario</target>
|
<target state="translated">Filtra per proprietario</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">8</context>
|
<context context-type="linenumber">8</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2784168796433474565" datatype="html" approved="yes">
|
<trans-unit id="2784168796433474565" datatype="html" approved="yes">
|
||||||
<source>Filter by tag</source>
|
<source>Filter by tag</source>
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Migrazione una tantum delle impostazioni al database completata con successo!</target>
|
<target state="translated">Migrazione una tantum delle impostazioni al database completata con successo!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Impossibile migrare le impostazioni nel database. Prova a salvarle manualmente.</target>
|
<target state="translated">Impossibile migrare le impostazioni nel database. Prova a salvarle manualmente.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Puoi riavviare il tour dalla pagina delle impostazioni.</target>
|
<target state="translated">Puoi riavviare il tour dalla pagina delle impostazioni.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">デフォルト権限</target>
|
<target state="translated">デフォルト権限</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">解除</target>
|
<target state="translated">解除</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">所有者で絞り込む</target>
|
<target state="translated">所有者で絞り込む</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">データベースへのワンタイム設定移行が正常に完了しました!</target>
|
<target state="translated">データベースへのワンタイム設定移行が正常に完了しました!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">データベースに設定を移行できません。手動で保存してみてください。</target>
|
<target state="translated">データベースに設定を移行できません。手動で保存してみてください。</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">設定ページからツアーを再開することができます</target>
|
<target state="translated">設定ページからツアーを再開することができます</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">기본 권한</target>
|
<target state="translated">기본 권한</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">지우기</target>
|
<target state="translated">지우기</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">데이터베이스에 대한 설정의 일회성 마이그레이션을 성공적으로 완료했습니다!</target>
|
<target state="translated">데이터베이스에 대한 설정의 일회성 마이그레이션을 성공적으로 완료했습니다!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">설정을 데이터베이스로 마이그레이션할 수 없는 경우 수동으로 저장해 보세요.</target>
|
<target state="translated">설정을 데이터베이스로 마이그레이션할 수 없는 경우 수동으로 저장해 보세요.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">나중에 설정 페이지에서 다시 둘러보기를 할 수 있습니다.</target>
|
<target state="translated">나중에 설정 페이지에서 다시 둘러보기를 할 수 있습니다.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Standardberechtegungen</target>
|
<target state="translated">Standardberechtegungen</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Läschen</target>
|
<target state="final">Läschen</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Išvalyti</target>
|
<target state="translated">Išvalyti</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nustatymų perkėlimas į duomenų bazę sėkmingai atliktas!</target>
|
<target state="translated">Nustatymų perkėlimas į duomenų bazę sėkmingai atliktas!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nepavyko perkelti nustatymų į duomenų bazę, pabandykite išsaugoti rankiniu būdu.</target>
|
<target state="translated">Nepavyko perkelti nustatymų į duomenų bazę, pabandykite išsaugoti rankiniu būdu.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ekskursiją galite paleisti iš naujo nustatymų puslapyje.</target>
|
<target state="translated">Ekskursiją galite paleisti iš naujo nustatymų puslapyje.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Noklusētās atļaujas</target>
|
<target state="translated">Noklusētās atļaujas</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Notīrīt</target>
|
<target state="translated">Notīrīt</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Clear</target>
|
<target state="needs-translation">Clear</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Clear</target>
|
<target state="needs-translation">Clear</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Standaard rechten</target>
|
<target state="translated">Standaard rechten</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Leegmaken</target>
|
<target state="final">Leegmaken</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filter op eigenaar</target>
|
<target state="translated">Filter op eigenaar</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Eenmalige migratie van instellingen naar de database is succesvol voltooid!</target>
|
<target state="translated">Eenmalige migratie van instellingen naar de database is succesvol voltooid!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Kan instellingen niet migreren naar de database, probeer handmatig op te slaan.</target>
|
<target state="translated">Kan instellingen niet migreren naar de database, probeer handmatig op te slaan.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Je kan de rondleiding herstarten vanaf de instellingen pagina.</target>
|
<target state="translated">Je kan de rondleiding herstarten vanaf de instellingen pagina.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Standardtillatelser</target>
|
<target state="translated">Standardtillatelser</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -2076,7 +2076,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Søk oppgaver</target>
|
<target state="needs-translation">Search tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6849725902312323996" datatype="html">
|
<trans-unit id="6849725902312323996" datatype="html">
|
||||||
<source>Reset filters</source>
|
<source>Reset filters</source>
|
||||||
@@ -2620,7 +2620,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">123</context>
|
<context context-type="linenumber">123</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">E-post-import</target>
|
<target state="translated">E-postforbruk</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="29832309535656200" datatype="html">
|
<trans-unit id="29832309535656200" datatype="html">
|
||||||
<source>System</source>
|
<source>System</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Tøm</target>
|
<target state="translated">Tøm</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<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="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 context-type="linenumber">32</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Paperless vil bare behandle e-poster som passer til <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/>hele<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> 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="<em>"/>hele<x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> av kriteriene som er angitt nedenfor.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="7046259383943324039" datatype="html">
|
<trans-unit id="7046259383943324039" datatype="html">
|
||||||
<source>Folder</source>
|
<source>Folder</source>
|
||||||
@@ -6810,7 +6794,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
|
<context context-type="sourcefile">src/app/components/common/input/tags/tags.component.html</context>
|
||||||
<context context-type="linenumber">56</context>
|
<context context-type="linenumber">56</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrer dokumenter med disse etikettene</target>
|
<target state="translated">Filtrer dokumenter med disse Etikettene</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1400555558847223243" datatype="html">
|
<trans-unit id="1400555558847223243" datatype="html">
|
||||||
<source>Suggestion:</source>
|
<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="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.html</context>
|
||||||
<context context-type="linenumber">68</context>
|
<context context-type="linenumber">68</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Del kobling</target>
|
<target state="needs-translation">Share link</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2618101617221155143" datatype="html">
|
<trans-unit id="2618101617221155143" datatype="html">
|
||||||
<source>Copy link</source>
|
<source>Copy link</source>
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrer etter eier</target>
|
<target state="translated">Filtrer etter eier</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/document-asn/document-asn.component.html</context>
|
||||||
<context context-type="linenumber">1</context>
|
<context context-type="linenumber">1</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="1407560924967345762" datatype="html">
|
<trans-unit id="1407560924967345762" datatype="html">
|
||||||
<source>Page</source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">8</context>
|
<context context-type="linenumber">8</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2784168796433474565" datatype="html">
|
<trans-unit id="2784168796433474565" datatype="html">
|
||||||
<source>Filter by tag</source>
|
<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="sourcefile">src/app/components/document-list/document-list.component.html</context>
|
||||||
<context context-type="linenumber">135</context>
|
<context context-type="linenumber">135</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2243770355958919528" datatype="html">
|
<trans-unit id="2243770355958919528" datatype="html">
|
||||||
<source>(filtered)</source>
|
<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="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">29</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8691920320483720007" datatype="html">
|
<trans-unit id="8691920320483720007" datatype="html">
|
||||||
<source>Received</source>
|
<source>Received</source>
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Engangs migrering av innstillinger ble fullført til databasen!</target>
|
<target state="translated">Engangs migrering av innstillinger ble fullført til databasen!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Kunne ikke overføre innstillinger til databasen, prøv å lagre manuelt.</target>
|
<target state="translated">Kunne ikke overføre innstillinger til databasen, prøv å lagre manuelt.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Du kan starte omvisningen på nytt fra innstillingssiden.</target>
|
<target state="translated">Du kan starte omvisningen på nytt fra innstillingssiden.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Domyślnie uprawnienia</target>
|
<target state="translated">Domyślnie uprawnienia</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Wyczyść</target>
|
<target state="final">Wyczyść</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtruj wg właściciela</target>
|
<target state="translated">Filtruj wg właściciela</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Pomyślnie zakończona jednorazowa migracja ustawień do bazy danych!</target>
|
<target state="translated">Pomyślnie zakończona jednorazowa migracja ustawień do bazy danych!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nie można przenieść ustawień do bazy danych, spróbuj zapisać ręcznie.</target>
|
<target state="translated">Nie można przenieść ustawień do bazy danych, spróbuj zapisać ręcznie.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Możesz ponownie uruchomić przegląd aplikacji ze strony ustawień.</target>
|
<target state="translated">Możesz ponownie uruchomić przegląd aplikacji ze strony ustawień.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Permissões Padrão</target>
|
<target state="translated">Permissões Padrão</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Limpar</target>
|
<target state="final">Limpar</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8217,6 +8201,18 @@ Erro ao enviar documentos por e-mail</target>
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrar por proprietário</target>
|
<target state="translated">Filtrar por proprietário</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">A migração de configurações para o banco de dados foi concluída com sucesso!</target>
|
<target state="translated">A migração de configurações para o banco de dados foi concluída com sucesso!</target>
|
||||||
</trans-unit>
|
</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>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</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>
|
<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>
|
</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>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Você pode reiniciar o tour na página de configurações..</target>
|
<target state="translated">Você pode reiniciar o tour na página de configurações..</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Permissões predefinidas</target>
|
<target state="translated">Permissões predefinidas</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Limpar</target>
|
<target state="final">Limpar</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Terminado com sucesso a migração única das definições na base de dados!</target>
|
<target state="translated">Terminado com sucesso a migração única das definições na base de dados!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Incapaz de migrar as definições na base de dados, por favor, tente gravar manualmente.</target>
|
<target state="translated">Incapaz de migrar as definições na base de dados, por favor, tente gravar manualmente.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Pode reiniciar o tutorial através da página das Configurações.</target>
|
<target state="translated">Pode reiniciar o tutorial através da página das Configurações.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Permisiuni implicite</target>
|
<target state="translated">Permisiuni implicite</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Curăță</target>
|
<target state="final">Curăță</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrare după proprietar</target>
|
<target state="translated">Filtrare după proprietar</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Migrarea unică a setărilor în baza de date a fost finalizată cu succes!</target>
|
<target state="translated">Migrarea unică a setărilor în baza de date a fost finalizată cu succes!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</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>
|
<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>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Poți reporni turul din pagina de setări.</target>
|
<target state="translated">Poți reporni turul din pagina de setări.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Права по умолчанию</target>
|
<target state="translated">Права по умолчанию</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Очистить</target>
|
<target state="final">Очистить</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Фильтровать по владельцу</target>
|
<target state="translated">Фильтровать по владельцу</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12774,7 +12770,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Одноразовая миграция настроек в базу данных завершена!</target>
|
<target state="translated">Одноразовая миграция настроек в базу данных завершена!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12782,7 +12778,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Не удается перенести настройки в базу данных, пожалуйста, попробуйте сохранить вручную.</target>
|
<target state="translated">Не удается перенести настройки в базу данных, пожалуйста, попробуйте сохранить вручную.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12790,7 +12786,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Вы можете перезапустить тур со страницы настроек.</target>
|
<target state="translated">Вы можете перезапустить тур со страницы настроек.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Predvolené povolenia</target>
|
<target state="translated">Predvolené povolenia</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Vymazať</target>
|
<target state="translated">Vymazať</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrovať podľa vlastníka</target>
|
<target state="translated">Filtrovať podľa vlastníka</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Migrácia nastavení do databázy úspešne ukončená!</target>
|
<target state="translated">Migrácia nastavení do databázy úspešne ukončená!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nie je možné migrovať nastavenia do databázy, skúste uložiť manuálne.</target>
|
<target state="translated">Nie je možné migrovať nastavenia do databázy, skúste uložiť manuálne.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Sprievodcu môžete znova spustiť z nastavení.</target>
|
<target state="translated">Sprievodcu môžete znova spustiť z nastavení.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Privzeta dovoljenja</target>
|
<target state="translated">Privzeta dovoljenja</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -2076,7 +2076,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.html</context>
|
||||||
<context context-type="linenumber">96</context>
|
<context context-type="linenumber">96</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Iskanje nalog</target>
|
<target state="needs-translation">Search tasks</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6849725902312323996" datatype="html">
|
<trans-unit id="6849725902312323996" datatype="html">
|
||||||
<source>Reset filters</source>
|
<source>Reset filters</source>
|
||||||
@@ -2704,7 +2704,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
<context context-type="sourcefile">src/app/components/admin/tasks/tasks.component.ts</context>
|
||||||
<context context-type="linenumber">349</context>
|
<context context-type="linenumber">349</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8149502458056418229" datatype="html">
|
<trans-unit id="8149502458056418229" datatype="html">
|
||||||
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
|
<source>Success. New document id <x id="PH" equiv-text="documentId"/> created</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Počisti</target>
|
<target state="translated">Počisti</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.html</context>
|
||||||
<context context-type="linenumber">22</context>
|
<context context-type="linenumber">22</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8037476586059399916" datatype="html">
|
<trans-unit id="8037476586059399916" datatype="html">
|
||||||
<source>Expires</source>
|
<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="sourcefile">src/app/components/common/share-link-bundle-dialog/share-link-bundle-dialog.component.html</context>
|
||||||
<context context-type="linenumber">68</context>
|
<context context-type="linenumber">68</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Deli povezavo</target>
|
<target state="needs-translation">Share link</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="2618101617221155143" datatype="html">
|
<trans-unit id="2618101617221155143" datatype="html">
|
||||||
<source>Copy link</source>
|
<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="sourcefile">src/app/components/common/system-status-dialog/system-status-dialog.component.html</context>
|
||||||
<context context-type="linenumber">147</context>
|
<context context-type="linenumber">147</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Nedavna aktivnost opravila <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="small text-muted fw-light">"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> dni)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
|
<target state="needs-translation">Recent Task Activity <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="small text-muted fw-light">"/>(<x id="INTERPOLATION" equiv-text="{{status().tasks.summary.days}}"/> days)<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="3448462145758383019" datatype="html">
|
<trans-unit id="3448462145758383019" datatype="html">
|
||||||
<source>Total</source>
|
<source>Total</source>
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtriraj po lastniku</target>
|
<target state="translated">Filtriraj po lastniku</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<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="sourcefile">src/app/components/document-asn/document-asn.component.html</context>
|
||||||
<context context-type="linenumber">1</context>
|
<context context-type="linenumber">1</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="1407560924967345762" datatype="html">
|
<trans-unit id="1407560924967345762" datatype="html">
|
||||||
<source>Page</source>
|
<source>Page</source>
|
||||||
@@ -8440,7 +8436,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">7,8</context>
|
<context context-type="linenumber">7,8</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8590109102084543521" datatype="html">
|
<trans-unit id="8590109102084543521" datatype="html">
|
||||||
<source>-</source>
|
<source>-</source>
|
||||||
@@ -8660,7 +8656,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">318</context>
|
<context context-type="linenumber">318</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Izvirna kontrolna vsota SHA256</target>
|
<target state="needs-translation">Original SHA256 checksum</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="5888243105821763422" datatype="html">
|
<trans-unit id="5888243105821763422" datatype="html">
|
||||||
<source>Original file size</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">331</context>
|
<context context-type="linenumber">331</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Arhivska kontrolna vsota SHA256</target>
|
<target state="needs-translation">Archive SHA256 checksum</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6033581412811562084" datatype="html">
|
<trans-unit id="6033581412811562084" datatype="html">
|
||||||
<source>Archive file size</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">368,371</context>
|
<context context-type="linenumber">368,371</context>
|
||||||
</context-group>
|
</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="<span class="badge text-bg-secondary ms-1">"/><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="<span class="badge text-bg-secondary ms-1">"/><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>
|
||||||
<trans-unit id="186236568870281953" datatype="html">
|
<trans-unit id="186236568870281953" datatype="html">
|
||||||
<source>History</source>
|
<source>History</source>
|
||||||
@@ -8732,7 +8728,7 @@
|
|||||||
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
<context context-type="sourcefile">src/app/components/document-detail/document-detail.component.html</context>
|
||||||
<context context-type="linenumber">401,405</context>
|
<context context-type="linenumber">401,405</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated"> Dvojniki <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="badge text-bg-secondary ms-1">"/><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="<span class="badge text-bg-secondary ms-1">"/><x id="INTERPOLATION" equiv-text="cate_documents.length }}"/><x id="CLOSE_TAG_SPAN" ctype="x-span"/></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="6449374629822973702" datatype="html">
|
<trans-unit id="6449374629822973702" datatype="html">
|
||||||
<source>Duplicate documents detected:</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1271</context>
|
<context context-type="linenumber">1271</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="448882439049417053" datatype="html">
|
<trans-unit id="448882439049417053" datatype="html">
|
||||||
<source>Error saving document</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1359</context>
|
<context context-type="linenumber">1359</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="282586936710748252" datatype="html">
|
<trans-unit id="282586936710748252" datatype="html">
|
||||||
<source>Documents can be restored prior to permanent deletion.</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1413</context>
|
<context context-type="linenumber">1413</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4409560272830824468" datatype="html">
|
<trans-unit id="4409560272830824468" datatype="html">
|
||||||
<source>Error executing operation</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1808</context>
|
<context context-type="linenumber">1808</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="9043972994040261999" datatype="html">
|
<trans-unit id="9043972994040261999" datatype="html">
|
||||||
<source>Error executing PDF edit operation</source>
|
<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="sourcefile">src/app/components/document-detail/document-detail.component.ts</context>
|
||||||
<context context-type="linenumber">1865</context>
|
<context context-type="linenumber">1865</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2282118435712883014" datatype="html">
|
<trans-unit id="2282118435712883014" datatype="html">
|
||||||
<source>Error executing password removal operation</source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">8</context>
|
<context context-type="linenumber">8</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2784168796433474565" datatype="html">
|
<trans-unit id="2784168796433474565" datatype="html">
|
||||||
<source>Filter by tag</source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">95,96</context>
|
<context context-type="linenumber">95,96</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="2030261243264601523" datatype="html">
|
<trans-unit id="2030261243264601523" datatype="html">
|
||||||
<source>Added: <x id="INTERPOLATION" equiv-text="{{ document().added | customDate }}"/></source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">96,97</context>
|
<context context-type="linenumber">96,97</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4235671847487610290" datatype="html">
|
<trans-unit id="4235671847487610290" datatype="html">
|
||||||
<source>Modified: <x id="INTERPOLATION" equiv-text="{{ document().modified | customDate }}"/></source>
|
<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="sourcefile">src/app/components/document-list/document-card-small/document-card-small.component.html</context>
|
||||||
<context context-type="linenumber">97,98</context>
|
<context context-type="linenumber">97,98</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="197162226430950645" datatype="html">
|
<trans-unit id="197162226430950645" datatype="html">
|
||||||
<source>{VAR_PLURAL, plural, =1 {1 page} other {<x id="INTERPOLATION"/> pages}}</source>
|
<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="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
|
||||||
<context context-type="linenumber">2</context>
|
<context context-type="linenumber">2</context>
|
||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Obdelana pošta za <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/><x id="INTERPOLATION" equiv-text="{{ rule().name }}"/><x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
|
<target state="needs-translation">Processed Mail for <x id="START_EMPHASISED_TEXT" ctype="x-em" equiv-text="<em>"/><x id="INTERPOLATION" equiv-text="{{ rule().name }}"/><x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1991019495862291373" datatype="html">
|
<trans-unit id="1991019495862291373" datatype="html">
|
||||||
<source>No processed email messages found.</source>
|
<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="sourcefile">src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html</context>
|
||||||
<context context-type="linenumber">29</context>
|
<context context-type="linenumber">29</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="8691920320483720007" datatype="html">
|
<trans-unit id="8691920320483720007" datatype="html">
|
||||||
<source>Received</source>
|
<source>Received</source>
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Uspešno opravljena enkratna migracija nastavitev v bazo!</target>
|
<target state="translated">Uspešno opravljena enkratna migracija nastavitev v bazo!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nastavitev ni mogoče preseliti v bazo podatkov, poskusite jih shraniti ročno.</target>
|
<target state="translated">Nastavitev ni mogoče preseliti v bazo podatkov, poskusite jih shraniti ročno.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ogled lahko ponovite v nastavitvah.</target>
|
<target state="translated">Ogled lahko ponovite v nastavitvah.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1523,13 +1523,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">[SQ] Default Permissions</target>
|
<target state="translated">[SQ] Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3959,22 +3959,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">[SQ] Clear</target>
|
<target state="translated">[SQ] Clear</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8217,6 +8201,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">[SQ] Filter by owner</target>
|
<target state="translated">[SQ] Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12776,7 +12772,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">[SQ] Successfully completed one-time migratration of settings to the database!</target>
|
<target state="translated">[SQ] Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12784,7 +12780,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">[SQ] Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="translated">[SQ] Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12792,7 +12788,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">[SQ] You can restart the tour from the settings page.</target>
|
<target state="translated">[SQ] You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Podrazumevane dozvole</target>
|
<target state="translated">Podrazumevane dozvole</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Očisti</target>
|
<target state="translated">Očisti</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtriraj po vlasniku</target>
|
<target state="translated">Filtriraj po vlasniku</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12776,7 +12772,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Uspešno završena jednokratna migracija podešavanja u bazu podataka!</target>
|
<target state="translated">Uspešno završena jednokratna migracija podešavanja u bazu podataka!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12784,7 +12780,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Nije moguće preneti podešavanja u bazu podataka, pokušajte da ih sačuvate ručno.</target>
|
<target state="translated">Nije moguće preneti podešavanja u bazu podataka, pokušajte da ih sačuvate ručno.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12792,7 +12788,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Možete ponovo da pokrenete obilazak sa stranice sa podešavanjima.</target>
|
<target state="translated">Možete ponovo da pokrenete obilazak sa stranice sa podešavanjima.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Standardbehörigheter</target>
|
<target state="translated">Standardbehörigheter</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Rensa</target>
|
<target state="final">Rensa</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Filtrera efter ägare</target>
|
<target state="translated">Filtrera efter ägare</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Slutförde engångsmigreringen av inställningarna till databasen!</target>
|
<target state="translated">Slutförde engångsmigreringen av inställningarna till databasen!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Kunde inte migrera inställningarna till databasen, försök spara manuellt.</target>
|
<target state="translated">Kunde inte migrera inställningarna till databasen, försök spara manuellt.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Du kan starta om rundturen från inställningssidan.</target>
|
<target state="translated">Du kan starta om rundturen från inställningssidan.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Default Permissions</target>
|
<target state="needs-translation">Default Permissions</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">ล้าง</target>
|
<target state="translated">ล้าง</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="needs-translation">Filter by owner</target>
|
<target state="needs-translation">Filter by owner</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
<target state="needs-translation">Successfully completed one-time migratration of settings to the database!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
<target state="needs-translation">Unable to migrate settings to the database, please try saving manually.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
<target state="needs-translation">You can restart the tour from the settings page.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Varsayılan İzinler</target>
|
<target state="translated">Varsayılan İzinler</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Temizle</target>
|
<target state="translated">Temizle</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8218,6 +8202,18 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> krite
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Sahibine göre filtrele</target>
|
<target state="translated">Sahibine göre filtrele</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12776,7 +12772,7 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> krite
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ayarların veritabanına tek seferlik taşıma işlemi başarıyla tamamlandı!</target>
|
<target state="translated">Ayarların veritabanına tek seferlik taşıma işlemi başarıyla tamamlandı!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12784,7 +12780,7 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> krite
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ayarları veritabanına taşıyamıyoruz, lütfen manuel olarak kaydetmeyi deneyin.</target>
|
<target state="translated">Ayarları veritabanına taşıyamıyoruz, lütfen manuel olarak kaydetmeyi deneyin.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12792,7 +12788,7 @@ tüm <x id="CLOSE_EMPHASISED_TEXT" ctype="x-em" equiv-text="</em>"/> krite
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ayarlar sayfasından turu yeniden başlatabilirsiniz.</target>
|
<target state="translated">Ayarlar sayfasından turu yeniden başlatabilirsiniz.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Типові дозволи</target>
|
<target state="translated">Типові дозволи</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Очистити</target>
|
<target state="translated">Очистити</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">Фільтрувати за власником</target>
|
<target state="translated">Фільтрувати за власником</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Успішно завершено одноразову міграцію параметрів до бази даних!</target>
|
<target state="translated">Успішно завершено одноразову міграцію параметрів до бази даних!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Не вдається перенести налаштування в базу даних, спробуйте зберегти вручну.</target>
|
<target state="translated">Не вдається перенести налаштування в базу даних, спробуйте зберегти вручну.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">Ви можете пройти знайомство ще раз зі сторінки налаштувань.</target>
|
<target state="translated">Ви можете пройти знайомство ще раз зі сторінки налаштувань.</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,15 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Phân quyền mặc định</target>
|
<target state="final">Phân quyền mặc định</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" datatype="html" approved="yes">
|
||||||
<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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
|
<trans-unit id="4292903881380648974" datatype="html" approved="yes">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3976,22 +3978,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Xóa bỏ</target>
|
<target state="final">Xóa bỏ</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html" approved="yes">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8262,6 +8248,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="final">Lọc theo chủ sở hữu</target>
|
<target state="final">Lọc theo chủ sở hữu</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html" approved="yes">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12909,7 +12907,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">quá trình cập nhật dữ liệu cấu hình</target>
|
<target state="final">quá trình cập nhật dữ liệu cấu hình</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12917,7 +12915,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">cập nhật dữ liệu cấu hình</target>
|
<target state="final">cập nhật dữ liệu cấu hình</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12925,7 +12923,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="final">khởi động lại hướng dẫn nhanh</target>
|
<target state="final">khởi động lại hướng dẫn nhanh</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">默认权限</target>
|
<target state="translated">默认权限</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">清除</target>
|
<target state="translated">清除</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">按所有者筛选</target>
|
<target state="translated">按所有者筛选</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">成功完成设置一次性迁移到数据库!</target>
|
<target state="translated">成功完成设置一次性迁移到数据库!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">无法将设置迁移到数据库,请尝试手动保存。</target>
|
<target state="translated">无法将设置迁移到数据库,请尝试手动保存。</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">你可以从设置页面重新开始导览。</target>
|
<target state="translated">你可以从设置页面重新开始导览。</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -1522,13 +1522,13 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">預設權限</target>
|
<target state="translated">預設權限</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="1267490156259885391" datatype="html">
|
<trans-unit id="6544153565064275581" 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>
|
<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-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
<context context-type="sourcefile">src/app/components/admin/settings/settings.component.html</context>
|
||||||
<context context-type="linenumber">306,308</context>
|
<context context-type="linenumber">306,308</context>
|
||||||
</context-group>
|
</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>
|
||||||
<trans-unit id="4292903881380648974" datatype="html">
|
<trans-unit id="4292903881380648974" datatype="html">
|
||||||
<source>Default Owner</source>
|
<source>Default Owner</source>
|
||||||
@@ -3958,22 +3958,6 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">清除</target>
|
<target state="translated">清除</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="7515883357904500238" datatype="html">
|
||||||
<source>Are you sure?</source>
|
<source>Are you sure?</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -8216,6 +8200,18 @@
|
|||||||
</context-group>
|
</context-group>
|
||||||
<target state="translated">以擁有者篩選</target>
|
<target state="translated">以擁有者篩選</target>
|
||||||
</trans-unit>
|
</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">
|
<trans-unit id="3542042671420335679" datatype="html">
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
@@ -12775,7 +12771,7 @@
|
|||||||
<source>Successfully completed one-time migratration of settings to the database!</source>
|
<source>Successfully completed one-time migratration of settings to the database!</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">設定值已成功移轉到資料庫!</target>
|
<target state="translated">設定值已成功移轉到資料庫!</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12783,7 +12779,7 @@
|
|||||||
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
<source>Unable to migrate settings to the database, please try saving manually.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">無法將設定遷移至資料庫,請嘗試手動儲存。</target>
|
<target state="translated">無法將設定遷移至資料庫,請嘗試手動儲存。</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
@@ -12791,7 +12787,7 @@
|
|||||||
<source>You can restart the tour from the settings page.</source>
|
<source>You can restart the tour from the settings page.</source>
|
||||||
<context-group purpose="location">
|
<context-group purpose="location">
|
||||||
<context context-type="sourcefile">src/app/services/settings.service.ts</context>
|
<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>
|
</context-group>
|
||||||
<target state="translated">可以從設定頁面重新開始導覽。</target>
|
<target state="translated">可以從設定頁面重新開始導覽。</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import importlib
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
# ZIP_ZSTANDARD exists only on Python 3.14+ (PEP 784). None elsewhere.
|
||||||
|
ZSTD: int | None = getattr(zipfile, "ZIP_ZSTANDARD", None)
|
||||||
|
|
||||||
|
# CLI choices are fixed across runtimes so argparse never hides zstd; runtime
|
||||||
|
# availability is enforced separately in compression_available().
|
||||||
|
COMPRESSION_CHOICES: tuple[str, ...] = (
|
||||||
|
"stored",
|
||||||
|
"deflated",
|
||||||
|
"bzip2",
|
||||||
|
"lzma",
|
||||||
|
"zstd",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Method name -> zipfile compression constant (zstd only when supported).
|
||||||
|
COMPRESSION_METHODS: dict[str, int] = {
|
||||||
|
"stored": zipfile.ZIP_STORED,
|
||||||
|
"deflated": zipfile.ZIP_DEFLATED,
|
||||||
|
"bzip2": zipfile.ZIP_BZIP2,
|
||||||
|
"lzma": zipfile.ZIP_LZMA,
|
||||||
|
}
|
||||||
|
if ZSTD is not None:
|
||||||
|
COMPRESSION_METHODS["zstd"] = ZSTD
|
||||||
|
|
||||||
|
# Inclusive (min, max) level bounds per method; None => level not applicable.
|
||||||
|
# Verified on CPython 3.14.3.
|
||||||
|
#
|
||||||
|
# zstd's raw library bounds are (-131072, 22)
|
||||||
|
# (compression.zstd.CompressionParameter.compression_level.bounds()) — the
|
||||||
|
# minimum is an internal implementation constant (-ZSTD_TARGETLENGTH_MAX),
|
||||||
|
# not a meaningful distinct "level"; deeper negative values than -22 buy
|
||||||
|
# nothing over -22 in practice. We expose the conventional zstd CLI range
|
||||||
|
# instead of the raw library bounds.
|
||||||
|
LEVEL_BOUNDS: dict[str, tuple[int, int] | None] = {
|
||||||
|
"stored": None,
|
||||||
|
"deflated": (0, 9),
|
||||||
|
"bzip2": (1, 9),
|
||||||
|
"lzma": None,
|
||||||
|
"zstd": (-22, 22),
|
||||||
|
}
|
||||||
|
|
||||||
|
# zipfile compress_type id -> method name. 93 = current zstd id, 20 = legacy
|
||||||
|
# zstd id that zipfile can still read.
|
||||||
|
_COMPRESS_TYPE_TO_METHOD: dict[int, str] = {
|
||||||
|
zipfile.ZIP_STORED: "stored",
|
||||||
|
zipfile.ZIP_DEFLATED: "deflated",
|
||||||
|
zipfile.ZIP_BZIP2: "bzip2",
|
||||||
|
zipfile.ZIP_LZMA: "lzma",
|
||||||
|
93: "zstd",
|
||||||
|
20: "zstd",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def compression_available(method: str) -> bool:
|
||||||
|
"""Whether the running interpreter can actually use the given method."""
|
||||||
|
if method in ("stored", "deflated"):
|
||||||
|
# zlib is a hard CPython dependency; stored needs nothing.
|
||||||
|
return True
|
||||||
|
if method == "bzip2":
|
||||||
|
return _module_importable("bz2")
|
||||||
|
if method == "lzma":
|
||||||
|
return _module_importable("lzma")
|
||||||
|
if method == "zstd":
|
||||||
|
return ZSTD is not None and _module_importable("compression.zstd")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _module_importable(name: str) -> bool:
|
||||||
|
try:
|
||||||
|
importlib.import_module(name)
|
||||||
|
except ImportError:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def level_error(method: str, level: int | None) -> str | None:
|
||||||
|
"""Return a human message if (method, level) is invalid, else None."""
|
||||||
|
if level is None:
|
||||||
|
return None
|
||||||
|
bounds = LEVEL_BOUNDS[method]
|
||||||
|
if bounds is None:
|
||||||
|
return f"--zip-compression-level has no effect for '{method}'"
|
||||||
|
low, high = bounds
|
||||||
|
if not (low <= level <= high):
|
||||||
|
return (
|
||||||
|
f"--zip-compression-level for '{method}' must be between {low} and {high}"
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def compress_type_readable(compress_type: int) -> bool:
|
||||||
|
"""Whether this interpreter can decompress an entry of the given type."""
|
||||||
|
method = _COMPRESS_TYPE_TO_METHOD.get(compress_type)
|
||||||
|
if method is None:
|
||||||
|
return False
|
||||||
|
return compression_available(method)
|
||||||
|
|
||||||
|
|
||||||
|
def unreadable_method_names(compress_types: set[int]) -> set[str]:
|
||||||
|
"""Map a set of compress_type ids to human method names for error messages."""
|
||||||
|
names: set[str] = set()
|
||||||
|
for ct in compress_types:
|
||||||
|
names.add(_COMPRESS_TYPE_TO_METHOD.get(ct, f"method {ct}"))
|
||||||
|
return names
|
||||||
@@ -0,0 +1,353 @@
|
|||||||
|
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,
|
||||||
|
compression: int = zipfile.ZIP_DEFLATED,
|
||||||
|
compresslevel: int | None = None,
|
||||||
|
) -> 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._compression = compression
|
||||||
|
self._compresslevel = compresslevel
|
||||||
|
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=self._compression,
|
||||||
|
compresslevel=self._compresslevel,
|
||||||
|
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
|
||||||
@@ -37,7 +37,6 @@ from drf_spectacular.utils import extend_schema_field
|
|||||||
from guardian.utils import get_group_obj_perms_model
|
from guardian.utils import get_group_obj_perms_model
|
||||||
from guardian.utils import get_user_obj_perms_model
|
from guardian.utils import get_user_obj_perms_model
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.filters import BaseFilterBackend
|
|
||||||
from rest_framework.filters import OrderingFilter
|
from rest_framework.filters import OrderingFilter
|
||||||
from rest_framework_guardian.filters import ObjectPermissionsFilter
|
from rest_framework_guardian.filters import ObjectPermissionsFilter
|
||||||
|
|
||||||
@@ -51,7 +50,6 @@ from documents.models import ShareLink
|
|||||||
from documents.models import ShareLinkBundle
|
from documents.models import ShareLinkBundle
|
||||||
from documents.models import StoragePath
|
from documents.models import StoragePath
|
||||||
from documents.models import Tag
|
from documents.models import Tag
|
||||||
from documents.permissions import permitted_document_ids
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
@@ -163,9 +161,7 @@ class ObjectFilter(Filter):
|
|||||||
class InboxFilter(Filter):
|
class InboxFilter(Filter):
|
||||||
def filter(self, qs, value):
|
def filter(self, qs, value):
|
||||||
if value == "true":
|
if value == "true":
|
||||||
# A document can have more than one tag flagged as an inbox tag
|
return qs.filter(tags__is_inbox_tag=True)
|
||||||
# (nothing enforces uniqueness), so this join can multiply rows.
|
|
||||||
return qs.filter(tags__is_inbox_tag=True).distinct()
|
|
||||||
elif value == "false":
|
elif value == "false":
|
||||||
return qs.exclude(tags__is_inbox_tag=True)
|
return qs.exclude(tags__is_inbox_tag=True)
|
||||||
else:
|
else:
|
||||||
@@ -272,10 +268,6 @@ class CustomFieldsFilter(Filter):
|
|||||||
for _, option in enumerate(options):
|
for _, option in enumerate(options):
|
||||||
if option.get("label").lower().find(value.lower()) != -1:
|
if option.get("label").lower().find(value.lower()) != -1:
|
||||||
option_ids.extend([option.get("id")])
|
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 (
|
return (
|
||||||
qs.filter(custom_fields__field__name__icontains=value)
|
qs.filter(custom_fields__field__name__icontains=value)
|
||||||
| qs.filter(custom_fields__value_text__icontains=value)
|
| qs.filter(custom_fields__value_text__icontains=value)
|
||||||
@@ -288,7 +280,7 @@ class CustomFieldsFilter(Filter):
|
|||||||
| qs.filter(custom_fields__value_document_ids__icontains=value)
|
| qs.filter(custom_fields__value_document_ids__icontains=value)
|
||||||
| qs.filter(custom_fields__value_select__in=option_ids)
|
| qs.filter(custom_fields__value_select__in=option_ids)
|
||||||
| qs.filter(custom_fields__value_long_text__icontains=value)
|
| qs.filter(custom_fields__value_long_text__icontains=value)
|
||||||
).distinct()
|
)
|
||||||
else:
|
else:
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
@@ -1040,31 +1032,6 @@ class ObjectOwnedOrGrantedPermissionsFilter(ObjectPermissionsFilter):
|
|||||||
return objects_with_perms | objects_owned | objects_unowned
|
return objects_with_perms | objects_owned | objects_unowned
|
||||||
|
|
||||||
|
|
||||||
class DocumentPermissionsFilter(BaseFilterBackend):
|
|
||||||
"""
|
|
||||||
A filter backend limiting Document results to those the requesting user
|
|
||||||
owns, are unowned, or has explicit (user- or group-level) view
|
|
||||||
permission on.
|
|
||||||
|
|
||||||
Unlike ``ObjectOwnedOrGrantedPermissionsFilter``, this does not build an
|
|
||||||
``objects_with_perms | objects_owned | objects_unowned`` union of
|
|
||||||
querysets derived from the same base queryset. When that base queryset
|
|
||||||
already carries independent joins on a multi-valued relation (e.g. two
|
|
||||||
separate joins from ``tags__id__all`` filtering on two tags), each
|
|
||||||
OR-ed branch can end up pairing those joins' aliases differently,
|
|
||||||
letting more than one row out of the join's cross product satisfy the
|
|
||||||
combined WHERE -- returning the same document more than once. Filtering
|
|
||||||
via a single ``id__in`` against ``permitted_document_ids`` (a plain
|
|
||||||
subquery, not a join) sidesteps that entirely and is also cheaper than
|
|
||||||
guardian's join-based permission check.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def filter_queryset(self, request, queryset, view):
|
|
||||||
if request.user.is_superuser:
|
|
||||||
return queryset
|
|
||||||
return queryset.filter(id__in=permitted_document_ids(request.user))
|
|
||||||
|
|
||||||
|
|
||||||
class ObjectOwnedPermissionsFilter(ObjectPermissionsFilter):
|
class ObjectOwnedPermissionsFilter(ObjectPermissionsFilter):
|
||||||
"""
|
"""
|
||||||
A filter backend that limits results to those where the requesting user
|
A filter backend that limits results to those where the requesting user
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
import hashlib
|
|
||||||
import json
|
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
import tempfile
|
|
||||||
from itertools import islice
|
from itertools import islice
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING
|
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.contrib.contenttypes.models import ContentType
|
||||||
from django.core import serializers
|
from django.core import serializers
|
||||||
from django.core.management.base import CommandError
|
from django.core.management.base import CommandError
|
||||||
from django.core.serializers.json import DjangoJSONEncoder
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from filelock import FileLock
|
from filelock import FileLock
|
||||||
@@ -34,7 +29,15 @@ if TYPE_CHECKING:
|
|||||||
if settings.AUDIT_LOG_ENABLED:
|
if settings.AUDIT_LOG_ENABLED:
|
||||||
from auditlog.models import LogEntry
|
from auditlog.models import LogEntry
|
||||||
|
|
||||||
from documents.file_handling import delete_empty_directories
|
from documents.export.compression import COMPRESSION_CHOICES
|
||||||
|
from documents.export.compression import COMPRESSION_METHODS
|
||||||
|
from documents.export.compression import ZSTD
|
||||||
|
from documents.export.compression import compression_available
|
||||||
|
from documents.export.compression import level_error
|
||||||
|
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.file_handling import generate_filename
|
||||||
from documents.management.commands.base import PaperlessCommand
|
from documents.management.commands.base import PaperlessCommand
|
||||||
from documents.management.commands.mixins import CryptMixin
|
from documents.management.commands.mixins import CryptMixin
|
||||||
@@ -60,8 +63,6 @@ from documents.settings import EXPORTER_ARCHIVE_NAME
|
|||||||
from documents.settings import EXPORTER_FILE_NAME
|
from documents.settings import EXPORTER_FILE_NAME
|
||||||
from documents.settings import EXPORTER_SHARE_LINK_BUNDLE_NAME
|
from documents.settings import EXPORTER_SHARE_LINK_BUNDLE_NAME
|
||||||
from documents.settings import EXPORTER_THUMBNAIL_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 import version
|
||||||
from paperless.models import ApplicationConfiguration
|
from paperless.models import ApplicationConfiguration
|
||||||
from paperless_mail.models import MailAccount
|
from paperless_mail.models import MailAccount
|
||||||
@@ -84,87 +85,6 @@ def serialize_queryset_batched(
|
|||||||
yield serializers.serialize("python", chunk)
|
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):
|
class Command(CryptMixin, PaperlessCommand):
|
||||||
help = (
|
help = (
|
||||||
"Decrypt and rename all files in our collection into a given target "
|
"Decrypt and rename all files in our collection into a given target "
|
||||||
@@ -276,6 +196,28 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
help="Sets the export zip file name",
|
help="Sets the export zip file name",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--zip-compression",
|
||||||
|
choices=COMPRESSION_CHOICES,
|
||||||
|
default=None,
|
||||||
|
help=(
|
||||||
|
"Compression method for the export zip (requires --zip). "
|
||||||
|
"Default: deflated. 'zstd' requires Python 3.14+ on both the "
|
||||||
|
"exporting and importing machine."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--zip-compression-level",
|
||||||
|
type=int,
|
||||||
|
default=None,
|
||||||
|
help=(
|
||||||
|
"Compression level for the export zip (requires --zip). "
|
||||||
|
"deflated: 0-9, bzip2: 1-9, zstd: -22..22; ignored for "
|
||||||
|
"stored/lzma."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--data-only",
|
"--data-only",
|
||||||
default=False,
|
default=False,
|
||||||
@@ -314,20 +256,13 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
self.passphrase: str | None = options.get("passphrase")
|
self.passphrase: str | None = options.get("passphrase")
|
||||||
self.batch_size: int = options["batch_size"]
|
self.batch_size: int = options["batch_size"]
|
||||||
|
|
||||||
self.files_in_export_dir: set[Path] = set()
|
|
||||||
self.exported_files: set[str] = set()
|
self.exported_files: set[str] = set()
|
||||||
|
|
||||||
# If zipping, save the original target for later and
|
if self.zip_export and (self.compare_checksums or self.compare_json):
|
||||||
# get a temporary directory for the target instead
|
raise CommandError(
|
||||||
temp_dir = None
|
"--compare-checksums and --compare-json have no effect when "
|
||||||
self.original_target = self.target
|
"used with --zip",
|
||||||
if self.zip_export:
|
|
||||||
settings.SCRATCH_DIR.mkdir(parents=True, exist_ok=True)
|
|
||||||
temp_dir = tempfile.TemporaryDirectory(
|
|
||||||
dir=settings.SCRATCH_DIR,
|
|
||||||
prefix="paperless-export",
|
|
||||||
)
|
)
|
||||||
self.target = Path(temp_dir.name).resolve()
|
|
||||||
|
|
||||||
if not self.target.exists():
|
if not self.target.exists():
|
||||||
raise CommandError("That path doesn't exist")
|
raise CommandError("That path doesn't exist")
|
||||||
@@ -338,33 +273,55 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
if not os.access(self.target, os.W_OK):
|
if not os.access(self.target, os.W_OK):
|
||||||
raise CommandError("That path doesn't appear to be writable")
|
raise CommandError("That path doesn't appear to be writable")
|
||||||
|
|
||||||
try:
|
zip_compression: str | None = options["zip_compression"]
|
||||||
# Prevent any ongoing changes in the documents
|
zip_compression_level: int | None = options["zip_compression_level"]
|
||||||
with FileLock(settings.MEDIA_LOCK):
|
|
||||||
self.dump()
|
|
||||||
|
|
||||||
# We've written everything to the temporary directory in this case,
|
if not self.zip_export and (
|
||||||
# now make an archive in the original target, with all files stored
|
zip_compression is not None or zip_compression_level is not None
|
||||||
if self.zip_export and temp_dir is not None:
|
):
|
||||||
shutil.make_archive(
|
raise CommandError(
|
||||||
self.original_target / options["zip_name"],
|
"--zip-compression and --zip-compression-level require --zip",
|
||||||
format="zip",
|
)
|
||||||
root_dir=temp_dir.name,
|
|
||||||
|
compression_method = zip_compression or "deflated"
|
||||||
|
if self.zip_export:
|
||||||
|
if not compression_available(compression_method):
|
||||||
|
if compression_method == "zstd" and ZSTD is None:
|
||||||
|
raise CommandError(
|
||||||
|
"zstd compression requires Python 3.14 or newer",
|
||||||
)
|
)
|
||||||
|
raise CommandError(
|
||||||
|
f"Compression method '{compression_method}' is not "
|
||||||
|
f"available on this Python runtime",
|
||||||
|
)
|
||||||
|
level_msg = level_error(compression_method, zip_compression_level)
|
||||||
|
if level_msg is not None:
|
||||||
|
raise CommandError(level_msg)
|
||||||
|
|
||||||
finally:
|
sink: ExportSink
|
||||||
# Always cleanup the temporary directory, if one was created
|
if self.zip_export:
|
||||||
if self.zip_export and temp_dir is not None:
|
sink = ZipExportSink(
|
||||||
temp_dir.cleanup()
|
self.target,
|
||||||
|
options["zip_name"],
|
||||||
|
delete=self.delete,
|
||||||
|
compression=COMPRESSION_METHODS[compression_method],
|
||||||
|
compresslevel=zip_compression_level,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
sink = DirectoryExportSink(
|
||||||
|
self.target,
|
||||||
|
compare_checksums=self.compare_checksums,
|
||||||
|
compare_json=self.compare_json,
|
||||||
|
delete=self.delete,
|
||||||
|
)
|
||||||
|
|
||||||
def dump(self) -> None:
|
# Prevent any ongoing changes in the documents while exporting
|
||||||
# 1. Take a snapshot of what files exist in the current export folder
|
with FileLock(settings.MEDIA_LOCK), sink:
|
||||||
for x in self.target.glob("**/*"):
|
self.dump(sink)
|
||||||
if x.is_file():
|
|
||||||
self.files_in_export_dir.add(x.resolve())
|
|
||||||
|
|
||||||
# 2. Create manifest, containing all correspondents, types, tags, storage paths
|
def dump(self, sink: ExportSink) -> None:
|
||||||
# note, documents and ui_settings
|
# 1. Create manifest, containing all correspondents, types, tags, storage
|
||||||
|
# paths, note, documents and ui_settings
|
||||||
_excluded_usernames = ["consumer", "AnonymousUser"]
|
_excluded_usernames = ["consumer", "AnonymousUser"]
|
||||||
manifest_key_to_object_query: dict[str, QuerySet[Any]] = {
|
manifest_key_to_object_query: dict[str, QuerySet[Any]] = {
|
||||||
"correspondents": Correspondent.objects.all(),
|
"correspondents": Correspondent.objects.all(),
|
||||||
@@ -427,13 +384,9 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
|
|
||||||
document_manifest: list[dict] = []
|
document_manifest: list[dict] = []
|
||||||
share_link_bundle_manifest: list[dict] = []
|
share_link_bundle_manifest: list[dict] = []
|
||||||
manifest_path = (self.target / "manifest.json").resolve()
|
|
||||||
|
|
||||||
with StreamingManifestWriter(
|
with sink.stream("manifest.json") as handle:
|
||||||
manifest_path,
|
writer = StreamingManifestWriter(handle)
|
||||||
compare_json=self.compare_json,
|
|
||||||
files_in_export_dir=self.files_in_export_dir,
|
|
||||||
) as writer:
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
for key, qs in manifest_key_to_object_query.items():
|
for key, qs in manifest_key_to_object_query.items():
|
||||||
if key == "documents":
|
if key == "documents":
|
||||||
@@ -479,84 +432,55 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
# 3. Export files from each document
|
# 2. Export files from each document
|
||||||
for index, document_dict in enumerate(
|
for document_dict in self.track(
|
||||||
self.track(
|
document_manifest,
|
||||||
document_manifest,
|
description="Exporting documents...",
|
||||||
description="Exporting documents...",
|
total=len(document_manifest),
|
||||||
total=len(document_manifest),
|
|
||||||
),
|
|
||||||
):
|
):
|
||||||
document = document_map[document_dict["pk"]]
|
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)
|
base_name = self.generate_base_name(document)
|
||||||
|
original_arc, thumbnail_arc, archive_arc = (
|
||||||
# 3.2. write filenames into manifest
|
|
||||||
original_target, thumbnail_target, archive_target = (
|
|
||||||
self.generate_document_targets(document, base_name, document_dict)
|
self.generate_document_targets(document, base_name, document_dict)
|
||||||
)
|
)
|
||||||
|
|
||||||
# 3.3. write files to target folder
|
|
||||||
if not self.data_only:
|
if not self.data_only:
|
||||||
self.copy_document_files(
|
self.copy_document_files(
|
||||||
document,
|
document,
|
||||||
original_target,
|
sink,
|
||||||
thumbnail_target,
|
original_arc,
|
||||||
archive_target,
|
thumbnail_arc,
|
||||||
|
archive_arc,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.split_manifest:
|
if self.split_manifest:
|
||||||
self._write_split_manifest(document_dict, document, base_name)
|
self._write_split_manifest(sink, document_dict, document, base_name)
|
||||||
else:
|
else:
|
||||||
writer.write_record(document_dict)
|
writer.write_record(document_dict)
|
||||||
|
|
||||||
for bundle_dict in share_link_bundle_manifest:
|
for bundle_dict in share_link_bundle_manifest:
|
||||||
bundle = share_link_bundle_map[bundle_dict["pk"]]
|
bundle = share_link_bundle_map[bundle_dict["pk"]]
|
||||||
|
bundle_arc = self.generate_share_link_bundle_target(
|
||||||
bundle_target = self.generate_share_link_bundle_target(
|
|
||||||
bundle,
|
bundle,
|
||||||
bundle_dict,
|
bundle_dict,
|
||||||
)
|
)
|
||||||
|
if not self.data_only and bundle_arc is not None:
|
||||||
if not self.data_only and bundle_target is not None:
|
self.copy_share_link_bundle_file(bundle, sink, bundle_arc)
|
||||||
self.copy_share_link_bundle_file(bundle, bundle_target)
|
|
||||||
|
|
||||||
writer.write_record(bundle_dict)
|
writer.write_record(bundle_dict)
|
||||||
|
|
||||||
# 4.2 write version information to target folder
|
writer.close()
|
||||||
extra_metadata_path = (self.target / "metadata.json").resolve()
|
|
||||||
|
# 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]] = {
|
metadata: dict[str, str | int | dict[str, str | int]] = {
|
||||||
"version": version.__full_version_str__,
|
"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:
|
if self.passphrase:
|
||||||
metadata.update(self.get_crypt_params())
|
metadata.update(self.get_crypt_params())
|
||||||
|
sink.add_json(metadata, "metadata.json")
|
||||||
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()
|
|
||||||
|
|
||||||
def generate_base_name(self, document: Document) -> Path:
|
def generate_base_name(self, document: Document) -> Path:
|
||||||
"""
|
"""
|
||||||
@@ -584,73 +508,69 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
document: Document,
|
document: Document,
|
||||||
base_name: Path,
|
base_name: Path,
|
||||||
document_dict: dict,
|
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
|
original_name = base_name
|
||||||
if self.use_folder_prefix:
|
if self.use_folder_prefix:
|
||||||
original_name = Path("originals") / original_name
|
original_name = Path("originals") / original_name
|
||||||
original_target = (self.target / original_name).resolve()
|
original_arc = original_name.as_posix()
|
||||||
document_dict[EXPORTER_FILE_NAME] = str(original_name)
|
document_dict[EXPORTER_FILE_NAME] = original_arc
|
||||||
|
|
||||||
if not self.no_thumbnail:
|
if not self.no_thumbnail:
|
||||||
thumbnail_name = base_name.parent / (base_name.stem + "-thumbnail.webp")
|
thumbnail_name = base_name.parent / (base_name.stem + "-thumbnail.webp")
|
||||||
if self.use_folder_prefix:
|
if self.use_folder_prefix:
|
||||||
thumbnail_name = Path("thumbnails") / thumbnail_name
|
thumbnail_name = Path("thumbnails") / thumbnail_name
|
||||||
thumbnail_target = (self.target / thumbnail_name).resolve()
|
thumbnail_arc = thumbnail_name.as_posix()
|
||||||
document_dict[EXPORTER_THUMBNAIL_NAME] = str(thumbnail_name)
|
document_dict[EXPORTER_THUMBNAIL_NAME] = thumbnail_arc
|
||||||
else:
|
else:
|
||||||
thumbnail_target = None
|
thumbnail_arc = None
|
||||||
|
|
||||||
if not self.no_archive and document.has_archive_version:
|
if not self.no_archive and document.has_archive_version:
|
||||||
archive_name = base_name.parent / (base_name.stem + "-archive.pdf")
|
archive_name = base_name.parent / (base_name.stem + "-archive.pdf")
|
||||||
if self.use_folder_prefix:
|
if self.use_folder_prefix:
|
||||||
archive_name = Path("archive") / archive_name
|
archive_name = Path("archive") / archive_name
|
||||||
archive_target = (self.target / archive_name).resolve()
|
archive_arc = archive_name.as_posix()
|
||||||
document_dict[EXPORTER_ARCHIVE_NAME] = str(archive_name)
|
document_dict[EXPORTER_ARCHIVE_NAME] = archive_arc
|
||||||
else:
|
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(
|
def copy_document_files(
|
||||||
self,
|
self,
|
||||||
document: Document,
|
document: Document,
|
||||||
original_target: Path,
|
sink: ExportSink,
|
||||||
thumbnail_target: Path | None,
|
original_arc: str,
|
||||||
archive_target: Path | None,
|
thumbnail_arc: str | None,
|
||||||
|
archive_arc: str | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Copies files from the document storage location to the specified target location.
|
Hands the document's files to the sink (original, thumbnail, archive).
|
||||||
|
|
||||||
If the document is encrypted, the files are decrypted before copying them to the target location.
|
|
||||||
"""
|
"""
|
||||||
self.check_and_copy(
|
sink.add_file(document.source_path, original_arc, checksum=document.checksum)
|
||||||
document.source_path,
|
|
||||||
document.checksum,
|
|
||||||
original_target,
|
|
||||||
)
|
|
||||||
|
|
||||||
if thumbnail_target:
|
if thumbnail_arc:
|
||||||
self.check_and_copy(document.thumbnail_path, None, thumbnail_target)
|
sink.add_file(document.thumbnail_path, thumbnail_arc)
|
||||||
|
|
||||||
if archive_target:
|
if archive_arc:
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
assert isinstance(document.archive_path, Path)
|
assert isinstance(document.archive_path, Path)
|
||||||
self.check_and_copy(
|
sink.add_file(
|
||||||
document.archive_path,
|
document.archive_path,
|
||||||
document.archive_checksum,
|
archive_arc,
|
||||||
archive_target,
|
checksum=document.archive_checksum,
|
||||||
)
|
)
|
||||||
|
|
||||||
def generate_share_link_bundle_target(
|
def generate_share_link_bundle_target(
|
||||||
self,
|
self,
|
||||||
bundle: ShareLinkBundle,
|
bundle: ShareLinkBundle,
|
||||||
bundle_dict: dict,
|
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:
|
if not bundle.file_path:
|
||||||
return None
|
return None
|
||||||
@@ -666,25 +586,22 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
bundle_dict["fields"]["file_path"] = portable_bundle_path.as_posix()
|
bundle_dict["fields"]["file_path"] = portable_bundle_path.as_posix()
|
||||||
bundle_dict[EXPORTER_SHARE_LINK_BUNDLE_NAME] = export_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(
|
def copy_share_link_bundle_file(
|
||||||
self,
|
self,
|
||||||
bundle: ShareLinkBundle,
|
bundle: ShareLinkBundle,
|
||||||
bundle_target: Path,
|
sink: ExportSink,
|
||||||
|
bundle_arc: str,
|
||||||
) -> None:
|
) -> 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
|
bundle_source_path = bundle.absolute_file_path
|
||||||
if bundle_source_path is None:
|
if bundle_source_path is None:
|
||||||
raise FileNotFoundError(f"Share link bundle {bundle.pk} has no file path")
|
raise FileNotFoundError(f"Share link bundle {bundle.pk} has no file path")
|
||||||
|
|
||||||
self.check_and_copy(
|
sink.add_file(bundle_source_path, bundle_arc)
|
||||||
bundle_source_path,
|
|
||||||
None,
|
|
||||||
bundle_target,
|
|
||||||
)
|
|
||||||
|
|
||||||
def _encrypt_record_inline(self, record: dict) -> None:
|
def _encrypt_record_inline(self, record: dict) -> None:
|
||||||
"""Encrypt sensitive fields in a single record, if passphrase is set."""
|
"""Encrypt sensitive fields in a single record, if passphrase is set."""
|
||||||
@@ -700,6 +617,7 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
|
|
||||||
def _write_split_manifest(
|
def _write_split_manifest(
|
||||||
self,
|
self,
|
||||||
|
sink: ExportSink,
|
||||||
document_dict: dict,
|
document_dict: dict,
|
||||||
document: Document,
|
document: Document,
|
||||||
base_name: Path,
|
base_name: Path,
|
||||||
@@ -721,81 +639,4 @@ class Command(CryptMixin, PaperlessCommand):
|
|||||||
manifest_name = base_name.with_name(f"{base_name.stem}-manifest.json")
|
manifest_name = base_name.with_name(f"{base_name.stem}-manifest.json")
|
||||||
if self.use_folder_prefix:
|
if self.use_folder_prefix:
|
||||||
manifest_name = Path("json") / manifest_name
|
manifest_name = Path("json") / manifest_name
|
||||||
manifest_name = (self.target / manifest_name).resolve()
|
sink.add_json(content, manifest_name.as_posix())
|
||||||
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)
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user