Merge branch 'develop' into feature/eslint-workspace-setup

This commit is contained in:
Ömer Duran 2026-02-24 09:20:32 +01:00
commit 15f005dc14
No known key found for this signature in database
GPG key ID: 2550B0D579890013
159 changed files with 2330 additions and 806 deletions

View file

@ -1,22 +1,27 @@
# Local build files and directories:
/photos/*
/frontend/node_modules/*
/node_modules
/assets/docs
/assets/static/build/*
/assets/facenet
/assets/nasnet
/assets/nsfw
/assets/efficientnet
/assets/imagenet
/assets/resnet
/assets/vision
/assets/models
/storage
/build
/frontend/node_modules/
/node_modules/
/assets/docs/
/assets/static/build/
/assets/facenet/
/assets/nasnet/
/assets/nsfw/
/assets/efficientnet/
/assets/imagenet/
/assets/resnet/
/assets/vision/
/assets/models/
/storage/
/build/
/photoprism
/photoprism-*
/frontend/tests/acceptance/screenshots
/frontend/tests/acceptance/screenshots/
/frontend/tests/screenshots/
/frontend/tests/*.html
/frontend/tests/*.log
/frontend/tests_output/
/frontend/coverage/
/test/
/specs/
/docs/
@ -85,7 +90,7 @@ Thumbs.db
.glide
/tmp/
/internal/tmp/
/TODO.md
/DONE.md
*.override.md
/AGENTS_*
/REPOS.md
/CLAUDE.md

33
.gitignore vendored
View file

@ -32,43 +32,44 @@ venv
.nv
.eslintcache
.gocache
/pro
/portal
/plus
/pro/
/portal/
/plus/
/tmp/
/internal/tmp/
/test/
*-lock.json
/node_modules
/frontend/node_modules/*
/node_modules/
/frontend/node_modules/
/frontend/tests/*.html
/frontend/tests/*.log
/frontend/tests/screenshots
/frontend/tests/screenshots/
/frontend/src/locales/*.mo
/frontend/tests_output
/frontend/tests_output/
frontend/coverage/
**/__screenshots__/
/photoprism
/photoprism-*
/photos/originals/*
/photos/import/*
/storage/*
/build/*
/assets/docs
/assets/facenet
/assets/nasnet
/assets/nsfw
/storage/
/build/
/assets/docs/
/assets/facenet/
/assets/nasnet/
/assets/nsfw/
/assets/static/build/
/assets/static/maps/
/assets/*net
/assets/vision
/assets/vision/
/specs/
/docs/
/bin/
/TODO.md
/DONE.md
*.override.md
/AGENTS_*
/REPOS.md
/CLAUDE.md
/TODO.md
# Files created automatically by editors and/or operating systems:
.DS_Store

View file

@ -1,6 +1,6 @@
# PhotoPrism® — Repository Guidelines
**Last Updated:** February 22, 2026
**Last Updated:** February 23, 2026
## Purpose
@ -18,12 +18,13 @@ This file tells automated coding agents (and humans) where to find the single so
- Packages: `README.md` files under `internal/`, `pkg/`, and `frontend/src/`, e.g. [`internal/photoprism/README.md`](internal/photoprism/README.md), [`internal/photoprism/batch/README.md`](internal/photoprism/batch/README.md), [`internal/config/README.md`](internal/config/README.md), [`internal/server/README.md`](internal/server/README.md), [`internal/api/README.md`](internal/api/README.md), [`internal/thumb/README.md`](internal/thumb/README.md), [`internal/ffmpeg/README.md`](internal/ffmpeg/README.md), and [`frontend/src/common/README.md`](frontend/src/common/README.md).
- Face Detection & Embeddings: [`internal/ai/face/README.md`](internal/ai/face/README.md)
- Vision Config & Engines: [`internal/ai/vision/README.md`](internal/ai/vision/README.md), [`internal/ai/vision/openai/README.md`](internal/ai/vision/openai/README.md), [`internal/ai/vision/ollama/README.md`](internal/ai/vision/ollama/README.md)
- Terminology Glossary: [`GLOSSARY.md`](GLOSSARY.md) (single source for term definitions across specs/docs)
### Local Agent Progress
- Use root-level task files to track progress and handoff notes across sessions/environments:
- `TODO.md` for new/upcoming tasks.
- `DONE.md` for completed tasks.
- `AGENTS_TODO.md` for actionable tasks.
- `AGENTS_DONE.md` for completed tasks.
- These files are local workflow aids and may not exist yet in a given workspace.
> Quick Tip: to inspect GitHub issue details without leaving the terminal, run `curl -s https://api.github.com/repos/photoprism/photoprism/issues/<id>`.
@ -379,6 +380,7 @@ Note: Across our public documentation, official images, and in production, the c
- When introducing new metadata sources (e.g., `SrcOllama`, `SrcOpenAI`), define them in both `internal/entity/src.go` and the frontend lookup tables (`frontend/src/common/util.js`) so UI badges and server priorities stay aligned.
- Vision worker scheduling is controlled via `VisionSchedule` / `VisionFilter` and the `Run` property set in `vision.yml`. Utilities like `vision.FilterModels` and `entity.Photo.ShouldGenerateLabels/Caption` help decide when work is required before loading media files.
- Logging: use the shared logger (`event.Log`) via the package-level `log` variable (see `internal/auth/jwt/logger.go`) instead of direct `fmt.Print*` or ad-hoc loggers.
- Logging terminology: in human-readable log text, prefer canonical runtime terms (`instance`, `service`) and reserve `node` for contract-bound names (`/cluster/nodes`, `Node*`, `PHOTOPRISM_NODE_*`).
- Audit outcomes: import `github.com/photoprism/photoprism/pkg/log/status` and end every `event.Audit*` slice with a single outcome token such as `status.Succeeded`, `status.Failed`, `status.Denied`, or other constants defined there (no additional segments afterwards).
- Error outcomes: when a sanitized error string should be the outcome, call `status.Error(err)` instead of adding a placeholder and passing `clean.Error(err)` manually.
- Cluster registry tests (`internal/service/cluster/registry`) currently rely on a full test config because they persist `entity.Client` rows. They run migrations and seed the SQLite DB, so they are intentionally slow. If you refactor them, consider sharing a single `config.TestConfig()` across subtests or building a lightweight schema harness; do not swap to the minimal config helper unless the tests stop touching the database.

View file

@ -1,6 +1,6 @@
PhotoPrism — Backend CODEMAP
**Last Updated:** February 22, 2026
**Last Updated:** February 23, 2026
Purpose
- Give agents and contributors a fast, reliable map of where things live and how they fit together, so you can add features, fix bugs, and write tests without spelunking.
@ -110,6 +110,9 @@ Media Processing
- Metadata: `internal/meta/*`.
- FFmpeg integration: `internal/ffmpeg/*`.
- HEIF tooling: distribution binaries live under `scripts/dist/install-libheif.sh`; regenerate archives with `make build-libheif-*` (wraps `scripts/dist/build-libheif.sh` for each supported distro/arch) before publishing to `dl.photoprism.app/dist/libheif/`.
- Folder album consistency:
- `internal/entity/folder.go` keeps `FindFolder(...)` unscoped for create/index conflict handling, so a soft-deleted row cannot cause repeated insert/fail/not-found loops.
- `internal/photoprism/index.go` runs `entity.ReconcileOriginalsFolderAlbums(...)` only on forced rescans, after the file walk, so regular indexing stays lightweight while complete rescans repair stale/missing folder albums.
Background Workers
- Scheduler and workers: `internal/workers/*.go` (index, vision, meta, sync, backup, share); started from `internal/commands/start.go`.
@ -122,7 +125,7 @@ Cluster / Portal
- Theme sync logs explicitly when refresh/rotation occurs so operators can trace credential churn in standard log levels.
- Registry/provisioner: `internal/service/cluster/registry/*`, `internal/service/cluster/provisioner/*`.
- Theme endpoint (server): GET `/api/v1/cluster/theme`; client/CLI installs theme only if missing or no `app.js`.
- Portal-only extensions: `portal/internal/portal` (Portal defaults, flags, provisioning options, `/p/*` proxy router).
- Portal-only extensions: `portal/internal/portal` (Portal defaults, flags, provisioning options, `/i/*` proxy router).
- See specs cheat sheet: `specs/portal/README.md`.
Logging & Events

38
GLOSSARY.md Normal file
View file

@ -0,0 +1,38 @@
## PhotoPrism — Glossary
**Last Updated:** February 23, 2026
### Purpose & Scope
- This is the single source of truth for terminology used across `specs/` and related docs.
- Define terms once here and reference this file instead of redefining the same terms in multiple documents.
- Keep technical/API contract names unchanged where required, even when user-facing wording differs.
### Canonical Terms
- **admin** — user or client with elevated authorization scopes/roles.
- **AdvertiseUrl** — internal/service URL that cluster peers use to reach an instance or service.
- **app** — intentional identifier in names/examples (for example `app.js`, `app.kubernetes.io/*`, `photoprism-app`); not the preferred generic runtime role term.
- **client** — OAuth/API client identity and credentials (`ClientID`, `ClientSecret`), and broadly a caller of an API.
- **cluster domain** — DNS domain used to derive cluster defaults (for example portal/instance URLs).
- **cluster UUID** — stable cluster identifier used by provisioning and cluster metadata.
- **instance** — PhotoPrism runtime with role `instance` (a cluster member serving UI/API/media features).
- **Join Token** — bootstrap bearer token used for initial registration (`/api/v1/cluster/nodes/register`).
- **node** — technical identifier used in API/config contracts (for example `/api/v1/cluster/nodes`, `NodeName`, `PHOTOPRISM_NODE_*`, `config/node/...` paths).
- **portal** — PhotoPrism runtime with role `portal`, providing cluster control-plane APIs and routing.
- **service** — PhotoPrism runtime with role `service` (non-instance cluster member focused on service workloads).
- **SiteUrl** — canonical public URL/origin for an instance.
- **tenant** — shared-domain routing ownership label used in path-based URLs such as `/i/<tenant>/...`; typically maps to a registered instance name.
### Writing Rules
- Use **instance**/**instances** for cluster runtime behavior and role language.
- Use **tenant**/**tenants** for shared-domain path ownership and routing semantics.
- Keep **node** where a field name, endpoint, flag/env var, config path, or code contract explicitly requires it.
- Keep **app** only where it is an intentional identifier/example.
- When a term appears ambiguous, link or refer back to this glossary.
### Change Management
- Update this file first when introducing, renaming, or clarifying core terminology.
- When terminology changes, update dependent docs to match these definitions.

View file

@ -100,6 +100,21 @@ show-build:
@echo "$(BUILD_TAG)"
test-all: test acceptance-run-chromium
fmt: fmt-js fmt-go fmt-swag
format-tables: # Format Markdown tables in README.md, AGENTS.md, and CODEMAP.md files.
@set -eu; \
tmp="$$(mktemp)"; \
trap 'rm -f "$$tmp"' EXIT INT TERM; \
find "$(CURDIR)" -maxdepth 1 -type f \( -name 'README.md' -o -name 'AGENTS.md' -o -name 'CODEMAP.md' \) -print0 >> "$$tmp"; \
for dir in internal pkg docker setup; do \
if [ -d "$$dir" ]; then \
find "$$dir" -type f \( -name 'README.md' -o -name 'AGENTS.md' -o -name 'CODEMAP.md' \) -print0 >> "$$tmp"; \
fi; \
done; \
if [ ! -s "$$tmp" ]; then \
echo "No markdown files found for table formatting."; \
exit 0; \
fi; \
xargs -0 npx --yes markdown-table-formatter < "$$tmp"
clean-local: clean-local-config clean-local-cache
upgrade: dep-upgrade-js dep-upgrade
devtools: install-go dep-npm

View file

@ -64,7 +64,7 @@ services:
## OpenID Connect (pre-configured for local tests):
## see https://keycloak.localssl.dev/realms/master/.well-known/openid-configuration
## the seeded "photoprism-develop" client in scripts/sql/mariadb-init.sql
## allows callbacks for /api/v1/oidc/redirect and /p/* paths
## allows callbacks for /api/v1/oidc/redirect and /i/* paths
PHOTOPRISM_OIDC_URI: "https://keycloak.localssl.dev/realms/master"
PHOTOPRISM_OIDC_CLIENT: "photoprism-develop"
PHOTOPRISM_OIDC_SECRET: "9d8351a0-ca01-4556-9c37-85eb634869b9"

View file

@ -1,6 +1,6 @@
PhotoPrism — Frontend CODEMAP
**Last Updated:** February 22, 2026
**Last Updated:** February 23, 2026
Purpose
- Help agents and contributors navigate the Vue 3 + Vuetify 3 app quickly and make safe changes.
@ -40,7 +40,7 @@ Runtime & Plugins
- HTML sanitization: `vue-3-sanitize` + `vue-sanitize-directive`
- Tooltips: `floating-vue`
- Video: HLS.js assigned to `window.Hls`
- PWA: Workbox registers a service worker after config load (see `src/common/pwa.js` and `src/app.js`); scope and registration URL derive from `$config.baseUri` so non-root deployments work. In Portal mode we intentionally skip root-scope (`/`) registration to avoid shared-domain cache interference with instance scopes under `/p/<name>/`. Instance clients under `/p/<name>/` also try to unregister legacy root-scope registrations before registering their scoped worker, so upgrades from older shared-domain setups can recover without manual browser cleanup. Workbox precache rules live in `frontend/webpack.config.js` (see the `GenerateSW` plugin); locale chunks and non-woff2 font variants are excluded there so we dont force every user to download those assets on first visit.
- PWA: Workbox registers a service worker after config load (see `src/common/pwa.js` and `src/app.js`); scope and registration URL derive from `$config.baseUri` so non-root deployments work. In Portal mode we intentionally skip root-scope (`/`) registration to avoid shared-domain cache interference with instance scopes under `/i/<name>/`. Instance clients under `/i/<name>/` also try to unregister legacy root-scope registrations before registering their scoped worker, so upgrades from older shared-domain setups can recover without manual browser cleanup. Workbox precache rules live in `frontend/webpack.config.js` (see the `GenerateSW` plugin); locale chunks and non-woff2 font variants are excluded there so we dont force every user to download those assets on first visit.
- Service worker cleanup: `frontend/src/sw-scope-cleanup.js` provides strict same-scope precache cleanup. `cleanupOutdatedCaches` is disabled in `GenerateSW` to avoid broad cross-scope cache deletion on shared origins.
- WebSocket: `src/common/websocket.js` publishes `websocket.*` events, used by `$session` for client info

View file

@ -60,7 +60,7 @@
"i": "^0.3.7",
"jsdom": "^26.1.0",
"luxon": "^3.7.2",
"maplibre-gl": "^5.18.0",
"maplibre-gl": "^5.19.0",
"memoize-one": "^6.0.0",
"mini-css-extract-plugin": "^2.10.0",
"minimist": "^1.2.8",
@ -3989,9 +3989,9 @@
"license": "ISC"
},
"node_modules/@maplibre/maplibre-gl-style-spec": {
"version": "24.4.1",
"resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-24.4.1.tgz",
"integrity": "sha512-UKhA4qv1h30XT768ccSv5NjNCX+dgfoq2qlLVmKejspPcSQTYD4SrVucgqegmYcKcmwf06wcNAa/kRd0NHWbUg==",
"version": "24.5.0",
"resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-24.5.0.tgz",
"integrity": "sha512-55sPMCtWAZY7r7ftU2at1SsBJfhJyIE5X16Tbl+uFcnTuiCxEuh6839iq/hgjLM8zUEjXdRu2V30bfsYCNB1Qg==",
"license": "ISC",
"dependencies": {
"@mapbox/jsonlint-lines-primitives": "~2.0.2",
@ -6613,9 +6613,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001772",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001772.tgz",
"integrity": "sha512-mIwLZICj+ntVTw4BT2zfp+yu/AqV6GMKfJVJMx3MwPxs+uk/uj2GLl2dH8LQbjiLDX66amCga5nKFyDgRR43kg==",
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"funding": [
{
"type": "opencollective",
@ -10959,9 +10959,9 @@
}
},
"node_modules/maplibre-gl": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.18.0.tgz",
"integrity": "sha512-UtWxPBpHuFvEkM+5FVfcFG9ZKEWZQI6+PZkvLErr8Zs5ux+O7/KQ3JjSUvAfOlMeMgd/77qlHpOw0yHL7JU5cw==",
"version": "5.19.0",
"resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.19.0.tgz",
"integrity": "sha512-REhYUN8gNP3HlcIZS6QU2uy8iovl31cXsrNDkCcqWSQbCkcpdYLczqDz5PVIwNH42UQNyvukjes/RoHPDrOUmQ==",
"license": "BSD-3-Clause",
"dependencies": {
"@mapbox/geojson-rewind": "^0.5.2",

View file

@ -84,7 +84,7 @@
"i": "^0.3.7",
"jsdom": "^26.1.0",
"luxon": "^3.7.2",
"maplibre-gl": "^5.18.0",
"maplibre-gl": "^5.19.0",
"memoize-one": "^6.0.0",
"mini-css-extract-plugin": "^2.10.0",
"minimist": "^1.2.8",

View file

@ -35,7 +35,13 @@ export const serviceWorkerUrl = (scopeBase) => {
// shouldCleanupRootScopeServiceWorker indicates if legacy root-scope workers should be removed.
export const shouldCleanupRootScopeServiceWorker = (scopeBase) => {
return typeof scopeBase === "string" && scopeBase.startsWith("/p/");
if (typeof scopeBase !== "string" || !scopeBase.startsWith("/") || scopeBase === "/") {
return false;
}
// Proxy-routed instance paths include at least two path segments (prefix + tenant),
// e.g. "/<prefix>/<tenant>/" such as "/i/pro-1/" or "/instance/pro-1/".
return scopeBase.split("/").filter(Boolean).length >= 2;
};
// isRootScopeRegistration checks whether a service worker registration controls the root scope.
@ -101,7 +107,7 @@ export const shouldRegisterServiceWorker = (config) => {
const scopeBase = serviceWorkerScopeBase(config?.baseUri);
// Avoid root-scope service workers for the portal UI on shared domains.
// Instances still register workers at /p/<name>/ where cache scopes stay isolated.
// Instances still register workers at /<prefix>/<tenant>/ where cache scopes stay isolated.
return !(config?.values?.portal && scopeBase === "/");
};

View file

@ -446,6 +446,10 @@ div.v-dialog.v-dialog--fullscreen > div.v-card {
font-size: 0.75rem;
}
body .v-table>.v-table__wrapper>table {
border-spacing: 0;
}
.v-table .v-table__wrapper tbody tr td .v-input,
.v-table .v-table__wrapper tbody tr td .v-input .v-field__input {
min-height: auto;
@ -453,6 +457,8 @@ div.v-dialog.v-dialog--fullscreen > div.v-card {
margin: 0;
}
/* Menu */
.v-input.v-select.v-input--density-compact > .v-input__control > .v-field .v-select__selection,
.v-menu > .v-overlay__content > .v-list > .v-list-item.v-list-item--density-compact > .v-list-item__content > .v-list-item-title {
font-size: 0.75rem;

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language: af\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Groep"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klasterknoop"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Gebruikers"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: \n"
"Language: ar\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "المجموعة العنقودية"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "العقدة العنقودية"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "المستخدمون"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: be\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Кластар"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Кластарны вузел"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Карыстальнікі"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Bulgarian <https://translate.photoprism.app/projects/photoprism/frontend/bg/>\n"
"Language: bg\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Клъстер"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Възел на клъстера"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Потребители"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language-Team: \n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Clúster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nod de clúster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Usuaris"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Czech <https://translate.photoprism.app/projects/photoprism/frontend/cs/>\n"
"Language: cs\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Uzel clusteru"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Uživatelé"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Danish <https://translate.photoprism.app/projects/photoprism/frontend/da/>\n"
"Language: da\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Klynge"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klyngeknudepunkt"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Brugere"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: German <https://translate.photoprism.app/projects/photoprism/frontend/de/>\n"
"Language: de\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Cluster-Knoten"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Benutzer"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: el\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Συστάδα"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Κόμβος συστάδας"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Χρήστες"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Spanish <https://translate.photoprism.app/projects/photoprism/frontend/es/>\n"
"Language: es\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Grupo"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nodo del clúster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3888,7 +3888,7 @@ msgstr "Usuarios"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: et\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Klaster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klastrisõlm"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Kasutajad"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: eu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Multzoa"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klotxeko nodoa"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Erabiltzaileak"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language-Team: \n"
"Language: fa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "خوشه"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "گره خوشه‌ای"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "کاربران"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: fi\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Klusteri"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klusterin solmu"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Käyttäjät"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-28 23:02+0000\n"
"Last-Translator: jean-louis67 <jean-louis.frenkel@orange.fr>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: French <https://translate.photoprism.app/projects/photoprism/frontend/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nœud de grappe"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Utilisateurs"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language: ga\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>6 && n<11) ? 3 : 4;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Braisle"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nód Cnuasaigh"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Úsáideoirí"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Hebrew <https://translate.photoprism.app/projects/photoprism/frontend/he/>\n"
"Language: he\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3));\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "אֶשׁכּוֹל"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "צומת אשכול"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "משתמשים"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language-Team: Hindi <https://translate.photoprism.app/projects/photoprism/frontend/hi/>\n"
"Language: hi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "झुंड"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "क्लस्टर नोड"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "उपयोगकर्ताओं"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language-Team: \n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Klaster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klaster čvor"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Korisnici"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: photoprism\n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Hungarian <https://translate.photoprism.app/projects/photoprism/frontend/hu/>\n"
"Language: hu\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
#: src/locales.js:272
msgid "{0} appended action"
@ -849,7 +849,7 @@ msgstr "Klaszter"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klaszter csomópont"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3886,7 +3886,7 @@ msgstr "Felhasználók"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Indonesian <https://translate.photoprism.app/projects/photoprism/frontend/id/>\n"
"Language: id\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Simpul Cluster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Pengguna"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Italian <https://translate.photoprism.app/projects/photoprism/frontend/it/>\n"
"Language: it\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nodo cluster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Utenti"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language-Team: Japanese <https://translate.photoprism.app/projects/photoprism/frontend/ja/>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "クラスター"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "クラスターノード"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "ユーザー"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Korean <https://translate.photoprism.app/projects/photoprism/frontend/ko/>\n"
"Language: ko\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "클러스터"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "클러스터 노드"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "사용자"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"Language-Team: Kurdish <https://translate.photoprism.app/projects/photoprism/frontend/ku/>\n"
"Language: ku\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Kom"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Girêka Komê"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Bikarhêner"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Lithuanian <https://translate.photoprism.app/projects/photoprism/frontend/lt/>\n"
"Language: lt\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Klasteris"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klasterio mazgas"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Vartotojai"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2026-01-14 21:02+0000\n"
"Last-Translator: Janis Eglitis <alfabeta.lv@gmail.com>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: none\n"
"Language: lv\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 5.15.1\n"
"X-Generator: Weblate 5.16\n"
#: src/locales.js:272
msgid "{0} appended action"
@ -846,7 +846,7 @@ msgstr "Klasteris"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klastera mezgls"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -2383,7 +2383,7 @@ msgstr "Nav rezultātu"
#: src/component/navigation.vue:335
msgid "No server connection"
msgstr ""
msgstr "Nav servera savienojuma"
#: src/component/service/upload.vue:160
msgid "No servers configured."
@ -3832,7 +3832,7 @@ msgstr "Augšupielādes, kas var saturēt šādus attēlus, tiks automātiski no
#: src/page/cluster/nodes.vue:246
msgid "URL"
msgstr ""
msgstr "URL"
#: src/page/settings/advanced.vue:355
msgid "Use Presets"
@ -3883,7 +3883,7 @@ msgstr "Lietotāji"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: \n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Kluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nod Klaster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Pengguna"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Norwegian Bokmål <https://translate.photoprism.app/projects/photoprism/frontend/nb_NO/>\n"
"Language: nb\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Klynge"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klyngeknutepunkt"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Brukere"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Dutch <https://translate.photoprism.app/projects/photoprism/frontend/nl/>\n"
"Language: nl\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Clusternode"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Gebruikers"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Polish <https://translate.photoprism.app/projects/photoprism/frontend/pl/>\n"
"Language: pl\n"
@ -10,7 +10,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -849,7 +849,7 @@ msgstr "Klaster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Węzeł klastra"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3886,7 +3886,7 @@ msgstr "Użytkownicy"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"Language-Team: Portuguese <https://translate.photoprism.app/projects/photoprism/frontend/pt/>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Aglomerado"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nó do cluster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Usuários"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate.photoprism.app/projects/photoprism/frontend/pt_BR/>\n"
"Language: pt_BR\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Grupo"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nó do cluster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Usuários"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2026-01-16 12:18+0000\n"
"Last-Translator: Lulu195 <bimasakti.ro@gmail.com>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Romanian <https://translate.photoprism.app/projects/photoprism/frontend/ro/>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.15.2\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Cluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nod de cluster"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Utilizatori"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Russian <https://translate.photoprism.app/projects/photoprism/frontend/ru/>\n"
"Language: ru\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: usercopypaste\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Кластер"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Кластерный узел"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Пользователи"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Slovak <https://translate.photoprism.app/projects/photoprism/frontend/sk/>\n"
"Language: sk\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Klaster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Uzol klastra"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Používatelia"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: sl\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Grozd"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Vozlišče gruče"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Uporabniki"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Swedish <https://translate.photoprism.app/projects/photoprism/frontend/sv/>\n"
"Language: sv\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Kluster"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Klusternod"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Användare"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:07+0000\n"
"Last-Translator: Admin <hello@photoprism.app>\n"
"Language-Team: \n"
"Language: th\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "กลุ่ม"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "โหนดคลัสเตอร์"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "ผู้ใช้"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Turkish <https://translate.photoprism.app/projects/photoprism/frontend/tr/>\n"
"Language: tr\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Küme"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Küme Düğümü"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Kullanıcılar"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: \n"
"Language: uk\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "Кластер"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Кластерний вузол"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "Користувачі"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -2,13 +2,13 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language: vi\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -847,7 +847,7 @@ msgstr "Cụm"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "Nút cụm"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3884,7 +3884,7 @@ msgstr "Người dùng"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Chinese (Simplified) <https://translate.photoprism.app/projects/photoprism/frontend/zh_Hans/>\n"
"Language: zh\n"
@ -11,7 +11,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "群组"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "集群节点"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3889,7 +3889,7 @@ msgstr "用户"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

View file

@ -3,15 +3,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: ci@photoprism.app\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-27 11:38+0000\n"
"Last-Translator: Google Cloud Translation Basic <noreply-mt-google-translate@weblate.org>\n"
"PO-Revision-Date: 2026-02-23 16:05+0000\n"
"Last-Translator: DeepL <noreply-mt-deepl@weblate.org>\n"
"Language-Team: Chinese (Traditional) <https://translate.photoprism.app/projects/photoprism/frontend/zh_Hant/>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13.3\n"
"X-Generator: Weblate 5.16\n"
"Generated-By: easygettext\n"
#: src/locales.js:272
@ -850,7 +850,7 @@ msgstr "簇"
#: src/model/cluster-node.js:80
msgid "Cluster Node"
msgstr ""
msgstr "叢集節點"
#: src/component/photo/edit/files.vue:140
#: src/component/photo/edit/files.vue:141
@ -3887,7 +3887,7 @@ msgstr "使用者"
#: src/page/cluster/nodes.vue:252
msgid "UUID"
msgstr ""
msgstr "UUID"
#: src/component/photo/view/cards.vue:114
#: src/component/photo/view/cards.vue:239

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