Compare commits

..

5 Commits

Author SHA1 Message Date
bwees
97329d488b chore: code review changes from @shenlong-tanwen 2025-06-24 09:18:11 -05:00
bwees
c6cd4dce78 fix: include port in baseURL 2025-06-24 09:17:42 -05:00
bwees
0a90f490f2 cleanly migrate the server URL value to a JSON array (ie coming from 1.135.0 app) 2025-06-23 17:55:41 -05:00
bwees
88e008c4c2 fix: remove duplicate endpoints 2025-06-23 17:44:51 -05:00
bwees
99a9914da2 feat: ios widget supports alternate server URLs 2025-06-23 17:41:55 -05:00
1952 changed files with 51128 additions and 130357 deletions

View File

@@ -11,8 +11,8 @@ services:
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules - open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules
- server_node_modules:/workspaces/immich/server/node_modules - server_node_modules:/workspaces/immich/server/node_modules
- web_node_modules:/workspaces/immich/web/node_modules - web_node_modules:/workspaces/immich/web/node_modules
- ${UPLOAD_LOCATION}/photos:/data - ${UPLOAD_LOCATION}/photos:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION}/photos/upload:/data/upload - ${UPLOAD_LOCATION}/photos/upload:/workspaces/immich/server/upload/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
database: database:

View File

@@ -73,8 +73,10 @@ install_dependencies() {
log "Installing dependencies" log "Installing dependencies"
( (
cd "${IMMICH_WORKSPACE}" || exit 1 cd "${IMMICH_WORKSPACE}" || exit 1
export CI=1 FROZEN=1 OFFLINE=1 run_cmd make install-server
run_cmd make setup-web-dev setup-server-dev run_cmd make install-sdk
run_cmd make build-sdk
run_cmd make install-web
) )
log "" log ""
} }

View File

@@ -3,7 +3,6 @@ services:
build: build:
target: dev-container-server target: dev-container-server
env_file: !reset [] env_file: !reset []
hostname: immich-dev
environment: environment:
- IMMICH_SERVER_URL=http://127.0.0.1:2283/ - IMMICH_SERVER_URL=http://127.0.0.1:2283/
volumes: !override volumes: !override
@@ -13,8 +12,8 @@ services:
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules - open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules
- server_node_modules:/workspaces/immich/server/node_modules - server_node_modules:/workspaces/immich/server/node_modules
- web_node_modules:/workspaces/immich/web/node_modules - web_node_modules:/workspaces/immich/web/node_modules
- ${UPLOAD_LOCATION:-upload1-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data - ${UPLOAD_LOCATION:-upload1-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION:-upload2-devcontainer-volume}${UPLOAD_LOCATION:+/photos/upload}:/data/upload - ${UPLOAD_LOCATION:-upload2-devcontainer-volume}${UPLOAD_LOCATION:+/photos/upload}:/workspaces/immich/server/upload/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
immich-web: immich-web:
@@ -22,7 +21,7 @@ services:
immich-machine-learning: immich-machine-learning:
env_file: !reset [] env_file: !reset []
database: database:
env_file: !reset [] env_file: !reset []
environment: !override environment: !override
@@ -31,7 +30,7 @@ services:
POSTGRES_DB: ${DB_DATABASE_NAME-immich} POSTGRES_DB: ${DB_DATABASE_NAME-immich}
POSTGRES_INITDB_ARGS: '--data-checksums' POSTGRES_INITDB_ARGS: '--data-checksums'
POSTGRES_HOST_AUTH_METHOD: md5 POSTGRES_HOST_AUTH_METHOD: md5
volumes: volumes:
- ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data - ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data
redis: redis:

View File

@@ -1,41 +1,33 @@
.vscode/ .vscode/
.github/ .github/
.git/ .git/
.env*
*.log
*.tmp
*.temp
**/Dockerfile
**/node_modules/
**/.pnpm-store/
**/dist/
**/coverage/
**/build/
design/ design/
docker/ docker/
!docker/scripts !docker/scripts
docs/ docs/
!docs/package.json
!docs/package-lock.json
e2e/ e2e/
!e2e/package.json
!e2e/package-lock.json
fastlane/ fastlane/
machine-learning/ machine-learning/
misc/ misc/
mobile/ mobile/
open-api/typescript-sdk/build/ cli/coverage/
!open-api/typescript-sdk/package.json cli/dist/
!open-api/typescript-sdk/package-lock.json cli/node_modules/
open-api/typescript-sdk/build/
open-api/typescript-sdk/node_modules/
server/coverage/
server/node_modules/
server/upload/ server/upload/
server/src/queries server/src/queries
server/dist/
server/www/ server/www/
web/node_modules/
web/coverage/
web/.svelte-kit web/.svelte-kit
web/build/
web/.env

6
.gitattributes vendored
View File

@@ -12,12 +12,6 @@ mobile/lib/**/*.drift.dart linguist-generated=true
mobile/drift_schemas/main/drift_schema_*.json -diff -merge mobile/drift_schemas/main/drift_schema_*.json -diff -merge
mobile/drift_schemas/main/drift_schema_*.json linguist-generated=true mobile/drift_schemas/main/drift_schema_*.json linguist-generated=true
mobile/lib/infrastructure/repositories/db.repository.steps.dart -diff -merge
mobile/lib/infrastructure/repositories/db.repository.steps.dart linguist-generated=true
mobile/test/drift/main/generated/** -diff -merge
mobile/test/drift/main/generated/** linguist-generated=true
open-api/typescript-sdk/fetch-client.ts -diff -merge open-api/typescript-sdk/fetch-client.ts -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true open-api/typescript-sdk/fetch-client.ts linguist-generated=true

2
.github/.nvmrc vendored
View File

@@ -1 +1 @@
22.17.1 22.16.0

View File

@@ -1,4 +0,0 @@
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

6
.github/package-lock.json generated vendored
View File

@@ -9,9 +9,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.6.2", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {

View File

@@ -58,7 +58,7 @@ jobs:
contents: read contents: read
# Skip when PR from a fork # Skip when PR from a fork
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && needs.pre-job.outputs.should_run == 'true' }} if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && needs.pre-job.outputs.should_run == 'true' }}
runs-on: mich runs-on: macos-14
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@@ -66,40 +66,24 @@ jobs:
ref: ${{ inputs.ref || github.sha }} ref: ${{ inputs.ref || github.sha }}
persist-credentials: false persist-credentials: false
- name: Create the Keystore
env:
KEY_JKS: ${{ secrets.KEY_JKS }}
working-directory: ./mobile
run: printf "%s" $KEY_JKS | base64 -d > android/key.jks
- uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with: with:
distribution: 'zulu' distribution: 'zulu'
java-version: '17' java-version: '17'
cache: 'gradle'
- name: Restore Gradle Cache
id: cache-gradle-restore
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.android/sdk
mobile/android/.gradle
mobile/.dart_tool
key: build-mobile-gradle-${{ runner.os }}-main
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
cache: true cache: true
- name: Setup Android SDK - name: Create the Keystore
uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2 env:
with: KEY_JKS: ${{ secrets.KEY_JKS }}
packages: '' working-directory: ./mobile
run: echo $KEY_JKS | base64 -d > android/key.jks
- name: Get Packages - name: Get Packages
working-directory: ./mobile working-directory: ./mobile
@@ -119,30 +103,12 @@ jobs:
ALIAS: ${{ secrets.ALIAS }} ALIAS: ${{ secrets.ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
IS_MAIN: ${{ github.ref == 'refs/heads/main' }}
run: | run: |
if [[ $IS_MAIN == 'true' ]]; then flutter build apk --release
flutter build apk --release flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
else
flutter build apk --debug --split-per-abi --target-platform android-arm64
fi
- name: Publish Android Artifact - name: Publish Android Artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with: with:
name: release-apk-signed name: release-apk-signed
path: mobile/build/app/outputs/flutter-apk/*.apk path: mobile/build/app/outputs/flutter-apk/*.apk
- name: Save Gradle Cache
id: cache-gradle-save
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4
if: github.ref == 'refs/heads/main'
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.android/sdk
mobile/android/.gradle
mobile/.dart_tool
key: ${{ steps.cache-gradle-restore.outputs.cache-primary-key }}

View File

@@ -38,9 +38,6 @@ jobs:
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Prepare SDK - name: Prepare SDK
run: npm ci --prefix ../open-api/typescript-sdk/ run: npm ci --prefix ../open-api/typescript-sdk/
- name: Build SDK - name: Build SDK
@@ -70,7 +67,7 @@ jobs:
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
@@ -99,7 +96,7 @@ jobs:
type=raw,value=latest,enable=${{ github.event_name == 'release' }} type=raw,value=latest,enable=${{ github.event_name == 'release' }}
- name: Build and push image - name: Build and push image
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0
with: with:
file: cli/Dockerfile file: cli/Dockerfile
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64

View File

@@ -50,7 +50,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@@ -63,7 +63,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -76,6 +76,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh # ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with: with:
category: '/language:${{matrix.language}}' category: '/language:${{matrix.language}}'

View File

@@ -131,7 +131,7 @@ jobs:
tag-suffix: '-rocm' tag-suffix: '-rocm'
platforms: linux/amd64 platforms: linux/amd64
runner-mapping: '{"linux/amd64": "mich"}' runner-mapping: '{"linux/amd64": "mich"}'
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@129aeda75a450666ce96e8bc8126652e717917a7 # multi-runner-build-workflow-0.1.1 uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@094bfb927b8cd75b343abaac27b3241be0fccfe9 # multi-runner-build-workflow-0.1.0
permissions: permissions:
contents: read contents: read
actions: read actions: read
@@ -154,7 +154,7 @@ jobs:
name: Build and Push Server name: Build and Push Server
needs: pre-job needs: pre-job
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }} if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@129aeda75a450666ce96e8bc8126652e717917a7 # multi-runner-build-workflow-0.1.1 uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@094bfb927b8cd75b343abaac27b3241be0fccfe9 # multi-runner-build-workflow-0.1.0
permissions: permissions:
contents: read contents: read
actions: read actions: read
@@ -177,7 +177,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 - uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}
@@ -188,6 +188,6 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 - uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}

View File

@@ -18,7 +18,7 @@ jobs:
permissions: permissions:
contents: read contents: read
outputs: outputs:
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.found_paths.outputs.open-api == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@@ -32,8 +32,6 @@ jobs:
- 'docs/**' - 'docs/**'
workflow: workflow:
- '.github/workflows/docs-build.yml' - '.github/workflows/docs-build.yml'
open-api:
- 'open-api/immich-openapi-specs.json'
- name: Check if we should force jobs to run - name: Check if we should force jobs to run
id: should_force id: should_force
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'release' || github.ref_name == 'main' }}" >> "$GITHUB_OUTPUT" run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'release' || github.ref_name == 'main' }}" >> "$GITHUB_OUTPUT"
@@ -59,8 +57,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './docs/.nvmrc' node-version-file: './docs/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run npm install - name: Run npm install
run: npm ci run: npm ci

View File

@@ -32,8 +32,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Fix formatting - name: Fix formatting
run: make install-all && make format-all run: make install-all && make format-all

View File

@@ -1,13 +0,0 @@
name: Org Checks
on:
pull_request_review:
pull_request:
jobs:
check-approvals:
name: Check for Team/Admin Review
uses: immich-app/devtools/.github/workflows/required-approval.yml@main
permissions:
pull-requests: read
contents: read

View File

@@ -14,7 +14,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Require PR to have a changelog label - name: Require PR to have a changelog label
uses: mheap/github-action-required-labels@8afbe8ae6ab7647d0c9f0cfa7c2f939650d22509 # v5.5.1 uses: mheap/github-action-required-labels@fb29a14a076b0f74099f6198f77750e8fc236016 # v5.5.0
with: with:
mode: exactly mode: exactly
count: 1 count: 1

View File

@@ -100,7 +100,7 @@ jobs:
name: release-apk-signed name: release-apk-signed
- name: Create draft release - name: Create draft release
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2 uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
with: with:
draft: true draft: true
tag_name: ${{ env.IMMICH_VERSION }} tag_name: ${{ env.IMMICH_VERSION }}

View File

@@ -25,8 +25,6 @@ jobs:
with: with:
node-version-file: './open-api/typescript-sdk/.nvmrc' node-version-file: './open-api/typescript-sdk/.nvmrc'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Install deps - name: Install deps
run: npm ci run: npm ci
- name: Build - name: Build

View File

@@ -42,9 +42,6 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: read contents: read
defaults:
run:
working-directory: ./mobile
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@@ -52,29 +49,34 @@ jobs:
persist-credentials: false persist-credentials: false
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
- name: Install dependencies - name: Install dependencies
run: dart pub get run: dart pub get
working-directory: ./mobile
- name: Install DCM - name: Install DCM
uses: CQLabs/setup-dcm@8697ae0790c0852e964a6ef1d768d62a6675481a # v2.0.1 run: |
with: sudo apt-get update
github-token: ${{ secrets.GITHUB_TOKEN }} wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg
version: auto echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
working-directory: ./mobile sudo apt-get update
sudo apt-get install dcm
- name: Generate translation file - name: Generate translation file
run: make translation run: make translation
working-directory: ./mobile
- name: Run Build Runner - name: Run Build Runner
run: make build run: make build
working-directory: ./mobile
- name: Generate platform API - name: Generate platform API
run: make pigeon run: make pigeon
working-directory: ./mobile
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
@@ -90,22 +92,25 @@ jobs:
env: env:
CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }} CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
run: | run: |
echo "ERROR: Generated files not up to date! Run 'make build' and 'make pigeon' inside the mobile directory" echo "ERROR: Generated files not up to date! Run make_build inside the mobile directory"
echo "Changed files: ${CHANGED_FILES}" echo "Changed files: ${CHANGED_FILES}"
exit 1 exit 1
- name: Run dart analyze - name: Run dart analyze
run: dart analyze --fatal-infos run: dart analyze --fatal-infos
working-directory: ./mobile
- name: Run dart format - name: Run dart format
run: make format run: dart format lib/ --set-exit-if-changed
working-directory: ./mobile
- name: Run dart custom_lint - name: Run dart custom_lint
run: dart run custom_lint run: dart run custom_lint
working-directory: ./mobile
# TODO: Use https://github.com/CQLabs/dcm-action
- name: Run DCM - name: Run DCM
run: dcm analyze lib --fatal-style --fatal-warnings run: dcm analyze lib
working-directory: ./mobile
zizmor: zizmor:
name: zizmor name: zizmor
@@ -129,7 +134,7 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload SARIF file - name: Upload SARIF file
uses: github/codeql-action/upload-sarif@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with: with:
sarif_file: results.sarif sarif_file: results.sarif
category: zizmor category: zizmor

View File

@@ -84,8 +84,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run npm install - name: Run npm install
run: npm ci run: npm ci
@@ -127,8 +125,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Setup typescript-sdk - name: Setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -174,8 +170,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Setup typescript-sdk - name: Setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -214,8 +208,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run setup typescript-sdk - name: Run setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -257,8 +249,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run setup typescript-sdk - name: Run setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -292,8 +282,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Install dependencies - name: Install dependencies
run: npm --prefix=web ci run: npm --prefix=web ci
@@ -338,8 +326,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run setup typescript-sdk - name: Run setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -383,8 +369,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run npm install - name: Run npm install
run: npm ci run: npm ci
@@ -418,8 +402,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run setup typescript-sdk - name: Run setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -468,8 +450,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run setup typescript-sdk - name: Run setup typescript-sdk
run: npm ci && npm run build run: npm ci && npm run build
@@ -499,7 +479,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 - uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}
@@ -516,7 +496,7 @@ jobs:
persist-credentials: false persist-credentials: false
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
@@ -588,8 +568,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './.github/.nvmrc' node-version-file: './.github/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run npm install - name: Run npm install
run: npm ci run: npm ci
@@ -609,7 +587,7 @@ jobs:
persist-credentials: false persist-credentials: false
- name: Run ShellCheck - name: Run ShellCheck
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0 uses: ludeeus/action-shellcheck@master
with: with:
ignore_paths: >- ignore_paths: >-
**/open-api/** **/open-api/**
@@ -631,8 +609,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Install server dependencies - name: Install server dependencies
run: npm --prefix=server ci run: npm --prefix=server ci
@@ -668,7 +644,7 @@ jobs:
contents: read contents: read
services: services:
postgres: postgres:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3@sha256:ec713143dca1a426eba2e03707c319e2ec3cc9d304ef767f777f8e297dee820c image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3
env: env:
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres POSTGRES_USER: postgres
@@ -694,8 +670,6 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Install server dependencies - name: Install server dependencies
run: npm ci run: npm ci

View File

@@ -38,7 +38,7 @@ jobs:
exit 1 exit 1
fi fi
- name: Find Pull Request - name: Find Pull Request
uses: juliangruber/find-pull-request-action@952b3bb1ddb2dcc0aa3479e98bb1c2d1a922f096 # v1.10.0 uses: juliangruber/find-pull-request-action@48b6133aa6c826f267ebd33aa2d29470f9d9e7d0 # v1.9.0
id: find-pr id: find-pr
with: with:
branch: chore/translations branch: chore/translations
@@ -52,6 +52,6 @@ jobs:
permissions: {} permissions: {}
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4 - uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}

1
.gitignore vendored
View File

@@ -24,4 +24,3 @@ mobile/android/fastlane/report.xml
mobile/ios/fastlane/report.xml mobile/ios/fastlane/report.xml
vite.config.js.timestamp-* vite.config.js.timestamp-*
.pnpm-store

4
.vscode/launch.json vendored
View File

@@ -7,7 +7,7 @@
"restart": true, "restart": true,
"port": 9231, "port": 9231,
"name": "Immich API Server", "name": "Immich API Server",
"remoteRoot": "/usr/src/app/server", "remoteRoot": "/usr/src/app",
"localRoot": "${workspaceFolder}/server" "localRoot": "${workspaceFolder}/server"
}, },
{ {
@@ -16,7 +16,7 @@
"restart": true, "restart": true,
"port": 9230, "port": 9230,
"name": "Immich Workers", "name": "Immich Workers",
"remoteRoot": "/usr/src/app/server", "remoteRoot": "/usr/src/app",
"localRoot": "${workspaceFolder}/server" "localRoot": "${workspaceFolder}/server"
} }
] ]

View File

@@ -1,33 +1,27 @@
dev: dev:
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --remove-orphans docker compose -f ./docker/docker-compose.dev.yml up --remove-orphans || make dev-down
dev-down: dev-down:
docker compose -f ./docker/docker-compose.dev.yml down --remove-orphans docker compose -f ./docker/docker-compose.dev.yml down --remove-orphans
dev-update: dev-update:
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
dev-scale: dev-scale:
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans docker compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans
.PHONY: e2e .PHONY: e2e
e2e: e2e:
@trap 'make e2e-down' EXIT; COMPOSE_BAKE=true docker compose -f ./e2e/docker-compose.yml up --build -V --remove-orphans docker compose -f ./e2e/docker-compose.yml up --build -V --remove-orphans
e2e-update:
@trap 'make e2e-down' EXIT; COMPOSE_BAKE=true docker compose -f ./e2e/docker-compose.yml up --build -V --remove-orphans
e2e-down:
docker compose -f ./e2e/docker-compose.yml down --remove-orphans
prod: prod:
@trap 'make prod-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.prod.yml up --build -V --remove-orphans docker compose -f ./docker/docker-compose.prod.yml up --build -V --remove-orphans
prod-down: prod-down:
docker compose -f ./docker/docker-compose.prod.yml down --remove-orphans docker compose -f ./docker/docker-compose.prod.yml down --remove-orphans
prod-scale: prod-scale:
@trap 'make prod-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.prod.yml up --build -V --scale immich-server=3 --scale immich-microservices=3 --remove-orphans docker compose -f ./docker/docker-compose.prod.yml up --build -V --scale immich-server=3 --scale immich-microservices=3 --remove-orphans
.PHONY: open-api .PHONY: open-api
open-api: open-api:
@@ -54,8 +48,6 @@ audit-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix
install-%: install-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) i npm --prefix $(subst sdk,open-api/typescript-sdk,$*) i
ci-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) ci
build-cli: build-sdk build-cli: build-sdk
build-web: build-sdk build-web: build-sdk
build-%: install-% build-%: install-%
@@ -90,7 +82,6 @@ test-medium-dev:
build-all: $(foreach M,$(filter-out e2e .github,$(MODULES)),build-$M) ; build-all: $(foreach M,$(filter-out e2e .github,$(MODULES)),build-$M) ;
install-all: $(foreach M,$(MODULES),install-$M) ; install-all: $(foreach M,$(MODULES),install-$M) ;
ci-all: $(foreach M,$(filter-out .github,$(MODULES)),ci-$M) ;
check-all: $(foreach M,$(filter-out sdk cli docs .github,$(MODULES)),check-$M) ; check-all: $(foreach M,$(filter-out sdk cli docs .github,$(MODULES)),check-$M) ;
lint-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),lint-$M) ; lint-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),lint-$M) ;
format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ; format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ;
@@ -99,12 +90,9 @@ hygiene-all: lint-all format-all check-all sql audit-all;
test-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),test-$M) ; test-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),test-$M) ;
clean: clean:
find . -name "node_modules" -type d -prune -exec rm -rf {} + find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
find . -name "dist" -type d -prune -exec rm -rf '{}' + find . -name "dist" -type d -prune -exec rm -rf '{}' +
find . -name "build" -type d -prune -exec rm -rf '{}' + find . -name "build" -type d -prune -exec rm -rf '{}' +
find . -name "svelte-kit" -type d -prune -exec rm -rf '{}' + find . -name "svelte-kit" -type d -prune -exec rm -rf '{}' +
command -v docker >/dev/null 2>&1 && docker compose -f ./docker/docker-compose.dev.yml rm -v -f || true docker compose -f ./docker/docker-compose.dev.yml rm -v -f || true
command -v docker >/dev/null 2>&1 && docker compose -f ./e2e/docker-compose.yml rm -v -f || true docker compose -f ./e2e/docker-compose.yml rm -v -f || true
setup-server-dev: install-server
setup-web-dev: install-sdk build-sdk install-web

View File

@@ -1 +1 @@
22.17.1 22.16.0

View File

@@ -1,2 +0,0 @@
#!/usr/bin/env node
import '../dist/index.js';

569
cli/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.2.76", "version": "2.2.72",
"description": "Command Line Interface (CLI) for Immich", "description": "Command Line Interface (CLI) for Immich",
"type": "module", "type": "module",
"exports": "./dist/index.js", "exports": "./dist/index.js",
"bin": { "bin": {
"immich": "./bin/immich" "immich": "dist/index.js"
}, },
"license": "GNU Affero General Public License version 3", "license": "GNU Affero General Public License version 3",
"keywords": [ "keywords": [
@@ -21,13 +21,13 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9", "@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1", "@types/mock-fs": "^4.13.1",
"@types/node": "^22.16.5", "@types/node": "^22.15.31",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0", "byte-size": "^9.0.0",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
"commander": "^12.0.0", "commander": "^12.0.0",
"eslint": "^9.14.0", "eslint": "^9.14.0",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^59.0.0", "eslint-plugin-unicorn": "^59.0.0",
"globals": "^16.0.0", "globals": "^16.0.0",
@@ -36,7 +36,7 @@
"prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-organize-imports": "^4.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"typescript-eslint": "^8.28.0", "typescript-eslint": "^8.28.0",
"vite": "^7.0.0", "vite": "^6.0.0",
"vite-tsconfig-paths": "^5.0.0", "vite-tsconfig-paths": "^5.0.0",
"vitest": "^3.0.0", "vitest": "^3.0.0",
"vitest-fetch-mock": "^0.4.0", "vitest-fetch-mock": "^0.4.0",
@@ -69,6 +69,6 @@
"micromatch": "^4.0.8" "micromatch": "^4.0.8"
}, },
"volta": { "volta": {
"node": "22.17.1" "node": "22.16.0"
} }
} }

View File

@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" { provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.52.1" version = "4.52.0"
constraints = "4.52.1" constraints = "4.52.0"
hashes = [ hashes = [
"h1:2lHvafwGbLdmc9lYkuJFw3nsInaQjRpjX/JfIRKmq/M=", "h1:2BEJyXJtYC4B4nda/WCYUmuJYDaYk88F8t1pwPzr0iQ=",
"h1:596JomwjrtUrOSreq9NNCS+rj70+jOV+0pfja5MXiTI=", "h1:4IASk5SESeWKQ7JU0+M7KApuF5mZyklvwMXPBabim3c=",
"h1:7mBOA5TVAIt3qAwPXKCtE0RSYeqij9v30mnksuBbpEg=", "h1:5ImZxxALSnWfH/4EXw/wFirSmk5Tr0ACmcysy51AafE=",
"h1:ELVgzh4kHKBCYdL+2A8JjWS0E1snLUN3Mmz3Vo6qSfw=", "h1:6TJ3dxLSin4ZKBJLsZDn95H2ZYnGm8S7GGHvvXuuMQU=",
"h1:FGGM5yLFf72g3kSXM3LAN64Gf/AkXr5WCmhixgnP+l4=", "h1:IzTUjg9kQ4N3qizP9CjYLeHwjsuGgtxwXvfUQWyOLcA=",
"h1:JupkJbQALcIVoMhHImrLeLDsQR1ET7VJLGC7ONxjqGU=", "h1:NTaOQfYINA0YTG/V1/9+SYtgX1it63+cBugj4WK4FWc=",
"h1:KsaE4JNq+1uV1nJsuTcYar/8lyY6zKS5UBEpfYg3wvc=", "h1:PXH48LuJn329sCfMXprdMDk51EZaWFyajVvS03qhQLs=",
"h1:NHZ5RJIzQDLhie/ykl3uI6UPfNQR9Lu5Ti7JPR6X904=", "h1:Pi5M+GeoMSN2eJ6QnIeXjBf19O+rby/74CfB2ocpv20=",
"h1:NfAuMbn6LQPLDtJhbzO1MX9JMIGLMa8K6CpekvtsuX8=", "h1:ShXZ2ZjBvm3thfoPPzPT8+OhyismnydQVkUAfI8X12w=",
"h1:e+vNKokamDsp/kJvFr2pRudzwEz2r49iZ/oSggw+1LY=", "h1:WQ9hu0Wge2msBbODfottCSKgu8oKUrw4Opz+fDPVVHk=",
"h1:jnb4VdfNZ79I3yj7Q8x+JmOT+FxbfjjRfrF0dL0yCW8=", "h1:Z5yXML2DE0uH9UU+M0ut9JMQAORcwVZz1CxBHzeBmao=",
"h1:kmF//O539d7NuHU7qIxDj7Wz4eJmLKFiI5glwQivldU=", "h1:jqI2qKknpleS3JDSplyGYHMu0u9K/tor1ZOjFwDgEMk=",
"h1:s6XriaKwOgV4jvKAGPXkrxhhOQxpNU5dceZwi9Z/1k8=", "h1:kgfutDh14Q5nw4eg6qGFamFxIiY8Ae0FPKRBLDOzpcI=",
"h1:wt3WBEBAeSGTlC9OlnTlAALxRiK4SQgLy0KgBIS7qzs=", "h1:zCAO7GZmfYhWb+i6TfqlqhMeDyPZWGio2IzEzAh3YTs=",
"zh:2fb95e1d3229b9b6c704e1a413c7481c60f139780d9641f657b6eb9b633b90f2", "zh:19be1a91c982b902c42aba47766860dfa5dc151eed1e95fd39ca642229381ef0",
"zh:379c7680983383862236e9e6e720c3114195c40526172188e88d0ffcf50dfe2e", "zh:1de451c4d1ecf7efbe67b6dace3426ba810711afdd644b0f1b870364c8ae91f8",
"zh:55533beb6cfc02d22ffda8cba8027bc2c841bb172cd637ed0d28323d41395f8f", "zh:352b4a2120173298622e669258744554339d959ac3a95607b117a48ee4a83238",
"zh:5abd70760e4eb1f37a1c307cbd2989ea7c9ba0afb93818c67c1d363a31f75703", "zh:3c6f1346d9154afbd2d558fabb4b0150fc8d559aa961254144fe1bc17fe6032f",
"zh:699f1c8cd66129176fe659ebf0e6337632a8967a28d2630b6ae5948665c0c2ae", "zh:4c4c92d53fb535b1e0eff26f222bbd627b97d3b4c891ec9c321268676d06152f",
"zh:69c15acd73c451e89de6477059cda2f3ec200b48ae4b9ff3646c4d389fd3205e", "zh:53276f68006c9ceb7cdb10a6ccf91a5c1eadd1407a28edb5741e84e88d7e29e8",
"zh:6e02b687de21b844f8266dff99e93e7c61fc8eb688f4bbb23803caceb251839e", "zh:7925a97773948171a63d4f65bb81ee92fd6d07a447e36012977313293a5435c9",
"zh:7a51d17b87ed87b7bebf2ad9fc7c3a74f16a1b44eee92c779c08eb89258c0496", "zh:7dfb0a4496cfe032437386d0a2cd9229a1956e9c30bd920923c141b0f0440060",
"zh:88ad84436837b0f55302f22748505972634e87400d6902260fd6b7ba1610f937",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:8d46c3d9f4f7ad20ac6ef01daa63f4e30a2d16dcb1bb5c7c7ee3dc6be38e9ca1", "zh:8d4aa79f0a414bb4163d771063c70cd991c8fac6c766e685bac2ee12903c5bd6",
"zh:913d64e72a4929dae1d4793e2004f4f9a58b138ea337d9d94fa35cafbf06550a", "zh:a67540c13565616a7e7e51ee9366e88b0dc60046e1d75c72680e150bd02725bb",
"zh:c8d93cf86e2e49f6cec665cfe78b82c144cce15a8b2e30f343385fadd1251849", "zh:a936383a4767f5393f38f622e92bf2d0c03fe04b69c284951f27345766c7b31b",
"zh:cc4f69397d9bc34a528a5609a024c3a48f54f21616c0008792dd417297add955", "zh:d4887d73c466ff036eecf50ad6404ba38fd82ea4855296b1846d244b0f13c380",
"zh:df99cdb8b064aad35ffea77e645cf6541d0b1b2ebc51b6d26c42031de60ab69e", "zh:e9093c8bd5b6cd99c81666e315197791781b8f93afa14fc2e0f732d1bb2a44b7",
"zh:efd3b3f1ec59a37f635aa1d4efcf178734c2fcf8ddb0d56ea690bec342da8672",
] ]
} }

View File

@@ -5,7 +5,7 @@ terraform {
required_providers { required_providers {
cloudflare = { cloudflare = {
source = "cloudflare/cloudflare" source = "cloudflare/cloudflare"
version = "4.52.1" version = "4.52.0"
} }
} }
} }

View File

@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" { provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.52.1" version = "4.52.0"
constraints = "4.52.1" constraints = "4.52.0"
hashes = [ hashes = [
"h1:2lHvafwGbLdmc9lYkuJFw3nsInaQjRpjX/JfIRKmq/M=", "h1:2BEJyXJtYC4B4nda/WCYUmuJYDaYk88F8t1pwPzr0iQ=",
"h1:596JomwjrtUrOSreq9NNCS+rj70+jOV+0pfja5MXiTI=", "h1:4IASk5SESeWKQ7JU0+M7KApuF5mZyklvwMXPBabim3c=",
"h1:7mBOA5TVAIt3qAwPXKCtE0RSYeqij9v30mnksuBbpEg=", "h1:5ImZxxALSnWfH/4EXw/wFirSmk5Tr0ACmcysy51AafE=",
"h1:ELVgzh4kHKBCYdL+2A8JjWS0E1snLUN3Mmz3Vo6qSfw=", "h1:6TJ3dxLSin4ZKBJLsZDn95H2ZYnGm8S7GGHvvXuuMQU=",
"h1:FGGM5yLFf72g3kSXM3LAN64Gf/AkXr5WCmhixgnP+l4=", "h1:IzTUjg9kQ4N3qizP9CjYLeHwjsuGgtxwXvfUQWyOLcA=",
"h1:JupkJbQALcIVoMhHImrLeLDsQR1ET7VJLGC7ONxjqGU=", "h1:NTaOQfYINA0YTG/V1/9+SYtgX1it63+cBugj4WK4FWc=",
"h1:KsaE4JNq+1uV1nJsuTcYar/8lyY6zKS5UBEpfYg3wvc=", "h1:PXH48LuJn329sCfMXprdMDk51EZaWFyajVvS03qhQLs=",
"h1:NHZ5RJIzQDLhie/ykl3uI6UPfNQR9Lu5Ti7JPR6X904=", "h1:Pi5M+GeoMSN2eJ6QnIeXjBf19O+rby/74CfB2ocpv20=",
"h1:NfAuMbn6LQPLDtJhbzO1MX9JMIGLMa8K6CpekvtsuX8=", "h1:ShXZ2ZjBvm3thfoPPzPT8+OhyismnydQVkUAfI8X12w=",
"h1:e+vNKokamDsp/kJvFr2pRudzwEz2r49iZ/oSggw+1LY=", "h1:WQ9hu0Wge2msBbODfottCSKgu8oKUrw4Opz+fDPVVHk=",
"h1:jnb4VdfNZ79I3yj7Q8x+JmOT+FxbfjjRfrF0dL0yCW8=", "h1:Z5yXML2DE0uH9UU+M0ut9JMQAORcwVZz1CxBHzeBmao=",
"h1:kmF//O539d7NuHU7qIxDj7Wz4eJmLKFiI5glwQivldU=", "h1:jqI2qKknpleS3JDSplyGYHMu0u9K/tor1ZOjFwDgEMk=",
"h1:s6XriaKwOgV4jvKAGPXkrxhhOQxpNU5dceZwi9Z/1k8=", "h1:kgfutDh14Q5nw4eg6qGFamFxIiY8Ae0FPKRBLDOzpcI=",
"h1:wt3WBEBAeSGTlC9OlnTlAALxRiK4SQgLy0KgBIS7qzs=", "h1:zCAO7GZmfYhWb+i6TfqlqhMeDyPZWGio2IzEzAh3YTs=",
"zh:2fb95e1d3229b9b6c704e1a413c7481c60f139780d9641f657b6eb9b633b90f2", "zh:19be1a91c982b902c42aba47766860dfa5dc151eed1e95fd39ca642229381ef0",
"zh:379c7680983383862236e9e6e720c3114195c40526172188e88d0ffcf50dfe2e", "zh:1de451c4d1ecf7efbe67b6dace3426ba810711afdd644b0f1b870364c8ae91f8",
"zh:55533beb6cfc02d22ffda8cba8027bc2c841bb172cd637ed0d28323d41395f8f", "zh:352b4a2120173298622e669258744554339d959ac3a95607b117a48ee4a83238",
"zh:5abd70760e4eb1f37a1c307cbd2989ea7c9ba0afb93818c67c1d363a31f75703", "zh:3c6f1346d9154afbd2d558fabb4b0150fc8d559aa961254144fe1bc17fe6032f",
"zh:699f1c8cd66129176fe659ebf0e6337632a8967a28d2630b6ae5948665c0c2ae", "zh:4c4c92d53fb535b1e0eff26f222bbd627b97d3b4c891ec9c321268676d06152f",
"zh:69c15acd73c451e89de6477059cda2f3ec200b48ae4b9ff3646c4d389fd3205e", "zh:53276f68006c9ceb7cdb10a6ccf91a5c1eadd1407a28edb5741e84e88d7e29e8",
"zh:6e02b687de21b844f8266dff99e93e7c61fc8eb688f4bbb23803caceb251839e", "zh:7925a97773948171a63d4f65bb81ee92fd6d07a447e36012977313293a5435c9",
"zh:7a51d17b87ed87b7bebf2ad9fc7c3a74f16a1b44eee92c779c08eb89258c0496", "zh:7dfb0a4496cfe032437386d0a2cd9229a1956e9c30bd920923c141b0f0440060",
"zh:88ad84436837b0f55302f22748505972634e87400d6902260fd6b7ba1610f937",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:8d46c3d9f4f7ad20ac6ef01daa63f4e30a2d16dcb1bb5c7c7ee3dc6be38e9ca1", "zh:8d4aa79f0a414bb4163d771063c70cd991c8fac6c766e685bac2ee12903c5bd6",
"zh:913d64e72a4929dae1d4793e2004f4f9a58b138ea337d9d94fa35cafbf06550a", "zh:a67540c13565616a7e7e51ee9366e88b0dc60046e1d75c72680e150bd02725bb",
"zh:c8d93cf86e2e49f6cec665cfe78b82c144cce15a8b2e30f343385fadd1251849", "zh:a936383a4767f5393f38f622e92bf2d0c03fe04b69c284951f27345766c7b31b",
"zh:cc4f69397d9bc34a528a5609a024c3a48f54f21616c0008792dd417297add955", "zh:d4887d73c466ff036eecf50ad6404ba38fd82ea4855296b1846d244b0f13c380",
"zh:df99cdb8b064aad35ffea77e645cf6541d0b1b2ebc51b6d26c42031de60ab69e", "zh:e9093c8bd5b6cd99c81666e315197791781b8f93afa14fc2e0f732d1bb2a44b7",
"zh:efd3b3f1ec59a37f635aa1d4efcf178734c2fcf8ddb0d56ea690bec342da8672",
] ]
} }

View File

@@ -5,7 +5,7 @@ terraform {
required_providers { required_providers {
cloudflare = { cloudflare = {
source = "cloudflare/cloudflare" source = "cloudflare/cloudflare"
version = "4.52.1" version = "4.52.0"
} }
} }
} }

View File

@@ -16,7 +16,7 @@ name: immich-dev
services: services:
immich-server: immich-server:
container_name: immich_server container_name: immich_server
command: ['immich-dev'] command: ['/usr/src/app/bin/immich-dev']
image: immich-server-dev:latest image: immich-server-dev:latest
# extends: # extends:
# file: hwaccel.transcoding.yml # file: hwaccel.transcoding.yml
@@ -27,11 +27,11 @@ services:
target: dev target: dev
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- ../server:/usr/src/app/server - ../server:/usr/src/app
- ../open-api:/usr/src/app/open-api - ../open-api:/usr/src/open-api
- ${UPLOAD_LOCATION}/photos:/data - ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
- ${UPLOAD_LOCATION}/photos/upload:/data/upload - ${UPLOAD_LOCATION}/photos/upload:/usr/src/app/upload/upload
- /usr/src/app/server/node_modules - /usr/src/app/node_modules
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
env_file: env_file:
- .env - .env
@@ -69,20 +69,19 @@ services:
# Needed for rootless docker setup, see https://github.com/moby/moby/issues/45919 # Needed for rootless docker setup, see https://github.com/moby/moby/issues/45919
# user: 0:0 # user: 0:0
build: build:
context: ../ context: ../web
dockerfile: web/Dockerfile command: ['/usr/src/app/bin/immich-web']
command: ['immich-web']
env_file: env_file:
- .env - .env
ports: ports:
- 3000:3000 - 3000:3000
- 24678:24678 - 24678:24678
volumes: volumes:
- ../web:/usr/src/app/web - ../web:/usr/src/app
- ../i18n:/usr/src/app/i18n - ../i18n:/usr/src/i18n
- ../open-api/:/usr/src/app/open-api/ - ../open-api/:/usr/src/open-api/
# - ../../ui:/usr/ui # - ../../ui:/usr/ui
- /usr/src/app/web/node_modules - /usr/src/app/node_modules
ulimits: ulimits:
nofile: nofile:
soft: 1048576 soft: 1048576
@@ -117,13 +116,13 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:facc1d2c3462975c34e10fccb167bfa92b0e0dbd992fc282c29a61c3243afb11 image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
database: database:
container_name: immich_postgres container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
env_file: env_file:
- .env - .env
environment: environment:
@@ -135,7 +134,6 @@ services:
- ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data - ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data
ports: ports:
- 5432:5432 - 5432:5432
shm_size: 128mb
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics # set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
# immich-prometheus: # immich-prometheus:
# container_name: immich_prometheus # container_name: immich_prometheus

View File

@@ -20,7 +20,7 @@ services:
context: ../ context: ../
dockerfile: server/Dockerfile dockerfile: server/Dockerfile
volumes: volumes:
- ${UPLOAD_LOCATION}/photos:/data - ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
env_file: env_file:
- .env - .env
@@ -56,14 +56,14 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:facc1d2c3462975c34e10fccb167bfa92b0e0dbd992fc282c29a61c3243afb11 image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
database: database:
container_name: immich_postgres container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
env_file: env_file:
- .env - .env
environment: environment:
@@ -75,7 +75,6 @@ services:
- ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data - ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data
ports: ports:
- 5432:5432 - 5432:5432
shm_size: 128mb
restart: always restart: always
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics # set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
@@ -83,7 +82,7 @@ services:
container_name: immich_prometheus container_name: immich_prometheus
ports: ports:
- 9090:9090 - 9090:9090
image: prom/prometheus@sha256:63805ebb8d2b3920190daf1cb14a60871b16fd38bed42b857a3182bc621f4996 image: prom/prometheus@sha256:9abc6cf6aea7710d163dbb28d8eeb7dc5baef01e38fa4cd146a406dd9f07f70d
volumes: volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus - prometheus-data:/prometheus
@@ -95,7 +94,7 @@ services:
command: ['./run.sh', '-disable-reporting'] command: ['./run.sh', '-disable-reporting']
ports: ports:
- 3000:3000 - 3000:3000
image: grafana/grafana:12.0.2-ubuntu@sha256:0512d81cdeaaff0e370a9aa66027b465d1f1f04379c3a9c801a905fabbdbc7a5 image: grafana/grafana:12.0.1-ubuntu@sha256:65575bb9c761335e2ff30e364f21d38632e3b2e75f5f81d83cc92f44b9bbc055
volumes: volumes:
- grafana-data:/var/lib/grafana - grafana-data:/var/lib/grafana

View File

@@ -18,7 +18,7 @@ services:
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes: volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data - ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
env_file: env_file:
- .env - .env
@@ -49,14 +49,14 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:facc1d2c3462975c34e10fccb167bfa92b0e0dbd992fc282c29a61c3243afb11 image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
database: database:
container_name: immich_postgres container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment: environment:
POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME} POSTGRES_USER: ${DB_USERNAME}
@@ -67,7 +67,6 @@ services:
volumes: volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always restart: always
volumes: volumes:

View File

@@ -1 +1 @@
22.17.1 22.16.0

View File

@@ -180,7 +180,7 @@ services:
... ...
volumes: volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data - ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
+ - originals:/usr/src/app/originals + - originals:/usr/src/app/originals
... ...
@@ -490,7 +490,7 @@ You can also scan the Postgres database file structure for errors:
<details> <details>
<summary>Scan for file structure errors</summary> <summary>Scan for file structure errors</summary>
```bash ```bash
docker exec -it immich_postgres pg_amcheck --username=<DB_USERNAME> --heapallindexed --parent-check --rootdescend --progress --all --install-missing docker exec -it immich_postgres pg_amcheck --username=postgres --heapallindexed --parent-check --rootdescend --progress --all --install-missing
``` ```
A normal result will end something like this and return with an exit code of `0`: A normal result will end something like this and return with an exit code of `0`:

View File

@@ -57,7 +57,7 @@ Then please follow the steps in the following section for restoring the database
<TabItem value="Linux system" label="Linux system" default> <TabItem value="Linux system" label="Linux system" default>
```bash title='Backup' ```bash title='Backup'
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz" docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > "/path/to/backup/dump.sql.gz"
``` ```
```bash title='Restore' ```bash title='Restore'
@@ -79,7 +79,7 @@ docker compose up -d # Start remainder of Immich apps
<TabItem value="Windows system (PowerShell)" label="Windows system (PowerShell)"> <TabItem value="Windows system (PowerShell)" label="Windows system (PowerShell)">
```powershell title='Backup' ```powershell title='Backup'
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>)) [System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres))
``` ```
```powershell title='Restore' ```powershell title='Restore'
@@ -150,10 +150,12 @@ for more info read the [release notes](https://github.com/immich-app/immich/rele
- Preview images (small thumbnails and large previews) for each asset and thumbnails for recognized faces. - Preview images (small thumbnails and large previews) for each asset and thumbnails for recognized faces.
- Stored in `UPLOAD_LOCATION/thumbs/<userID>`. - Stored in `UPLOAD_LOCATION/thumbs/<userID>`.
- **Encoded Assets:** - **Encoded Assets:**
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed. - Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`. - Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
- **Postgres** - **Postgres**
- The Immich database containing all the information to allow the system to function properly. - The Immich database containing all the information to allow the system to function properly.
**Note:** This folder will only appear to users who have made the changes mentioned in [v1.102.0](https://github.com/immich-app/immich/discussions/8930) (an optional, non-mandatory change) or who started with this version. **Note:** This folder will only appear to users who have made the changes mentioned in [v1.102.0](https://github.com/immich-app/immich/discussions/8930) (an optional, non-mandatory change) or who started with this version.
- Stored in `DB_DATA_LOCATION`. - Stored in `DB_DATA_LOCATION`.
@@ -199,6 +201,7 @@ When you turn off the storage template engine, it will leave the assets in `UPLO
- Temporarily located in `UPLOAD_LOCATION/upload/<userID>`. - Temporarily located in `UPLOAD_LOCATION/upload/<userID>`.
- Transferred to `UPLOAD_LOCATION/library/<userID>` upon successful upload. - Transferred to `UPLOAD_LOCATION/library/<userID>` upon successful upload.
- **Postgres** - **Postgres**
- The Immich database containing all the information to allow the system to function properly. - The Immich database containing all the information to allow the system to function properly.
**Note:** This folder will only appear to users who have made the changes mentioned in [v1.102.0](https://github.com/immich-app/immich/discussions/8930) (an optional, non-mandatory change) or who started with this version. **Note:** This folder will only appear to users who have made the changes mentioned in [v1.102.0](https://github.com/immich-app/immich/discussions/8930) (an optional, non-mandatory change) or who started with this version.
- Stored in `DB_DATA_LOCATION`. - Stored in `DB_DATA_LOCATION`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -46,12 +46,6 @@ services:
When a new asset is uploaded it kicks off a series of jobs, which include metadata extraction, thumbnail generation, machine learning tasks, and storage template migration, if enabled. To view the status of a job navigate to the Administration -> Jobs page. When a new asset is uploaded it kicks off a series of jobs, which include metadata extraction, thumbnail generation, machine learning tasks, and storage template migration, if enabled. To view the status of a job navigate to the Administration -> Jobs page.
Additionally, some jobs run on a schedule, which is every night at midnight. This schedule, with the exception of [External Libraries](/docs/features/libraries) scanning, cannot be changed.
<img src={require('./img/admin-jobs.webp').default} width="60%" title="Admin jobs" /> <img src={require('./img/admin-jobs.webp').default} width="60%" title="Admin jobs" />
Additionally, some jobs (such as memories generation) run on a schedule, which is every night at midnight by default. To change when they run or enable/disable a job navigate to System Settings -> [Nightly Tasks Settings](https://my.immich.app/admin/system-settings?isOpen=nightly-tasks).
<img src={require('./img/admin-nightly-tasks.webp').default} width="60%" title="Admin nightly tasks" />
:::note
Some jobs ([External Libraries](/docs/features/libraries) scanning, Database Dump) are configured in their own sections in System Settings.
:::

View File

@@ -20,6 +20,7 @@ Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an i
Before enabling OAuth in Immich, a new client application needs to be configured in the 3rd-party authentication server. While the specifics of this setup vary from provider to provider, the general approach should be the same. Before enabling OAuth in Immich, a new client application needs to be configured in the 3rd-party authentication server. While the specifics of this setup vary from provider to provider, the general approach should be the same.
1. Create a new (Client) Application 1. Create a new (Client) Application
1. The **Provider** type should be `OpenID Connect` or `OAuth2` 1. The **Provider** type should be `OpenID Connect` or `OAuth2`
2. The **Client type** should be `Confidential` 2. The **Client type** should be `Confidential`
3. The **Application** type should be `Web` 3. The **Application** type should be `Web`
@@ -28,6 +29,7 @@ Before enabling OAuth in Immich, a new client application needs to be configured
2. Configure Redirect URIs/Origins 2. Configure Redirect URIs/Origins
The **Sign-in redirect URIs** should include: The **Sign-in redirect URIs** should include:
- `app.immich:///oauth-callback` - for logging in with OAuth from the [Mobile App](/docs/features/mobile-app.mdx) - `app.immich:///oauth-callback` - for logging in with OAuth from the [Mobile App](/docs/features/mobile-app.mdx)
- `http://DOMAIN:PORT/auth/login` - for logging in with OAuth from the Web Client - `http://DOMAIN:PORT/auth/login` - for logging in with OAuth from the Web Client
- `http://DOMAIN:PORT/user-settings` - for manually linking OAuth in the Web Client - `http://DOMAIN:PORT/user-settings` - for manually linking OAuth in the Web Client
@@ -35,17 +37,21 @@ Before enabling OAuth in Immich, a new client application needs to be configured
Redirect URIs should contain all the domains you will be using to access Immich. Some examples include: Redirect URIs should contain all the domains you will be using to access Immich. Some examples include:
Mobile Mobile
- `app.immich:///oauth-callback` (You **MUST** include this for iOS and Android mobile apps to work properly) - `app.immich:///oauth-callback` (You **MUST** include this for iOS and Android mobile apps to work properly)
Localhost Localhost
- `http://localhost:2283/auth/login` - `http://localhost:2283/auth/login`
- `http://localhost:2283/user-settings` - `http://localhost:2283/user-settings`
Local IP Local IP
- `http://192.168.0.200:2283/auth/login` - `http://192.168.0.200:2283/auth/login`
- `http://192.168.0.200:2283/user-settings` - `http://192.168.0.200:2283/user-settings`
Hostname Hostname
- `https://immich.example.com/auth/login` - `https://immich.example.com/auth/login`
- `https://immich.example.com/user-settings` - `https://immich.example.com/user-settings`
@@ -62,9 +68,8 @@ Once you have a new OAuth client application configured, Immich can be configure
| Scope | string | openid email profile | Full list of scopes to send with the request (space delimited) | | Scope | string | openid email profile | Full list of scopes to send with the request (space delimited) |
| Signing Algorithm | string | RS256 | The algorithm used to sign the id token (examples: RS256, HS256) | | Signing Algorithm | string | RS256 | The algorithm used to sign the id token (examples: RS256, HS256) |
| Storage Label Claim | string | preferred_username | Claim mapping for the user's storage label**¹** | | Storage Label Claim | string | preferred_username | Claim mapping for the user's storage label**¹** |
| Role Claim | string | immich_role | Claim mapping for the user's role. (should return "user" or "admin")**¹** |
| Storage Quota Claim | string | immich_quota | Claim mapping for the user's storage**¹** | | Storage Quota Claim | string | immich_quota | Claim mapping for the user's storage**¹** |
| Default Storage Quota (GiB) | number | 0 | Default quota for user without storage quota claim (empty for unlimited quota) | | Default Storage Quota (GiB) | number | 0 | Default quota for user without storage quota claim (Enter 0 for unlimited quota) |
| Button Text | string | Login with OAuth | Text for the OAuth button on the web | | Button Text | string | Login with OAuth | Text for the OAuth button on the web |
| Auto Register | boolean | true | When true, will automatically register a user the first time they sign in | | Auto Register | boolean | true | When true, will automatically register a user the first time they sign in |
| [Auto Launch](#auto-launch) | boolean | false | When true, will skip the login page and automatically start the OAuth login process | | [Auto Launch](#auto-launch) | boolean | false | When true, will skip the login page and automatically start the OAuth login process |
@@ -106,89 +111,6 @@ Immich has a route (`/api/oauth/mobile-redirect`) that is already configured to
## Example Configuration ## Example Configuration
<details>
<summary>Authelia Example</summary>
### Authelia Example
Here's an example of OAuth configured for Authelia:
This assumes there exist an attribute `immichquota` in the user schema, which is used to set the user's storage quota in Immich.
The configuration concerning the quota is optional.
```yaml
authentication_backend:
ldap:
# The LDAP server configuration goes here.
# See: https://www.authelia.com/c/ldap
attributes:
extra:
immichquota: # The attribute name from LDAP
name: 'immich_quota'
multi_valued: false
value_type: 'integer'
identity_providers:
oidc:
## The other portions of the mandatory OpenID Connect 1.0 configuration go here.
## See: https://www.authelia.com/c/oidc
claims_policies:
immich_policy:
custom_claims:
immich_quota:
attribute: 'immich_quota'
scopes:
immich_scope:
claims:
- 'immich_quota'
clients:
- client_id: 'immich'
client_name: 'Immich'
# https://www.authelia.com/integration/openid-connect/frequently-asked-questions/#how-do-i-generate-a-client-identifier-or-client-secret
client_secret: $pbkdf2-sha512$310000$c8p78n7pUMln0jzvd4aK4Q$JNRBzwAo0ek5qKn50cFzzvE9RXV88h1wJn5KGiHrD0YKtZaR/nCb2CJPOsKaPK0hjf.9yHxzQGZziziccp6Yng'
public: false
require_pkce: false
redirect_uris:
- 'https://example.immich.app/auth/login'
- 'https://example.immich.app/user-settings'
- 'app.immich:///oauth-callback'
scopes:
- 'openid'
- 'profile'
- 'email'
- 'immich_scope'
claims_policy: 'immich_policy'
response_types:
- 'code'
grant_types:
- 'authorization_code'
id_token_signed_response_alg: 'RS256'
userinfo_signed_response_alg: 'RS256'
token_endpoint_auth_method: 'client_secret_post'
```
Configuration of OAuth in Immich System Settings
| Setting | Value |
| ---------------------------------- | ------------------------------------------------------------------- |
| Issuer URL | `https://example.immich.app/.well-known/openid-configuration` |
| Client ID | immich |
| Client Secret | 0v89FXkQOWO\***\*\*\*\*\***\*\*\***\*\*\*\*\***mprbvXD549HH6s1iw... |
| Token Endpoint Auth Method | client_secret_post |
| Scope | openid email profile immich_scope |
| ID Token Signed Response Algorithm | RS256 |
| Userinfo Signed Response Algorithm | RS256 |
| Storage Label Claim | uid |
| Storage Quota Claim | immich_quota |
| Default Storage Quota (GiB) | 0 (empty for unlimited quota) |
| Button Text | Sign in with Authelia (optional) |
| Auto Register | Enabled (optional) |
| Auto Launch | Enabled (optional) |
| Mobile Redirect URI Override | Disable |
| Mobile Redirect URI | |
</details>
<details> <details>
<summary>Authentik Example</summary> <summary>Authentik Example</summary>
@@ -211,7 +133,7 @@ Configuration of OAuth in Immich System Settings
| Signing Algorithm | RS256 | | Signing Algorithm | RS256 |
| Storage Label Claim | preferred_username | | Storage Label Claim | preferred_username |
| Storage Quota Claim | immich_quota | | Storage Quota Claim | immich_quota |
| Default Storage Quota (GiB) | 0 (empty for unlimited quota) | | Default Storage Quota (GiB) | 0 (0 for unlimited quota) |
| Button Text | Sign in with Authentik (optional) | | Button Text | Sign in with Authentik (optional) |
| Auto Register | Enabled (optional) | | Auto Register | Enabled (optional) |
| Auto Launch | Enabled (optional) | | Auto Launch | Enabled (optional) |
@@ -242,7 +164,7 @@ Configuration of OAuth in Immich System Settings
| Signing Algorithm | RS256 | | Signing Algorithm | RS256 |
| Storage Label Claim | preferred_username | | Storage Label Claim | preferred_username |
| Storage Quota Claim | immich_quota | | Storage Quota Claim | immich_quota |
| Default Storage Quota (GiB) | 0 (empty for unlimited quota) | | Default Storage Quota (GiB) | 0 (0 for unlimited quota) |
| Button Text | Sign in with Google (optional) | | Button Text | Sign in with Google (optional) |
| Auto Register | Enabled (optional) | | Auto Register | Enabled (optional) |
| Auto Launch | Enabled | | Auto Launch | Enabled |

View File

@@ -2,17 +2,16 @@
The `immich-server` docker image comes preinstalled with an administrative CLI (`immich-admin`) that supports the following commands: The `immich-server` docker image comes preinstalled with an administrative CLI (`immich-admin`) that supports the following commands:
| Command | Description | | Command | Description |
| ------------------------ | ------------------------------------------------------------- | | ------------------------ | ------------------------------------- |
| `help` | Display help | | `help` | Display help |
| `reset-admin-password` | Reset the password for the admin user | | `reset-admin-password` | Reset the password for the admin user |
| `disable-password-login` | Disable password login | | `disable-password-login` | Disable password login |
| `enable-password-login` | Enable password login | | `enable-password-login` | Enable password login |
| `enable-oauth-login` | Enable OAuth login | | `enable-oauth-login` | Enable OAuth login |
| `disable-oauth-login` | Disable OAuth login | | `disable-oauth-login` | Disable OAuth login |
| `list-users` | List Immich users | | `list-users` | List Immich users |
| `version` | Print Immich version | | `version` | Print Immich version |
| `change-media-location` | Change database file paths to align with a new media location |
## How to run a command ## How to run a command
@@ -89,21 +88,3 @@ Print Immich Version
immich-admin version immich-admin version
v1.129.0 v1.129.0
``` ```
Change media location
```
immich-admin change-media-location
? Enter the previous value of IMMICH_MEDIA_LOCATION: /data
? Enter the new value of IMMICH_MEDIA_LOCATION: /my-data
...
Previous value: /data
Current value: /my-data
Changing database paths from "/data/*" to "/my-data/*"
? Do you want to proceed? [Y/n] y
Database file paths updated successfully! 🎉
...
```

View File

@@ -7,7 +7,7 @@ sidebar_position: 3
Dev Containers provide a consistent, reproducible development environment using Docker containers. With a single click, you can get started with an Immich development environment on Mac, Linux, Windows, or in the cloud using GitHub Codespaces. Dev Containers provide a consistent, reproducible development environment using Docker containers. With a single click, you can get started with an Immich development environment on Mac, Linux, Windows, or in the cloud using GitHub Codespaces.
Get started fast! [![Open in VSCode Containers](https://img.shields.io/static/v1?label=VSCode%20DevContainer&message=Immich&color=blue)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/immich-app/immich/)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/immich-app/immich/) [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/immich-app/immich/)
@@ -71,7 +71,7 @@ cd immich
The immich dev containers read environment variables from your shell environment, not from `.env` files. This allows them to work in cloud environments without pre-configuration. The immich dev containers read environment variables from your shell environment, not from `.env` files. This allows them to work in cloud environments without pre-configuration.
:::important Configuration :::important Required Configuration
When running locally, and if you want to create (or use an existing) DB and/or photo storage folder, you must set the `UPLOAD_LOCATION` variable in your shell environment before launching the Dev Container. This determines where uploaded files are stored and also where the DB stores it data. When running locally, and if you want to create (or use an existing) DB and/or photo storage folder, you must set the `UPLOAD_LOCATION` variable in your shell environment before launching the Dev Container. This determines where uploaded files are stored and also where the DB stores it data.
```bash ```bash
@@ -88,10 +88,6 @@ source ~/.bashrc
### Step 3: Launch the Dev Container ### Step 3: Launch the Dev Container
:::tip
Immich development makes extensive use of specialized [base images](https://github.com/immich-app/base-images) for its docker-compose based development. For this reason, you won't be able to use VSCode's **_Clone Repository in a Container Volume_** command.
:::
#### Using VS Code UI: #### Using VS Code UI:
1. Open the cloned repository in VS Code 1. Open the cloned repository in VS Code
@@ -203,11 +199,13 @@ To use your SSH key for commit signing, see the [GitHub guide on SSH commit sign
When the Dev Container starts, it automatically: When the Dev Container starts, it automatically:
1. **Runs post-create script** (`container-server-post-create.sh`): 1. **Runs post-create script** (`container-server-post-create.sh`):
- Adjusts file permissions for the `node` user - Adjusts file permissions for the `node` user
- Installs dependencies: `npm install` in all packages - Installs dependencies: `npm install` in all packages
- Builds TypeScript SDK: `npm run build` in `open-api/typescript-sdk` - Builds TypeScript SDK: `npm run build` in `open-api/typescript-sdk`
2. **Starts development servers** via VS Code tasks: 2. **Starts development servers** via VS Code tasks:
- `Immich API Server (Nest)` - API server with hot-reloading on port 2283 - `Immich API Server (Nest)` - API server with hot-reloading on port 2283
- `Immich Web Server (Vite)` - Web frontend with hot-reloading on port 3000 - `Immich Web Server (Vite)` - Web frontend with hot-reloading on port 3000
- Both servers watch for file changes and recompile automatically - Both servers watch for file changes and recompile automatically
@@ -337,12 +335,14 @@ make install-all # Install all dependencies
The Dev Container is pre-configured for debugging: The Dev Container is pre-configured for debugging:
1. **API Server Debugging**: 1. **API Server Debugging**:
- Set breakpoints in VS Code - Set breakpoints in VS Code
- Press `F5` or use "Run and Debug" panel - Press `F5` or use "Run and Debug" panel
- Select "Attach to Server" configuration - Select "Attach to Server" configuration
- Debug port: 9231 - Debug port: 9231
2. **Worker Debugging**: 2. **Worker Debugging**:
- Use "Attach to Workers" configuration - Use "Attach to Workers" configuration
- Debug port: 9230 - Debug port: 9230
@@ -428,6 +428,7 @@ While the Dev Container focuses on server and web development, you can connect m
``` ```
2. **Configure mobile app**: 2. **Configure mobile app**:
- Server URL: `http://YOUR_IP:2283/api` - Server URL: `http://YOUR_IP:2283/api`
- Ensure firewall allows port 2283 - Ensure firewall allows port 2283

View File

@@ -38,19 +38,6 @@ Run all server checks with `npm run check:all`
You can use `npm run __:fix` to potentially correct some issues automatically for `npm run format` and `lint`. You can use `npm run __:fix` to potentially correct some issues automatically for `npm run format` and `lint`.
::: :::
## Mobile Checks
The following commands must be executed from within the mobile app directory of the codebase.
- [ ] `make build` (auto-generate files using build_runner)
- [ ] `make analyze` (static analysis via Dart Analyzer and DCM)
- [ ] `make format` (formatting via Dart Formatter)
- [ ] `make test` (unit tests)
:::info Auto Fix
You can use `dart fix --apply` and `dcm fix lib` to potentially correct some issues automatically for `make analyze`.
:::
## OpenAPI ## OpenAPI
The OpenAPI client libraries need to be regenerated whenever there are changes to the `immich-openapi-specs.json` file. Note that you should not modify this file directly as it is auto-generated. See [OpenAPI](/docs/developer/open-api.md) for more details. The OpenAPI client libraries need to be regenerated whenever there are changes to the `immich-openapi-specs.json` file. Note that you should not modify this file directly as it is auto-generated. See [OpenAPI](/docs/developer/open-api.md) for more details.

View File

@@ -2,7 +2,7 @@
Folder view provides an additional view besides the timeline that is similar to a file explorer. It allows you to navigate through the folders and files in the library. This feature is handy for a highly curated and customized external library or a nicely configured storage template. Folder view provides an additional view besides the timeline that is similar to a file explorer. It allows you to navigate through the folders and files in the library. This feature is handy for a highly curated and customized external library or a nicely configured storage template.
You can enable this feature under [`Account Settings > Features > Folders`](https://my.immich.app/user-settings?isOpen=feature+folders) You can enable this feature under [`Account Settings > Features > Folder View`](https://my.immich.app/user-settings?isOpen=feature+folders)
## Enable folder view ## Enable folder view

View File

@@ -56,9 +56,9 @@ Internally, Immich uses the [glob](https://www.npmjs.com/package/glob) package t
### Automatic watching (EXPERIMENTAL) ### Automatic watching (EXPERIMENTAL)
This feature is considered experimental and for advanced users only. If enabled, it will allow automatic watching of the filesystem which means new assets are automatically imported to Immich without needing to rescan. This feature - currently hidden in the config file - is considered experimental and for advanced users only. If enabled, it will allow automatic watching of the filesystem which means new assets are automatically imported to Immich without needing to rescan.
If your photos are on a network drive, automatic file watching likely won't work. In that case, you will have to rely on a [periodic library refresh](#set-custom-scan-interval) to pull in your changes. If your photos are on a network drive, automatic file watching likely won't work. In that case, you will have to rely on a periodic library refresh to pull in your changes.
#### Troubleshooting #### Troubleshooting
@@ -72,9 +72,7 @@ In rare cases, the library watcher can hang, preventing Immich from starting up.
### Nightly job ### Nightly job
There is an automatic scan job that is scheduled to run once a day. Its schedule is configurable, see [Set Custom Scan Interval](#set-custom-scan-interval). There is an automatic scan job that is scheduled to run once a day. This job also cleans up any libraries stuck in deletion. It is possible to trigger the cleanup by clicking "Scan all libraries" in the library management page.
This job also cleans up any libraries stuck in deletion. It is possible to trigger the cleanup by clicking "Scan all libraries" in the library management page.
## Usage ## Usage
@@ -93,7 +91,7 @@ The `immich-server` container will need access to the gallery. Modify your docke
```diff title="docker-compose.yml" ```diff title="docker-compose.yml"
immich-server: immich-server:
volumes: volumes:
- ${UPLOAD_LOCATION}:/data - ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro + - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro
+ - /home/user/old-pics:/mnt/media/old-pics:ro + - /home/user/old-pics:/mnt/media/old-pics:ro
+ - /mnt/media/videos:/mnt/media/videos:ro + - /mnt/media/videos:/mnt/media/videos:ro
@@ -114,7 +112,7 @@ _Remember to run `docker compose up -d` to register the changes. Make sure you c
These actions must be performed by the Immich administrator. These actions must be performed by the Immich administrator.
- Click on your avatar in the upper right corner - Click on your avatar on the upper right corner
- Click on Administration -> External Libraries - Click on Administration -> External Libraries
- Click on Create an external library… - Click on Create an external library…
- Select which user owns the library, this can not be changed later - Select which user owns the library, this can not be changed later
@@ -161,7 +159,9 @@ Within seconds, the assets from the old-pics and videos folders should show up i
Folder view provides an additional view besides the timeline that is similar to a file explorer. It allows you to navigate through the folders and files in the library. This feature is handy for a highly curated and customized external library or a nicely configured storage template. Folder view provides an additional view besides the timeline that is similar to a file explorer. It allows you to navigate through the folders and files in the library. This feature is handy for a highly curated and customized external library or a nicely configured storage template.
You can enable this feature under [`Account Settings > Features > Folders`](https://my.immich.app/user-settings?isOpen=feature+folders) You can enable this feature under [`Account Settings > Features > Folder View`](https://my.immich.app/user-settings?isOpen=feature+folders)
The UI is currently only available for the web; mobile will come in a subsequent release.
<img src={require('./img/folder-view-1.webp').default} width="100%" title='Folder-view' /> <img src={require('./img/folder-view-1.webp').default} width="100%" title='Folder-view' />
@@ -171,7 +171,7 @@ You can enable this feature under [`Account Settings > Features > Folders`](http
Only an admin can do this. Only an admin can do this.
::: :::
You can define a custom interval for the trigger external library rescan under Administration -> Settings -> External Library. You can define a custom interval for the trigger external library rescan under Administration -> Settings -> Library.
You can set the scanning interval using the preset or cron format. For more information you can refer to [Crontab Guru](https://crontab.guru/). You can set the scanning interval using the preset or cron format. For more information you can refer to [Crontab Guru](https://crontab.guru/).
<img src={require('./img/library-custom-scan-interval.webp').default} width="75%" title='Set custom scan interval for external library' /> <img src={require('./img/library-custom-scan-interval.webp').default} width="75%" title='Set custom scan interval for external library' />

View File

@@ -88,9 +88,9 @@ It will only reflect files you add.
::: :::
If the same asset is in more than one album it will only sync to the first album it's in, after that it won't sync again even if the user clicks sync albums manually. If the same asset is in more than one album it will only sync to the first album it's in, after that it won't sync again even if the user clicks sync albums manually.
To overcome this limitation, the files must be removed from the ignore list by To overcome this limitation, the files must be removed from the blacklist by
App settings -> Advanced -> Duplicate Assets -> Clear App settings -> Advanced -> Duplicate Assets -> Clear
:::info :::info
Cleaning duplicate assets from the list will cause all the previously uploaded duplicate files to be re-uploaded, the files will not actually be uploaded and will be rejected on the server side (due to duplication) but will be synchronized to the album and at the end will be added to the ignore list again at the end of the synchronization. Cleaning duplicate assets from the list will cause all the previously uploaded duplicate files to be re-uploaded, the files will not actually be uploaded and will be rejected on the server side (due to duplication) but will be synchronized to the album and at the end will be added to the black list again at the end of the synchronization.
::: :::

View File

@@ -16,7 +16,7 @@ For the full list, refer to the [Immich source code](https://github.com/immich-a
| `HEIC` | `.heic` | :white_check_mark: | | | `HEIC` | `.heic` | :white_check_mark: | |
| `HEIF` | `.heif` | :white_check_mark: | | | `HEIF` | `.heif` | :white_check_mark: | |
| `JPEG 2000` | `.jp2` | :white_check_mark: | | | `JPEG 2000` | `.jp2` | :white_check_mark: | |
| `JPEG` | `.jpeg` `.jpg` `.jpe` `.insp` | :white_check_mark: | | | `JPEG` | `.webp` `.jpg` `.jpe` `.insp` | :white_check_mark: | |
| `JPEG XL` | `.jxl` | :white_check_mark: | | | `JPEG XL` | `.jxl` | :white_check_mark: | |
| `PNG` | `.png` | :white_check_mark: | | | `PNG` | `.png` | :white_check_mark: | |
| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop | | `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop |

View File

@@ -27,11 +27,11 @@ After defining the locations of these files, we will edit the `docker-compose.ym
services: services:
immich-server: immich-server:
volumes: volumes:
- ${UPLOAD_LOCATION}:/data - ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - ${THUMB_LOCATION}:/data/thumbs + - ${THUMB_LOCATION}:/usr/src/app/upload/thumbs
+ - ${ENCODED_VIDEO_LOCATION}:/data/encoded-video + - ${ENCODED_VIDEO_LOCATION}:/usr/src/app/upload/encoded-video
+ - ${PROFILE_LOCATION}:/data/profile + - ${PROFILE_LOCATION}:/usr/src/app/upload/profile
+ - ${BACKUP_LOCATION}:/data/backups + - ${BACKUP_LOCATION}:/usr/src/app/upload/backups
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
``` ```
@@ -44,7 +44,7 @@ docker compose up -d
:::note :::note
Because of the underlying properties of docker bind mounts, it is not recommended to mount the `upload/` and `library/` folders as separate bind mounts if they are on the same device. Because of the underlying properties of docker bind mounts, it is not recommended to mount the `upload/` and `library/` folders as separate bind mounts if they are on the same device.
For this reason, we mount the HDD or the network storage (NAS) to `/data` and then mount the folders we want to access under that folder. For this reason, we mount the HDD or the network storage (NAS) to `/usr/src/app/upload` and then mount the folders we want to access under that folder.
The `thumbs/` folder contains both the small thumbnails displayed in the timeline and the larger previews shown when clicking into an image. These cannot be separated. The `thumbs/` folder contains both the small thumbnails displayed in the timeline and the larger previews shown when clicking into an image. These cannot be separated.

View File

@@ -12,131 +12,105 @@ Run `docker exec -it immich_postgres psql --dbname=<DB_DATABASE_NAME> --username
## Assets ## Assets
### Name
:::note :::note
The `"originalFileName"` column is the name of the file at time of upload, including the extension. The `"originalFileName"` column is the name of the file at time of upload, including the extension.
::: :::
```sql title="Find by original filename" ```sql title="Find by original filename"
SELECT * FROM "asset" WHERE "originalFileName" = 'PXL_20230903_232542848.jpg'; SELECT * FROM "assets" WHERE "originalFileName" = 'PXL_20230903_232542848.jpg';
SELECT * FROM "asset" WHERE "originalFileName" LIKE 'PXL_%'; -- all files starting with PXL_ SELECT * FROM "assets" WHERE "originalFileName" LIKE 'PXL_%'; -- all files starting with PXL_
SELECT * FROM "asset" WHERE "originalFileName" LIKE '%_2023_%'; -- all files with _2023_ in the middle SELECT * FROM "assets" WHERE "originalFileName" LIKE '%_2023_%'; -- all files with _2023_ in the middle
``` ```
```sql title="Find by path" ```sql title="Find by path"
SELECT * FROM "asset" WHERE "originalPath" = 'upload/library/admin/2023/2023-09-03/PXL_2023.jpg'; SELECT * FROM "assets" WHERE "originalPath" = 'upload/library/admin/2023/2023-09-03/PXL_2023.jpg';
SELECT * FROM "asset" WHERE "originalPath" LIKE 'upload/library/admin/2023/%'; SELECT * FROM "assets" WHERE "originalPath" LIKE 'upload/library/admin/2023/%';
``` ```
### ID
```sql title="Find by ID" ```sql title="Find by ID"
SELECT * FROM "asset" WHERE "id" = '9f94e60f-65b6-47b7-ae44-a4df7b57f0e9'; SELECT * FROM "assets" WHERE "id" = '9f94e60f-65b6-47b7-ae44-a4df7b57f0e9';
``` ```
```sql title="Find by partial ID" ```sql title="Find by partial ID"
SELECT * FROM "asset" WHERE "id"::text LIKE '%ab431d3a%'; SELECT * FROM "assets" WHERE "id"::text LIKE '%ab431d3a%';
``` ```
### Checksum
:::note :::note
You can calculate the checksum for a particular file by using the command `sha1sum <filename>`. You can calculate the checksum for a particular file by using the command `sha1sum <filename>`.
::: :::
```sql title="Find by checksum (SHA-1)" ```sql title="Find by checksum (SHA-1)"
SELECT encode("checksum", 'hex') FROM "asset"; SELECT encode("checksum", 'hex') FROM "assets";
SELECT * FROM "asset" WHERE "checksum" = decode('69de19c87658c4c15d9cacb9967b8e033bf74dd1', 'hex'); SELECT * FROM "assets" WHERE "checksum" = decode('69de19c87658c4c15d9cacb9967b8e033bf74dd1', 'hex');
SELECT * FROM "asset" WHERE "checksum" = '\x69de19c87658c4c15d9cacb9967b8e033bf74dd1'; -- alternate notation SELECT * FROM "assets" WHERE "checksum" = '\x69de19c87658c4c15d9cacb9967b8e033bf74dd1'; -- alternate notation
``` ```
```sql title="Find duplicate assets with identical checksum (SHA-1) (excluding trashed files)" ```sql title="Find duplicate assets with identical checksum (SHA-1) (excluding trashed files)"
SELECT T1."checksum", array_agg(T2."id") ids FROM "asset" T1 SELECT T1."checksum", array_agg(T2."id") ids FROM "assets" T1
INNER JOIN "asset" T2 ON T1."checksum" = T2."checksum" AND T1."id" != T2."id" AND T2."deletedAt" IS NULL INNER JOIN "assets" T2 ON T1."checksum" = T2."checksum" AND T1."id" != T2."id" AND T2."deletedAt" IS NULL
WHERE T1."deletedAt" IS NULL GROUP BY T1."checksum"; WHERE T1."deletedAt" IS NULL GROUP BY T1."checksum";
``` ```
### Metadata
```sql title="Live photos" ```sql title="Live photos"
SELECT * FROM "asset" WHERE "livePhotoVideoId" IS NOT NULL; SELECT * FROM "assets" WHERE "livePhotoVideoId" IS NOT NULL;
``` ```
```sql title="By description" ```sql title="By description"
SELECT "asset".*, "asset_exif"."description" FROM "asset_exif" SELECT "assets".*, "exif"."description" FROM "exif"
JOIN "asset" ON "asset"."id" = "asset_exif"."assetId" JOIN "assets" ON "assets"."id" = "exif"."assetId"
WHERE TRIM("asset_exif"."description") <> ''; -- all files with a description WHERE TRIM("exif"."description") <> ''; -- all files with a description
SELECT "asset".*, "asset_exif"."description" FROM "asset_exif" SELECT "assets".*, "exif"."description" FROM "exif"
JOIN "asset" ON "asset"."id" = "asset_exif"."assetId" JOIN "assets" ON "assets"."id" = "exif"."assetId"
WHERE "asset_exif"."description" ILIKE '%string to match%'; -- search by string WHERE "exif"."description" ILIKE '%string to match%'; -- search by string
``` ```
```sql title="Without metadata" ```sql title="Without metadata"
SELECT "asset".* FROM "asset_exif" SELECT "assets".* FROM "exif"
LEFT JOIN "asset" ON "asset"."id" = "asset_exif"."assetId" LEFT JOIN "assets" ON "assets"."id" = "exif"."assetId"
WHERE "asset_exif"."assetId" IS NULL; WHERE "exif"."assetId" IS NULL;
``` ```
```sql title="size < 100,000 bytes, smallest to largest" ```sql title="size < 100,000 bytes, smallest to largest"
SELECT * FROM "asset" SELECT * FROM "assets"
JOIN "asset_exif" ON "asset"."id" = "asset_exif"."assetId" JOIN "exif" ON "assets"."id" = "exif"."assetId"
WHERE "asset_exif"."fileSizeInByte" < 100000 WHERE "exif"."fileSizeInByte" < 100000
ORDER BY "asset_exif"."fileSizeInByte" ASC; ORDER BY "exif"."fileSizeInByte" ASC;
``` ```
### Type ```sql title="Without thumbnails"
SELECT * FROM "assets" WHERE "assets"."previewPath" IS NULL OR "assets"."thumbnailPath" IS NULL;
```
```sql title="By type" ```sql title="By type"
SELECT * FROM "asset" WHERE "asset"."type" = 'VIDEO'; SELECT * FROM "assets" WHERE "assets"."type" = 'VIDEO';
SELECT * FROM "asset" WHERE "asset"."type" = 'IMAGE'; SELECT * FROM "assets" WHERE "assets"."type" = 'IMAGE';
``` ```
```sql title="Count by type" ```sql title="Count by type"
SELECT "asset"."type", COUNT(*) FROM "asset" GROUP BY "asset"."type"; SELECT "assets"."type", COUNT(*) FROM "assets" GROUP BY "assets"."type";
``` ```
```sql title="Count by type (per user)" ```sql title="Count by type (per user)"
SELECT "user"."email", "asset"."type", COUNT(*) FROM "asset" SELECT "users"."email", "assets"."type", COUNT(*) FROM "assets"
JOIN "user" ON "asset"."ownerId" = "user"."id" JOIN "users" ON "assets"."ownerId" = "users"."id"
GROUP BY "asset"."type", "user"."email" ORDER BY "user"."email"; GROUP BY "assets"."type", "users"."email" ORDER BY "users"."email";
``` ```
## Tags ```sql title="Failed file movements"
SELECT * FROM "move_history";
```sql title="Count by tag"
SELECT "t"."value" AS "tag_name", COUNT(*) AS "number_assets" FROM "tag" "t"
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagsId" JOIN "asset" "a" ON "ta"."assetsId" = "a"."id"
WHERE "a"."visibility" != 'hidden'
GROUP BY "t"."value" ORDER BY "number_assets" DESC;
```
```sql title="Count by tag (per user)"
SELECT "t"."value" AS "tag_name", "u"."email" as "user_email", COUNT(*) AS "number_assets" FROM "tag" "t"
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagsId" JOIN "asset" "a" ON "ta"."assetsId" = "a"."id" JOIN "user" "u" ON "a"."ownerId" = "u"."id"
WHERE "a"."visibility" != 'hidden'
GROUP BY "t"."value", "u"."email" ORDER BY "number_assets" DESC;
``` ```
## Users ## Users
```sql title="List all users" ```sql title="List all users"
SELECT * FROM "user"; SELECT * FROM "users";
``` ```
```sql title="Get owner info from asset ID" ```sql title="Get owner info from asset ID"
SELECT "user".* FROM "user" JOIN "asset" ON "user"."id" = "asset"."ownerId" WHERE "asset"."id" = 'fa310b01-2f26-4b7a-9042-d578226e021f'; SELECT "users".* FROM "users" JOIN "assets" ON "users"."id" = "assets"."ownerId" WHERE "assets"."id" = 'fa310b01-2f26-4b7a-9042-d578226e021f';
``` ```
## Persons ## System Config
```sql title="Delete person and unset it for the faces it was associated with"
DELETE FROM "person" WHERE "name" = 'PersonNameHere';
```
## System
### Config
```sql title="Custom settings" ```sql title="Custom settings"
SELECT "key", "value" FROM "system_metadata" WHERE "key" = 'system-config'; SELECT "key", "value" FROM "system_metadata" WHERE "key" = 'system-config';
@@ -144,14 +118,10 @@ SELECT "key", "value" FROM "system_metadata" WHERE "key" = 'system-config';
(Only used when not using the [config file](/docs/install/config-file)) (Only used when not using the [config file](/docs/install/config-file))
### File properties ## Persons
```sql title="Without thumbnails" ```sql title="Delete person and unset it for the faces it was associated with"
SELECT * FROM "asset" WHERE "asset"."previewPath" IS NULL OR "asset"."thumbnailPath" IS NULL; DELETE FROM "person" WHERE "name" = 'PersonNameHere';
```
```sql title="Failed file movements"
SELECT * FROM "move_history";
``` ```
## Postgres internal ## Postgres internal

View File

@@ -12,7 +12,7 @@ If you want Immich to be able to delete the images in the external library or ad
```diff ```diff
immich-server: immich-server:
volumes: volumes:
- ${UPLOAD_LOCATION}:/data - ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /home/user/photos1:/home/user/photos1:ro + - /home/user/photos1:/home/user/photos1:ro
+ - /mnt/photos2:/mnt/photos2:ro # you can delete this line if you only have one mount point, or you can add more lines if you have more than two + - /mnt/photos2:/mnt/photos2:ro # you can delete this line if you only have one mount point, or you can add more lines if you have more than two
``` ```
@@ -41,7 +41,7 @@ In the Immich web UI:
- Click Add path - Click Add path
<img src={require('./img/add-path-button.webp').default} width="50%" title="Add Path button" /> <img src={require('./img/add-path-button.webp').default} width="50%" title="Add Path button" />
- Enter **/home/user/photos1** as the path and click Add - Enter **/usr/src/app/external** as the path and click Add
<img src={require('./img/add-path-field.webp').default} width="50%" title="Add Path field" /> <img src={require('./img/add-path-field.webp').default} width="50%" title="Add Path field" />
- Save the new path - Save the new path

View File

@@ -52,9 +52,9 @@ REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
### Local ### Local
# Backup Immich database # Backup Immich database
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# For deduplicating backup programs such as Borg or Restic, compressing the content can increase backup size by making it harder to deduplicate. If you are using a different program or still prefer to compress, you can use the following command instead: # For deduplicating backup programs such as Borg or Restic, compressing the content can increase backup size by making it harder to deduplicate. If you are using a different program or still prefer to compress, you can use the following command instead:
# docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz # docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz
### Append to local Borg repository ### Append to local Borg repository
borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/ borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/

View File

@@ -34,7 +34,7 @@ These environment variables are used by the `docker-compose.yml` file and do **N
| `TZ` | Timezone | <sup>\*1</sup> | server | microservices | | `TZ` | Timezone | <sup>\*1</sup> | server | microservices |
| `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices | | `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices |
| `IMMICH_LOG_LEVEL` | Log level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices | | `IMMICH_LOG_LEVEL` | Log level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices |
| `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**<sup>\*2</sup>⚠️ | `/data` | server | api, microservices | | `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**<sup>\*2</sup>⚠️ | `./upload`<sup>\*3</sup> | server | api, microservices |
| `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices | | `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices |
| `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | | | `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | |
| `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | | | `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | |
@@ -49,6 +49,9 @@ These environment variables are used by the `docker-compose.yml` file and do **N
\*2: This path is where the Immich code looks for the files, which is internal to the docker container. Setting it to a path on your host will certainly break things, you should use the `UPLOAD_LOCATION` variable instead. \*2: This path is where the Immich code looks for the files, which is internal to the docker container. Setting it to a path on your host will certainly break things, you should use the `UPLOAD_LOCATION` variable instead.
\*3: With the default `WORKDIR` of `/usr/src/app`, this path will resolve to `/usr/src/app/upload`.
It only needs to be set if the Immich deployment method is changing.
## Workers ## Workers
| Variable | Description | Default | Containers | | Variable | Description | Default | Containers |
@@ -69,25 +72,22 @@ Information on the current workers can be found [here](/docs/administration/jobs
## Database ## Database
| Variable | Description | Default | Containers | | Variable | Description | Default | Containers |
| :---------------------------------- | :------------------------------------------------------------------------------------- | :--------: | :----------------------------- | | :---------------------------------- | :--------------------------------------------------------------------------- | :--------: | :----------------------------- |
| `DB_URL` | Database URL | | server | | `DB_URL` | Database URL | | server |
| `DB_HOSTNAME` | Database host | `database` | server | | `DB_HOSTNAME` | Database host | `database` | server |
| `DB_PORT` | Database port | `5432` | server | | `DB_PORT` | Database port | `5432` | server |
| `DB_USERNAME` | Database user | `postgres` | server, database<sup>\*1</sup> | | `DB_USERNAME` | Database user | `postgres` | server, database<sup>\*1</sup> |
| `DB_PASSWORD` | Database password | `postgres` | server, database<sup>\*1</sup> | | `DB_PASSWORD` | Database password | `postgres` | server, database<sup>\*1</sup> |
| `DB_DATABASE_NAME` | Database name | `immich` | server, database<sup>\*1</sup> | | `DB_DATABASE_NAME` | Database name | `immich` | server, database<sup>\*1</sup> |
| `DB_SSL_MODE` | Database SSL mode | | server | | `DB_SSL_MODE` | Database SSL mode | | server |
| `DB_VECTOR_EXTENSION`<sup>\*2</sup> | Database vector extension (one of [`vectorchord`, `pgvector`, `pgvecto.rs`]) | | server | | `DB_VECTOR_EXTENSION`<sup>\*2</sup> | Database vector extension (one of [`vectorchord`, `pgvector`, `pgvecto.rs`]) | | server |
| `DB_SKIP_MIGRATIONS` | Whether to skip running migrations on startup (one of [`true`, `false`]) | `false` | server | | `DB_SKIP_MIGRATIONS` | Whether to skip running migrations on startup (one of [`true`, `false`]) | `false` | server |
| `DB_STORAGE_TYPE` | Optimize concurrent IO on SSDs or sequential IO on HDDs ([`SSD`, `HDD`])<sup>\*3</sup> | `SSD` | server |
\*1: The values of `DB_USERNAME`, `DB_PASSWORD`, and `DB_DATABASE_NAME` are passed to the Postgres container as the variables `POSTGRES_USER`, `POSTGRES_PASSWORD`, and `POSTGRES_DB` in `docker-compose.yml`. \*1: The values of `DB_USERNAME`, `DB_PASSWORD`, and `DB_DATABASE_NAME` are passed to the Postgres container as the variables `POSTGRES_USER`, `POSTGRES_PASSWORD`, and `POSTGRES_DB` in `docker-compose.yml`.
\*2: If not provided, the appropriate extension to use is auto-detected at startup by introspecting the database. When multiple extensions are installed, the order of preference is VectorChord, pgvecto.rs, pgvector. \*2: If not provided, the appropriate extension to use is auto-detected at startup by introspecting the database. When multiple extensions are installed, the order of preference is VectorChord, pgvecto.rs, pgvector.
\*3: Uses either [`postgresql.ssd.conf`](https://github.com/immich-app/base-images/blob/main/postgres/postgresql.ssd.conf) or [`postgresql.hdd.conf`](https://github.com/immich-app/base-images/blob/main/postgres/postgresql.hdd.conf) which mainly controls the Postgres `effective_io_concurrency` setting to allow for concurrenct IO on SSDs and sequential IO on HDDs.
:::info :::info
All `DB_` variables must be provided to all Immich workers, including `api` and `microservices`. All `DB_` variables must be provided to all Immich workers, including `api` and `microservices`.
@@ -199,11 +199,12 @@ Additional machine learning parameters can be tuned from the admin UI.
| `IMMICH_TELEMETRY_INCLUDE` | Collect these telemetries. List of `host`, `api`, `io`, `repo`, `job`. Note: You can also specify `all` to enable all | | server | api, microservices | | `IMMICH_TELEMETRY_INCLUDE` | Collect these telemetries. List of `host`, `api`, `io`, `repo`, `job`. Note: You can also specify `all` to enable all | | server | api, microservices |
| `IMMICH_TELEMETRY_EXCLUDE` | Do not collect these telemetries. List of `host`, `api`, `io`, `repo`, `job` | | server | api, microservices | | `IMMICH_TELEMETRY_EXCLUDE` | Do not collect these telemetries. List of `host`, `api`, `io`, `repo`, `job` | | server | api, microservices |
## Secrets ## Docker Secrets
The following variables support reading from files, either via [Systemd Credentials][systemd-creds] or [Docker secrets][docker-secrets] for additional security. The following variables support the use of [Docker secrets][docker-secrets] for additional security.
To use any of these, either set `CREDENTIALS_DIRECTORY` to a directory that contains files whose name is the regular variable” name, and whose content is the secret. If using Docker Secrets, setting `CREDENTIALS_DIRECTORY=/run/secrets` will cause all secrets present to be used. Alternatively, replace the regular variable with the equivalent `_FILE` environment variable as below. The value of the `_FILE` variable should be set to the path of a file containing the variable value. To use any of these, replace the regular environment variable with the equivalent `_FILE` environment variable. The value of
the `_FILE` variable should be set to the path of a file containing the variable value.
| Regular Variable | Equivalent Docker Secrets '\_FILE' Variable | | Regular Variable | Equivalent Docker Secrets '\_FILE' Variable |
| :----------------- | :------------------------------------------ | | :----------------- | :------------------------------------------ |
@@ -225,4 +226,3 @@ to use a Docker secret for the password in the Redis container.
[docker-secrets-docs]: https://github.com/docker-library/docs/tree/master/postgres#docker-secrets [docker-secrets-docs]: https://github.com/docker-library/docs/tree/master/postgres#docker-secrets
[docker-secrets]: https://docs.docker.com/engine/swarm/secrets/ [docker-secrets]: https://docs.docker.com/engine/swarm/secrets/
[ioredis]: https://ioredis.readthedocs.io/en/latest/README/#connect-to-redis [ioredis]: https://ioredis.readthedocs.io/en/latest/README/#connect-to-redis
[systemd-creds]: https://systemd.io/CREDENTIALS/

View File

@@ -75,6 +75,7 @@ alt="Select Plugins > Compose.Manager > Add New Stack > Label it Immich"
5. Click "**Save Changes**", you will be prompted to edit stack UI labels, just leave this blank and click "**Ok**" 5. Click "**Save Changes**", you will be prompted to edit stack UI labels, just leave this blank and click "**Ok**"
6. Select the cog ⚙️ next to Immich, click "**Edit Stack**", then click "**Env File**" 6. Select the cog ⚙️ next to Immich, click "**Edit Stack**", then click "**Env File**"
7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following: 7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following:
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION` - `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
- `DB_DATA_LOCATION`: Change this to use an Unraid share (preferably a cache pool, e.g. `/mnt/user/appdata/postgresql/data`). This uses the `appdata` share. Do also create the `postgresql` folder, by running `mkdir /mnt/user/{share_location}/postgresql/data`. If left at default it will try to use Unraid's `/boot/config/plugins/compose.manager/projects/[stack_name]/postgres` folder which it doesn't have permissions to, resulting in this container continuously restarting. - `DB_DATA_LOCATION`: Change this to use an Unraid share (preferably a cache pool, e.g. `/mnt/user/appdata/postgresql/data`). This uses the `appdata` share. Do also create the `postgresql` folder, by running `mkdir /mnt/user/{share_location}/postgresql/data`. If left at default it will try to use Unraid's `/boot/config/plugins/compose.manager/projects/[stack_name]/postgres` folder which it doesn't have permissions to, resulting in this container continuously restarting.

1531
docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -16,9 +16,8 @@
"write-heading-ids": "docusaurus write-heading-ids" "write-heading-ids": "docusaurus write-heading-ids"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "~3.8.0", "@docusaurus/core": "~3.7.0",
"@docusaurus/preset-classic": "~3.8.0", "@docusaurus/preset-classic": "~3.7.0",
"@docusaurus/theme-common": "~3.8.0",
"@mdi/js": "^7.3.67", "@mdi/js": "^7.3.67",
"@mdi/react": "^1.6.1", "@mdi/react": "^1.6.1",
"@mdx-js/react": "^3.0.0", "@mdx-js/react": "^3.0.0",
@@ -27,7 +26,6 @@
"clsx": "^2.0.0", "clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.3.2", "docusaurus-lunr-search": "^3.3.2",
"docusaurus-preset-openapi": "^0.7.5", "docusaurus-preset-openapi": "^0.7.5",
"lunr": "^2.3.9",
"postcss": "^8.4.25", "postcss": "^8.4.25",
"prism-react-renderer": "^2.3.1", "prism-react-renderer": "^2.3.1",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
@@ -37,7 +35,7 @@
"url": "^0.11.0" "url": "^0.11.0"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "~3.8.0", "@docusaurus/module-type-aliases": "~3.7.0",
"@docusaurus/tsconfig": "^3.7.0", "@docusaurus/tsconfig": "^3.7.0",
"@docusaurus/types": "^3.7.0", "@docusaurus/types": "^3.7.0",
"prettier": "^3.2.4", "prettier": "^3.2.4",
@@ -59,6 +57,6 @@
"node": ">=20" "node": ">=20"
}, },
"volta": { "volta": {
"node": "22.17.1" "node": "22.16.0"
} }
} }

View File

@@ -58,12 +58,6 @@ const guides: CommunityGuidesProps[] = [
description: 'Access Immich with an end-to-end encrypted connection.', description: 'Access Immich with an end-to-end encrypted connection.',
url: 'https://meshnet.nordvpn.com/how-to/remote-files-media-access/immich-remote-access', url: 'https://meshnet.nordvpn.com/how-to/remote-files-media-access/immich-remote-access',
}, },
{
title: 'Trust Self Signed Certificates with Immich - OAuth Setup',
description:
'Set up Certificate Authority trust with Immich, and your private OAuth2/OpenID service, while using a private CA for HTTPS commication.',
url: 'https://github.com/immich-app/immich/discussions/18614',
},
]; ];
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element { function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {

View File

@@ -100,11 +100,6 @@ const projects: CommunityProjectProps[] = [
description: 'Automatically optimize files uploaded to Immich in order to save storage space', description: 'Automatically optimize files uploaded to Immich in order to save storage space',
url: 'https://github.com/miguelangel-nubla/immich-upload-optimizer', url: 'https://github.com/miguelangel-nubla/immich-upload-optimizer',
}, },
{
title: 'Immich Machine Learning Load Balancer',
description: 'Speed up your machine learning by load balancing your requests to multiple computers',
url: 'https://github.com/apetersson/immich_ml_balancer',
},
]; ];
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element { function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {

View File

@@ -2,23 +2,4 @@
## TypeORM Upgrade ## TypeORM Upgrade
In order to update to Immich to `v1.137.0` (or above), the application must be started at least once on a version in the range between `1.132.0` and `1.136.0`. Doing so will complete database schema upgrades that are required for `v1.137.0` (and above). After Immich has successfully updated to a version in this range, you can now attempt to update to v1.137.0 (or above). We recommend users upgrade to `1.132.0` since it does not have any other breaking changes. The upgrade to Immich `v2.x.x` has a required upgrade path to `v1.132.0+`. This means it is required to start up the application at least once on version `1.132.0` (or later). Doing so will complete database schema upgrades that are required for `v2.0.0`. After Immich has successfully booted on this version, shut the system down and try the `v2.x.x` upgrade again.
## Inconsistent Media Location
:::caution
This error is related to the location of media files _inside the container_. Never move files on the host system when you run into this error message.
:::
Immich automatically tries to detect where your Immich data is located. On start up, it compares the detected media location with the file paths in the database and throws an Inconsistent Media Location error when they do not match.
To fix this issue, verify that the `IMMICH_MEDIA_LOCATION` environment variable and `UPLOAD_LOCATION` volume mount are in sync with the database paths.
If you would like to migrate from one media location to another, simply successfully start Immich on `v1.136.0` or later, then do the following steps:
1. Stop Immich
2. Update `IMMICH_MEDIA_LOCATION` to the new location
3. Update the right-hand side of the `UPLOAD_LOCATION` volume mount to the new location
4. Start up Immich
After version `1.136.0`, Immich can detect when a media location has moved and will automatically update the database paths to keep them in sync.

View File

@@ -85,7 +85,6 @@ import React from 'react';
import { Item, Timeline } from '../components/timeline'; import { Item, Timeline } from '../components/timeline';
const releases = { const releases = {
'v1.135.0': new Date(2025, 5, 18),
'v1.133.0': new Date(2025, 4, 21), 'v1.133.0': new Date(2025, 4, 21),
'v1.130.0': new Date(2025, 2, 25), 'v1.130.0': new Date(2025, 2, 25),
'v1.127.0': new Date(2025, 1, 26), 'v1.127.0': new Date(2025, 1, 26),
@@ -197,6 +196,14 @@ const roadmap: Item[] = [
description: 'Automate tasks with workflows', description: 'Automate tasks with workflows',
getDateLabel: () => 'Planned for 2025', getDateLabel: () => 'Planned for 2025',
}, },
{
done: false,
icon: mdiTableKey,
iconColor: 'gray',
title: 'Fine grained access controls',
description: 'Granular access controls for users and api keys',
getDateLabel: () => 'Planned for 2025',
},
{ {
done: false, done: false,
icon: mdiImageEdit, icon: mdiImageEdit,
@@ -232,26 +239,12 @@ const roadmap: Item[] = [
]; ];
const milestones: Item[] = [ const milestones: Item[] = [
{
icon: mdiStar,
iconColor: 'gold',
title: '70,000 Stars',
description: 'Reached 70K Stars on GitHub!',
getDateLabel: withLanguage(new Date(2025, 6, 9)),
},
withRelease({
icon: mdiTableKey,
iconColor: 'gray',
title: 'Fine grained access controls',
description: 'Granular access controls for api keys',
release: 'v1.135.0',
}),
withRelease({ withRelease({
icon: mdiCast, icon: mdiCast,
iconColor: 'aqua', iconColor: 'aqua',
title: 'Google Cast (web and mobile)', title: 'Google Cast (web)',
description: 'Cast assets to Google Cast/Chromecast compatible devices', description: 'Cast assets to Google Cast/Chromecast compatible devices',
release: 'v1.135.0', release: 'v1.133.0',
}), }),
withRelease({ withRelease({
icon: mdiLockOutline, icon: mdiLockOutline,

View File

@@ -1,5 +1,4 @@
/docs /docs/overview/welcome 307 /docs /docs/overview/introduction 307
/docs/ /docs/overview/welcome 307
/docs/mobile-app-beta-program /docs/features/mobile-app 307 /docs/mobile-app-beta-program /docs/features/mobile-app 307
/docs/contribution-guidelines /docs/overview/support-the-project#contributing 307 /docs/contribution-guidelines /docs/overview/support-the-project#contributing 307
/docs/install /docs/install/docker-compose 307 /docs/install /docs/install/docker-compose 307
@@ -31,4 +30,4 @@
/docs/guides/api-album-sync /docs/community-projects 307 /docs/guides/api-album-sync /docs/community-projects 307
/docs/guides/remove-offline-files /docs/community-projects 307 /docs/guides/remove-offline-files /docs/community-projects 307
/milestones /roadmap 307 /milestones /roadmap 307
/docs/overview/introduction /docs/overview/welcome 307 /docs/overview/introduction /docs/overview/welcome 307

View File

@@ -1,20 +1,4 @@
[ [
{
"label": "v1.137.2",
"url": "https://v1.137.2.archive.immich.app"
},
{
"label": "v1.137.1",
"url": "https://v1.137.1.archive.immich.app"
},
{
"label": "v1.137.0",
"url": "https://v1.137.0.archive.immich.app"
},
{
"label": "v1.136.0",
"url": "https://v1.136.0.archive.immich.app"
},
{ {
"label": "v1.135.3", "label": "v1.135.3",
"url": "https://v1.135.3.archive.immich.app" "url": "https://v1.135.3.archive.immich.app"

View File

@@ -1 +1 @@
22.17.1 22.16.0

View File

@@ -3,6 +3,7 @@ name: immich-e2e
services: services:
immich-server: immich-server:
container_name: immich-e2e-server container_name: immich-e2e-server
command: ['./start.sh']
image: immich-server:latest image: immich-server:latest
build: build:
context: ../ context: ../
@@ -35,10 +36,10 @@ services:
- 2285:2285 - 2285:2285
redis: redis:
image: redis:6.2-alpine@sha256:7fe72c486b910f6b1a9769c937dad5d63648ddee82e056f47417542dd40825bb image: redis:6.2-alpine@sha256:3211c33a618c457e5d241922c975dbc4f446d0bdb2dc75694f5573ef8e2d01fa
database: database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:0e763a2383d56f90364fcd72767ac41400cd30d2627f407f7e7960c9f1923c21 image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:9c704fb49ce27549df00f1b096cc93f8b0c959ef087507704d74954808f78a82
command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf
environment: environment:
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres

1339
e2e/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "immich-e2e", "name": "immich-e2e",
"version": "1.137.2", "version": "1.135.3",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",
@@ -24,16 +24,15 @@
"@immich/cli": "file:../cli", "@immich/cli": "file:../cli",
"@immich/sdk": "file:../open-api/typescript-sdk", "@immich/sdk": "file:../open-api/typescript-sdk",
"@playwright/test": "^1.44.1", "@playwright/test": "^1.44.1",
"@socket.io/component-emitter": "^3.1.2",
"@types/luxon": "^3.4.2", "@types/luxon": "^3.4.2",
"@types/node": "^22.16.5", "@types/node": "^22.15.31",
"@types/oidc-provider": "^9.0.0", "@types/oidc-provider": "^9.0.0",
"@types/pg": "^8.15.1", "@types/pg": "^8.15.1",
"@types/pngjs": "^6.0.4", "@types/pngjs": "^6.0.4",
"@types/supertest": "^6.0.2", "@types/supertest": "^6.0.2",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"eslint": "^9.14.0", "eslint": "^9.14.0",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^59.0.0", "eslint-plugin-unicorn": "^59.0.0",
"exiftool-vendored": "^28.3.1", "exiftool-vendored": "^28.3.1",
@@ -45,7 +44,6 @@
"pngjs": "^7.0.0", "pngjs": "^7.0.0",
"prettier": "^3.2.5", "prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-organize-imports": "^4.0.0",
"sharp": "^0.34.0",
"socket.io-client": "^4.7.4", "socket.io-client": "^4.7.4",
"supertest": "^7.0.0", "supertest": "^7.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
@@ -54,6 +52,6 @@
"vitest": "^3.0.0" "vitest": "^3.0.0"
}, },
"volta": { "volta": {
"node": "22.17.1" "node": "22.16.0"
} }
} }

View File

@@ -7,7 +7,6 @@ import {
ReactionType, ReactionType,
createActivity as create, createActivity as create,
createAlbum, createAlbum,
removeAssetFromAlbum,
} from '@immich/sdk'; } from '@immich/sdk';
import { createUserDto, uuidDto } from 'src/fixtures'; import { createUserDto, uuidDto } from 'src/fixtures';
import { errorDto } from 'src/responses'; import { errorDto } from 'src/responses';
@@ -343,36 +342,5 @@ describe('/activities', () => {
expect(status).toBe(204); expect(status).toBe(204);
}); });
it('should return empty list when asset is removed', async () => {
const album3 = await createAlbum(
{
createAlbumDto: {
albumName: 'Album 3',
assetIds: [asset.id],
},
},
{ headers: asBearerAuth(admin.accessToken) },
);
await createActivity({ albumId: album3.id, assetId: asset.id, type: ReactionType.Like });
await removeAssetFromAlbum(
{
id: album3.id,
bulkIdsDto: {
ids: [asset.id],
},
},
{ headers: asBearerAuth(admin.accessToken) },
);
const { status, body } = await request(app)
.get('/activities')
.query({ albumId: album.id })
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toEqual(200);
expect(body).toEqual([]);
});
}); });
}); });

View File

@@ -470,7 +470,7 @@ describe('/albums', () => {
.send({ ids: [asset.id] }); .send({ ids: [asset.id] });
expect(status).toBe(400); expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest('Not found or no albumAsset.create access')); expect(body).toEqual(errorDto.badRequest('Not found or no album.addAsset access'));
}); });
it('should add duplicate assets only once', async () => { it('should add duplicate assets only once', async () => {
@@ -599,7 +599,7 @@ describe('/albums', () => {
.send({ ids: [user1Asset1.id] }); .send({ ids: [user1Asset1.id] });
expect(status).toBe(400); expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest('Not found or no albumAsset.delete access')); expect(body).toEqual(errorDto.badRequest('Not found or no album.removeAsset access'));
}); });
it('should remove duplicate assets only once', async () => { it('should remove duplicate assets only once', async () => {

View File

@@ -20,7 +20,7 @@ describe('/api-keys', () => {
}); });
beforeEach(async () => { beforeEach(async () => {
await utils.resetDatabase(['api_key']); await utils.resetDatabase(['api_keys']);
}); });
describe('POST /api-keys', () => { describe('POST /api-keys', () => {

View File

@@ -15,7 +15,6 @@ import { DateTime } from 'luxon';
import { randomBytes } from 'node:crypto'; import { randomBytes } from 'node:crypto';
import { readFile, writeFile } from 'node:fs/promises'; import { readFile, writeFile } from 'node:fs/promises';
import { basename, join } from 'node:path'; import { basename, join } from 'node:path';
import sharp from 'sharp';
import { Socket } from 'socket.io-client'; import { Socket } from 'socket.io-client';
import { createUserDto, uuidDto } from 'src/fixtures'; import { createUserDto, uuidDto } from 'src/fixtures';
import { makeRandomImage } from 'src/generators'; import { makeRandomImage } from 'src/generators';
@@ -41,40 +40,6 @@ const today = DateTime.fromObject({
}) as DateTime<true>; }) as DateTime<true>;
const yesterday = today.minus({ days: 1 }); const yesterday = today.minus({ days: 1 });
const createTestImageWithExif = async (filename: string, exifData: Record<string, any>) => {
// Generate unique color to ensure different checksums for each image
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
// Create a 100x100 solid color JPEG using Sharp
const imageBytes = await sharp({
create: {
width: 100,
height: 100,
channels: 3,
background: { r, g, b },
},
})
.jpeg({ quality: 90 })
.toBuffer();
// Add random suffix to filename to avoid collisions
const uniqueFilename = filename.replace('.jpg', `-${randomBytes(4).toString('hex')}.jpg`);
const filepath = join(tempDir, uniqueFilename);
await writeFile(filepath, imageBytes);
// Filter out undefined values before writing EXIF
const cleanExifData = Object.fromEntries(Object.entries(exifData).filter(([, value]) => value !== undefined));
await exiftool.write(filepath, cleanExifData);
// Re-read the image bytes after EXIF has been written
const finalImageBytes = await readFile(filepath);
return { filepath, imageBytes: finalImageBytes, filename: uniqueFilename };
};
describe('/asset', () => { describe('/asset', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let websocket: Socket; let websocket: Socket;
@@ -1225,411 +1190,6 @@ describe('/asset', () => {
}); });
}); });
describe('EXIF metadata extraction', () => {
describe('Additional date tag extraction', () => {
describe('Date-time vs time-only tag handling', () => {
it('should fall back to file timestamps when only time-only tags are available', async () => {
const { imageBytes, filename } = await createTestImageWithExif('time-only-fallback.jpg', {
TimeCreated: '2023:11:15 14:30:00', // Time-only tag, should not be used for dateTimeOriginal
// Exclude all date-time tags to force fallback to file timestamps
SubSecDateTimeOriginal: undefined,
DateTimeOriginal: undefined,
SubSecCreateDate: undefined,
SubSecMediaCreateDate: undefined,
CreateDate: undefined,
MediaCreateDate: undefined,
CreationDate: undefined,
DateTimeCreated: undefined,
GPSDateTime: undefined,
DateTimeUTC: undefined,
SonyDateTime2: undefined,
GPSDateStamp: undefined,
});
const oldDate = new Date('2020-01-01T00:00:00.000Z');
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
fileCreatedAt: oldDate.toISOString(),
fileModifiedAt: oldDate.toISOString(),
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
// Should fall back to file timestamps, which we set to 2020-01-01
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2020-01-01T00:00:00.000Z').getTime(),
);
});
it('should prefer DateTimeOriginal over time-only tags', async () => {
const { imageBytes, filename } = await createTestImageWithExif('datetime-over-time.jpg', {
DateTimeOriginal: '2023:10:10 10:00:00', // Should be preferred
TimeCreated: '2023:11:15 14:30:00', // Should be ignored (time-only)
});
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
// Should use DateTimeOriginal, not TimeCreated
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2023-10-10T10:00:00.000Z').getTime(),
);
});
});
describe('GPSDateTime tag extraction', () => {
it('should extract GPSDateTime with GPS coordinates', async () => {
const { imageBytes, filename } = await createTestImageWithExif('gps-datetime.jpg', {
GPSDateTime: '2023:11:15 12:30:00Z',
GPSLatitude: 37.7749,
GPSLongitude: -122.4194,
// Exclude other date tags
SubSecDateTimeOriginal: undefined,
DateTimeOriginal: undefined,
SubSecCreateDate: undefined,
SubSecMediaCreateDate: undefined,
CreateDate: undefined,
MediaCreateDate: undefined,
CreationDate: undefined,
DateTimeCreated: undefined,
TimeCreated: undefined,
});
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
expect(assetInfo.exifInfo?.latitude).toBeCloseTo(37.7749, 4);
expect(assetInfo.exifInfo?.longitude).toBeCloseTo(-122.4194, 4);
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2023-11-15T12:30:00.000Z').getTime(),
);
});
});
describe('CreateDate tag extraction', () => {
it('should extract CreateDate when available', async () => {
const { imageBytes, filename } = await createTestImageWithExif('create-date.jpg', {
CreateDate: '2023:11:15 10:30:00',
// Exclude other higher priority date tags
SubSecDateTimeOriginal: undefined,
DateTimeOriginal: undefined,
SubSecCreateDate: undefined,
SubSecMediaCreateDate: undefined,
MediaCreateDate: undefined,
CreationDate: undefined,
DateTimeCreated: undefined,
TimeCreated: undefined,
GPSDateTime: undefined,
});
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2023-11-15T10:30:00.000Z').getTime(),
);
});
});
describe('GPSDateStamp tag extraction', () => {
it('should fall back to file timestamps when only date-only tags are available', async () => {
const { imageBytes, filename } = await createTestImageWithExif('gps-datestamp.jpg', {
GPSDateStamp: '2023:11:15', // Date-only tag, should not be used for dateTimeOriginal
// Note: NOT including GPSTimeStamp to avoid automatic GPSDateTime creation
GPSLatitude: 51.5074,
GPSLongitude: -0.1278,
// Explicitly exclude all testable date-time tags to force fallback to file timestamps
DateTimeOriginal: undefined,
CreateDate: undefined,
CreationDate: undefined,
GPSDateTime: undefined,
});
const oldDate = new Date('2020-01-01T00:00:00.000Z');
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
fileCreatedAt: oldDate.toISOString(),
fileModifiedAt: oldDate.toISOString(),
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
expect(assetInfo.exifInfo?.latitude).toBeCloseTo(51.5074, 4);
expect(assetInfo.exifInfo?.longitude).toBeCloseTo(-0.1278, 4);
// Should fall back to file timestamps, which we set to 2020-01-01
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2020-01-01T00:00:00.000Z').getTime(),
);
});
});
/*
* NOTE: The following EXIF date tags are NOT effectively usable with JPEG test files:
*
* NOT WRITABLE to JPEG:
* - MediaCreateDate: Can be read from video files but not written to JPEG
* - DateTimeCreated: Read-only tag in JPEG format
* - DateTimeUTC: Cannot be written to JPEG files
* - SonyDateTime2: Proprietary Sony tag, not writable to JPEG
* - SubSecMediaCreateDate: Tag not defined for JPEG format
* - SourceImageCreateTime: Non-standard insta360 tag, not writable to JPEG
*
* WRITABLE but NOT READABLE from JPEG:
* - SubSecDateTimeOriginal: Can be written but not read back from JPEG
* - SubSecCreateDate: Can be written but not read back from JPEG
*
* EFFECTIVELY TESTABLE TAGS (writable and readable):
* - DateTimeOriginal ✓
* - CreateDate ✓
* - CreationDate ✓
* - GPSDateTime ✓
*
* The metadata service correctly handles non-readable tags and will fall back to
* file timestamps when only non-readable tags are present.
*/
describe('Date tag priority order', () => {
it('should respect the complete date tag priority order', async () => {
// Test cases using only EFFECTIVELY TESTABLE tags (writable AND readable from JPEG)
const testCases = [
{
name: 'DateTimeOriginal has highest priority among testable tags',
exifData: {
DateTimeOriginal: '2023:04:04 04:00:00', // TESTABLE - highest priority among readable tags
CreateDate: '2023:05:05 05:00:00', // TESTABLE
CreationDate: '2023:07:07 07:00:00', // TESTABLE
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
},
expectedDate: '2023-04-04T04:00:00.000Z',
},
{
name: 'CreateDate when DateTimeOriginal missing',
exifData: {
CreateDate: '2023:05:05 05:00:00', // TESTABLE
CreationDate: '2023:07:07 07:00:00', // TESTABLE
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
},
expectedDate: '2023-05-05T05:00:00.000Z',
},
{
name: 'CreationDate when standard EXIF tags missing',
exifData: {
CreationDate: '2023:07:07 07:00:00', // TESTABLE
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
},
expectedDate: '2023-07-07T07:00:00.000Z',
},
{
name: 'GPSDateTime when no other testable date tags present',
exifData: {
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
Make: 'SONY',
},
expectedDate: '2023-10-10T10:00:00.000Z',
},
];
for (const testCase of testCases) {
const { imageBytes, filename } = await createTestImageWithExif(
`${testCase.name.replaceAll(/\s+/g, '-').toLowerCase()}.jpg`,
testCase.exifData,
);
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal, `Failed for: ${testCase.name}`).toBeDefined();
expect(
new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime(),
`Date mismatch for: ${testCase.name}`,
).toBe(new Date(testCase.expectedDate).getTime());
}
});
});
describe('Edge cases for date tag handling', () => {
it('should fall back to file timestamps with GPSDateStamp alone', async () => {
const { imageBytes, filename } = await createTestImageWithExif('gps-datestamp-only.jpg', {
GPSDateStamp: '2023:08:08', // Date-only tag, should not be used for dateTimeOriginal
// Intentionally no GPSTimeStamp
// Exclude all other date tags
SubSecDateTimeOriginal: undefined,
DateTimeOriginal: undefined,
SubSecCreateDate: undefined,
SubSecMediaCreateDate: undefined,
CreateDate: undefined,
MediaCreateDate: undefined,
CreationDate: undefined,
DateTimeCreated: undefined,
TimeCreated: undefined,
GPSDateTime: undefined,
DateTimeUTC: undefined,
});
const oldDate = new Date('2020-01-01T00:00:00.000Z');
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
fileCreatedAt: oldDate.toISOString(),
fileModifiedAt: oldDate.toISOString(),
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
// Should fall back to file timestamps, which we set to 2020-01-01
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2020-01-01T00:00:00.000Z').getTime(),
);
});
it('should handle all testable date tags present to verify complete priority order', async () => {
const { imageBytes, filename } = await createTestImageWithExif('all-testable-date-tags.jpg', {
// All TESTABLE date tags to JPEG format (writable AND readable)
DateTimeOriginal: '2023:04:04 04:00:00', // TESTABLE - highest priority among readable tags
CreateDate: '2023:05:05 05:00:00', // TESTABLE
CreationDate: '2023:07:07 07:00:00', // TESTABLE
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
// Note: Excluded non-testable tags:
// SubSec tags: writable but not readable from JPEG
// Non-writable tags: MediaCreateDate, DateTimeCreated, DateTimeUTC, SonyDateTime2, etc.
// Time-only/date-only tags: already excluded from EXIF_DATE_TAGS
});
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
// Should use DateTimeOriginal as it has the highest priority among testable tags
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2023-04-04T04:00:00.000Z').getTime(),
);
});
it('should use CreationDate when SubSec tags are missing', async () => {
const { imageBytes, filename } = await createTestImageWithExif('creation-date-priority.jpg', {
CreationDate: '2023:07:07 07:00:00', // WRITABLE
GPSDateTime: '2023:10:10 10:00:00', // WRITABLE
// Note: DateTimeCreated, DateTimeUTC, SonyDateTime2 are NOT writable to JPEG
// Note: TimeCreated and GPSDateStamp are excluded from EXIF_DATE_TAGS (time-only/date-only)
// Exclude SubSec and standard EXIF tags
SubSecDateTimeOriginal: undefined,
DateTimeOriginal: undefined,
SubSecCreateDate: undefined,
CreateDate: undefined,
});
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
// Should use CreationDate when available
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2023-07-07T07:00:00.000Z').getTime(),
);
});
it('should skip invalid date formats and use next valid tag', async () => {
const { imageBytes, filename } = await createTestImageWithExif('invalid-date-handling.jpg', {
// Note: Testing invalid date handling with only WRITABLE tags
GPSDateTime: '2023:10:10 10:00:00', // WRITABLE - Valid date
CreationDate: '2023:13:13 13:00:00', // WRITABLE - Valid date
// Note: TimeCreated excluded (time-only), DateTimeCreated not writable to JPEG
// Exclude other date tags
SubSecDateTimeOriginal: undefined,
DateTimeOriginal: undefined,
SubSecCreateDate: undefined,
CreateDate: undefined,
});
const asset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: imageBytes,
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
// Should skip invalid dates and use the first valid one (GPSDateTime)
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
new Date('2023-10-10T10:00:00.000Z').getTime(),
);
});
});
});
});
describe('POST /assets/exist', () => { describe('POST /assets/exist', () => {
it('ignores invalid deviceAssetIds', async () => { it('ignores invalid deviceAssetIds', async () => {
const response = await utils.checkExistingAssets(user1.accessToken, { const response = await utils.checkExistingAssets(user1.accessToken, {

View File

@@ -0,0 +1,146 @@
import { LoginResponseDto, login, signUpAdmin } from '@immich/sdk';
import { loginDto, signupDto } from 'src/fixtures';
import { errorDto, loginResponseDto, signupResponseDto } from 'src/responses';
import { app, utils } from 'src/utils';
import request from 'supertest';
import { beforeEach, describe, expect, it } from 'vitest';
const { email, password } = signupDto.admin;
describe(`/auth/admin-sign-up`, () => {
beforeEach(async () => {
await utils.resetDatabase();
});
describe('POST /auth/admin-sign-up', () => {
it(`should sign up the admin`, async () => {
const { status, body } = await request(app).post('/auth/admin-sign-up').send(signupDto.admin);
expect(status).toBe(201);
expect(body).toEqual(signupResponseDto.admin);
});
it('should not allow a second admin to sign up', async () => {
await signUpAdmin({ signUpDto: signupDto.admin });
const { status, body } = await request(app).post('/auth/admin-sign-up').send(signupDto.admin);
expect(status).toBe(400);
expect(body).toEqual(errorDto.alreadyHasAdmin);
});
});
});
describe('/auth/*', () => {
let admin: LoginResponseDto;
beforeEach(async () => {
await utils.resetDatabase();
await signUpAdmin({ signUpDto: signupDto.admin });
admin = await login({ loginCredentialDto: loginDto.admin });
});
describe(`POST /auth/login`, () => {
it('should reject an incorrect password', async () => {
const { status, body } = await request(app).post('/auth/login').send({ email, password: 'incorrect' });
expect(status).toBe(401);
expect(body).toEqual(errorDto.incorrectLogin);
});
it('should accept a correct password', async () => {
const { status, body, headers } = await request(app).post('/auth/login').send({ email, password });
expect(status).toBe(201);
expect(body).toEqual(loginResponseDto.admin);
const token = body.accessToken;
expect(token).toBeDefined();
const cookies = headers['set-cookie'];
expect(cookies).toHaveLength(3);
expect(cookies[0].split(';').map((item) => item.trim())).toEqual([
`immich_access_token=${token}`,
'Max-Age=34560000',
'Path=/',
expect.stringContaining('Expires='),
'HttpOnly',
'SameSite=Lax',
]);
expect(cookies[1].split(';').map((item) => item.trim())).toEqual([
'immich_auth_type=password',
'Max-Age=34560000',
'Path=/',
expect.stringContaining('Expires='),
'HttpOnly',
'SameSite=Lax',
]);
expect(cookies[2].split(';').map((item) => item.trim())).toEqual([
'immich_is_authenticated=true',
'Max-Age=34560000',
'Path=/',
expect.stringContaining('Expires='),
'SameSite=Lax',
]);
});
});
describe('POST /auth/validateToken', () => {
it('should reject an invalid token', async () => {
const { status, body } = await request(app).post(`/auth/validateToken`).set('Authorization', 'Bearer 123');
expect(status).toBe(401);
expect(body).toEqual(errorDto.invalidToken);
});
it('should accept a valid token', async () => {
const { status, body } = await request(app)
.post(`/auth/validateToken`)
.send({})
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
expect(body).toEqual({ authStatus: true });
});
});
describe('POST /auth/change-password', () => {
it('should require the current password', async () => {
const { status, body } = await request(app)
.post(`/auth/change-password`)
.send({ password: 'wrong-password', newPassword: 'Password1234' })
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.wrongPassword);
});
it('should change the password', async () => {
const { status } = await request(app)
.post(`/auth/change-password`)
.send({ password, newPassword: 'Password1234' })
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
await login({
loginCredentialDto: {
email: 'admin@immich.cloud',
password: 'Password1234',
},
});
});
});
describe('POST /auth/logout', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).post(`/auth/logout`);
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should logout the user', async () => {
const { status, body } = await request(app)
.post(`/auth/logout`)
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
expect(body).toEqual({
successful: true,
redirectUri: '/auth/login?autoLaunch=0',
});
});
});
});

View File

@@ -6,7 +6,7 @@ import {
createMemory, createMemory,
getMemory, getMemory,
} from '@immich/sdk'; } from '@immich/sdk';
import { createUserDto } from 'src/fixtures'; import { createUserDto, uuidDto } from 'src/fixtures';
import { errorDto } from 'src/responses'; import { errorDto } from 'src/responses';
import { app, asBearerAuth, utils } from 'src/utils'; import { app, asBearerAuth, utils } from 'src/utils';
import request from 'supertest'; import request from 'supertest';
@@ -17,6 +17,7 @@ describe('/memories', () => {
let user: LoginResponseDto; let user: LoginResponseDto;
let adminAsset: AssetMediaResponseDto; let adminAsset: AssetMediaResponseDto;
let userAsset1: AssetMediaResponseDto; let userAsset1: AssetMediaResponseDto;
let userAsset2: AssetMediaResponseDto;
let userMemory: MemoryResponseDto; let userMemory: MemoryResponseDto;
beforeAll(async () => { beforeAll(async () => {
@@ -24,9 +25,10 @@ describe('/memories', () => {
admin = await utils.adminSetup(); admin = await utils.adminSetup();
user = await utils.userSetup(admin.accessToken, createUserDto.user1); user = await utils.userSetup(admin.accessToken, createUserDto.user1);
[adminAsset, userAsset1] = await Promise.all([ [adminAsset, userAsset1, userAsset2] = await Promise.all([
utils.createAsset(admin.accessToken), utils.createAsset(admin.accessToken),
utils.createAsset(user.accessToken), utils.createAsset(user.accessToken),
utils.createAsset(user.accessToken),
]); ]);
userMemory = await createMemory( userMemory = await createMemory(
{ {
@@ -41,7 +43,121 @@ describe('/memories', () => {
); );
}); });
describe('GET /memories', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).get('/memories');
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
});
describe('POST /memories', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).post('/memories');
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should validate data when type is on this day', async () => {
const { status, body } = await request(app)
.post('/memories')
.set('Authorization', `Bearer ${user.accessToken}`)
.send({
type: 'on_this_day',
data: {},
memoryAt: new Date(2021).toISOString(),
});
expect(status).toBe(400);
expect(body).toEqual(
errorDto.badRequest(['data.year must be a positive number', 'data.year must be an integer number']),
);
});
it('should create a new memory', async () => {
const { status, body } = await request(app)
.post('/memories')
.set('Authorization', `Bearer ${user.accessToken}`)
.send({
type: 'on_this_day',
data: { year: 2021 },
memoryAt: new Date(2021).toISOString(),
});
expect(status).toBe(201);
expect(body).toEqual({
id: expect.any(String),
type: 'on_this_day',
data: { year: 2021 },
createdAt: expect.any(String),
updatedAt: expect.any(String),
isSaved: false,
memoryAt: expect.any(String),
ownerId: user.userId,
assets: [],
});
});
it('should create a new memory (with assets)', async () => {
const { status, body } = await request(app)
.post('/memories')
.set('Authorization', `Bearer ${user.accessToken}`)
.send({
type: 'on_this_day',
data: { year: 2021 },
memoryAt: new Date(2021).toISOString(),
assetIds: [userAsset1.id, userAsset2.id],
});
expect(status).toBe(201);
expect(body).toMatchObject({
id: expect.any(String),
assets: expect.arrayContaining([
expect.objectContaining({ id: userAsset1.id }),
expect.objectContaining({ id: userAsset2.id }),
]),
});
expect(body.assets).toHaveLength(2);
});
it('should create a new memory and ignore assets the user does not have access to', async () => {
const { status, body } = await request(app)
.post('/memories')
.set('Authorization', `Bearer ${user.accessToken}`)
.send({
type: 'on_this_day',
data: { year: 2021 },
memoryAt: new Date(2021).toISOString(),
assetIds: [userAsset1.id, adminAsset.id],
});
expect(status).toBe(201);
expect(body).toMatchObject({
id: expect.any(String),
assets: [expect.objectContaining({ id: userAsset1.id })],
});
expect(body.assets).toHaveLength(1);
});
});
describe('GET /memories/:id', () => { describe('GET /memories/:id', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).get(`/memories/${uuidDto.invalid}`);
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should require a valid id', async () => {
const { status, body } = await request(app)
.get(`/memories/${uuidDto.invalid}`)
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['id must be a UUID']));
});
it('should require access', async () => { it('should require access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/memories/${userMemory.id}`) .get(`/memories/${userMemory.id}`)
@@ -60,6 +176,22 @@ describe('/memories', () => {
}); });
describe('PUT /memories/:id', () => { describe('PUT /memories/:id', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).put(`/memories/${uuidDto.invalid}`).send({ isSaved: true });
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should require a valid id', async () => {
const { status, body } = await request(app)
.put(`/memories/${uuidDto.invalid}`)
.send({ isSaved: true })
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['id must be a UUID']));
});
it('should require access', async () => { it('should require access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/memories/${userMemory.id}`) .put(`/memories/${userMemory.id}`)
@@ -86,6 +218,23 @@ describe('/memories', () => {
}); });
describe('PUT /memories/:id/assets', () => { describe('PUT /memories/:id/assets', () => {
it('should require authentication', async () => {
const { status, body } = await request(app)
.put(`/memories/${userMemory.id}/assets`)
.send({ ids: [userAsset1.id] });
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should require a valid id', async () => {
const { status, body } = await request(app)
.put(`/memories/${uuidDto.invalid}/assets`)
.send({ ids: [userAsset1.id] })
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['id must be a UUID']));
});
it('should require access', async () => { it('should require access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/memories/${userMemory.id}/assets`) .put(`/memories/${userMemory.id}/assets`)
@@ -95,6 +244,15 @@ describe('/memories', () => {
expect(body).toEqual(errorDto.noPermission); expect(body).toEqual(errorDto.noPermission);
}); });
it('should require a valid asset id', async () => {
const { status, body } = await request(app)
.put(`/memories/${userMemory.id}/assets`)
.send({ ids: [uuidDto.invalid] })
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['each value in ids must be a UUID']));
});
it('should require asset access', async () => { it('should require asset access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/memories/${userMemory.id}/assets`) .put(`/memories/${userMemory.id}/assets`)
@@ -121,6 +279,23 @@ describe('/memories', () => {
}); });
describe('DELETE /memories/:id/assets', () => { describe('DELETE /memories/:id/assets', () => {
it('should require authentication', async () => {
const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}/assets`)
.send({ ids: [userAsset1.id] });
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should require a valid id', async () => {
const { status, body } = await request(app)
.delete(`/memories/${uuidDto.invalid}/assets`)
.send({ ids: [userAsset1.id] })
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['id must be a UUID']));
});
it('should require access', async () => { it('should require access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}/assets`) .delete(`/memories/${userMemory.id}/assets`)
@@ -130,6 +305,15 @@ describe('/memories', () => {
expect(body).toEqual(errorDto.noPermission); expect(body).toEqual(errorDto.noPermission);
}); });
it('should require a valid asset id', async () => {
const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}/assets`)
.send({ ids: [uuidDto.invalid] })
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['each value in ids must be a UUID']));
});
it('should only remove assets in the memory', async () => { it('should only remove assets in the memory', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}/assets`) .delete(`/memories/${userMemory.id}/assets`)
@@ -156,6 +340,21 @@ describe('/memories', () => {
}); });
describe('DELETE /memories/:id', () => { describe('DELETE /memories/:id', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).delete(`/memories/${uuidDto.invalid}`);
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should require a valid id', async () => {
const { status, body } = await request(app)
.delete(`/memories/${uuidDto.invalid}`)
.set('Authorization', `Bearer ${user.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['id must be a UUID']));
});
it('should require access', async () => { it('should require access', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}`) .delete(`/memories/${userMemory.id}`)

View File

@@ -227,21 +227,6 @@ describe(`/oauth`, () => {
expect(user.storageLabel).toBe('user-username'); expect(user.storageLabel).toBe('user-username');
}); });
it('should set the admin status from a role claim', async () => {
const callbackParams = await loginWithOAuth(OAuthUser.WITH_ROLE);
const { status, body } = await request(app).post('/oauth/callback').send(callbackParams);
expect(status).toBe(201);
expect(body).toMatchObject({
accessToken: expect.any(String),
userId: expect.any(String),
userEmail: 'oauth-with-role@immich.app',
isAdmin: true,
});
const user = await getMyUser({ headers: asBearerAuth(body.accessToken) });
expect(user.isAdmin).toBe(true);
});
it('should work with RS256 signed tokens', async () => { it('should work with RS256 signed tokens', async () => {
await setupOAuth(admin.accessToken, { await setupOAuth(admin.accessToken, {
enabled: true, enabled: true,

View File

@@ -117,25 +117,8 @@ describe('/shared-links', () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`); const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
expect(resp.status).toBe(200); expect(resp.status).toBe(200);
expect(resp.header['content-type']).toContain('text/html'); expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).toContain(`<meta property="og:image" content="http://127.0.0.1:2285`);
});
it('should fall back to my.immich.app og:image meta tag for shared asset if Host header is not present', async () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`).set('Host', '');
expect(resp.status).toBe(200);
expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).toContain(`<meta property="og:image" content="https://my.immich.app`); expect(resp.text).toContain(`<meta property="og:image" content="https://my.immich.app`);
}); });
it('should return 404 for an invalid shared link', async () => {
const resp = await request(shareUrl).get(`/invalid-key`);
expect(resp.status).toBe(404);
expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).not.toContain(`og:type`);
expect(resp.text).not.toContain(`og:title`);
expect(resp.text).not.toContain(`og:description`);
expect(resp.text).not.toContain(`og:image`);
});
}); });
describe('GET /shared-links', () => { describe('GET /shared-links', () => {

View File

@@ -15,6 +15,12 @@ describe('/system-config', () => {
}); });
describe('PUT /system-config', () => { describe('PUT /system-config', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).put('/system-config');
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should always return the new config', async () => { it('should always return the new config', async () => {
const config = await getSystemConfig(admin.accessToken); const config = await getSystemConfig(admin.accessToken);

View File

@@ -37,7 +37,7 @@ describe('/tags', () => {
beforeEach(async () => { beforeEach(async () => {
// tagging assets eventually triggers metadata extraction which can impact other tests // tagging assets eventually triggers metadata extraction which can impact other tests
await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction'); await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction');
await utils.resetDatabase(['tag']); await utils.resetDatabase(['tags']);
}); });
describe('POST /tags', () => { describe('POST /tags', () => {

View File

@@ -0,0 +1,230 @@
import {
AssetMediaResponseDto,
AssetVisibility,
LoginResponseDto,
SharedLinkType,
TimeBucketAssetResponseDto,
} from '@immich/sdk';
import { DateTime } from 'luxon';
import { createUserDto } from 'src/fixtures';
import { errorDto } from 'src/responses';
import { app, utils } from 'src/utils';
import request from 'supertest';
import { beforeAll, describe, expect, it } from 'vitest';
// TODO this should probably be a test util function
const today = DateTime.fromObject({
year: 2023,
month: 11,
day: 3,
}) as DateTime<true>;
const yesterday = today.minus({ days: 1 });
describe('/timeline', () => {
let admin: LoginResponseDto;
let user: LoginResponseDto;
let timeBucketUser: LoginResponseDto;
let user1Assets: AssetMediaResponseDto[];
let user2Assets: AssetMediaResponseDto[];
beforeAll(async () => {
await utils.resetDatabase();
admin = await utils.adminSetup({ onboarding: false });
[user, timeBucketUser] = await Promise.all([
utils.userSetup(admin.accessToken, createUserDto.create('1')),
utils.userSetup(admin.accessToken, createUserDto.create('time-bucket')),
]);
user1Assets = await Promise.all([
utils.createAsset(user.accessToken),
utils.createAsset(user.accessToken),
utils.createAsset(user.accessToken, {
isFavorite: true,
fileCreatedAt: yesterday.toISO(),
fileModifiedAt: yesterday.toISO(),
assetData: { filename: 'example.mp4' },
}),
utils.createAsset(user.accessToken),
utils.createAsset(user.accessToken),
]);
user2Assets = await Promise.all([
utils.createAsset(timeBucketUser.accessToken, { fileCreatedAt: new Date('1970-01-01').toISOString() }),
utils.createAsset(timeBucketUser.accessToken, { fileCreatedAt: new Date('1970-02-10').toISOString() }),
utils.createAsset(timeBucketUser.accessToken, { fileCreatedAt: new Date('1970-02-11').toISOString() }),
utils.createAsset(timeBucketUser.accessToken, { fileCreatedAt: new Date('1970-02-11').toISOString() }),
utils.createAsset(timeBucketUser.accessToken, { fileCreatedAt: new Date('1970-02-12').toISOString() }),
]);
await utils.deleteAssets(timeBucketUser.accessToken, [user2Assets[4].id]);
});
describe('GET /timeline/buckets', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).get('/timeline/buckets');
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should get time buckets by month', async () => {
const { status, body } = await request(app)
.get('/timeline/buckets')
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`);
expect(status).toBe(200);
expect(body).toEqual(
expect.arrayContaining([
{ count: 3, timeBucket: '1970-02-01' },
{ count: 1, timeBucket: '1970-01-01' },
]),
);
});
it('should not allow access for unrelated shared links', async () => {
const sharedLink = await utils.createSharedLink(user.accessToken, {
type: SharedLinkType.Individual,
assetIds: user1Assets.map(({ id }) => id),
});
const { status, body } = await request(app).get('/timeline/buckets').query({ key: sharedLink.key });
expect(status).toBe(400);
expect(body).toEqual(errorDto.noPermission);
});
it('should return error if time bucket is requested with partners asset and archived', async () => {
const req1 = await request(app)
.get('/timeline/buckets')
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`)
.query({ withPartners: true, visibility: AssetVisibility.Archive });
expect(req1.status).toBe(400);
expect(req1.body).toEqual(errorDto.badRequest());
const req2 = await request(app)
.get('/timeline/buckets')
.set('Authorization', `Bearer ${user.accessToken}`)
.query({ withPartners: true, visibility: undefined });
expect(req2.status).toBe(400);
expect(req2.body).toEqual(errorDto.badRequest());
});
it('should return error if time bucket is requested with partners asset and favorite', async () => {
const req1 = await request(app)
.get('/timeline/buckets')
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`)
.query({ withPartners: true, isFavorite: true });
expect(req1.status).toBe(400);
expect(req1.body).toEqual(errorDto.badRequest());
const req2 = await request(app)
.get('/timeline/buckets')
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`)
.query({ withPartners: true, isFavorite: false });
expect(req2.status).toBe(400);
expect(req2.body).toEqual(errorDto.badRequest());
});
it('should return error if time bucket is requested with partners asset and trash', async () => {
const req = await request(app)
.get('/timeline/buckets')
.set('Authorization', `Bearer ${user.accessToken}`)
.query({ withPartners: true, isTrashed: true });
expect(req.status).toBe(400);
expect(req.body).toEqual(errorDto.badRequest());
});
});
describe('GET /timeline/bucket', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).get('/timeline/bucket').query({
timeBucket: '1900-01-01',
});
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should handle 5 digit years', async () => {
const { status, body } = await request(app)
.get('/timeline/bucket')
.query({ timeBucket: '012345-01-01' })
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`);
expect(status).toBe(200);
expect(body).toEqual({
city: [],
country: [],
duration: [],
id: [],
visibility: [],
isFavorite: [],
isImage: [],
isTrashed: [],
livePhotoVideoId: [],
fileCreatedAt: [],
localOffsetHours: [],
ownerId: [],
projectionType: [],
ratio: [],
status: [],
thumbhash: [],
});
});
// TODO enable date string validation while still accepting 5 digit years
// it('should fail if time bucket is invalid', async () => {
// const { status, body } = await request(app)
// .get('/timeline/bucket')
// .set('Authorization', `Bearer ${user.accessToken}`)
// .query({ timeBucket: 'foo' });
// expect(status).toBe(400);
// expect(body).toEqual(errorDto.badRequest);
// });
it('should return time bucket', async () => {
const { status, body } = await request(app)
.get('/timeline/bucket')
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`)
.query({ timeBucket: '1970-02-10' });
expect(status).toBe(200);
expect(body).toEqual({
city: [],
country: [],
duration: [],
id: [],
visibility: [],
isFavorite: [],
isImage: [],
isTrashed: [],
livePhotoVideoId: [],
fileCreatedAt: [],
localOffsetHours: [],
ownerId: [],
projectionType: [],
ratio: [],
status: [],
thumbhash: [],
});
});
it('should return time bucket in trash', async () => {
const { status, body } = await request(app)
.get('/timeline/bucket')
.set('Authorization', `Bearer ${timeBucketUser.accessToken}`)
.query({ timeBucket: '1970-02-01T00:00:00.000Z', isTrashed: true });
expect(status).toBe(200);
const timeBucket: TimeBucketAssetResponseDto = body;
expect(timeBucket.isTrashed).toEqual([true]);
});
});
});

View File

@@ -97,7 +97,7 @@ describe(`immich upload`, () => {
}); });
beforeEach(async () => { beforeEach(async () => {
await utils.resetDatabase(['asset', 'album']); await utils.resetDatabase(['assets', 'albums']);
}); });
describe(`immich upload /path/to/file.jpg`, () => { describe(`immich upload /path/to/file.jpg`, () => {

View File

@@ -1,178 +0,0 @@
#!/usr/bin/env node
/**
* Script to generate test images with additional EXIF date tags
* This creates actual JPEG images with embedded metadata for testing
* Images are generated into e2e/test-assets/metadata/dates/
*/
import { execSync } from 'node:child_process';
import { writeFileSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import sharp from 'sharp';
interface TestImage {
filename: string;
description: string;
exifTags: Record<string, string>;
}
const testImages: TestImage[] = [
{
filename: 'time-created.jpg',
description: 'Image with TimeCreated tag',
exifTags: {
TimeCreated: '2023:11:15 14:30:00',
Make: 'Canon',
Model: 'EOS R5',
},
},
{
filename: 'gps-datetime.jpg',
description: 'Image with GPSDateTime and coordinates',
exifTags: {
GPSDateTime: '2023:11:15 12:30:00Z',
GPSLatitude: '37.7749',
GPSLongitude: '-122.4194',
GPSLatitudeRef: 'N',
GPSLongitudeRef: 'W',
},
},
{
filename: 'datetime-utc.jpg',
description: 'Image with DateTimeUTC tag',
exifTags: {
DateTimeUTC: '2023:11:15 10:30:00',
Make: 'Nikon',
Model: 'D850',
},
},
{
filename: 'gps-datestamp.jpg',
description: 'Image with GPSDateStamp and GPSTimeStamp',
exifTags: {
GPSDateStamp: '2023:11:15',
GPSTimeStamp: '08:30:00',
GPSLatitude: '51.5074',
GPSLongitude: '-0.1278',
GPSLatitudeRef: 'N',
GPSLongitudeRef: 'W',
},
},
{
filename: 'sony-datetime2.jpg',
description: 'Sony camera image with SonyDateTime2 tag',
exifTags: {
SonyDateTime2: '2023:11:15 06:30:00',
Make: 'SONY',
Model: 'ILCE-7RM5',
},
},
{
filename: 'date-priority-test.jpg',
description: 'Image with multiple date tags to test priority',
exifTags: {
SubSecDateTimeOriginal: '2023:01:01 01:00:00',
DateTimeOriginal: '2023:02:02 02:00:00',
SubSecCreateDate: '2023:03:03 03:00:00',
CreateDate: '2023:04:04 04:00:00',
CreationDate: '2023:05:05 05:00:00',
DateTimeCreated: '2023:06:06 06:00:00',
TimeCreated: '2023:07:07 07:00:00',
GPSDateTime: '2023:08:08 08:00:00',
DateTimeUTC: '2023:09:09 09:00:00',
GPSDateStamp: '2023:10:10',
SonyDateTime2: '2023:11:11 11:00:00',
},
},
{
filename: 'new-tags-only.jpg',
description: 'Image with only additional date tags (no standard tags)',
exifTags: {
TimeCreated: '2023:12:01 15:45:30',
GPSDateTime: '2023:12:01 13:45:30Z',
DateTimeUTC: '2023:12:01 13:45:30',
GPSDateStamp: '2023:12:01',
SonyDateTime2: '2023:12:01 08:45:30',
GPSLatitude: '40.7128',
GPSLongitude: '-74.0060',
GPSLatitudeRef: 'N',
GPSLongitudeRef: 'W',
},
},
];
const generateTestImages = async (): Promise<void> => {
// Target directory: e2e/test-assets/metadata/dates/
// Current file is in: e2e/src/
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const targetDir = join(__dirname, '..', 'test-assets', 'metadata', 'dates');
console.log('Generating test images with additional EXIF date tags...');
console.log(`Target directory: ${targetDir}`);
for (const image of testImages) {
try {
const imagePath = join(targetDir, image.filename);
// Create unique JPEG file using Sharp
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
const jpegData = await sharp({
create: {
width: 100,
height: 100,
channels: 3,
background: { r, g, b },
},
})
.jpeg({ quality: 90 })
.toBuffer();
writeFileSync(imagePath, jpegData);
// Build exiftool command to add EXIF data
const exifArgs = Object.entries(image.exifTags)
.map(([tag, value]) => `-${tag}="${value}"`)
.join(' ');
const command = `exiftool ${exifArgs} -overwrite_original "${imagePath}"`;
console.log(`Creating ${image.filename}: ${image.description}`);
execSync(command, { stdio: 'pipe' });
// Verify the tags were written
const verifyCommand = `exiftool -json "${imagePath}"`;
const result = execSync(verifyCommand, { encoding: 'utf8' });
const metadata = JSON.parse(result)[0];
console.log(` ✓ Created with ${Object.keys(image.exifTags).length} EXIF tags`);
// Log first date tag found for verification
const firstDateTag = Object.keys(image.exifTags).find(
(tag) => tag.includes('Date') || tag.includes('Time') || tag.includes('Created'),
);
if (firstDateTag && metadata[firstDateTag]) {
console.log(` ✓ Verified ${firstDateTag}: ${metadata[firstDateTag]}`);
}
} catch (error) {
console.error(`Failed to create ${image.filename}:`, (error as Error).message);
}
}
console.log('\nTest image generation complete!');
console.log('Files created in:', targetDir);
console.log('\nTo test these images:');
console.log(`cd ${targetDir} && exiftool -time:all -gps:all *.jpg`);
};
export { generateTestImages };
// Run the generator if this file is executed directly
if (import.meta.url === `file://${process.argv[1]}`) {
generateTestImages().catch(console.error);
}

View File

@@ -116,7 +116,6 @@ export const deviceDto = {
createdAt: expect.any(String), createdAt: expect.any(String),
updatedAt: expect.any(String), updatedAt: expect.any(String),
current: true, current: true,
isPendingSyncReset: false,
deviceOS: '', deviceOS: '',
deviceType: '', deviceType: '',
}, },

View File

@@ -12,7 +12,6 @@ export enum OAuthUser {
NO_NAME = 'no-name', NO_NAME = 'no-name',
WITH_QUOTA = 'with-quota', WITH_QUOTA = 'with-quota',
WITH_USERNAME = 'with-username', WITH_USERNAME = 'with-username',
WITH_ROLE = 'with-role',
} }
const claims = [ const claims = [
@@ -35,12 +34,6 @@ const claims = [
preferred_username: 'user-quota', preferred_username: 'user-quota',
immich_quota: 25, immich_quota: 25,
}, },
{
sub: OAuthUser.WITH_ROLE,
email: 'oauth-with-role@immich.app',
email_verified: true,
immich_role: 'admin',
},
]; ];
const withDefaultClaims = (sub: string) => ({ const withDefaultClaims = (sub: string) => ({
@@ -71,15 +64,7 @@ const setup = async () => {
claims: { claims: {
openid: ['sub'], openid: ['sub'],
email: ['email', 'email_verified'], email: ['email', 'email_verified'],
profile: [ profile: ['name', 'given_name', 'family_name', 'preferred_username', 'immich_quota', 'immich_username'],
'name',
'given_name',
'family_name',
'preferred_username',
'immich_quota',
'immich_username',
'immich_role',
],
}, },
features: { features: {
jwtUserinfo: { jwtUserinfo: {

View File

@@ -60,7 +60,6 @@ import { io, type Socket } from 'socket.io-client';
import { loginDto, signupDto } from 'src/fixtures'; import { loginDto, signupDto } from 'src/fixtures';
import { makeRandomImage } from 'src/generators'; import { makeRandomImage } from 'src/generators';
import request from 'supertest'; import request from 'supertest';
export type { Emitter } from '@socket.io/component-emitter';
type CommandResponse = { stdout: string; stderr: string; exitCode: number | null }; type CommandResponse = { stdout: string; stderr: string; exitCode: number | null };
type EventType = 'assetUpload' | 'assetUpdate' | 'assetDelete' | 'userDelete' | 'assetHidden'; type EventType = 'assetUpload' | 'assetUpdate' | 'assetDelete' | 'userDelete' | 'assetHidden';
@@ -85,10 +84,10 @@ export const immichAdmin = (args: string[]) =>
export const specialCharStrings = ["'", '"', ',', '{', '}', '*']; export const specialCharStrings = ["'", '"', ',', '{', '}', '*'];
export const TEN_TIMES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; export const TEN_TIMES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const executeCommand = (command: string, args: string[], options?: { cwd?: string }) => { const executeCommand = (command: string, args: string[]) => {
let _resolve: (value: CommandResponse) => void; let _resolve: (value: CommandResponse) => void;
const promise = new Promise<CommandResponse>((resolve) => (_resolve = resolve)); const promise = new Promise<CommandResponse>((resolve) => (_resolve = resolve));
const child = spawn(command, args, { stdio: 'pipe', cwd: options?.cwd }); const child = spawn(command, args, { stdio: 'pipe' });
let stdout = ''; let stdout = '';
let stderr = ''; let stderr = '';
@@ -154,19 +153,19 @@ export const utils = {
tables = tables || [ tables = tables || [
// TODO e2e test for deleting a stack, since it is quite complex // TODO e2e test for deleting a stack, since it is quite complex
'stack', 'asset_stack',
'library', 'libraries',
'shared_link', 'shared_links',
'person', 'person',
'album', 'albums',
'asset', 'assets',
'asset_face', 'asset_faces',
'activity', 'activity',
'api_key', 'api_keys',
'session', 'sessions',
'user', 'users',
'system_metadata', 'system_metadata',
'tag', 'tags',
]; ];
const sql: string[] = []; const sql: string[] = [];
@@ -175,7 +174,7 @@ export const utils = {
if (table === 'system_metadata') { if (table === 'system_metadata') {
sql.push(`DELETE FROM "system_metadata" where "key" NOT IN ('reverse-geocoding-state', 'system-flags');`); sql.push(`DELETE FROM "system_metadata" where "key" NOT IN ('reverse-geocoding-state', 'system-flags');`);
} else { } else {
sql.push(`DELETE FROM "${table}" CASCADE;`); sql.push(`DELETE FROM ${table} CASCADE;`);
} }
} }
@@ -186,6 +185,18 @@ export const utils = {
} }
}, },
resetFilesystem: async () => {
const mediaInternal = '/usr/src/app/upload';
const dirs = [
`"${mediaInternal}/thumbs"`,
`"${mediaInternal}/upload"`,
`"${mediaInternal}/library"`,
`"${mediaInternal}/encoded-video"`,
].join(' ');
await execPromise(`docker exec -i "immich-e2e-server" /bin/bash -c "rm -rf ${dirs} && mkdir ${dirs}"`);
},
unzip: async (input: string, output: string) => { unzip: async (input: string, output: string) => {
await execPromise(`unzip -o -d "${output}" "${input}"`); await execPromise(`unzip -o -d "${output}" "${input}"`);
}, },
@@ -439,7 +450,7 @@ export const utils = {
return; return;
} }
await client.query('INSERT INTO asset_face ("assetId", "personId") VALUES ($1, $2)', [assetId, personId]); await client.query('INSERT INTO asset_faces ("assetId", "personId") VALUES ($1, $2)', [assetId, personId]);
}, },
setPersonThumbnail: async (personId: string) => { setPersonThumbnail: async (personId: string) => {

View File

@@ -37,7 +37,6 @@ test.describe('Registration', () => {
await page.getByRole('button', { name: 'Server Privacy' }).click(); await page.getByRole('button', { name: 'Server Privacy' }).click();
await page.getByRole('button', { name: 'User Privacy' }).click(); await page.getByRole('button', { name: 'User Privacy' }).click();
await page.getByRole('button', { name: 'Storage Template' }).click(); await page.getByRole('button', { name: 'Storage Template' }).click();
await page.getByRole('button', { name: 'Backups' }).click();
await page.getByRole('button', { name: 'Done' }).click(); await page.getByRole('button', { name: 'Done' }).click();
// success // success

View File

@@ -4,7 +4,6 @@
"account_settings": "Rekeninginstellings", "account_settings": "Rekeninginstellings",
"acknowledge": "Erken", "acknowledge": "Erken",
"action": "Aksie", "action": "Aksie",
"action_common_update": "Opdateur",
"actions": "Aksies", "actions": "Aksies",
"active": "Aktief", "active": "Aktief",
"activity": "Aktiwiteite", "activity": "Aktiwiteite",
@@ -14,7 +13,6 @@
"add_a_location": "Voeg 'n ligging by", "add_a_location": "Voeg 'n ligging by",
"add_a_name": "Voeg 'n naam by", "add_a_name": "Voeg 'n naam by",
"add_a_title": "Voeg 'n titel by", "add_a_title": "Voeg 'n titel by",
"add_endpoint": "Voeg Koppelvlakpunt by",
"add_exclusion_pattern": "Voeg uitsgluitingspatrone by", "add_exclusion_pattern": "Voeg uitsgluitingspatrone by",
"add_import_path": "Voeg invoerpad by", "add_import_path": "Voeg invoerpad by",
"add_location": "Voeg ligging by", "add_location": "Voeg ligging by",
@@ -22,30 +20,26 @@
"add_partner": "Voeg vennoot by", "add_partner": "Voeg vennoot by",
"add_path": "Voeg pad by", "add_path": "Voeg pad by",
"add_photos": "Voeg foto's by", "add_photos": "Voeg foto's by",
"add_tag": "Voeg tag by",
"add_to": "Voeg by…", "add_to": "Voeg by…",
"add_to_album": "Voeg na album", "add_to_album": "Voeg na album",
"add_to_album_bottom_sheet_added": "By {album} bygevoeg", "add_to_shared_album": "Voeg na gedeelde album",
"add_to_album_bottom_sheet_already_exists": "Reeds in {album}",
"add_to_shared_album": "Voeg toe aan gedeelde album",
"add_url": "Voeg URL by", "add_url": "Voeg URL by",
"added_to_archive": "By argief toegevoegd", "added_to_archive": "By argief gevoeg",
"added_to_favorites": "By gunstelinge toegevoegd", "added_to_favorites": "By gunstelinge gevoeg",
"added_to_favorites_count": "Het {count, number} by gunstelinge toegevoegd", "added_to_favorites_count": "Het {count, number} by gunstelinge gevoeg",
"admin": { "admin": {
"add_exclusion_pattern_description": "Voeg uitsluitingspatrone by. Globbing met *, ** en ? word ondersteun. Om alle lêers in enige lêergids genaamd \"Raw\" te ignoreer, gebruik \"**/Raw/**\". Om alle lêers wat op \".tif\" eindig, te ignoreer, gebruik \"**/*.tif\". Om 'n absolute pad te ignoreer, gebruik \"/path/to/ignore/**\".", "add_exclusion_pattern_description": "Voeg uitsluitingspatrone by. Globbing met *, ** en ? word ondersteun. Om alle lêers in enige lêergids genaamd \"Raw\" te ignoreer, gebruik \"**/Raw/**\". Om alle lêers wat op \".tif\" eindig, te ignoreer, gebruik \"**/*.tif\". Om 'n absolute pad te ignoreer, gebruik \"/path/to/ignore/**\".",
"admin_user": "Admin gebruiker",
"asset_offline_description": "Hierdie eksterne biblioteekbate word nie meer op skyf gevind nie en is na die asblik geskuif. As die lêer binne die biblioteek geskuif is, gaan jou tydlyn na vir die nuwe ooreenstemmende bate. Om hierdie bate te herstel, maak asseblief seker dat die lêerpad hieronder deur Immich verkry kan word en skandeer die biblioteek.", "asset_offline_description": "Hierdie eksterne biblioteekbate word nie meer op skyf gevind nie en is na die asblik geskuif. As die lêer binne die biblioteek geskuif is, gaan jou tydlyn na vir die nuwe ooreenstemmende bate. Om hierdie bate te herstel, maak asseblief seker dat die lêerpad hieronder deur Immich verkry kan word en skandeer die biblioteek.",
"authentication_settings": "Verifikasie instellings", "authentication_settings": "Verifikasie instellings",
"authentication_settings_description": "Bestuur wagwoord, OAuth en ander verifikasie instellings", "authentication_settings_description": "Bestuur wagwoord, OAuth en ander verifikasie instellings",
"authentication_settings_disable_all": "Is jy seker jy wil alle aanmeldmetodes deaktiveer? Aanmelding sal heeltemal gedeaktiveer word.", "authentication_settings_disable_all": "Is jy seker jy wil alle aanmeldmetodes deaktiveer? Aanmelding sal heeltemal gedeaktiveer word.",
"authentication_settings_reenable": "Om te heraktiveer, gebruik 'n <link>Server Command</link>.", "authentication_settings_reenable": "Om te heraktiveer, gebruik 'n <link>Server Command</link>.",
"background_task_job": "Agtergrondtake", "background_task_job": "Agtergrondtake",
"backup_database": "Skep Datastortlêer", "backup_database": "Rugsteun databasis",
"backup_database_enable_description": "Aktiveer databasisrugsteun", "backup_database_enable_description": "Aktiveer databasisrugsteun",
"backup_keep_last_amount": "Aantal vorige rugsteune om te hou", "backup_keep_last_amount": "Aantal vorige rugsteune om te hou",
"backup_settings": "Rugsteun instellings", "backup_settings": "Rugsteun instellings",
"backup_settings_description": "Bestuur databasis rugsteun instellings.", "backup_settings_description": "Bestuur databasis rugsteun instellings",
"cleared_jobs": "Poste gevee vir: {job}", "cleared_jobs": "Poste gevee vir: {job}",
"config_set_by_file": "Config word tans deur 'n konfigurasielêer gestel", "config_set_by_file": "Config word tans deur 'n konfigurasielêer gestel",
"confirm_delete_library": "Is jy seker jy wil {library}-biblioteek uitvee?", "confirm_delete_library": "Is jy seker jy wil {library}-biblioteek uitvee?",
@@ -53,7 +47,6 @@
"confirm_email_below": "Om te bevestig, tik \"{email}\" hieronder", "confirm_email_below": "Om te bevestig, tik \"{email}\" hieronder",
"confirm_reprocess_all_faces": "Is jy seker jy wil alle gesigte herverwerk? Dit sal ook genoemde mense skoonmaak.", "confirm_reprocess_all_faces": "Is jy seker jy wil alle gesigte herverwerk? Dit sal ook genoemde mense skoonmaak.",
"confirm_user_password_reset": "Is jy seker jy wil {user} se wagwoord terugstel?", "confirm_user_password_reset": "Is jy seker jy wil {user} se wagwoord terugstel?",
"confirm_user_pin_code_reset": "Is jy seker jy wil {user} se PIN kode herstel?",
"create_job": "Skep werk", "create_job": "Skep werk",
"cron_expression": "Cron uitdrukking", "cron_expression": "Cron uitdrukking",
"cron_expression_description": "Stel die skanderingsinterval in met die cron-formaat. Vir meer inligting verwys asseblief na bv. <link>Crontab Guru</link>", "cron_expression_description": "Stel die skanderingsinterval in met die cron-formaat. Vir meer inligting verwys asseblief na bv. <link>Crontab Guru</link>",
@@ -63,14 +56,10 @@
"exclusion_pattern_description": "Met uitsluitingspatrone kan jy lêers en vouers ignoreer wanneer jy jou biblioteek skandeer. Dit is nuttig as jy vouers het wat lêers bevat wat jy nie wil invoer nie, soos RAW-lêers.", "exclusion_pattern_description": "Met uitsluitingspatrone kan jy lêers en vouers ignoreer wanneer jy jou biblioteek skandeer. Dit is nuttig as jy vouers het wat lêers bevat wat jy nie wil invoer nie, soos RAW-lêers.",
"external_library_management": "Eksterne Biblioteekbestuur", "external_library_management": "Eksterne Biblioteekbestuur",
"face_detection": "Gesig deteksie", "face_detection": "Gesig deteksie",
"face_detection_description": "Detecteer die gesigte in media deur middel van masjienleer. Vir videos word slegs die duimnaelskets oorweeg. “Herlaai” (ver)werk al die media weer. “Stel terug” verwyder boonop alle huidige gesigdata. “Onverwerk” plaas bates in die tou wat nog nie verwerk is nie. Gedekte gesigte sal ná voltooiing van Gesigdetectie vir Gesigherkenning in die tou geplaas word, om hulle in bestaande of nuwe persone te groepeer.",
"facial_recognition_job_description": "Groepeer gesigte in mense in. Die stap is vinniger nadat Gesig Deteksie klaar is. \"Herstel\" (her-)groepeer alle gesigte. \"Vermiste\" plaas gesigte in ry wat nie 'n persoon gekoppel het nie.",
"failed_job_command": "Opdrag {command} het misluk vir werk: {job}", "failed_job_command": "Opdrag {command} het misluk vir werk: {job}",
"force_delete_user_warning": "WAARSKUWING: Dit sal onmiddellik die gebruiker en alle bates verwyder. Dit kan nie ontdoen word nie en die lêers kan nie herstel word nie.", "force_delete_user_warning": "WAARSKUWING: Dit sal onmiddellik die gebruiker en alle bates verwyder. Dit kan nie ontdoen word nie en die lêers kan nie herstel word nie.",
"image_format": "Formaat", "image_format": "Formaat",
"image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.", "image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.",
"image_fullsize_description": "Vol grote prent met geen metadata, gebruik wanner ingezoem",
"image_fullsize_enabled": "Skakel aan vol grote prent generasie",
"image_prefer_embedded_preview": "Verkies ingebedde voorskou", "image_prefer_embedded_preview": "Verkies ingebedde voorskou",
"image_prefer_wide_gamut": "Verkies wide gamut", "image_prefer_wide_gamut": "Verkies wide gamut",
"image_prefer_wide_gamut_setting_description": "Gebruik Display P3 vir kleinkiekies. Dit behou die lewendheid van beelde met wye kleurruimtes beter, maar beelde kan anders verskyn op ou apparate met 'n ou blaaierweergawe. sRGB-beelde gebruik steeds sRGB om kleurverskuiwings te voorkom.", "image_prefer_wide_gamut_setting_description": "Gebruik Display P3 vir kleinkiekies. Dit behou die lewendheid van beelde met wye kleurruimtes beter, maar beelde kan anders verskyn op ou apparate met 'n ou blaaierweergawe. sRGB-beelde gebruik steeds sRGB om kleurverskuiwings te voorkom.",
@@ -88,99 +77,8 @@
"job_concurrency": "{job} gelyktydigheid", "job_concurrency": "{job} gelyktydigheid",
"job_created": "Taak gemaak", "job_created": "Taak gemaak",
"job_not_concurrency_safe": "Hierdie taak kan nie gelyktydig uitgevoer word nie.", "job_not_concurrency_safe": "Hierdie taak kan nie gelyktydig uitgevoer word nie.",
"job_settings": "Agtergrondtaakinstellings", "job_settings": "Agtergrondtaakinstellings"
"job_settings_description": "Bestuur werkgelyktydigheid",
"job_status": "Werkstatus",
"library_created": "Biblioteek geskep: {library}",
"library_deleted": "Biblioteek verwyder",
"library_import_path_description": "Spesifiseer 'n leer om in te neem. Hierdie leer, en al die sub leers, gaan geskandeer for vir prente en videos.",
"library_scanning": "Periodieke Skandering",
"library_scanning_description": "Stel periodieke skandering van biblioteek in",
"library_scanning_enable_description": "Aktiveer periodieke biblioteekskandering",
"library_settings": "Eksterne Biblioteek",
"map_settings": "Kaart",
"migration_job": "Migrasie",
"oauth_settings": "OAuth",
"transcoding_acceleration_vaapi": "VAAPI"
}, },
"administration": "Administrasie",
"advanced": "Gevorderde",
"albums": "Albums",
"all": "Alle",
"anti_clockwise": "Anti-kloksgewys",
"archive": "Argief",
"asset_skipped": "Oorgeslaan",
"asset_uploaded": "Opgelaai",
"asset_uploading": "Oplaai…",
"assets": "Bates",
"back": "Terug",
"backward": "Agteruit",
"build": "Bou",
"camera": "Kamera",
"cancel": "Kanselleer",
"city": "Stad",
"clockwise": "Kloksgewys",
"close": "Maak toe",
"color": "Kleur",
"confirm": "Bevestig",
"contain": "Bevat",
"context": "Konteks",
"continue": "Gaan voort",
"country": "Land",
"cover": "Bedek",
"create": "Skep",
"created": "Geskep",
"dark": "Donker",
"day": "Dag",
"delete": "Verwyder",
"description": "Beskrywing",
"details": "Besonderhede",
"direction": "Rigting",
"discover": "Ontdek",
"documentation": "Dokumentasie",
"done": "Klaar",
"download": "Aflaai",
"download_settings": "Aflaai",
"duplicates": "Duplikate",
"duration": "Duur",
"edit": "Wysig",
"edited": "Gewysigd",
"search_by_description": "Soek by beskrywing", "search_by_description": "Soek by beskrywing",
"search_by_description_example": "Stapdag in Sapa", "search_by_description_example": "Stapdag in Sapa"
"version": "Weergawe",
"version_announcement_closing": "Jou friend, Alex",
"version_history": "Weergawegeskiedenis",
"version_history_item": "{version} geinstaleerd op {date}",
"video": "Video",
"videos": "Video's",
"view": "Bekyk",
"view_album": "Bekyk Album",
"view_all": "Bekyk alle",
"view_all_users": "Bekyk alle gebruikers",
"view_in_timeline": "Bekyk in tydlyn",
"view_link": "Bekyk skakel",
"view_links": "Bekyk skakels",
"view_name": "Bekyk",
"view_next_asset": "Bekyk volgende bate",
"view_previous_asset": "Bekyk vorige bate",
"view_qr_code": "Bekyk QR-kode",
"view_stack": "Bekyk stapel",
"view_user": "Bekyk gebruiker",
"viewer_remove_from_stack": "Verwyder van stapel",
"viewer_stack_use_as_main_asset": "Gebruik as hoofbate",
"viewer_unstack": "Ontstapel",
"visibility_changed": "Sigbaarheid verander voor {count, plural, one {# person} other {# people}}",
"waiting": "Wag",
"warning": "Waaskuwing",
"week": "Week",
"welcome": "Welkom",
"welcome_to_immich": "Welkom by Immich",
"wifi_name": "Wi-Fi Naam",
"wrong_pin_code": "Verkeerde PIN-kode",
"year": "Jaar",
"years_ago": "{years, plural, one {# year} other {# years}} gelede",
"yes": "Ja",
"you_dont_have_any_shared_links": "Jy het geen gedeelde skakels",
"your_wifi_name": "Jou Wi-Fi naam",
"zoom_image": "Vergroot Prent"
} }

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
"action": "Дзеянне", "action": "Дзеянне",
"action_common_update": "Абнавіць", "action_common_update": "Абнавіць",
"actions": "Дзеянні", "actions": "Дзеянні",
"active": "Актыўных", "active": "Актыўны",
"activity": "Актыўнасць", "activity": "Актыўнасць",
"activity_changed": "Актыўнасць {enabled, select, true {уключана} other {адключана}}", "activity_changed": "Актыўнасць {enabled, select, true {уключана} other {адключана}}",
"add": "Дадаць", "add": "Дадаць",
@@ -22,7 +22,6 @@
"add_partner": "Дадаць партнёра", "add_partner": "Дадаць партнёра",
"add_path": "Дадаць шлях", "add_path": "Дадаць шлях",
"add_photos": "Дадаць фота", "add_photos": "Дадаць фота",
"add_tag": "Дадаць тэг",
"add_to": "Дадаць у…", "add_to": "Дадаць у…",
"add_to_album": "Дадаць у альбом", "add_to_album": "Дадаць у альбом",
"add_to_album_bottom_sheet_added": "Дададзена да {album}", "add_to_album_bottom_sheet_added": "Дададзена да {album}",
@@ -34,30 +33,28 @@
"added_to_favorites_count": "Дададзена {count, number} да абранага", "added_to_favorites_count": "Дададзена {count, number} да абранага",
"admin": { "admin": {
"add_exclusion_pattern_description": "Дадайце шаблоны выключэнняў. Падтрымліваецца выкарыстанне сімвалаў * , ** і ?. Каб ігнараваць усе файлы ў любой дырэкторыі з назвай \"Raw\", выкарыстоўвайце \"**/Raw/**\". Каб ігнараваць усе файлы, якія заканчваюцца на \".tif\", выкарыстоўвайце \"**/.tif\". Каб ігнараваць абсолютны шлях, выкарыстоўвайце \"/path/to/ignore/**\".", "add_exclusion_pattern_description": "Дадайце шаблоны выключэнняў. Падтрымліваецца выкарыстанне сімвалаў * , ** і ?. Каб ігнараваць усе файлы ў любой дырэкторыі з назвай \"Raw\", выкарыстоўвайце \"**/Raw/**\". Каб ігнараваць усе файлы, якія заканчваюцца на \".tif\", выкарыстоўвайце \"**/.tif\". Каб ігнараваць абсолютны шлях, выкарыстоўвайце \"/path/to/ignore/**\".",
"admin_user": "Адміністратар",
"asset_offline_description": "Гэты знешні бібліятэчны актыў больш не знойдзены на дыску і быў перамешчаны ў сметніцу. Калі файл быў перамешчаны ў межах бібліятэкі, праверце вашу хроніку для новага адпаведнага актыва. Каб аднавіць гэты актыў, пераканайцеся, што шлях да файла ніжэй даступны для Immich і адскануйце бібліятэку.", "asset_offline_description": "Гэты знешні бібліятэчны актыў больш не знойдзены на дыску і быў перамешчаны ў сметніцу. Калі файл быў перамешчаны ў межах бібліятэкі, праверце вашу хроніку для новага адпаведнага актыва. Каб аднавіць гэты актыў, пераканайцеся, што шлях да файла ніжэй даступны для Immich і адскануйце бібліятэку.",
"authentication_settings": "Налады праверкі сапраўднасці", "authentication_settings": "Налады праверкі сапраўднасці",
"authentication_settings_description": "Кіраванне паролямі, OAuth, і іншыя налады праверкі сапраўднасці", "authentication_settings_description": "Кіраванне паролямі, OAuth, і іншыя налады праверкі сапраўднасці",
"authentication_settings_disable_all": "Вы ўпэўнены, што жадаеце адключыць усе спосабы логіну? Логін будзе цалкам адключаны.", "authentication_settings_disable_all": "Вы ўпэўнены, што жадаеце адключыць усе спосабы логіну? Логін будзе цалкам адключаны.",
"authentication_settings_reenable": "Каб зноў уключыць, выкарыстайце <link>Каманду сервера</link>.", "authentication_settings_reenable": "Каб зноў уключыць, выкарыстайце <link>Каманду сервера</link>.",
"background_task_job": "Фонавыя заданні", "background_task_job": "Фонавыя заданні",
"backup_database": "Стварыць рэзервовую копію базы даных", "backup_database": "Рэзервовая копія базы даных",
"backup_database_enable_description": "Уключыць рэзерваванне базы даных", "backup_database_enable_description": "Уключыць рэзерваванне базы даных",
"backup_keep_last_amount": "Колькасць папярэдніх рэзервовых копій для захавання", "backup_keep_last_amount": "Колькасць папярэдніх рэзервовых копій для захавання",
"backup_settings": "Налады рэзервовага капіявання", "backup_settings": "Налады рэзервовага капіявання",
"backup_settings_description": "Кіраванне наладамі рэзервавання базы даных.", "backup_settings_description": "Кіраванне наладамі дампа базы дадзеных. Заўвага: гэтыя задачы не кантралююцца, і ў выпадку няўдачы паведамленне адпраўлена не будзе.",
"cleared_jobs": "Ачышчаны заданні для: {job}", "cleared_jobs": "Ачышчаны заданні для: {job}",
"config_set_by_file": "Канфігурацыя зараз усталявана праз файл канфігурацыі", "config_set_by_file": "Канфігурацыя ў зараз усталявана праз файл канфігурацыі",
"confirm_delete_library": "Вы ўпэўнены што жадаеце выдаліць бібліятэку {library}?", "confirm_delete_library": "Вы ўпэўнены што жадаеце выдаліць {library} бібліятэку?",
"confirm_delete_library_assets": "Вы ўпэўнены, што хочаце выдаліць гэтую бібліятэку? Гэта прывядзе да выдалення {count, plural, one {# актыву} other {усіх # актываў}}, якія змяшчаюцца ў Immich, і гэта дзеянне немагчыма будзе адмяніць. Файлы застануцца на дыску.", "confirm_delete_library_assets": "Вы ўпэўнены, што хочаце выдаліць гэтую бібліятэку? Гэта прывядзе да выдалення {count, plural, one {# актыву} other {усіх # актываў}}, якія змяшчаюцца ў Immich, і гэта дзеянне немагчыма будзе адмяніць. Файлы застануцца на дыску.",
"confirm_email_below": "Каб пацвердзіць, увядзіце \"{email}\" ніжэй", "confirm_email_below": "Каб пацвердзіць, увядзіце \"{email}\" ніжэй",
"confirm_reprocess_all_faces": "Вы ўпэўнены, што хочаце пераапрацаваць усе твары? Гэта таксама прывядзе да выдалення імя людзей.", "confirm_reprocess_all_faces": "Вы ўпэўнены, што хочаце пераапрацаваць усе твары? Гэта таксама прывядзе да выдалення імя людзей.",
"confirm_user_password_reset": "Вы ўпэўнены ў тым, што жадаеце скінуць пароль {user}?", "confirm_user_password_reset": "Вы ўпэўнены ў тым, што жадаеце скінуць пароль {user}?",
"confirm_user_pin_code_reset": "Вы ўпэўнены ў тым, што жадаеце скінуць PIN-код {user}?",
"create_job": "Стварыць заданне", "create_job": "Стварыць заданне",
"cron_expression": "Выраз Cron", "cron_expression": "Выраз Cron",
"cron_expression_description": "Усталюйце інтэрвал сканавання, выкарыстоўваючы фармат cron. Для атрымання дадатковай інфармацыі, калі ласка, звярніцеся, напрыклад, да <link>Crontab Guru</link>", "cron_expression_description": "Усталюйце інтэрвал сканавання, выкарыстоўваючы фармат cron. Для атрымання дадатковай інфармацыі, калі ласка, звярніцеся, напрыклад, да <link>Crontab Guru</link>",
"cron_expression_presets": "Прадустаноўкі выразаў Cron", "cron_expression_presets": "Прадустановкі выразаў Cron",
"disable_login": "Адключыць уваход", "disable_login": "Адключыць уваход",
"duplicate_detection_job_description": "Запусціць машыннае навучанне на актывах для выяўлення падобных выяў. Залежыць ад Smart Search", "duplicate_detection_job_description": "Запусціць машыннае навучанне на актывах для выяўлення падобных выяў. Залежыць ад Smart Search",
"exclusion_pattern_description": "Шаблоны выключэння дазваляюць ігнараваць файлы і папкі пры сканаванні вашай бібліятэкі. Гэта карысна, калі ў вас ёсць папкі, якія змяшчаюць файлы, якія вы не хочаце імпартаваць, напрыклад, файлы RAW.", "exclusion_pattern_description": "Шаблоны выключэння дазваляюць ігнараваць файлы і папкі пры сканаванні вашай бібліятэкі. Гэта карысна, калі ў вас ёсць папкі, якія змяшчаюць файлы, якія вы не хочаце імпартаваць, напрыклад, файлы RAW.",
@@ -74,361 +71,15 @@
"image_fullsize_enabled_description": "Ствараць выяву ў поўным памеры для фарматаў, што не прыдатныя для вэб. Калі ўключана опцыя \"Аддаваць перавагу ўбудаванай праяве\", прагляды выкарыстоўваюцца непасрэдна без канвертацыі. Не ўплывае на вэб-прыдатныя фарматы, такія як JPEG.", "image_fullsize_enabled_description": "Ствараць выяву ў поўным памеры для фарматаў, што не прыдатныя для вэб. Калі ўключана опцыя \"Аддаваць перавагу ўбудаванай праяве\", прагляды выкарыстоўваюцца непасрэдна без канвертацыі. Не ўплывае на вэб-прыдатныя фарматы, такія як JPEG.",
"image_fullsize_quality_description": "Якасць выявы ў поўным памеры ад 1 да 100. Больш высокае значэнне лепшае, але прыводзіць да павелічэння памеру файла.", "image_fullsize_quality_description": "Якасць выявы ў поўным памеры ад 1 да 100. Больш высокае значэнне лепшае, але прыводзіць да павелічэння памеру файла.",
"image_fullsize_title": "Налады выявы ў поўным памеры", "image_fullsize_title": "Налады выявы ў поўным памеры",
"image_prefer_embedded_preview": "Аддаваць перавагу ўбудаванай праяве",
"image_prefer_embedded_preview_setting_description": "Выкарыстоўваць убудаваныя праявы ў RAW-фотаздымках ў якасці ўваходных дадзеных для апрацоўкі малюнкаў, калі магчыма. Гэта дазваляе атрымаць больш дакладныя колеры для некаторых відарысаў, але ж якасць праяў залежыць ад камеры, і на відарысе можа быць больш артэфактаў сціску.",
"image_prefer_wide_gamut": "Аддаць перавагу шырокай гаме",
"image_preview_description": "Відарыс сярэдняга памеру з выдаленымі метададзенымі, выкарыстоўваецца пры праглядзе асобнага рэсурсу і для машыннага навучання",
"image_preview_quality_description": "Якасць праявы ад 1 да 100. Чым вышэй, тым лепш, але пры гэтым ствараюцца файлы большага памеру і можа знізіцца хуткасць водгуку прыкладання. Ўстаноўка нізкага значэння можа паўплываць на якасць машыннага навучання.",
"image_preview_title": "Налады папярэдняга прагляду", "image_preview_title": "Налады папярэдняга прагляду",
"image_quality": "Якасць", "image_quality": "Якасць",
"image_resolution": "Раздзяляльнасць", "image_resolution": "Раздзяляльнасць",
"image_settings": "Налады відарыса", "image_settings": "Налады відарыса",
"image_settings_description": "Кіруйце якасцю і раздзяляльнасцю сгенерыраваных відарысаў", "image_settings_description": "Кіруйце якасцю і раздзяляльнасцю сгенерыраваных відарысаў"
"library_created": "Створана бібліятэка: {library}",
"library_deleted": "Бібліятэка выдалена",
"map_dark_style": "Цёмны стыль",
"map_enable_description": "Уключыць функцыі карты",
"map_gps_settings": "Налады карты і GPS",
"map_light_style": "Светлы стыль",
"map_settings": "Карта",
"map_settings_description": "Кіраванне наладамі карты",
"map_style_description": "URL-адрас style.json тэмы карты",
"metadata_settings": "Налады метаданых",
"oauth_button_text": "Тэкст кнопкі",
"oauth_settings": "OAuth",
"refreshing_all_libraries": "Абнаўленне ўсіх бібліятэк",
"registration": "Рэгістрацыя адміністратара",
"registration_description": "Вы з'яўляецеся першым карыстальнікам сістэмы, таму вы будзеце прызначаны адміністратарам. Вы будзеце адказваць за адміністрацыйныя задачы, а таксама ствараць новых карыстальнікаў.",
"require_password_change_on_login": "Патрабаваць змяніць пароль пры першым уваходзе ў сістэму",
"reset_settings_to_default": "Скінуць налады да прадвызначаных",
"reset_settings_to_recent_saved": "Скінуць налады да нядаўна захаваных",
"scanning_library": "Сканіраванне бібліятэкі",
"server_external_domain_settings": "Знешні дамен",
"server_settings": "Налады сервера",
"server_settings_description": "Кіраванне наладамі сервера",
"server_welcome_message": "Прывітальнае паведамленне",
"server_welcome_message_description": "Паведамленне, якое адлюстроўваецца на старонцы ўваходу.",
"system_settings": "Сістэмныя налады",
"tag_cleanup_job": "Ачыстка тэгаў",
"template_email_preview": "Перадпрагляд",
"theme_settings": "Налады тэмы",
"transcoding_acceleration_nvenc": "NVENC (патрабуецца відэакарта NVIDIA)",
"transcoding_acceleration_vaapi": "VAAPI",
"transcoding_accepted_containers": "Прынятыя кантэйнеры",
"transcoding_accepted_video_codecs": "Прынятыя відэакодэкі",
"transcoding_advanced_options_description": "Параметры, якія большасці карыстальнікаў не трэба змяняць",
"transcoding_audio_codec": "Аудыякодэк",
"transcoding_encoding_options": "Параметры кадзіравання",
"transcoding_video_codec": "Відэакодэк",
"trash_enabled_description": "Уключыць функцыі сметніцы",
"trash_number_of_days": "Колькасць дзён",
"trash_settings": "Налады сметніцы",
"trash_settings_description": "Кіраванне наладамі сметніцы",
"user_cleanup_job": "Ачыстка карыстальніка",
"user_management": "Кіраванне карыстальнікамі",
"user_password_has_been_reset": "Пароль карыстальніка быў скінуты:",
"user_password_reset_description": "Задайце карыстальніку часовы пароль і паведаміце яму, што пры наступным уваходзе ў сістэму яму трэба будзе змяніць пароль.",
"user_restore_description": "Уліковы запіс карыстальніка <b>{user}</b> будзе адноўлены.",
"user_settings": "Налады карыстальніка",
"user_settings_description": "Кіраванне наладамі карыстальніка",
"user_successfully_removed": "Карыстальнік {email} быў паспяхова выдалены.",
"version_check_enabled_description": "Уключыць праверку версіі",
"version_check_implications": "Функцыі праверкі версіі перыядычна звяртаецца да github.com",
"version_check_settings": "Праверка версіі",
"version_check_settings_description": "Уключыць/адключыць апавяшчэнні аб новай версіі"
}, },
"admin_email": "Электронная пошта адміністратара",
"admin_password": "Пароль адміністратара",
"administration": "Кіраванне серверам",
"advanced": "Пашыраныя",
"advanced_settings_log_level_title": "Узровень вядзення журнала: {level}",
"advanced_settings_proxy_headers_title": "Загалоўкі проксі",
"advanced_settings_tile_subtitle": "Пашыраныя налады карыстальніка",
"advanced_settings_troubleshooting_subtitle": "Уключыць дадатковыя функцыі для выпраўлення непаладак",
"advanced_settings_troubleshooting_title": "Выпраўленне непаладак",
"age_months": "Узрост {months, plural, one {# месяц} few {# месяцы} many {# месяцаў} other {# месяцаў}}",
"age_year_months": "Узрост 1 год, {months, plural, one {# месяц} few {# месяцы} many {# месяцаў} other {# месяцаў}}",
"age_years": "{years, plural, other {Узрост #}}",
"album_added": "Альбом дададзены",
"album_cover_updated": "Вокладка альбома абноўлена",
"album_delete_confirmation": "Вы ўпэўнены, што хочаце выдаліць альбом {album}?",
"album_delete_confirmation_description": "Калі гэты альбом абагулены, іншыя карыстальнікі больш не змогуць атрымаць да яго доступ.",
"album_deleted": "Альбом выдалены",
"album_info_card_backup_album_excluded": "ВЫКЛЮЧАНЫ",
"album_info_card_backup_album_included": "УКЛЮЧАНЫ",
"album_info_updated": "Інфармацыя пра альбом абноўлена",
"album_leave": "Пакінуць альбом?",
"album_leave_confirmation": "Вы ўпэўнены, што хочаце пакінуць {album}?",
"album_name": "Назва альбома",
"album_options": "Параметры альбома",
"album_remove_user": "Выдаліць карыстальніка?",
"album_remove_user_confirmation": "Вы ўпэўнены, што хочаце выдаліць {user}?",
"album_search_not_found": "Па вашым запыце не знойдзена альбомаў",
"album_share_no_users": "Здаецца, вы падзяліліся гэтым альбомам з усімі карыстальнікамі, або ў вас няма ніводнага карыстальніка, з якім можна падзяліцца.",
"album_updated": "Альбом абноўлены",
"album_user_left": "Вы пакінулі {album}",
"album_user_removed": "Карыстальнік {user} выдалены",
"album_viewer_appbar_delete_confirm": "Вы ўпэўнены, што хочаце выдаліць гэты альбом са свайго ўліковага запісу?",
"album_viewer_appbar_share_err_delete": "Не ўдалося выдаліць альбом",
"album_viewer_appbar_share_err_leave": "Не ўдалося пакінуць альбом",
"album_viewer_appbar_share_err_title": "Не ўдалося змяніць назву альбома",
"album_viewer_appbar_share_leave": "Пакінуць альбом",
"album_viewer_appbar_share_to": "Абагуліць з",
"album_viewer_page_share_add_users": "Дадаць карыстальнікаў",
"album_with_link_access": "Дазволіць усім, хто мае спасылку, бачыць фота і людзей у гэтым альбоме.",
"albums": "Альбомы",
"albums_count": "{count, plural, one {1 альбом} few {{count, number} альбомы} many {{count, number} альбомаў} other {{count, number} альбомаў}}",
"albums_default_sort_order": "Прадвызначаны парадак сартавання альбомаў",
"albums_on_device_count": "Альбомы на прыладзе ({count})",
"all": "Усе",
"all_albums": "Усе альбомы",
"all_people": "Усе людзі",
"all_videos": "Усе відэа",
"allow_dark_mode": "Дазволіць цёмны рэжым",
"allow_edits": "Дазволіць рэдагаванне",
"alt_text_qr_code": "Відарыс QR-кода",
"anti_clockwise": "Супраць гадзіннікавай стрэлкі",
"api_key": "Ключ API",
"api_key_empty": "Назва ключа API не павінна быць пустой",
"api_keys": "Ключы API",
"app_bar_signout_dialog_content": "Вы ўпэўнены, што хочаце выйсці?",
"app_bar_signout_dialog_ok": "Так",
"app_bar_signout_dialog_title": "Выйсці",
"app_settings": "Налады праграмы",
"archive": "Архіў",
"archive_page_title": "Архіў ({count})",
"archive_size": "Памер архіва",
"are_these_the_same_person": "Ці гэта адзін і той жа чалавек?",
"are_you_sure_to_do_this": "Вы ўпэўнены, што хочаце гэта зрабіць?",
"asset_added_to_album": "Дададзена ў альбом",
"asset_adding_to_album": "Дадаванне ў альбом…",
"asset_skipped": "Прапушчана",
"asset_skipped_in_trash": "У сметніцы",
"asset_uploaded": "Запампавана",
"asset_uploading": "Запампоўванне…",
"authorized_devices": "Аўтарызаваныя прылады",
"back": "Назад",
"backup_album_selection_page_albums_device": "Альбомы на прыладзе ({count})",
"backup_all": "Усе",
"backup_controller_page_background_wifi": "Толькі праз Wi-Fi",
"buy": "Купіць Immich",
"cache_settings_clear_cache_button": "Ачысціць кэш",
"cache_settings_tile_title": "Лакальнае сховішча",
"cancel": "Скасаваць",
"cancel_search": "Скасаваць пошук",
"canceled": "Скасавана",
"city": "Горад",
"clear": "Ачысціць",
"clear_all": "Ачысціць усё",
"client_cert_dialog_msg_confirm": "ОК",
"client_cert_enter_password": "Увядзіце пароль",
"client_cert_import": "Імпарт",
"close": "Закрыць",
"collapse": "Згарнуць",
"collapse_all": "Згарнуць усё",
"color": "Колер",
"color_theme": "Колеравая тэма",
"continue": "Працягнуць",
"control_bottom_app_bar_create_new_album": "Стварыць новы альбом",
"control_bottom_app_bar_delete_from_immich": "Выдаліць з Immich",
"control_bottom_app_bar_delete_from_local": "Выдаліць з прылады",
"control_bottom_app_bar_edit_location": "Рэдагаваць месцазнаходжанне",
"country": "Краіна",
"cover": "Вокладка",
"covers": "Вокладкі",
"create": "Стварыць",
"create_album": "Стварыць альбом",
"create_album_page_untitled": "Без назвы",
"create_library": "Стварыць бібліятэку",
"create_link": "Стварыць спасылку",
"create_new_user": "Стварыць новага карыстальніка",
"create_tag": "Стварыць тэг",
"create_user": "Стварыць карыстальніка",
"dark": "Цёмная",
"day": "Дзень",
"delete": "Выдаліць",
"delete_album": "Выдаліць альбом",
"delete_dialog_ok_force": "Усё адно выдаліць",
"delete_dialog_title": "Выдаліць назаўжды",
"delete_face": "Выдаліць твар",
"delete_key": "Выдаліць ключ",
"delete_library": "Выдаліць бібліятэку",
"delete_link": "Выдаліць спасылку",
"delete_local_dialog_ok_force": "Усё адно выдаліць",
"delete_others": "Выдаліць іншыя",
"delete_tag": "Выдаліць тэг",
"delete_user": "Выдаліць карыстальніка",
"discord": "Discord",
"documentation": "Дакументацыя",
"done": "Гатова",
"download": "Спампаваць",
"download_canceled": "Спампоўванне скасавана",
"download_complete": "Спампоўванне завершана",
"download_enqueue": "Спампоўванне дададзена ў чаргу",
"downloading": "Спампоўванне",
"edit": "Рэдагаваць",
"edit_album": "Рэдагаваць альбом",
"edit_avatar": "Рэдагаваць аватар",
"edit_date": "Рэдагаваць дату",
"edit_date_and_time": "Рэдагаваь дату і час",
"edit_description": "Рэдагаваць апісанне",
"edit_description_prompt": "Выберыце новае апісанне:",
"edit_faces": "Рэдагаваць твары",
"edit_import_path": "Рэдагаваць шлях імпарту",
"edit_import_paths": "Рэдагаваць шляхі імпарту",
"edit_key": "Рэдагаваць ключ",
"edit_link": "Рэдагаваць спасылку",
"edit_location": "Рэдагаваць месцазнаходжанне",
"edit_location_dialog_title": "Месцазнаходжанне",
"edit_name": "Рэдагаваць назву",
"edit_people": "Рэдагаваць людзей",
"edit_tag": "Рэдагаваць тэг",
"edit_title": "Рэдагаваць загаловак",
"edit_user": "Рэдагаваць карыстальніка",
"edited": "Адрэдагавана",
"editor": "Рэдактар",
"editor_close_without_save_prompt": "Змены не будуць захаваны",
"editor_close_without_save_title": "Закрыць рэдактар?",
"editor_crop_tool_h2_aspect_ratios": "Суадносіны бакоў",
"editor_crop_tool_h2_rotation": "Паварот",
"error": "Памылка",
"error_saving_image": "Памылка: {error}",
"exif": "Exif",
"exif_bottom_sheet_description": "Дадаць апісанне...",
"favorite": "У абраным",
"favorite_or_unfavorite_photo": "Дадаць або выдаліць фота з абранага",
"favorites": "Абраныя",
"file_name": "Назва файла",
"filename": "Назва файла",
"filetype": "Тып файла",
"filter": "Фільтр",
"forward": "Наперад",
"gcast_enabled": "Google Cast",
"general": "Агульныя",
"go_back": "Назад",
"go_to_folder": "Перайсці да папкі",
"hi_user": "Вітаем, {name} ({email})",
"hide_all_people": "Схаваць усіх людзей",
"hide_gallery": "Схаваць галерэю",
"hide_named_person": "Схаваць {name}",
"hide_password": "Схаваць пароль",
"hide_person": "Схаваць чалавека",
"image_viewer_page_state_provider_download_started": "Спампоўванне пачалося",
"immich_logo": "Лагатып Immich",
"interval": {
"day_at_onepm": "Кожны дзень а 13-й гадзіне",
"hours": "{hours, plural, one {Кожную гадзіну} few {Кожныя {hours, number} гадзіны} many {Кожныя {hours, number} гадзін} other {Кожныя {hours, number} гадзін}}",
"night_at_midnight": "Кожную ноч апоўначы",
"night_at_twoam": "Кожную ноч а 2-й гадзіне"
},
"language": "Мова",
"library": "Бібліятэка",
"light": "Светлая",
"login_form_back_button_text": "Назад",
"login_form_email_hint": "youremail@email.com",
"login_form_endpoint_hint": "http://your-server-ip:port",
"login_form_password_hint": "пароль",
"login_form_save_login": "Заставацца ў сістэме",
"main_menu": "Галоўнае меню",
"map_location_dialog_yes": "Так",
"map_settings_dark_mode": "Цёмны рэжым",
"map_settings_date_range_option_day": "Апошнія 24 гадзіны",
"map_settings_date_range_option_days": "Апошніх дзён: {days}",
"map_settings_date_range_option_year": "Апошні год",
"map_settings_date_range_option_years": "Апошніх год: {years}",
"map_settings_dialog_title": "Налады карты",
"map_settings_theme_settings": "Тэма карты",
"menu": "Меню",
"minute": "Хвіліна",
"month": "Месяц",
"monthly_title_text_date_format": "MMMM y",
"my_albums": "Мае альбомы",
"name": "Імя",
"name_or_nickname": "Імя або псеўданім",
"next": "Далей",
"no": "Не",
"offline": "Па-за сеткай",
"ok": "ОК",
"online": "У сетцы",
"open": "Адкрыць",
"or": "або",
"partner_list_user_photos": "Фота карыстальніка {user}",
"pause": "Прыпыніць",
"people": "Людзі",
"permission_onboarding_back": "Назад",
"permission_onboarding_continue_anyway": "Усё адно працягнуць",
"photos": "Фота",
"photos_and_videos": "Фота і відэа",
"place": "Месца",
"places": "Месцы",
"port": "Порт",
"previous": "Папярэдняе",
"profile": "Профіль",
"profile_drawer_app_logs": "Журналы",
"profile_drawer_github": "GitHub",
"purchase_button_buy": "Купіць",
"purchase_button_buy_immich": "Купіць Immich",
"purchase_button_select": "Выбраць",
"remove": "Выдаліць",
"remove_from_album": "Выдаліць з альбома",
"remove_from_favorites": "Выдаліць з абраных",
"remove_tag": "Выдаліць тэг",
"remove_url": "Выдаліць URL-адрас",
"remove_user": "Выдаліць карыстальніка",
"rename": "Перайменаваць",
"repository": "Рэпазіторый",
"reset": "Скінуць",
"reset_password": "Скінуць пароль",
"restore": "Аднавіць",
"restore_all": "Аднавіць усё",
"restore_user": "Аднавіць карыстальніка",
"resume": "Узнавіць",
"role": "Роля",
"role_editor": "Рэдактар",
"role_viewer": "Глядач",
"save": "Захаваць",
"save_to_gallery": "Захаваць у галерэю",
"search_filter_date": "Дата",
"search_filter_location": "Месцазнаходжанне",
"search_filter_location_title": "Выберыце месцазнаходжанне",
"search_filter_media_type": "Тып медыя",
"search_filter_media_type_title": "Выберыце тып медыя",
"search_page_screenshots": "Здымкі экрана",
"search_page_selfies": "Сэлфі",
"search_page_things": "Рэчы",
"search_page_your_map": "Ваша карта",
"second": "Секунда",
"send_message": "Адправіць паведамленне",
"setting_languages_apply": "Ужыць",
"setting_notifications_notify_never": "ніколі",
"settings": "Налады",
"share_add_photos": "Дадаць фота",
"shared_album_section_people_title": "ЛЮДЗІ",
"shared_link_info_chip_metadata": "EXIF",
"sharing_page_empty_list": "ПУСТЫ СПІС",
"sign_out": "Выйсці",
"sign_up": "Зарэгістравацца",
"size": "Памер",
"sort_title": "Загаловак",
"source": "Крыніца",
"tag": "Тэг",
"tags": "Тэгі",
"theme": "Тэма",
"theme_selection": "Выбар тэмы",
"timeline": "Хроніка", "timeline": "Хроніка",
"total": "Усяго", "total": "Усяго",
"trash": "Сметніца",
"trash_page_delete_all": "Выдаліць усе",
"trash_page_restore_all": "Аднавіць усе",
"trash_page_title": "Сметніца ({count})",
"type": "Тып",
"undo": "Адрабіць",
"upload": "Запампаваць",
"upload_status_errors": "Памылкі",
"uploading": "Запампоўванне",
"url": "URL-адрас",
"user": "Карыстальнік", "user": "Карыстальнік",
"user_has_been_deleted": "Гэты карыстальнік быў выдалены.",
"user_id": "ID карыстальніка", "user_id": "ID карыстальніка",
"user_purchase_settings": "Купля", "user_purchase_settings": "Купля",
"user_purchase_settings_description": "Кіруйце пакупкамі", "user_purchase_settings_description": "Кіруйце пакупкамі",
@@ -461,14 +112,14 @@
"view_next_asset": "Паказаць наступны аб'ект", "view_next_asset": "Паказаць наступны аб'ект",
"view_previous_asset": "Праглядзець папярэдні аб'ект", "view_previous_asset": "Праглядзець папярэдні аб'ект",
"view_stack": "Прагляд стэка", "view_stack": "Прагляд стэка",
"visibility_changed": "Бачнасць змянілася для {count, plural, one {# чалавека} other {# чалавек}}", "visibility_changed": "Відзімасць змянілася для {count, plural, one {# чалавек(-аў)} астатніх {# чалавек}}",
"waiting": "Чакаюць", "waiting": "Чакаюць",
"warning": "Папярэджанне", "warning": "Папярэджанне",
"week": "Тыдзень", "week": "Тыдзень",
"welcome": "Вітаем", "welcome": "Вітаем",
"welcome_to_immich": "Вітаем у Immich", "welcome_to_immich": "Вітаем у Immich",
"year": "Год", "year": "Год",
"years_ago": "{years, plural, one {# год} few {# гады} many {# гадоў} other {# гадоў}} таму", "years_ago": "{years, plural, one {# год} other {# гадоў}} таму",
"yes": "Так", "yes": "Так",
"you_dont_have_any_shared_links": "У вас няма абагуленых спасылак", "you_dont_have_any_shared_links": "У вас няма абагуленых спасылак",
"zoom_image": "Павялічыць відарыс" "zoom_image": "Павялічыць відарыс"

View File

@@ -166,20 +166,6 @@
"metadata_settings_description": "Управление на настройките за метаданни", "metadata_settings_description": "Управление на настройките за метаданни",
"migration_job": "Миграция", "migration_job": "Миграция",
"migration_job_description": "Мигриране на миниатюрите за елементи и лица към най-новата структура на папките", "migration_job_description": "Мигриране на миниатюрите за елементи и лица към най-новата структура на папките",
"nightly_tasks_cluster_faces_setting_description": "Изпълни разпознаване на лице за открити нови лица",
"nightly_tasks_cluster_new_faces_setting": "Разпознаване на нови лица",
"nightly_tasks_database_cleanup_setting": "Задачи по почистване на базата данни",
"nightly_tasks_database_cleanup_setting_description": "Премахни стари, ненужни записи от базата данни",
"nightly_tasks_generate_memories_setting": "Създаване на спомени",
"nightly_tasks_generate_memories_setting_description": "Създаване на нови спомени от съществуващи обекти",
"nightly_tasks_missing_thumbnails_setting": "Генериране на липсващи миниатюри",
"nightly_tasks_missing_thumbnails_setting_description": "Добавяне на обекти без миниатюра в опашката за създаване на миниатюра",
"nightly_tasks_settings": "Настройка на задачи за през нощта",
"nightly_tasks_settings_description": "Управление на задачите, изпълнявани през нощта",
"nightly_tasks_start_time_setting": "Време за начало",
"nightly_tasks_start_time_setting_description": "Време, когато сървъра ще започне изпълнение на нощни задачи",
"nightly_tasks_sync_quota_usage_setting": "Квота за синхронизация",
"nightly_tasks_sync_quota_usage_setting_description": "Обновяване на квотата според текущото потребление",
"no_paths_added": "Няма добавени пътища", "no_paths_added": "Няма добавени пътища",
"no_pattern_added": "Няма добавен модел", "no_pattern_added": "Няма добавен модел",
"note_apply_storage_label_previous_assets": "Забележка: За да приложите етикета за съхранение към предварително качени файлове, стартирайте", "note_apply_storage_label_previous_assets": "Забележка: За да приложите етикета за съхранение към предварително качени файлове, стартирайте",
@@ -210,8 +196,6 @@
"oauth_mobile_redirect_uri": "URI за мобилно пренасочване", "oauth_mobile_redirect_uri": "URI за мобилно пренасочване",
"oauth_mobile_redirect_uri_override": "URI пренасочване за мобилни устройства", "oauth_mobile_redirect_uri_override": "URI пренасочване за мобилни устройства",
"oauth_mobile_redirect_uri_override_description": "Разреши когато доставчика за OAuth удостоверяване не позволява за мобилни URI идентификатори, като ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Разреши когато доставчика за OAuth удостоверяване не позволява за мобилни URI идентификатори, като ''{callback}''",
"oauth_role_claim": "Потвърждение на роля",
"oauth_role_claim_description": "Автоматично предоставяне на административни права при наличие на това потвържение. Потвърждението може да има стойност 'user' или 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Управление на настройките за вход с OAuth", "oauth_settings_description": "Управление на настройките за вход с OAuth",
"oauth_settings_more_details": "За повече информация за функционалността, се потърсете в <link>docs</link>.", "oauth_settings_more_details": "За повече информация за функционалността, се потърсете в <link>docs</link>.",
@@ -373,8 +357,6 @@
"admin_password": "Администраторска парола", "admin_password": "Администраторска парола",
"administration": "Администрация", "administration": "Администрация",
"advanced": "Разширено", "advanced": "Разширено",
"advanced_settings_beta_timeline_subtitle": "Опитайте новите функции на приложението",
"advanced_settings_beta_timeline_title": "Бета версия на времевата линия",
"advanced_settings_enable_alternate_media_filter_subtitle": "При синхронизация, използвайте тази опция като филтър, основан на промяна на даден критерии. Опитайте само в случай, че приложението има проблем с откриване на всички албуми.", "advanced_settings_enable_alternate_media_filter_subtitle": "При синхронизация, използвайте тази опция като филтър, основан на промяна на даден критерии. Опитайте само в случай, че приложението има проблем с откриване на всички албуми.",
"advanced_settings_enable_alternate_media_filter_title": "[ЕКСПЕРИМЕНТАЛНО] Използвай филтъра на алтернативното устройство за синхронизация на албуми", "advanced_settings_enable_alternate_media_filter_title": "[ЕКСПЕРИМЕНТАЛНО] Използвай филтъра на алтернативното устройство за синхронизация на албуми",
"advanced_settings_log_level_title": "Ниво на запис в дневника: {level}", "advanced_settings_log_level_title": "Ниво на запис в дневника: {level}",
@@ -445,7 +427,6 @@
"app_settings": "Настройки ма приложението", "app_settings": "Настройки ма приложението",
"appears_in": "Излиза в", "appears_in": "Излиза в",
"archive": "Архив", "archive": "Архив",
"archive_action_prompt": "{count} са добавени в Архива",
"archive_or_unarchive_photo": "Архивиране или деархивиране на снимка", "archive_or_unarchive_photo": "Архивиране или деархивиране на снимка",
"archive_page_no_archived_assets": "Не са намерени обекти в архива", "archive_page_no_archived_assets": "Не са намерени обекти в архива",
"archive_page_title": "Архив ({count})", "archive_page_title": "Архив ({count})",
@@ -483,6 +464,7 @@
"assets": "Елементи", "assets": "Елементи",
"assets_added_count": "Добавено {count, plural, one {# asset} other {# assets}}", "assets_added_count": "Добавено {count, plural, one {# asset} other {# assets}}",
"assets_added_to_album_count": "Добавен(и) са {count, plural, one {# актив} other {# актива}} в албума", "assets_added_to_album_count": "Добавен(и) са {count, plural, one {# актив} other {# актива}} в албума",
"assets_added_to_name_count": "Добавен(и) са {count, plural, one {# актив} other {# актива}} към {hasName, select, true {<b>{name}</b>} other {нов албум}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Обекта не може да се добави} other {Обектите не може да се добавят}} в албума", "assets_cannot_be_added_to_album_count": "{count, plural, one {Обекта не може да се добави} other {Обектите не може да се добавят}} в албума",
"assets_count": "{count, plural, one {# актив} other {# актива}}", "assets_count": "{count, plural, one {# актив} other {# актива}}",
"assets_deleted_permanently": "{count} обекта са изтрити завинаги", "assets_deleted_permanently": "{count} обекта са изтрити завинаги",
@@ -508,7 +490,6 @@
"back_close_deselect": "Назад, затваряне или премахване на избора", "back_close_deselect": "Назад, затваряне или премахване на избора",
"background_location_permission": "Разрешение за достъп до местоположението във фонов режим", "background_location_permission": "Разрешение за достъп до местоположението във фонов режим",
"background_location_permission_content": "За да може да чете имената на Wi-Fi мрежите и да ги превключва при работа във фонов режим, Immich трябва *винаги* да има достъп до точното местоположение", "background_location_permission_content": "За да може да чете имената на Wi-Fi мрежите и да ги превключва при работа във фонов режим, Immich трябва *винаги* да има достъп до точното местоположение",
"backup": "Архивиране",
"backup_album_selection_page_albums_device": "Албуми на устройството ({count})", "backup_album_selection_page_albums_device": "Албуми на устройството ({count})",
"backup_album_selection_page_albums_tap": "Натисни за да включиш, двойно за да изключиш", "backup_album_selection_page_albums_tap": "Натисни за да включиш, двойно за да изключиш",
"backup_album_selection_page_assets_scatter": "Обектите могат да бъдат разпръснати в няколко албума. По този начин албумите могат да бъдат включени или изключени по време на процеса на архивиране.", "backup_album_selection_page_assets_scatter": "Обектите могат да бъдат разпръснати в няколко албума. По този начин албумите могат да бъдат включени или изключени по време на процеса на архивиране.",
@@ -722,7 +703,7 @@
"daily_title_text_date": "E, dd MMM", "daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM yyyy", "daily_title_text_date_year": "E, dd MMM yyyy",
"dark": "Тъмен", "dark": "Тъмен",
"dark_theme": "Тъмна тема", "darkTheme": "Превключи на тъмна тема",
"date_after": "Дата след", "date_after": "Дата след",
"date_and_time": "Дата и час", "date_and_time": "Дата и час",
"date_before": "Дата преди", "date_before": "Дата преди",
@@ -738,7 +719,6 @@
"default_locale": "Локализация по подразбиране", "default_locale": "Локализация по подразбиране",
"default_locale_description": "Форматиране на дати и числа в зависимост от езиковата настройка на браузъра", "default_locale_description": "Форматиране на дати и числа в зависимост от езиковата настройка на браузъра",
"delete": "Изтрий", "delete": "Изтрий",
"delete_action_prompt": "{count} са изтрити завинаги",
"delete_album": "Изтрий албум", "delete_album": "Изтрий албум",
"delete_api_key_prompt": "Сигурни ли сте, че искате да изтриете този API ключ?", "delete_api_key_prompt": "Сигурни ли сте, че искате да изтриете този API ключ?",
"delete_dialog_alert": "Тези обекти ще бъдат изтрити завинаги и от Immich сървъра и от устройството", "delete_dialog_alert": "Тези обекти ще бъдат изтрити завинаги и от Immich сървъра и от устройството",
@@ -752,20 +732,19 @@
"delete_key": "Изтрий ключ", "delete_key": "Изтрий ключ",
"delete_library": "Изтрий библиотека", "delete_library": "Изтрий библиотека",
"delete_link": "Изтрий линк", "delete_link": "Изтрий линк",
"delete_local_action_prompt": "{count} са изтрити локално",
"delete_local_dialog_ok_backed_up_only": "Изтрий локално само архивираните", "delete_local_dialog_ok_backed_up_only": "Изтрий локално само архивираните",
"delete_local_dialog_ok_force": "Въпреки това изтрий", "delete_local_dialog_ok_force": "Въпреки това изтрий",
"delete_others": "Изтрий останалите", "delete_others": "Изтрий останалите",
"delete_shared_link": "Изтриване на споделен линк", "delete_shared_link": "Изтриване на споделен линк",
"delete_shared_link_dialog_title": "Изтрий споделената връзка", "delete_shared_link_dialog_title": "Изтрий споделената връзка",
"delete_tag": "Изтрий таг", "delete_tag": "Изтрий таг",
"delete_tag_confirmation_prompt": "Сигурни ли сте, че искате да изтриете тага {tagName}?", "delete_tag_confirmation_prompt": "Сигурни ли сте, че искате да изтриете таг {tagName}?",
"delete_user": "Изтрий потребител", "delete_user": "Изтрий потребител",
"deleted_shared_link": "Изтрит споделен линк", "deleted_shared_link": "Изтрит споделен линк",
"deletes_missing_assets": "Изтрива файлове, които липсват на диска", "deletes_missing_assets": "Изтрива файлове, които липсват на диска",
"description": "Описание", "description": "Описание",
"description_input_hint_text": "Добави описание...", "description_input_hint_text": "Добави описание...",
"description_input_submit_error": "Неуспешно обновяване на описанието. За подробности вижте в дневника", "description_input_submit_error": "Неуспешно обновяване на описанието. За подробности виж в дневника",
"details": "Детайли", "details": "Детайли",
"direction": "Посока", "direction": "Посока",
"disabled": "Изключено", "disabled": "Изключено",
@@ -783,7 +762,6 @@
"documentation": "Документация", "documentation": "Документация",
"done": "Готово", "done": "Готово",
"download": "Изтегли", "download": "Изтегли",
"download_action_prompt": "Зареждане на {count} обекта",
"download_canceled": "Изтеглянето е отменено", "download_canceled": "Изтеглянето е отменено",
"download_complete": "Изтеглянето завърши", "download_complete": "Изтеглянето завърши",
"download_enqueue": "Изтеглянето е добавено в опашката", "download_enqueue": "Изтеглянето е добавено в опашката",
@@ -821,7 +799,6 @@
"edit_key": "Редактиране на ключ", "edit_key": "Редактиране на ключ",
"edit_link": "Редактиране на линк", "edit_link": "Редактиране на линк",
"edit_location": "Редактиране на местоположението", "edit_location": "Редактиране на местоположението",
"edit_location_action_prompt": "{count} локации са редактирани",
"edit_location_dialog_title": "Местоположение", "edit_location_dialog_title": "Местоположение",
"edit_name": "Редактиране на име", "edit_name": "Редактиране на име",
"edit_people": "Редактиране на хора", "edit_people": "Редактиране на хора",
@@ -1007,7 +984,6 @@
"failed_to_load_assets": "Неуспешно зареждане на елементи", "failed_to_load_assets": "Неуспешно зареждане на елементи",
"failed_to_load_folder": "Неуспешно зареждане на папка", "failed_to_load_folder": "Неуспешно зареждане на папка",
"favorite": "Любим", "favorite": "Любим",
"favorite_action_prompt": "{count} са добавени в Любими",
"favorite_or_unfavorite_photo": "Добави или премахни снимка от Любими", "favorite_or_unfavorite_photo": "Добави или премахни снимка от Любими",
"favorites": "Любими", "favorites": "Любими",
"favorites_page_no_favorites": "Не са намерени любими обекти", "favorites_page_no_favorites": "Не са намерени любими обекти",
@@ -1151,10 +1127,10 @@
"library_page_sort_created": "Дата на създаване", "library_page_sort_created": "Дата на създаване",
"library_page_sort_last_modified": "Последна промяна", "library_page_sort_last_modified": "Последна промяна",
"library_page_sort_title": "Заглавие на албума", "library_page_sort_title": "Заглавие на албума",
"licenses": "Лицензи",
"light": "Светло", "light": "Светло",
"like_deleted": "Като изтрит", "like_deleted": "Като изтрит",
"link_motion_video": "Линк към видео", "link_motion_video": "Линк към видео",
"link_options": "Опции на линк за споделяне",
"link_to_oauth": "Линк към OAuth", "link_to_oauth": "Линк към OAuth",
"linked_oauth_account": "Свързан OAuth акаунт", "linked_oauth_account": "Свързан OAuth акаунт",
"list": "Лист", "list": "Лист",
@@ -1217,6 +1193,7 @@
"manage_your_devices": "Управление на влезлите в системата устройства", "manage_your_devices": "Управление на влезлите в системата устройства",
"manage_your_oauth_connection": "Управление на OAuth връзката", "manage_your_oauth_connection": "Управление на OAuth връзката",
"map": "Карта", "map": "Карта",
"map_assets_in_bound": "{count} снимки",
"map_assets_in_bounds": "{count} снимки", "map_assets_in_bounds": "{count} снимки",
"map_cannot_get_user_location": "Не можах да получа местоположението", "map_cannot_get_user_location": "Не можах да получа местоположението",
"map_location_dialog_yes": "Да", "map_location_dialog_yes": "Да",
@@ -1269,7 +1246,6 @@
"more": "Още", "more": "Още",
"move": "Премести", "move": "Премести",
"move_off_locked_folder": "Извади от заключената папка", "move_off_locked_folder": "Извади от заключената папка",
"move_to_lock_folder_action_prompt": "{count} са добавени в заключената папка",
"move_to_locked_folder": "Премести в заключена папка", "move_to_locked_folder": "Премести в заключена папка",
"move_to_locked_folder_confirmation": "Тези снимки и видеа ще бъдат изтрити от всички албуми и ще са достъпни само в заключената папка", "move_to_locked_folder_confirmation": "Тези снимки и видеа ще бъдат изтрити от всички албуми и ще са достъпни само в заключената папка",
"moved_to_archive": "{count, plural, one {# обект е преместен} many {# обекта са преместени} other {# обекта са преместени}} в архива", "moved_to_archive": "{count, plural, one {# обект е преместен} many {# обекта са преместени} other {# обекта са преместени}} в архива",
@@ -1519,9 +1495,7 @@
"remove_custom_date_range": "Премахни зададения диапазон от дати", "remove_custom_date_range": "Премахни зададения диапазон от дати",
"remove_deleted_assets": "Премахни Изтритите Елементи", "remove_deleted_assets": "Премахни Изтритите Елементи",
"remove_from_album": "Премахни от албума", "remove_from_album": "Премахни от албума",
"remove_from_album_action_prompt": "{count} са премахнати от албума",
"remove_from_favorites": "Премахни от Любими", "remove_from_favorites": "Премахни от Любими",
"remove_from_lock_folder_action_prompt": "{count} са премахнати от заключената папка",
"remove_from_locked_folder": "Махни от заключената папка", "remove_from_locked_folder": "Махни от заключената папка",
"remove_from_locked_folder_confirmation": "Сигурни ли си, че искате тези снимки и видеа да бъдат извадени от заключената папка? Те ще бъдат видими в библиотеката.", "remove_from_locked_folder_confirmation": "Сигурни ли си, че искате тези снимки и видеа да бъдат извадени от заключената папка? Те ще бъдат видими в библиотеката.",
"remove_from_shared_link": "Премахни от споделения линк", "remove_from_shared_link": "Премахни от споделения линк",
@@ -1693,7 +1667,6 @@
"settings_saved": "Настройките са запазени", "settings_saved": "Настройките са запазени",
"setup_pin_code": "Задай PIN код", "setup_pin_code": "Задай PIN код",
"share": "Споделяне", "share": "Споделяне",
"share_action_prompt": "{count} споделени обекта",
"share_add_photos": "Добави снимки", "share_add_photos": "Добави снимки",
"share_assets_selected": "{count} избрани", "share_assets_selected": "{count} избрани",
"share_dialog_preparing": "Подготовка...", "share_dialog_preparing": "Подготовка...",
@@ -1795,7 +1768,6 @@
"sort_title": "Заглавие", "sort_title": "Заглавие",
"source": "Код", "source": "Код",
"stack": "Събери", "stack": "Събери",
"stack_action_prompt": "{count} са групирани",
"stack_duplicates": "Подреждане на дубликати", "stack_duplicates": "Подреждане на дубликати",
"stack_select_one_photo": "Избери една главна снимка за събраните снимки", "stack_select_one_photo": "Избери една главна снимка за събраните снимки",
"stack_selected_photos": "Подреждане на избрани снимки", "stack_selected_photos": "Подреждане на избрани снимки",
@@ -1866,7 +1838,6 @@
"total": "Общо", "total": "Общо",
"total_usage": "Общо използвано", "total_usage": "Общо използвано",
"trash": "Кошче", "trash": "Кошче",
"trash_action_prompt": "{count} са преместени в коша",
"trash_all": "Изхвърли всички", "trash_all": "Изхвърли всички",
"trash_count": "В Кошчето {count, number}", "trash_count": "В Кошчето {count, number}",
"trash_delete_asset": "Вкарай в Кошчето/Изтрий елемент", "trash_delete_asset": "Вкарай в Кошчето/Изтрий елемент",
@@ -1884,11 +1855,9 @@
"unable_to_change_pin_code": "Невъзможна промяна на PIN кода", "unable_to_change_pin_code": "Невъзможна промяна на PIN кода",
"unable_to_setup_pin_code": "Неуспешно задаване на PIN кода", "unable_to_setup_pin_code": "Неуспешно задаване на PIN кода",
"unarchive": "Разархивирай", "unarchive": "Разархивирай",
"unarchive_action_prompt": "{count} са премахнати от Архива",
"unarchived_count": "{count, plural, other {Неархивирани #}}", "unarchived_count": "{count, plural, other {Неархивирани #}}",
"undo": "Отмени", "undo": "Отмени",
"unfavorite": "Премахване от любимите", "unfavorite": "Премахване от любимите",
"unfavorite_action_prompt": "{count} са премахнати от Любими",
"unhide_person": "Покажи отново човека", "unhide_person": "Покажи отново човека",
"unknown": "Неизвестно", "unknown": "Неизвестно",
"unknown_country": "Непозната Държава", "unknown_country": "Непозната Държава",
@@ -1906,9 +1875,7 @@
"unselect_all_duplicates": "От маркирай всички дубликати", "unselect_all_duplicates": "От маркирай всички дубликати",
"unselect_all_in": "Премахни избора на всички от групата {group}", "unselect_all_in": "Премахни избора на всички от групата {group}",
"unstack": "Разкачи", "unstack": "Разкачи",
"unstack_action_prompt": "{count} са разгрупирани",
"unstacked_assets_count": "Разкачени {count, plural, one {# елемент} other {# елементи}}", "unstacked_assets_count": "Разкачени {count, plural, one {# елемент} other {# елементи}}",
"untagged": "Немаркирани",
"up_next": "Следващ", "up_next": "Следващ",
"updated_at": "Обновено", "updated_at": "Обновено",
"updated_password": "Паролата е актуализирана", "updated_password": "Паролата е актуализирана",

View File

@@ -8,7 +8,6 @@
"actions": "কর্ম", "actions": "কর্ম",
"active": "সচল", "active": "সচল",
"activity": "কার্যকলাপ", "activity": "কার্যকলাপ",
"activity_changed": "একটিভিটি এখন {enabled, select, true {চালু} other {বন্ধ}} আছে",
"add": "যোগ করুন", "add": "যোগ করুন",
"add_a_description": "একটি বিবরণ যোগ করুন", "add_a_description": "একটি বিবরণ যোগ করুন",
"add_a_location": "একটি অবস্থান যোগ করুন", "add_a_location": "একটি অবস্থান যোগ করুন",
@@ -16,84 +15,5 @@
"add_a_title": "একটি শিরোনাম যোগ করুন", "add_a_title": "একটি শিরোনাম যোগ করুন",
"add_endpoint": "এন্ডপয়েন্ট যোগ করুন", "add_endpoint": "এন্ডপয়েন্ট যোগ করুন",
"add_exclusion_pattern": "বহির্ভূতকরণ নমুনা", "add_exclusion_pattern": "বহির্ভূতকরণ নমুনা",
"add_import_path": "ইমপোর্ট করার পাথ যুক্ত করুন", "add_url": "লিঙ্ক যোগ করুন"
"add_location": "অবস্থান যুক্ত করুন",
"add_more_users": "আরো ব্যবহারকারী যুক্ত করুন",
"add_partner": "অংশীদার যোগ করুন",
"add_path": "পাথ যুক্ত করুন",
"add_photos": "ছবি যুক্ত করুন",
"add_tag": "ট্যাগ যুক্ত করুন",
"add_to": "যুক্ত করুন…",
"add_to_album": "এলবাম এ যোগ করুন",
"add_to_album_bottom_sheet_added": "{album} এ যোগ করা হয়েছে",
"add_to_album_bottom_sheet_already_exists": "{album} এ আগে থেকেই আছে",
"add_to_shared_album": "শেয়ার করা অ্যালবামে যোগ করুন",
"add_url": "লিঙ্ক যোগ করুন",
"added_to_archive": "আর্কাইভ এ যোগ করা হয়েছে",
"added_to_favorites": "ফেভারিটে যোগ করা হয়েছে",
"added_to_favorites_count": "পছন্দের তালিকায় {count, number} যোগ করা হয়েছে",
"admin": {
"add_exclusion_pattern_description": "এক্সক্লুশন প্যাটার্ন যোগ করুন। *, **, এবং ? ব্যবহার করে গ্লোবিং করা সম্ভব। \"Raw\" নামের যেকোনো ডিরেক্টরিতে থাকা সমস্ত ফাইল বাদ দিতে \"**/Raw/**\" ব্যবহার করুন। \".tif\" দিয়ে শেষ হওয়া সমস্ত ফাইল বাদ দিতে \"**/*.tif\" ব্যবহার করুন। একটি সম্পূর্ণ পাথ বাদ দিতে, \"/path/to/ignore/**\" ব্যবহার করুন।",
"admin_user": "এডমিন ইউজার",
"asset_offline_description": "এই বহিরাগত লাইব্রেরি সম্পদটি আর ডিস্কে পাওয়া যাচ্ছে না এবং ট্র্যাশে সরানো হয়েছে। যদি ফাইলটি লাইব্রেরির মধ্যে সরানো হয়ে থাকে, তাহলে নতুন সংশ্লিষ্ট সম্পদের জন্য আপনার টাইমলাইন পরীক্ষা করুন। এই সম্পদটি পুনরুদ্ধার করতে, দয়া করে নিশ্চিত করুন যে নীচের ফাইল পাথটি Immich দ্বারা অ্যাক্সেস করা যেতে পারে এবং লাইব্রেরিটি স্ক্যান করুন।",
"authentication_settings": "প্রমাণীকরণ সেটিংস",
"authentication_settings_description": "পাসওয়ার্ড, OAuth এবং অন্যান্য প্রমাণীকরণ সেটিংস পরিচালনা করুন",
"authentication_settings_disable_all": "আপনি কি নিশ্চিত যে আপনি সমস্ত লগইন পদ্ধতি অক্ষম করতে চান? লগইন সম্পূর্ণরূপে অক্ষম করা হবে।",
"authentication_settings_reenable": "পুনরায় সক্ষম করতে, একটি <link>সার্ভার কমান্ড</link> ব্যবহার করুন।",
"background_task_job": "ব্যাকগ্রাউন্ড টাস্ক",
"backup_database": "ডাটাবেস ডাম্প তৈরি করুন",
"backup_database_enable_description": "ডাটাবেস ডাম্প সক্রিয় করুন",
"backup_keep_last_amount": "আগের ডাম্পের পরিমাণ রাখা হবে",
"backup_settings": "ডাটাবেস ডাম্প সেটিংস",
"backup_settings_description": "ডাটাবেস ডাম্প সেটিংস পরিচালনা করুন।",
"cleared_jobs": "{job} এর জন্য jobs খালি করা হয়েছে",
"config_set_by_file": "কনফিগ বর্তমানে একটি কনফিগ ফাইল দ্বারা সেট করা আছে",
"confirm_delete_library": "আপনি কি নিশ্চিত যে আপনি {library} লাইব্রেরি মুছে ফেলতে চান?",
"confirm_delete_library_assets": "আপনি কি নিশ্চিত যে আপনি এই লাইব্রেরিটি মুছে ফেলতে চান? এটি Immich থেকে {count, plural, one {# contained asset} other {all # contained asset}} মুছে ফেলবে এবং পূর্বাবস্থায় ফেরানো যাবে না। ফাইলগুলি ডিস্কে থাকবে।",
"confirm_email_below": "নিশ্চিত করতে, নিচে \"{email}\" টাইপ করুন",
"confirm_reprocess_all_faces": "আপনি কি নিশ্চিত যে আপনি সমস্ত মুখ পুনরায় প্রক্রিয়া করতে চান? এটি নামযুক্ত ব্যক্তিদেরও মুছে ফেলবে।",
"confirm_user_password_reset": "আপনি কি নিশ্চিত যে আপনি {user} এর পাসওয়ার্ড রিসেট করতে চান?",
"confirm_user_pin_code_reset": "আপনি কি নিশ্চিত যে আপনি {user} এর পিন কোড রিসেট করতে চান?",
"create_job": "job তৈরি করুন",
"cron_expression": "ক্রোন এক্সপ্রেশন",
"cron_expression_description": "ক্রোন ফর্ম্যাট ব্যবহার করে স্ক্যানিং ব্যবধান সেট করুন। আরও তথ্যের জন্য দয়া করে দেখুন যেমন <link>Crontab Guru</link>",
"cron_expression_presets": "ক্রোন এক্সপ্রেশন প্রিসেট",
"disable_login": "লগইন অক্ষম করুন",
"duplicate_detection_job_description": "অনুরূপ ছবি সনাক্ত করতে সম্পদগুলিতে মেশিন লার্নিং চালান। স্মার্ট অনুসন্ধানের উপর নির্ভর করে",
"exclusion_pattern_description": "এক্সক্লুশন প্যাটার্ন ব্যবহার করে আপনি আপনার লাইব্রেরি স্ক্যান করার সময় ফাইল এবং ফোল্ডারগুলিকে উপেক্ষা করতে পারবেন। যদি আপনার এমন ফোল্ডার থাকে যেখানে এমন ফাইল থাকে যা আপনি আমদানি করতে চান না, যেমন RAW ফাইল।",
"external_library_management": "বহিরাগত গ্রন্থাগার ব্যবস্থাপনা",
"face_detection": "মুখ সনাক্তকরণ",
"face_detection_description": "মেশিন লার্নিং ব্যবহার করে অ্যাসেটে থাকা মুখ/চেহারা গুলি সনাক্ত করুন। ভিডিও গুলির জন্য, শুধুমাত্র থাম্বনেইল বিবেচনা করা হয়। \"রিফ্রেশ\" (পুনরায়) সমস্ত অ্যাসেট প্রক্রিয়া করে। \"রিসেট\" করার মাধ্যমে অতিরিক্তভাবে সমস্ত বর্তমান মুখের ডেটা সাফ করে। \"অনুপস্থিত\" অ্যাসেটগুলিকে সারিবদ্ধ করে যা এখনও প্রক্রিয়া করা হয়নি। সনাক্ত করা মুখগুলিকে ফেসিয়াল রিকগনিশনের জন্য সারিবদ্ধ করা হবে, ফেসিয়াল ডিটেকশন সম্পূর্ণ হওয়ার পরে, বিদ্যমান বা নতুন ব্যক্তিদের মধ্যে গোষ্ঠীবদ্ধ করে।",
"facial_recognition_job_description": "শনাক্ত করা মুখগুলিকে মানুষের মধ্যে গোষ্ঠীভুক্ত করুন। মুখ সনাক্তকরণ সম্পূর্ণ হওয়ার পরে এই ধাপটি চলে। \"রিসেট\" (পুনরায়) সমস্ত মুখকে ক্লাস্টার করে। \"অনুপস্থিত\" মুখগুলিকে সারিতে রাখে যেখানে কোনও ব্যক্তিকে বরাদ্দ করা হয়নি।",
"failed_job_command": "কমান্ড {command} কাজের জন্য ব্যর্থ হয়েছে: {job}",
"force_delete_user_warning": "সতর্কতা: এটি ব্যবহারকারী এবং সমস্ত সম্পদ অবিলম্বে সরিয়ে ফেলবে। এটি পূর্বাবস্থায় ফেরানো যাবে না এবং ফাইলগুলি পুনরুদ্ধার করা যাবে না।",
"image_format": "ফরম্যাট",
"image_format_description": "WebP JPEG এর তুলনায় ছোট ফাইল তৈরি করে, কিন্তু এনকোড করতে ধীর।",
"image_fullsize_description": "জুম ইন করার সময় ব্যবহৃত স্ট্রিপড মেটাডেটা সহ পূর্ণ আকারের ছবি",
"image_fullsize_enabled": "পূর্ণ-আকারের ছবি তৈরি সক্ষম করুন",
"image_fullsize_enabled_description": "ওয়েব-বান্ধব নয় এমন ফর্ম্যাটের জন্য পূর্ণ-আকারের ছবি তৈরি করুন। \"এমবেডেড প্রিভিউ পছন্দ করুন\" সক্ষম করা থাকলে, রূপান্তর ছাড়াই এমবেডেড প্রিভিউ সরাসরি ব্যবহার করা হয়। JPEG-এর মতো ওয়েব-বান্ধব ফর্ম্যাটগুলিকে প্রভাবিত করে না।",
"image_fullsize_quality_description": "পূর্ণ-আকারের ছবির মান ১-১০০। উচ্চতর হলে ভালো, কিন্তু আরও বড় ফাইল তৈরি হয়।",
"image_fullsize_title": "পূর্ণ-আকারের চিত্র সেটিংস",
"image_prefer_embedded_preview": "এম্বেড করা প্রিভিউ পছন্দ করুন",
"image_prefer_embedded_preview_setting_description": "ছবি প্রক্রিয়াকরণের জন্য এবং যখনই উপলব্ধ থাকবে তখন RAW ফটোতে এমবেডেড প্রিভিউ ব্যবহার করুন। এটি কিছু ছবির জন্য আরও সঠিক রঙ তৈরি করতে পারে, তবে প্রিভিউয়ের মান ক্যামেরা-নির্ভর এবং ছবিতে আরও কম্প্রেশন আর্টিফ্যাক্ট থাকতে পারে।",
"image_prefer_wide_gamut": "প্রশস্ত পরিসর পছন্দ করুন",
"image_prefer_wide_gamut_setting_description": "থাম্বনেইলের জন্য ডিসপ্লে P3 ব্যবহার করুন। এটি প্রশস্ত রঙের স্থান সহ ছবির প্রাণবন্ততা আরও ভালভাবে সংরক্ষণ করে, তবে পুরানো ব্রাউজার সংস্করণ সহ পুরানো ডিভাইসগুলিতে ছবিগুলি ভিন্নভাবে প্রদর্শিত হতে পারে। রঙের পরিবর্তন এড়াতে sRGB ছবিগুলিকে sRGB হিসাবে রাখা হয়।",
"image_preview_description": "স্ট্রিপড মেটাডেটা সহ মাঝারি আকারের ছবি, একটি একক সম্পদ দেখার সময় এবং মেশিন লার্নিংয়ের জন্য ব্যবহৃত হয়",
"image_preview_quality_description": "১-১০০ এর মধ্যে প্রিভিউ কোয়ালিটি। বেশি হলে ভালো, কিন্তু বড় ফাইল তৈরি হয় এবং অ্যাপের প্রতিক্রিয়াশীলতা কমাতে পারে। কম মান সেট করলে মেশিন লার্নিং কোয়ালিটির উপর প্রভাব পড়তে পারে।",
"image_preview_title": "প্রিভিউ সেটিংস",
"image_quality": "গুণমান",
"image_resolution": "রেজোলিউশন",
"image_resolution_description": "উচ্চ রেজোলিউশনের ক্ষেত্রে আরও বিস্তারিত তথ্য সংরক্ষণ করা সম্ভব কিন্তু এনকোড করতে বেশি সময় লাগে, ফাইলের আকার বড় হয় এবং অ্যাপের প্রতিক্রিয়াশীলতা কমাতে পারে।",
"image_settings": "চিত্র সেটিংস",
"image_settings_description": "তৈরি করা ছবির মান এবং রেজোলিউশন পরিচালনা করুন",
"image_thumbnail_description": "মেটাডেটা বাদ দেওয়া ছোট থাম্বনেইল, মূল টাইমলাইনের মতো ছবির গ্রুপ দেখার সময় ব্যবহৃত হয়",
"image_thumbnail_quality_description": "থাম্বনেইলের মান ১-১০০। বেশি হলে ভালো, কিন্তু বড় ফাইল তৈরি হয় এবং অ্যাপের প্রতিক্রিয়াশীলতা কমাতে পারে।",
"image_thumbnail_title": "থাম্বনেল সেটিংস",
"job_concurrency": "{job} কনকারেন্সি",
"job_created": "Job তৈরি হয়েছে",
"job_not_concurrency_safe": "এই কাজটি সমকালীন-নিরাপদ নয়।",
"job_settings": "কাজের সেটিংস",
"job_settings_description": "কাজের সমান্তরালতা পরিচালনা করুন",
"job_status": "চাকরির অবস্থা"
}
} }

View File

@@ -166,10 +166,6 @@
"metadata_settings_description": "Administrar la configuració de les metadades", "metadata_settings_description": "Administrar la configuració de les metadades",
"migration_job": "Migració", "migration_job": "Migració",
"migration_job_description": "Migra les miniatures d'elements i cares cap a la nova estructura de carpetes", "migration_job_description": "Migra les miniatures d'elements i cares cap a la nova estructura de carpetes",
"nightly_tasks_cluster_new_faces_setting": "Agrupa cares noves",
"nightly_tasks_database_cleanup_setting": "Tasques de neteja de la base de dades",
"nightly_tasks_database_cleanup_setting_description": "Netegeu les dades antigues i caducades de la base de dades",
"nightly_tasks_missing_thumbnails_setting": "Generar les miniatures restants",
"no_paths_added": "No s'ha afegit cap ruta", "no_paths_added": "No s'ha afegit cap ruta",
"no_pattern_added": "Cap patró aplicat", "no_pattern_added": "Cap patró aplicat",
"note_apply_storage_label_previous_assets": "Nota: Per aplicar l'etiquetatge d'emmagatzematge a elements pujats prèviament, executeu la", "note_apply_storage_label_previous_assets": "Nota: Per aplicar l'etiquetatge d'emmagatzematge a elements pujats prèviament, executeu la",
@@ -200,8 +196,6 @@
"oauth_mobile_redirect_uri": "URI de redirecció mòbil", "oauth_mobile_redirect_uri": "URI de redirecció mòbil",
"oauth_mobile_redirect_uri_override": "Sobreescriu l'URI de redirecció mòbil", "oauth_mobile_redirect_uri_override": "Sobreescriu l'URI de redirecció mòbil",
"oauth_mobile_redirect_uri_override_description": "Habilita quan el proveïdor d'OAuth no permet una URI mòbil, com ara ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Habilita quan el proveïdor d'OAuth no permet una URI mòbil, com ara ''{callback}''",
"oauth_role_claim": "Concessió de rol",
"oauth_role_claim_description": "Atorgar accés d'administrador automàticament segons la presència d'aquesta concessió. La concessió pot ser 'usuari' o 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Gestiona la configuració de l'inici de sessió OAuth", "oauth_settings_description": "Gestiona la configuració de l'inici de sessió OAuth",
"oauth_settings_more_details": "Per a més detalls sobre aquesta funcionalitat, consulteu la <link>documentació</link>.", "oauth_settings_more_details": "Per a més detalls sobre aquesta funcionalitat, consulteu la <link>documentació</link>.",
@@ -250,7 +244,6 @@
"storage_template_migration_info": "Les extensions es convertiran a minúscules. Els canvis de plantilla només s'aplicaran a nous elements. Per aplicar la plantilla rectroactivament a elements pujats prèviament, executeu la <link>{job}</link>.", "storage_template_migration_info": "Les extensions es convertiran a minúscules. Els canvis de plantilla només s'aplicaran a nous elements. Per aplicar la plantilla rectroactivament a elements pujats prèviament, executeu la <link>{job}</link>.",
"storage_template_migration_job": "Tasca de migració de la plantilla d'emmagatzematge", "storage_template_migration_job": "Tasca de migració de la plantilla d'emmagatzematge",
"storage_template_more_details": "Per obtenir més detalls sobre aquesta funció, consulteu la <template-link>Storage Template</template-link> i les seves <implications-link>implications</implications-link>", "storage_template_more_details": "Per obtenir més detalls sobre aquesta funció, consulteu la <template-link>Storage Template</template-link> i les seves <implications-link>implications</implications-link>",
"storage_template_onboarding_description_v2": "Un cop habilitada, aquesta funció organitzarà automàticament els fitxers a partir d'una plantilla definida per l'usuari. Per a més informació, podeu consultar la <link>documentació</link>.",
"storage_template_path_length": "Límit aproximat de longitud de la ruta: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "Límit aproximat de longitud de la ruta: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Plantilla d'emmagatzematge", "storage_template_settings": "Plantilla d'emmagatzematge",
"storage_template_settings_description": "Gestiona l'estructura de les carpetes i el nom del fitxers dels elements pujats", "storage_template_settings_description": "Gestiona l'estructura de les carpetes i el nom del fitxers dels elements pujats",
@@ -366,7 +359,7 @@
"advanced_settings_enable_alternate_media_filter_subtitle": "Feu servir aquesta opció per filtrar els continguts multimèdia durant la sincronització segons criteris alternatius. Només proveu-ho si teniu problemes amb l'aplicació per detectar tots els àlbums.", "advanced_settings_enable_alternate_media_filter_subtitle": "Feu servir aquesta opció per filtrar els continguts multimèdia durant la sincronització segons criteris alternatius. Només proveu-ho si teniu problemes amb l'aplicació per detectar tots els àlbums.",
"advanced_settings_enable_alternate_media_filter_title": "Utilitza el filtre de sincronització d'àlbums de dispositius alternatius", "advanced_settings_enable_alternate_media_filter_title": "Utilitza el filtre de sincronització d'àlbums de dispositius alternatius",
"advanced_settings_log_level_title": "Nivell de registre: {level}", "advanced_settings_log_level_title": "Nivell de registre: {level}",
"advanced_settings_prefer_remote_subtitle": "Alguns dispositius són molt lents en carregar miniatures dels elements locals. Activeu aquest paràmetre per carregar imatges remotes en el seu lloc.", "advanced_settings_prefer_remote_subtitle": "Alguns dispositius són molt lents en carregar miniatures dels elements del dispositiu. Activeu aquest paràmetre per carregar imatges remotes en el seu lloc.",
"advanced_settings_prefer_remote_title": "Prefereix imatges remotes", "advanced_settings_prefer_remote_title": "Prefereix imatges remotes",
"advanced_settings_proxy_headers_subtitle": "Definiu les capçaleres de proxy que Immich per enviar amb cada sol·licitud de xarxa", "advanced_settings_proxy_headers_subtitle": "Definiu les capçaleres de proxy que Immich per enviar amb cada sol·licitud de xarxa",
"advanced_settings_proxy_headers_title": "Capçaleres de proxy", "advanced_settings_proxy_headers_title": "Capçaleres de proxy",
@@ -433,7 +426,6 @@
"app_settings": "Configuració de l'app", "app_settings": "Configuració de l'app",
"appears_in": "Apareix a", "appears_in": "Apareix a",
"archive": "Arxiu", "archive": "Arxiu",
"archive_action_prompt": "{count} afegit a Arxiu",
"archive_or_unarchive_photo": "Arxivar o desarxivar fotografia", "archive_or_unarchive_photo": "Arxivar o desarxivar fotografia",
"archive_page_no_archived_assets": "No s'ha trobat res arxivat", "archive_page_no_archived_assets": "No s'ha trobat res arxivat",
"archive_page_title": "Arxiu({count})", "archive_page_title": "Arxiu({count})",
@@ -471,6 +463,7 @@
"assets": "Elements", "assets": "Elements",
"assets_added_count": "{count, plural, one {Afegit un element} other {Afegits # elements}}", "assets_added_count": "{count, plural, one {Afegit un element} other {Afegits # elements}}",
"assets_added_to_album_count": "{count, plural, one {Afegit un element} other {Afegits # elements}} a l'àlbum", "assets_added_to_album_count": "{count, plural, one {Afegit un element} other {Afegits # elements}} a l'àlbum",
"assets_added_to_name_count": "{count, plural, one {S'ha afegit # recurs} other {S'han afegit # recursos}} a {hasName, select, true {<b>{name}</b>} other {new album}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} no es pot afegir a l'àlbum", "assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} no es pot afegir a l'àlbum",
"assets_count": "{count, plural, one {# recurs} other {# recursos}}", "assets_count": "{count, plural, one {# recurs} other {# recursos}}",
"assets_deleted_permanently": "{count} element(s) esborrats permanentment", "assets_deleted_permanently": "{count} element(s) esborrats permanentment",
@@ -496,7 +489,6 @@
"back_close_deselect": "Tornar, tancar o anul·lar la selecció", "back_close_deselect": "Tornar, tancar o anul·lar la selecció",
"background_location_permission": "Permís d'ubicació en segon pla", "background_location_permission": "Permís d'ubicació en segon pla",
"background_location_permission_content": "Per canviar de xarxa quan s'executa en segon pla, Immich ha de *sempre* tenir accés a la ubicació precisa perquè l'aplicació pugui llegir el nom de la xarxa Wi-Fi", "background_location_permission_content": "Per canviar de xarxa quan s'executa en segon pla, Immich ha de *sempre* tenir accés a la ubicació precisa perquè l'aplicació pugui llegir el nom de la xarxa Wi-Fi",
"backup": "Còpia",
"backup_album_selection_page_albums_device": "Àlbums al dispositiu ({count})", "backup_album_selection_page_albums_device": "Àlbums al dispositiu ({count})",
"backup_album_selection_page_albums_tap": "Un toc per incloure, doble toc per excloure", "backup_album_selection_page_albums_tap": "Un toc per incloure, doble toc per excloure",
"backup_album_selection_page_assets_scatter": "Els elements poden dispersar-se en diversos àlbums. Per tant, els àlbums es poden incloure o excloure durant el procés de còpia de seguretat.", "backup_album_selection_page_assets_scatter": "Els elements poden dispersar-se en diversos àlbums. Per tant, els àlbums es poden incloure o excloure durant el procés de còpia de seguretat.",
@@ -710,7 +702,7 @@
"daily_title_text_date": "E, dd MMM", "daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy", "daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Fosc", "dark": "Fosc",
"dark_theme": "Canviar a tema fosc", "darkTheme": "Activa/desactiva el tema fosc",
"date_after": "Data posterior a", "date_after": "Data posterior a",
"date_and_time": "Data i hora", "date_and_time": "Data i hora",
"date_before": "Data anterior a", "date_before": "Data anterior a",
@@ -726,7 +718,6 @@
"default_locale": "Localització predeterminada", "default_locale": "Localització predeterminada",
"default_locale_description": "Format de dates i números segons la configuració del navegador", "default_locale_description": "Format de dates i números segons la configuració del navegador",
"delete": "Esborra", "delete": "Esborra",
"delete_action_prompt": "{count} eliminats permanentment",
"delete_album": "Esborra l'àlbum", "delete_album": "Esborra l'àlbum",
"delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?", "delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?",
"delete_dialog_alert": "Aquests elements seran eliminats de manera permanent d'Immich i del vostre dispositiu", "delete_dialog_alert": "Aquests elements seran eliminats de manera permanent d'Immich i del vostre dispositiu",
@@ -807,7 +798,6 @@
"edit_key": "Edita clau", "edit_key": "Edita clau",
"edit_link": "Edita enllaç", "edit_link": "Edita enllaç",
"edit_location": "Edita ubicació", "edit_location": "Edita ubicació",
"edit_location_action_prompt": "{count} ubicacions editades",
"edit_location_dialog_title": "Ubicació", "edit_location_dialog_title": "Ubicació",
"edit_name": "Edita el nom", "edit_name": "Edita el nom",
"edit_people": "Edita la gent", "edit_people": "Edita la gent",
@@ -993,7 +983,6 @@
"failed_to_load_assets": "Error carregant recursos", "failed_to_load_assets": "Error carregant recursos",
"failed_to_load_folder": "No s'ha pogut carregar la carpeta", "failed_to_load_folder": "No s'ha pogut carregar la carpeta",
"favorite": "Preferit", "favorite": "Preferit",
"favorite_action_prompt": "{count} afegit a Favorits",
"favorite_or_unfavorite_photo": "Foto preferida o no preferida", "favorite_or_unfavorite_photo": "Foto preferida o no preferida",
"favorites": "Preferits", "favorites": "Preferits",
"favorites_page_no_favorites": "No s'han trobat preferits", "favorites_page_no_favorites": "No s'han trobat preferits",
@@ -1140,6 +1129,7 @@
"light": "Llum", "light": "Llum",
"like_deleted": "M'agrada suprimit", "like_deleted": "M'agrada suprimit",
"link_motion_video": "Enllaçar vídeo en moviment", "link_motion_video": "Enllaçar vídeo en moviment",
"link_options": "Opcions d'enllaç",
"link_to_oauth": "Enllaç a OAuth", "link_to_oauth": "Enllaç a OAuth",
"linked_oauth_account": "Compte OAuth enllaçat", "linked_oauth_account": "Compte OAuth enllaçat",
"list": "Llista", "list": "Llista",
@@ -1159,7 +1149,6 @@
"locked_folder": "Carpeta bloquejada", "locked_folder": "Carpeta bloquejada",
"log_out": "Tanca la sessió", "log_out": "Tanca la sessió",
"log_out_all_devices": "Tanqueu la sessió de tots els dispositius", "log_out_all_devices": "Tanqueu la sessió de tots els dispositius",
"logged_in_as": "Sessió iniciada com a {user}",
"logged_out_all_devices": "S'ha tancat la sessió de tots els dispositius", "logged_out_all_devices": "S'ha tancat la sessió de tots els dispositius",
"logged_out_device": "Dispositiu tancat", "logged_out_device": "Dispositiu tancat",
"login": "Iniciar sessió", "login": "Iniciar sessió",
@@ -1202,6 +1191,7 @@
"manage_your_devices": "Gestioneu els vostres dispositius connectats", "manage_your_devices": "Gestioneu els vostres dispositius connectats",
"manage_your_oauth_connection": "Gestioneu la vostra connexió OAuth", "manage_your_oauth_connection": "Gestioneu la vostra connexió OAuth",
"map": "Mapa", "map": "Mapa",
"map_assets_in_bound": "{count} foto",
"map_assets_in_bounds": "{count} fotos", "map_assets_in_bounds": "{count} fotos",
"map_cannot_get_user_location": "No es pot obtenir la ubicació de l'usuari", "map_cannot_get_user_location": "No es pot obtenir la ubicació de l'usuari",
"map_location_dialog_yes": "Sí", "map_location_dialog_yes": "Sí",
@@ -1254,7 +1244,6 @@
"more": "Més", "more": "Més",
"move": "Moure", "move": "Moure",
"move_off_locked_folder": "Moure fora de la carpeta bloquejada", "move_off_locked_folder": "Moure fora de la carpeta bloquejada",
"move_to_lock_folder_action_prompt": "{count} afegides a la carpeta protegida",
"move_to_locked_folder": "Moure a la carpeta bloquejada", "move_to_locked_folder": "Moure a la carpeta bloquejada",
"move_to_locked_folder_confirmation": "Aquestes fotos i vídeos seran eliminades de tots els àlbums, i només podran ser vistes des de la carpeta bloquejada", "move_to_locked_folder_confirmation": "Aquestes fotos i vídeos seran eliminades de tots els àlbums, i només podran ser vistes des de la carpeta bloquejada",
"moved_to_archive": "S'han mogut {count, plural, one {# asset} other {# assets}} a l'arxiu", "moved_to_archive": "S'han mogut {count, plural, one {# asset} other {# assets}} a l'arxiu",
@@ -1505,7 +1494,6 @@
"remove_deleted_assets": "Suprimeix fitxers fora de línia", "remove_deleted_assets": "Suprimeix fitxers fora de línia",
"remove_from_album": "Treu de l'àlbum", "remove_from_album": "Treu de l'àlbum",
"remove_from_favorites": "Eliminar dels preferits", "remove_from_favorites": "Eliminar dels preferits",
"remove_from_lock_folder_action_prompt": "{count} eliminades de la carpeta protegida",
"remove_from_locked_folder": "Elimina de la carpeta bloquejada", "remove_from_locked_folder": "Elimina de la carpeta bloquejada",
"remove_from_locked_folder_confirmation": "Segur que vols moure aquestes fotos i vídeos fora de la carpeta bloquejada? Seran visibles a la teva biblioteca.", "remove_from_locked_folder_confirmation": "Segur que vols moure aquestes fotos i vídeos fora de la carpeta bloquejada? Seran visibles a la teva biblioteca.",
"remove_from_shared_link": "Eliminar de l'enllaç compartit", "remove_from_shared_link": "Eliminar de l'enllaç compartit",
@@ -1618,7 +1606,6 @@
"select_album_cover": "Seleccionar la portada de l'àlbum", "select_album_cover": "Seleccionar la portada de l'àlbum",
"select_all": "Selecciona-ho tot", "select_all": "Selecciona-ho tot",
"select_all_duplicates": "Seleccioneu tots els duplicats", "select_all_duplicates": "Seleccioneu tots els duplicats",
"select_all_in": "Selecciona tot en {group}",
"select_avatar_color": "Tria color de l'avatar", "select_avatar_color": "Tria color de l'avatar",
"select_face": "Selecciona cara", "select_face": "Selecciona cara",
"select_featured_photo": "Selecciona foto principal", "select_featured_photo": "Selecciona foto principal",
@@ -1848,7 +1835,6 @@
"total": "Total", "total": "Total",
"total_usage": "Ús total", "total_usage": "Ús total",
"trash": "Paperera", "trash": "Paperera",
"trash_action_prompt": "{count} mogudes a la brossa",
"trash_all": "Envia-ho tot a la paperera", "trash_all": "Envia-ho tot a la paperera",
"trash_count": "Paperera {count, number}", "trash_count": "Paperera {count, number}",
"trash_delete_asset": "Esborra/Elimina element", "trash_delete_asset": "Esborra/Elimina element",
@@ -1866,11 +1852,9 @@
"unable_to_change_pin_code": "No es pot canviar el codi PIN", "unable_to_change_pin_code": "No es pot canviar el codi PIN",
"unable_to_setup_pin_code": "No s'ha pogut configurar el codi PIN", "unable_to_setup_pin_code": "No s'ha pogut configurar el codi PIN",
"unarchive": "Desarxivar", "unarchive": "Desarxivar",
"unarchive_action_prompt": "{count} eliminades de l'arxiu",
"unarchived_count": "{count, plural, other {# elements desarxivats}}", "unarchived_count": "{count, plural, other {# elements desarxivats}}",
"undo": "Desfer", "undo": "Desfer",
"unfavorite": "Reverteix preferit", "unfavorite": "Reverteix preferit",
"unfavorite_action_prompt": "{count} eliminades de preferits",
"unhide_person": "Mostra persona", "unhide_person": "Mostra persona",
"unknown": "Desconegut", "unknown": "Desconegut",
"unknown_country": "País Desconegut", "unknown_country": "País Desconegut",
@@ -1886,7 +1870,6 @@
"unsaved_change": "Canvi no desat", "unsaved_change": "Canvi no desat",
"unselect_all": "Deselecciona-ho tot", "unselect_all": "Deselecciona-ho tot",
"unselect_all_duplicates": "Desmarqueu tots els duplicats", "unselect_all_duplicates": "Desmarqueu tots els duplicats",
"unselect_all_in": "Desseleccionar tots els elements de {group}",
"unstack": "Desapila", "unstack": "Desapila",
"unstacked_assets_count": "No apilat {count, plural, one {# recurs} other {# recursos}}", "unstacked_assets_count": "No apilat {count, plural, one {# recurs} other {# recursos}}",
"up_next": "Pròxim", "up_next": "Pròxim",

View File

@@ -14,7 +14,6 @@
"add_a_location": "Přidat polohu", "add_a_location": "Přidat polohu",
"add_a_name": "Přidat jméno", "add_a_name": "Přidat jméno",
"add_a_title": "Přidat název", "add_a_title": "Přidat název",
"add_birthday": "Přidat datum narození",
"add_endpoint": "Přidat koncový bod", "add_endpoint": "Přidat koncový bod",
"add_exclusion_pattern": "Přidat vzor vyloučení", "add_exclusion_pattern": "Přidat vzor vyloučení",
"add_import_path": "Přidat cestu importu", "add_import_path": "Přidat cestu importu",
@@ -45,14 +44,7 @@
"backup_database": "Vytvořit výpis databáze", "backup_database": "Vytvořit výpis databáze",
"backup_database_enable_description": "Povolit výpisy z databáze", "backup_database_enable_description": "Povolit výpisy z databáze",
"backup_keep_last_amount": "Počet předchozích výpisů, které se mají ponechat", "backup_keep_last_amount": "Počet předchozích výpisů, které se mají ponechat",
"backup_onboarding_1_description": "kopie v cloudu nebo na jiném fyzickém místě.", "backup_settings": "Nastavení výpisu databáze",
"backup_onboarding_2_description": "místní kopie na různých zařízeních. To zahrnuje hlavní soubory a jejich místní zálohu.",
"backup_onboarding_3_description": "kompletní kopie vašich dat, včetně původních souborů. To zahrnuje 1 kopii na jiném místě a 2 místní kopie.",
"backup_onboarding_description": "K ochraně vašich dat doporučujeme strategii zálohování <backblaze-link>3-2-1</backblaze-link>. Pro komplexní zálohování byste měli uchovávat kopie nahraných fotografií/videí i databáze Immich.",
"backup_onboarding_footer": "Další informace o zálohování Immiche naleznete v <link>dokumentaci</link>.",
"backup_onboarding_parts_title": "Záloha 3-2-1 zahrnuje:",
"backup_onboarding_title": "Zálohy",
"backup_settings": "Zálohování databáze",
"backup_settings_description": "Správa nastavení výpisu databáze.", "backup_settings_description": "Správa nastavení výpisu databáze.",
"cleared_jobs": "Hotové úlohy pro: {job}", "cleared_jobs": "Hotové úlohy pro: {job}",
"config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem", "config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem",
@@ -174,20 +166,6 @@
"metadata_settings_description": "Správa nastavení metadat", "metadata_settings_description": "Správa nastavení metadat",
"migration_job": "Migrace", "migration_job": "Migrace",
"migration_job_description": "Migrace miniatur snímků a obličejů do nejnovější struktury složek", "migration_job_description": "Migrace miniatur snímků a obličejů do nejnovější struktury složek",
"nightly_tasks_cluster_faces_setting_description": "Spustit rozpoznávání obličeje na nově nalezených obličejích",
"nightly_tasks_cluster_new_faces_setting": "Seskupit nové tváře",
"nightly_tasks_database_cleanup_setting": "Úlohy čištění databáze",
"nightly_tasks_database_cleanup_setting_description": "Vyčistit databázi od starých dat, jejichž platnost vypršela",
"nightly_tasks_generate_memories_setting": "Vytváření vzpomínek",
"nightly_tasks_generate_memories_setting_description": "Vytváření nových vzpomínek z položek",
"nightly_tasks_missing_thumbnails_setting": "Generovat chybějící miniatury",
"nightly_tasks_missing_thumbnails_setting_description": "Řadit položky bez miniatur do fronty pro generování miniatur",
"nightly_tasks_settings": "Noční úlohy",
"nightly_tasks_settings_description": "Správa nočních úkolů",
"nightly_tasks_start_time_setting": "Čas zahájení",
"nightly_tasks_start_time_setting_description": "Čas, kdy server spustí noční úlohy",
"nightly_tasks_sync_quota_usage_setting": "Synchronizace využití kvóty",
"nightly_tasks_sync_quota_usage_setting_description": "Aktualizovat kvótu úložiště uživatele na základě aktuálního využití",
"no_paths_added": "Nebyly přidány žádné cesty", "no_paths_added": "Nebyly přidány žádné cesty",
"no_pattern_added": "Nebyl přidán žádný vzor", "no_pattern_added": "Nebyl přidán žádný vzor",
"note_apply_storage_label_previous_assets": "Upozornění: Pro uplatnění Štítku úložiště na dříve nahrané položky spusťte", "note_apply_storage_label_previous_assets": "Upozornění: Pro uplatnění Štítku úložiště na dříve nahrané položky spusťte",
@@ -218,8 +196,6 @@
"oauth_mobile_redirect_uri": "Mobilní přesměrování URI", "oauth_mobile_redirect_uri": "Mobilní přesměrování URI",
"oauth_mobile_redirect_uri_override": "Přepsat mobilní přesměrování URI", "oauth_mobile_redirect_uri_override": "Přepsat mobilní přesměrování URI",
"oauth_mobile_redirect_uri_override_description": "Povolit, pokud poskytovatel OAuth nepovoluje mobilní URI, například ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Povolit, pokud poskytovatel OAuth nepovoluje mobilní URI, například ''{callback}''",
"oauth_role_claim": "Deklarace Role",
"oauth_role_claim_description": "Automaticky udělit přístup správce na základě přítomnosti této deklarace. Deklarace může mít hodnotu 'user' nebo 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Správa nastavení OAuth přihlášení", "oauth_settings_description": "Správa nastavení OAuth přihlášení",
"oauth_settings_more_details": "Další podrobnosti o této funkci naleznete v <link>dokumentaci</link>.", "oauth_settings_more_details": "Další podrobnosti o této funkci naleznete v <link>dokumentaci</link>.",
@@ -381,12 +357,10 @@
"admin_password": "Heslo správce", "admin_password": "Heslo správce",
"administration": "Administrace", "administration": "Administrace",
"advanced": "Pokročilé", "advanced": "Pokročilé",
"advanced_settings_beta_timeline_subtitle": "Vyzkoušejte nové prostředí aplikace",
"advanced_settings_beta_timeline_title": "Beta verze časové osy",
"advanced_settings_enable_alternate_media_filter_subtitle": "Tuto možnost použijte k filtrování médií během synchronizace na základě alternativních kritérií. Tuto možnost vyzkoušejte pouze v případě, že máte problémy s detekcí všech alb v aplikaci.", "advanced_settings_enable_alternate_media_filter_subtitle": "Tuto možnost použijte k filtrování médií během synchronizace na základě alternativních kritérií. Tuto možnost vyzkoušejte pouze v případě, že máte problémy s detekcí všech alb v aplikaci.",
"advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTÁLNÍ] Použít alternativní filtr pro synchronizaci alb zařízení", "advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTÁLNÍ] Použít alternativní filtr pro synchronizaci alb zařízení",
"advanced_settings_log_level_title": "Úroveň protokolování: {level}", "advanced_settings_log_level_title": "Úroveň protokolování: {level}",
"advanced_settings_prefer_remote_subtitle": "U některých zařízení je načítání miniatur z lokálních prostředků velmi pomalé. Aktivujte toto nastavení, aby se místo toho načítaly vzdálené obrázky.", "advanced_settings_prefer_remote_subtitle": "U některých zařízení je načítání miniatur z prostředků v zařízení velmi pomalé. Aktivujte toto nastavení, aby se místo toho načítaly vzdálené obrázky.",
"advanced_settings_prefer_remote_title": "Preferovat vzdálené obrázky", "advanced_settings_prefer_remote_title": "Preferovat vzdálené obrázky",
"advanced_settings_proxy_headers_subtitle": "Definice hlaviček proxy serveru, které by měl Immich odesílat s každým síťovým požadavkem", "advanced_settings_proxy_headers_subtitle": "Definice hlaviček proxy serveru, které by měl Immich odesílat s každým síťovým požadavkem",
"advanced_settings_proxy_headers_title": "Proxy hlavičky", "advanced_settings_proxy_headers_title": "Proxy hlavičky",
@@ -405,7 +379,6 @@
"album_cover_updated": "Obal alba aktualizován", "album_cover_updated": "Obal alba aktualizován",
"album_delete_confirmation": "Opravdu chcete album {album} odstranit?", "album_delete_confirmation": "Opravdu chcete album {album} odstranit?",
"album_delete_confirmation_description": "Pokud je toto album sdíleno, ostatní uživatelé k němu již nebudou mít přístup.", "album_delete_confirmation_description": "Pokud je toto album sdíleno, ostatní uživatelé k němu již nebudou mít přístup.",
"album_deleted": "Album smazáno",
"album_info_card_backup_album_excluded": "VYLOUČENO", "album_info_card_backup_album_excluded": "VYLOUČENO",
"album_info_card_backup_album_included": "ZAHRNUTO", "album_info_card_backup_album_included": "ZAHRNUTO",
"album_info_updated": "Informace o albu aktualizovány", "album_info_updated": "Informace o albu aktualizovány",
@@ -415,7 +388,6 @@
"album_options": "Možnosti alba", "album_options": "Možnosti alba",
"album_remove_user": "Odebrat uživatele?", "album_remove_user": "Odebrat uživatele?",
"album_remove_user_confirmation": "Opravdu chcete odebrat uživatele {user}?", "album_remove_user_confirmation": "Opravdu chcete odebrat uživatele {user}?",
"album_search_not_found": "Nebyla nalezena žádná alba odpovídající vašemu hledání",
"album_share_no_users": "Zřejmě jste toto album sdíleli se všemi uživateli, nebo nemáte žádného uživatele, se kterým byste ho mohli sdílet.", "album_share_no_users": "Zřejmě jste toto album sdíleli se všemi uživateli, nebo nemáte žádného uživatele, se kterým byste ho mohli sdílet.",
"album_updated": "Album aktualizováno", "album_updated": "Album aktualizováno",
"album_updated_setting_description": "Dostávat e-mailová oznámení o nových položkách sdíleného alba", "album_updated_setting_description": "Dostávat e-mailová oznámení o nových položkách sdíleného alba",
@@ -435,7 +407,6 @@
"albums_default_sort_order": "Výchozí řazení alb", "albums_default_sort_order": "Výchozí řazení alb",
"albums_default_sort_order_description": "Výchozí řazení položek při vytváření nových alb.", "albums_default_sort_order_description": "Výchozí řazení položek při vytváření nových alb.",
"albums_feature_description": "Sbírky položek, které lze sdílet s ostatními uživateli.", "albums_feature_description": "Sbírky položek, které lze sdílet s ostatními uživateli.",
"albums_on_device_count": "Alba v zařízení ({count})",
"all": "Vše", "all": "Vše",
"all_albums": "Všechna alba", "all_albums": "Všechna alba",
"all_people": "Všichni lidé", "all_people": "Všichni lidé",
@@ -456,8 +427,7 @@
"app_settings": "Aplikace", "app_settings": "Aplikace",
"appears_in": "Vyskytuje se v", "appears_in": "Vyskytuje se v",
"archive": "Archiv", "archive": "Archiv",
"archive_action_prompt": "{count} přidaných do archivu", "archive_or_unarchive_photo": "Archivovat nebo odarchivovat fotku",
"archive_or_unarchive_photo": "Přidat nebo odebrat fotku z archivu",
"archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média", "archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média",
"archive_page_title": "Archiv ({count})", "archive_page_title": "Archiv ({count})",
"archive_size": "Velikost archivu", "archive_size": "Velikost archivu",
@@ -494,13 +464,14 @@
"assets": "Položky", "assets": "Položky",
"assets_added_count": "{count, plural, one {Přidána # položka} few {Přidány # položky} other {Přidáno # položek}}", "assets_added_count": "{count, plural, one {Přidána # položka} few {Přidány # položky} other {Přidáno # položek}}",
"assets_added_to_album_count": "Do alba {count, plural, one {byla přidána # položka} few {byly přidány # položky} other {bylo přidáno # položek}}", "assets_added_to_album_count": "Do alba {count, plural, one {byla přidána # položka} few {byly přidány # položky} other {bylo přidáno # položek}}",
"assets_added_to_name_count": "{count, plural, one {Přidána # položka} few {Přidány # položky} other {Přidáno # položek}} do {hasName, select, true {alba <b>{name}</b>} other {nového alba}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Položku} other {Položky}} nelze přidat do alba", "assets_cannot_be_added_to_album_count": "{count, plural, one {Položku} other {Položky}} nelze přidat do alba",
"assets_count": "{count, plural, one {# položka} few {# položky} other {# položek}}", "assets_count": "{count, plural, one {# položka} few {# položky} other {# položek}}",
"assets_deleted_permanently": "{count} položek trvale odstraněno", "assets_deleted_permanently": "{count} položek trvale odstraněno",
"assets_deleted_permanently_from_server": "{count} položek trvale odstraněno z Immich serveru", "assets_deleted_permanently_from_server": "{count} položek trvale odstraněno z Immich serveru",
"assets_downloaded_failed": "{count, plural, one {Stažen # soubor - {error} souborů selhalo} few {Staženy # soubory - {error} souborů selhalo} other {Staženo # souborů - {error} souborů selhalo}}", "assets_downloaded_failed": "{count, plural, one {Stažen # soubor - {error} souborů selhalo} few {Staženy # soubory - {error} souborů selhalo} other {Staženo # souborů - {error} souborů selhalo}}",
"assets_downloaded_successfully": "{count, plural, one {Úspěšně stažen # soubor} few {Úspěšně staženy # soubory} other {Úspěšně staženo # souborů}}", "assets_downloaded_successfully": "{count, plural, one {Úspěšně stažen # soubor} few {Úspěšně staženy # soubory} other {Úspěšně staženo # souborů}}",
"assets_moved_to_trash_count": "{count, plural, one {# položka přesunuta} few {# položky přesunuty} other {# položek přesunuto}} do koše", "assets_moved_to_trash_count": "Do koše {count, plural, one {přesunuta # položka} few {přesunuty # položky} other {přesunuto # položek}}",
"assets_permanently_deleted_count": "Trvale {count, plural, one {smazána # položka} few {smazány # položky} other {smazáno # položek}}", "assets_permanently_deleted_count": "Trvale {count, plural, one {smazána # položka} few {smazány # položky} other {smazáno # položek}}",
"assets_removed_count": "{count, plural, one {Odstraněna # položka} few {Odstraněny # položky} other {Odstraněno # položek}}", "assets_removed_count": "{count, plural, one {Odstraněna # položka} few {Odstraněny # položky} other {Odstraněno # položek}}",
"assets_removed_permanently_from_device": "{count} položek trvale odstraněno z vašeho zařízení", "assets_removed_permanently_from_device": "{count} položek trvale odstraněno z vašeho zařízení",
@@ -519,7 +490,6 @@
"back_close_deselect": "Zpět, zavřít nebo zrušit výběr", "back_close_deselect": "Zpět, zavřít nebo zrušit výběr",
"background_location_permission": "Povolení polohy na pozadí", "background_location_permission": "Povolení polohy na pozadí",
"background_location_permission_content": "Aby bylo možné přepínat sítě při běhu na pozadí, musí mít Immich *vždy* přístup k přesné poloze, aby mohl zjistit název Wi-Fi sítě", "background_location_permission_content": "Aby bylo možné přepínat sítě při běhu na pozadí, musí mít Immich *vždy* přístup k přesné poloze, aby mohl zjistit název Wi-Fi sítě",
"backup": "Záloha",
"backup_album_selection_page_albums_device": "Alba v zařízení ({count})", "backup_album_selection_page_albums_device": "Alba v zařízení ({count})",
"backup_album_selection_page_albums_tap": "Klepnutím na položku ji zahrnete, opětovným klepnutím ji vyloučíte", "backup_album_selection_page_albums_tap": "Klepnutím na položku ji zahrnete, opětovným klepnutím ji vyloučíte",
"backup_album_selection_page_assets_scatter": "Položky mohou být roztroušeny ve více albech. To umožňuje zahrnout nebo vyloučit alba během procesu zálohování.", "backup_album_selection_page_assets_scatter": "Položky mohou být roztroušeny ve více albech. To umožňuje zahrnout nebo vyloučit alba během procesu zálohování.",
@@ -583,8 +553,6 @@
"backup_options_page_title": "Nastavení záloh", "backup_options_page_title": "Nastavení záloh",
"backup_setting_subtitle": "Správa nastavení zálohování na pozadí a na popředí", "backup_setting_subtitle": "Správa nastavení zálohování na pozadí a na popředí",
"backward": "Pozpátku", "backward": "Pozpátku",
"beta_sync": "Stav synchronizace (beta)",
"beta_sync_subtitle": "Správa nového systému synchronizace",
"biometric_auth_enabled": "Biometrické ověřování je povoleno", "biometric_auth_enabled": "Biometrické ověřování je povoleno",
"biometric_locked_out": "Jste vyloučeni z biometrického ověřování", "biometric_locked_out": "Jste vyloučeni z biometrického ověřování",
"biometric_no_options": "Biometrické možnosti nejsou k dispozici", "biometric_no_options": "Biometrické možnosti nejsou k dispozici",
@@ -602,7 +570,7 @@
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť", "cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.", "cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
"cache_settings_duplicated_assets_clear_button": "VYMAZAT", "cache_settings_duplicated_assets_clear_button": "VYMAZAT",
"cache_settings_duplicated_assets_subtitle": "Fotografie a videa, které aplikace ignoruje", "cache_settings_duplicated_assets_subtitle": "Fotografie a videa, které aplikace zařadila na černou listinu",
"cache_settings_duplicated_assets_title": "Duplicitní položky ({count})", "cache_settings_duplicated_assets_title": "Duplicitní položky ({count})",
"cache_settings_statistics_album": "Knihovna náhledů", "cache_settings_statistics_album": "Knihovna náhledů",
"cache_settings_statistics_full": "Kompletní fotografie", "cache_settings_statistics_full": "Kompletní fotografie",
@@ -619,7 +587,6 @@
"cancel": "Zrušit", "cancel": "Zrušit",
"cancel_search": "Zrušit vyhledávání", "cancel_search": "Zrušit vyhledávání",
"canceled": "Zrušeno", "canceled": "Zrušeno",
"canceling": "Rušení",
"cannot_merge_people": "Nelze sloučit osoby", "cannot_merge_people": "Nelze sloučit osoby",
"cannot_undo_this_action": "Tuto akci nelze vrátit zpět!", "cannot_undo_this_action": "Tuto akci nelze vrátit zpět!",
"cannot_update_the_description": "Nelze aktualizovat popis", "cannot_update_the_description": "Nelze aktualizovat popis",
@@ -733,11 +700,10 @@
"current_server_address": "Aktuální adresa serveru", "current_server_address": "Aktuální adresa serveru",
"custom_locale": "Vlastní lokalizace", "custom_locale": "Vlastní lokalizace",
"custom_locale_description": "Formátovat datumy a čísla podle jazyka a oblasti", "custom_locale_description": "Formátovat datumy a čísla podle jazyka a oblasti",
"custom_url": "Vlastní URL",
"daily_title_text_date": "EEEE, d. MMMM", "daily_title_text_date": "EEEE, d. MMMM",
"daily_title_text_date_year": "EEEE, d. MMMM y", "daily_title_text_date_year": "EEEE, d. MMMM y",
"dark": "Tmavý", "dark": "Tmavý",
"dark_theme": "Přepnout tmavý motiv", "darkTheme": "Přepnout tmavý motiv",
"date_after": "Datum po", "date_after": "Datum po",
"date_and_time": "Datum a čas", "date_and_time": "Datum a čas",
"date_before": "Datum před", "date_before": "Datum před",
@@ -753,8 +719,6 @@
"default_locale": "Výchozí jazyk", "default_locale": "Výchozí jazyk",
"default_locale_description": "Formátovat datumy a čísla podle místního prostředí prohlížeče", "default_locale_description": "Formátovat datumy a čísla podle místního prostředí prohlížeče",
"delete": "Smazat", "delete": "Smazat",
"delete_action_confirmation_message": "Opravdu chcete odstranit tuto položku? Tato akce přesune položku do serverového koše a zeptá se vás, zda ji chcete odstranit lokálně",
"delete_action_prompt": "{count} smazáno",
"delete_album": "Smazat album", "delete_album": "Smazat album",
"delete_api_key_prompt": "Opravdu chcete tento API klíč odstranit?", "delete_api_key_prompt": "Opravdu chcete tento API klíč odstranit?",
"delete_dialog_alert": "Tyto položky budou trvale smazány z aplikace Immich i z vašeho zařízení", "delete_dialog_alert": "Tyto položky budou trvale smazány z aplikace Immich i z vašeho zařízení",
@@ -768,12 +732,9 @@
"delete_key": "Smazat klíč", "delete_key": "Smazat klíč",
"delete_library": "Smazat knihovnu", "delete_library": "Smazat knihovnu",
"delete_link": "Smazat odkaz", "delete_link": "Smazat odkaz",
"delete_local_action_prompt": "{count} smazáno lokálně",
"delete_local_dialog_ok_backed_up_only": "Smazat pouze zálohované", "delete_local_dialog_ok_backed_up_only": "Smazat pouze zálohované",
"delete_local_dialog_ok_force": "Přesto smazat", "delete_local_dialog_ok_force": "Přesto smazat",
"delete_others": "Smazat ostatní", "delete_others": "Odstranit ostatní",
"delete_permanently": "Trvale smazat",
"delete_permanently_action_prompt": "{count} trvale smazáno",
"delete_shared_link": "Smazat sdílený odkaz", "delete_shared_link": "Smazat sdílený odkaz",
"delete_shared_link_dialog_title": "Odstranit sdílený odkaz", "delete_shared_link_dialog_title": "Odstranit sdílený odkaz",
"delete_tag": "Smazat značku", "delete_tag": "Smazat značku",
@@ -784,7 +745,6 @@
"description": "Popis", "description": "Popis",
"description_input_hint_text": "Přidat popis...", "description_input_hint_text": "Přidat popis...",
"description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu", "description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu",
"deselect_all": "Zrušit výběr všech",
"details": "Podrobnosti", "details": "Podrobnosti",
"direction": "Směr", "direction": "Směr",
"disabled": "Zakázáno", "disabled": "Zakázáno",
@@ -802,7 +762,6 @@
"documentation": "Dokumentace", "documentation": "Dokumentace",
"done": "Hotovo", "done": "Hotovo",
"download": "Stáhnout", "download": "Stáhnout",
"download_action_prompt": "Stahování {count} položek",
"download_canceled": "Stahování zrušeno", "download_canceled": "Stahování zrušeno",
"download_complete": "Stahování kompletní", "download_complete": "Stahování kompletní",
"download_enqueue": "Stahování ve frontě", "download_enqueue": "Stahování ve frontě",
@@ -829,7 +788,6 @@
"edit": "Upravit", "edit": "Upravit",
"edit_album": "Upravit album", "edit_album": "Upravit album",
"edit_avatar": "Upravit avatar", "edit_avatar": "Upravit avatar",
"edit_birthday": "Upravit datum narození",
"edit_date": "Upravit datum", "edit_date": "Upravit datum",
"edit_date_and_time": "Upravit datum a čas", "edit_date_and_time": "Upravit datum a čas",
"edit_description": "Upravit popis", "edit_description": "Upravit popis",
@@ -841,7 +799,6 @@
"edit_key": "Upravit klíč", "edit_key": "Upravit klíč",
"edit_link": "Upravit odkaz", "edit_link": "Upravit odkaz",
"edit_location": "Upravit polohu", "edit_location": "Upravit polohu",
"edit_location_action_prompt": "{count} upravených poloh",
"edit_location_dialog_title": "Poloha", "edit_location_dialog_title": "Poloha",
"edit_name": "Upravit jméno", "edit_name": "Upravit jméno",
"edit_people": "Upravit lidi", "edit_people": "Upravit lidi",
@@ -860,7 +817,6 @@
"empty_trash": "Vyprázdnit koš", "empty_trash": "Vyprázdnit koš",
"empty_trash_confirmation": "Opravdu chcete vysypat koš? Tím se z Immiche trvale odstraní všechny položky v koši.\nTuto akci nelze vrátit zpět!", "empty_trash_confirmation": "Opravdu chcete vysypat koš? Tím se z Immiche trvale odstraní všechny položky v koši.\nTuto akci nelze vrátit zpět!",
"enable": "Povolit", "enable": "Povolit",
"enable_backup": "Povolit zálohování",
"enable_biometric_auth_description": "Zadejte váš PIN kód pro povolení biometrického ověřování", "enable_biometric_auth_description": "Zadejte váš PIN kód pro povolení biometrického ověřování",
"enabled": "Povoleno", "enabled": "Povoleno",
"end_date": "Konečné datum", "end_date": "Konečné datum",
@@ -905,7 +861,7 @@
"failed_to_load_people": "Chyba načítání osob", "failed_to_load_people": "Chyba načítání osob",
"failed_to_remove_product_key": "Nepodařilo se odebrat klíč produktu", "failed_to_remove_product_key": "Nepodařilo se odebrat klíč produktu",
"failed_to_stack_assets": "Nepodařilo se seskupit položky", "failed_to_stack_assets": "Nepodařilo se seskupit položky",
"failed_to_unstack_assets": "Nepodařilo se zrušit seskupení položek", "failed_to_unstack_assets": "Nepodařilo se rozložit položky",
"failed_to_update_notification_status": "Nepodařilo se aktualizovat stav oznámení", "failed_to_update_notification_status": "Nepodařilo se aktualizovat stav oznámení",
"import_path_already_exists": "Tato cesta importu již existuje.", "import_path_already_exists": "Tato cesta importu již existuje.",
"incorrect_email_or_password": "Nesprávný e-mail nebo heslo", "incorrect_email_or_password": "Nesprávný e-mail nebo heslo",
@@ -920,7 +876,7 @@
"unable_to_add_partners": "Nelze přidat partnery", "unable_to_add_partners": "Nelze přidat partnery",
"unable_to_add_remove_archive": "Nelze {archived, select, true {odstranit položku z} other {přidat položku do}} archivu", "unable_to_add_remove_archive": "Nelze {archived, select, true {odstranit položku z} other {přidat položku do}} archivu",
"unable_to_add_remove_favorites": "Nelze {favorite, select, true {oblíbit položku} other {zrušit oblíbení položky}}", "unable_to_add_remove_favorites": "Nelze {favorite, select, true {oblíbit položku} other {zrušit oblíbení položky}}",
"unable_to_archive_unarchive": "Nelze {archived, select, true {archivovat} other {odebrat z archivu}}", "unable_to_archive_unarchive": "Nelze {archived, select, true {archivovat} other {odarchivovat}}",
"unable_to_change_album_user_role": "Nelze změnit roli uživatele alba", "unable_to_change_album_user_role": "Nelze změnit roli uživatele alba",
"unable_to_change_date": "Nelze změnit datum", "unable_to_change_date": "Nelze změnit datum",
"unable_to_change_description": "Nelze změnit popis", "unable_to_change_description": "Nelze změnit popis",
@@ -997,7 +953,6 @@
}, },
"exif": "Exif", "exif": "Exif",
"exif_bottom_sheet_description": "Přidat popis...", "exif_bottom_sheet_description": "Přidat popis...",
"exif_bottom_sheet_description_error": "Chyba při aktualizaci popisu",
"exif_bottom_sheet_details": "PODROBNOSTI", "exif_bottom_sheet_details": "PODROBNOSTI",
"exif_bottom_sheet_location": "POLOHA", "exif_bottom_sheet_location": "POLOHA",
"exif_bottom_sheet_people": "LIDÉ", "exif_bottom_sheet_people": "LIDÉ",
@@ -1018,8 +973,6 @@
"explorer": "Průzkumník", "explorer": "Průzkumník",
"export": "Export", "export": "Export",
"export_as_json": "Exportovat jako JSON", "export_as_json": "Exportovat jako JSON",
"export_database": "Exportovat databázi",
"export_database_description": "Exportovat databázi SQLite",
"extension": "Přípona", "extension": "Přípona",
"external": "Externí", "external": "Externí",
"external_libraries": "Externí knihovny", "external_libraries": "Externí knihovny",
@@ -1031,7 +984,6 @@
"failed_to_load_assets": "Nepodařilo se načíst položky", "failed_to_load_assets": "Nepodařilo se načíst položky",
"failed_to_load_folder": "Nepodařilo se načíst složku", "failed_to_load_folder": "Nepodařilo se načíst složku",
"favorite": "Oblíbit", "favorite": "Oblíbit",
"favorite_action_prompt": "{count} přidáno do Oblíbených",
"favorite_or_unfavorite_photo": "Oblíbit nebo zrušit oblíbení fotky", "favorite_or_unfavorite_photo": "Oblíbit nebo zrušit oblíbení fotky",
"favorites": "Oblíbené", "favorites": "Oblíbené",
"favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média", "favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média",
@@ -1071,9 +1023,6 @@
"haptic_feedback_switch": "Povolit dotykovou zpětnou vazbu", "haptic_feedback_switch": "Povolit dotykovou zpětnou vazbu",
"haptic_feedback_title": "Dotyková zpětná vazba", "haptic_feedback_title": "Dotyková zpětná vazba",
"has_quota": "Má kvótu", "has_quota": "Má kvótu",
"hash_asset": "Hash položky",
"hashed_assets": "Hashované položky",
"hashing": "Hashování",
"header_settings_add_header_tip": "Přidat hlavičku", "header_settings_add_header_tip": "Přidat hlavičku",
"header_settings_field_validator_msg": "Hodnota nemůže být prázdná", "header_settings_field_validator_msg": "Hodnota nemůže být prázdná",
"header_settings_header_name_input": "Název hlavičky", "header_settings_header_name_input": "Název hlavičky",
@@ -1106,7 +1055,6 @@
"host": "Hostitel", "host": "Hostitel",
"hour": "Hodina", "hour": "Hodina",
"id": "ID", "id": "ID",
"idle": "Nečinnost",
"ignore_icloud_photos": "Ignorovat fotografie na iCloudu", "ignore_icloud_photos": "Ignorovat fotografie na iCloudu",
"ignore_icloud_photos_description": "Fotografie uložené na iCloudu se nebudou nahrávat na Immich server", "ignore_icloud_photos_description": "Fotografie uložené na iCloudu se nebudou nahrávat na Immich server",
"image": "Obrázek", "image": "Obrázek",
@@ -1164,7 +1112,6 @@
"language_no_results_title": "Nebyly nalezeny žádné jazyky", "language_no_results_title": "Nebyly nalezeny žádné jazyky",
"language_search_hint": "Vyhledat jazyk...", "language_search_hint": "Vyhledat jazyk...",
"language_setting_description": "Vyberte upřednostňovaný jazyk", "language_setting_description": "Vyberte upřednostňovaný jazyk",
"large_files": "Velké soubory",
"last_seen": "Naposledy viděno", "last_seen": "Naposledy viděno",
"latest_version": "Nejnovější verze", "latest_version": "Nejnovější verze",
"latitude": "Zeměpisná šířka", "latitude": "Zeměpisná šířka",
@@ -1180,18 +1127,16 @@
"library_page_sort_created": "Naposledy vytvořené", "library_page_sort_created": "Naposledy vytvořené",
"library_page_sort_last_modified": "Naposledy upraveno", "library_page_sort_last_modified": "Naposledy upraveno",
"library_page_sort_title": "Podle názvu alba", "library_page_sort_title": "Podle názvu alba",
"licenses": "Licence",
"light": "Světlý", "light": "Světlý",
"like_deleted": "Lajk smazán", "like_deleted": "Lajk smazán",
"link_motion_video": "Připojit pohyblivé video", "link_motion_video": "Připojit pohyblivé video",
"link_options": "Možnosti odkazu",
"link_to_oauth": "Propojit s OAuth", "link_to_oauth": "Propojit s OAuth",
"linked_oauth_account": "Propojený OAuth účet", "linked_oauth_account": "Propojený OAuth účet",
"list": "Seznam", "list": "Seznam",
"loading": "Načítání", "loading": "Načítání",
"loading_search_results_failed": "Načítání výsledků vyhledávání se nezdařilo", "loading_search_results_failed": "Načítání výsledků vyhledávání se nezdařilo",
"local": "Místní",
"local_asset_cast_failed": "Nelze odeslat položku, která není nahraná na serveru", "local_asset_cast_failed": "Nelze odeslat položku, která není nahraná na serveru",
"local_assets": "Místní položky",
"local_network": "Místní síť", "local_network": "Místní síť",
"local_network_sheet_info": "Aplikace se při použití zadané sítě Wi-Fi připojí k serveru prostřednictvím tohoto URL", "local_network_sheet_info": "Aplikace se při použití zadané sítě Wi-Fi připojí k serveru prostřednictvím tohoto URL",
"location_permission": "Oprávnění polohy", "location_permission": "Oprávnění polohy",
@@ -1248,7 +1193,8 @@
"manage_your_devices": "Správa přihlášených zařízení", "manage_your_devices": "Správa přihlášených zařízení",
"manage_your_oauth_connection": "Správa OAuth propojení", "manage_your_oauth_connection": "Správa OAuth propojení",
"map": "Mapa", "map": "Mapa",
"map_assets_in_bounds": "{count, plural, one {# fotka} few{# fotky} other {# fotek}}", "map_assets_in_bound": "{count} fotka",
"map_assets_in_bounds": "{count} fotek",
"map_cannot_get_user_location": "Nelze zjistit polohu uživatele", "map_cannot_get_user_location": "Nelze zjistit polohu uživatele",
"map_location_dialog_yes": "Ano", "map_location_dialog_yes": "Ano",
"map_location_picker_page_use_location": "Použít tuto polohu", "map_location_picker_page_use_location": "Použít tuto polohu",
@@ -1300,11 +1246,10 @@
"more": "Více", "more": "Více",
"move": "Přesunout", "move": "Přesunout",
"move_off_locked_folder": "Přesunout z uzamčené složky", "move_off_locked_folder": "Přesunout z uzamčené složky",
"move_to_lock_folder_action_prompt": "{count} přidaných do uzamčené složky",
"move_to_locked_folder": "Přesunout do uzamčené složky", "move_to_locked_folder": "Přesunout do uzamčené složky",
"move_to_locked_folder_confirmation": "Tyto fotky a videa budou odstraněny ze všech alb a bude je možné zobrazit pouze v uzamčené složce", "move_to_locked_folder_confirmation": "Tyto fotky a videa budou odstraněny ze všech alb a bude je možné zobrazit pouze v uzamčené složce",
"moved_to_archive": "{count, plural, one {# položka přesunuta} few {# položky přesunuty} other {# položek přesunuto}} do archivu", "moved_to_archive": "{count, plural, one {Přesunuta # položka} few {Přesunuty # položky} other {Přesunuto # položek}} do archivu",
"moved_to_library": "{count, plural, one {# položka přesunuta} few {# položky přesunuty} other {# položek přesunuto}} do knihovny", "moved_to_library": "{count, plural, one {Přesunuta # položka} few {Přesunuty # položky} other {Přesunuto # položek}} do knihovny",
"moved_to_trash": "Přesunuto do koše", "moved_to_trash": "Přesunuto do koše",
"multiselect_grid_edit_date_time_err_read_only": "Nelze upravit datum položek pouze pro čtení, přeskakuji", "multiselect_grid_edit_date_time_err_read_only": "Nelze upravit datum položek pouze pro čtení, přeskakuji",
"multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji", "multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji",
@@ -1347,7 +1292,6 @@
"no_results": "Žádné výsledky", "no_results": "Žádné výsledky",
"no_results_description": "Zkuste použít synonymum nebo obecnější klíčové slovo", "no_results_description": "Zkuste použít synonymum nebo obecnější klíčové slovo",
"no_shared_albums_message": "Vytvořte si album a sdílejte fotografie a videa s lidmi ve své síti", "no_shared_albums_message": "Vytvořte si album a sdílejte fotografie a videa s lidmi ve své síti",
"no_uploads_in_progress": "Neprobíhá žádné nahrávání",
"not_in_any_album": "Bez alba", "not_in_any_album": "Bez alba",
"not_selected": "Není vybráno", "not_selected": "Není vybráno",
"note_apply_storage_label_to_previously_uploaded assets": "Upozornění: Chcete-li použít štítek úložiště na dříve nahrané položky, spusťte příkaz", "note_apply_storage_label_to_previously_uploaded assets": "Upozornění: Chcete-li použít štítek úložiště na dříve nahrané položky, spusťte příkaz",
@@ -1385,7 +1329,6 @@
"original": "originál", "original": "originál",
"other": "Ostatní", "other": "Ostatní",
"other_devices": "Ostatní zařízení", "other_devices": "Ostatní zařízení",
"other_entities": "Ostatní entity",
"other_variables": "Další proměnné", "other_variables": "Další proměnné",
"owned": "Vlastní", "owned": "Vlastní",
"owner": "Vlastník", "owner": "Vlastník",
@@ -1517,7 +1460,6 @@
"purchase_server_description_2": "Stav podporovatele", "purchase_server_description_2": "Stav podporovatele",
"purchase_server_title": "Server", "purchase_server_title": "Server",
"purchase_settings_server_activated": "Produktový klíč serveru spravuje správce", "purchase_settings_server_activated": "Produktový klíč serveru spravuje správce",
"queue_status": "Ve frontě {count}/{total}",
"rating": "Hodnocení hvězdičkami", "rating": "Hodnocení hvězdičkami",
"rating_clear": "Vyčistit hodnocení", "rating_clear": "Vyčistit hodnocení",
"rating_count": "{count, plural, one {# hvězdička} few {# hvězdičky} other {# hvězdček}}", "rating_count": "{count, plural, one {# hvězdička} few {# hvězdičky} other {# hvězdček}}",
@@ -1546,8 +1488,6 @@
"refreshing_faces": "Obnovování obličejů", "refreshing_faces": "Obnovování obličejů",
"refreshing_metadata": "Obnovování metadat", "refreshing_metadata": "Obnovování metadat",
"regenerating_thumbnails": "Regenerace miniatur", "regenerating_thumbnails": "Regenerace miniatur",
"remote": "Vzdálený",
"remote_assets": "Vzdálené položky",
"remove": "Odstranit", "remove": "Odstranit",
"remove_assets_album_confirmation": "Opravdu chcete z alba odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?", "remove_assets_album_confirmation": "Opravdu chcete z alba odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
"remove_assets_shared_link_confirmation": "Opravdu chcete ze sdíleného odkazu odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?", "remove_assets_shared_link_confirmation": "Opravdu chcete ze sdíleného odkazu odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
@@ -1555,9 +1495,7 @@
"remove_custom_date_range": "Odstranit vlastní rozsah datumů", "remove_custom_date_range": "Odstranit vlastní rozsah datumů",
"remove_deleted_assets": "Odstranit offline soubory", "remove_deleted_assets": "Odstranit offline soubory",
"remove_from_album": "Odstranit z alba", "remove_from_album": "Odstranit z alba",
"remove_from_album_action_prompt": "{count} odstraněných z alba",
"remove_from_favorites": "Odstranit z oblíbených", "remove_from_favorites": "Odstranit z oblíbených",
"remove_from_lock_folder_action_prompt": "{count} odebraných z uzamčené složky",
"remove_from_locked_folder": "Odstranit z uzamčené složky", "remove_from_locked_folder": "Odstranit z uzamčené složky",
"remove_from_locked_folder_confirmation": "Opravdu chcete tyto fotky a videa přesunout z uzamčené složky? Budou viditelné ve vaší knihovně.", "remove_from_locked_folder_confirmation": "Opravdu chcete tyto fotky a videa přesunout z uzamčené složky? Budou viditelné ve vaší knihovně.",
"remove_from_shared_link": "Odstranit ze sdíleného odkazu", "remove_from_shared_link": "Odstranit ze sdíleného odkazu",
@@ -1585,25 +1523,19 @@
"reset_password": "Obnovit heslo", "reset_password": "Obnovit heslo",
"reset_people_visibility": "Obnovit viditelnost lidí", "reset_people_visibility": "Obnovit viditelnost lidí",
"reset_pin_code": "Resetovat PIN kód", "reset_pin_code": "Resetovat PIN kód",
"reset_sqlite": "Obnovit SQLite databázi",
"reset_sqlite_confirmation": "Jste si jisti, že chcete obnovit SQLite databázi? Pro opětovnou synchronizaci dat se budete muset odhlásit a znovu přihlásit",
"reset_sqlite_success": "Obnovení SQLite databáze proběhlo úspěšně",
"reset_to_default": "Obnovit výchozí nastavení", "reset_to_default": "Obnovit výchozí nastavení",
"resolve_duplicates": "Vyřešit duplicity", "resolve_duplicates": "Vyřešit duplicity",
"resolved_all_duplicates": "Vyřešeny všechny duplicity", "resolved_all_duplicates": "Vyřešeny všechny duplicity",
"restore": "Obnovit", "restore": "Obnovit",
"restore_all": "Obnovit vše", "restore_all": "Obnovit vše",
"restore_trash_action_prompt": "{count} obnoveno z koše",
"restore_user": "Obnovit uživatele", "restore_user": "Obnovit uživatele",
"restored_asset": "Položka obnovena", "restored_asset": "Položka obnovena",
"resume": "Pokračovat", "resume": "Pokračovat",
"retry_upload": "Opakování nahrávání", "retry_upload": "Opakování nahrávání",
"review_duplicates": "Kontrola duplicit", "review_duplicates": "Kontrola duplicit",
"review_large_files": "Kontrola velkých souborů",
"role": "Role", "role": "Role",
"role_editor": "Editor", "role_editor": "Editor",
"role_viewer": "Divák", "role_viewer": "Divák",
"running": "Probíhá",
"save": "Uložit", "save": "Uložit",
"save_to_gallery": "Uložit do galerie", "save_to_gallery": "Uložit do galerie",
"saved_api_key": "API klíč uložen", "saved_api_key": "API klíč uložen",
@@ -1735,7 +1667,6 @@
"settings_saved": "Nastavení uloženo", "settings_saved": "Nastavení uloženo",
"setup_pin_code": "Nastavení PIN kódu", "setup_pin_code": "Nastavení PIN kódu",
"share": "Sdílet", "share": "Sdílet",
"share_action_prompt": "Sdíleno {count} položek",
"share_add_photos": "Přidat fotografie", "share_add_photos": "Přidat fotografie",
"share_assets_selected": "{count} vybráno", "share_assets_selected": "{count} vybráno",
"share_dialog_preparing": "Připravuji...", "share_dialog_preparing": "Připravuji...",
@@ -1757,7 +1688,6 @@
"shared_link_clipboard_copied_massage": "Zkopírováno do schránky", "shared_link_clipboard_copied_massage": "Zkopírováno do schránky",
"shared_link_clipboard_text": "Odkaz: {link}\nHeslo: {password}", "shared_link_clipboard_text": "Odkaz: {link}\nHeslo: {password}",
"shared_link_create_error": "Chyba při vytváření sdíleného odkazu", "shared_link_create_error": "Chyba při vytváření sdíleného odkazu",
"shared_link_custom_url_description": "Přístup k tomuto sdílenému odkazu pomocí vlastního URL",
"shared_link_edit_description_hint": "Zadejte popis sdílení", "shared_link_edit_description_hint": "Zadejte popis sdílení",
"shared_link_edit_expire_after_option_day": "1 den", "shared_link_edit_expire_after_option_day": "1 den",
"shared_link_edit_expire_after_option_days": "{count} dní", "shared_link_edit_expire_after_option_days": "{count} dní",
@@ -1783,7 +1713,6 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Spravovat sdílené odkazy", "shared_link_manage_links": "Spravovat sdílené odkazy",
"shared_link_options": "Možnosti sdíleného odkazu", "shared_link_options": "Možnosti sdíleného odkazu",
"shared_link_password_description": "Vyžadovat heslo pro přístup k tomuto sdílenému odkazu",
"shared_links": "Sdílené odkazy", "shared_links": "Sdílené odkazy",
"shared_links_description": "Sdílet fotky a videa pomocí odkazu", "shared_links_description": "Sdílet fotky a videa pomocí odkazu",
"shared_photos_and_videos_count": "{assetCount, plural, one {# sdílená fotografie a video.} few {# sdílené fotografie a videa.} other {# sdílených fotografií a videí.}}", "shared_photos_and_videos_count": "{assetCount, plural, one {# sdílená fotografie a video.} few {# sdílené fotografie a videa.} other {# sdílených fotografií a videí.}}",
@@ -1839,7 +1768,6 @@
"sort_title": "Název alba", "sort_title": "Název alba",
"source": "Zdroj", "source": "Zdroj",
"stack": "Seskupit", "stack": "Seskupit",
"stack_action_prompt": "{count} seskupeno",
"stack_duplicates": "Seskupit duplicity", "stack_duplicates": "Seskupit duplicity",
"stack_select_one_photo": "Vyberte jednu hlavní fotografii pro seskupení", "stack_select_one_photo": "Vyberte jednu hlavní fotografii pro seskupení",
"stack_selected_photos": "Seskupení vybraných fotografií", "stack_selected_photos": "Seskupení vybraných fotografií",
@@ -1859,7 +1787,6 @@
"storage_quota": "Kvóta úložiště", "storage_quota": "Kvóta úložiště",
"storage_usage": "Využito {used} z {available}", "storage_usage": "Využito {used} z {available}",
"submit": "Odeslat", "submit": "Odeslat",
"success": "Úspěch",
"suggestions": "Návrhy", "suggestions": "Návrhy",
"sunrise_on_the_beach": "Východ slunce na pláži", "sunrise_on_the_beach": "Východ slunce na pláži",
"support": "Podpora", "support": "Podpora",
@@ -1869,8 +1796,6 @@
"sync": "Synchronizovat", "sync": "Synchronizovat",
"sync_albums": "Synchronizovat alba", "sync_albums": "Synchronizovat alba",
"sync_albums_manual_subtitle": "Synchronizovat všechna nahraná videa a fotografie do vybraných záložních alb", "sync_albums_manual_subtitle": "Synchronizovat všechna nahraná videa a fotografie do vybraných záložních alb",
"sync_local": "Synchronizovat místní",
"sync_remote": "Synchronizovat vzdálené",
"sync_upload_album_setting_subtitle": "Vytvořit a nahrát fotografie a videa do vybraných alb na Immich", "sync_upload_album_setting_subtitle": "Vytvořit a nahrát fotografie a videa do vybraných alb na Immich",
"tag": "Značka", "tag": "Značka",
"tag_assets": "Přiřadit značku", "tag_assets": "Přiřadit značku",
@@ -1881,7 +1806,6 @@
"tag_updated": "Aktualizována značka: {tag}", "tag_updated": "Aktualizována značka: {tag}",
"tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}", "tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}",
"tags": "Značky", "tags": "Značky",
"tap_to_run_job": "Klepnutím na spustíte úlohu",
"template": "Šablona", "template": "Šablona",
"theme": "Motiv", "theme": "Motiv",
"theme_selection": "Výběr motivu", "theme_selection": "Výběr motivu",
@@ -1914,7 +1838,6 @@
"total": "Celkem", "total": "Celkem",
"total_usage": "Celkové využití", "total_usage": "Celkové využití",
"trash": "Koš", "trash": "Koš",
"trash_action_prompt": "{count} přesunutých do koše",
"trash_all": "Vyhodit vše", "trash_all": "Vyhodit vše",
"trash_count": "Vyhodit {count, number}", "trash_count": "Vyhodit {count, number}",
"trash_delete_asset": "Vyhodit/Smazat položku", "trash_delete_asset": "Vyhodit/Smazat položku",
@@ -1931,12 +1854,10 @@
"type": "Typ", "type": "Typ",
"unable_to_change_pin_code": "Nelze změnit PIN kód", "unable_to_change_pin_code": "Nelze změnit PIN kód",
"unable_to_setup_pin_code": "Nelze nastavit PIN kód", "unable_to_setup_pin_code": "Nelze nastavit PIN kód",
"unarchive": "Odebrat z archivu", "unarchive": "Odarchivovat",
"unarchive_action_prompt": "{count} odstraněných z archivu",
"unarchived_count": "{count, plural, one {Odarchivována #} few {Odarchivovány #} other {Odarchivováno #}}", "unarchived_count": "{count, plural, one {Odarchivována #} few {Odarchivovány #} other {Odarchivováno #}}",
"undo": "Vrátit zpět", "undo": "Vrátit zpět",
"unfavorite": "Zrušit oblíbení", "unfavorite": "Zrušit oblíbení",
"unfavorite_action_prompt": "{count} odstraněných z oblíbených",
"unhide_person": "Zrušit skrytí osoby", "unhide_person": "Zrušit skrytí osoby",
"unknown": "Neznámý", "unknown": "Neznámý",
"unknown_country": "Neznámá země", "unknown_country": "Neznámá země",
@@ -1954,20 +1875,15 @@
"unselect_all_duplicates": "Zrušit výběr všech duplicit", "unselect_all_duplicates": "Zrušit výběr všech duplicit",
"unselect_all_in": "Zrušit výběr ve skupině {group}", "unselect_all_in": "Zrušit výběr ve skupině {group}",
"unstack": "Zrušit seskupení", "unstack": "Zrušit seskupení",
"unstack_action_prompt": "{count} seskupených zrušeno", "unstacked_assets_count": "{count, plural, one {Rozložená # položka} few {Rozložené # položky} other {Rozložených # položiek}}",
"unstacked_assets_count": "{count, plural, one {Rozložená # položka} few {Rozložené # položky} other {Rozložených # položek}}",
"untagged": "Neoznačeno",
"up_next": "To je prozatím vše", "up_next": "To je prozatím vše",
"updated_at": "Aktualizováno", "updated_at": "Aktualizováno",
"updated_password": "Heslo aktualizováno", "updated_password": "Heslo aktualizováno",
"upload": "Nahrát", "upload": "Nahrát",
"upload_action_prompt": "{count} ve frontě pro nahrání",
"upload_concurrency": "Souběžnost nahrávání", "upload_concurrency": "Souběžnost nahrávání",
"upload_details": "Detaily nahrávání",
"upload_dialog_info": "Chcete zálohovat vybrané položky na server?", "upload_dialog_info": "Chcete zálohovat vybrané položky na server?",
"upload_dialog_title": "Nahrát položku", "upload_dialog_title": "Nahrát položku",
"upload_errors": "Nahrávání bylo dokončeno s {count, plural, one {# chybou} other {# chybami}}, obnovte stránku pro zobrazení nových položek.", "upload_errors": "Nahrávání bylo dokončeno s {count, plural, one {# chybou} other {# chybami}}, obnovte stránku pro zobrazení nových položek.",
"upload_finished": "Nahrávání dokončeno",
"upload_progress": "Zbývá {remaining, number} - Zpracováno {processed, number}/{total, number}", "upload_progress": "Zbývá {remaining, number} - Zpracováno {processed, number}/{total, number}",
"upload_skipped_duplicates": "{count, plural, one {Přeskočena # duplicitní položka} few {Přeskočeny # duplicitní položky} other {Přeskočeno # duplicitních položek}}", "upload_skipped_duplicates": "{count, plural, one {Přeskočena # duplicitní položka} few {Přeskočeny # duplicitní položky} other {Přeskočeno # duplicitních položek}}",
"upload_status_duplicates": "Duplicity", "upload_status_duplicates": "Duplicity",
@@ -1976,7 +1892,6 @@
"upload_success": "Nahrání proběhlo úspěšně, obnovením stránky se zobrazí nově nahrané položky.", "upload_success": "Nahrání proběhlo úspěšně, obnovením stránky se zobrazí nově nahrané položky.",
"upload_to_immich": "Nahrát do Immich ({count})", "upload_to_immich": "Nahrát do Immich ({count})",
"uploading": "Nahrávání", "uploading": "Nahrávání",
"uploading_media": "Nahrávání médií",
"url": "URL", "url": "URL",
"usage": "Využití", "usage": "Využití",
"use_biometric": "Použít biometrické údaje", "use_biometric": "Použít biometrické údaje",
@@ -1997,7 +1912,6 @@
"user_usage_stats_description": "Zobrazit statistiky používání účtu", "user_usage_stats_description": "Zobrazit statistiky používání účtu",
"username": "Uživateleské jméno", "username": "Uživateleské jméno",
"users": "Uživatelé", "users": "Uživatelé",
"users_added_to_album_count": "{count, plural, one {Přidán # uživatel} few {Přidány # uživatelé} other {Přidáno # uživatelů}} do alba",
"utilities": "Nástroje", "utilities": "Nástroje",
"validate": "Ověřit", "validate": "Ověřit",
"validate_endpoint_error": "Zadejte platné URL", "validate_endpoint_error": "Zadejte platné URL",
@@ -2016,7 +1930,6 @@
"view_album": "Zobrazit album", "view_album": "Zobrazit album",
"view_all": "Zobrazit vše", "view_all": "Zobrazit vše",
"view_all_users": "Zobrazit všechny uživatele", "view_all_users": "Zobrazit všechny uživatele",
"view_details": "Zobrazit podrobnosti",
"view_in_timeline": "Zobrazit na časové ose", "view_in_timeline": "Zobrazit na časové ose",
"view_link": "Zobrazit odkaz", "view_link": "Zobrazit odkaz",
"view_links": "Zobrazit odkazy", "view_links": "Zobrazit odkazy",
@@ -2028,7 +1941,7 @@
"view_user": "Zobrazit uživatele", "view_user": "Zobrazit uživatele",
"viewer_remove_from_stack": "Odstranit ze zásobníku", "viewer_remove_from_stack": "Odstranit ze zásobníku",
"viewer_stack_use_as_main_asset": "Použít jako hlavní položku", "viewer_stack_use_as_main_asset": "Použít jako hlavní položku",
"viewer_unstack": "Zrušit zásobník", "viewer_unstack": "Rozbalit zásobník",
"visibility_changed": "Viditelnost změněna u {count, plural, one {# osoby} few {# osob} other {# lidí}}", "visibility_changed": "Viditelnost změněna u {count, plural, one {# osoby} few {# osob} other {# lidí}}",
"waiting": "Čekající", "waiting": "Čekající",
"warning": "Upozornění", "warning": "Upozornění",

View File

@@ -34,7 +34,6 @@
"added_to_favorites_count": "Tilføjet {count, number} til favoritter", "added_to_favorites_count": "Tilføjet {count, number} til favoritter",
"admin": { "admin": {
"add_exclusion_pattern_description": "Tilføj udelukkelsesmønstre. Globbing ved hjælp af *, ** og ? understøttes. For at ignorere alle filer i enhver mappe med navnet \"Raw\", brug \"**/Raw/**\". For at ignorere alle filer, der slutter på \".tif\", brug \"**/*.tif\". For at ignorere en absolut sti, brug \"/sti/til/ignoreret/**\".", "add_exclusion_pattern_description": "Tilføj udelukkelsesmønstre. Globbing ved hjælp af *, ** og ? understøttes. For at ignorere alle filer i enhver mappe med navnet \"Raw\", brug \"**/Raw/**\". For at ignorere alle filer, der slutter på \".tif\", brug \"**/*.tif\". For at ignorere en absolut sti, brug \"/sti/til/ignoreret/**\".",
"admin_user": "Administrator bruger",
"asset_offline_description": "Denne eksterne biblioteksressource findes ikke længere på disken og er blevet flyttet til papirkurven. Hvis filen blev flyttet inde i biblioteket, skal du tjekke din tidslinje for den nye tilsvarende ressource. For at gendanne denne ressource skal du sikre, at filstien nedenfor kan tilgås af Immich og scanne biblioteket.", "asset_offline_description": "Denne eksterne biblioteksressource findes ikke længere på disken og er blevet flyttet til papirkurven. Hvis filen blev flyttet inde i biblioteket, skal du tjekke din tidslinje for den nye tilsvarende ressource. For at gendanne denne ressource skal du sikre, at filstien nedenfor kan tilgås af Immich og scanne biblioteket.",
"authentication_settings": "Godkendelsesindstillinger", "authentication_settings": "Godkendelsesindstillinger",
"authentication_settings_description": "Administrer adgangskode, OAuth og andre godkendelsesindstillinger", "authentication_settings_description": "Administrer adgangskode, OAuth og andre godkendelsesindstillinger",
@@ -166,20 +165,6 @@
"metadata_settings_description": "Håndtér metadataindstillinger", "metadata_settings_description": "Håndtér metadataindstillinger",
"migration_job": "Migrering", "migration_job": "Migrering",
"migration_job_description": "Migrér miniaturebilleder for aktiver og ansigter til den seneste mappestruktur", "migration_job_description": "Migrér miniaturebilleder for aktiver og ansigter til den seneste mappestruktur",
"nightly_tasks_cluster_faces_setting_description": "Kør ansigtsgenkendelse på nye ansigter",
"nightly_tasks_cluster_new_faces_setting": "Gruppér nye ansigter",
"nightly_tasks_database_cleanup_setting": "Databaseoprydning opgaver",
"nightly_tasks_database_cleanup_setting_description": "Ryd op i gamle, udløbne data fra databasen",
"nightly_tasks_generate_memories_setting": "Generer minder",
"nightly_tasks_generate_memories_setting_description": "Skab nye minder ud fra dine medier",
"nightly_tasks_missing_thumbnails_setting": "Generer manglende miniaturebilleder",
"nightly_tasks_missing_thumbnails_setting_description": "Sæt medier uden thumbnails i kø til generering af thumbnails",
"nightly_tasks_settings": "Indstillinger for opgaver om natten",
"nightly_tasks_settings_description": "Administrér opgaver om natten",
"nightly_tasks_start_time_setting": "Starttidspunkt",
"nightly_tasks_start_time_setting_description": "Tidspunktet hvor serveren begynder at køre opgaver om natten",
"nightly_tasks_sync_quota_usage_setting": "Synkronisér kvoteforbrug",
"nightly_tasks_sync_quota_usage_setting_description": "Opdater brugerens lagerkvote baseret på aktuelt forbrug",
"no_paths_added": "Ingen stier tilføjet", "no_paths_added": "Ingen stier tilføjet",
"no_pattern_added": "Intet mønster tilføjet", "no_pattern_added": "Intet mønster tilføjet",
"note_apply_storage_label_previous_assets": "Bemærk: For at anvende Lagringsmærkatet på tidligere uploadede mediefiler, kør", "note_apply_storage_label_previous_assets": "Bemærk: For at anvende Lagringsmærkatet på tidligere uploadede mediefiler, kør",
@@ -218,7 +203,7 @@
"oauth_storage_quota_claim": "Lagringskvotefordring", "oauth_storage_quota_claim": "Lagringskvotefordring",
"oauth_storage_quota_claim_description": "Sæt automatisk brugeres lagringskvote til denne nye fordrings værdi.", "oauth_storage_quota_claim_description": "Sæt automatisk brugeres lagringskvote til denne nye fordrings værdi.",
"oauth_storage_quota_default": "Standard lagringskvote (GiB)", "oauth_storage_quota_default": "Standard lagringskvote (GiB)",
"oauth_storage_quota_default_description": "Kvote i GiB som bruges, når der ikke bliver oplyst en fordring.", "oauth_storage_quota_default_description": "Kvote i GiB som bruges, når der ikke bliver oplyst en fordring (Indtast 0 for uendelig kvote).",
"oauth_timeout": "Forespørgslen udløb", "oauth_timeout": "Forespørgslen udløb",
"oauth_timeout_description": "Udløbstid for forespørgsel i milisekunder", "oauth_timeout_description": "Udløbstid for forespørgsel i milisekunder",
"password_enable_description": "Log ind med email og adgangskode", "password_enable_description": "Log ind med email og adgangskode",
@@ -477,6 +462,7 @@
"assets": "elementer", "assets": "elementer",
"assets_added_count": "Tilføjet {count, plural, one {# mediefil} other {# mediefiler}}", "assets_added_count": "Tilføjet {count, plural, one {# mediefil} other {# mediefiler}}",
"assets_added_to_album_count": "{count, plural, one {# mediefil} other {# mediefiler}} tilføjet til albummet", "assets_added_to_album_count": "{count, plural, one {# mediefil} other {# mediefiler}} tilføjet til albummet",
"assets_added_to_name_count": "Tilføjet {count, plural, one {# mediefil} other {# mediefiler}} til {hasName, select, true {<b>{name}</b>} other {nyt album}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Billed} other {Billeder}} kan ikke blive tilføjet til album", "assets_cannot_be_added_to_album_count": "{count, plural, one {Billed} other {Billeder}} kan ikke blive tilføjet til album",
"assets_count": "{count, plural, one {# mediefil} other {# mediefiler}}", "assets_count": "{count, plural, one {# mediefil} other {# mediefiler}}",
"assets_deleted_permanently": "{count} element(er) blev fjernet permanent", "assets_deleted_permanently": "{count} element(er) blev fjernet permanent",
@@ -502,7 +488,6 @@
"back_close_deselect": "Tilbage, luk eller fravælg", "back_close_deselect": "Tilbage, luk eller fravælg",
"background_location_permission": "Tilladelse til baggrundsplacering", "background_location_permission": "Tilladelse til baggrundsplacering",
"background_location_permission_content": "For at skifte netværk, når appen kører i baggrunden, skal Immich *altid* have præcis placeringsadgang, så appen kan læse WiFi-netværkets navn", "background_location_permission_content": "For at skifte netværk, når appen kører i baggrunden, skal Immich *altid* have præcis placeringsadgang, så appen kan læse WiFi-netværkets navn",
"backup": "Sikkerhedskopier",
"backup_album_selection_page_albums_device": "Albummer på enheden ({count})", "backup_album_selection_page_albums_device": "Albummer på enheden ({count})",
"backup_album_selection_page_albums_tap": "Tryk en gang for at inkludere, tryk to gange for at ekskludere", "backup_album_selection_page_albums_tap": "Tryk en gang for at inkludere, tryk to gange for at ekskludere",
"backup_album_selection_page_assets_scatter": "Elementer kan være spredt på tværs af flere albummer. Albummer kan således inkluderes eller udelukkes under sikkerhedskopieringsprocessen.", "backup_album_selection_page_assets_scatter": "Elementer kan være spredt på tværs af flere albummer. Albummer kan således inkluderes eller udelukkes under sikkerhedskopieringsprocessen.",
@@ -716,6 +701,7 @@
"daily_title_text_date": "E, dd MMM", "daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy", "daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Mørk", "dark": "Mørk",
"darkTheme": "Skift til mørkt tema",
"date_after": "Dato efter", "date_after": "Dato efter",
"date_and_time": "Dato og klokkeslæt", "date_and_time": "Dato og klokkeslæt",
"date_before": "Dato før", "date_before": "Dato før",
@@ -1142,6 +1128,7 @@
"light": "Lys", "light": "Lys",
"like_deleted": "Ligesom slettet", "like_deleted": "Ligesom slettet",
"link_motion_video": "Link bevægelsesvideo", "link_motion_video": "Link bevægelsesvideo",
"link_options": "Link-indstillinger",
"link_to_oauth": "Link til OAuth", "link_to_oauth": "Link til OAuth",
"linked_oauth_account": "Tilsluttet OAuth-konto", "linked_oauth_account": "Tilsluttet OAuth-konto",
"list": "Liste", "list": "Liste",
@@ -1203,6 +1190,7 @@
"manage_your_devices": "Administrér dine enheder der er logget ind", "manage_your_devices": "Administrér dine enheder der er logget ind",
"manage_your_oauth_connection": "Administrér din OAuth-tilslutning", "manage_your_oauth_connection": "Administrér din OAuth-tilslutning",
"map": "Kort", "map": "Kort",
"map_assets_in_bound": "{count} billede",
"map_assets_in_bounds": "{count} billeder", "map_assets_in_bounds": "{count} billeder",
"map_cannot_get_user_location": "Kan ikke finde brugerens placering", "map_cannot_get_user_location": "Kan ikke finde brugerens placering",
"map_location_dialog_yes": "Ja", "map_location_dialog_yes": "Ja",

View File

@@ -14,7 +14,6 @@
"add_a_location": "Standort hinzufügen", "add_a_location": "Standort hinzufügen",
"add_a_name": "Name hinzufügen", "add_a_name": "Name hinzufügen",
"add_a_title": "Titel hinzufügen", "add_a_title": "Titel hinzufügen",
"add_birthday": "Geburtsdatum hinzufügen",
"add_endpoint": "Endpunkt hinzufügen", "add_endpoint": "Endpunkt hinzufügen",
"add_exclusion_pattern": "Ausschlussmuster hinzufügen", "add_exclusion_pattern": "Ausschlussmuster hinzufügen",
"add_import_path": "Importpfad hinzufügen", "add_import_path": "Importpfad hinzufügen",
@@ -42,16 +41,9 @@
"authentication_settings_disable_all": "Bist du sicher, dass du alle Anmeldemethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.", "authentication_settings_disable_all": "Bist du sicher, dass du alle Anmeldemethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.",
"authentication_settings_reenable": "Nutze einen <link>Server-Befehl</link> zur Reaktivierung.", "authentication_settings_reenable": "Nutze einen <link>Server-Befehl</link> zur Reaktivierung.",
"background_task_job": "Hintergrundaufgaben", "background_task_job": "Hintergrundaufgaben",
"backup_database": "Datenbanksicherung erstellen", "backup_database": "Datenbanksicherung regelmäßig erstellen",
"backup_database_enable_description": "Datenbank regelmäßig sichern", "backup_database_enable_description": "Datenbank regelmäßig sichern",
"backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Backups", "backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Backups",
"backup_onboarding_1_description": "Offsite-Kopie in der Cloud oder an einem anderen physischen Ort.",
"backup_onboarding_2_description": "Lokale Kopien auf verschiedenen Geräten. Dazu gehören die Hauptdateien und eine lokale Sicherung dieser Dateien.",
"backup_onboarding_3_description": "3 komplette Kopien deiner Daten, inkl. der Originaldateien. Dies umfasst 1 Kopie an einem anderen Ort und 2 lokale Kopie.",
"backup_onboarding_description": "Eine <backblaze-link>3-2-1 Backup-Strategie</backblaze-link> wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Backup-Lösung zu haben.",
"backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der <link>Dokumentation</link>.",
"backup_onboarding_parts_title": "Eine 3-2-1-Sicherung umfasst:",
"backup_onboarding_title": "Backups",
"backup_settings": "Einstellungen für Datenbanksicherung", "backup_settings": "Einstellungen für Datenbanksicherung",
"backup_settings_description": "Einstellungen zur regelmäßigen Sicherung der Datenbank. Hinweis: Diese Jobs werden nicht überwacht und du wirst nicht über Fehler informiert.", "backup_settings_description": "Einstellungen zur regelmäßigen Sicherung der Datenbank. Hinweis: Diese Jobs werden nicht überwacht und du wirst nicht über Fehler informiert.",
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}", "cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
@@ -64,9 +56,9 @@
"confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN Code von {user} zurücksetzen möchtest?", "confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN Code von {user} zurücksetzen möchtest?",
"create_job": "Aufgabe erstellen", "create_job": "Aufgabe erstellen",
"cron_expression": "Cron Zeitangabe", "cron_expression": "Cron Zeitangabe",
"cron_expression_description": "Setze ein Intervall für die Sicherung mittels cron. Hilfe mit dem Format bietet dir dabei z. B. der <link>Crontab Guru</link>", "cron_expression_description": "Setze ein Intervall für die Sicherung mittels cron. Hilfe mit dem Format bietet dir dabei z.B der <link>Crontab Guru</link>",
"cron_expression_presets": "Nützliche Zeitangaben für Cron", "cron_expression_presets": "Nützliche Zeitangaben für Cron",
"disable_login": "Login deaktivieren", "disable_login": "Login deaktvieren",
"duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der intelligenten Suche", "duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der intelligenten Suche",
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.", "exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.",
"external_library_management": "Verwaltung externer Bibliotheken", "external_library_management": "Verwaltung externer Bibliotheken",
@@ -128,7 +120,7 @@
"machine_learning_duplicate_detection_setting_description": "Verwendung von CLIP-Embeddings zum Erkennen möglicher Duplikate", "machine_learning_duplicate_detection_setting_description": "Verwendung von CLIP-Embeddings zum Erkennen möglicher Duplikate",
"machine_learning_enabled": "Maschinelles Lernen aktivieren", "machine_learning_enabled": "Maschinelles Lernen aktivieren",
"machine_learning_enabled_description": "Wenn diese Option deaktiviert ist, werden alle ML-Funktionen unabhängig von den unten aufgeführten Einstellungen deaktiviert.", "machine_learning_enabled_description": "Wenn diese Option deaktiviert ist, werden alle ML-Funktionen unabhängig von den unten aufgeführten Einstellungen deaktiviert.",
"machine_learning_facial_recognition": "Gesichtsidentifizierung", "machine_learning_facial_recognition": "Gesichtsidentifikation",
"machine_learning_facial_recognition_description": "Erkenne, identifiziere und gruppiere Gesichter in Bildern", "machine_learning_facial_recognition_description": "Erkenne, identifiziere und gruppiere Gesichter in Bildern",
"machine_learning_facial_recognition_model": "Gesichtserkennungs-Modell", "machine_learning_facial_recognition_model": "Gesichtserkennungs-Modell",
"machine_learning_facial_recognition_model_description": "Die Modelle sind in absteigender Reihenfolge ihrer Größe aufgeführt. Größere Modelle sind langsamer und verbrauchen mehr Speicher, liefern aber bessere Ergebnisse. Bitte beachte dabei, dass du die Gesichtserkennungsaufgabe für alle Bilder neu starten musst, wenn du ein Modell änderst.", "machine_learning_facial_recognition_model_description": "Die Modelle sind in absteigender Reihenfolge ihrer Größe aufgeführt. Größere Modelle sind langsamer und verbrauchen mehr Speicher, liefern aber bessere Ergebnisse. Bitte beachte dabei, dass du die Gesichtserkennungsaufgabe für alle Bilder neu starten musst, wenn du ein Modell änderst.",
@@ -174,20 +166,6 @@
"metadata_settings_description": "Metadaten-Einstellungen verwalten", "metadata_settings_description": "Metadaten-Einstellungen verwalten",
"migration_job": "Migration", "migration_job": "Migration",
"migration_job_description": "Diese Aufgabe migriert Miniaturansichten für Dateien und Gesichter in die neueste Ordnerstruktur", "migration_job_description": "Diese Aufgabe migriert Miniaturansichten für Dateien und Gesichter in die neueste Ordnerstruktur",
"nightly_tasks_cluster_faces_setting_description": "Gesichtsidentifikation auf neu erkannten Gesichtern ausführen",
"nightly_tasks_cluster_new_faces_setting": "Neue Gesichter gruppieren",
"nightly_tasks_database_cleanup_setting": "Datenbankbereinigungs-Aufgaben",
"nightly_tasks_database_cleanup_setting_description": "Alte, abgelaufene Daten aus der Datenbank bereinigen",
"nightly_tasks_generate_memories_setting": "Erinnerungen generieren",
"nightly_tasks_generate_memories_setting_description": "Neue Erinnerungen aus Dateien erstellen",
"nightly_tasks_missing_thumbnails_setting": "Fehlende Miniaturansichten generieren",
"nightly_tasks_missing_thumbnails_setting_description": "Dateien ohne Miniaturansicht in die Warteschlange zur Miniaturansicht-Generierung hinzufügen",
"nightly_tasks_settings": "Einstellungen für nächtliche Aufgaben",
"nightly_tasks_settings_description": "Nächtliche Aufgaben verwalten",
"nightly_tasks_start_time_setting": "Startzeit",
"nightly_tasks_start_time_setting_description": "Die Zeit, zu der der Server mit der Ausführung der nächtlichen Aufgaben beginnt",
"nightly_tasks_sync_quota_usage_setting": "Kontingentnutzung synchronisieren",
"nightly_tasks_sync_quota_usage_setting_description": "Benutzerspeicherkontingent basierend auf der aktuellen Nutzung aktualisieren",
"no_paths_added": "Keine Pfade hinzugefügt", "no_paths_added": "Keine Pfade hinzugefügt",
"no_pattern_added": "Kein Ausschlussmuster hinzugefügt", "no_pattern_added": "Kein Ausschlussmuster hinzugefügt",
"note_apply_storage_label_previous_assets": "Hinweis: Um den Speicherpfad auf die vorher hochgeladenen Dateien anzuwenden, starte den", "note_apply_storage_label_previous_assets": "Hinweis: Um den Speicherpfad auf die vorher hochgeladenen Dateien anzuwenden, starte den",
@@ -218,8 +196,6 @@
"oauth_mobile_redirect_uri": "Mobile Umleitungs-URI", "oauth_mobile_redirect_uri": "Mobile Umleitungs-URI",
"oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben", "oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben",
"oauth_mobile_redirect_uri_override_description": "Einschalten, wenn der OAuth-Anbieter keine mobile URI wie ''{callback}'' erlaubt", "oauth_mobile_redirect_uri_override_description": "Einschalten, wenn der OAuth-Anbieter keine mobile URI wie ''{callback}'' erlaubt",
"oauth_role_claim": "Rollen-Claim",
"oauth_role_claim_description": "Gewähre automatisch Admin-Zugriff basierend auf dem Vorhandensein dieses Claims. Der Claim kann entweder 'user' oder 'admin' sein.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "OAuth-Anmeldeeinstellungen verwalten", "oauth_settings_description": "OAuth-Anmeldeeinstellungen verwalten",
"oauth_settings_more_details": "Weitere Informationen zu dieser Funktion findest du in der <link>Dokumentation</link>.", "oauth_settings_more_details": "Weitere Informationen zu dieser Funktion findest du in der <link>Dokumentation</link>.",
@@ -268,7 +244,6 @@
"storage_template_migration_info": "Die Speichervorlage wird alle Dateierweiterungen in Kleinbuchstaben umwandeln. Vorlagenänderungen gelten nur für neue Dateien. Um die Vorlage rückwirkend auf bereits hochgeladene Assets anzuwenden, führe den <link>{job}</link> aus.", "storage_template_migration_info": "Die Speichervorlage wird alle Dateierweiterungen in Kleinbuchstaben umwandeln. Vorlagenänderungen gelten nur für neue Dateien. Um die Vorlage rückwirkend auf bereits hochgeladene Assets anzuwenden, führe den <link>{job}</link> aus.",
"storage_template_migration_job": "Speichervorlagenmigrations-Aufgabe", "storage_template_migration_job": "Speichervorlagenmigrations-Aufgabe",
"storage_template_more_details": "Weitere Details zu dieser Funktion findest du unter <template-link>Speichervorlage</template-link> und dessen <implications-link>Implikationen</implications-link>", "storage_template_more_details": "Weitere Details zu dieser Funktion findest du unter <template-link>Speichervorlage</template-link> und dessen <implications-link>Implikationen</implications-link>",
"storage_template_onboarding_description_v2": "Wenn aktiviert, werden Dateien automatisch nach einer benutzerdefinierten Vorlage organisiert. Für mehr Informationen siehe die <link>Dokumentation</link>.",
"storage_template_path_length": "Ungefähres Pfadlängen-Limit: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "Ungefähres Pfadlängen-Limit: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Speichervorlage", "storage_template_settings": "Speichervorlage",
"storage_template_settings_description": "Die Ordnerstruktur und den Dateinamen der hochgeladenen Datei verwalten", "storage_template_settings_description": "Die Ordnerstruktur und den Dateinamen der hochgeladenen Datei verwalten",
@@ -381,19 +356,17 @@
"admin_password": "Administrator Passwort", "admin_password": "Administrator Passwort",
"administration": "Verwaltung", "administration": "Verwaltung",
"advanced": "Erweitert", "advanced": "Erweitert",
"advanced_settings_beta_timeline_subtitle": "Probier die neue App-Erfahrung aus",
"advanced_settings_beta_timeline_title": "Beta-Timeline",
"advanced_settings_enable_alternate_media_filter_subtitle": "Verwende diese Option, um Medien während der Synchronisierung nach anderen Kriterien zu filtern. Versuchen dies nur, wenn Probleme mit der Erkennung aller Alben durch die App auftreten.", "advanced_settings_enable_alternate_media_filter_subtitle": "Verwende diese Option, um Medien während der Synchronisierung nach anderen Kriterien zu filtern. Versuchen dies nur, wenn Probleme mit der Erkennung aller Alben durch die App auftreten.",
"advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTELL] Benutze alternativen Filter für Synchronisierung der Gerätealben", "advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTELL] Benutze alternativen Filter für Synchronisierung der Gerätealben",
"advanced_settings_log_level_title": "Log-Level: {level}", "advanced_settings_log_level_title": "Log-Level: {level}",
"advanced_settings_prefer_remote_subtitle": "Einige Geräte sind sehr langsam beim Laden von lokalen Vorschaubildern. Aktivieren Sie diese Einstellung, um stattdessen die Server-Bilder zu laden.", "advanced_settings_prefer_remote_subtitle": "Einige Geräte sind sehr langsam beim Laden von Miniaturbildern direkt aus dem Gerät. Aktivieren Sie diese Einstellung, um stattdessen die Server-Bilder zu laden.",
"advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen", "advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen",
"advanced_settings_proxy_headers_subtitle": "Definiere einen Proxy-Header, den Immich bei jeder Netzwerkanfrage mitschicken soll", "advanced_settings_proxy_headers_subtitle": "Definiere einen Proxy-Header, den Immich bei jeder Netzwerkanfrage mitschicken soll",
"advanced_settings_proxy_headers_title": "Proxy-Headers", "advanced_settings_proxy_headers_title": "Proxy-Headers",
"advanced_settings_self_signed_ssl_subtitle": "Verifizierung von SSL-Zertifikaten vom Server überspringen. Notwendig bei selbstsignierten Zertifikaten.", "advanced_settings_self_signed_ssl_subtitle": "Verifizierung von SSL-Zertifikaten vom Server überspringen. Notwendig bei selbstsignierten Zertifikaten.",
"advanced_settings_self_signed_ssl_title": "Selbstsignierte SSL-Zertifikate erlauben", "advanced_settings_self_signed_ssl_title": "Selbstsignierte SSL-Zertifikate erlauben",
"advanced_settings_sync_remote_deletions_subtitle": "Automatisches Löschen oder Wiederherstellen einer Datei auf diesem Gerät, wenn diese Aktion im Web durchgeführt wird", "advanced_settings_sync_remote_deletions_subtitle": "Automatisches Löschen oder Wiederherstellen einer Datei auf diesem Gerät, wenn diese Aktion im Web durchgeführt wird",
"advanced_settings_sync_remote_deletions_title": "Mit Server-Löschungen synchronisieren [Experimentell]", "advanced_settings_sync_remote_deletions_title": "Synchrone Remote-Löschungen [Experimentell]",
"advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen", "advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen",
"advanced_settings_troubleshooting_subtitle": "Erweiterte Funktionen zur Fehlersuche aktivieren", "advanced_settings_troubleshooting_subtitle": "Erweiterte Funktionen zur Fehlersuche aktivieren",
"advanced_settings_troubleshooting_title": "Fehlersuche", "advanced_settings_troubleshooting_title": "Fehlersuche",
@@ -405,7 +378,6 @@
"album_cover_updated": "Album-Cover aktualisiert", "album_cover_updated": "Album-Cover aktualisiert",
"album_delete_confirmation": "Bist du sicher, dass du das Album {album} löschen willst?", "album_delete_confirmation": "Bist du sicher, dass du das Album {album} löschen willst?",
"album_delete_confirmation_description": "Falls dieses Album geteilt wurde, können andere Benutzer nicht mehr darauf zugreifen.", "album_delete_confirmation_description": "Falls dieses Album geteilt wurde, können andere Benutzer nicht mehr darauf zugreifen.",
"album_deleted": "Album gelöscht",
"album_info_card_backup_album_excluded": "AUSGESCHLOSSEN", "album_info_card_backup_album_excluded": "AUSGESCHLOSSEN",
"album_info_card_backup_album_included": "EINGESCHLOSSEN", "album_info_card_backup_album_included": "EINGESCHLOSSEN",
"album_info_updated": "Album-Infos aktualisiert", "album_info_updated": "Album-Infos aktualisiert",
@@ -415,7 +387,6 @@
"album_options": "Albumoptionen", "album_options": "Albumoptionen",
"album_remove_user": "Nutzer entfernen?", "album_remove_user": "Nutzer entfernen?",
"album_remove_user_confirmation": "Bist du sicher, dass du {user} entfernen willst?", "album_remove_user_confirmation": "Bist du sicher, dass du {user} entfernen willst?",
"album_search_not_found": "Keine Alben gefunden, die zur Suche passen",
"album_share_no_users": "Es sieht so aus, als hättest du dieses Album mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.", "album_share_no_users": "Es sieht so aus, als hättest du dieses Album mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.",
"album_updated": "Album aktualisiert", "album_updated": "Album aktualisiert",
"album_updated_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn ein freigegebenes Album neue Dateien enthält", "album_updated_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn ein freigegebenes Album neue Dateien enthält",
@@ -435,7 +406,6 @@
"albums_default_sort_order": "Standard Album Sortierung", "albums_default_sort_order": "Standard Album Sortierung",
"albums_default_sort_order_description": "Sortierreihenfolge der Dateien bei der Erstellung neuer Alben.", "albums_default_sort_order_description": "Sortierreihenfolge der Dateien bei der Erstellung neuer Alben.",
"albums_feature_description": "Sammlung an Alben die mit anderen Benutzern geteilt werden können.", "albums_feature_description": "Sammlung an Alben die mit anderen Benutzern geteilt werden können.",
"albums_on_device_count": "Alben auf dem Gerät ({count})",
"all": "Alle", "all": "Alle",
"all_albums": "Alle Alben", "all_albums": "Alle Alben",
"all_people": "Alle Personen", "all_people": "Alle Personen",
@@ -456,7 +426,6 @@
"app_settings": "App-Einstellungen", "app_settings": "App-Einstellungen",
"appears_in": "Erscheint in", "appears_in": "Erscheint in",
"archive": "Archiv", "archive": "Archiv",
"archive_action_prompt": "{count} zum Archiv hinzugefügt",
"archive_or_unarchive_photo": "Foto archivieren bzw. Archivierung aufheben", "archive_or_unarchive_photo": "Foto archivieren bzw. Archivierung aufheben",
"archive_page_no_archived_assets": "Keine archivierten Inhalte gefunden", "archive_page_no_archived_assets": "Keine archivierten Inhalte gefunden",
"archive_page_title": "Archiv ({count})", "archive_page_title": "Archiv ({count})",
@@ -494,6 +463,7 @@
"assets": "Dateien", "assets": "Dateien",
"assets_added_count": "{count, plural, one {# Datei} other {# Dateien}} hinzugefügt", "assets_added_count": "{count, plural, one {# Datei} other {# Dateien}} hinzugefügt",
"assets_added_to_album_count": "{count, plural, one {# Datei} other {# Dateien}} zum Album hinzugefügt", "assets_added_to_album_count": "{count, plural, one {# Datei} other {# Dateien}} zum Album hinzugefügt",
"assets_added_to_name_count": "{count, plural, one {# Element} other {# Elemente}} zu {hasName, select, true {<b>{name}</b>} other {neuem Album}} hinzugefügt",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Datei kann}other {Dateien können}} nicht zum Album hinzugefügt werden", "assets_cannot_be_added_to_album_count": "{count, plural, one {Datei kann}other {Dateien können}} nicht zum Album hinzugefügt werden",
"assets_count": "{count, plural, one {# Datei} other {# Dateien}}", "assets_count": "{count, plural, one {# Datei} other {# Dateien}}",
"assets_deleted_permanently": "{count} Element(e) permanent gelöscht", "assets_deleted_permanently": "{count} Element(e) permanent gelöscht",
@@ -519,7 +489,6 @@
"back_close_deselect": "Zurück, Schließen oder Abwählen", "back_close_deselect": "Zurück, Schließen oder Abwählen",
"background_location_permission": "Hintergrund Standortfreigabe", "background_location_permission": "Hintergrund Standortfreigabe",
"background_location_permission_content": "Um im Hintergrund zwischen den Netzwerken wechseln zu können, muss Immich *immer* Zugriff auf den genauen Standort haben, damit die App den Namen des WLAN-Netzwerks ermitteln kann", "background_location_permission_content": "Um im Hintergrund zwischen den Netzwerken wechseln zu können, muss Immich *immer* Zugriff auf den genauen Standort haben, damit die App den Namen des WLAN-Netzwerks ermitteln kann",
"backup": "Sicherung",
"backup_album_selection_page_albums_device": "Alben auf dem Gerät ({count})", "backup_album_selection_page_albums_device": "Alben auf dem Gerät ({count})",
"backup_album_selection_page_albums_tap": "Einmalig das Album antippen um es zu sichern, doppelt antippen um es nicht mehr zu sichern", "backup_album_selection_page_albums_tap": "Einmalig das Album antippen um es zu sichern, doppelt antippen um es nicht mehr zu sichern",
"backup_album_selection_page_assets_scatter": "Elemente (Fotos / Videos) können sich über mehrere Alben verteilen. Daher können diese vor der Sicherung eingeschlossen oder ausgeschlossen werden.", "backup_album_selection_page_assets_scatter": "Elemente (Fotos / Videos) können sich über mehrere Alben verteilen. Daher können diese vor der Sicherung eingeschlossen oder ausgeschlossen werden.",
@@ -583,8 +552,6 @@
"backup_options_page_title": "Sicherungsoptionen", "backup_options_page_title": "Sicherungsoptionen",
"backup_setting_subtitle": "Verwaltung der Upload-Einstellungen im Hintergrund und im Vordergrund", "backup_setting_subtitle": "Verwaltung der Upload-Einstellungen im Hintergrund und im Vordergrund",
"backward": "Rückwärts", "backward": "Rückwärts",
"beta_sync": "Status der Beta-Synchronisierung",
"beta_sync_subtitle": "Verwalte das neue Synchronisierungssystem",
"biometric_auth_enabled": "Biometrische Authentifizierung aktiviert", "biometric_auth_enabled": "Biometrische Authentifizierung aktiviert",
"biometric_locked_out": "Du bist von der biometrischen Authentifizierung ausgeschlossen", "biometric_locked_out": "Du bist von der biometrischen Authentifizierung ausgeschlossen",
"biometric_no_options": "Keine biometrischen Optionen verfügbar", "biometric_no_options": "Keine biometrischen Optionen verfügbar",
@@ -619,7 +586,6 @@
"cancel": "Abbrechen", "cancel": "Abbrechen",
"cancel_search": "Suche abbrechen", "cancel_search": "Suche abbrechen",
"canceled": "Abgebrochen", "canceled": "Abgebrochen",
"canceling": "Abbrechen",
"cannot_merge_people": "Personen können nicht zusammengeführt werden", "cannot_merge_people": "Personen können nicht zusammengeführt werden",
"cannot_undo_this_action": "Diese Aktion kann nicht rückgängig gemacht werden!", "cannot_undo_this_action": "Diese Aktion kann nicht rückgängig gemacht werden!",
"cannot_update_the_description": "Beschreibung kann nicht aktualisiert werden", "cannot_update_the_description": "Beschreibung kann nicht aktualisiert werden",
@@ -733,11 +699,10 @@
"current_server_address": "Aktuelle Serveradresse", "current_server_address": "Aktuelle Serveradresse",
"custom_locale": "Benutzerdefinierte Sprache", "custom_locale": "Benutzerdefinierte Sprache",
"custom_locale_description": "Datumsangaben und Zahlen je nach Sprache und Land formatieren", "custom_locale_description": "Datumsangaben und Zahlen je nach Sprache und Land formatieren",
"custom_url": "Benutzerdefinierte URL",
"daily_title_text_date": "E, dd MMM", "daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy", "daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Dunkel", "dark": "Dunkel",
"dark_theme": "Dunkle Ansicht umschalten", "darkTheme": "Dunkles Theme umschalten",
"date_after": "Datum nach", "date_after": "Datum nach",
"date_and_time": "Datum und Zeit", "date_and_time": "Datum und Zeit",
"date_before": "Datum vor", "date_before": "Datum vor",
@@ -753,8 +718,6 @@
"default_locale": "Standard-Sprache", "default_locale": "Standard-Sprache",
"default_locale_description": "Datumsangaben und Zahlen basierend auf dem Gebietsschema des Browsers formatieren", "default_locale_description": "Datumsangaben und Zahlen basierend auf dem Gebietsschema des Browsers formatieren",
"delete": "Löschen", "delete": "Löschen",
"delete_action_confirmation_message": "Bist du sicher, dass du dieses Objekt löschen willst? Diese Aktion wird das Objekt in den Papierkorb des Servers verschieben und fragen, ob du es lokal löschen willst",
"delete_action_prompt": "{count} gelöscht",
"delete_album": "Album löschen", "delete_album": "Album löschen",
"delete_api_key_prompt": "Bist du sicher, dass du diesen API-Schlüssel löschen willst?", "delete_api_key_prompt": "Bist du sicher, dass du diesen API-Schlüssel löschen willst?",
"delete_dialog_alert": "Diese Elemente werden unwiderruflich von Immich und dem Gerät entfernt", "delete_dialog_alert": "Diese Elemente werden unwiderruflich von Immich und dem Gerät entfernt",
@@ -768,12 +731,9 @@
"delete_key": "Schlüssel löschen", "delete_key": "Schlüssel löschen",
"delete_library": "Bibliothek löschen", "delete_library": "Bibliothek löschen",
"delete_link": "Link löschen", "delete_link": "Link löschen",
"delete_local_action_prompt": "{count} lokal gelöscht",
"delete_local_dialog_ok_backed_up_only": "Nur gesicherte Inhalte löschen", "delete_local_dialog_ok_backed_up_only": "Nur gesicherte Inhalte löschen",
"delete_local_dialog_ok_force": "Trotzdem löschen", "delete_local_dialog_ok_force": "Trotzdem löschen",
"delete_others": "Andere löschen", "delete_others": "Andere löschen",
"delete_permanently": "Endgültig löschen",
"delete_permanently_action_prompt": "{count} endgültig gelöscht",
"delete_shared_link": "geteilten Link löschen", "delete_shared_link": "geteilten Link löschen",
"delete_shared_link_dialog_title": "Geteilten Link löschen", "delete_shared_link_dialog_title": "Geteilten Link löschen",
"delete_tag": "Tag löschen", "delete_tag": "Tag löschen",
@@ -784,7 +744,6 @@
"description": "Beschreibung", "description": "Beschreibung",
"description_input_hint_text": "Beschreibung hinzufügen...", "description_input_hint_text": "Beschreibung hinzufügen...",
"description_input_submit_error": "Beschreibung konnte nicht geändert werden, bitte im Log für mehr Details nachsehen", "description_input_submit_error": "Beschreibung konnte nicht geändert werden, bitte im Log für mehr Details nachsehen",
"deselect_all": "Alle abwählen",
"details": "Details", "details": "Details",
"direction": "Richtung", "direction": "Richtung",
"disabled": "Deaktiviert", "disabled": "Deaktiviert",
@@ -802,7 +761,6 @@
"documentation": "Dokumentation", "documentation": "Dokumentation",
"done": "Fertig", "done": "Fertig",
"download": "Herunterladen", "download": "Herunterladen",
"download_action_prompt": "Herunterladen von {count} Dateien",
"download_canceled": "Download abgebrochen", "download_canceled": "Download abgebrochen",
"download_complete": "Download vollständig", "download_complete": "Download vollständig",
"download_enqueue": "Download in die Warteschlange gesetzt", "download_enqueue": "Download in die Warteschlange gesetzt",
@@ -829,7 +787,6 @@
"edit": "Bearbeiten", "edit": "Bearbeiten",
"edit_album": "Album bearbeiten", "edit_album": "Album bearbeiten",
"edit_avatar": "Avatar bearbeiten", "edit_avatar": "Avatar bearbeiten",
"edit_birthday": "Geburtsdatum bearbeiten",
"edit_date": "Datum bearbeiten", "edit_date": "Datum bearbeiten",
"edit_date_and_time": "Datum und Uhrzeit bearbeiten", "edit_date_and_time": "Datum und Uhrzeit bearbeiten",
"edit_description": "Beschreibung bearbeiten", "edit_description": "Beschreibung bearbeiten",
@@ -841,7 +798,6 @@
"edit_key": "Schlüssel bearbeiten", "edit_key": "Schlüssel bearbeiten",
"edit_link": "Link bearbeiten", "edit_link": "Link bearbeiten",
"edit_location": "Standort bearbeiten", "edit_location": "Standort bearbeiten",
"edit_location_action_prompt": "{count} Geolokationen angepasst",
"edit_location_dialog_title": "Ort bearbeiten", "edit_location_dialog_title": "Ort bearbeiten",
"edit_name": "Name bearbeiten", "edit_name": "Name bearbeiten",
"edit_people": "Personen bearbeiten", "edit_people": "Personen bearbeiten",
@@ -860,7 +816,6 @@
"empty_trash": "Papierkorb leeren", "empty_trash": "Papierkorb leeren",
"empty_trash_confirmation": "Bist du sicher, dass du den Papierkorb leeren willst?\nDies entfernt alle Dateien im Papierkorb endgültig aus Immich und kann nicht rückgängig gemacht werden!", "empty_trash_confirmation": "Bist du sicher, dass du den Papierkorb leeren willst?\nDies entfernt alle Dateien im Papierkorb endgültig aus Immich und kann nicht rückgängig gemacht werden!",
"enable": "Aktivieren", "enable": "Aktivieren",
"enable_backup": "Sicherung aktivieren",
"enable_biometric_auth_description": "Gib deinen PIN Code ein, um die biometrische Authentifizierung zu aktivieren", "enable_biometric_auth_description": "Gib deinen PIN Code ein, um die biometrische Authentifizierung zu aktivieren",
"enabled": "Aktiviert", "enabled": "Aktiviert",
"end_date": "Enddatum", "end_date": "Enddatum",
@@ -997,7 +952,6 @@
}, },
"exif": "EXIF", "exif": "EXIF",
"exif_bottom_sheet_description": "Beschreibung hinzufügen...", "exif_bottom_sheet_description": "Beschreibung hinzufügen...",
"exif_bottom_sheet_description_error": "Fehler bei der Aktualisierung der Beschreibung",
"exif_bottom_sheet_details": "DETAILS", "exif_bottom_sheet_details": "DETAILS",
"exif_bottom_sheet_location": "STANDORT", "exif_bottom_sheet_location": "STANDORT",
"exif_bottom_sheet_people": "PERSONEN", "exif_bottom_sheet_people": "PERSONEN",
@@ -1018,8 +972,6 @@
"explorer": "Datei-Explorer", "explorer": "Datei-Explorer",
"export": "Exportieren", "export": "Exportieren",
"export_as_json": "Als JSON exportieren", "export_as_json": "Als JSON exportieren",
"export_database": "Datenbank exportieren",
"export_database_description": "Exportiert die SQLite Datenbank",
"extension": "Erweiterung", "extension": "Erweiterung",
"external": "Extern", "external": "Extern",
"external_libraries": "Externe Bibliotheken", "external_libraries": "Externe Bibliotheken",
@@ -1031,7 +983,6 @@
"failed_to_load_assets": "Laden der Assets fehlgeschlagen", "failed_to_load_assets": "Laden der Assets fehlgeschlagen",
"failed_to_load_folder": "Fehler beim Laden des Ordners", "failed_to_load_folder": "Fehler beim Laden des Ordners",
"favorite": "Favorit", "favorite": "Favorit",
"favorite_action_prompt": "{count} zu den Favoriten hinzugefügt",
"favorite_or_unfavorite_photo": "Favorisiertes oder nicht favorisiertes Foto", "favorite_or_unfavorite_photo": "Favorisiertes oder nicht favorisiertes Foto",
"favorites": "Favoriten", "favorites": "Favoriten",
"favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden", "favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden",
@@ -1071,9 +1022,6 @@
"haptic_feedback_switch": "Haptisches Feedback aktivieren", "haptic_feedback_switch": "Haptisches Feedback aktivieren",
"haptic_feedback_title": "Haptisches Feedback", "haptic_feedback_title": "Haptisches Feedback",
"has_quota": "Kontingent", "has_quota": "Kontingent",
"hash_asset": "Dateihash",
"hashed_assets": "Gehashte Dateien",
"hashing": "Hashen",
"header_settings_add_header_tip": "Header hinzufügen", "header_settings_add_header_tip": "Header hinzufügen",
"header_settings_field_validator_msg": "Der Wert darf nicht leer sein", "header_settings_field_validator_msg": "Der Wert darf nicht leer sein",
"header_settings_header_name_input": "Header-Name", "header_settings_header_name_input": "Header-Name",
@@ -1095,7 +1043,7 @@
"home_page_archive_err_partner": "Inhalte von Partnern können nicht archiviert werden", "home_page_archive_err_partner": "Inhalte von Partnern können nicht archiviert werden",
"home_page_building_timeline": "Zeitachse wird erstellt", "home_page_building_timeline": "Zeitachse wird erstellt",
"home_page_delete_err_partner": "Inhalte von Partnern können nicht gelöscht werden, überspringe", "home_page_delete_err_partner": "Inhalte von Partnern können nicht gelöscht werden, überspringe",
"home_page_delete_remote_err_local": "Lokale Elemente in der Auswahl zum Entfernen von Remote-Elementen, Überspringe", "home_page_delete_remote_err_local": "Lokale Inhalte in der Auswahl, überspringen",
"home_page_favorite_err_local": "Kann lokale Elemente noch nicht favorisieren, überspringen", "home_page_favorite_err_local": "Kann lokale Elemente noch nicht favorisieren, überspringen",
"home_page_favorite_err_partner": "Inhalte von Partnern können nicht favorisiert werden, überspringe", "home_page_favorite_err_partner": "Inhalte von Partnern können nicht favorisiert werden, überspringe",
"home_page_first_time_notice": "Wenn dies das erste Mal ist dass Du Immich nutzt, stelle bitte sicher, dass mindestens ein Album zur Sicherung ausgewählt ist, sodass die Zeitachse mit Fotos und Videos gefüllt werden kann", "home_page_first_time_notice": "Wenn dies das erste Mal ist dass Du Immich nutzt, stelle bitte sicher, dass mindestens ein Album zur Sicherung ausgewählt ist, sodass die Zeitachse mit Fotos und Videos gefüllt werden kann",
@@ -1106,7 +1054,6 @@
"host": "Host", "host": "Host",
"hour": "Stunde", "hour": "Stunde",
"id": "ID", "id": "ID",
"idle": "Untätig",
"ignore_icloud_photos": "iCloud Fotos ignorieren", "ignore_icloud_photos": "iCloud Fotos ignorieren",
"ignore_icloud_photos_description": "Fotos, die in der iCloud gespeichert sind, werden nicht auf den immich Server hochgeladen", "ignore_icloud_photos_description": "Fotos, die in der iCloud gespeichert sind, werden nicht auf den immich Server hochgeladen",
"image": "Bild", "image": "Bild",
@@ -1164,7 +1111,6 @@
"language_no_results_title": "Keine Sprachen gefunden", "language_no_results_title": "Keine Sprachen gefunden",
"language_search_hint": "Sprachen durchsuchen...", "language_search_hint": "Sprachen durchsuchen...",
"language_setting_description": "Wähle deine bevorzugte Sprache", "language_setting_description": "Wähle deine bevorzugte Sprache",
"large_files": "Große Dateien",
"last_seen": "Zuletzt gesehen", "last_seen": "Zuletzt gesehen",
"latest_version": "Aktuellste Version", "latest_version": "Aktuellste Version",
"latitude": "Breitengrad", "latitude": "Breitengrad",
@@ -1180,18 +1126,16 @@
"library_page_sort_created": "Zuletzt erstellt", "library_page_sort_created": "Zuletzt erstellt",
"library_page_sort_last_modified": "Zuletzt bearbeitet", "library_page_sort_last_modified": "Zuletzt bearbeitet",
"library_page_sort_title": "Titel des Albums", "library_page_sort_title": "Titel des Albums",
"licenses": "Lizenzen",
"light": "Hell", "light": "Hell",
"like_deleted": "Like gelöscht", "like_deleted": "Like gelöscht",
"link_motion_video": "Bewegungsvideo verknüpfen", "link_motion_video": "Bewegungsvideo verknüpfen",
"link_options": "Link-Optionen",
"link_to_oauth": "Mit OAuth verknüpfen", "link_to_oauth": "Mit OAuth verknüpfen",
"linked_oauth_account": "Verknüpftes OAuth-Konto", "linked_oauth_account": "Verknüpftes OAuth-Konto",
"list": "Liste", "list": "Liste",
"loading": "Laden", "loading": "Laden",
"loading_search_results_failed": "Laden von Suchergebnissen fehlgeschlagen", "loading_search_results_failed": "Laden von Suchergebnissen fehlgeschlagen",
"local": "Lokal",
"local_asset_cast_failed": "Eine Datei, die nicht auf den Server hochgeladen wurde, kann nicht gecastet werden", "local_asset_cast_failed": "Eine Datei, die nicht auf den Server hochgeladen wurde, kann nicht gecastet werden",
"local_assets": "Lokale Dateien",
"local_network": "Lokales Netzwerk", "local_network": "Lokales Netzwerk",
"local_network_sheet_info": "Die App stellt über diese URL eine Verbindung zum Server her, wenn sie das angegebene WLAN-Netzwerk verwendet", "local_network_sheet_info": "Die App stellt über diese URL eine Verbindung zum Server her, wenn sie das angegebene WLAN-Netzwerk verwendet",
"location_permission": "Standort Genehmigung", "location_permission": "Standort Genehmigung",
@@ -1248,7 +1192,8 @@
"manage_your_devices": "Deine eingeloggten Geräte verwalten", "manage_your_devices": "Deine eingeloggten Geräte verwalten",
"manage_your_oauth_connection": "Deine OAuth-Verknüpfung verwalten", "manage_your_oauth_connection": "Deine OAuth-Verknüpfung verwalten",
"map": "Karte", "map": "Karte",
"map_assets_in_bounds": "{count, plural, one {# Foto} other {# Fotos}}", "map_assets_in_bound": "{count} Foto",
"map_assets_in_bounds": "{count} Fotos",
"map_cannot_get_user_location": "Standort konnte nicht ermittelt werden", "map_cannot_get_user_location": "Standort konnte nicht ermittelt werden",
"map_location_dialog_yes": "Ja", "map_location_dialog_yes": "Ja",
"map_location_picker_page_use_location": "Aufnahmeort verwenden", "map_location_picker_page_use_location": "Aufnahmeort verwenden",
@@ -1300,7 +1245,6 @@
"more": "Mehr", "more": "Mehr",
"move": "Verschieben", "move": "Verschieben",
"move_off_locked_folder": "Aus dem gesperrten Ordner verschieben", "move_off_locked_folder": "Aus dem gesperrten Ordner verschieben",
"move_to_lock_folder_action_prompt": "{count} zum gesperrten Ordner hinzugefügt",
"move_to_locked_folder": "In den gesperrten Ordner verschieben", "move_to_locked_folder": "In den gesperrten Ordner verschieben",
"move_to_locked_folder_confirmation": "Diese Fotos und Videos werden aus allen Alben entfernt und können nur noch im gesperrten Ordner angezeigt werden", "move_to_locked_folder_confirmation": "Diese Fotos und Videos werden aus allen Alben entfernt und können nur noch im gesperrten Ordner angezeigt werden",
"moved_to_archive": "{count, plural, one {# Datei} other {# Dateien}} archiviert", "moved_to_archive": "{count, plural, one {# Datei} other {# Dateien}} archiviert",
@@ -1347,7 +1291,6 @@
"no_results": "Keine Ergebnisse", "no_results": "Keine Ergebnisse",
"no_results_description": "Versuche es mit einem Synonym oder einem allgemeineren Stichwort", "no_results_description": "Versuche es mit einem Synonym oder einem allgemeineren Stichwort",
"no_shared_albums_message": "Erstelle ein Album, um Fotos und Videos mit Personen in deinem Netzwerk zu teilen", "no_shared_albums_message": "Erstelle ein Album, um Fotos und Videos mit Personen in deinem Netzwerk zu teilen",
"no_uploads_in_progress": "Kein Upload in Bearbeitung",
"not_in_any_album": "In keinem Album", "not_in_any_album": "In keinem Album",
"not_selected": "Nicht ausgewählt", "not_selected": "Nicht ausgewählt",
"note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um eine Speicherpfadbezeichnung anzuwenden, starte den", "note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um eine Speicherpfadbezeichnung anzuwenden, starte den",
@@ -1385,7 +1328,6 @@
"original": "Original", "original": "Original",
"other": "Sonstiges", "other": "Sonstiges",
"other_devices": "Andere Geräte", "other_devices": "Andere Geräte",
"other_entities": "Andere Entitäten",
"other_variables": "Sonstige Variablen", "other_variables": "Sonstige Variablen",
"owned": "Eigenes", "owned": "Eigenes",
"owner": "Besitzer", "owner": "Besitzer",
@@ -1517,7 +1459,6 @@
"purchase_server_description_2": "Unterstützerstatus", "purchase_server_description_2": "Unterstützerstatus",
"purchase_server_title": "Server", "purchase_server_title": "Server",
"purchase_settings_server_activated": "Der Server-Produktschlüssel wird durch den Administrator verwaltet", "purchase_settings_server_activated": "Der Server-Produktschlüssel wird durch den Administrator verwaltet",
"queue_status": "Warteschlange {count}/{total}",
"rating": "Bewertung", "rating": "Bewertung",
"rating_clear": "Bewertung löschen", "rating_clear": "Bewertung löschen",
"rating_count": "{count, plural, one {# Stern} other {# Sterne}}", "rating_count": "{count, plural, one {# Stern} other {# Sterne}}",
@@ -1546,8 +1487,6 @@
"refreshing_faces": "Gesichter werden aktualisiert", "refreshing_faces": "Gesichter werden aktualisiert",
"refreshing_metadata": "Metadaten werden aktualisiert", "refreshing_metadata": "Metadaten werden aktualisiert",
"regenerating_thumbnails": "Miniaturansichten werden neu erstellt", "regenerating_thumbnails": "Miniaturansichten werden neu erstellt",
"remote": "Server",
"remote_assets": "Server-Dateien",
"remove": "Entfernen", "remove": "Entfernen",
"remove_assets_album_confirmation": "Bist du sicher, dass du {count, plural, one {# Datei} other {# Dateien}} aus dem Album entfernen willst?", "remove_assets_album_confirmation": "Bist du sicher, dass du {count, plural, one {# Datei} other {# Dateien}} aus dem Album entfernen willst?",
"remove_assets_shared_link_confirmation": "Bist du sicher, dass du {count, plural, one {# Datei} other {# Dateien}} von diesem geteilten Link entfernen willst?", "remove_assets_shared_link_confirmation": "Bist du sicher, dass du {count, plural, one {# Datei} other {# Dateien}} von diesem geteilten Link entfernen willst?",
@@ -1555,9 +1494,7 @@
"remove_custom_date_range": "Benutzerdefinierten Datumsbereich entfernen", "remove_custom_date_range": "Benutzerdefinierten Datumsbereich entfernen",
"remove_deleted_assets": "Offline-Dateien entfernen", "remove_deleted_assets": "Offline-Dateien entfernen",
"remove_from_album": "Aus Album entfernen", "remove_from_album": "Aus Album entfernen",
"remove_from_album_action_prompt": "{count} vom Album entfernt",
"remove_from_favorites": "Aus Favoriten entfernen", "remove_from_favorites": "Aus Favoriten entfernen",
"remove_from_lock_folder_action_prompt": "{count} aus dem gesperrten Ordner entfernt",
"remove_from_locked_folder": "Aus gesperrtem Ordner entfernen", "remove_from_locked_folder": "Aus gesperrtem Ordner entfernen",
"remove_from_locked_folder_confirmation": "Bist du sicher, dass du diese Fotos und Videos aus dem gesperrten Ordner entfernen möchtest? Sie werden wieder in deiner Bibliothek sichtbar sein.", "remove_from_locked_folder_confirmation": "Bist du sicher, dass du diese Fotos und Videos aus dem gesperrten Ordner entfernen möchtest? Sie werden wieder in deiner Bibliothek sichtbar sein.",
"remove_from_shared_link": "Aus geteiltem Link entfernen", "remove_from_shared_link": "Aus geteiltem Link entfernen",
@@ -1585,25 +1522,19 @@
"reset_password": "Passwort zurücksetzen", "reset_password": "Passwort zurücksetzen",
"reset_people_visibility": "Sichtbarkeit von Personen zurücksetzen", "reset_people_visibility": "Sichtbarkeit von Personen zurücksetzen",
"reset_pin_code": "PIN Code zurücksetzen", "reset_pin_code": "PIN Code zurücksetzen",
"reset_sqlite": "SQLite Datenbank zurücksetzen",
"reset_sqlite_confirmation": "Bist du sicher, dass du die SQLite-Datenbank zurücksetzen willst? Du musst dich ab- und wieder anmelden, um die Daten neu zu synchronisieren",
"reset_sqlite_success": "SQLite Datenbank erfolgreich zurückgesetzt",
"reset_to_default": "Auf Standard zurücksetzen", "reset_to_default": "Auf Standard zurücksetzen",
"resolve_duplicates": "Duplikate entfernen", "resolve_duplicates": "Duplikate entfernen",
"resolved_all_duplicates": "Alle Duplikate aufgelöst", "resolved_all_duplicates": "Alle Duplikate aufgelöst",
"restore": "Wiederherstellen", "restore": "Wiederherstellen",
"restore_all": "Alle wiederherstellen", "restore_all": "Alle wiederherstellen",
"restore_trash_action_prompt": "{count} aus dem Papierkorb wiederhergestellt",
"restore_user": "Nutzer wiederherstellen", "restore_user": "Nutzer wiederherstellen",
"restored_asset": "Datei wiederhergestellt", "restored_asset": "Datei wiederhergestellt",
"resume": "Fortsetzen", "resume": "Fortsetzen",
"retry_upload": "Upload wiederholen", "retry_upload": "Upload wiederholen",
"review_duplicates": "Duplikate überprüfen", "review_duplicates": "Duplikate überprüfen",
"review_large_files": "Große Dateien überprüfen",
"role": "Rolle", "role": "Rolle",
"role_editor": "Bearbeiter", "role_editor": "Bearbeiter",
"role_viewer": "Betrachter", "role_viewer": "Betrachter",
"running": "Läuft",
"save": "Speichern", "save": "Speichern",
"save_to_gallery": "In Galerie speichern", "save_to_gallery": "In Galerie speichern",
"saved_api_key": "API-Schlüssel wurde gespeichert", "saved_api_key": "API-Schlüssel wurde gespeichert",
@@ -1735,7 +1666,6 @@
"settings_saved": "Einstellungen gespeichert", "settings_saved": "Einstellungen gespeichert",
"setup_pin_code": "Einen PIN Code festlegen", "setup_pin_code": "Einen PIN Code festlegen",
"share": "Teilen", "share": "Teilen",
"share_action_prompt": "{count} Dateien geteilt",
"share_add_photos": "Fotos hinzufügen", "share_add_photos": "Fotos hinzufügen",
"share_assets_selected": "{count} ausgewählt", "share_assets_selected": "{count} ausgewählt",
"share_dialog_preparing": "Vorbereiten...", "share_dialog_preparing": "Vorbereiten...",
@@ -1757,7 +1687,6 @@
"shared_link_clipboard_copied_massage": "Link kopiert", "shared_link_clipboard_copied_massage": "Link kopiert",
"shared_link_clipboard_text": "Link: {link}\nPasswort: {password}", "shared_link_clipboard_text": "Link: {link}\nPasswort: {password}",
"shared_link_create_error": "Fehler beim Erstellen der Linkfreigabe", "shared_link_create_error": "Fehler beim Erstellen der Linkfreigabe",
"shared_link_custom_url_description": "Greife über eine benutzerdefinierte URL auf diesen Freigabelink zu",
"shared_link_edit_description_hint": "Beschreibung eingeben", "shared_link_edit_description_hint": "Beschreibung eingeben",
"shared_link_edit_expire_after_option_day": "1 Tag", "shared_link_edit_expire_after_option_day": "1 Tag",
"shared_link_edit_expire_after_option_days": "{count} Tagen", "shared_link_edit_expire_after_option_days": "{count} Tagen",
@@ -1783,7 +1712,6 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Geteilte Links verwalten", "shared_link_manage_links": "Geteilte Links verwalten",
"shared_link_options": "Optionen für geteilten Link", "shared_link_options": "Optionen für geteilten Link",
"shared_link_password_description": "Für den Zugriff auf diesen freigegebenen Link ist ein Passwort erforderlich",
"shared_links": "Geteilte Links", "shared_links": "Geteilte Links",
"shared_links_description": "Teile Fotos und Videos mit einem Link", "shared_links_description": "Teile Fotos und Videos mit einem Link",
"shared_photos_and_videos_count": "{assetCount, plural, one {# geteiltes Foto oder Video.} other {# geteilte Fotos & Videos.}}", "shared_photos_and_videos_count": "{assetCount, plural, one {# geteiltes Foto oder Video.} other {# geteilte Fotos & Videos.}}",
@@ -1839,7 +1767,6 @@
"sort_title": "Titel", "sort_title": "Titel",
"source": "Quellcode", "source": "Quellcode",
"stack": "Stapel", "stack": "Stapel",
"stack_action_prompt": "{count} gestapelt",
"stack_duplicates": "Duplikate stapeln", "stack_duplicates": "Duplikate stapeln",
"stack_select_one_photo": "Hauptfoto für den Stapel auswählen", "stack_select_one_photo": "Hauptfoto für den Stapel auswählen",
"stack_selected_photos": "Ausgewählte Fotos stapeln", "stack_selected_photos": "Ausgewählte Fotos stapeln",
@@ -1859,7 +1786,6 @@
"storage_quota": "Speicherplatz-Kontingent", "storage_quota": "Speicherplatz-Kontingent",
"storage_usage": "{used} von {available} verwendet", "storage_usage": "{used} von {available} verwendet",
"submit": "Bestätigen", "submit": "Bestätigen",
"success": "Erfolgreich",
"suggestions": "Vorschläge", "suggestions": "Vorschläge",
"sunrise_on_the_beach": "Sonnenaufgang am Strand", "sunrise_on_the_beach": "Sonnenaufgang am Strand",
"support": "Unterstützung", "support": "Unterstützung",
@@ -1869,8 +1795,6 @@
"sync": "Synchronisieren", "sync": "Synchronisieren",
"sync_albums": "Alben synchronisieren", "sync_albums": "Alben synchronisieren",
"sync_albums_manual_subtitle": "Synchronisiere alle hochgeladenen Videos und Fotos in die ausgewählten Backup-Alben", "sync_albums_manual_subtitle": "Synchronisiere alle hochgeladenen Videos und Fotos in die ausgewählten Backup-Alben",
"sync_local": "Lokal synchronisieren",
"sync_remote": "mit Server synchronisieren",
"sync_upload_album_setting_subtitle": "Erstelle deine ausgewählten Alben in Immich und lade die Fotos und Videos dort hoch", "sync_upload_album_setting_subtitle": "Erstelle deine ausgewählten Alben in Immich und lade die Fotos und Videos dort hoch",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Dateien taggen", "tag_assets": "Dateien taggen",
@@ -1881,12 +1805,11 @@
"tag_updated": "Tag aktualisiert: {tag}", "tag_updated": "Tag aktualisiert: {tag}",
"tagged_assets": "{count, plural, one {# Datei} other {# Dateien}} getagged", "tagged_assets": "{count, plural, one {# Datei} other {# Dateien}} getagged",
"tags": "Tags", "tags": "Tags",
"tap_to_run_job": "Tippen um den Job zu starten",
"template": "Vorlage", "template": "Vorlage",
"theme": "Theme", "theme": "Theme",
"theme_selection": "Themenauswahl", "theme_selection": "Themenauswahl",
"theme_selection_description": "Automatische Einstellung des Themes auf Hell oder Dunkel, je nach Systemeinstellung des Browsers", "theme_selection_description": "Automatische Einstellung des Themes auf Hell oder Dunkel, je nach Systemeinstellung des Browsers",
"theme_setting_asset_list_storage_indicator_title": "Fortschrittsbalken der Sicherung auf dem Vorschaubild", "theme_setting_asset_list_storage_indicator_title": "Forschrittsbalken der Sicherung auf dem Vorschaubild",
"theme_setting_asset_list_tiles_per_row_title": "Anzahl der Elemente pro Reihe ({count})", "theme_setting_asset_list_tiles_per_row_title": "Anzahl der Elemente pro Reihe ({count})",
"theme_setting_colorful_interface_subtitle": "Primärfarbe auf App-Hintergrund anwenden.", "theme_setting_colorful_interface_subtitle": "Primärfarbe auf App-Hintergrund anwenden.",
"theme_setting_colorful_interface_title": "Farbige UI-Oberfläche", "theme_setting_colorful_interface_title": "Farbige UI-Oberfläche",
@@ -1914,7 +1837,6 @@
"total": "Gesamt", "total": "Gesamt",
"total_usage": "Gesamtnutzung", "total_usage": "Gesamtnutzung",
"trash": "Papierkorb", "trash": "Papierkorb",
"trash_action_prompt": "{count} in den Papierkorb verschoben",
"trash_all": "Alle löschen", "trash_all": "Alle löschen",
"trash_count": "Papierkorb {count, number}", "trash_count": "Papierkorb {count, number}",
"trash_delete_asset": "Datei löschen/in den Papierkorb verschieben", "trash_delete_asset": "Datei löschen/in den Papierkorb verschieben",
@@ -1932,11 +1854,9 @@
"unable_to_change_pin_code": "PIN Code konnte nicht geändert werden", "unable_to_change_pin_code": "PIN Code konnte nicht geändert werden",
"unable_to_setup_pin_code": "PIN Code konnte nicht festgelegt werden", "unable_to_setup_pin_code": "PIN Code konnte nicht festgelegt werden",
"unarchive": "Entarchivieren", "unarchive": "Entarchivieren",
"unarchive_action_prompt": "{count} aus dem Archiv entfernt",
"unarchived_count": "{count, plural, other {# entarchiviert}}", "unarchived_count": "{count, plural, other {# entarchiviert}}",
"undo": "Rückgängig", "undo": "Rückgängig",
"unfavorite": "Entfavorisieren", "unfavorite": "Entfavorisieren",
"unfavorite_action_prompt": "{count} aus den Favoriten entfernt",
"unhide_person": "Person einblenden", "unhide_person": "Person einblenden",
"unknown": "Unbekannt", "unknown": "Unbekannt",
"unknown_country": "Unbekanntes Land", "unknown_country": "Unbekanntes Land",
@@ -1954,20 +1874,15 @@
"unselect_all_duplicates": "Alle Duplikate abwählen", "unselect_all_duplicates": "Alle Duplikate abwählen",
"unselect_all_in": "Alle in {group} abwählen", "unselect_all_in": "Alle in {group} abwählen",
"unstack": "Entstapeln", "unstack": "Entstapeln",
"unstack_action_prompt": "{count} entstapelt",
"unstacked_assets_count": "{count, plural, one {# Datei} other {# Dateien}} entstapelt", "unstacked_assets_count": "{count, plural, one {# Datei} other {# Dateien}} entstapelt",
"untagged": "Ohne Tag",
"up_next": "Weiter", "up_next": "Weiter",
"updated_at": "Aktualisiert", "updated_at": "Aktualisiert",
"updated_password": "Passwort aktualisiert", "updated_password": "Passwort aktualisiert",
"upload": "Hochladen", "upload": "Hochladen",
"upload_action_prompt": "{count} in der Warteschlange für Upload",
"upload_concurrency": "Parallelität beim Hochladen", "upload_concurrency": "Parallelität beim Hochladen",
"upload_details": "Upload Details",
"upload_dialog_info": "Willst du die ausgewählten Elemente auf dem Server sichern?", "upload_dialog_info": "Willst du die ausgewählten Elemente auf dem Server sichern?",
"upload_dialog_title": "Element hochladen", "upload_dialog_title": "Element hochladen",
"upload_errors": "Hochladen mit {count, plural, one {# Fehler} other {# Fehlern}} abgeschlossen, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.", "upload_errors": "Hochladen mit {count, plural, one {# Fehler} other {# Fehlern}} abgeschlossen, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.",
"upload_finished": "Upload fertig",
"upload_progress": "{remaining, number} verbleibend - {processed, number}/{total, number} verarbeitet", "upload_progress": "{remaining, number} verbleibend - {processed, number}/{total, number} verarbeitet",
"upload_skipped_duplicates": "{count, plural, one {# doppelte Datei} other {# doppelte Dateien}} ausgelassen", "upload_skipped_duplicates": "{count, plural, one {# doppelte Datei} other {# doppelte Dateien}} ausgelassen",
"upload_status_duplicates": "Duplikate", "upload_status_duplicates": "Duplikate",
@@ -1976,7 +1891,6 @@
"upload_success": "Hochladen erfolgreich. Aktualisiere die Seite, um neue hochgeladene Dateien zu sehen.", "upload_success": "Hochladen erfolgreich. Aktualisiere die Seite, um neue hochgeladene Dateien zu sehen.",
"upload_to_immich": "Auf Immich hochladen ({count})", "upload_to_immich": "Auf Immich hochladen ({count})",
"uploading": "Wird hochgeladen", "uploading": "Wird hochgeladen",
"uploading_media": "Medien werden hochgeladen",
"url": "URL", "url": "URL",
"usage": "Verwendung", "usage": "Verwendung",
"use_biometric": "Biometrie verwenden", "use_biometric": "Biometrie verwenden",
@@ -1997,7 +1911,6 @@
"user_usage_stats_description": "Statistiken zur Kontonutzung anzeigen", "user_usage_stats_description": "Statistiken zur Kontonutzung anzeigen",
"username": "Nutzername", "username": "Nutzername",
"users": "Benutzer", "users": "Benutzer",
"users_added_to_album_count": "{count, plural, one {# Benutzer} other {# Benutzer}} zum Album hinzugefügt",
"utilities": "Hilfsmittel", "utilities": "Hilfsmittel",
"validate": "Validieren", "validate": "Validieren",
"validate_endpoint_error": "Bitte gib eine gültige URL ein", "validate_endpoint_error": "Bitte gib eine gültige URL ein",
@@ -2016,7 +1929,6 @@
"view_album": "Album anzeigen", "view_album": "Album anzeigen",
"view_all": "Alles anzeigen", "view_all": "Alles anzeigen",
"view_all_users": "Alle Nutzer anzeigen", "view_all_users": "Alle Nutzer anzeigen",
"view_details": "Details ansehen",
"view_in_timeline": "In Zeitleiste anzeigen", "view_in_timeline": "In Zeitleiste anzeigen",
"view_link": "Link anzeigen", "view_link": "Link anzeigen",
"view_links": "Links anzeigen", "view_links": "Links anzeigen",

View File

@@ -166,20 +166,6 @@
"metadata_settings_description": "Διαχείρηση ρυθμίσεων μεταδεδομένων", "metadata_settings_description": "Διαχείρηση ρυθμίσεων μεταδεδομένων",
"migration_job": "Μεταφορά δεδομένων (Migration)", "migration_job": "Μεταφορά δεδομένων (Migration)",
"migration_job_description": "Μεταφορά των εικονιδίων για αρχεία και πρόσωπα στην πιο πρόσφατη δομή αρχείων", "migration_job_description": "Μεταφορά των εικονιδίων για αρχεία και πρόσωπα στην πιο πρόσφατη δομή αρχείων",
"nightly_tasks_cluster_faces_setting_description": "Εκτέλεση αναγνώρισης προσώπου σε νέα ανιχνευμένα πρόσωπα",
"nightly_tasks_cluster_new_faces_setting": "Ομαδοποίηση νέων προσώπων",
"nightly_tasks_database_cleanup_setting": "Εργασίες καθαρισμού βάσης δεδομένων",
"nightly_tasks_database_cleanup_setting_description": "Εκκαθάριση παλιών και ληγμένων δεδομένων από τη βάση δεδομένων",
"nightly_tasks_generate_memories_setting": "Δημιουργία αναμνήσεων",
"nightly_tasks_generate_memories_setting_description": "Δημιουργία νέων αναμνήσεων από αντικείμενα",
"nightly_tasks_missing_thumbnails_setting": "Δημιουργία ελλειπόντων μικρογραφιών",
"nightly_tasks_missing_thumbnails_setting_description": "Τοποθέτηση στη ουρά των αρχείων χωρίς μικρογραφίες για δημιουργία μικρογραφιών",
"nightly_tasks_settings": "Ρυθμίσεις για τις νυχτερινές εργασίες",
"nightly_tasks_settings_description": "Διαχείριση νυχτερινών εργασιών",
"nightly_tasks_start_time_setting": "Ώρα έναρξης",
"nightly_tasks_start_time_setting_description": "Η ώρα κατά την οποία ο διακομιστής ξεκινάει να εκτελεί τις νυχτερινές εργασίες",
"nightly_tasks_sync_quota_usage_setting": "Συγχρονισμός χρήσης χώρου",
"nightly_tasks_sync_quota_usage_setting_description": "Ενημέρωση του διαθέσιμου χώρου χρήστη, με βάση την τρέχουσα χρήση",
"no_paths_added": "Δεν προστέθηκαν διαδρομές", "no_paths_added": "Δεν προστέθηκαν διαδρομές",
"no_pattern_added": "Δεν προστέθηκε μοτίβο", "no_pattern_added": "Δεν προστέθηκε μοτίβο",
"note_apply_storage_label_previous_assets": "Σημείωση: Για να εφαρμοστεί η Ετικέτα Αποθήκευσης σε στοιχεία που είχαν αναρτηθεί παλαιότερα, εκτέλεσε το", "note_apply_storage_label_previous_assets": "Σημείωση: Για να εφαρμοστεί η Ετικέτα Αποθήκευσης σε στοιχεία που είχαν αναρτηθεί παλαιότερα, εκτέλεσε το",
@@ -210,8 +196,6 @@
"oauth_mobile_redirect_uri": "URI Ανακατεύθυνσης για κινητά τηλέφωνα", "oauth_mobile_redirect_uri": "URI Ανακατεύθυνσης για κινητά τηλέφωνα",
"oauth_mobile_redirect_uri_override": "Προσπέλαση URI ανακατεύθυνσης για κινητά τηλέφωνα", "oauth_mobile_redirect_uri_override": "Προσπέλαση URI ανακατεύθυνσης για κινητά τηλέφωνα",
"oauth_mobile_redirect_uri_override_description": "Ενεργοποιήστε το όταν ο πάροχος OAuth δεν επιτρέπει μια URI για κινητά, όπως το ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Ενεργοποιήστε το όταν ο πάροχος OAuth δεν επιτρέπει μια URI για κινητά, όπως το ''{callback}''",
"oauth_role_claim": "Ανάθεση ρόλου",
"oauth_role_claim_description": "Αυτόματη παραχώρηση πρόσβασης διαχειριστή με βάση την ύπαρξη αυτής της ανάθεσης. Η ανάθεση μπορεί να είναι είτε 'χρήστης' είτε 'διαχειριστής'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Διαχείριση ρυθμίσεων σύνδεσης OAuth", "oauth_settings_description": "Διαχείριση ρυθμίσεων σύνδεσης OAuth",
"oauth_settings_more_details": "Για περισσότερες λεπτομέρειες σχετικά με αυτήν τη δυνατότητα, ανατρέξτε στην <link>τεκμηρίωση</link>.", "oauth_settings_more_details": "Για περισσότερες λεπτομέρειες σχετικά με αυτήν τη δυνατότητα, ανατρέξτε στην <link>τεκμηρίωση</link>.",
@@ -373,12 +357,10 @@
"admin_password": "Κωδικός πρόσβασης Διαχειριστή", "admin_password": "Κωδικός πρόσβασης Διαχειριστή",
"administration": "Διαχείριση", "administration": "Διαχείριση",
"advanced": "Για προχωρημένους", "advanced": "Για προχωρημένους",
"advanced_settings_beta_timeline_subtitle": "Δοκίμασε τη νέα εμπειρία της εφαρμογής",
"advanced_settings_beta_timeline_title": "Δοκιμαστικό χρονολόγιο",
"advanced_settings_enable_alternate_media_filter_subtitle": "Χρησιμοποιήστε αυτήν την επιλογή για να φιλτράρετε τα μέσα ενημέρωσης κατά τον συγχρονισμό με βάση εναλλακτικά κριτήρια. Δοκιμάστε αυτή τη δυνατότητα μόνο αν έχετε προβλήματα με την εφαρμογή που εντοπίζει όλα τα άλμπουμ.", "advanced_settings_enable_alternate_media_filter_subtitle": "Χρησιμοποιήστε αυτήν την επιλογή για να φιλτράρετε τα μέσα ενημέρωσης κατά τον συγχρονισμό με βάση εναλλακτικά κριτήρια. Δοκιμάστε αυτή τη δυνατότητα μόνο αν έχετε προβλήματα με την εφαρμογή που εντοπίζει όλα τα άλμπουμ.",
"advanced_settings_enable_alternate_media_filter_title": "[ΠΕΙΡΑΜΑΤΙΚΟ] Χρήση εναλλακτικού φίλτρου συγχρονισμού άλμπουμ συσκευής", "advanced_settings_enable_alternate_media_filter_title": "[ΠΕΙΡΑΜΑΤΙΚΟ] Χρήση εναλλακτικού φίλτρου συγχρονισμού άλμπουμ συσκευής",
"advanced_settings_log_level_title": "Επίπεδο σύνδεσης: {level}", "advanced_settings_log_level_title": "Επίπεδο σύνδεσης: {level}",
"advanced_settings_prefer_remote_subtitle": "Μερικές συσκευές αργούν πολύ να φορτώσουν μικρογραφίες από τοπικά αρχεία. Ενεργοποιήστε αυτήν τη ρύθμιση για να φορτώνονται αντί αυτού απομακρυσμένες εικόνες.", "advanced_settings_prefer_remote_subtitle": "Μερικές συσκευές αργούν πολύ να φορτώσουν μικρογραφίες από αρχεία στη συσκευή. Ενεργοποιήστε αυτήν τη ρύθμιση για να φορτώνονται αντί αυτού απομακρυσμένες εικόνες.",
"advanced_settings_prefer_remote_title": "Προτίμηση απομακρυσμένων εικόνων", "advanced_settings_prefer_remote_title": "Προτίμηση απομακρυσμένων εικόνων",
"advanced_settings_proxy_headers_subtitle": "Καθορισμός κεφαλίδων διακομιστή μεσολάβησης που το Immich πρέπει να στέλνει με κάθε αίτημα δικτύου", "advanced_settings_proxy_headers_subtitle": "Καθορισμός κεφαλίδων διακομιστή μεσολάβησης που το Immich πρέπει να στέλνει με κάθε αίτημα δικτύου",
"advanced_settings_proxy_headers_title": "Κεφαλίδες διακομιστή μεσολάβησης", "advanced_settings_proxy_headers_title": "Κεφαλίδες διακομιστή μεσολάβησης",
@@ -397,7 +379,6 @@
"album_cover_updated": "Το εξώφυλλο του άλμπουμ, ενημερώθηκε", "album_cover_updated": "Το εξώφυλλο του άλμπουμ, ενημερώθηκε",
"album_delete_confirmation": "Είστε σίγουροι ότι θέλετε να διαγράψετε το άλμπουμ {album};", "album_delete_confirmation": "Είστε σίγουροι ότι θέλετε να διαγράψετε το άλμπουμ {album};",
"album_delete_confirmation_description": "Εάν αυτό το άλμπουμ είναι κοινόχρηστο, οι άλλοι χρήστες δεν θα μπορούν να έχουν πρόσβαση.", "album_delete_confirmation_description": "Εάν αυτό το άλμπουμ είναι κοινόχρηστο, οι άλλοι χρήστες δεν θα μπορούν να έχουν πρόσβαση.",
"album_deleted": "Το άλμπουμ διαγράφηκε",
"album_info_card_backup_album_excluded": "ΕΞΑΙΡΟΥΜΕΝΟ", "album_info_card_backup_album_excluded": "ΕΞΑΙΡΟΥΜΕΝΟ",
"album_info_card_backup_album_included": "ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΟ", "album_info_card_backup_album_included": "ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΟ",
"album_info_updated": "Οι πληροφορίες του άλμπουμ, ενημερώθηκαν", "album_info_updated": "Οι πληροφορίες του άλμπουμ, ενημερώθηκαν",
@@ -407,7 +388,6 @@
"album_options": "Επιλογές άλμπουμ", "album_options": "Επιλογές άλμπουμ",
"album_remove_user": "Διαγραφή χρήστη;", "album_remove_user": "Διαγραφή χρήστη;",
"album_remove_user_confirmation": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε τον/την {user};", "album_remove_user_confirmation": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε τον/την {user};",
"album_search_not_found": "Δε βρέθηκαν άλμπουμ που να ταιριάζουν με την αναζήτησή σας",
"album_share_no_users": "Φαίνεται ότι έχετε κοινοποιήσει αυτό το άλμπουμ σε όλους τους χρήστες ή δεν έχετε χρήστες για να το κοινοποιήσετε.", "album_share_no_users": "Φαίνεται ότι έχετε κοινοποιήσει αυτό το άλμπουμ σε όλους τους χρήστες ή δεν έχετε χρήστες για να το κοινοποιήσετε.",
"album_updated": "Το άλμπουμ, ενημερώθηκε", "album_updated": "Το άλμπουμ, ενημερώθηκε",
"album_updated_setting_description": "Λάβετε ειδοποίηση μέσω email όταν ένα κοινόχρηστο άλμπουμ έχει νέα αρχεία", "album_updated_setting_description": "Λάβετε ειδοποίηση μέσω email όταν ένα κοινόχρηστο άλμπουμ έχει νέα αρχεία",
@@ -427,7 +407,6 @@
"albums_default_sort_order": "Προεπιλεγμένη ταξινόμηση άλμπουμ", "albums_default_sort_order": "Προεπιλεγμένη ταξινόμηση άλμπουμ",
"albums_default_sort_order_description": "Αρχική ταξινόμηση κατά τη δημιουργία νέων άλμπουμ.", "albums_default_sort_order_description": "Αρχική ταξινόμηση κατά τη δημιουργία νέων άλμπουμ.",
"albums_feature_description": "Συλλογές στοιχείων που μπορούν να κοινοποιηθούν σε άλλους χρήστες.", "albums_feature_description": "Συλλογές στοιχείων που μπορούν να κοινοποιηθούν σε άλλους χρήστες.",
"albums_on_device_count": "Άλμπουμ στη συσκευή ({count})",
"all": "Όλα", "all": "Όλα",
"all_albums": "Όλα τα άλμπουμ", "all_albums": "Όλα τα άλμπουμ",
"all_people": "Όλα τα άτομα", "all_people": "Όλα τα άτομα",
@@ -448,7 +427,6 @@
"app_settings": "Ρυθμίσεις εφαρμογής", "app_settings": "Ρυθμίσεις εφαρμογής",
"appears_in": "Εμφανίζεται σε", "appears_in": "Εμφανίζεται σε",
"archive": "Αρχείο", "archive": "Αρχείο",
"archive_action_prompt": "Προστέθηκαν {count} στο Αρχείο",
"archive_or_unarchive_photo": "Αρχειοθέτηση ή αποαρχειοθέτηση φωτογραφίας", "archive_or_unarchive_photo": "Αρχειοθέτηση ή αποαρχειοθέτηση φωτογραφίας",
"archive_page_no_archived_assets": "Δε βρέθηκαν αρχειοθετημένα στοιχεία", "archive_page_no_archived_assets": "Δε βρέθηκαν αρχειοθετημένα στοιχεία",
"archive_page_title": "Αρχείο ({count})", "archive_page_title": "Αρχείο ({count})",
@@ -486,6 +464,7 @@
"assets": "Αντικείμενα", "assets": "Αντικείμενα",
"assets_added_count": "Προστέθηκε {count, plural, one {# αρχείο} other {# αρχεία}}", "assets_added_count": "Προστέθηκε {count, plural, one {# αρχείο} other {# αρχεία}}",
"assets_added_to_album_count": "Προστέθηκε {count, plural, one {# αρχείο} other {# αρχεία}} στο άλμπουμ", "assets_added_to_album_count": "Προστέθηκε {count, plural, one {# αρχείο} other {# αρχεία}} στο άλμπουμ",
"assets_added_to_name_count": "Προστέθηκε {count, plural, one {# αρχείο} other {# αρχεία}} στο {hasName, select, true {<b>{name}</b>} other {νέο άλμπουμ}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Στοιχείο} other {Στοιχεία}} δεν μπορούν να προστεθούν στο άλμπουμ", "assets_cannot_be_added_to_album_count": "{count, plural, one {Στοιχείο} other {Στοιχεία}} δεν μπορούν να προστεθούν στο άλμπουμ",
"assets_count": "{count, plural, one {# αρχείο} other {# αρχεία}}", "assets_count": "{count, plural, one {# αρχείο} other {# αρχεία}}",
"assets_deleted_permanently": "{count} τα στοιχεία διαγράφηκαν οριστικά", "assets_deleted_permanently": "{count} τα στοιχεία διαγράφηκαν οριστικά",
@@ -511,7 +490,6 @@
"back_close_deselect": "Πίσω, κλείσιμο ή αποεπιλογή", "back_close_deselect": "Πίσω, κλείσιμο ή αποεπιλογή",
"background_location_permission": "Άδεια τοποθεσίας στο παρασκήνιο", "background_location_permission": "Άδεια τοποθεσίας στο παρασκήνιο",
"background_location_permission_content": "Το Immich για να μπορεί να αλλάζει δίκτυα όταν τρέχει στο παρασκήνιο, πρέπει *πάντα* να έχει πρόσβαση στην ακριβή τοποθεσία ώστε η εφαρμογή να μπορεί να διαβάζει το όνομα του δικτύου Wi-Fi", "background_location_permission_content": "Το Immich για να μπορεί να αλλάζει δίκτυα όταν τρέχει στο παρασκήνιο, πρέπει *πάντα* να έχει πρόσβαση στην ακριβή τοποθεσία ώστε η εφαρμογή να μπορεί να διαβάζει το όνομα του δικτύου Wi-Fi",
"backup": "Αντίγραφα ασφαλείας",
"backup_album_selection_page_albums_device": "Άλμπουμ στη συσκευή ({count})", "backup_album_selection_page_albums_device": "Άλμπουμ στη συσκευή ({count})",
"backup_album_selection_page_albums_tap": "Πάτημα για συμπερίληψη, διπλό πάτημα για εξαίρεση", "backup_album_selection_page_albums_tap": "Πάτημα για συμπερίληψη, διπλό πάτημα για εξαίρεση",
"backup_album_selection_page_assets_scatter": "Τα στοιχεία μπορεί να διασκορπιστούν σε πολλά άλμπουμ. Έτσι, τα άλμπουμ μπορούν να περιληφθούν ή να εξαιρεθούν κατά τη διαδικασία δημιουργίας αντιγράφων ασφαλείας.", "backup_album_selection_page_assets_scatter": "Τα στοιχεία μπορεί να διασκορπιστούν σε πολλά άλμπουμ. Έτσι, τα άλμπουμ μπορούν να περιληφθούν ή να εξαιρεθούν κατά τη διαδικασία δημιουργίας αντιγράφων ασφαλείας.",
@@ -575,8 +553,6 @@
"backup_options_page_title": "Επιλογές αντιγράφων ασφαλείας", "backup_options_page_title": "Επιλογές αντιγράφων ασφαλείας",
"backup_setting_subtitle": "Διαχείριση ρυθμίσεων μεταφόρτωσης στο παρασκήνιο και στο προσκήνιο", "backup_setting_subtitle": "Διαχείριση ρυθμίσεων μεταφόρτωσης στο παρασκήνιο και στο προσκήνιο",
"backward": "Προς τα πίσω", "backward": "Προς τα πίσω",
"beta_sync": "Κατάσταση Συγχρονισμού Beta (δοκιμαστική)",
"beta_sync_subtitle": "Διαχείριση του νέου συστήματος συγχρονισμού",
"biometric_auth_enabled": "Βιομετρική ταυτοποίηση ενεργοποιήθηκε", "biometric_auth_enabled": "Βιομετρική ταυτοποίηση ενεργοποιήθηκε",
"biometric_locked_out": "Είστε κλειδωμένοι εκτός της βιομετρικής ταυτοποίησης", "biometric_locked_out": "Είστε κλειδωμένοι εκτός της βιομετρικής ταυτοποίησης",
"biometric_no_options": "Δεν υπάρχουν διαθέσιμοι τρόποι βιομετρικής ταυτοποίησης", "biometric_no_options": "Δεν υπάρχουν διαθέσιμοι τρόποι βιομετρικής ταυτοποίησης",
@@ -611,7 +587,6 @@
"cancel": "Ακύρωση", "cancel": "Ακύρωση",
"cancel_search": "Ακύρωση αναζήτησης", "cancel_search": "Ακύρωση αναζήτησης",
"canceled": "Ακυρωμένο", "canceled": "Ακυρωμένο",
"canceling": "Ακυρώνεται",
"cannot_merge_people": "Αδύνατη η συγχώνευση ατόμων", "cannot_merge_people": "Αδύνατη η συγχώνευση ατόμων",
"cannot_undo_this_action": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια!", "cannot_undo_this_action": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια!",
"cannot_update_the_description": "Αδύνατη η ενημέρωση της περιγραφής", "cannot_update_the_description": "Αδύνατη η ενημέρωση της περιγραφής",
@@ -725,11 +700,10 @@
"current_server_address": "Τρέχουσα διεύθυνση διακομιστή", "current_server_address": "Τρέχουσα διεύθυνση διακομιστή",
"custom_locale": "Προσαρμοσμένη Τοπική Ρύθμιση", "custom_locale": "Προσαρμοσμένη Τοπική Ρύθμιση",
"custom_locale_description": "Μορφοποιήστε τις ημερομηνίες και τους αριθμούς, σύμφωνα με τη γλώσσα και την περιοχή", "custom_locale_description": "Μορφοποιήστε τις ημερομηνίες και τους αριθμούς, σύμφωνα με τη γλώσσα και την περιοχή",
"custom_url": "Προσαρμοσμένη διεύθυνση URL",
"daily_title_text_date": "Ε, MMM dd", "daily_title_text_date": "Ε, MMM dd",
"daily_title_text_date_year": "Ε, MMM dd, yyyy", "daily_title_text_date_year": "Ε, MMM dd, yyyy",
"dark": "Σκούρο", "dark": "Σκούρο",
"dark_theme": "Εναλλαγή σκοτεινής εμφάνισης", "darkTheme": "Εναλλαγή σκούρου θέματος",
"date_after": "Ημερομηνία μετά", "date_after": "Ημερομηνία μετά",
"date_and_time": "Ημερομηνία και ώρα", "date_and_time": "Ημερομηνία και ώρα",
"date_before": "Ημερομηνία πριν", "date_before": "Ημερομηνία πριν",
@@ -745,8 +719,6 @@
"default_locale": "Προεπιλεγμένη Τοπική Ρύθμιση", "default_locale": "Προεπιλεγμένη Τοπική Ρύθμιση",
"default_locale_description": "Μορφοποιήστε τις ημερομηνίες και τους αριθμούς με βάση την τοπική ρύθμιση του προγράμματος περιήγησής σας", "default_locale_description": "Μορφοποιήστε τις ημερομηνίες και τους αριθμούς με βάση την τοπική ρύθμιση του προγράμματος περιήγησής σας",
"delete": "Διαγραφή", "delete": "Διαγραφή",
"delete_action_confirmation_message": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το αρχείο; Αυτή η ενέργεια θα το μετακινήσει στον κάδο απορριμμάτων του διακομιστή και θα εμφανιστεί μήνυμα για το αν θέλετε να το διαγράψετε και τοπικά",
"delete_action_prompt": "{count} διαγράφηκαν",
"delete_album": "Διαγραφή άλμπουμ", "delete_album": "Διαγραφή άλμπουμ",
"delete_api_key_prompt": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό κλειδί API;", "delete_api_key_prompt": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό κλειδί API;",
"delete_dialog_alert": "Αυτά τα αντικείμενα θα διαγραφούν οριστικά από το Immich και από τη συσκευή σας", "delete_dialog_alert": "Αυτά τα αντικείμενα θα διαγραφούν οριστικά από το Immich και από τη συσκευή σας",
@@ -760,12 +732,9 @@
"delete_key": "Διαγραφή κλειδιού", "delete_key": "Διαγραφή κλειδιού",
"delete_library": "Διαγραφή Βιβλιοθήκης", "delete_library": "Διαγραφή Βιβλιοθήκης",
"delete_link": "Διαγραφή συνδέσμου", "delete_link": "Διαγραφή συνδέσμου",
"delete_local_action_prompt": "{count} διαγράφηκαν τοπικά",
"delete_local_dialog_ok_backed_up_only": "Διαγραφή μόνο των αντιγράφων ασφαλείας", "delete_local_dialog_ok_backed_up_only": "Διαγραφή μόνο των αντιγράφων ασφαλείας",
"delete_local_dialog_ok_force": "Διαγραφή όπως και να έχει", "delete_local_dialog_ok_force": "Διαγραφή όπως και να έχει",
"delete_others": "Διαγραφή υπολοίπων", "delete_others": "Διαγραφή υπολοίπων",
"delete_permanently": "Διαγραφή οριστικά",
"delete_permanently_action_prompt": "{count} διαγράφηκε οριστικά",
"delete_shared_link": "Διαγραφή κοινόχρηστου συνδέσμου", "delete_shared_link": "Διαγραφή κοινόχρηστου συνδέσμου",
"delete_shared_link_dialog_title": "Διαγραφή Κοινοποιημένου Συνδέσμου", "delete_shared_link_dialog_title": "Διαγραφή Κοινοποιημένου Συνδέσμου",
"delete_tag": "Διαγραφή ετικέτας", "delete_tag": "Διαγραφή ετικέτας",
@@ -776,7 +745,6 @@
"description": "Περιγραφή", "description": "Περιγραφή",
"description_input_hint_text": "Προσθήκη περιγραφής...", "description_input_hint_text": "Προσθήκη περιγραφής...",
"description_input_submit_error": "Σφάλμα κατά την ενημέρωση της περιγραφής, ελέγξτε το αρχείο καταγραφής για περισσότερες λεπτομέρειες", "description_input_submit_error": "Σφάλμα κατά την ενημέρωση της περιγραφής, ελέγξτε το αρχείο καταγραφής για περισσότερες λεπτομέρειες",
"deselect_all": "Ακύρωση όλων των επιλογών",
"details": "Λεπτομέρειες", "details": "Λεπτομέρειες",
"direction": "Κατεύθυνση", "direction": "Κατεύθυνση",
"disabled": "Απενεργοποιημένο", "disabled": "Απενεργοποιημένο",
@@ -794,7 +762,6 @@
"documentation": "Τεκμηρίωση", "documentation": "Τεκμηρίωση",
"done": "Έγινε", "done": "Έγινε",
"download": "Λήψη", "download": "Λήψη",
"download_action_prompt": "Κατέβασμα {count} στοιχείων",
"download_canceled": "Η λήψη ακυρώθηκε", "download_canceled": "Η λήψη ακυρώθηκε",
"download_complete": "Η λήψη ολοκληρώθηκε", "download_complete": "Η λήψη ολοκληρώθηκε",
"download_enqueue": "Η λήψη τέθηκε σε ουρά", "download_enqueue": "Η λήψη τέθηκε σε ουρά",
@@ -832,7 +799,6 @@
"edit_key": "Επεξεργασία κλειδιού", "edit_key": "Επεξεργασία κλειδιού",
"edit_link": "Επεξεργασία συνδέσμου", "edit_link": "Επεξεργασία συνδέσμου",
"edit_location": "Επεξεργασία τοποθεσίας", "edit_location": "Επεξεργασία τοποθεσίας",
"edit_location_action_prompt": "Επεξεργάστηκαν {count} τοποθεσίες",
"edit_location_dialog_title": "Τοποθεσία", "edit_location_dialog_title": "Τοποθεσία",
"edit_name": "Επεξεργασία ονόματος", "edit_name": "Επεξεργασία ονόματος",
"edit_people": "Επεξεργασία ατόμων", "edit_people": "Επεξεργασία ατόμων",
@@ -851,7 +817,6 @@
"empty_trash": "Άδειασμα κάδου απορριμμάτων", "empty_trash": "Άδειασμα κάδου απορριμμάτων",
"empty_trash_confirmation": "Είστε σίγουροι οτι θέλετε να αδειάσετε τον κάδο απορριμμάτων; Αυτό θα αφαιρέσει μόνιμα όλα τα στοιχεία του κάδου απορριμμάτων του Immich. \nΑυτή η ενέργεια δεν μπορεί να αναιρεθεί!", "empty_trash_confirmation": "Είστε σίγουροι οτι θέλετε να αδειάσετε τον κάδο απορριμμάτων; Αυτό θα αφαιρέσει μόνιμα όλα τα στοιχεία του κάδου απορριμμάτων του Immich. \nΑυτή η ενέργεια δεν μπορεί να αναιρεθεί!",
"enable": "Ενεργοποίηση", "enable": "Ενεργοποίηση",
"enable_backup": "Ενεργοποίηση αντιγράφου ασφαλείας",
"enable_biometric_auth_description": "Εισάγετε τον κωδικό PIN σας για να ενεργοποιήσετε την βιομετρική ταυτοποίηση", "enable_biometric_auth_description": "Εισάγετε τον κωδικό PIN σας για να ενεργοποιήσετε την βιομετρική ταυτοποίηση",
"enabled": "Ενεργοποιημένο", "enabled": "Ενεργοποιημένο",
"end_date": "Τελική ημερομηνία", "end_date": "Τελική ημερομηνία",
@@ -1008,8 +973,6 @@
"explorer": "Περιηγητής", "explorer": "Περιηγητής",
"export": "Εξαγωγή", "export": "Εξαγωγή",
"export_as_json": "Εξαγωγή ως JSON", "export_as_json": "Εξαγωγή ως JSON",
"export_database": "Εξαγωγή βάσης δεδομένων",
"export_database_description": "Εξαγωγή της SQLite βάσης δεδομένων",
"extension": "Επέκταση", "extension": "Επέκταση",
"external": "Εξωτερικός", "external": "Εξωτερικός",
"external_libraries": "Εξωτερικές βιβλιοθήκες", "external_libraries": "Εξωτερικές βιβλιοθήκες",
@@ -1021,7 +984,6 @@
"failed_to_load_assets": "Αποτυχία φόρτωσης στοιχείων", "failed_to_load_assets": "Αποτυχία φόρτωσης στοιχείων",
"failed_to_load_folder": "Αποτυχία φόρτωσης φακέλου", "failed_to_load_folder": "Αποτυχία φόρτωσης φακέλου",
"favorite": "Αγαπημένο", "favorite": "Αγαπημένο",
"favorite_action_prompt": "Προστέθηκαν {count} στα Αγαπημένα",
"favorite_or_unfavorite_photo": "Ορίστε μία φωτογραφία ως αγαπημένη ή αφαιρέστε την από τα αγαπημένα", "favorite_or_unfavorite_photo": "Ορίστε μία φωτογραφία ως αγαπημένη ή αφαιρέστε την από τα αγαπημένα",
"favorites": "Αγαπημένα", "favorites": "Αγαπημένα",
"favorites_page_no_favorites": "Δεν βρέθηκαν αγαπημένα στοιχεία", "favorites_page_no_favorites": "Δεν βρέθηκαν αγαπημένα στοιχεία",
@@ -1061,9 +1023,6 @@
"haptic_feedback_switch": "Ενεργοποίηση απτικής ανάδρασης", "haptic_feedback_switch": "Ενεργοποίηση απτικής ανάδρασης",
"haptic_feedback_title": "Απτική Ανάδραση", "haptic_feedback_title": "Απτική Ανάδραση",
"has_quota": "Έχει ποσόστωση", "has_quota": "Έχει ποσόστωση",
"hash_asset": "Κατακερματισμός στοιχείου",
"hashed_assets": "Κατακερματισμένα στοιχεία",
"hashing": "Κατακερματισμός",
"header_settings_add_header_tip": "Προσθήκη Κεφαλίδας", "header_settings_add_header_tip": "Προσθήκη Κεφαλίδας",
"header_settings_field_validator_msg": "Η τιμή δεν μπορεί να είναι κενή", "header_settings_field_validator_msg": "Η τιμή δεν μπορεί να είναι κενή",
"header_settings_header_name_input": "Όνομα κεφαλίδας", "header_settings_header_name_input": "Όνομα κεφαλίδας",
@@ -1096,7 +1055,6 @@
"host": "Φιλοξενία", "host": "Φιλοξενία",
"hour": "Ώρα", "hour": "Ώρα",
"id": "ID", "id": "ID",
"idle": "Αδράνεια",
"ignore_icloud_photos": "Αγνοήστε τις φωτογραφίες iCloud", "ignore_icloud_photos": "Αγνοήστε τις φωτογραφίες iCloud",
"ignore_icloud_photos_description": "Οι φωτογραφίες που είναι αποθηκευμένες στο iCloud δεν θα μεταφορτωθούν στον διακομιστή Immich", "ignore_icloud_photos_description": "Οι φωτογραφίες που είναι αποθηκευμένες στο iCloud δεν θα μεταφορτωθούν στον διακομιστή Immich",
"image": "Εικόνα", "image": "Εικόνα",
@@ -1154,7 +1112,6 @@
"language_no_results_title": "Δε βρέθηκαν γλώσσες", "language_no_results_title": "Δε βρέθηκαν γλώσσες",
"language_search_hint": "Αναζήτηση γλωσσών...", "language_search_hint": "Αναζήτηση γλωσσών...",
"language_setting_description": "Επιλέξτε τη γλώσσα που προτιμάτε", "language_setting_description": "Επιλέξτε τη γλώσσα που προτιμάτε",
"large_files": "Μεγάλα Αρχεία",
"last_seen": "Τελευταία προβολή", "last_seen": "Τελευταία προβολή",
"latest_version": "Τελευταία Έκδοση", "latest_version": "Τελευταία Έκδοση",
"latitude": "Γεωγραφικό πλάτος", "latitude": "Γεωγραφικό πλάτος",
@@ -1170,18 +1127,16 @@
"library_page_sort_created": "Ημερομηνία δημιουργίας", "library_page_sort_created": "Ημερομηνία δημιουργίας",
"library_page_sort_last_modified": "Τελευταία τροποποίηση", "library_page_sort_last_modified": "Τελευταία τροποποίηση",
"library_page_sort_title": "Τίτλος άλμπουμ", "library_page_sort_title": "Τίτλος άλμπουμ",
"licenses": "Άδειες",
"light": "Φωτεινό", "light": "Φωτεινό",
"like_deleted": "Το \"μου αρέσει\" διαγράφηκε", "like_deleted": "Το \"μου αρέσει\" διαγράφηκε",
"link_motion_video": "Σύνδεσε βίντεο κίνησης", "link_motion_video": "Σύνδεσε βίντεο κίνησης",
"link_options": "Επιλογές συνδέσμου",
"link_to_oauth": "Σύνδεση στον OAuth", "link_to_oauth": "Σύνδεση στον OAuth",
"linked_oauth_account": "Ο OAuth λογαριασμός συνδέθηκε", "linked_oauth_account": "Ο OAuth λογαριασμός συνδέθηκε",
"list": "Λίστα", "list": "Λίστα",
"loading": "Φόρτωση", "loading": "Φόρτωση",
"loading_search_results_failed": "Η φόρτωση αποτελεσμάτων αναζήτησης απέτυχε", "loading_search_results_failed": "Η φόρτωση αποτελεσμάτων αναζήτησης απέτυχε",
"local": "Τοπικά",
"local_asset_cast_failed": "Αδυναμία μετάδοσης στοιχείου που δεν έχει ανέβει στον διακομιστή", "local_asset_cast_failed": "Αδυναμία μετάδοσης στοιχείου που δεν έχει ανέβει στον διακομιστή",
"local_assets": "Τοπικά στοιχεία",
"local_network": "Τοπικό δίκτυο", "local_network": "Τοπικό δίκτυο",
"local_network_sheet_info": "Η εφαρμογή θα συνδεθεί με τον διακομιστή μέσω αυτού του URL όταν χρησιμοποιείται το καθορισμένο δίκτυο Wi-Fi", "local_network_sheet_info": "Η εφαρμογή θα συνδεθεί με τον διακομιστή μέσω αυτού του URL όταν χρησιμοποιείται το καθορισμένο δίκτυο Wi-Fi",
"location_permission": "Άδεια τοποθεσίας", "location_permission": "Άδεια τοποθεσίας",
@@ -1238,7 +1193,8 @@
"manage_your_devices": "Διαχειριστείτε τις συνδεδεμένες συσκευές σας", "manage_your_devices": "Διαχειριστείτε τις συνδεδεμένες συσκευές σας",
"manage_your_oauth_connection": "Διαχειριστείτε τη σύνδεσή σας OAuth", "manage_your_oauth_connection": "Διαχειριστείτε τη σύνδεσή σας OAuth",
"map": "Χάρτης", "map": "Χάρτης",
"map_assets_in_bounds": "{count, plural, one {# φωτογραφία} other {# φωτογραφίες}}", "map_assets_in_bound": "{count} φωτογραφία",
"map_assets_in_bounds": "{count} φωτογραφίες",
"map_cannot_get_user_location": "Δεν είναι δυνατή η λήψη της τοποθεσίας του χρήστη", "map_cannot_get_user_location": "Δεν είναι δυνατή η λήψη της τοποθεσίας του χρήστη",
"map_location_dialog_yes": "Ναι", "map_location_dialog_yes": "Ναι",
"map_location_picker_page_use_location": "Χρησιμοποιήστε αυτήν την τοποθεσία", "map_location_picker_page_use_location": "Χρησιμοποιήστε αυτήν την τοποθεσία",
@@ -1290,7 +1246,6 @@
"more": "Περισσότερα", "more": "Περισσότερα",
"move": "Μετακίνηση", "move": "Μετακίνηση",
"move_off_locked_folder": "Μετακίνηση έξω από τον κλειδωμένο φάκελο", "move_off_locked_folder": "Μετακίνηση έξω από τον κλειδωμένο φάκελο",
"move_to_lock_folder_action_prompt": "Προστέθηκαν {count} στον κλειδωμένο φάκελο",
"move_to_locked_folder": "Μετακίνηση σε κλειδωμένο φάκελο", "move_to_locked_folder": "Μετακίνηση σε κλειδωμένο φάκελο",
"move_to_locked_folder_confirmation": "Αυτές οι φωτογραφίες και τα βίντεο θα αφαιρεθούν από όλα τα άλμπουμ και θα μπορούν να προβληθούν μόνο από τον κλειδωμένο φάκελο", "move_to_locked_folder_confirmation": "Αυτές οι φωτογραφίες και τα βίντεο θα αφαιρεθούν από όλα τα άλμπουμ και θα μπορούν να προβληθούν μόνο από τον κλειδωμένο φάκελο",
"moved_to_archive": "Μετακινήθηκαν {count, plural, one {# στοιχείο} other {# στοιχεία}} στο αρχείο", "moved_to_archive": "Μετακινήθηκαν {count, plural, one {# στοιχείο} other {# στοιχεία}} στο αρχείο",
@@ -1337,7 +1292,6 @@
"no_results": "Κανένα αποτέλεσμα", "no_results": "Κανένα αποτέλεσμα",
"no_results_description": "Δοκιμάστε ένα συνώνυμο ή πιο γενική λέξη-κλειδί", "no_results_description": "Δοκιμάστε ένα συνώνυμο ή πιο γενική λέξη-κλειδί",
"no_shared_albums_message": "Δημιουργήστε ένα άλμπουμ για να μοιράζεστε φωτογραφίες και βίντεο με άτομα στο δίκτυό σας", "no_shared_albums_message": "Δημιουργήστε ένα άλμπουμ για να μοιράζεστε φωτογραφίες και βίντεο με άτομα στο δίκτυό σας",
"no_uploads_in_progress": "Καμία μεταφόρτωση σε εξέλιξη",
"not_in_any_album": "Σε κανένα άλμπουμ", "not_in_any_album": "Σε κανένα άλμπουμ",
"not_selected": "Δεν επιλέχθηκε", "not_selected": "Δεν επιλέχθηκε",
"note_apply_storage_label_to_previously_uploaded assets": "Σημείωση: Για να εφαρμόσετε την Ετικέτα Αποθήκευσης σε στοιχεία που έχουν μεταφορτωθεί προηγουμένως, εκτελέστε το", "note_apply_storage_label_to_previously_uploaded assets": "Σημείωση: Για να εφαρμόσετε την Ετικέτα Αποθήκευσης σε στοιχεία που έχουν μεταφορτωθεί προηγουμένως, εκτελέστε το",
@@ -1375,7 +1329,6 @@
"original": "πρωτότυπο", "original": "πρωτότυπο",
"other": "Άλλες", "other": "Άλλες",
"other_devices": "Άλλες συσκευές", "other_devices": "Άλλες συσκευές",
"other_entities": "Άλλες οντότητες",
"other_variables": "Άλλες μεταβλητές", "other_variables": "Άλλες μεταβλητές",
"owned": "Δικά μου", "owned": "Δικά μου",
"owner": "Κάτοχος", "owner": "Κάτοχος",
@@ -1507,7 +1460,6 @@
"purchase_server_description_2": "Κατάσταση υποστηρικτή", "purchase_server_description_2": "Κατάσταση υποστηρικτή",
"purchase_server_title": "Διακομιστής", "purchase_server_title": "Διακομιστής",
"purchase_settings_server_activated": "Η διαχείριση του κλειδιού προϊόντος του διακομιστή γίνεται από τον διαχειριστή", "purchase_settings_server_activated": "Η διαχείριση του κλειδιού προϊόντος του διακομιστή γίνεται από τον διαχειριστή",
"queue_status": "Τοποθέτηση στη ουρά {count} από {total}",
"rating": "Αξιολόγηση με αστέρια", "rating": "Αξιολόγηση με αστέρια",
"rating_clear": "Εκκαθάριση αξιολόγησης", "rating_clear": "Εκκαθάριση αξιολόγησης",
"rating_count": "{count, plural, one {# αστέρι} other {# αστέρια}}", "rating_count": "{count, plural, one {# αστέρι} other {# αστέρια}}",
@@ -1536,8 +1488,6 @@
"refreshing_faces": "Ανανεώνονται πρόσωπα", "refreshing_faces": "Ανανεώνονται πρόσωπα",
"refreshing_metadata": "Τα μεταδεδομένα ανανεώνονται", "refreshing_metadata": "Τα μεταδεδομένα ανανεώνονται",
"regenerating_thumbnails": "Οι μικρογραφίες αναγεννώνται", "regenerating_thumbnails": "Οι μικρογραφίες αναγεννώνται",
"remote": "Απομακρυσμένος",
"remote_assets": "Απομακρυσμένα στοιχεία",
"remove": "Αφαίρεση", "remove": "Αφαίρεση",
"remove_assets_album_confirmation": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε {count, plural, one {# στοιχείο} other {# στοιχεία}} από το άλμπουμ;", "remove_assets_album_confirmation": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε {count, plural, one {# στοιχείο} other {# στοιχεία}} από το άλμπουμ;",
"remove_assets_shared_link_confirmation": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε {count, plural, one {# στοιχείο} other {# στοιχεία}} από αυτόν τον κοινόχρηστο σύνδεσμο;", "remove_assets_shared_link_confirmation": "Είστε σίγουροι ότι θέλετε να αφαιρέσετε {count, plural, one {# στοιχείο} other {# στοιχεία}} από αυτόν τον κοινόχρηστο σύνδεσμο;",
@@ -1545,9 +1495,7 @@
"remove_custom_date_range": "Αφαίρεση προσαρμοσμένης χρονικής περιόδου", "remove_custom_date_range": "Αφαίρεση προσαρμοσμένης χρονικής περιόδου",
"remove_deleted_assets": "Αφαίρεση Διεγραμμένων Στοιχείων", "remove_deleted_assets": "Αφαίρεση Διεγραμμένων Στοιχείων",
"remove_from_album": "Αφαίρεση από το άλμπουμ", "remove_from_album": "Αφαίρεση από το άλμπουμ",
"remove_from_album_action_prompt": "{count} αφαιρέθηκαν από το άλμπουμ",
"remove_from_favorites": "Αφαίρεση από τα αγαπημένα", "remove_from_favorites": "Αφαίρεση από τα αγαπημένα",
"remove_from_lock_folder_action_prompt": "{count} αφαιρέθηκαν από τον κλειδωμένο φάκελο",
"remove_from_locked_folder": "Αφαίρεση από κλειδωμένο φάκελο", "remove_from_locked_folder": "Αφαίρεση από κλειδωμένο φάκελο",
"remove_from_locked_folder_confirmation": "Είστε σίγουροι ότι θέλετε να μετακινήσετε αυτές τις φωτογραφίες και τα βίντεο από τον κλειδωμένο φάκελο; Θα είναι πλέον ορατές στη βιβλιοθήκη σας.", "remove_from_locked_folder_confirmation": "Είστε σίγουροι ότι θέλετε να μετακινήσετε αυτές τις φωτογραφίες και τα βίντεο από τον κλειδωμένο φάκελο; Θα είναι πλέον ορατές στη βιβλιοθήκη σας.",
"remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο", "remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο",
@@ -1575,25 +1523,19 @@
"reset_password": "Επαναφορά κωδικού πρόσβασης", "reset_password": "Επαναφορά κωδικού πρόσβασης",
"reset_people_visibility": "Επαναφορά προβολής ατόμων", "reset_people_visibility": "Επαναφορά προβολής ατόμων",
"reset_pin_code": "Επαναφορά κωδικού PIN", "reset_pin_code": "Επαναφορά κωδικού PIN",
"reset_sqlite": "Επαναφορά SQLite βάσης δεδομένων",
"reset_sqlite_confirmation": "Είσαι σίγουρος ότι θέλεις να επαναφέρεις τη βάση δεδομένων SQLite; Θα χρειαστεί να κάνεις αποσύνδεση και επανασύνδεση για να επανασυγχρονίσεις τα δεδομένα",
"reset_sqlite_success": "Η επαναφορά της SQLite βάσης δεδομένων ολοκληρώθηκε με επιτυχία",
"reset_to_default": "Επαναφορά στις προεπιλογές", "reset_to_default": "Επαναφορά στις προεπιλογές",
"resolve_duplicates": "Επίλυση διπλοτύπων", "resolve_duplicates": "Επίλυση διπλοτύπων",
"resolved_all_duplicates": "Επιλύθηκαν όλα τα διπλότυπα", "resolved_all_duplicates": "Επιλύθηκαν όλα τα διπλότυπα",
"restore": "Ανάκτηση", "restore": "Ανάκτηση",
"restore_all": "Ανάκτηση όλων", "restore_all": "Ανάκτηση όλων",
"restore_trash_action_prompt": "{count} ανακτήθηκαν από τα απορρίμματα",
"restore_user": "Επαναφορά χρήστη", "restore_user": "Επαναφορά χρήστη",
"restored_asset": "Ανακτήθηκε το αρχείο", "restored_asset": "Ανακτήθηκε το αρχείο",
"resume": "Συνέχιση", "resume": "Συνέχιση",
"retry_upload": "Επανάληψη ανεβάσματος", "retry_upload": "Επανάληψη ανεβάσματος",
"review_duplicates": "Προβολή διπλότυπων", "review_duplicates": "Προβολή διπλότυπων",
"review_large_files": "Επισκόπηση μεγάλων αρχείων",
"role": "Ρόλος", "role": "Ρόλος",
"role_editor": "Επεξεργαστής", "role_editor": "Επεξεργαστής",
"role_viewer": "Θεατής", "role_viewer": "Θεατής",
"running": "Σε λειτουργία",
"save": "Αποθήκευση", "save": "Αποθήκευση",
"save_to_gallery": "Αποθήκευση στη συλλογή", "save_to_gallery": "Αποθήκευση στη συλλογή",
"saved_api_key": "Αποθηκευμένο API key", "saved_api_key": "Αποθηκευμένο API key",
@@ -1725,7 +1667,6 @@
"settings_saved": "Οι ρυθμίσεις αποθηκεύτηκαν", "settings_saved": "Οι ρυθμίσεις αποθηκεύτηκαν",
"setup_pin_code": "Ρύθμιση κωδικού PIN", "setup_pin_code": "Ρύθμιση κωδικού PIN",
"share": "Κοινοποίηση", "share": "Κοινοποίηση",
"share_action_prompt": "Κοινή χρήση {count} στοιχείων",
"share_add_photos": "Προσθήκη φωτογραφιών", "share_add_photos": "Προσθήκη φωτογραφιών",
"share_assets_selected": "{count} επιλεγμένα", "share_assets_selected": "{count} επιλεγμένα",
"share_dialog_preparing": "Προετοιμασία...", "share_dialog_preparing": "Προετοιμασία...",
@@ -1747,7 +1688,6 @@
"shared_link_clipboard_copied_massage": "Αντιγράφηκε στο πρόχειρο", "shared_link_clipboard_copied_massage": "Αντιγράφηκε στο πρόχειρο",
"shared_link_clipboard_text": "Σύνδεσμος: {link}\nΚωδικός πρόσβασης: {password}", "shared_link_clipboard_text": "Σύνδεσμος: {link}\nΚωδικός πρόσβασης: {password}",
"shared_link_create_error": "Σφάλμα κατά τη δημιουργία κοινόχρηστου συνδέσμου", "shared_link_create_error": "Σφάλμα κατά τη δημιουργία κοινόχρηστου συνδέσμου",
"shared_link_custom_url_description": "Αποκτήστε πρόσβαση σε αυτόν τον κοινόχρηστο σύνδεσμο με μια προσαρμοσμένη διεύθυνση URL",
"shared_link_edit_description_hint": "Εισαγάγετε την περιγραφή της κοινής χρήσης", "shared_link_edit_description_hint": "Εισαγάγετε την περιγραφή της κοινής χρήσης",
"shared_link_edit_expire_after_option_day": "1 ημέρα", "shared_link_edit_expire_after_option_day": "1 ημέρα",
"shared_link_edit_expire_after_option_days": "{count} ημέρες", "shared_link_edit_expire_after_option_days": "{count} ημέρες",
@@ -1773,7 +1713,6 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Διαχείριση Κοινόχρηστων Συνδέσμων", "shared_link_manage_links": "Διαχείριση Κοινόχρηστων Συνδέσμων",
"shared_link_options": "Επιλογές κοινόχρηστου συνδέσμου", "shared_link_options": "Επιλογές κοινόχρηστου συνδέσμου",
"shared_link_password_description": "Απαίτηση κωδικού για πρόσβαση στον κοινοποιημένο σύνδεσμο",
"shared_links": "Κοινόχρηστοι σύνδεσμοι", "shared_links": "Κοινόχρηστοι σύνδεσμοι",
"shared_links_description": "Μοιραστείτε φωτογραφίες και βίντεο με σύνδεσμο", "shared_links_description": "Μοιραστείτε φωτογραφίες και βίντεο με σύνδεσμο",
"shared_photos_and_videos_count": "{assetCount, plural, other {# κοινόχρηστες φωτογραφίες & βίντεο.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# κοινόχρηστες φωτογραφίες & βίντεο.}}",
@@ -1829,7 +1768,6 @@
"sort_title": "Τίτλος", "sort_title": "Τίτλος",
"source": "Πηγή", "source": "Πηγή",
"stack": "Στοίβα", "stack": "Στοίβα",
"stack_action_prompt": "{count} συσσωρεύτηκαν",
"stack_duplicates": "Στοίβαξη διπλότυπων", "stack_duplicates": "Στοίβαξη διπλότυπων",
"stack_select_one_photo": "Επιλέξτε μια κύρια φωτογραφία για τη στοίβαξη", "stack_select_one_photo": "Επιλέξτε μια κύρια φωτογραφία για τη στοίβαξη",
"stack_selected_photos": "Στοίβαγμα επιλεγμένων φωτογραφιών", "stack_selected_photos": "Στοίβαγμα επιλεγμένων φωτογραφιών",
@@ -1849,7 +1787,6 @@
"storage_quota": "Ποσοστό αποθηκευτικού χώρου", "storage_quota": "Ποσοστό αποθηκευτικού χώρου",
"storage_usage": "{used} από {available} σε χρήση", "storage_usage": "{used} από {available} σε χρήση",
"submit": "Υποβολή", "submit": "Υποβολή",
"success": "Επιτυχία",
"suggestions": "Προτάσεις", "suggestions": "Προτάσεις",
"sunrise_on_the_beach": "Ηλιοβασίλεμα στην παραλία", "sunrise_on_the_beach": "Ηλιοβασίλεμα στην παραλία",
"support": "Υποστήριξη", "support": "Υποστήριξη",
@@ -1859,8 +1796,6 @@
"sync": "Συγχρονισμός", "sync": "Συγχρονισμός",
"sync_albums": "Συγχρονισμός άλμπουμ", "sync_albums": "Συγχρονισμός άλμπουμ",
"sync_albums_manual_subtitle": "Συγχρονίστε όλα τα μεταφορτωμένα βίντεο και φωτογραφίες με τα επιλεγμένα εφεδρικά άλμπουμ", "sync_albums_manual_subtitle": "Συγχρονίστε όλα τα μεταφορτωμένα βίντεο και φωτογραφίες με τα επιλεγμένα εφεδρικά άλμπουμ",
"sync_local": "Τοπικός Συγχρονισμός",
"sync_remote": "Απομακρυσμένος Συγχρονισμός",
"sync_upload_album_setting_subtitle": "Δημιουργήστε και ανεβάστε τις φωτογραφίες και τα βίντεό σας στα επιλεγμένα άλμπουμ στο Immich", "sync_upload_album_setting_subtitle": "Δημιουργήστε και ανεβάστε τις φωτογραφίες και τα βίντεό σας στα επιλεγμένα άλμπουμ στο Immich",
"tag": "Ετικέτα", "tag": "Ετικέτα",
"tag_assets": "Ετικετοποίηση στοιχείων", "tag_assets": "Ετικετοποίηση στοιχείων",
@@ -1871,7 +1806,6 @@
"tag_updated": "Ενημερώθηκε η ετικέτα: {tag}", "tag_updated": "Ενημερώθηκε η ετικέτα: {tag}",
"tagged_assets": "Ετικετοποιημένο/α {count, plural, one {# στοιχείο} other {# στοιχεία}}", "tagged_assets": "Ετικετοποιημένο/α {count, plural, one {# στοιχείο} other {# στοιχεία}}",
"tags": "Ετικέτες", "tags": "Ετικέτες",
"tap_to_run_job": "Πατήστε για να ξεκινήσει η εργασία",
"template": "Πρότυπο", "template": "Πρότυπο",
"theme": "Θέμα", "theme": "Θέμα",
"theme_selection": "Επιλογή θέματος", "theme_selection": "Επιλογή θέματος",
@@ -1904,7 +1838,6 @@
"total": "Σύνολο", "total": "Σύνολο",
"total_usage": "Συνολικη χρηση", "total_usage": "Συνολικη χρηση",
"trash": "Κάδος απορριμμάτων", "trash": "Κάδος απορριμμάτων",
"trash_action_prompt": "{count} μετακινήθηκαν στα απορρίμματα",
"trash_all": "Διαγραφή Όλων", "trash_all": "Διαγραφή Όλων",
"trash_count": "Διαγραφή {count, number}", "trash_count": "Διαγραφή {count, number}",
"trash_delete_asset": "Διαγραφή/Οριστ. Διαγραφή Αντικειμένου", "trash_delete_asset": "Διαγραφή/Οριστ. Διαγραφή Αντικειμένου",
@@ -1922,11 +1855,9 @@
"unable_to_change_pin_code": "Αδυναμία αλλαγής κωδικού PIN", "unable_to_change_pin_code": "Αδυναμία αλλαγής κωδικού PIN",
"unable_to_setup_pin_code": "Αδυναμία ρύθμισης κωδικού PIN", "unable_to_setup_pin_code": "Αδυναμία ρύθμισης κωδικού PIN",
"unarchive": "Αναίρεση αρχειοθέτησης", "unarchive": "Αναίρεση αρχειοθέτησης",
"unarchive_action_prompt": "{count} αφαιρέθηκαν από το Αρχείο",
"unarchived_count": "{count, plural, other {Αρχειοθετήσεις αναιρέθηκαν #}}", "unarchived_count": "{count, plural, other {Αρχειοθετήσεις αναιρέθηκαν #}}",
"undo": "Αναίρεση", "undo": "Αναίρεση",
"unfavorite": "Αποεπιλογή από τα αγαπημένα", "unfavorite": "Αποεπιλογή από τα αγαπημένα",
"unfavorite_action_prompt": "{count} αφαιρέθηκαν από τα Αγαπημένα",
"unhide_person": "Αναίρεση απόκρυψης ατόμου", "unhide_person": "Αναίρεση απόκρυψης ατόμου",
"unknown": "Άγνωστο", "unknown": "Άγνωστο",
"unknown_country": "Άγνωστη Χώρα", "unknown_country": "Άγνωστη Χώρα",
@@ -1944,20 +1875,15 @@
"unselect_all_duplicates": "Αποεπιλογή όλων των διπλότυπων", "unselect_all_duplicates": "Αποεπιλογή όλων των διπλότυπων",
"unselect_all_in": "Αποεπιλογή όλων στο {group}", "unselect_all_in": "Αποεπιλογή όλων στο {group}",
"unstack": "Αποστοίβαξη", "unstack": "Αποστοίβαξη",
"unstack_action_prompt": "{count} αποσυσσωρεύτηκαν",
"unstacked_assets_count": "Αποστοιβάξατε {count, plural, one {# στοιχείο} other {# στοιχεία}}", "unstacked_assets_count": "Αποστοιβάξατε {count, plural, one {# στοιχείο} other {# στοιχεία}}",
"untagged": "Χωρίς ετικέτα",
"up_next": "Ακολουθεί", "up_next": "Ακολουθεί",
"updated_at": "Ενημερωμένο", "updated_at": "Ενημερωμένο",
"updated_password": "Ο κωδικός πρόσβασης ενημερώθηκε", "updated_password": "Ο κωδικός πρόσβασης ενημερώθηκε",
"upload": "Μεταφόρτωση", "upload": "Μεταφόρτωση",
"upload_action_prompt": "{count} τοποθετήθηκαν στην ουρά για μεταφόρτωση",
"upload_concurrency": "Ταυτόχρονη μεταφόρτωση", "upload_concurrency": "Ταυτόχρονη μεταφόρτωση",
"upload_details": "Λεπτομέρειες μεταφόρτωσης",
"upload_dialog_info": "Θέλετε να αντιγράψετε (κάνετε backup) τα επιλεγμένo(α) στοιχείο(α) στο διακομιστή;", "upload_dialog_info": "Θέλετε να αντιγράψετε (κάνετε backup) τα επιλεγμένo(α) στοιχείο(α) στο διακομιστή;",
"upload_dialog_title": "Ανέβασμα στοιχείου", "upload_dialog_title": "Ανέβασμα στοιχείου",
"upload_errors": "Η μεταφόρτωση ολοκληρώθηκε με {count, plural, one {# σφάλμα} other {# σφάλματα}}, ανανεώστε τη σελίδα για να δείτε νέα στοιχεία μεταφόρτωσης.", "upload_errors": "Η μεταφόρτωση ολοκληρώθηκε με {count, plural, one {# σφάλμα} other {# σφάλματα}}, ανανεώστε τη σελίδα για να δείτε νέα στοιχεία μεταφόρτωσης.",
"upload_finished": "Ολοκλήρωση μεταφόρτωσης",
"upload_progress": "Απομένουν {remaining, number} - Ολοκληρώθηκαν {processed, number}/{total, number}", "upload_progress": "Απομένουν {remaining, number} - Ολοκληρώθηκαν {processed, number}/{total, number}",
"upload_skipped_duplicates": "Παραλείφθηκαν {count, plural, one {# διπλότυπο στοιχείο} other {# διπλότυπα στοιχεία}}", "upload_skipped_duplicates": "Παραλείφθηκαν {count, plural, one {# διπλότυπο στοιχείο} other {# διπλότυπα στοιχεία}}",
"upload_status_duplicates": "Διπλότυπα", "upload_status_duplicates": "Διπλότυπα",
@@ -1966,7 +1892,6 @@
"upload_success": "Η μεταφόρτωση ολοκληρώθηκε, ανανεώστε τη σελίδα για να δείτε τα νέα αντικείμενα.", "upload_success": "Η μεταφόρτωση ολοκληρώθηκε, ανανεώστε τη σελίδα για να δείτε τα νέα αντικείμενα.",
"upload_to_immich": "Μεταφόρτωση στο Immich ({count})", "upload_to_immich": "Μεταφόρτωση στο Immich ({count})",
"uploading": "Μεταφορτώνεται", "uploading": "Μεταφορτώνεται",
"uploading_media": "Μεταφόρτωση πολυμέσων",
"url": "URL", "url": "URL",
"usage": "Χρήση", "usage": "Χρήση",
"use_biometric": "Χρήση βιομετρικών στοιχείων", "use_biometric": "Χρήση βιομετρικών στοιχείων",
@@ -1987,7 +1912,6 @@
"user_usage_stats_description": "Προβολή στατιστικών χρήσης λογαριασμού", "user_usage_stats_description": "Προβολή στατιστικών χρήσης λογαριασμού",
"username": "Όνομα Χρήστη", "username": "Όνομα Χρήστη",
"users": "Χρήστες", "users": "Χρήστες",
"users_added_to_album_count": "Προστέθηκε {count, plural, one {# χρήστης} other {# χρήστες}} στο άλμπουμ",
"utilities": "Βοηθητικά προγράμματα", "utilities": "Βοηθητικά προγράμματα",
"validate": "Επικύρωση", "validate": "Επικύρωση",
"validate_endpoint_error": "Παρακαλώ εισάγετε ένα έγκυρο URL", "validate_endpoint_error": "Παρακαλώ εισάγετε ένα έγκυρο URL",
@@ -2006,7 +1930,6 @@
"view_album": "Προβολή Άλμπουμ", "view_album": "Προβολή Άλμπουμ",
"view_all": "Προβολή Όλων", "view_all": "Προβολή Όλων",
"view_all_users": "Προβολή όλων των χρηστών", "view_all_users": "Προβολή όλων των χρηστών",
"view_details": "Προβολή Λεπτομερειών",
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα", "view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
"view_link": "Προβολή σύνδεσμου", "view_link": "Προβολή σύνδεσμου",
"view_links": "Προβολή συνδέσμων", "view_links": "Προβολή συνδέσμων",

View File

@@ -14,7 +14,6 @@
"add_a_location": "Add a location", "add_a_location": "Add a location",
"add_a_name": "Add a name", "add_a_name": "Add a name",
"add_a_title": "Add a title", "add_a_title": "Add a title",
"add_birthday": "Add a birthday",
"add_endpoint": "Add endpoint", "add_endpoint": "Add endpoint",
"add_exclusion_pattern": "Add exclusion pattern", "add_exclusion_pattern": "Add exclusion pattern",
"add_import_path": "Add import path", "add_import_path": "Add import path",
@@ -45,13 +44,6 @@
"backup_database": "Create Database Dump", "backup_database": "Create Database Dump",
"backup_database_enable_description": "Enable database dumps", "backup_database_enable_description": "Enable database dumps",
"backup_keep_last_amount": "Amount of previous dumps to keep", "backup_keep_last_amount": "Amount of previous dumps to keep",
"backup_onboarding_1_description": "offsite copy in the cloud or at another physical location.",
"backup_onboarding_2_description": "local copies on different devices. This includes the main files and a backup of those files locally.",
"backup_onboarding_3_description": "total copies of your data, including the original files. This includes 1 offsite copy and 2 local copies.",
"backup_onboarding_description": "A <backblaze-link>3-2-1 backup strategy</backblaze-link> is recommended to protect your data. You should keep copies of your uploaded photos/videos as well as the Immich database for a comprehensive backup solution.",
"backup_onboarding_footer": "For more information about backing up Immich, please refer to the <link>documentation</link>.",
"backup_onboarding_parts_title": "A 3-2-1 backup includes:",
"backup_onboarding_title": "Backups",
"backup_settings": "Database Dump Settings", "backup_settings": "Database Dump Settings",
"backup_settings_description": "Manage database dump settings.", "backup_settings_description": "Manage database dump settings.",
"cleared_jobs": "Cleared jobs for: {job}", "cleared_jobs": "Cleared jobs for: {job}",
@@ -174,20 +166,6 @@
"metadata_settings_description": "Manage metadata settings", "metadata_settings_description": "Manage metadata settings",
"migration_job": "Migration", "migration_job": "Migration",
"migration_job_description": "Migrate thumbnails for assets and faces to the latest folder structure", "migration_job_description": "Migrate thumbnails for assets and faces to the latest folder structure",
"nightly_tasks_cluster_faces_setting_description": "Run facial recognition on newly detected faces",
"nightly_tasks_cluster_new_faces_setting": "Cluster new faces",
"nightly_tasks_database_cleanup_setting": "Database cleanup tasks",
"nightly_tasks_database_cleanup_setting_description": "Clean up old, expired data from the database",
"nightly_tasks_generate_memories_setting": "Generate memories",
"nightly_tasks_generate_memories_setting_description": "Create new memories from assets",
"nightly_tasks_missing_thumbnails_setting": "Generate missing thumbnails",
"nightly_tasks_missing_thumbnails_setting_description": "Queue assets without thumbnails for thumbnail generation",
"nightly_tasks_settings": "Nightly Tasks Settings",
"nightly_tasks_settings_description": "Manage nightly tasks",
"nightly_tasks_start_time_setting": "Start time",
"nightly_tasks_start_time_setting_description": "The time at which the server starts running the nightly tasks",
"nightly_tasks_sync_quota_usage_setting": "Sync quota usage",
"nightly_tasks_sync_quota_usage_setting_description": "Update user storage quota, based on current usage",
"no_paths_added": "No paths added", "no_paths_added": "No paths added",
"no_pattern_added": "No pattern added", "no_pattern_added": "No pattern added",
"note_apply_storage_label_previous_assets": "Note: To apply the Storage Label to previously uploaded assets, run the", "note_apply_storage_label_previous_assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
@@ -218,8 +196,6 @@
"oauth_mobile_redirect_uri": "Mobile redirect URI", "oauth_mobile_redirect_uri": "Mobile redirect URI",
"oauth_mobile_redirect_uri_override": "Mobile redirect URI override", "oauth_mobile_redirect_uri_override": "Mobile redirect URI override",
"oauth_mobile_redirect_uri_override_description": "Enable when OAuth provider does not allow a mobile URI, like ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Enable when OAuth provider does not allow a mobile URI, like ''{callback}''",
"oauth_role_claim": "Role Claim",
"oauth_role_claim_description": "Automatically grant admin access based on the presence of this claim. The claim may have either 'user' or 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Manage OAuth login settings", "oauth_settings_description": "Manage OAuth login settings",
"oauth_settings_more_details": "For more details about this feature, refer to the <link>docs</link>.", "oauth_settings_more_details": "For more details about this feature, refer to the <link>docs</link>.",
@@ -381,12 +357,10 @@
"admin_password": "Admin Password", "admin_password": "Admin Password",
"administration": "Administration", "administration": "Administration",
"advanced": "Advanced", "advanced": "Advanced",
"advanced_settings_beta_timeline_subtitle": "Try the new app experience",
"advanced_settings_beta_timeline_title": "Beta Timeline",
"advanced_settings_enable_alternate_media_filter_subtitle": "Use this option to filter media during sync based on alternate criteria. Only try this if you have issues with the app detecting all albums.", "advanced_settings_enable_alternate_media_filter_subtitle": "Use this option to filter media during sync based on alternate criteria. Only try this if you have issues with the app detecting all albums.",
"advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTAL] Use alternate device album sync filter", "advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTAL] Use alternate device album sync filter",
"advanced_settings_log_level_title": "Log level: {level}", "advanced_settings_log_level_title": "Log level: {level}",
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from local assets. Activate this setting to load remote images instead.", "advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
"advanced_settings_prefer_remote_title": "Prefer remote images", "advanced_settings_prefer_remote_title": "Prefer remote images",
"advanced_settings_proxy_headers_subtitle": "Define proxy headers Immich should send with each network request", "advanced_settings_proxy_headers_subtitle": "Define proxy headers Immich should send with each network request",
"advanced_settings_proxy_headers_title": "Proxy Headers", "advanced_settings_proxy_headers_title": "Proxy Headers",
@@ -405,7 +379,6 @@
"album_cover_updated": "Album cover updated", "album_cover_updated": "Album cover updated",
"album_delete_confirmation": "Are you sure you want to delete the album {album}?", "album_delete_confirmation": "Are you sure you want to delete the album {album}?",
"album_delete_confirmation_description": "If this album is shared, other users will not be able to access it anymore.", "album_delete_confirmation_description": "If this album is shared, other users will not be able to access it anymore.",
"album_deleted": "Album deleted",
"album_info_card_backup_album_excluded": "EXCLUDED", "album_info_card_backup_album_excluded": "EXCLUDED",
"album_info_card_backup_album_included": "INCLUDED", "album_info_card_backup_album_included": "INCLUDED",
"album_info_updated": "Album info updated", "album_info_updated": "Album info updated",
@@ -415,7 +388,6 @@
"album_options": "Album options", "album_options": "Album options",
"album_remove_user": "Remove user?", "album_remove_user": "Remove user?",
"album_remove_user_confirmation": "Are you sure you want to remove {user}?", "album_remove_user_confirmation": "Are you sure you want to remove {user}?",
"album_search_not_found": "No albums found matching your search",
"album_share_no_users": "Looks like you have shared this album with all users or you don't have any user to share with.", "album_share_no_users": "Looks like you have shared this album with all users or you don't have any user to share with.",
"album_updated": "Album updated", "album_updated": "Album updated",
"album_updated_setting_description": "Receive an email notification when a shared album has new assets", "album_updated_setting_description": "Receive an email notification when a shared album has new assets",
@@ -435,7 +407,6 @@
"albums_default_sort_order": "Default album sort order", "albums_default_sort_order": "Default album sort order",
"albums_default_sort_order_description": "Initial asset sort order when creating new albums.", "albums_default_sort_order_description": "Initial asset sort order when creating new albums.",
"albums_feature_description": "Collections of assets that can be shared with other users.", "albums_feature_description": "Collections of assets that can be shared with other users.",
"albums_on_device_count": "Albums on device ({count})",
"all": "All", "all": "All",
"all_albums": "All albums", "all_albums": "All albums",
"all_people": "All people", "all_people": "All people",
@@ -456,7 +427,6 @@
"app_settings": "App Settings", "app_settings": "App Settings",
"appears_in": "Appears in", "appears_in": "Appears in",
"archive": "Archive", "archive": "Archive",
"archive_action_prompt": "{count} added to Archive",
"archive_or_unarchive_photo": "Archive or unarchive photo", "archive_or_unarchive_photo": "Archive or unarchive photo",
"archive_page_no_archived_assets": "No archived assets found", "archive_page_no_archived_assets": "No archived assets found",
"archive_page_title": "Archive ({count})", "archive_page_title": "Archive ({count})",
@@ -519,7 +489,6 @@
"back_close_deselect": "Back, close, or deselect", "back_close_deselect": "Back, close, or deselect",
"background_location_permission": "Background location permission", "background_location_permission": "Background location permission",
"background_location_permission_content": "In order to switch networks when running in the background, Immich must *always* have precise location access so the app can read the Wi-Fi network's name", "background_location_permission_content": "In order to switch networks when running in the background, Immich must *always* have precise location access so the app can read the Wi-Fi network's name",
"backup": "Backup",
"backup_album_selection_page_albums_device": "Albums on device ({count})", "backup_album_selection_page_albums_device": "Albums on device ({count})",
"backup_album_selection_page_albums_tap": "Tap to include, double tap to exclude", "backup_album_selection_page_albums_tap": "Tap to include, double tap to exclude",
"backup_album_selection_page_assets_scatter": "Assets can scatter across multiple albums. Thus, albums can be included or excluded during the backup process.", "backup_album_selection_page_assets_scatter": "Assets can scatter across multiple albums. Thus, albums can be included or excluded during the backup process.",
@@ -580,13 +549,9 @@
"backup_manual_in_progress": "Upload already in progress. Try after sometime", "backup_manual_in_progress": "Upload already in progress. Try after sometime",
"backup_manual_success": "Success", "backup_manual_success": "Success",
"backup_manual_title": "Upload status", "backup_manual_title": "Upload status",
"backup_options": "Backup Options",
"backup_options_page_title": "Backup options", "backup_options_page_title": "Backup options",
"backup_setting_subtitle": "Manage background and foreground upload settings", "backup_setting_subtitle": "Manage background and foreground upload settings",
"backup_settings_subtitle": "Manage upload settings",
"backward": "Backward", "backward": "Backward",
"beta_sync": "Beta Sync Status",
"beta_sync_subtitle": "Manage the new sync system",
"biometric_auth_enabled": "Biometric authentication enabled", "biometric_auth_enabled": "Biometric authentication enabled",
"biometric_locked_out": "You are locked out of biometric authentication", "biometric_locked_out": "You are locked out of biometric authentication",
"biometric_no_options": "No biometric options available", "biometric_no_options": "No biometric options available",
@@ -604,7 +569,7 @@
"cache_settings_clear_cache_button": "Clear cache", "cache_settings_clear_cache_button": "Clear cache",
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.", "cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
"cache_settings_duplicated_assets_clear_button": "CLEAR", "cache_settings_duplicated_assets_clear_button": "CLEAR",
"cache_settings_duplicated_assets_subtitle": "Photos and videos that are ignore listed by the app", "cache_settings_duplicated_assets_subtitle": "Photos and videos that are black listed by the app",
"cache_settings_duplicated_assets_title": "Duplicated Assets ({count})", "cache_settings_duplicated_assets_title": "Duplicated Assets ({count})",
"cache_settings_statistics_album": "Library thumbnails", "cache_settings_statistics_album": "Library thumbnails",
"cache_settings_statistics_full": "Full images", "cache_settings_statistics_full": "Full images",
@@ -621,7 +586,6 @@
"cancel": "Cancel", "cancel": "Cancel",
"cancel_search": "Cancel search", "cancel_search": "Cancel search",
"canceled": "Canceled", "canceled": "Canceled",
"canceling": "Canceling",
"cannot_merge_people": "Cannot merge people", "cannot_merge_people": "Cannot merge people",
"cannot_undo_this_action": "You cannot undo this action!", "cannot_undo_this_action": "You cannot undo this action!",
"cannot_update_the_description": "Cannot update the description", "cannot_update_the_description": "Cannot update the description",
@@ -653,7 +617,6 @@
"clear": "Clear", "clear": "Clear",
"clear_all": "Clear all", "clear_all": "Clear all",
"clear_all_recent_searches": "Clear all recent searches", "clear_all_recent_searches": "Clear all recent searches",
"clear_file_cache": "Clear File Cache",
"clear_message": "Clear message", "clear_message": "Clear message",
"clear_value": "Clear value", "clear_value": "Clear value",
"client_cert_dialog_msg_confirm": "OK", "client_cert_dialog_msg_confirm": "OK",
@@ -736,11 +699,10 @@
"current_server_address": "Current server address", "current_server_address": "Current server address",
"custom_locale": "Custom Locale", "custom_locale": "Custom Locale",
"custom_locale_description": "Format dates and numbers based on the language and the region", "custom_locale_description": "Format dates and numbers based on the language and the region",
"custom_url": "Custom URL",
"daily_title_text_date": "E, MMM dd", "daily_title_text_date": "E, MMM dd",
"daily_title_text_date_year": "E, MMM dd, yyyy", "daily_title_text_date_year": "E, MMM dd, yyyy",
"dark": "Dark", "dark": "Dark",
"dark_theme": "Toggle dark theme", "darkTheme": "Toggle dark theme",
"date_after": "Date after", "date_after": "Date after",
"date_and_time": "Date and Time", "date_and_time": "Date and Time",
"date_before": "Date before", "date_before": "Date before",
@@ -756,8 +718,6 @@
"default_locale": "Default Locale", "default_locale": "Default Locale",
"default_locale_description": "Format dates and numbers based on your browser locale", "default_locale_description": "Format dates and numbers based on your browser locale",
"delete": "Delete", "delete": "Delete",
"delete_action_confirmation_message": "Are you sure you want to delete this asset? This action will move the asset to the server's trash and will prompt if you want to delete it locally",
"delete_action_prompt": "{count} deleted",
"delete_album": "Delete album", "delete_album": "Delete album",
"delete_api_key_prompt": "Are you sure you want to delete this API key?", "delete_api_key_prompt": "Are you sure you want to delete this API key?",
"delete_dialog_alert": "These items will be permanently deleted from Immich and from your device", "delete_dialog_alert": "These items will be permanently deleted from Immich and from your device",
@@ -771,12 +731,9 @@
"delete_key": "Delete key", "delete_key": "Delete key",
"delete_library": "Delete Library", "delete_library": "Delete Library",
"delete_link": "Delete link", "delete_link": "Delete link",
"delete_local_action_prompt": "{count} deleted locally",
"delete_local_dialog_ok_backed_up_only": "Delete Backed Up Only", "delete_local_dialog_ok_backed_up_only": "Delete Backed Up Only",
"delete_local_dialog_ok_force": "Delete Anyway", "delete_local_dialog_ok_force": "Delete Anyway",
"delete_others": "Delete others", "delete_others": "Delete others",
"delete_permanently": "Delete permanently",
"delete_permanently_action_prompt": "{count} deleted permanently",
"delete_shared_link": "Delete shared link", "delete_shared_link": "Delete shared link",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Delete Shared Link",
"delete_tag": "Delete tag", "delete_tag": "Delete tag",
@@ -787,7 +744,6 @@
"description": "Description", "description": "Description",
"description_input_hint_text": "Add description...", "description_input_hint_text": "Add description...",
"description_input_submit_error": "Error updating description, check the log for more details", "description_input_submit_error": "Error updating description, check the log for more details",
"deselect_all": "Deselect All",
"details": "Details", "details": "Details",
"direction": "Direction", "direction": "Direction",
"disabled": "Disabled", "disabled": "Disabled",
@@ -805,7 +761,6 @@
"documentation": "Documentation", "documentation": "Documentation",
"done": "Done", "done": "Done",
"download": "Download", "download": "Download",
"download_action_prompt": "Downloading {count} assets",
"download_canceled": "Download canceled", "download_canceled": "Download canceled",
"download_complete": "Download complete", "download_complete": "Download complete",
"download_enqueue": "Download enqueued", "download_enqueue": "Download enqueued",
@@ -832,10 +787,8 @@
"edit": "Edit", "edit": "Edit",
"edit_album": "Edit album", "edit_album": "Edit album",
"edit_avatar": "Edit avatar", "edit_avatar": "Edit avatar",
"edit_birthday": "Edit Birthday",
"edit_date": "Edit date", "edit_date": "Edit date",
"edit_date_and_time": "Edit date and time", "edit_date_and_time": "Edit date and time",
"edit_date_and_time_action_prompt": "{count} date and time edited",
"edit_description": "Edit description", "edit_description": "Edit description",
"edit_description_prompt": "Please select a new description:", "edit_description_prompt": "Please select a new description:",
"edit_exclusion_pattern": "Edit exclusion pattern", "edit_exclusion_pattern": "Edit exclusion pattern",
@@ -845,7 +798,6 @@
"edit_key": "Edit key", "edit_key": "Edit key",
"edit_link": "Edit link", "edit_link": "Edit link",
"edit_location": "Edit location", "edit_location": "Edit location",
"edit_location_action_prompt": "{count} location edited",
"edit_location_dialog_title": "Location", "edit_location_dialog_title": "Location",
"edit_name": "Edit name", "edit_name": "Edit name",
"edit_people": "Edit people", "edit_people": "Edit people",
@@ -864,7 +816,6 @@
"empty_trash": "Empty trash", "empty_trash": "Empty trash",
"empty_trash_confirmation": "Are you sure you want to empty the trash? This will remove all the assets in trash permanently from Immich.\nYou cannot undo this action!", "empty_trash_confirmation": "Are you sure you want to empty the trash? This will remove all the assets in trash permanently from Immich.\nYou cannot undo this action!",
"enable": "Enable", "enable": "Enable",
"enable_backup": "Enable Backup",
"enable_biometric_auth_description": "Enter your PIN code to enable biometric authentication", "enable_biometric_auth_description": "Enter your PIN code to enable biometric authentication",
"enabled": "Enabled", "enabled": "Enabled",
"end_date": "End date", "end_date": "End date",
@@ -1001,7 +952,6 @@
}, },
"exif": "Exif", "exif": "Exif",
"exif_bottom_sheet_description": "Add Description...", "exif_bottom_sheet_description": "Add Description...",
"exif_bottom_sheet_description_error": "Error updating description",
"exif_bottom_sheet_details": "DETAILS", "exif_bottom_sheet_details": "DETAILS",
"exif_bottom_sheet_location": "LOCATION", "exif_bottom_sheet_location": "LOCATION",
"exif_bottom_sheet_people": "PEOPLE", "exif_bottom_sheet_people": "PEOPLE",
@@ -1022,8 +972,6 @@
"explorer": "Explorer", "explorer": "Explorer",
"export": "Export", "export": "Export",
"export_as_json": "Export as JSON", "export_as_json": "Export as JSON",
"export_database": "Export Database",
"export_database_description": "Export the SQLite database",
"extension": "Extension", "extension": "Extension",
"external": "External", "external": "External",
"external_libraries": "External Libraries", "external_libraries": "External Libraries",
@@ -1035,7 +983,6 @@
"failed_to_load_assets": "Failed to load assets", "failed_to_load_assets": "Failed to load assets",
"failed_to_load_folder": "Failed to load folder", "failed_to_load_folder": "Failed to load folder",
"favorite": "Favorite", "favorite": "Favorite",
"favorite_action_prompt": "{count} added to Favorites",
"favorite_or_unfavorite_photo": "Favorite or unfavorite photo", "favorite_or_unfavorite_photo": "Favorite or unfavorite photo",
"favorites": "Favorites", "favorites": "Favorites",
"favorites_page_no_favorites": "No favorite assets found", "favorites_page_no_favorites": "No favorite assets found",
@@ -1075,9 +1022,6 @@
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"has_quota": "Has quota", "has_quota": "Has quota",
"hash_asset": "Hash asset",
"hashed_assets": "Hashed assets",
"hashing": "Hashing",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
"header_settings_field_validator_msg": "Value cannot be empty", "header_settings_field_validator_msg": "Value cannot be empty",
"header_settings_header_name_input": "Header name", "header_settings_header_name_input": "Header name",
@@ -1110,7 +1054,6 @@
"host": "Host", "host": "Host",
"hour": "Hour", "hour": "Hour",
"id": "ID", "id": "ID",
"idle": "Idle",
"ignore_icloud_photos": "Ignore iCloud photos", "ignore_icloud_photos": "Ignore iCloud photos",
"ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server",
"image": "Image", "image": "Image",
@@ -1168,7 +1111,6 @@
"language_no_results_title": "No languages found", "language_no_results_title": "No languages found",
"language_search_hint": "Search languages...", "language_search_hint": "Search languages...",
"language_setting_description": "Select your preferred language", "language_setting_description": "Select your preferred language",
"large_files": "Large Files",
"last_seen": "Last seen", "last_seen": "Last seen",
"latest_version": "Latest Version", "latest_version": "Latest Version",
"latitude": "Latitude", "latitude": "Latitude",
@@ -1184,18 +1126,16 @@
"library_page_sort_created": "Created date", "library_page_sort_created": "Created date",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Last modified",
"library_page_sort_title": "Album title", "library_page_sort_title": "Album title",
"licenses": "Licenses",
"light": "Light", "light": "Light",
"like_deleted": "Like deleted", "like_deleted": "Like deleted",
"link_motion_video": "Link motion video", "link_motion_video": "Link motion video",
"link_options": "Link options",
"link_to_oauth": "Link to OAuth", "link_to_oauth": "Link to OAuth",
"linked_oauth_account": "Linked OAuth account", "linked_oauth_account": "Linked OAuth account",
"list": "List", "list": "List",
"loading": "Loading", "loading": "Loading",
"loading_search_results_failed": "Loading search results failed", "loading_search_results_failed": "Loading search results failed",
"local": "Local",
"local_asset_cast_failed": "Unable to cast an asset that is not uploaded to the server", "local_asset_cast_failed": "Unable to cast an asset that is not uploaded to the server",
"local_assets": "Local Assets",
"local_network": "Local network", "local_network": "Local network",
"local_network_sheet_info": "The app will connect to the server through this URL when using the specified Wi-Fi network", "local_network_sheet_info": "The app will connect to the server through this URL when using the specified Wi-Fi network",
"location_permission": "Location permission", "location_permission": "Location permission",
@@ -1252,7 +1192,8 @@
"manage_your_devices": "Manage your logged-in devices", "manage_your_devices": "Manage your logged-in devices",
"manage_your_oauth_connection": "Manage your OAuth connection", "manage_your_oauth_connection": "Manage your OAuth connection",
"map": "Map", "map": "Map",
"map_assets_in_bounds": "{count, plural, one {# photo} other {# photos}}", "map_assets_in_bound": "{count} photo",
"map_assets_in_bounds": "{count} photos",
"map_cannot_get_user_location": "Cannot get user's location", "map_cannot_get_user_location": "Cannot get user's location",
"map_location_dialog_yes": "Yes", "map_location_dialog_yes": "Yes",
"map_location_picker_page_use_location": "Use this location", "map_location_picker_page_use_location": "Use this location",
@@ -1304,7 +1245,6 @@
"more": "More", "more": "More",
"move": "Move", "move": "Move",
"move_off_locked_folder": "Move out of locked folder", "move_off_locked_folder": "Move out of locked folder",
"move_to_lock_folder_action_prompt": "{count} added to the locked folder",
"move_to_locked_folder": "Move to locked folder", "move_to_locked_folder": "Move to locked folder",
"move_to_locked_folder_confirmation": "These photos and video will be removed from all albums, and only viewable from the locked folder", "move_to_locked_folder_confirmation": "These photos and video will be removed from all albums, and only viewable from the locked folder",
"moved_to_archive": "Moved {count, plural, one {# asset} other {# assets}} to archive", "moved_to_archive": "Moved {count, plural, one {# asset} other {# assets}} to archive",
@@ -1316,9 +1256,6 @@
"my_albums": "My albums", "my_albums": "My albums",
"name": "Name", "name": "Name",
"name_or_nickname": "Name or nickname", "name_or_nickname": "Name or nickname",
"network_requirement_photos_upload": "Use cellular data to backup photos",
"network_requirement_videos_upload": "Use cellular data to backup videos",
"network_requirements_updated": "Network requirements changed, resetting backup queue",
"networking_settings": "Networking", "networking_settings": "Networking",
"networking_subtitle": "Manage the server endpoint settings", "networking_subtitle": "Manage the server endpoint settings",
"never": "Never", "never": "Never",
@@ -1354,7 +1291,6 @@
"no_results": "No results", "no_results": "No results",
"no_results_description": "Try a synonym or more general keyword", "no_results_description": "Try a synonym or more general keyword",
"no_shared_albums_message": "Create an album to share photos and videos with people in your network", "no_shared_albums_message": "Create an album to share photos and videos with people in your network",
"no_uploads_in_progress": "No uploads in progress",
"not_in_any_album": "Not in any album", "not_in_any_album": "Not in any album",
"not_selected": "Not selected", "not_selected": "Not selected",
"note_apply_storage_label_to_previously_uploaded assets": "Note: To apply the Storage Label to previously uploaded assets, run the", "note_apply_storage_label_to_previously_uploaded assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
@@ -1392,7 +1328,6 @@
"original": "original", "original": "original",
"other": "Other", "other": "Other",
"other_devices": "Other devices", "other_devices": "Other devices",
"other_entities": "Other entities",
"other_variables": "Other variables", "other_variables": "Other variables",
"owned": "Owned", "owned": "Owned",
"owner": "Owner", "owner": "Owner",
@@ -1524,7 +1459,6 @@
"purchase_server_description_2": "Supporter status", "purchase_server_description_2": "Supporter status",
"purchase_server_title": "Server", "purchase_server_title": "Server",
"purchase_settings_server_activated": "The server product key is managed by the admin", "purchase_settings_server_activated": "The server product key is managed by the admin",
"queue_status": "Queuing {count}/{total}",
"rating": "Star rating", "rating": "Star rating",
"rating_clear": "Clear rating", "rating_clear": "Clear rating",
"rating_count": "{count, plural, one {# star} other {# stars}}", "rating_count": "{count, plural, one {# star} other {# stars}}",
@@ -1553,8 +1487,6 @@
"refreshing_faces": "Refreshing faces", "refreshing_faces": "Refreshing faces",
"refreshing_metadata": "Refreshing metadata", "refreshing_metadata": "Refreshing metadata",
"regenerating_thumbnails": "Regenerating thumbnails", "regenerating_thumbnails": "Regenerating thumbnails",
"remote": "Remote",
"remote_assets": "Remote Assets",
"remove": "Remove", "remove": "Remove",
"remove_assets_album_confirmation": "Are you sure you want to remove {count, plural, one {# asset} other {# assets}} from the album?", "remove_assets_album_confirmation": "Are you sure you want to remove {count, plural, one {# asset} other {# assets}} from the album?",
"remove_assets_shared_link_confirmation": "Are you sure you want to remove {count, plural, one {# asset} other {# assets}} from this shared link?", "remove_assets_shared_link_confirmation": "Are you sure you want to remove {count, plural, one {# asset} other {# assets}} from this shared link?",
@@ -1562,9 +1494,7 @@
"remove_custom_date_range": "Remove custom date range", "remove_custom_date_range": "Remove custom date range",
"remove_deleted_assets": "Remove Deleted Assets", "remove_deleted_assets": "Remove Deleted Assets",
"remove_from_album": "Remove from album", "remove_from_album": "Remove from album",
"remove_from_album_action_prompt": "{count} removed from the album",
"remove_from_favorites": "Remove from favorites", "remove_from_favorites": "Remove from favorites",
"remove_from_lock_folder_action_prompt": "{count} removed from the locked folder",
"remove_from_locked_folder": "Remove from locked folder", "remove_from_locked_folder": "Remove from locked folder",
"remove_from_locked_folder_confirmation": "Are you sure you want to move these photos and videos out of the locked folder? They will be visible in your library.", "remove_from_locked_folder_confirmation": "Are you sure you want to move these photos and videos out of the locked folder? They will be visible in your library.",
"remove_from_shared_link": "Remove from shared link", "remove_from_shared_link": "Remove from shared link",
@@ -1592,25 +1522,19 @@
"reset_password": "Reset password", "reset_password": "Reset password",
"reset_people_visibility": "Reset people visibility", "reset_people_visibility": "Reset people visibility",
"reset_pin_code": "Reset PIN code", "reset_pin_code": "Reset PIN code",
"reset_sqlite": "Reset SQLite Database",
"reset_sqlite_confirmation": "Are you sure you want to reset the SQLite database? You will need to log out and log in again to resync the data",
"reset_sqlite_success": "Successfully reset the SQLite database",
"reset_to_default": "Reset to default", "reset_to_default": "Reset to default",
"resolve_duplicates": "Resolve duplicates", "resolve_duplicates": "Resolve duplicates",
"resolved_all_duplicates": "Resolved all duplicates", "resolved_all_duplicates": "Resolved all duplicates",
"restore": "Restore", "restore": "Restore",
"restore_all": "Restore all", "restore_all": "Restore all",
"restore_trash_action_prompt": "{count} restored from trash",
"restore_user": "Restore user", "restore_user": "Restore user",
"restored_asset": "Restored asset", "restored_asset": "Restored asset",
"resume": "Resume", "resume": "Resume",
"retry_upload": "Retry upload", "retry_upload": "Retry upload",
"review_duplicates": "Review duplicates", "review_duplicates": "Review duplicates",
"review_large_files": "Review large files",
"role": "Role", "role": "Role",
"role_editor": "Editor", "role_editor": "Editor",
"role_viewer": "Viewer", "role_viewer": "Viewer",
"running": "Running",
"save": "Save", "save": "Save",
"save_to_gallery": "Save to gallery", "save_to_gallery": "Save to gallery",
"saved_api_key": "Saved API Key", "saved_api_key": "Saved API Key",
@@ -1742,7 +1666,6 @@
"settings_saved": "Settings saved", "settings_saved": "Settings saved",
"setup_pin_code": "Setup a PIN code", "setup_pin_code": "Setup a PIN code",
"share": "Share", "share": "Share",
"share_action_prompt": "Shared {count} assets",
"share_add_photos": "Add photos", "share_add_photos": "Add photos",
"share_assets_selected": "{count} selected", "share_assets_selected": "{count} selected",
"share_dialog_preparing": "Preparing...", "share_dialog_preparing": "Preparing...",
@@ -1764,7 +1687,6 @@
"shared_link_clipboard_copied_massage": "Copied to clipboard", "shared_link_clipboard_copied_massage": "Copied to clipboard",
"shared_link_clipboard_text": "Link: {link}\nPassword: {password}", "shared_link_clipboard_text": "Link: {link}\nPassword: {password}",
"shared_link_create_error": "Error while creating shared link", "shared_link_create_error": "Error while creating shared link",
"shared_link_custom_url_description": "Access this shared link with a custom URL",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_expire_after_option_day": "1 day", "shared_link_edit_expire_after_option_day": "1 day",
"shared_link_edit_expire_after_option_days": "{count} days", "shared_link_edit_expire_after_option_days": "{count} days",
@@ -1790,7 +1712,6 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Manage Shared links", "shared_link_manage_links": "Manage Shared links",
"shared_link_options": "Shared link options", "shared_link_options": "Shared link options",
"shared_link_password_description": "Require a password to access this shared link",
"shared_links": "Shared links", "shared_links": "Shared links",
"shared_links_description": "Share photos and videos with a link", "shared_links_description": "Share photos and videos with a link",
"shared_photos_and_videos_count": "{assetCount, plural, other {# shared photos & videos.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# shared photos & videos.}}",
@@ -1846,7 +1767,6 @@
"sort_title": "Title", "sort_title": "Title",
"source": "Source", "source": "Source",
"stack": "Stack", "stack": "Stack",
"stack_action_prompt": "{count} stacked",
"stack_duplicates": "Stack duplicates", "stack_duplicates": "Stack duplicates",
"stack_select_one_photo": "Select one main photo for the stack", "stack_select_one_photo": "Select one main photo for the stack",
"stack_selected_photos": "Stack selected photos", "stack_selected_photos": "Stack selected photos",
@@ -1866,7 +1786,6 @@
"storage_quota": "Storage Quota", "storage_quota": "Storage Quota",
"storage_usage": "{used} of {available} used", "storage_usage": "{used} of {available} used",
"submit": "Submit", "submit": "Submit",
"success": "Success",
"suggestions": "Suggestions", "suggestions": "Suggestions",
"sunrise_on_the_beach": "Sunrise on the beach", "sunrise_on_the_beach": "Sunrise on the beach",
"support": "Support", "support": "Support",
@@ -1876,8 +1795,6 @@
"sync": "Sync", "sync": "Sync",
"sync_albums": "Sync albums", "sync_albums": "Sync albums",
"sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums", "sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums",
"sync_local": "Sync Local",
"sync_remote": "Sync Remote",
"sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich", "sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Tag assets", "tag_assets": "Tag assets",
@@ -1888,7 +1805,6 @@
"tag_updated": "Updated tag: {tag}", "tag_updated": "Updated tag: {tag}",
"tagged_assets": "Tagged {count, plural, one {# asset} other {# assets}}", "tagged_assets": "Tagged {count, plural, one {# asset} other {# assets}}",
"tags": "Tags", "tags": "Tags",
"tap_to_run_job": "Tap to run job",
"template": "Template", "template": "Template",
"theme": "Theme", "theme": "Theme",
"theme_selection": "Theme selection", "theme_selection": "Theme selection",
@@ -1921,7 +1837,6 @@
"total": "Total", "total": "Total",
"total_usage": "Total usage", "total_usage": "Total usage",
"trash": "Trash", "trash": "Trash",
"trash_action_prompt": "{count} moved to trash",
"trash_all": "Trash All", "trash_all": "Trash All",
"trash_count": "Trash {count, number}", "trash_count": "Trash {count, number}",
"trash_delete_asset": "Trash/Delete Asset", "trash_delete_asset": "Trash/Delete Asset",
@@ -1939,11 +1854,9 @@
"unable_to_change_pin_code": "Unable to change PIN code", "unable_to_change_pin_code": "Unable to change PIN code",
"unable_to_setup_pin_code": "Unable to setup PIN code", "unable_to_setup_pin_code": "Unable to setup PIN code",
"unarchive": "Unarchive", "unarchive": "Unarchive",
"unarchive_action_prompt": "{count} removed from Archive",
"unarchived_count": "{count, plural, other {Unarchived #}}", "unarchived_count": "{count, plural, other {Unarchived #}}",
"undo": "Undo", "undo": "Undo",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"unfavorite_action_prompt": "{count} removed from Favorites",
"unhide_person": "Unhide person", "unhide_person": "Unhide person",
"unknown": "Unknown", "unknown": "Unknown",
"unknown_country": "Unknown Country", "unknown_country": "Unknown Country",
@@ -1961,20 +1874,15 @@
"unselect_all_duplicates": "Unselect all duplicates", "unselect_all_duplicates": "Unselect all duplicates",
"unselect_all_in": "Unselect all in {group}", "unselect_all_in": "Unselect all in {group}",
"unstack": "Un-stack", "unstack": "Un-stack",
"unstack_action_prompt": "{count} unstacked",
"unstacked_assets_count": "Un-stacked {count, plural, one {# asset} other {# assets}}", "unstacked_assets_count": "Un-stacked {count, plural, one {# asset} other {# assets}}",
"untagged": "Untagged",
"up_next": "Up next", "up_next": "Up next",
"updated_at": "Updated", "updated_at": "Updated",
"updated_password": "Updated password", "updated_password": "Updated password",
"upload": "Upload", "upload": "Upload",
"upload_action_prompt": "{count} queued for upload",
"upload_concurrency": "Upload concurrency", "upload_concurrency": "Upload concurrency",
"upload_details": "Upload Details",
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?", "upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
"upload_dialog_title": "Upload Asset", "upload_dialog_title": "Upload Asset",
"upload_errors": "Upload completed with {count, plural, one {# error} other {# errors}}, refresh the page to see new upload assets.", "upload_errors": "Upload completed with {count, plural, one {# error} other {# errors}}, refresh the page to see new upload assets.",
"upload_finished": "Upload finished",
"upload_progress": "Remaining {remaining, number} - Processed {processed, number}/{total, number}", "upload_progress": "Remaining {remaining, number} - Processed {processed, number}/{total, number}",
"upload_skipped_duplicates": "Skipped {count, plural, one {# duplicate asset} other {# duplicate assets}}", "upload_skipped_duplicates": "Skipped {count, plural, one {# duplicate asset} other {# duplicate assets}}",
"upload_status_duplicates": "Duplicates", "upload_status_duplicates": "Duplicates",
@@ -1983,7 +1891,6 @@
"upload_success": "Upload success, refresh the page to see new upload assets.", "upload_success": "Upload success, refresh the page to see new upload assets.",
"upload_to_immich": "Upload to Immich ({count})", "upload_to_immich": "Upload to Immich ({count})",
"uploading": "Uploading", "uploading": "Uploading",
"uploading_media": "Uploading media",
"url": "URL", "url": "URL",
"usage": "Usage", "usage": "Usage",
"use_biometric": "Use biometric", "use_biometric": "Use biometric",
@@ -2004,7 +1911,6 @@
"user_usage_stats_description": "View account usage statistics", "user_usage_stats_description": "View account usage statistics",
"username": "Username", "username": "Username",
"users": "Users", "users": "Users",
"users_added_to_album_count": "Added {count, plural, one {# user} other {# users}} to the album",
"utilities": "Utilities", "utilities": "Utilities",
"validate": "Validate", "validate": "Validate",
"validate_endpoint_error": "Please enter a valid URL", "validate_endpoint_error": "Please enter a valid URL",
@@ -2023,7 +1929,6 @@
"view_album": "View Album", "view_album": "View Album",
"view_all": "View All", "view_all": "View All",
"view_all_users": "View all users", "view_all_users": "View all users",
"view_details": "View Details",
"view_in_timeline": "View in timeline", "view_in_timeline": "View in timeline",
"view_link": "View link", "view_link": "View link",
"view_links": "View links", "view_links": "View links",

View File

@@ -2,7 +2,7 @@
"about": "Acerca de", "about": "Acerca de",
"account": "Cuenta", "account": "Cuenta",
"account_settings": "Ajustes de la cuenta", "account_settings": "Ajustes de la cuenta",
"acknowledge": "Aceptar", "acknowledge": "De acuerdo",
"action": "Acción", "action": "Acción",
"action_common_update": "Actualizar", "action_common_update": "Actualizar",
"actions": "Acciones", "actions": "Acciones",
@@ -14,13 +14,13 @@
"add_a_location": "Agregar ubicación", "add_a_location": "Agregar ubicación",
"add_a_name": "Agregar nombre", "add_a_name": "Agregar nombre",
"add_a_title": "Agregar título", "add_a_title": "Agregar título",
"add_endpoint": "Agregar endpoint", "add_endpoint": "Añadir endpoint",
"add_exclusion_pattern": "Agregar patrón de exclusión", "add_exclusion_pattern": "Agregar patrón de exclusión",
"add_import_path": "Agregar ruta de importación", "add_import_path": "Agregar ruta de importación",
"add_location": "Agregar ubicación", "add_location": "Agregar ubicación",
"add_more_users": "Agregar más usuarios", "add_more_users": "Agregar más usuarios",
"add_partner": "Agregar compañero", "add_partner": "Agregar compañero",
"add_path": "Agregar ruta", "add_path": "Agregar carpeta",
"add_photos": "Agregar fotos", "add_photos": "Agregar fotos",
"add_tag": "Agregar etiqueta", "add_tag": "Agregar etiqueta",
"add_to": "Agregar a…", "add_to": "Agregar a…",
@@ -63,8 +63,8 @@
"exclusion_pattern_description": "Los patrones de exclusión te permiten ignorar archivos y carpetas al escanear tu biblioteca. Es útil si tienes carpetas que contienen archivos que no deseas importar, por ejemplo archivos RAW.", "exclusion_pattern_description": "Los patrones de exclusión te permiten ignorar archivos y carpetas al escanear tu biblioteca. Es útil si tienes carpetas que contienen archivos que no deseas importar, por ejemplo archivos RAW.",
"external_library_management": "Gestión de bibliotecas externas", "external_library_management": "Gestión de bibliotecas externas",
"face_detection": "Detección de caras", "face_detection": "Detección de caras",
"face_detection_description": "Detecta las caras en los elementos mediante aprendizaje automático. En el caso de los vídeos, solo se tiene en cuenta la miniatura. \"Actualizar\" (re)procesará todos los elementos. \"Restablecer\" borra además todos los datos de caras actuales. \"Faltante\" pone en cola los elementos que aún no se han procesado. Las caras detectadas se pondrán en cola para el reconocimiento facial una vez finalizada la detección, agrupándolos en personas existentes o nuevas.", "face_detection_description": "Detecta las caras en los activos mediante aprendizaje automático. En el caso de los vídeos, solo se tiene en cuenta la miniatura. \"Actualizar\" (re)procesará todos los elementos. \"Restablecer\" borra además todos los datos de caras actuales. \"Falta\" pone en cola los elementos que aún no se han procesado. Las caras detectadas se pondrán en cola para el reconocimiento facial una vez finalizada la detección, agrupándolos en personas existentes o nuevas.",
"facial_recognition_job_description": "Agrupa las caras detectadas en personas. Este paso se realiza después de completar la detección de caras. \"Restablecer\" (re)agrupa todas las caras. \"Faltante\" pone en cola las caras que no tienen una persona asignada.", "facial_recognition_job_description": "Agrupa las caras detectadas en personas. Este paso se ejecuta una vez finalizada la detección de caras. \"Restablecer\" (re)agrupa todas las caras. \"Falta\" pone en cola las caras que no tienen asignada una persona.",
"failed_job_command": "El comando {command} ha fallado para la tarea: {job}", "failed_job_command": "El comando {command} ha fallado para la tarea: {job}",
"force_delete_user_warning": "CUIDADO: Esta acción eliminará inmediatamente el usuario y todos los elementos. Esta accion no se puede deshacer y los archivos no pueden ser recuperados.", "force_delete_user_warning": "CUIDADO: Esta acción eliminará inmediatamente el usuario y todos los elementos. Esta accion no se puede deshacer y los archivos no pueden ser recuperados.",
"image_format": "Formato", "image_format": "Formato",
@@ -166,23 +166,9 @@
"metadata_settings_description": "Administrar la configuración de metadatos", "metadata_settings_description": "Administrar la configuración de metadatos",
"migration_job": "Migración", "migration_job": "Migración",
"migration_job_description": "Migrar miniaturas de archivos y caras a la estructura de carpetas más reciente", "migration_job_description": "Migrar miniaturas de archivos y caras a la estructura de carpetas más reciente",
"nightly_tasks_cluster_faces_setting_description": "Ejecutar reconocimiento facial en caras detectadas recientemente",
"nightly_tasks_cluster_new_faces_setting": "Agrupar caras nuevas",
"nightly_tasks_database_cleanup_setting": "Tareas de limpieza de base de datos",
"nightly_tasks_database_cleanup_setting_description": "Limpiar datos antiguos y caducados de la base de datos",
"nightly_tasks_generate_memories_setting": "Generar recuerdos",
"nightly_tasks_generate_memories_setting_description": "Crear nuevos recuerdos a partir de activos",
"nightly_tasks_missing_thumbnails_setting": "Generar miniaturas faltantes",
"nightly_tasks_missing_thumbnails_setting_description": "Poner en cola a activos sin miniaturas para la generación de miniaturas",
"nightly_tasks_settings": "Configuración de Tareas Nocturnas",
"nightly_tasks_settings_description": "Gestionar Tareas Nocturnas",
"nightly_tasks_start_time_setting": "Tiempo de inicio",
"nightly_tasks_start_time_setting_description": "El tiempo cuando el servidor comienza a ejecutar las tareas nocturnas",
"nightly_tasks_sync_quota_usage_setting": "Uso de la cuota de sincronización",
"nightly_tasks_sync_quota_usage_setting_description": "Actualizar la cuota de almacenamiento del usuario, según el uso actual",
"no_paths_added": "No se han añadido carpetas", "no_paths_added": "No se han añadido carpetas",
"no_pattern_added": "No se han añadido patrones", "no_pattern_added": "No se han añadido patrones",
"note_apply_storage_label_previous_assets": "Nota: para aplicar una Etiqueta de Almacenamiento a un elemento anteriormente subido, lanza el", "note_apply_storage_label_previous_assets": "Nota: para aplicar una Etiqueta de Almacenamiento a un elemento anteriormente cargado, lanza el",
"note_cannot_be_changed_later": "NOTA: ¡No se puede cambiar posteriormente!", "note_cannot_be_changed_later": "NOTA: ¡No se puede cambiar posteriormente!",
"notification_email_from_address": "Desde", "notification_email_from_address": "Desde",
"notification_email_from_address_description": "Dirección de correo electrónico del remitente, por ejemplo: \"Immich Photo Server <noreply@example.com>\". Asegúrate de utilizar una dirección desde la que puedas enviar correos electrónicos.", "notification_email_from_address_description": "Dirección de correo electrónico del remitente, por ejemplo: \"Immich Photo Server <noreply@example.com>\". Asegúrate de utilizar una dirección desde la que puedas enviar correos electrónicos.",
@@ -210,8 +196,6 @@
"oauth_mobile_redirect_uri": "URI de redireccionamiento móvil", "oauth_mobile_redirect_uri": "URI de redireccionamiento móvil",
"oauth_mobile_redirect_uri_override": "Sobreescribir URI de redirección móvil", "oauth_mobile_redirect_uri_override": "Sobreescribir URI de redirección móvil",
"oauth_mobile_redirect_uri_override_description": "Habilitar cuando el proveedor de OAuth no permite una URI móvil, como ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Habilitar cuando el proveedor de OAuth no permite una URI móvil, como ''{callback}''",
"oauth_role_claim": "Concesión de rol",
"oauth_role_claim_description": "Otorgar acceso de administrador automáticamente según la presencia de esta concesión. La concesión puede tener \"usuario\" o \"admin\".",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Administrar la configuración de inicio de sesión de OAuth", "oauth_settings_description": "Administrar la configuración de inicio de sesión de OAuth",
"oauth_settings_more_details": "Para más detalles acerca de esta característica, consulte la <link>documentación</link>.", "oauth_settings_more_details": "Para más detalles acerca de esta característica, consulte la <link>documentación</link>.",
@@ -221,7 +205,7 @@
"oauth_storage_quota_claim_description": "Establezca automáticamente la cuota de almacenamiento del usuario al valor de esta solicitud.", "oauth_storage_quota_claim_description": "Establezca automáticamente la cuota de almacenamiento del usuario al valor de esta solicitud.",
"oauth_storage_quota_default": "Cuota de almacenamiento predeterminada (GiB)", "oauth_storage_quota_default": "Cuota de almacenamiento predeterminada (GiB)",
"oauth_storage_quota_default_description": "Cuota en GiB que se utilizará cuando no se proporcione ninguna por defecto.", "oauth_storage_quota_default_description": "Cuota en GiB que se utilizará cuando no se proporcione ninguna por defecto.",
"oauth_timeout": "Límite de tiempo para la solicitud", "oauth_timeout": "Expiración de solicitud",
"oauth_timeout_description": "Tiempo de espera de solicitudes en milisegundos", "oauth_timeout_description": "Tiempo de espera de solicitudes en milisegundos",
"password_enable_description": "Iniciar sesión con correo electrónico y contraseña", "password_enable_description": "Iniciar sesión con correo electrónico y contraseña",
"password_settings": "Contraseña de Acceso", "password_settings": "Contraseña de Acceso",
@@ -263,7 +247,7 @@
"storage_template_onboarding_description_v2": "Al habilitar esta función, los archivos se organizarán automáticamente según la plantilla definida por el usuario. Para más información, consulte la <link>documentación</link>.", "storage_template_onboarding_description_v2": "Al habilitar esta función, los archivos se organizarán automáticamente según la plantilla definida por el usuario. Para más información, consulte la <link>documentación</link>.",
"storage_template_path_length": "Límite aproximado de la longitud de la ruta: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "Límite aproximado de la longitud de la ruta: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Plantilla de almacenamiento", "storage_template_settings": "Plantilla de almacenamiento",
"storage_template_settings_description": "Administrar la estructura de carpetas y el nombre de archivo del recurso subido", "storage_template_settings_description": "Administrar la estructura de carpetas y el nombre de archivo del recurso cargado",
"storage_template_user_label": "<code>{label}</code> es la etiqueta de almacenamiento del usuario", "storage_template_user_label": "<code>{label}</code> es la etiqueta de almacenamiento del usuario",
"system_settings": "Ajustes del Sistema", "system_settings": "Ajustes del Sistema",
"tag_cleanup_job": "Limpieza de etiquetas", "tag_cleanup_job": "Limpieza de etiquetas",
@@ -373,12 +357,10 @@
"admin_password": "Contraseña del Administrador", "admin_password": "Contraseña del Administrador",
"administration": "Administración", "administration": "Administración",
"advanced": "Avanzada", "advanced": "Avanzada",
"advanced_settings_beta_timeline_subtitle": "Prueba la nueva experiencia de la aplicación",
"advanced_settings_beta_timeline_title": "Cronología beta",
"advanced_settings_enable_alternate_media_filter_subtitle": "Usa esta opción para filtrar medios durante la sincronización según criterios alternativos. Intenta esto solo si tienes problemas con que la aplicación detecte todos los álbumes.", "advanced_settings_enable_alternate_media_filter_subtitle": "Usa esta opción para filtrar medios durante la sincronización según criterios alternativos. Intenta esto solo si tienes problemas con que la aplicación detecte todos los álbumes.",
"advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTAL] Usar filtro alternativo de sincronización de álbumes del dispositivo", "advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTAL] Usar filtro alternativo de sincronización de álbumes del dispositivo",
"advanced_settings_log_level_title": "Nivel de registro: {level}", "advanced_settings_log_level_title": "Nivel de registro: {level}",
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas desde los archivos locales. Activa esta opción para cargar imágenes remotas en su lugar.", "advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de los elementos encontrados en el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas", "advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
"advanced_settings_proxy_headers_subtitle": "Configura headers HTTP que Immich incluirá en cada petición de red", "advanced_settings_proxy_headers_subtitle": "Configura headers HTTP que Immich incluirá en cada petición de red",
"advanced_settings_proxy_headers_title": "Cabeceras Proxy", "advanced_settings_proxy_headers_title": "Cabeceras Proxy",
@@ -397,7 +379,6 @@
"album_cover_updated": "Portada del álbum actualizada", "album_cover_updated": "Portada del álbum actualizada",
"album_delete_confirmation": "¿Estás seguro de que deseas eliminar el álbum {album}?", "album_delete_confirmation": "¿Estás seguro de que deseas eliminar el álbum {album}?",
"album_delete_confirmation_description": "Si este álbum se comparte, otros usuarios ya no podrán acceder a él.", "album_delete_confirmation_description": "Si este álbum se comparte, otros usuarios ya no podrán acceder a él.",
"album_deleted": "Álbum eliminado",
"album_info_card_backup_album_excluded": "EXCLUIDOS", "album_info_card_backup_album_excluded": "EXCLUIDOS",
"album_info_card_backup_album_included": "INCLUIDOS", "album_info_card_backup_album_included": "INCLUIDOS",
"album_info_updated": "Información del álbum actualizada", "album_info_updated": "Información del álbum actualizada",
@@ -407,7 +388,6 @@
"album_options": "Opciones del Album", "album_options": "Opciones del Album",
"album_remove_user": "¿Eliminar usuario?", "album_remove_user": "¿Eliminar usuario?",
"album_remove_user_confirmation": "¿Estás seguro de que quieres eliminar a {user}?", "album_remove_user_confirmation": "¿Estás seguro de que quieres eliminar a {user}?",
"album_search_not_found": "No se encontraron álbumes que coincidan con tu búsqueda",
"album_share_no_users": "Parece que has compartido este álbum con todos los usuarios o no tienes ningún usuario con quien compartirlo.", "album_share_no_users": "Parece que has compartido este álbum con todos los usuarios o no tienes ningún usuario con quien compartirlo.",
"album_updated": "Album actualizado", "album_updated": "Album actualizado",
"album_updated_setting_description": "Reciba una notificación por correo electrónico cuando un álbum compartido tenga nuevos archivos", "album_updated_setting_description": "Reciba una notificación por correo electrónico cuando un álbum compartido tenga nuevos archivos",
@@ -425,9 +405,8 @@
"albums": "Álbumes", "albums": "Álbumes",
"albums_count": "{count, plural, one {{count, number} Álbum} other {{count, number} Álbumes}}", "albums_count": "{count, plural, one {{count, number} Álbum} other {{count, number} Álbumes}}",
"albums_default_sort_order": "Ordenación por defecto de los álbumes", "albums_default_sort_order": "Ordenación por defecto de los álbumes",
"albums_default_sort_order_description": "Orden de clasificación inicial de los recursos al crear nuevos álbumes.", "albums_default_sort_order_description": "Orden de clasificación inicial de los activos al crear nuevos álbumes.",
"albums_feature_description": "Colecciones de recursos que pueden ser compartidos con otros usuarios.", "albums_feature_description": "Colecciones de activos que pueden compartirse con otros usuarios.",
"albums_on_device_count": "Álbumes en el dispositivo ({count})",
"all": "Todos", "all": "Todos",
"all_albums": "Todos los albums", "all_albums": "Todos los albums",
"all_people": "Todas las personas", "all_people": "Todas las personas",
@@ -448,7 +427,6 @@
"app_settings": "Ajustes de Aplicacion", "app_settings": "Ajustes de Aplicacion",
"appears_in": "Aparece en", "appears_in": "Aparece en",
"archive": "Archivo", "archive": "Archivo",
"archive_action_prompt": "{count} añadidos al Archivo",
"archive_or_unarchive_photo": "Archivar o restaurar foto", "archive_or_unarchive_photo": "Archivar o restaurar foto",
"archive_page_no_archived_assets": "No se encontraron elementos archivados", "archive_page_no_archived_assets": "No se encontraron elementos archivados",
"archive_page_title": "Archivo ({count})", "archive_page_title": "Archivo ({count})",
@@ -486,12 +464,13 @@
"assets": "elementos", "assets": "elementos",
"assets_added_count": "Añadido {count, plural, one {# asset} other {# assets}}", "assets_added_count": "Añadido {count, plural, one {# asset} other {# assets}}",
"assets_added_to_album_count": "Añadido {count, plural, one {# asset} other {# assets}} al álbum", "assets_added_to_album_count": "Añadido {count, plural, one {# asset} other {# assets}} al álbum",
"assets_cannot_be_added_to_album_count": "{count, plural, one {El recurso no puede ser añadido al álbum} other {Los recursos no pueden ser añadidos al álbum}}", "assets_added_to_name_count": "Añadido {count, plural, one {# asset} other {# assets}} a {hasName, select, true {<b>{name}</b>} other {new album}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} no pueden ser añadidos al album",
"assets_count": "{count, plural, one {# activo} other {# activos}}", "assets_count": "{count, plural, one {# activo} other {# activos}}",
"assets_deleted_permanently": "{count} elemento(s) eliminado(s) permanentemente", "assets_deleted_permanently": "{count} elemento(s) eliminado(s) permanentemente",
"assets_deleted_permanently_from_server": "{count} recurso(s) eliminado(s) de forma permanente del servidor de Immich", "assets_deleted_permanently_from_server": "{count} recurso(s) eliminado(s) de forma permanente del servidor de Immich",
"assets_downloaded_failed": "{count, plural, one {# archivo descargado - {error} archivo fallido} other {# archivos descargados - {error} archivos fallidos}}", "assets_downloaded_failed": "{count, plural, one {Descargado archivo # - {error} archivo fallido} other {Descargados # archivos - {error} archivos fallidos}}",
"assets_downloaded_successfully": "{count, plural, one {# archivo descargado exitosamente} other {# archivos descargados exitosamente}}", "assets_downloaded_successfully": "{count, plural, one {Archivo # descargado correctamente} other {Archivos # descargados correctamente}}",
"assets_moved_to_trash_count": "{count, plural, one {# elemento movido} other {# elementos movidos}} a la papelera", "assets_moved_to_trash_count": "{count, plural, one {# elemento movido} other {# elementos movidos}} a la papelera",
"assets_permanently_deleted_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}", "assets_permanently_deleted_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}",
"assets_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}", "assets_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}",
@@ -511,7 +490,6 @@
"back_close_deselect": "Atrás, cerrar o anular la selección", "back_close_deselect": "Atrás, cerrar o anular la selección",
"background_location_permission": "Permiso de ubicación en segundo plano", "background_location_permission": "Permiso de ubicación en segundo plano",
"background_location_permission_content": "Para poder cambiar de red mientras se ejecuta en segundo plano, Immich debe tener *siempre* acceso a la ubicación precisa para que la aplicación pueda leer el nombre de la red Wi-Fi", "background_location_permission_content": "Para poder cambiar de red mientras se ejecuta en segundo plano, Immich debe tener *siempre* acceso a la ubicación precisa para que la aplicación pueda leer el nombre de la red Wi-Fi",
"backup": "Copia de Seguridad",
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({count})", "backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({count})",
"backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir", "backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir",
"backup_album_selection_page_assets_scatter": "Los elementos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.", "backup_album_selection_page_assets_scatter": "Los elementos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
@@ -575,8 +553,6 @@
"backup_options_page_title": "Opciones de Copia de Seguridad", "backup_options_page_title": "Opciones de Copia de Seguridad",
"backup_setting_subtitle": "Administra las configuraciones de respaldo en segundo y primer plano", "backup_setting_subtitle": "Administra las configuraciones de respaldo en segundo y primer plano",
"backward": "Retroceder", "backward": "Retroceder",
"beta_sync": "Estado de Sincronización Beta",
"beta_sync_subtitle": "Administrar el nuevo sistema de sincronización",
"biometric_auth_enabled": "Autentificación biométrica habilitada", "biometric_auth_enabled": "Autentificación biométrica habilitada",
"biometric_locked_out": "Estás bloqueado de la autentificación biométrica", "biometric_locked_out": "Estás bloqueado de la autentificación biométrica",
"biometric_no_options": "Sin opciones biométricas disponibles", "biometric_no_options": "Sin opciones biométricas disponibles",
@@ -594,7 +570,7 @@
"cache_settings_clear_cache_button": "Borrar caché", "cache_settings_clear_cache_button": "Borrar caché",
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.", "cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
"cache_settings_duplicated_assets_clear_button": "LIMPIAR", "cache_settings_duplicated_assets_clear_button": "LIMPIAR",
"cache_settings_duplicated_assets_subtitle": "Fotos y vídeos ignorados por la aplicación", "cache_settings_duplicated_assets_subtitle": "Fotos y vídeos en la lista negra de la app",
"cache_settings_duplicated_assets_title": "Elementos duplicados ({count})", "cache_settings_duplicated_assets_title": "Elementos duplicados ({count})",
"cache_settings_statistics_album": "Miniaturas de la biblioteca", "cache_settings_statistics_album": "Miniaturas de la biblioteca",
"cache_settings_statistics_full": "Imágenes completas", "cache_settings_statistics_full": "Imágenes completas",
@@ -611,7 +587,6 @@
"cancel": "Cancelar", "cancel": "Cancelar",
"cancel_search": "Cancelar búsqueda", "cancel_search": "Cancelar búsqueda",
"canceled": "Cancelado", "canceled": "Cancelado",
"canceling": "Cancelando",
"cannot_merge_people": "No se pueden fusionar personas", "cannot_merge_people": "No se pueden fusionar personas",
"cannot_undo_this_action": "¡No puedes deshacer esta acción!", "cannot_undo_this_action": "¡No puedes deshacer esta acción!",
"cannot_update_the_description": "No se puede actualizar la descripción", "cannot_update_the_description": "No se puede actualizar la descripción",
@@ -725,11 +700,10 @@
"current_server_address": "Dirección actual del servidor", "current_server_address": "Dirección actual del servidor",
"custom_locale": "Configuración regional personalizada", "custom_locale": "Configuración regional personalizada",
"custom_locale_description": "Formatear fechas y números según el idioma y la región", "custom_locale_description": "Formatear fechas y números según el idioma y la región",
"custom_url": "URL personalizada",
"daily_title_text_date": "E dd, MMM", "daily_title_text_date": "E dd, MMM",
"daily_title_text_date_year": "E dd de MMM, yyyy", "daily_title_text_date_year": "E dd de MMM, yyyy",
"dark": "Oscuro", "dark": "Oscuro",
"dark_theme": "Alternar tema oscuro", "darkTheme": "Activar tema oscuro",
"date_after": "Fecha posterior", "date_after": "Fecha posterior",
"date_and_time": "Fecha y Hora", "date_and_time": "Fecha y Hora",
"date_before": "Fecha anterior", "date_before": "Fecha anterior",
@@ -745,14 +719,12 @@
"default_locale": "Configuración regional predeterminada", "default_locale": "Configuración regional predeterminada",
"default_locale_description": "Formatee fechas y números según la configuración regional de su navegador", "default_locale_description": "Formatee fechas y números según la configuración regional de su navegador",
"delete": "Eliminar", "delete": "Eliminar",
"delete_action_confirmation_message": "¿Está seguro que desea eliminar este archivo? Esta acción lo moverá a la papelera del servidor y le preguntará si desea eliminarlo localmente",
"delete_action_prompt": "{count} eliminados",
"delete_album": "Eliminar álbum", "delete_album": "Eliminar álbum",
"delete_api_key_prompt": "¿Está seguro de que desea eliminar esta clave API?", "delete_api_key_prompt": "¿Está seguro de que desea eliminar esta clave API?",
"delete_dialog_alert": "Estos elementos serán eliminados permanentemente de Immich y de tu dispositivo", "delete_dialog_alert": "Estos elementos serán eliminados permanentemente de Immich y de tu dispositivo",
"delete_dialog_alert_local": "Estos elementos se eliminarán permanente de tu dispositivo pero seguirán disponibles en el servidor de Immich", "delete_dialog_alert_local": "Estas imágenes van a ser borradas de tu dispositivo, pero seguirán disponibles en el servidor Immich",
"delete_dialog_alert_local_non_backed_up": "Algunos de los elementos no tienen copia de seguridad en Immich y serán borrados permanentemente de tu dispositivo", "delete_dialog_alert_local_non_backed_up": "Algunas de las imágenes no tienen copia de seguridad y serán borradas de forma permanente de tu dispositivo",
"delete_dialog_alert_remote": "Estas imágenes van a ser borradas permanentemente del servidor de Immich", "delete_dialog_alert_remote": "Estas imágenes van a ser borradas de forma permanente del servidor Immich",
"delete_dialog_ok_force": "Borrar de todos modos", "delete_dialog_ok_force": "Borrar de todos modos",
"delete_dialog_title": "Eliminar Permanentemente", "delete_dialog_title": "Eliminar Permanentemente",
"delete_duplicates_confirmation": "¿Está seguro de que desea eliminar permanentemente estos duplicados?", "delete_duplicates_confirmation": "¿Está seguro de que desea eliminar permanentemente estos duplicados?",
@@ -760,12 +732,9 @@
"delete_key": "Eliminar clave", "delete_key": "Eliminar clave",
"delete_library": "Eliminar biblioteca", "delete_library": "Eliminar biblioteca",
"delete_link": "Eliminar enlace", "delete_link": "Eliminar enlace",
"delete_local_action_prompt": "{count} eliminados localmente",
"delete_local_dialog_ok_backed_up_only": "Borrar solo las que tengan copia de seguridad", "delete_local_dialog_ok_backed_up_only": "Borrar solo las que tengan copia de seguridad",
"delete_local_dialog_ok_force": "Borrar de todos modos", "delete_local_dialog_ok_force": "Borrar de todos modos",
"delete_others": "Eliminar otros", "delete_others": "Eliminar otros",
"delete_permanently": "Eliminar permanentemente",
"delete_permanently_action_prompt": "{count} eliminados permanentemente",
"delete_shared_link": "Eliminar enlace compartido", "delete_shared_link": "Eliminar enlace compartido",
"delete_shared_link_dialog_title": "Eliminar enlace compartido", "delete_shared_link_dialog_title": "Eliminar enlace compartido",
"delete_tag": "Eliminar etiqueta", "delete_tag": "Eliminar etiqueta",
@@ -776,12 +745,10 @@
"description": "Descripción", "description": "Descripción",
"description_input_hint_text": "Agregar descripción...", "description_input_hint_text": "Agregar descripción...",
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles", "description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
"deselect_all": "Deseleccionar Todo",
"details": "Detalles", "details": "Detalles",
"direction": "Dirección", "direction": "Dirección",
"disabled": "Deshabilitado", "disabled": "Deshabilitado",
"disallow_edits": "Bloquear edición", "disallow_edits": "Bloquear edición",
"discord": "Discord",
"discover": "Descubrir", "discover": "Descubrir",
"discovered_devices": "Dispositivos descubiertos", "discovered_devices": "Dispositivos descubiertos",
"dismiss_all_errors": "Descartar todos los errores", "dismiss_all_errors": "Descartar todos los errores",
@@ -794,7 +761,6 @@
"documentation": "Documentación", "documentation": "Documentación",
"done": "Hecho", "done": "Hecho",
"download": "Descargar", "download": "Descargar",
"download_action_prompt": "Descargando {count} archivos",
"download_canceled": "Descarga cancelada", "download_canceled": "Descarga cancelada",
"download_complete": "Descarga completada", "download_complete": "Descarga completada",
"download_enqueue": "Descarga en cola", "download_enqueue": "Descarga en cola",
@@ -832,7 +798,6 @@
"edit_key": "Editar clave", "edit_key": "Editar clave",
"edit_link": "Editar enlace", "edit_link": "Editar enlace",
"edit_location": "Editar ubicación", "edit_location": "Editar ubicación",
"edit_location_action_prompt": "{count} ubicaciones actualizadas",
"edit_location_dialog_title": "Ubicación", "edit_location_dialog_title": "Ubicación",
"edit_name": "Cambiar nombre", "edit_name": "Cambiar nombre",
"edit_people": "Editar persona", "edit_people": "Editar persona",
@@ -851,7 +816,6 @@
"empty_trash": "Vaciar papelera", "empty_trash": "Vaciar papelera",
"empty_trash_confirmation": "¿Estás seguro de que quieres vaciar la papelera? Esto eliminará permanentemente todos los archivos de la basura de Immich.\n¡No puedes deshacer esta acción!", "empty_trash_confirmation": "¿Estás seguro de que quieres vaciar la papelera? Esto eliminará permanentemente todos los archivos de la basura de Immich.\n¡No puedes deshacer esta acción!",
"enable": "Habilitar", "enable": "Habilitar",
"enable_backup": "Habilitar Copia de Seguridad",
"enable_biometric_auth_description": "Introduce tu código PIN para habilitar la autentificación biométrica", "enable_biometric_auth_description": "Introduce tu código PIN para habilitar la autentificación biométrica",
"enabled": "Habilitado", "enabled": "Habilitado",
"end_date": "Fecha final", "end_date": "Fecha final",
@@ -1008,8 +972,6 @@
"explorer": "Explorador", "explorer": "Explorador",
"export": "Exportar", "export": "Exportar",
"export_as_json": "Exportar a JSON", "export_as_json": "Exportar a JSON",
"export_database": "Exportar Base de Datos",
"export_database_description": "Exportar la Base de Datos SQLite",
"extension": "Extensión", "extension": "Extensión",
"external": "Externo", "external": "Externo",
"external_libraries": "Bibliotecas Externas", "external_libraries": "Bibliotecas Externas",
@@ -1021,7 +983,6 @@
"failed_to_load_assets": "Error al cargar los activos", "failed_to_load_assets": "Error al cargar los activos",
"failed_to_load_folder": "No se pudo cargar la carpeta", "failed_to_load_folder": "No se pudo cargar la carpeta",
"favorite": "Favorito", "favorite": "Favorito",
"favorite_action_prompt": "{count} añadidos a Favoritos",
"favorite_or_unfavorite_photo": "Foto favorita o no favorita", "favorite_or_unfavorite_photo": "Foto favorita o no favorita",
"favorites": "Favoritos", "favorites": "Favoritos",
"favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos", "favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos",
@@ -1061,9 +1022,6 @@
"haptic_feedback_switch": "Activar respuesta háptica", "haptic_feedback_switch": "Activar respuesta háptica",
"haptic_feedback_title": "Respuesta Háptica", "haptic_feedback_title": "Respuesta Háptica",
"has_quota": "Su cuota", "has_quota": "Su cuota",
"hash_asset": "Generar hash del archivo",
"hashed_assets": "Archivos con hash generado",
"hashing": "Generando hash",
"header_settings_add_header_tip": "Añadir cabecera", "header_settings_add_header_tip": "Añadir cabecera",
"header_settings_field_validator_msg": "El valor no puede estar vacío", "header_settings_field_validator_msg": "El valor no puede estar vacío",
"header_settings_header_name_input": "Nombre de la cabecera", "header_settings_header_name_input": "Nombre de la cabecera",
@@ -1096,7 +1054,6 @@
"host": "Host", "host": "Host",
"hour": "Hora", "hour": "Hora",
"id": "ID", "id": "ID",
"idle": "Inactivo",
"ignore_icloud_photos": "Ignorar fotos de iCloud", "ignore_icloud_photos": "Ignorar fotos de iCloud",
"ignore_icloud_photos_description": "Las fotos almacenadas en iCloud no se subirán a Immich", "ignore_icloud_photos_description": "Las fotos almacenadas en iCloud no se subirán a Immich",
"image": "Imagen", "image": "Imagen",
@@ -1154,7 +1111,6 @@
"language_no_results_title": "No se han encontrado idiomas", "language_no_results_title": "No se han encontrado idiomas",
"language_search_hint": "Buscar idiomas...", "language_search_hint": "Buscar idiomas...",
"language_setting_description": "Selecciona tu idioma preferido", "language_setting_description": "Selecciona tu idioma preferido",
"large_files": "Archivos Grandes",
"last_seen": "Ultima vez visto", "last_seen": "Ultima vez visto",
"latest_version": "Última versión", "latest_version": "Última versión",
"latitude": "Latitud", "latitude": "Latitud",
@@ -1170,18 +1126,16 @@
"library_page_sort_created": "Creado más recientemente", "library_page_sort_created": "Creado más recientemente",
"library_page_sort_last_modified": "Última modificación", "library_page_sort_last_modified": "Última modificación",
"library_page_sort_title": "Título del álbum", "library_page_sort_title": "Título del álbum",
"licenses": "Licencias",
"light": "Claro", "light": "Claro",
"like_deleted": "Me gusta eliminado", "like_deleted": "Me gusta eliminado",
"link_motion_video": "Enlazar vídeo en movimiento", "link_motion_video": "Enlazar vídeo en movimiento",
"link_options": "Opciones de enlace",
"link_to_oauth": "Enlace a OAuth", "link_to_oauth": "Enlace a OAuth",
"linked_oauth_account": "Cuenta OAuth vinculada", "linked_oauth_account": "Cuenta OAuth vinculada",
"list": "Listar", "list": "Listar",
"loading": "Cargando", "loading": "Cargando",
"loading_search_results_failed": "Error al cargar los resultados de la búsqueda", "loading_search_results_failed": "Error al cargar los resultados de la búsqueda",
"local": "Local", "local_asset_cast_failed": "No se puede emitir un activo que no está cargado en el servidor",
"local_asset_cast_failed": "No es posible transmitir un recurso que no está subido al servidor",
"local_assets": "Archivos Locales",
"local_network": "Red local", "local_network": "Red local",
"local_network_sheet_info": "La aplicación se conectará al servidor a través de esta URL cuando utilice la red Wi-Fi especificada", "local_network_sheet_info": "La aplicación se conectará al servidor a través de esta URL cuando utilice la red Wi-Fi especificada",
"location_permission": "Permiso de ubicación", "location_permission": "Permiso de ubicación",
@@ -1238,7 +1192,8 @@
"manage_your_devices": "Administre sus dispositivos conectados", "manage_your_devices": "Administre sus dispositivos conectados",
"manage_your_oauth_connection": "Administra tu conexión OAuth", "manage_your_oauth_connection": "Administra tu conexión OAuth",
"map": "Mapa", "map": "Mapa",
"map_assets_in_bounds": "{count, plural, one {# foto} other {# fotos}}", "map_assets_in_bound": "{count} foto",
"map_assets_in_bounds": "{count} fotos",
"map_cannot_get_user_location": "No se pudo obtener la posición del usuario", "map_cannot_get_user_location": "No se pudo obtener la posición del usuario",
"map_location_dialog_yes": "Sí", "map_location_dialog_yes": "Sí",
"map_location_picker_page_use_location": "Usar esta ubicación", "map_location_picker_page_use_location": "Usar esta ubicación",
@@ -1283,14 +1238,13 @@
"merged_people_count": "Fusionada {count, plural, one {# persona} other {# personas}}", "merged_people_count": "Fusionada {count, plural, one {# persona} other {# personas}}",
"minimize": "Minimizar", "minimize": "Minimizar",
"minute": "Minuto", "minute": "Minuto",
"missing": "Faltante", "missing": "Perdido",
"model": "Modelo", "model": "Modelo",
"month": "Mes", "month": "Mes",
"monthly_title_text_date_format": "MMMM a", "monthly_title_text_date_format": "MMMM y",
"more": "Mas", "more": "Mas",
"move": "Mover", "move": "Mover",
"move_off_locked_folder": "Mover fuera de la carpeta protegida", "move_off_locked_folder": "Mover fuera de la carpeta protegida",
"move_to_lock_folder_action_prompt": "{count} añadidos a la carpeta protegida",
"move_to_locked_folder": "Mover a la carpeta protegida", "move_to_locked_folder": "Mover a la carpeta protegida",
"move_to_locked_folder_confirmation": "Estas fotos y vídeos serán eliminados de todos los álbumes y sólo podrán ser vistos desde la carpeta protegida", "move_to_locked_folder_confirmation": "Estas fotos y vídeos serán eliminados de todos los álbumes y sólo podrán ser vistos desde la carpeta protegida",
"moved_to_archive": "Movido(s) {count, plural, one {# recurso} other {# recursos}} a archivo", "moved_to_archive": "Movido(s) {count, plural, one {# recurso} other {# recursos}} a archivo",
@@ -1323,7 +1277,7 @@
"no_archived_assets_message": "Archive fotos y videos para ocultarlos de su vista de Fotos", "no_archived_assets_message": "Archive fotos y videos para ocultarlos de su vista de Fotos",
"no_assets_message": "HAZ CLIC PARA SUBIR TU PRIMERA FOTO", "no_assets_message": "HAZ CLIC PARA SUBIR TU PRIMERA FOTO",
"no_assets_to_show": "No hay elementos a mostrar", "no_assets_to_show": "No hay elementos a mostrar",
"no_cast_devices_found": "No se encontraron dispositivos de transmisión", "no_cast_devices_found": "Dispositivos de difusión no encontrados",
"no_duplicates_found": "No se encontraron duplicados.", "no_duplicates_found": "No se encontraron duplicados.",
"no_exif_info_available": "No hay información exif disponible", "no_exif_info_available": "No hay información exif disponible",
"no_explore_results_message": "Sube más fotos para explorar tu colección.", "no_explore_results_message": "Sube más fotos para explorar tu colección.",
@@ -1337,7 +1291,6 @@
"no_results": "Sin resultados", "no_results": "Sin resultados",
"no_results_description": "Pruebe con un sinónimo o una palabra clave más general", "no_results_description": "Pruebe con un sinónimo o una palabra clave más general",
"no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red", "no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red",
"no_uploads_in_progress": "No hay cargas en progreso",
"not_in_any_album": "Sin álbum", "not_in_any_album": "Sin álbum",
"not_selected": "No seleccionado", "not_selected": "No seleccionado",
"note_apply_storage_label_to_previously_uploaded assets": "Nota: Para aplicar la etiqueta de almacenamiento a los archivos subidos previamente, ejecute el", "note_apply_storage_label_to_previously_uploaded assets": "Nota: Para aplicar la etiqueta de almacenamiento a los archivos subidos previamente, ejecute el",
@@ -1375,7 +1328,6 @@
"original": "original", "original": "original",
"other": "Otro", "other": "Otro",
"other_devices": "Otro dispositivo", "other_devices": "Otro dispositivo",
"other_entities": "Otras entidades",
"other_variables": "Otras variables", "other_variables": "Otras variables",
"owned": "Propio", "owned": "Propio",
"owner": "Propietario", "owner": "Propietario",
@@ -1507,7 +1459,6 @@
"purchase_server_description_2": "Estado del soporte", "purchase_server_description_2": "Estado del soporte",
"purchase_server_title": "Servidor", "purchase_server_title": "Servidor",
"purchase_settings_server_activated": "La clave del producto del servidor la administra el administrador", "purchase_settings_server_activated": "La clave del producto del servidor la administra el administrador",
"queue_status": "Poniendo en cola {count}/{total}",
"rating": "Valoración", "rating": "Valoración",
"rating_clear": "Borrar calificación", "rating_clear": "Borrar calificación",
"rating_count": "{count, plural, one {# estrella} other {# estrellas}}", "rating_count": "{count, plural, one {# estrella} other {# estrellas}}",
@@ -1536,8 +1487,6 @@
"refreshing_faces": "Recargando caras", "refreshing_faces": "Recargando caras",
"refreshing_metadata": "Recargando metadatos", "refreshing_metadata": "Recargando metadatos",
"regenerating_thumbnails": "Recargando miniaturas", "regenerating_thumbnails": "Recargando miniaturas",
"remote": "Remoto",
"remote_assets": "Elementos remotos",
"remove": "Eliminar", "remove": "Eliminar",
"remove_assets_album_confirmation": "¿Estás seguro que quieres eliminar {count, plural, one {# elemento} other {# elementos}} del álbum?", "remove_assets_album_confirmation": "¿Estás seguro que quieres eliminar {count, plural, one {# elemento} other {# elementos}} del álbum?",
"remove_assets_shared_link_confirmation": "¿Estás seguro que quieres eliminar {count, plural, one {# elemento} other {# elementos}} del enlace compartido?", "remove_assets_shared_link_confirmation": "¿Estás seguro que quieres eliminar {count, plural, one {# elemento} other {# elementos}} del enlace compartido?",
@@ -1545,9 +1494,7 @@
"remove_custom_date_range": "Eliminar intervalo de fechas personalizado", "remove_custom_date_range": "Eliminar intervalo de fechas personalizado",
"remove_deleted_assets": "Eliminar archivos sin conexión", "remove_deleted_assets": "Eliminar archivos sin conexión",
"remove_from_album": "Eliminar del álbum", "remove_from_album": "Eliminar del álbum",
"remove_from_album_action_prompt": "{count} eliminado del álbum",
"remove_from_favorites": "Quitar de favoritos", "remove_from_favorites": "Quitar de favoritos",
"remove_from_lock_folder_action_prompt": "{count} eliminado de la carpeta protegida",
"remove_from_locked_folder": "Eliminar de la carpeta protegida", "remove_from_locked_folder": "Eliminar de la carpeta protegida",
"remove_from_locked_folder_confirmation": "¿Estás seguro de que deseas mover estas fotos y vídeos fuera de la carpeta protegida? Serán visibles en tu biblioteca.", "remove_from_locked_folder_confirmation": "¿Estás seguro de que deseas mover estas fotos y vídeos fuera de la carpeta protegida? Serán visibles en tu biblioteca.",
"remove_from_shared_link": "Eliminar desde enlace compartido", "remove_from_shared_link": "Eliminar desde enlace compartido",
@@ -1575,25 +1522,19 @@
"reset_password": "Restablecer la contraseña", "reset_password": "Restablecer la contraseña",
"reset_people_visibility": "Restablecer la visibilidad de las personas", "reset_people_visibility": "Restablecer la visibilidad de las personas",
"reset_pin_code": "Restablecer PIN", "reset_pin_code": "Restablecer PIN",
"reset_sqlite": "Restablecer la Base de Datos SQLite",
"reset_sqlite_confirmation": "¿Estás seguro que deseas restablecer la base de datos SQLite? Deberás cerrar sesión y volver a iniciarla para resincronizar los datos",
"reset_sqlite_success": "Restablecer exitosamente la base de datos SQLite",
"reset_to_default": "Restablecer los valores predeterminados", "reset_to_default": "Restablecer los valores predeterminados",
"resolve_duplicates": "Resolver duplicados", "resolve_duplicates": "Resolver duplicados",
"resolved_all_duplicates": "Todos los duplicados resueltos", "resolved_all_duplicates": "Todos los duplicados resueltos",
"restore": "Restaurar", "restore": "Restaurar",
"restore_all": "Restaurar todo", "restore_all": "Restaurar todo",
"restore_trash_action_prompt": "{count} restaurado de la papelera",
"restore_user": "Restaurar usuario", "restore_user": "Restaurar usuario",
"restored_asset": "Archivo restaurado", "restored_asset": "Archivo restaurado",
"resume": "Continuar", "resume": "Continuar",
"retry_upload": "Reintentar subida", "retry_upload": "Reintentar subida",
"review_duplicates": "Revisar duplicados", "review_duplicates": "Revisar duplicados",
"review_large_files": "Revisar archivos grandes",
"role": "Rol", "role": "Rol",
"role_editor": "Editor", "role_editor": "Editor",
"role_viewer": "Visor", "role_viewer": "Visor",
"running": "En ejecución",
"save": "Guardar", "save": "Guardar",
"save_to_gallery": "Guardado en la galería", "save_to_gallery": "Guardado en la galería",
"saved_api_key": "Clave API guardada", "saved_api_key": "Clave API guardada",
@@ -1617,17 +1558,17 @@
"search_city": "Buscar ciudad...", "search_city": "Buscar ciudad...",
"search_country": "Buscar país...", "search_country": "Buscar país...",
"search_filter_apply": "Aplicar filtros", "search_filter_apply": "Aplicar filtros",
"search_filter_camera_title": "Elegir tipo de cámara", "search_filter_camera_title": "Elige tipo de cámara",
"search_filter_date": "Fecha", "search_filter_date": "Fecha",
"search_filter_date_interval": "{start} al {end}", "search_filter_date_interval": "{start} al {end}",
"search_filter_date_title": "Seleccionar un intervalo de fechas", "search_filter_date_title": "Selecciona un intervalo de fechas",
"search_filter_display_option_not_in_album": "No en álbum", "search_filter_display_option_not_in_album": "No en álbum",
"search_filter_display_options": "Opciones de visualización", "search_filter_display_options": "Opciones de visualización",
"search_filter_filename": "Buscar por nombre de archivo", "search_filter_filename": "Buscar por nombre de archivo",
"search_filter_location": "Ubicación", "search_filter_location": "Ubicación",
"search_filter_location_title": "Seleccionar una ubicación", "search_filter_location_title": "Seleccionar una ubicación",
"search_filter_media_type": "Tipo de archivo", "search_filter_media_type": "Tipo de archivo",
"search_filter_media_type_title": "Seleccionar el tipo de archivo", "search_filter_media_type_title": "Selecciona el tipo de archivo",
"search_filter_people_title": "Seleccionar personas", "search_filter_people_title": "Seleccionar personas",
"search_for": "Buscar", "search_for": "Buscar",
"search_for_existing_person": "Buscar persona existente", "search_for_existing_person": "Buscar persona existente",
@@ -1650,23 +1591,23 @@
"search_people": "Buscar personas", "search_people": "Buscar personas",
"search_places": "Buscar lugar", "search_places": "Buscar lugar",
"search_rating": "Buscar por calificación...", "search_rating": "Buscar por calificación...",
"search_result_page_new_search_hint": "Nueva Búsqueda", "search_result_page_new_search_hint": "Nueva Busqueda",
"search_settings": "Ajustes de la búsqueda", "search_settings": "Ajustes de la búsqueda",
"search_state": "Buscar región/estado...", "search_state": "Buscar región/estado...",
"search_suggestion_list_smart_search_hint_1": "La búsqueda inteligente está habilitada por defecto, para buscar metadatos utiliza esta sintaxis ", "search_suggestion_list_smart_search_hint_1": "La búsqueda inteligente está habilitada por defecto, para buscar metadatos utiliza esta sintaxis ",
"search_suggestion_list_smart_search_hint_2": "m:tu-término-de-búsqueda", "search_suggestion_list_smart_search_hint_2": "m:tu-término-de-búsqueda",
"search_tags": "Buscar etiquetas...", "search_tags": "Buscando etiquetas...",
"search_timezone": "Buscar zona horaria...", "search_timezone": "Buscar zona horaria...",
"search_type": "Tipo de búsqueda", "search_type": "Tipo de búsqueda",
"search_your_photos": "Busca tus fotos", "search_your_photos": "Busca tus fotos",
"searching_locales": "Buscando sitios...", "searching_locales": "Buscando sitios...",
"second": "Segundo", "second": "Segundo",
"see_all_people": "Ver todas las personas", "see_all_people": "Ver todas las personas",
"select": "Seleccionar", "select": "Selecciona",
"select_album_cover": "Seleccionar portada del álbum", "select_album_cover": "Seleccionar portada del álbum",
"select_all": "Seleccionar todo", "select_all": "Seleccionar todo",
"select_all_duplicates": "Seleccionar todos los duplicados", "select_all_duplicates": "Seleccionar todos los duplicados",
"select_all_in": "Seleccionar todos en {group}", "select_all_in": "Selecciona todos en {group}",
"select_avatar_color": "Seleccionar color del avatar", "select_avatar_color": "Seleccionar color del avatar",
"select_face": "Seleccionar cara", "select_face": "Seleccionar cara",
"select_featured_photo": "Seleccionar foto principal", "select_featured_photo": "Seleccionar foto principal",
@@ -1697,7 +1638,7 @@
"set_date_of_birth": "Establecer fecha de nacimiento", "set_date_of_birth": "Establecer fecha de nacimiento",
"set_profile_picture": "Establecer foto de perfil", "set_profile_picture": "Establecer foto de perfil",
"set_slideshow_to_fullscreen": "Mostrar diapositivas en pantalla completa", "set_slideshow_to_fullscreen": "Mostrar diapositivas en pantalla completa",
"set_stack_primary_asset": "Establecer como recurso principal", "set_stack_primary_asset": "Establecer como activo principal",
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).", "setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).", "setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
"setting_image_viewer_original_title": "Cargar imagen original", "setting_image_viewer_original_title": "Cargar imagen original",
@@ -1725,7 +1666,6 @@
"settings_saved": "Ajustes guardados", "settings_saved": "Ajustes guardados",
"setup_pin_code": "Establecer un PIN", "setup_pin_code": "Establecer un PIN",
"share": "Compartir", "share": "Compartir",
"share_action_prompt": "{count} recursos compartidos",
"share_add_photos": "Agregar fotos", "share_add_photos": "Agregar fotos",
"share_assets_selected": "{count} seleccionado(s)", "share_assets_selected": "{count} seleccionado(s)",
"share_dialog_preparing": "Preparando...", "share_dialog_preparing": "Preparando...",
@@ -1747,7 +1687,6 @@
"shared_link_clipboard_copied_massage": "Copiado al portapapeles", "shared_link_clipboard_copied_massage": "Copiado al portapapeles",
"shared_link_clipboard_text": "Enlace: {link}\nContraseña: {password}", "shared_link_clipboard_text": "Enlace: {link}\nContraseña: {password}",
"shared_link_create_error": "Error creando el enlace compartido", "shared_link_create_error": "Error creando el enlace compartido",
"shared_link_custom_url_description": "Accede a este enlace compartido con una URL personalizada",
"shared_link_edit_description_hint": "Introduce la descripción del enlace", "shared_link_edit_description_hint": "Introduce la descripción del enlace",
"shared_link_edit_expire_after_option_day": "1 día", "shared_link_edit_expire_after_option_day": "1 día",
"shared_link_edit_expire_after_option_days": "{count} días", "shared_link_edit_expire_after_option_days": "{count} días",
@@ -1773,7 +1712,6 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Administrar enlaces compartidos", "shared_link_manage_links": "Administrar enlaces compartidos",
"shared_link_options": "Opciones de enlaces compartidos", "shared_link_options": "Opciones de enlaces compartidos",
"shared_link_password_description": "Requerir una contraseña para acceder a este enlace compartido",
"shared_links": "Enlaces compartidos", "shared_links": "Enlaces compartidos",
"shared_links_description": "Comparte fotos y vídeos con un enlace", "shared_links_description": "Comparte fotos y vídeos con un enlace",
"shared_photos_and_videos_count": "{assetCount, plural, other {# Fotos y vídeos compartidos.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# Fotos y vídeos compartidos.}}",
@@ -1829,7 +1767,6 @@
"sort_title": "Título", "sort_title": "Título",
"source": "Origen", "source": "Origen",
"stack": "Apilar", "stack": "Apilar",
"stack_action_prompt": "{count} apilados",
"stack_duplicates": "Apilar duplicados", "stack_duplicates": "Apilar duplicados",
"stack_select_one_photo": "Selecciona una imagen principal para la pila", "stack_select_one_photo": "Selecciona una imagen principal para la pila",
"stack_selected_photos": "Apilar fotos seleccionadas", "stack_selected_photos": "Apilar fotos seleccionadas",
@@ -1839,7 +1776,7 @@
"start_date": "Fecha de inicio", "start_date": "Fecha de inicio",
"state": "Estado", "state": "Estado",
"status": "Estado", "status": "Estado",
"stop_casting": "Detener transmisión", "stop_casting": "Parar difusión",
"stop_motion_photo": "Parar foto en movimiento", "stop_motion_photo": "Parar foto en movimiento",
"stop_photo_sharing": "¿Dejar de compartir tus fotos?", "stop_photo_sharing": "¿Dejar de compartir tus fotos?",
"stop_photo_sharing_description": "{partner} ya no podrá acceder a tus fotos.", "stop_photo_sharing_description": "{partner} ya no podrá acceder a tus fotos.",
@@ -1849,7 +1786,6 @@
"storage_quota": "Cuota de Almacenamiento", "storage_quota": "Cuota de Almacenamiento",
"storage_usage": "{used} de {available} en uso", "storage_usage": "{used} de {available} en uso",
"submit": "Enviar", "submit": "Enviar",
"success": "Éxito",
"suggestions": "Sugerencias", "suggestions": "Sugerencias",
"sunrise_on_the_beach": "Amanecer en la playa", "sunrise_on_the_beach": "Amanecer en la playa",
"support": "Soporte", "support": "Soporte",
@@ -1859,8 +1795,6 @@
"sync": "Sincronizar", "sync": "Sincronizar",
"sync_albums": "Sincronizar álbumes", "sync_albums": "Sincronizar álbumes",
"sync_albums_manual_subtitle": "Sincroniza todos los videos y fotos subidos con los álbumes seleccionados a respaldar", "sync_albums_manual_subtitle": "Sincroniza todos los videos y fotos subidos con los álbumes seleccionados a respaldar",
"sync_local": "Sincronización Local",
"sync_remote": "Sincronización Remota",
"sync_upload_album_setting_subtitle": "Crea y sube tus fotos y videos a los álbumes seleccionados en Immich", "sync_upload_album_setting_subtitle": "Crea y sube tus fotos y videos a los álbumes seleccionados en Immich",
"tag": "Etiqueta", "tag": "Etiqueta",
"tag_assets": "Etiquetar activos", "tag_assets": "Etiquetar activos",
@@ -1871,7 +1805,6 @@
"tag_updated": "Etiqueta actualizada: {tag}", "tag_updated": "Etiqueta actualizada: {tag}",
"tagged_assets": "Etiquetado(s) {count, plural, one {# activo} other {# activos}}", "tagged_assets": "Etiquetado(s) {count, plural, one {# activo} other {# activos}}",
"tags": "Etiquetas", "tags": "Etiquetas",
"tap_to_run_job": "Toca para ejecutar la tarea",
"template": "Plantilla", "template": "Plantilla",
"theme": "Tema", "theme": "Tema",
"theme_selection": "Selección de tema", "theme_selection": "Selección de tema",
@@ -1904,7 +1837,6 @@
"total": "Total", "total": "Total",
"total_usage": "Uso total", "total_usage": "Uso total",
"trash": "Papelera", "trash": "Papelera",
"trash_action_prompt": "{count} movidos a la papelera",
"trash_all": "Descartar todo", "trash_all": "Descartar todo",
"trash_count": "Descartar {count, number}", "trash_count": "Descartar {count, number}",
"trash_delete_asset": "Borrar/Eliminar archivo", "trash_delete_asset": "Borrar/Eliminar archivo",
@@ -1922,11 +1854,9 @@
"unable_to_change_pin_code": "No se ha podido cambiar el PIN", "unable_to_change_pin_code": "No se ha podido cambiar el PIN",
"unable_to_setup_pin_code": "No se ha podido establecer el PIN", "unable_to_setup_pin_code": "No se ha podido establecer el PIN",
"unarchive": "Desarchivar", "unarchive": "Desarchivar",
"unarchive_action_prompt": "{count} eliminados del archivo",
"unarchived_count": "{count, plural, one {# No archivado} other {# No archivados}}", "unarchived_count": "{count, plural, one {# No archivado} other {# No archivados}}",
"undo": "Deshacer", "undo": "Deshacer",
"unfavorite": "Retirar favorito", "unfavorite": "Retirar favorito",
"unfavorite_action_prompt": "{count} eliminados de favoritos",
"unhide_person": "Mostrar persona", "unhide_person": "Mostrar persona",
"unknown": "Desconocido", "unknown": "Desconocido",
"unknown_country": "País desconocido", "unknown_country": "País desconocido",
@@ -1944,20 +1874,15 @@
"unselect_all_duplicates": "Deseleccionar todos los duplicados", "unselect_all_duplicates": "Deseleccionar todos los duplicados",
"unselect_all_in": "Deselecciona todos en {group}", "unselect_all_in": "Deselecciona todos en {group}",
"unstack": "Desapilar", "unstack": "Desapilar",
"unstack_action_prompt": "{count} desapilado(s)",
"unstacked_assets_count": "Desapilado(s) {count, plural, one {# elemento} other {# elementos}}", "unstacked_assets_count": "Desapilado(s) {count, plural, one {# elemento} other {# elementos}}",
"untagged": "Sin etiqueta",
"up_next": "A continuación", "up_next": "A continuación",
"updated_at": "Actualizado", "updated_at": "Actualizado",
"updated_password": "Contraseña actualizada", "updated_password": "Contraseña actualizada",
"upload": "Subir", "upload": "Subir",
"upload_action_prompt": "{count} en cola para carga",
"upload_concurrency": "Subidas simultáneas", "upload_concurrency": "Subidas simultáneas",
"upload_details": "Cargar Detalles",
"upload_dialog_info": "¿Quieres hacer una copia de seguridad al servidor de los elementos seleccionados?", "upload_dialog_info": "¿Quieres hacer una copia de seguridad al servidor de los elementos seleccionados?",
"upload_dialog_title": "Subir elementos", "upload_dialog_title": "Subir elementos",
"upload_errors": "Subida completada con {count, plural, one {# error} other {# errores}}, actualice la página para ver los nuevos recursos de la subida.", "upload_errors": "Subida completada con {count, plural, one {# error} other {# errores}}, actualice la página para ver los nuevos recursos de la subida.",
"upload_finished": "Carga finalizada",
"upload_progress": "Restante {remaining, number} - Procesado {processed, number}/{total, number}", "upload_progress": "Restante {remaining, number} - Procesado {processed, number}/{total, number}",
"upload_skipped_duplicates": "Saltado {count, plural, one {# duplicate asset} other {# duplicate assets}}", "upload_skipped_duplicates": "Saltado {count, plural, one {# duplicate asset} other {# duplicate assets}}",
"upload_status_duplicates": "Duplicados", "upload_status_duplicates": "Duplicados",
@@ -1966,7 +1891,6 @@
"upload_success": "Subida realizada correctamente, actualice la página para ver los nuevos recursos de subida.", "upload_success": "Subida realizada correctamente, actualice la página para ver los nuevos recursos de subida.",
"upload_to_immich": "Subir a Immich ({count})", "upload_to_immich": "Subir a Immich ({count})",
"uploading": "Subiendo", "uploading": "Subiendo",
"uploading_media": "Subiendo medios",
"url": "URL", "url": "URL",
"usage": "Uso", "usage": "Uso",
"use_biometric": "Uso biométrico", "use_biometric": "Uso biométrico",
@@ -1987,7 +1911,6 @@
"user_usage_stats_description": "Ver estadísticas de uso de la cuenta", "user_usage_stats_description": "Ver estadísticas de uso de la cuenta",
"username": "Nombre de usuario", "username": "Nombre de usuario",
"users": "Usuarios", "users": "Usuarios",
"users_added_to_album_count": "{count, plural, one {# usuario agregado} other {# usuarios agregados}} al álbum",
"utilities": "Utilidades", "utilities": "Utilidades",
"validate": "Validar", "validate": "Validar",
"validate_endpoint_error": "Por favor, introduce una URL válida", "validate_endpoint_error": "Por favor, introduce una URL válida",
@@ -2006,7 +1929,6 @@
"view_album": "Ver Álbum", "view_album": "Ver Álbum",
"view_all": "Ver todas", "view_all": "Ver todas",
"view_all_users": "Mostrar todos los usuarios", "view_all_users": "Mostrar todos los usuarios",
"view_details": "Ver Detalles",
"view_in_timeline": "Mostrar en la línea de tiempo", "view_in_timeline": "Mostrar en la línea de tiempo",
"view_link": "Ver enlace", "view_link": "Ver enlace",
"view_links": "Mostrar enlaces", "view_links": "Mostrar enlaces",

View File

@@ -14,7 +14,6 @@
"add_a_location": "Lisa asukoht", "add_a_location": "Lisa asukoht",
"add_a_name": "Lisa nimi", "add_a_name": "Lisa nimi",
"add_a_title": "Lisa pealkiri", "add_a_title": "Lisa pealkiri",
"add_birthday": "Lisa sünnipäev",
"add_endpoint": "Lisa lõpp-punkt", "add_endpoint": "Lisa lõpp-punkt",
"add_exclusion_pattern": "Lisa välistamismuster", "add_exclusion_pattern": "Lisa välistamismuster",
"add_import_path": "Lisa imporditee", "add_import_path": "Lisa imporditee",
@@ -34,47 +33,40 @@
"added_to_favorites": "Lisatud lemmikutesse", "added_to_favorites": "Lisatud lemmikutesse",
"added_to_favorites_count": "{count, number} pilti lisatud lemmikutesse", "added_to_favorites_count": "{count, number} pilti lisatud lemmikutesse",
"admin": { "admin": {
"add_exclusion_pattern_description": "Lisa välistamismustreid. Toetatud on metamärgid *, ** ja ?. Kõikide kataloogis nimega \"Raw\" olevate failide ignoreerimiseks kasuta \"**/Raw/**\". Kõikide \".tif\" lõpuga failide ignoreerimiseks kasuta \"**/*.tif\". Absouutse tee ignoreerimiseks kasuta \"/tee/mida/ignoreerida/**\".", "add_exclusion_pattern_description": "Lisa välistamismustreid. Toetatud on metamärgid *, ** ja ?. Kõikide kataloogis nimega \"Raw\" olevate failide ignoreerimiseks kasuta \"**/Raw/**\". Kõikide .tif failide ignoreerimiseks kasuta \"**/*.tif\". Absouutse tee ignoreerimiseks kasuta \"/path/to/ignore/**\".",
"admin_user": "Administraator", "admin_user": "Administraator",
"asset_offline_description": "Seda välise kogu üksust ei leitud kettalt ning see liigutati prügikasti. Kui faili asukoht muutus kogu siseselt, leiad vastava uue üksuse oma ajajoonelt. Üksuse taastamiseks veendu, et allpool toodud failitee on Immich'ile kättesaadav ning skaneeri kogu uuesti.", "asset_offline_description": "Seda välise kogu üksust ei leitud kettalt ning see liigutati prügikasti. Kui faili asukoht kogu siseselt muutus, leiad vastava uue üksuse oma ajajoonelt. Üksuse taastamiseks veendu, et allpool toodud failitee on Immich'ile kättesaadav ning skaneeri kogu uuesti.",
"authentication_settings": "Autentimise seaded", "authentication_settings": "Autentimise seaded",
"authentication_settings_description": "Halda parooli, OAuth'i ja muid autentimise seadeid", "authentication_settings_description": "Halda parooli, OAuth ja muid autentimise seadeid",
"authentication_settings_disable_all": "Kas oled kindel, et soovid kõik sisselogimismeetodid välja lülitada? Sisselogimine lülitatakse täielikult välja.", "authentication_settings_disable_all": "Kas oled kindel, et soovid kõik sisselogimismeetodid välja lülitada? Sisselogimine lülitatakse täielikult välja.",
"authentication_settings_reenable": "Et taas lubada, kasuta <link>serveri käsku</link>.", "authentication_settings_reenable": "Et taas lubada, kasuta <link>serveri käsku</link>.",
"background_task_job": "Tausttegumid", "background_task_job": "Tausttegumid",
"backup_database": "Loo andmebaasi tõmmis", "backup_database": "Loo andmebaasi tõmmis",
"backup_database_enable_description": "Luba andmebaasi tõmmised", "backup_database_enable_description": "Luba andmebaasi tõmmised",
"backup_keep_last_amount": "Eelmiste tõmmiste arv, mida alles hoida", "backup_keep_last_amount": "Eelmiste tõmmiste arv, mida alles hoida",
"backup_onboarding_1_description": "asukohaväline koopia pilves või teises füüsilises asukohas.",
"backup_onboarding_2_description": "lokaalset koopiat erinevatel seadmetel. See hõlmab põhifaile ja nende failide lokaalsed varundust.",
"backup_onboarding_3_description": "koopiat su andmetest, kaasa arvatud originaalfailid. See hõlmab üht asukohavälist ja kaht lokaalset koopiat.",
"backup_onboarding_description": "Andmete kaitsmiseks on soovituslik <backblaze-link>3-2-1 varundusstrateegia</backblaze-link>. Põhjaliku varunduse jaoks peaksid talletama koopiaid nii oma üleslaaditud fotodest ja videotest kui ka Immich'i andmebaasist.",
"backup_onboarding_footer": "Rohkem informatsiooni Immich'i varundamise kohta leiad <link>dokumentatsioonist</link>.",
"backup_onboarding_parts_title": "3-2-1 varundus hõlmab:",
"backup_onboarding_title": "Varukoopiad",
"backup_settings": "Andmebaasi tõmmiste seaded", "backup_settings": "Andmebaasi tõmmiste seaded",
"backup_settings_description": "Halda andmebaasi tõmmiste seadeid.", "backup_settings_description": "Halda andmebaasi tõmmiste seadeid.",
"cleared_jobs": "Tööted eemaldatud: {job}", "cleared_jobs": "Tööted eemaldatud: {job}",
"config_set_by_file": "Konfiguratsioon on määratud konfiguratsioonifaili abil", "config_set_by_file": "Konfiguratsioon on määratud konfifaili abil",
"confirm_delete_library": "Kas oled kindel, et soovid kustutada {library} kogu?", "confirm_delete_library": "Kas oled kindel, et soovid kustutada {library} kogu?",
"confirm_delete_library_assets": "Kas oled kindel, et soovid selle kogu kustutada? Sellega kustutatakse {count, plural, one {# sisalduv üksus} other {kõik # sisalduvat üksust}} Immich'ist ning seda toimingut ei saa tagasi võtta. Failid jäävad kettale alles.", "confirm_delete_library_assets": "Kas oled kindel, et soovid selle kogu kustutada? Sellega kustutatakse {count, plural, one {# sisalduv üksus} other {kõik # sisalduvat üksust}} Immich'ist ning seda ei saa tagasi võtta. Failid jäävad kettale alles.",
"confirm_email_below": "Kinnitamiseks sisesta allpool \"{email}\"", "confirm_email_below": "Kinnitamiseks sisesta allpool \"{email}\"",
"confirm_reprocess_all_faces": "Kas oled kindel, et soovid kõik näod uuesti töödelda? See eemaldab kõik nimega isikud.", "confirm_reprocess_all_faces": "Kas oled kindel, et soovid kõik näod uuesti töödelda? See eemaldab kõik nimega isikud.",
"confirm_user_password_reset": "Kas oled kindel, et soovid kasutaja {user} parooli lähtestada?", "confirm_user_password_reset": "Kas oled kindel, et soovid kasutaja {user} parooli lähtestada?",
"confirm_user_pin_code_reset": "Kas oled kindel, et soovid kasutaja {user} PIN-koodi lähtestada?", "confirm_user_pin_code_reset": "Kas oled kindel, et soovid kasutaja {user} PIN-koodi lähtestada?",
"create_job": "Lisa tööde", "create_job": "Lisa tööde",
"cron_expression": "Cron avaldis", "cron_expression": "Cron avaldis",
"cron_expression_description": "Määra skaneerimise intervall cron formaadis. Rohkema info jaoks vaata nt. <link>Crontab Guru</link>", "cron_expression_description": "Sea skaneerimise intervall cron formaadis. Rohkema info jaoks vaata nt. <link>Crontab Guru</link>",
"cron_expression_presets": "Eelseadistatud cron avaldised", "cron_expression_presets": "Eelseadistatud cron avaldised",
"disable_login": "Keela sisselogimine", "disable_login": "Keela sisselogimine",
"duplicate_detection_job_description": "Rakenda üksustele masinõpet, et leida sarnaseid pilte. Kasutab nutiotsingut", "duplicate_detection_job_description": "Rakenda üksustele masinõpet, et leida sarnaseid pilte. Kasutab nutiotsingut",
"exclusion_pattern_description": "Välistamismustrid võimaldavad ignoreerida faile ja kaustu selle kogu skaneerimisel. See on kasulik, kui sul on kaustu, mis sisaldavad faile, mida sa ei soovi importida, nagu RAW failid.", "exclusion_pattern_description": "Välistamismustrid võimaldavad ignoreerida faile ja kaustu kogu skaneerimisel. See on kasulik, kui sul on kaustu, mis sisaldavad faile, mida sa ei soovi importida, nagu RAW failid.",
"external_library_management": "Väliste kogude haldus", "external_library_management": "Väliste kogude haldus",
"face_detection": "Näoavastus", "face_detection": "Näoavastus",
"face_detection_description": "Avasta üksustest nägusid masinõppe abil. Videote puhul kasutatakse ainult pisipilti. \"Värskenda\" töötleb kõik üksused uuesti. \"Lähtesta\" kustutab lisaks kõik seni leitud näod. \"Puuduvad\" võtab ette üksused, mida pole veel töödeldud. Avastatud näod suunatakse näotuvastusse, et grupeerida nad olemasolevateks või uuteks isikuteks.", "face_detection_description": "Avasta üksustest nägusid masinõppe abil. Videote puhul kasutatakse ainult pisipilti. \"Värskenda\" töötleb kõik üksused uuesti. \"Lähtesta\" kustutab lisaks kõik seni leitud näed. \"Puuduvad\" võtab ette üksused, mida pole veel töödeldud. Avastatud näod suunatakse näotuvastusse, et grupeerida nad olemasolevateks või uuteks isikuteks.",
"facial_recognition_job_description": "Grupeeri avastatud näod inimesteks. See samm käivitub siis, kui näoavastus on lõppenud. \"Lähtesta\" grupeerib kõik näod uuesti. \"Puuduvad\" võtab ette näod, mida pole isikuga seostatud.", "facial_recognition_job_description": "Grupeeri avastatud näod inimesteks. See samm käivitub siis, kui näoavastus on lõppenud. \"Lähtesta\" grupeerib kõik näod uuesti. \"Puuduvad\" võtab ette näod, mida pole isikuga seostatud.",
"failed_job_command": "Käsk {command} ebaõnnestus töötes: {job}", "failed_job_command": "Käsk {command} ebaõnnestus töötes: {job}",
"force_delete_user_warning": "HOIATUS: See kustutab koheselt kasutaja ja kõik tema üksused. Toimingut ei saa tagasi võtta ja faile ei saa taastada.", "force_delete_user_warning": "HOIATUS: See kustutab koheselt kasutaja ja kõik üksused. Seda ei saa tagasi võtta ja faile ei saa taastada.",
"image_format": "Formaat", "image_format": "Formaat",
"image_format_description": "WebP failid on väiksemad kui JPEG, aga kodeerimine on aeglasem.", "image_format_description": "WebP failid on väiksemad kui JPEG, aga kodeerimine on aeglasem.",
"image_fullsize_description": "Täismõõdus pilt ilma metaandmeteta, kasutatakse sisse suumimisel", "image_fullsize_description": "Täismõõdus pilt ilma metaandmeteta, kasutatakse sisse suumimisel",
@@ -85,9 +77,9 @@
"image_prefer_embedded_preview": "Eelista manustatud eelvaadet", "image_prefer_embedded_preview": "Eelista manustatud eelvaadet",
"image_prefer_embedded_preview_setting_description": "Kasuta pilditöötluse sisendina võimalusel RAW fotodesse manustatud eelvaateid. See võib mõnede piltide puhul anda tulemuseks täpsemad värvid, aga eelvaate kvaliteet sõltub konkreetsest kaamerast ning pildis võib olla rohkem tihendusmüra.", "image_prefer_embedded_preview_setting_description": "Kasuta pilditöötluse sisendina võimalusel RAW fotodesse manustatud eelvaateid. See võib mõnede piltide puhul anda tulemuseks täpsemad värvid, aga eelvaate kvaliteet sõltub konkreetsest kaamerast ning pildis võib olla rohkem tihendusmüra.",
"image_prefer_wide_gamut": "Eelista laia värvigammat", "image_prefer_wide_gamut": "Eelista laia värvigammat",
"image_prefer_wide_gamut_setting_description": "Kasuta pisipiltide jaoks Display P3. See säilitab paremini laia värviruumiga piltide erksuse, kuid vanematel seadmetel ja vanemate brauseritega võivad pildid teistsugused välja näha. sRGB pildid säilitatakse värvinihete vältimiseks.", "image_prefer_wide_gamut_setting_description": "Kasuta pisipiltide jaoks Display P3. See säilitab paremini laia värviruumiga piltide erksuse, aga vanematel seadmetel ja vanemate brauseritega võivad pildid teistsugused välja näha. sRGB pildid säilitatakse värvinihete vältimiseks.",
"image_preview_description": "Keskmise suurusega pilt ilma metaandmeteta, kasutusel üksiku üksuse vaatamise ja masinõppe jaoks", "image_preview_description": "Keskmise suurusega pilt ilma metaandmeteta, kasutusel üksiku üksuse vaatamise ja masinõppe jaoks",
"image_preview_quality_description": "Eelvaate kvaliteet vahemikus 1-100. Kõrgem väärtus on parem, aga tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust. Madal väärtus võib mõjutada masinõppe kvaliteeti.", "image_preview_quality_description": "Eelvaate kvaliteet vahemikus 1-100. Kõrgem väärtus on parem, aga tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust. Madala väärtuse seadmine võib mõjutada masinõppe kvaliteeti.",
"image_preview_title": "Eelvaate seaded", "image_preview_title": "Eelvaate seaded",
"image_quality": "Kvaliteet", "image_quality": "Kvaliteet",
"image_resolution": "Resolutsioon", "image_resolution": "Resolutsioon",
@@ -100,7 +92,7 @@
"job_concurrency": "{job} samaaegsus", "job_concurrency": "{job} samaaegsus",
"job_created": "Tööde lisatud", "job_created": "Tööde lisatud",
"job_not_concurrency_safe": "Seda töödet pole ohutu samaaegselt käivitada.", "job_not_concurrency_safe": "Seda töödet pole ohutu samaaegselt käivitada.",
"job_settings": "Töödete seaded", "job_settings": "Tööte seaded",
"job_settings_description": "Halda töödete samaaegsust", "job_settings_description": "Halda töödete samaaegsust",
"job_status": "Tööte seisund", "job_status": "Tööte seisund",
"jobs_delayed": "{jobCount, plural, other {# edasi lükatud}}", "jobs_delayed": "{jobCount, plural, other {# edasi lükatud}}",
@@ -174,20 +166,6 @@
"metadata_settings_description": "Halda metaandmete seadeid", "metadata_settings_description": "Halda metaandmete seadeid",
"migration_job": "Migratsioon", "migration_job": "Migratsioon",
"migration_job_description": "Migreeri üksuste ja nägude pisipildid uusimale kaustastruktuurile", "migration_job_description": "Migreeri üksuste ja nägude pisipildid uusimale kaustastruktuurile",
"nightly_tasks_cluster_faces_setting_description": "Käivita värskelt avastatud nägudel näotuvastus",
"nightly_tasks_cluster_new_faces_setting": "Grupeeri uued näod",
"nightly_tasks_database_cleanup_setting": "Andmebaasi puhastuse tegumid",
"nightly_tasks_database_cleanup_setting_description": "Eemalda andmebaasist vanad, aegunud andmed",
"nightly_tasks_generate_memories_setting": "Genereeri mälestused",
"nightly_tasks_generate_memories_setting_description": "Loo üksustest uued mälestused",
"nightly_tasks_missing_thumbnails_setting": "Genereeri puuduvad pisipildid",
"nightly_tasks_missing_thumbnails_setting_description": "Suuna ilma pisipiltideta üksused pisipiltide genereerimisele",
"nightly_tasks_settings": "Öiste tegumite seaded",
"nightly_tasks_settings_description": "Halda öiseid tegumeid",
"nightly_tasks_start_time_setting": "Algusaeg",
"nightly_tasks_start_time_setting_description": "Aeg, millal server alustab öiste tegumite käivitamist",
"nightly_tasks_sync_quota_usage_setting": "Sünkrooni kvoodikasutus",
"nightly_tasks_sync_quota_usage_setting_description": "Uuenda kasutaja talletuskvoot jooksva kasutuse alusel",
"no_paths_added": "Ühtegi teed pole", "no_paths_added": "Ühtegi teed pole",
"no_pattern_added": "Mustreid ei ole", "no_pattern_added": "Mustreid ei ole",
"note_apply_storage_label_previous_assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita", "note_apply_storage_label_previous_assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
@@ -218,8 +196,6 @@
"oauth_mobile_redirect_uri": "Mobiilne ümbersuunamise URI", "oauth_mobile_redirect_uri": "Mobiilne ümbersuunamise URI",
"oauth_mobile_redirect_uri_override": "Mobiilse ümbersuunamise URI ülekirjutamine", "oauth_mobile_redirect_uri_override": "Mobiilse ümbersuunamise URI ülekirjutamine",
"oauth_mobile_redirect_uri_override_description": "Lülita sisse, kui OAuth pakkuja ei luba mobiilset URI-d, näiteks ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Lülita sisse, kui OAuth pakkuja ei luba mobiilset URI-d, näiteks ''{callback}''",
"oauth_role_claim": "Rolli väide",
"oauth_role_claim_description": "Anna selle väite olemasolul automaatselt administraatori ligipääs. Väite väärtus võib olla 'user' või 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Halda OAuth sisselogimise seadeid", "oauth_settings_description": "Halda OAuth sisselogimise seadeid",
"oauth_settings_more_details": "Selle funktsiooni kohta rohkem teada saamiseks loe <link>dokumentatsiooni</link>.", "oauth_settings_more_details": "Selle funktsiooni kohta rohkem teada saamiseks loe <link>dokumentatsiooni</link>.",
@@ -381,12 +357,10 @@
"admin_password": "Administraatori parool", "admin_password": "Administraatori parool",
"administration": "Administratsioon", "administration": "Administratsioon",
"advanced": "Täpsemad valikud", "advanced": "Täpsemad valikud",
"advanced_settings_beta_timeline_subtitle": "Koge uut rakendust",
"advanced_settings_beta_timeline_title": "Beeta ajajoon",
"advanced_settings_enable_alternate_media_filter_subtitle": "Kasuta seda valikut, et filtreerida sünkroonimise ajal üksuseid alternatiivsete kriteeriumite alusel. Proovi seda ainult siis, kui rakendusel on probleeme kõigi albumite tuvastamisega.", "advanced_settings_enable_alternate_media_filter_subtitle": "Kasuta seda valikut, et filtreerida sünkroonimise ajal üksuseid alternatiivsete kriteeriumite alusel. Proovi seda ainult siis, kui rakendusel on probleeme kõigi albumite tuvastamisega.",
"advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTAALNE] Kasuta alternatiivset seadme albumi sünkroonimise filtrit", "advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTAALNE] Kasuta alternatiivset seadme albumi sünkroonimise filtrit",
"advanced_settings_log_level_title": "Logimistase: {level}", "advanced_settings_log_level_title": "Logimistase: {level}",
"advanced_settings_prefer_remote_subtitle": "Mõned seadmed laadivad lokaalsete üksuste pisipilte piinavalt aeglaselt. Aktiveeri see seadistus, et laadida selle asemel kaugpilte.", "advanced_settings_prefer_remote_subtitle": "Mõned seadmed laadivad seadmes olevate üksuste pisipilte piinavalt aeglaselt. Aktiveeri see seadistus, et laadida selle asemel kaugpilte.",
"advanced_settings_prefer_remote_title": "Eelista kaugpilte", "advanced_settings_prefer_remote_title": "Eelista kaugpilte",
"advanced_settings_proxy_headers_subtitle": "Määra vaheserveri päised, mida Immich peaks iga päringuga saatma", "advanced_settings_proxy_headers_subtitle": "Määra vaheserveri päised, mida Immich peaks iga päringuga saatma",
"advanced_settings_proxy_headers_title": "Vaheserveri päised", "advanced_settings_proxy_headers_title": "Vaheserveri päised",
@@ -405,7 +379,6 @@
"album_cover_updated": "Albumi kaanepilt muudetud", "album_cover_updated": "Albumi kaanepilt muudetud",
"album_delete_confirmation": "Kas oled kindel, et soovid albumi {album} kustutada?", "album_delete_confirmation": "Kas oled kindel, et soovid albumi {album} kustutada?",
"album_delete_confirmation_description": "Kui see album on jagatud, ei pääse teised kasutajad sellele enam ligi.", "album_delete_confirmation_description": "Kui see album on jagatud, ei pääse teised kasutajad sellele enam ligi.",
"album_deleted": "Album kustutatud",
"album_info_card_backup_album_excluded": "VÄLJA JÄETUD", "album_info_card_backup_album_excluded": "VÄLJA JÄETUD",
"album_info_card_backup_album_included": "LISATUD", "album_info_card_backup_album_included": "LISATUD",
"album_info_updated": "Albumi info muudetud", "album_info_updated": "Albumi info muudetud",
@@ -415,7 +388,6 @@
"album_options": "Albumi valikud", "album_options": "Albumi valikud",
"album_remove_user": "Eemalda kasutaja?", "album_remove_user": "Eemalda kasutaja?",
"album_remove_user_confirmation": "Kas oled kindel, et soovid kasutaja {user} eemaldada?", "album_remove_user_confirmation": "Kas oled kindel, et soovid kasutaja {user} eemaldada?",
"album_search_not_found": "Otsingule vastavaid albumeid ei leitud",
"album_share_no_users": "Paistab, et oled seda albumit kõikide kasutajatega jaganud, või pole ühtegi kasutajat, kellega jagada.", "album_share_no_users": "Paistab, et oled seda albumit kõikide kasutajatega jaganud, või pole ühtegi kasutajat, kellega jagada.",
"album_updated": "Album muudetud", "album_updated": "Album muudetud",
"album_updated_setting_description": "Saa teavitus e-posti teel, kui jagatud albumis on uusi üksuseid", "album_updated_setting_description": "Saa teavitus e-posti teel, kui jagatud albumis on uusi üksuseid",
@@ -435,7 +407,6 @@
"albums_default_sort_order": "Vaikimisi albumi järjestus", "albums_default_sort_order": "Vaikimisi albumi järjestus",
"albums_default_sort_order_description": "Uute albumite lisamisel üksuste esialgne järjekord.", "albums_default_sort_order_description": "Uute albumite lisamisel üksuste esialgne järjekord.",
"albums_feature_description": "Üksuste kollektsioonid, mida saab teiste kasutajatega jagada.", "albums_feature_description": "Üksuste kollektsioonid, mida saab teiste kasutajatega jagada.",
"albums_on_device_count": "Albumid seadmel ({count})",
"all": "Kõik", "all": "Kõik",
"all_albums": "Kõik albumid", "all_albums": "Kõik albumid",
"all_people": "Kõik isikud", "all_people": "Kõik isikud",
@@ -456,7 +427,6 @@
"app_settings": "Rakenduse seaded", "app_settings": "Rakenduse seaded",
"appears_in": "Albumid", "appears_in": "Albumid",
"archive": "Arhiiv", "archive": "Arhiiv",
"archive_action_prompt": "{count} lisatud arhiivi",
"archive_or_unarchive_photo": "Arhiveeri või taasta foto", "archive_or_unarchive_photo": "Arhiveeri või taasta foto",
"archive_page_no_archived_assets": "Arhiveeritud üksuseid ei leitud", "archive_page_no_archived_assets": "Arhiveeritud üksuseid ei leitud",
"archive_page_title": "Arhiveeri ({count})", "archive_page_title": "Arhiveeri ({count})",
@@ -494,6 +464,7 @@
"assets": "Üksused", "assets": "Üksused",
"assets_added_count": "{count, plural, one {# üksus} other {# üksust}} lisatud", "assets_added_count": "{count, plural, one {# üksus} other {# üksust}} lisatud",
"assets_added_to_album_count": "{count, plural, one {# üksus} other {# üksust}} albumisse lisatud", "assets_added_to_album_count": "{count, plural, one {# üksus} other {# üksust}} albumisse lisatud",
"assets_added_to_name_count": "{count, plural, one {# üksus} other {# üksust}} lisatud {hasName, select, true {albumisse <b>{name}</b>} other {uude albumisse}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Üksust} other {Üksuseid}} ei saa albumisse lisada", "assets_cannot_be_added_to_album_count": "{count, plural, one {Üksust} other {Üksuseid}} ei saa albumisse lisada",
"assets_count": "{count, plural, one {# üksus} other {# üksust}}", "assets_count": "{count, plural, one {# üksus} other {# üksust}}",
"assets_deleted_permanently": "{count} üksus(t) jäädavalt kustutatud", "assets_deleted_permanently": "{count} üksus(t) jäädavalt kustutatud",
@@ -519,7 +490,6 @@
"back_close_deselect": "Tagasi, sulge või tühista valik", "back_close_deselect": "Tagasi, sulge või tühista valik",
"background_location_permission": "Taustal asukoha luba", "background_location_permission": "Taustal asukoha luba",
"background_location_permission_content": "Et taustal töötades võrguühendust vahetada, peab Immich'il *alati* olema täpse asukoha luba, et rakendus saaks WiFi-võrgu nime lugeda", "background_location_permission_content": "Et taustal töötades võrguühendust vahetada, peab Immich'il *alati* olema täpse asukoha luba, et rakendus saaks WiFi-võrgu nime lugeda",
"backup": "Varundamine",
"backup_album_selection_page_albums_device": "Albumid seadmel ({count})", "backup_album_selection_page_albums_device": "Albumid seadmel ({count})",
"backup_album_selection_page_albums_tap": "Puuduta kaasamiseks, topeltpuuduta välistamiseks", "backup_album_selection_page_albums_tap": "Puuduta kaasamiseks, topeltpuuduta välistamiseks",
"backup_album_selection_page_assets_scatter": "Üksused võivad olla jaotatud mitme albumi vahel. Seega saab albumeid varundamise protsessi kaasata või välistada.", "backup_album_selection_page_assets_scatter": "Üksused võivad olla jaotatud mitme albumi vahel. Seega saab albumeid varundamise protsessi kaasata või välistada.",
@@ -583,8 +553,6 @@
"backup_options_page_title": "Varundamise valikud", "backup_options_page_title": "Varundamise valikud",
"backup_setting_subtitle": "Halda taustal ja esiplaanil üleslaadimise seadeid", "backup_setting_subtitle": "Halda taustal ja esiplaanil üleslaadimise seadeid",
"backward": "Tagasi", "backward": "Tagasi",
"beta_sync": "Beeta sünkroonimise staatus",
"beta_sync_subtitle": "Halda uut sünkroonimissüsteemi",
"biometric_auth_enabled": "Biomeetriline autentimine lubatud", "biometric_auth_enabled": "Biomeetriline autentimine lubatud",
"biometric_locked_out": "Biomeetriline autentimine on blokeeritud", "biometric_locked_out": "Biomeetriline autentimine on blokeeritud",
"biometric_no_options": "Biomeetrilisi valikuid ei ole", "biometric_no_options": "Biomeetrilisi valikuid ei ole",
@@ -602,7 +570,7 @@
"cache_settings_clear_cache_button": "Tühjenda puhver", "cache_settings_clear_cache_button": "Tühjenda puhver",
"cache_settings_clear_cache_button_title": "Tühjendab rakenduse puhvri. See mõjutab oluliselt rakenduse jõudlust, kuni puhver uuesti täidetakse.", "cache_settings_clear_cache_button_title": "Tühjendab rakenduse puhvri. See mõjutab oluliselt rakenduse jõudlust, kuni puhver uuesti täidetakse.",
"cache_settings_duplicated_assets_clear_button": "TÜHJENDA", "cache_settings_duplicated_assets_clear_button": "TÜHJENDA",
"cache_settings_duplicated_assets_subtitle": "Fotod ja videod, mis on rakenduse poolt ignoreeritud", "cache_settings_duplicated_assets_subtitle": "Fotod ja videod, mis on rakenduse poolt mustfiltreeritud",
"cache_settings_duplicated_assets_title": "Dubleeritud üksused ({count})", "cache_settings_duplicated_assets_title": "Dubleeritud üksused ({count})",
"cache_settings_statistics_album": "Kogu pisipildid", "cache_settings_statistics_album": "Kogu pisipildid",
"cache_settings_statistics_full": "Täismõõdus pildid", "cache_settings_statistics_full": "Täismõõdus pildid",
@@ -619,7 +587,6 @@
"cancel": "Katkesta", "cancel": "Katkesta",
"cancel_search": "Katkesta otsing", "cancel_search": "Katkesta otsing",
"canceled": "Tühistatud", "canceled": "Tühistatud",
"canceling": "Tühistamine",
"cannot_merge_people": "Ei saa isikuid ühendada", "cannot_merge_people": "Ei saa isikuid ühendada",
"cannot_undo_this_action": "Sa ei saa seda tagasi võtta!", "cannot_undo_this_action": "Sa ei saa seda tagasi võtta!",
"cannot_update_the_description": "Kirjelduse muutmine ebaõnnestus", "cannot_update_the_description": "Kirjelduse muutmine ebaõnnestus",
@@ -733,11 +700,10 @@
"current_server_address": "Praegune serveri aadress", "current_server_address": "Praegune serveri aadress",
"custom_locale": "Kohandatud lokaat", "custom_locale": "Kohandatud lokaat",
"custom_locale_description": "Vorminda kuupäevad ja arvud vastavalt keelele ja regioonile", "custom_locale_description": "Vorminda kuupäevad ja arvud vastavalt keelele ja regioonile",
"custom_url": "Kohandatud URL",
"daily_title_text_date": "d. MMMM", "daily_title_text_date": "d. MMMM",
"daily_title_text_date_year": "d. MMMM yyyy", "daily_title_text_date_year": "d. MMMM yyyy",
"dark": "Tume", "dark": "Tume",
"dark_theme": "Lülita tume teema", "darkTheme": "Lülita tume teema",
"date_after": "Kuupäev pärast", "date_after": "Kuupäev pärast",
"date_and_time": "Kuupäev ja kellaaeg", "date_and_time": "Kuupäev ja kellaaeg",
"date_before": "Kuupäev enne", "date_before": "Kuupäev enne",
@@ -753,8 +719,6 @@
"default_locale": "Vaikimisi lokaat", "default_locale": "Vaikimisi lokaat",
"default_locale_description": "Vorminda kuupäevad ja numbrid vastavalt brauseri lokaadile", "default_locale_description": "Vorminda kuupäevad ja numbrid vastavalt brauseri lokaadile",
"delete": "Kustuta", "delete": "Kustuta",
"delete_action_confirmation_message": "Kas oled kindel, et soovid selle üksuse kustutada? See toiming liigutab üksuse serveri prügikasti ja küsib, kas soovid selle lokaalselt kustutada",
"delete_action_prompt": "{count} kustutatud",
"delete_album": "Kustuta album", "delete_album": "Kustuta album",
"delete_api_key_prompt": "Kas oled kindel, et soovid selle API võtme kustutada?", "delete_api_key_prompt": "Kas oled kindel, et soovid selle API võtme kustutada?",
"delete_dialog_alert": "Need üksused kustutatakse jäädavalt Immich'ist ja sinu seadmest", "delete_dialog_alert": "Need üksused kustutatakse jäädavalt Immich'ist ja sinu seadmest",
@@ -768,12 +732,9 @@
"delete_key": "Kustuta võti", "delete_key": "Kustuta võti",
"delete_library": "Kustuta kogu", "delete_library": "Kustuta kogu",
"delete_link": "Kustuta link", "delete_link": "Kustuta link",
"delete_local_action_prompt": "{count} kustutatud lokaalselt",
"delete_local_dialog_ok_backed_up_only": "Kustuta ainult varundatud", "delete_local_dialog_ok_backed_up_only": "Kustuta ainult varundatud",
"delete_local_dialog_ok_force": "Kustuta sellegipoolest", "delete_local_dialog_ok_force": "Kustuta sellegipoolest",
"delete_others": "Kustuta teised", "delete_others": "Kustuta teised",
"delete_permanently": "Kustuta jäädavalt",
"delete_permanently_action_prompt": "{count} jäädavalt kustutatud",
"delete_shared_link": "Kustuta jagatud link", "delete_shared_link": "Kustuta jagatud link",
"delete_shared_link_dialog_title": "Kustuta jagatud link", "delete_shared_link_dialog_title": "Kustuta jagatud link",
"delete_tag": "Kustuta silt", "delete_tag": "Kustuta silt",
@@ -784,7 +745,6 @@
"description": "Kirjeldus", "description": "Kirjeldus",
"description_input_hint_text": "Lisa kirjeldus...", "description_input_hint_text": "Lisa kirjeldus...",
"description_input_submit_error": "Viga kirjelduse muutmisel, rohkem infot leiad logist", "description_input_submit_error": "Viga kirjelduse muutmisel, rohkem infot leiad logist",
"deselect_all": "Eemalda kõik valikust",
"details": "Üksikasjad", "details": "Üksikasjad",
"direction": "Suund", "direction": "Suund",
"disabled": "Välja lülitatud", "disabled": "Välja lülitatud",
@@ -802,7 +762,6 @@
"documentation": "Dokumentatsioon", "documentation": "Dokumentatsioon",
"done": "Tehtud", "done": "Tehtud",
"download": "Laadi alla", "download": "Laadi alla",
"download_action_prompt": "{count} üksust laaditakse alla",
"download_canceled": "Allalaadimine katkestatud", "download_canceled": "Allalaadimine katkestatud",
"download_complete": "Allalaadimine lõpetatud", "download_complete": "Allalaadimine lõpetatud",
"download_enqueue": "Allalaadimine ootel", "download_enqueue": "Allalaadimine ootel",
@@ -829,7 +788,6 @@
"edit": "Muuda", "edit": "Muuda",
"edit_album": "Muuda albumit", "edit_album": "Muuda albumit",
"edit_avatar": "Muuda avatari", "edit_avatar": "Muuda avatari",
"edit_birthday": "Muuda sünnipäeva",
"edit_date": "Muuda kuupäeva", "edit_date": "Muuda kuupäeva",
"edit_date_and_time": "Muuda kuupäeva ja kellaaega", "edit_date_and_time": "Muuda kuupäeva ja kellaaega",
"edit_description": "Muuda kirjeldust", "edit_description": "Muuda kirjeldust",
@@ -841,7 +799,6 @@
"edit_key": "Muuda võtit", "edit_key": "Muuda võtit",
"edit_link": "Muuda linki", "edit_link": "Muuda linki",
"edit_location": "Muuda asukohta", "edit_location": "Muuda asukohta",
"edit_location_action_prompt": "{count} asukoht muudetud",
"edit_location_dialog_title": "Asukoht", "edit_location_dialog_title": "Asukoht",
"edit_name": "Muuda nime", "edit_name": "Muuda nime",
"edit_people": "Muuda isikuid", "edit_people": "Muuda isikuid",
@@ -860,7 +817,6 @@
"empty_trash": "Tühjenda prügikast", "empty_trash": "Tühjenda prügikast",
"empty_trash_confirmation": "Kas oled kindel, et soovid prügikasti tühjendada? See eemaldab kõik seal olevad üksused Immich'ist jäädavalt.\nSeda tegevust ei saa tagasi võtta!", "empty_trash_confirmation": "Kas oled kindel, et soovid prügikasti tühjendada? See eemaldab kõik seal olevad üksused Immich'ist jäädavalt.\nSeda tegevust ei saa tagasi võtta!",
"enable": "Luba", "enable": "Luba",
"enable_backup": "Luba varundus",
"enable_biometric_auth_description": "Biomeetrilise autentimise lubamiseks sisesta oma PIN-kood", "enable_biometric_auth_description": "Biomeetrilise autentimise lubamiseks sisesta oma PIN-kood",
"enabled": "Lubatud", "enabled": "Lubatud",
"end_date": "Lõppkuupäev", "end_date": "Lõppkuupäev",
@@ -997,7 +953,6 @@
}, },
"exif": "Exif", "exif": "Exif",
"exif_bottom_sheet_description": "Lisa kirjeldus...", "exif_bottom_sheet_description": "Lisa kirjeldus...",
"exif_bottom_sheet_description_error": "Viga kirjelduse muutmisel",
"exif_bottom_sheet_details": "ÜKSIKASJAD", "exif_bottom_sheet_details": "ÜKSIKASJAD",
"exif_bottom_sheet_location": "ASUKOHT", "exif_bottom_sheet_location": "ASUKOHT",
"exif_bottom_sheet_people": "ISIKUD", "exif_bottom_sheet_people": "ISIKUD",
@@ -1018,8 +973,6 @@
"explorer": "Brauser", "explorer": "Brauser",
"export": "Ekspordi", "export": "Ekspordi",
"export_as_json": "Ekspordi JSON-formaati", "export_as_json": "Ekspordi JSON-formaati",
"export_database": "Ekspordi andmebaas",
"export_database_description": "Ekspordi SQLite andmebaas",
"extension": "Laiend", "extension": "Laiend",
"external": "Väline", "external": "Väline",
"external_libraries": "Välised kogud", "external_libraries": "Välised kogud",
@@ -1031,7 +984,6 @@
"failed_to_load_assets": "Üksuste laadimine ebaõnnestus", "failed_to_load_assets": "Üksuste laadimine ebaõnnestus",
"failed_to_load_folder": "Kausta laadimine ebaõnnestus", "failed_to_load_folder": "Kausta laadimine ebaõnnestus",
"favorite": "Lemmik", "favorite": "Lemmik",
"favorite_action_prompt": "{count} lisatud lemmikutesse",
"favorite_or_unfavorite_photo": "Lisa foto lemmikutesse või eemalda lemmikutest", "favorite_or_unfavorite_photo": "Lisa foto lemmikutesse või eemalda lemmikutest",
"favorites": "Lemmikud", "favorites": "Lemmikud",
"favorites_page_no_favorites": "Lemmikuid üksuseid ei leitud", "favorites_page_no_favorites": "Lemmikuid üksuseid ei leitud",
@@ -1071,9 +1023,6 @@
"haptic_feedback_switch": "Luba haptiline tagasiside", "haptic_feedback_switch": "Luba haptiline tagasiside",
"haptic_feedback_title": "Haptiline tagasiside", "haptic_feedback_title": "Haptiline tagasiside",
"has_quota": "On kvoot", "has_quota": "On kvoot",
"hash_asset": "Arvuta üksuse räsi",
"hashed_assets": "Räsiga üksused",
"hashing": "Räsi arvutamine",
"header_settings_add_header_tip": "Lisa päis", "header_settings_add_header_tip": "Lisa päis",
"header_settings_field_validator_msg": "Väärtus ei saa olla tühi", "header_settings_field_validator_msg": "Väärtus ei saa olla tühi",
"header_settings_header_name_input": "Päise nimi", "header_settings_header_name_input": "Päise nimi",
@@ -1106,7 +1055,6 @@
"host": "Host", "host": "Host",
"hour": "Tund", "hour": "Tund",
"id": "ID", "id": "ID",
"idle": "Jõude",
"ignore_icloud_photos": "Ignoreeri iCloud fotosid", "ignore_icloud_photos": "Ignoreeri iCloud fotosid",
"ignore_icloud_photos_description": "Fotosid, mis on iCloud'is, ei laadita üles Immich'i serverisse", "ignore_icloud_photos_description": "Fotosid, mis on iCloud'is, ei laadita üles Immich'i serverisse",
"image": "Pilt", "image": "Pilt",
@@ -1151,7 +1099,7 @@
"ios_debug_info_no_processes_queued": "Taustaprotsesse pole järjekorras", "ios_debug_info_no_processes_queued": "Taustaprotsesse pole järjekorras",
"ios_debug_info_no_sync_yet": "Taustal sünkroonimise tööde pole veel käinud", "ios_debug_info_no_sync_yet": "Taustal sünkroonimise tööde pole veel käinud",
"ios_debug_info_processes_queued": "{count, plural, one {{count} taustaprotsess järjekorras} other {{count} taustaprotsessi järjekorras}}", "ios_debug_info_processes_queued": "{count, plural, one {{count} taustaprotsess järjekorras} other {{count} taustaprotsessi järjekorras}}",
"ios_debug_info_processing_ran_at": "Töötlemine toimus {dateTime}", "ios_debug_info_processing_ran_at": "Töötlemine käis {dateTime}",
"items_count": "{count, plural, one {# üksus} other {# üksust}}", "items_count": "{count, plural, one {# üksus} other {# üksust}}",
"jobs": "Tööted", "jobs": "Tööted",
"keep": "Jäta alles", "keep": "Jäta alles",
@@ -1164,7 +1112,6 @@
"language_no_results_title": "Ühtegi keelt ei leitud", "language_no_results_title": "Ühtegi keelt ei leitud",
"language_search_hint": "Otsi keeli...", "language_search_hint": "Otsi keeli...",
"language_setting_description": "Vali oma eelistatud keel", "language_setting_description": "Vali oma eelistatud keel",
"large_files": "Suured failid",
"last_seen": "Viimati nähtud", "last_seen": "Viimati nähtud",
"latest_version": "Uusim versioon", "latest_version": "Uusim versioon",
"latitude": "Laiuskraad", "latitude": "Laiuskraad",
@@ -1180,18 +1127,16 @@
"library_page_sort_created": "Loomise aeg", "library_page_sort_created": "Loomise aeg",
"library_page_sort_last_modified": "Viimase muutmise aeg", "library_page_sort_last_modified": "Viimase muutmise aeg",
"library_page_sort_title": "Albumi pealkiri", "library_page_sort_title": "Albumi pealkiri",
"licenses": "Litsentsid",
"light": "Hele", "light": "Hele",
"like_deleted": "Meeldimine kustutatud", "like_deleted": "Meeldimine kustutatud",
"link_motion_video": "Lingi liikuv video", "link_motion_video": "Lingi liikuv video",
"link_options": "Lingi valikud",
"link_to_oauth": "Ühenda OAuth", "link_to_oauth": "Ühenda OAuth",
"linked_oauth_account": "OAuth konto ühendatud", "linked_oauth_account": "OAuth konto ühendatud",
"list": "Loend", "list": "Loend",
"loading": "Laadimine", "loading": "Laadimine",
"loading_search_results_failed": "Otsitulemuste laadimine ebaõnnestus", "loading_search_results_failed": "Otsitulemuste laadimine ebaõnnestus",
"local": "Lokaalsed",
"local_asset_cast_failed": "Ei saa edastada üksust, mis pole serverisse üles laaditud", "local_asset_cast_failed": "Ei saa edastada üksust, mis pole serverisse üles laaditud",
"local_assets": "Lokaalsed üksused",
"local_network": "Kohalik võrk", "local_network": "Kohalik võrk",
"local_network_sheet_info": "Rakendus ühendub valitud Wi-Fi võrgus olles serveriga selle URL-i kaudu", "local_network_sheet_info": "Rakendus ühendub valitud Wi-Fi võrgus olles serveriga selle URL-i kaudu",
"location_permission": "Asukoha luba", "location_permission": "Asukoha luba",
@@ -1248,7 +1193,8 @@
"manage_your_devices": "Halda oma autenditud seadmeid", "manage_your_devices": "Halda oma autenditud seadmeid",
"manage_your_oauth_connection": "Halda oma OAuth ühendust", "manage_your_oauth_connection": "Halda oma OAuth ühendust",
"map": "Kaart", "map": "Kaart",
"map_assets_in_bounds": "{count, plural, one {# foto} other {# fotot}}", "map_assets_in_bound": "{count} foto",
"map_assets_in_bounds": "{count} fotot",
"map_cannot_get_user_location": "Ei saa kasutaja asukohta tuvastada", "map_cannot_get_user_location": "Ei saa kasutaja asukohta tuvastada",
"map_location_dialog_yes": "Jah", "map_location_dialog_yes": "Jah",
"map_location_picker_page_use_location": "Kasuta seda asukohta", "map_location_picker_page_use_location": "Kasuta seda asukohta",
@@ -1300,7 +1246,6 @@
"more": "Rohkem", "more": "Rohkem",
"move": "Liiguta", "move": "Liiguta",
"move_off_locked_folder": "Liiguta lukustatud kaustast välja", "move_off_locked_folder": "Liiguta lukustatud kaustast välja",
"move_to_lock_folder_action_prompt": "{count} lisatud lukustatud kausta",
"move_to_locked_folder": "Liiguta lukustatud kausta", "move_to_locked_folder": "Liiguta lukustatud kausta",
"move_to_locked_folder_confirmation": "Need fotod ja videod eemaldatakse kõigist albumitest ning nad on nähtavad ainult lukustatud kaustas", "move_to_locked_folder_confirmation": "Need fotod ja videod eemaldatakse kõigist albumitest ning nad on nähtavad ainult lukustatud kaustas",
"moved_to_archive": "{count, plural, one {# üksus} other {# üksust}} liigutatud arhiivi", "moved_to_archive": "{count, plural, one {# üksus} other {# üksust}} liigutatud arhiivi",
@@ -1347,7 +1292,6 @@
"no_results": "Vasteid pole", "no_results": "Vasteid pole",
"no_results_description": "Proovi sünonüümi või üldisemat märksõna", "no_results_description": "Proovi sünonüümi või üldisemat märksõna",
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada", "no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
"no_uploads_in_progress": "Üleslaadimisi käimas ei ole",
"not_in_any_album": "Pole üheski albumis", "not_in_any_album": "Pole üheski albumis",
"not_selected": "Ei ole valitud", "not_selected": "Ei ole valitud",
"note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita", "note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
@@ -1385,7 +1329,6 @@
"original": "originaal", "original": "originaal",
"other": "Muud", "other": "Muud",
"other_devices": "Muud seadmed", "other_devices": "Muud seadmed",
"other_entities": "Muud objektid",
"other_variables": "Muud muutujad", "other_variables": "Muud muutujad",
"owned": "Minu omad", "owned": "Minu omad",
"owner": "Omanik", "owner": "Omanik",
@@ -1517,7 +1460,6 @@
"purchase_server_description_2": "Toetaja staatus", "purchase_server_description_2": "Toetaja staatus",
"purchase_server_title": "Server", "purchase_server_title": "Server",
"purchase_settings_server_activated": "Serveri tootevõtit haldab administraator", "purchase_settings_server_activated": "Serveri tootevõtit haldab administraator",
"queue_status": "Järjekorras {count}/{total}",
"rating": "Hinnang", "rating": "Hinnang",
"rating_clear": "Tühjenda hinnang", "rating_clear": "Tühjenda hinnang",
"rating_count": "{count, plural, one {# tärn} other {# tärni}}", "rating_count": "{count, plural, one {# tärn} other {# tärni}}",
@@ -1546,8 +1488,6 @@
"refreshing_faces": "Nägude värskendamine", "refreshing_faces": "Nägude värskendamine",
"refreshing_metadata": "Metaandmete värskendamine", "refreshing_metadata": "Metaandmete värskendamine",
"regenerating_thumbnails": "Pisipiltide uuesti genereerimine", "regenerating_thumbnails": "Pisipiltide uuesti genereerimine",
"remote": "Serveris",
"remote_assets": "Kaugüksused",
"remove": "Eemalda", "remove": "Eemalda",
"remove_assets_album_confirmation": "Kas oled kindel, et soovid {count, plural, one {# üksuse} other {# üksust}} albumist eemaldada?", "remove_assets_album_confirmation": "Kas oled kindel, et soovid {count, plural, one {# üksuse} other {# üksust}} albumist eemaldada?",
"remove_assets_shared_link_confirmation": "Kas oled kindel, et soovid eemaldada {count, plural, one {# üksuse} other {# üksust}} sellelt jagatud lingilt?", "remove_assets_shared_link_confirmation": "Kas oled kindel, et soovid eemaldada {count, plural, one {# üksuse} other {# üksust}} sellelt jagatud lingilt?",
@@ -1555,9 +1495,7 @@
"remove_custom_date_range": "Eemalda kohandatud kuupäevavahemik", "remove_custom_date_range": "Eemalda kohandatud kuupäevavahemik",
"remove_deleted_assets": "Eemalda kustutatud üksused", "remove_deleted_assets": "Eemalda kustutatud üksused",
"remove_from_album": "Eemalda albumist", "remove_from_album": "Eemalda albumist",
"remove_from_album_action_prompt": "{count} eemaldatud albumist",
"remove_from_favorites": "Eemalda lemmikutest", "remove_from_favorites": "Eemalda lemmikutest",
"remove_from_lock_folder_action_prompt": "{count} eemaldatud lukustatud kaustast",
"remove_from_locked_folder": "Eemalda lukustatud kaustast", "remove_from_locked_folder": "Eemalda lukustatud kaustast",
"remove_from_locked_folder_confirmation": "Kas oled kindel, et soovid need fotod ja videod lukustatud kaustast välja liigutada? Need muutuvad su kogus nähtavaks.", "remove_from_locked_folder_confirmation": "Kas oled kindel, et soovid need fotod ja videod lukustatud kaustast välja liigutada? Need muutuvad su kogus nähtavaks.",
"remove_from_shared_link": "Eemalda jagatud lingist", "remove_from_shared_link": "Eemalda jagatud lingist",
@@ -1585,25 +1523,19 @@
"reset_password": "Lähtesta parool", "reset_password": "Lähtesta parool",
"reset_people_visibility": "Lähtesta isikute nähtavus", "reset_people_visibility": "Lähtesta isikute nähtavus",
"reset_pin_code": "Lähtesta PIN-kood", "reset_pin_code": "Lähtesta PIN-kood",
"reset_sqlite": "Lähtesta SQLite andmebaas",
"reset_sqlite_confirmation": "Kas oled kindel, et soovid SQLite andmebaasi lähtestada? Andmete uuesti sünkroonimiseks pead välja ja jälle sisse logima",
"reset_sqlite_success": "SQLite andmebaas edukalt lähtestatud",
"reset_to_default": "Lähtesta", "reset_to_default": "Lähtesta",
"resolve_duplicates": "Lahenda duplikaadid", "resolve_duplicates": "Lahenda duplikaadid",
"resolved_all_duplicates": "Kõik duplikaadid lahendatud", "resolved_all_duplicates": "Kõik duplikaadid lahendatud",
"restore": "Taasta", "restore": "Taasta",
"restore_all": "Taasta kõik", "restore_all": "Taasta kõik",
"restore_trash_action_prompt": "{count} prügikastust taastatud",
"restore_user": "Taasta kasutaja", "restore_user": "Taasta kasutaja",
"restored_asset": "Üksus taastatud", "restored_asset": "Üksus taastatud",
"resume": "Jätka", "resume": "Jätka",
"retry_upload": "Proovi üleslaadimist uuesti", "retry_upload": "Proovi üleslaadimist uuesti",
"review_duplicates": "Vaata duplikaadid läbi", "review_duplicates": "Vaata duplikaadid läbi",
"review_large_files": "Vaata suured failid läbi",
"role": "Roll", "role": "Roll",
"role_editor": "Muutja", "role_editor": "Muutja",
"role_viewer": "Vaataja", "role_viewer": "Vaataja",
"running": "Käimas",
"save": "Salvesta", "save": "Salvesta",
"save_to_gallery": "Salvesta galeriisse", "save_to_gallery": "Salvesta galeriisse",
"saved_api_key": "API võti salvestatud", "saved_api_key": "API võti salvestatud",
@@ -1735,7 +1667,6 @@
"settings_saved": "Seaded salvestatud", "settings_saved": "Seaded salvestatud",
"setup_pin_code": "Seadista PIN-kood", "setup_pin_code": "Seadista PIN-kood",
"share": "Jaga", "share": "Jaga",
"share_action_prompt": "Jagatud {count} üksust",
"share_add_photos": "Lisa fotosid", "share_add_photos": "Lisa fotosid",
"share_assets_selected": "{count} valitud", "share_assets_selected": "{count} valitud",
"share_dialog_preparing": "Ettevalmistamine...", "share_dialog_preparing": "Ettevalmistamine...",
@@ -1757,7 +1688,6 @@
"shared_link_clipboard_copied_massage": "Kopeeritud lõikelauale", "shared_link_clipboard_copied_massage": "Kopeeritud lõikelauale",
"shared_link_clipboard_text": "Link: {link}\nParool: {password}", "shared_link_clipboard_text": "Link: {link}\nParool: {password}",
"shared_link_create_error": "Viga jagatud lingi loomisel", "shared_link_create_error": "Viga jagatud lingi loomisel",
"shared_link_custom_url_description": "Ligipääs jagatud lingile kohandatud URL-i kaudu",
"shared_link_edit_description_hint": "Sisesta jagatud lingi kirjeldus", "shared_link_edit_description_hint": "Sisesta jagatud lingi kirjeldus",
"shared_link_edit_expire_after_option_day": "1 päev", "shared_link_edit_expire_after_option_day": "1 päev",
"shared_link_edit_expire_after_option_days": "{count} päeva", "shared_link_edit_expire_after_option_days": "{count} päeva",
@@ -1783,7 +1713,6 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Halda jagatud linke", "shared_link_manage_links": "Halda jagatud linke",
"shared_link_options": "Jagatud lingi valikud", "shared_link_options": "Jagatud lingi valikud",
"shared_link_password_description": "Nõua jagatud lingile ligi pääsemiseks parooli",
"shared_links": "Jagatud lingid", "shared_links": "Jagatud lingid",
"shared_links_description": "Jaga fotosid ja videosid lingiga", "shared_links_description": "Jaga fotosid ja videosid lingiga",
"shared_photos_and_videos_count": "{assetCount, plural, other {# jagatud fotot ja videot.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# jagatud fotot ja videot.}}",
@@ -1839,7 +1768,6 @@
"sort_title": "Pealkiri", "sort_title": "Pealkiri",
"source": "Lähtekood", "source": "Lähtekood",
"stack": "Virnasta", "stack": "Virnasta",
"stack_action_prompt": "{count} virnastatud",
"stack_duplicates": "Virnasta duplikaadid", "stack_duplicates": "Virnasta duplikaadid",
"stack_select_one_photo": "Vali virnale kaanefoto", "stack_select_one_photo": "Vali virnale kaanefoto",
"stack_selected_photos": "Virnasta valitud fotod", "stack_selected_photos": "Virnasta valitud fotod",
@@ -1859,7 +1787,6 @@
"storage_quota": "Talletuskvoot", "storage_quota": "Talletuskvoot",
"storage_usage": "{used}/{available} kasutatud", "storage_usage": "{used}/{available} kasutatud",
"submit": "Saada", "submit": "Saada",
"success": "Õnnestus",
"suggestions": "Soovitused", "suggestions": "Soovitused",
"sunrise_on_the_beach": "Päikesetõus rannal", "sunrise_on_the_beach": "Päikesetõus rannal",
"support": "Tugi", "support": "Tugi",
@@ -1869,8 +1796,6 @@
"sync": "Sünkrooni", "sync": "Sünkrooni",
"sync_albums": "Sünkrooni albumid", "sync_albums": "Sünkrooni albumid",
"sync_albums_manual_subtitle": "Sünkrooni kõik üleslaaditud videod ja fotod valitud varundusalbumitesse", "sync_albums_manual_subtitle": "Sünkrooni kõik üleslaaditud videod ja fotod valitud varundusalbumitesse",
"sync_local": "Sünkrooni lokaalsed üksused",
"sync_remote": "Sünkrooni kaugüksused",
"sync_upload_album_setting_subtitle": "Loo ja laadi oma pildid ja videod üles Immich'isse valitud albumitesse", "sync_upload_album_setting_subtitle": "Loo ja laadi oma pildid ja videod üles Immich'isse valitud albumitesse",
"tag": "Silt", "tag": "Silt",
"tag_assets": "Sildista üksuseid", "tag_assets": "Sildista üksuseid",
@@ -1881,7 +1806,6 @@
"tag_updated": "Muudetud silt: {tag}", "tag_updated": "Muudetud silt: {tag}",
"tagged_assets": "{count, plural, one {# üksus} other {# üksust}} sildistatud", "tagged_assets": "{count, plural, one {# üksus} other {# üksust}} sildistatud",
"tags": "Sildid", "tags": "Sildid",
"tap_to_run_job": "Puuduta tööte käivitamiseks",
"template": "Mall", "template": "Mall",
"theme": "Teema", "theme": "Teema",
"theme_selection": "Teema valik", "theme_selection": "Teema valik",
@@ -1914,7 +1838,6 @@
"total": "Kokku", "total": "Kokku",
"total_usage": "Kogukasutus", "total_usage": "Kogukasutus",
"trash": "Prügikast", "trash": "Prügikast",
"trash_action_prompt": "{count} liigutatud prügikasti",
"trash_all": "Kõik prügikasti", "trash_all": "Kõik prügikasti",
"trash_count": "Liiguta {count, number} prügikasti", "trash_count": "Liiguta {count, number} prügikasti",
"trash_delete_asset": "Kustuta üksus", "trash_delete_asset": "Kustuta üksus",
@@ -1932,11 +1855,9 @@
"unable_to_change_pin_code": "PIN-koodi muutmine ebaõnnestus", "unable_to_change_pin_code": "PIN-koodi muutmine ebaõnnestus",
"unable_to_setup_pin_code": "PIN-koodi seadistamine ebaõnnestus", "unable_to_setup_pin_code": "PIN-koodi seadistamine ebaõnnestus",
"unarchive": "Taasta arhiivist", "unarchive": "Taasta arhiivist",
"unarchive_action_prompt": "{count} eemaldatud arhiivist",
"unarchived_count": "{count, plural, other {# arhiivist taastatud}}", "unarchived_count": "{count, plural, other {# arhiivist taastatud}}",
"undo": "Võta tagasi", "undo": "Võta tagasi",
"unfavorite": "Eemalda lemmikutest", "unfavorite": "Eemalda lemmikutest",
"unfavorite_action_prompt": "{count} eemaldatud lemmikutest",
"unhide_person": "Ära peida isikut", "unhide_person": "Ära peida isikut",
"unknown": "Teadmata", "unknown": "Teadmata",
"unknown_country": "Tundmatu riik", "unknown_country": "Tundmatu riik",
@@ -1954,20 +1875,15 @@
"unselect_all_duplicates": "Ära vali duplikaate", "unselect_all_duplicates": "Ära vali duplikaate",
"unselect_all_in": "Ära vali ühtegi grupis {group}", "unselect_all_in": "Ära vali ühtegi grupis {group}",
"unstack": "Eralda", "unstack": "Eralda",
"unstack_action_prompt": "{count} eraldatud",
"unstacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} eraldatud", "unstacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} eraldatud",
"untagged": "Sildistamata",
"up_next": "Järgmine", "up_next": "Järgmine",
"updated_at": "Uuendatud", "updated_at": "Uuendatud",
"updated_password": "Parool muudetud", "updated_password": "Parool muudetud",
"upload": "Laadi üles", "upload": "Laadi üles",
"upload_action_prompt": "{count} üleslaadimise ootel",
"upload_concurrency": "Üleslaadimise samaaegsus", "upload_concurrency": "Üleslaadimise samaaegsus",
"upload_details": "Üleslaadimise üksikasjad",
"upload_dialog_info": "Kas soovid valitud üksuse(d) serverisse varundada?", "upload_dialog_info": "Kas soovid valitud üksuse(d) serverisse varundada?",
"upload_dialog_title": "Üksuse üleslaadimine", "upload_dialog_title": "Üksuse üleslaadimine",
"upload_errors": "Üleslaadimine lõpetatud {count, plural, one {# veaga} other {# veaga}}, uute üksuste nägemiseks värskenda lehte.", "upload_errors": "Üleslaadimine lõpetatud {count, plural, one {# veaga} other {# veaga}}, uute üksuste nägemiseks värskenda lehte.",
"upload_finished": "Üleslaadimine lõpetatud",
"upload_progress": "Ootel {remaining, number} - Töödeldud {processed, number}/{total, number}", "upload_progress": "Ootel {remaining, number} - Töödeldud {processed, number}/{total, number}",
"upload_skipped_duplicates": "{count, plural, one {# dubleeritud üksus} other {# dubleeritud üksust}} vahele jäetud", "upload_skipped_duplicates": "{count, plural, one {# dubleeritud üksus} other {# dubleeritud üksust}} vahele jäetud",
"upload_status_duplicates": "Duplikaadid", "upload_status_duplicates": "Duplikaadid",
@@ -1976,7 +1892,6 @@
"upload_success": "Üleslaadimine õnnestus, uute üksuste nägemiseks värskenda lehte.", "upload_success": "Üleslaadimine õnnestus, uute üksuste nägemiseks värskenda lehte.",
"upload_to_immich": "Laadi Immich'isse ({count})", "upload_to_immich": "Laadi Immich'isse ({count})",
"uploading": "Üleslaadimine", "uploading": "Üleslaadimine",
"uploading_media": "Meediumi üleslaadimine",
"url": "URL", "url": "URL",
"usage": "Kasutus", "usage": "Kasutus",
"use_biometric": "Kasuta biomeetriat", "use_biometric": "Kasuta biomeetriat",
@@ -1997,7 +1912,6 @@
"user_usage_stats_description": "Vaata konto kasutuse statistikat", "user_usage_stats_description": "Vaata konto kasutuse statistikat",
"username": "Kasutajanimi", "username": "Kasutajanimi",
"users": "Kasutajad", "users": "Kasutajad",
"users_added_to_album_count": "{count, plural, one {# kasutaja} other {# kasutajat}} lisatud albumisse",
"utilities": "Tööriistad", "utilities": "Tööriistad",
"validate": "Valideeri", "validate": "Valideeri",
"validate_endpoint_error": "Sisesta korrektne URL", "validate_endpoint_error": "Sisesta korrektne URL",
@@ -2016,7 +1930,6 @@
"view_album": "Vaata albumit", "view_album": "Vaata albumit",
"view_all": "Vaata kõiki", "view_all": "Vaata kõiki",
"view_all_users": "Vaata kõiki kasutajaid", "view_all_users": "Vaata kõiki kasutajaid",
"view_details": "Vaata üksikasju",
"view_in_timeline": "Vaata ajajoonel", "view_in_timeline": "Vaata ajajoonel",
"view_link": "Vaata linki", "view_link": "Vaata linki",
"view_links": "Vaata linke", "view_links": "Vaata linke",

View File

@@ -471,6 +471,7 @@
"library": "کتابخانه", "library": "کتابخانه",
"library_options": "گزینه‌های کتابخانه", "library_options": "گزینه‌های کتابخانه",
"light": "روشن", "light": "روشن",
"link_options": "گزینه‌های لینک",
"link_to_oauth": "اتصال به OAuth", "link_to_oauth": "اتصال به OAuth",
"linked_oauth_account": "حساب OAuth متصل شده", "linked_oauth_account": "حساب OAuth متصل شده",
"list": "لیست", "list": "لیست",
@@ -492,6 +493,7 @@
"manage_your_devices": "مدیریت دستگاه‌های متصل", "manage_your_devices": "مدیریت دستگاه‌های متصل",
"manage_your_oauth_connection": "مدیریت اتصال OAuth", "manage_your_oauth_connection": "مدیریت اتصال OAuth",
"map": "نقشه", "map": "نقشه",
"map_assets_in_bound": "{count} عکس",
"map_assets_in_bounds": "{count} عکس ها", "map_assets_in_bounds": "{count} عکس ها",
"map_cannot_get_user_location": "موقعیت مکانی در دسترس نیست", "map_cannot_get_user_location": "موقعیت مکانی در دسترس نیست",
"map_location_dialog_yes": "بله", "map_location_dialog_yes": "بله",

View File

@@ -166,20 +166,6 @@
"metadata_settings_description": "Hallitse metatietoja", "metadata_settings_description": "Hallitse metatietoja",
"migration_job": "Migraatio", "migration_job": "Migraatio",
"migration_job_description": "Migroi aineiston pikkukuvat ja kasvot uusimpaan kansiorakenteeseen", "migration_job_description": "Migroi aineiston pikkukuvat ja kasvot uusimpaan kansiorakenteeseen",
"nightly_tasks_cluster_faces_setting_description": "Aja kasvojen tunnistus uusiin tunnistettuihin kasvoihin",
"nightly_tasks_cluster_new_faces_setting": "Kokoa uudet kasvot",
"nightly_tasks_database_cleanup_setting": "Tietokannan puhdistuksen tehtävät",
"nightly_tasks_database_cleanup_setting_description": "Siivoa vanhentunut data tietokannasta",
"nightly_tasks_generate_memories_setting": "Luo muistoja",
"nightly_tasks_generate_memories_setting_description": "Luo kohteista uusia muistoja",
"nightly_tasks_missing_thumbnails_setting": "Luo puuttuvat pikkukuvat",
"nightly_tasks_missing_thumbnails_setting_description": "Laita ilman pikkukuvia olevat kohteet jonoon pikkukuvien luontia varten",
"nightly_tasks_settings": "Yöllisten tehtävien asetukset",
"nightly_tasks_settings_description": "Hallitse yöllisiä tehtäviä",
"nightly_tasks_start_time_setting": "Aloitusaika",
"nightly_tasks_start_time_setting_description": "Aika jolloin palvelin aloittaa yöllisten tehtävien ajon",
"nightly_tasks_sync_quota_usage_setting": "Synkronointikiintiön käyttö",
"nightly_tasks_sync_quota_usage_setting_description": "Päivitä käyttäjän tallennustilan kiintiö nykyisen käytön mukaan",
"no_paths_added": "Polkuja ei asetettu", "no_paths_added": "Polkuja ei asetettu",
"no_pattern_added": "Kaavoja ei lisättynä", "no_pattern_added": "Kaavoja ei lisättynä",
"note_apply_storage_label_previous_assets": "Huom: Asettaaksesi nimikkeen aiemmin ladatulle aineistolle, aja", "note_apply_storage_label_previous_assets": "Huom: Asettaaksesi nimikkeen aiemmin ladatulle aineistolle, aja",
@@ -210,8 +196,6 @@
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI", "oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI",
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI", "oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
"oauth_mobile_redirect_uri_override_description": "Ota käyttöön kun OAuth tarjoaja ei salli mobiili URI:a, kuten ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Ota käyttöön kun OAuth tarjoaja ei salli mobiili URI:a, kuten ''{callback}''",
"oauth_role_claim": "Roolin vaatimus",
"oauth_role_claim_description": "Salli pääkäyttäjän pääsyoikeus automaattisesti tämän vaatimuksen perusteella. Vaatimus voi sisältää, joko 'käyttäjän' tai 'pääkäyttäjän'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia", "oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia",
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.", "oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
@@ -260,7 +244,6 @@
"storage_template_migration_info": "Tallennusmalli muuntaa kaikki tiedostopäätteet pieniksi kirjaimiksi. Mallipohjan muutokset koskevat vain uusia resursseja. Jos haluat käyttää mallipohjaa takautuvasti aiemmin ladattuihin resursseihin, suorita <link>{job}</link>.", "storage_template_migration_info": "Tallennusmalli muuntaa kaikki tiedostopäätteet pieniksi kirjaimiksi. Mallipohjan muutokset koskevat vain uusia resursseja. Jos haluat käyttää mallipohjaa takautuvasti aiemmin ladattuihin resursseihin, suorita <link>{job}</link>.",
"storage_template_migration_job": "Tallennustilan mallin muutostyö", "storage_template_migration_job": "Tallennustilan mallin muutostyö",
"storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>", "storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>",
"storage_template_onboarding_description_v2": "Päälle kytkettynä, toiminto järjestestelee tiedostot automaattisesti käyttäjän määrittämän mallin mukaisesti. Lisätietoja <link>dokumentaatiosta</link>..",
"storage_template_path_length": "Arvioitu tiedostopolun pituusrajoitus: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "Arvioitu tiedostopolun pituusrajoitus: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Tallennustilan malli", "storage_template_settings": "Tallennustilan malli",
"storage_template_settings_description": "Hallitse palvelimelle ladatun aineiston kansiorakennetta ja tiedostonimiä", "storage_template_settings_description": "Hallitse palvelimelle ladatun aineiston kansiorakennetta ja tiedostonimiä",
@@ -373,7 +356,6 @@
"admin_password": "Ylläpitäjän salasana", "admin_password": "Ylläpitäjän salasana",
"administration": "Ylläpito", "administration": "Ylläpito",
"advanced": "Edistyneet", "advanced": "Edistyneet",
"advanced_settings_beta_timeline_subtitle": "Kokeile uutta sovelluskokemusta",
"advanced_settings_enable_alternate_media_filter_subtitle": "Käytä tätä vaihtoehtoa suodattaaksesi mediaa synkronoinnin aikana vaihtoehtoisten kriteerien perusteella. Kokeile tätä vain, jos sovelluksessa on ongelmia kaikkien albumien tunnistamisessa.", "advanced_settings_enable_alternate_media_filter_subtitle": "Käytä tätä vaihtoehtoa suodattaaksesi mediaa synkronoinnin aikana vaihtoehtoisten kriteerien perusteella. Kokeile tätä vain, jos sovelluksessa on ongelmia kaikkien albumien tunnistamisessa.",
"advanced_settings_enable_alternate_media_filter_title": "[KOKEELLINEN] Käytä vaihtoehtoisen laitteen albumin synkronointisuodatinta", "advanced_settings_enable_alternate_media_filter_title": "[KOKEELLINEN] Käytä vaihtoehtoisen laitteen albumin synkronointisuodatinta",
"advanced_settings_log_level_title": "Kirjaustaso: {level}", "advanced_settings_log_level_title": "Kirjaustaso: {level}",
@@ -421,9 +403,6 @@
"album_with_link_access": "Anna kenen tahansa nähdä linkin kautta tämän albumin valokuvat ja henkilöt.", "album_with_link_access": "Anna kenen tahansa nähdä linkin kautta tämän albumin valokuvat ja henkilöt.",
"albums": "Albumit", "albums": "Albumit",
"albums_count": "{count, plural, one {{count, number} albumi} other {{count, number} albumia}}", "albums_count": "{count, plural, one {{count, number} albumi} other {{count, number} albumia}}",
"albums_default_sort_order": "Albumin oletuslajittelujärjestys",
"albums_default_sort_order_description": "Kohteiden ensisijainen lajittelujärjestys uusia albumeja luotaessa.",
"albums_feature_description": "Kokoelma kohteita, jotka voidaan jakaa muille käyttäjille.",
"all": "Kaikki", "all": "Kaikki",
"all_albums": "Kaikki albumit", "all_albums": "Kaikki albumit",
"all_people": "Kaikki henkilöt", "all_people": "Kaikki henkilöt",
@@ -444,7 +423,6 @@
"app_settings": "Sovellusasetukset", "app_settings": "Sovellusasetukset",
"appears_in": "Esiintyy albumeissa", "appears_in": "Esiintyy albumeissa",
"archive": "Arkisto", "archive": "Arkisto",
"archive_action_prompt": "{count} lisätty arkistoon",
"archive_or_unarchive_photo": "Arkistoi kuva tai palauta arkistosta", "archive_or_unarchive_photo": "Arkistoi kuva tai palauta arkistosta",
"archive_page_no_archived_assets": "Arkistoituja kohteita ei löytynyt", "archive_page_no_archived_assets": "Arkistoituja kohteita ei löytynyt",
"archive_page_title": "Arkisto ({count})", "archive_page_title": "Arkisto ({count})",
@@ -482,12 +460,10 @@
"assets": "Kohteet", "assets": "Kohteet",
"assets_added_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}}", "assets_added_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}}",
"assets_added_to_album_count": "Albumiin lisätty {count, plural, one {# kohde} other {# kohdetta}}", "assets_added_to_album_count": "Albumiin lisätty {count, plural, one {# kohde} other {# kohdetta}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Kohdetta} other {Kohdetta}} ei voida lisätä albumiin", "assets_added_to_name_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}} {hasName, select, true {<b>{name}</b>} other {uuteen albumiin}}",
"assets_count": "{count, plural, one {# media} other {# mediaa}}", "assets_count": "{count, plural, one {# media} other {# mediaa}}",
"assets_deleted_permanently": "{count} kohdetta poistettu pysyvästi", "assets_deleted_permanently": "{count} kohdetta poistettu pysyvästi",
"assets_deleted_permanently_from_server": "{count} objektia poistettu pysyvästi Immich-palvelimelta", "assets_deleted_permanently_from_server": "{count} objektia poistettu pysyvästi Immich-palvelimelta",
"assets_downloaded_failed": "{count, plural, one {Ladattu # tiedosto - {error} tiedosto epäonnistui} other {ladattu # tiedostoa - {error} tiedostot epäonnistuivat}}",
"assets_downloaded_successfully": "{count, plural, one {Ladattu # tiedosto onnistuneesti} other {Ladattu # tiedostoa onnistuneesti}}",
"assets_moved_to_trash_count": "Siirretty {count, plural, one {# media} other {# mediaa}} roskakoriin", "assets_moved_to_trash_count": "Siirretty {count, plural, one {# media} other {# mediaa}} roskakoriin",
"assets_permanently_deleted_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi", "assets_permanently_deleted_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
"assets_removed_count": "{count, plural, one {# media} other {# mediaa}} poistettu", "assets_removed_count": "{count, plural, one {# media} other {# mediaa}} poistettu",
@@ -502,12 +478,10 @@
"authorized_devices": "Valtuutetut laitteet", "authorized_devices": "Valtuutetut laitteet",
"automatic_endpoint_switching_subtitle": "Yhdistä paikallisesti nimetyn Wi-Fi-yhteyden kautta, kun se on saatavilla, ja käytä vaihtoehtoisia yhteyksiä muualla", "automatic_endpoint_switching_subtitle": "Yhdistä paikallisesti nimetyn Wi-Fi-yhteyden kautta, kun se on saatavilla, ja käytä vaihtoehtoisia yhteyksiä muualla",
"automatic_endpoint_switching_title": "Automaattinen URL-osoitteen vaihto", "automatic_endpoint_switching_title": "Automaattinen URL-osoitteen vaihto",
"autoplay_slideshow": "Toista diaesitys automaattisesti",
"back": "Takaisin", "back": "Takaisin",
"back_close_deselect": "Palaa, sulje tai poista valinnat", "back_close_deselect": "Palaa, sulje tai poista valinnat",
"background_location_permission": "Taustasijainnin käyttöoikeus", "background_location_permission": "Taustasijainnin käyttöoikeus",
"background_location_permission_content": "Jotta sovellus voi vaihtaa verkkoa taustalla toimiessaan, Immichillä on *aina* oltava pääsy tarkkaan sijaintiin, jotta se voi lukea Wi-Fi-verkon nimen", "background_location_permission_content": "Jotta sovellus voi vaihtaa verkkoa taustalla toimiessaan, Immichillä on *aina* oltava pääsy tarkkaan sijaintiin, jotta se voi lukea Wi-Fi-verkon nimen",
"backup": "Varmuuskopiointi",
"backup_album_selection_page_albums_device": "Laitteen albumit ({count})", "backup_album_selection_page_albums_device": "Laitteen albumit ({count})",
"backup_album_selection_page_albums_tap": "Napauta sisällyttääksesi, kaksoisnapauta jättääksesi pois", "backup_album_selection_page_albums_tap": "Napauta sisällyttääksesi, kaksoisnapauta jättääksesi pois",
"backup_album_selection_page_assets_scatter": "Kohteet voivat olla hajaantuneina useisiin albumeihin. Albumeita voidaan sisällyttää varmuuskopiointiin tai jättää siitä pois.", "backup_album_selection_page_assets_scatter": "Kohteet voivat olla hajaantuneina useisiin albumeihin. Albumeita voidaan sisällyttää varmuuskopiointiin tai jättää siitä pois.",
@@ -608,8 +582,7 @@
"cannot_merge_people": "Ihmisiä ei voitu yhdistää", "cannot_merge_people": "Ihmisiä ei voitu yhdistää",
"cannot_undo_this_action": "Et voi perua tätä toimintoa!", "cannot_undo_this_action": "Et voi perua tätä toimintoa!",
"cannot_update_the_description": "Kuvausta ei voi päivittää", "cannot_update_the_description": "Kuvausta ei voi päivittää",
"cast": "Suoratoisto", "cast": "Lähettää",
"cast_description": "Määritä saatavilla olevat suoratoistopalvelut",
"change_date": "Vaihda päiväys", "change_date": "Vaihda päiväys",
"change_description": "Muuta kuvausta", "change_description": "Muuta kuvausta",
"change_display_order": "Muuta näyttöjärjestystä", "change_display_order": "Muuta näyttöjärjestystä",
@@ -668,7 +641,6 @@
"confirm_password": "Vahvista salasana", "confirm_password": "Vahvista salasana",
"confirm_tag_face": "Haluatko merkitä nämä kasvot nimellä {name}?", "confirm_tag_face": "Haluatko merkitä nämä kasvot nimellä {name}?",
"confirm_tag_face_unnamed": "Merkitäänkö nämä kasvot?", "confirm_tag_face_unnamed": "Merkitäänkö nämä kasvot?",
"connected_device": "Yhdistetty laite",
"connected_to": "Yhdistetty", "connected_to": "Yhdistetty",
"contain": "Mahduta", "contain": "Mahduta",
"context": "Konteksti", "context": "Konteksti",
@@ -721,7 +693,6 @@
"daily_title_text_date": "E, dd MMM", "daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy", "daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Tumma", "dark": "Tumma",
"dark_theme": "Vaihda tumma teema",
"date_after": "Päivämäärän jälkeen", "date_after": "Päivämäärän jälkeen",
"date_and_time": "Päivämäärä ja aika", "date_and_time": "Päivämäärä ja aika",
"date_before": "Päivä ennen", "date_before": "Päivä ennen",
@@ -737,7 +708,6 @@
"default_locale": "Oletuskieliasetus", "default_locale": "Oletuskieliasetus",
"default_locale_description": "Muotoile päivämäärät ja numerot selaimesi kielen mukaan", "default_locale_description": "Muotoile päivämäärät ja numerot selaimesi kielen mukaan",
"delete": "Poista", "delete": "Poista",
"delete_action_prompt": "{count} poistettu pysyvästi",
"delete_album": "Poista albumi", "delete_album": "Poista albumi",
"delete_api_key_prompt": "Haluatko varmasti poistaa tämän API-avaimen?", "delete_api_key_prompt": "Haluatko varmasti poistaa tämän API-avaimen?",
"delete_dialog_alert": "Nämä kohteet poistetaan pysyvästi Immich:stä ja laitteeltasi", "delete_dialog_alert": "Nämä kohteet poistetaan pysyvästi Immich:stä ja laitteeltasi",
@@ -770,13 +740,12 @@
"disallow_edits": "Älä salli muokkauksia", "disallow_edits": "Älä salli muokkauksia",
"discord": "Discord", "discord": "Discord",
"discover": "Tutki", "discover": "Tutki",
"discovered_devices": "Löydetyt laitteet",
"dismiss_all_errors": "Sivuuta kaikki virheet", "dismiss_all_errors": "Sivuuta kaikki virheet",
"dismiss_error": "Sivuuta virhe", "dismiss_error": "Sivuuta virhe",
"display_options": "Näyttöasetukset", "display_options": "Näyttöasetukset",
"display_order": "Näyttöjärjestys", "display_order": "Näyttöjärjestys",
"display_original_photos": "Näytä alkuperäiset kuvat", "display_original_photos": "Näytä alkuperäiset kuvat",
"display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva esikatselukuvan sijasta, kun alkuperäinen kuva on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.", "display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva peukalokuvan sijasta kun alkuperäinen aineisto on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.",
"do_not_show_again": "Älä näytä tätä enää", "do_not_show_again": "Älä näytä tätä enää",
"documentation": "Dokumentaatio", "documentation": "Dokumentaatio",
"done": "Valmis", "done": "Valmis",
@@ -818,7 +787,6 @@
"edit_key": "Muokkaa avainta", "edit_key": "Muokkaa avainta",
"edit_link": "Muokkaa linkkiä", "edit_link": "Muokkaa linkkiä",
"edit_location": "Muokkaa sijaintia", "edit_location": "Muokkaa sijaintia",
"edit_location_action_prompt": "{count} sijaintia muokattu",
"edit_location_dialog_title": "Sijainti", "edit_location_dialog_title": "Sijainti",
"edit_name": "Muokkaa nimeä", "edit_name": "Muokkaa nimeä",
"edit_people": "Muokkaa henkilöitä", "edit_people": "Muokkaa henkilöitä",
@@ -1004,7 +972,6 @@
"failed_to_load_assets": "Kohteiden lataus epäonnistui", "failed_to_load_assets": "Kohteiden lataus epäonnistui",
"failed_to_load_folder": "Kansion lataaminen epäonnistui", "failed_to_load_folder": "Kansion lataaminen epäonnistui",
"favorite": "Suosikki", "favorite": "Suosikki",
"favorite_action_prompt": "{count} lisätty suosikkeihin",
"favorite_or_unfavorite_photo": "Suosikki- tai ei-suosikkikuva", "favorite_or_unfavorite_photo": "Suosikki- tai ei-suosikkikuva",
"favorites": "Suosikit", "favorites": "Suosikit",
"favorites_page_no_favorites": "Suosikkikohteita ei löytynyt", "favorites_page_no_favorites": "Suosikkikohteita ei löytynyt",
@@ -1119,8 +1086,6 @@
"ios_debug_info_last_sync_at": "Viimeisin synkronisointi {dateTime}", "ios_debug_info_last_sync_at": "Viimeisin synkronisointi {dateTime}",
"ios_debug_info_no_processes_queued": "Ei taustaprosesseja jonossa", "ios_debug_info_no_processes_queued": "Ei taustaprosesseja jonossa",
"ios_debug_info_no_sync_yet": "Taustasynkronisointia ei ole suoritettu vielä", "ios_debug_info_no_sync_yet": "Taustasynkronisointia ei ole suoritettu vielä",
"ios_debug_info_processes_queued": "{count, plural, one {{count} taustaprosessi jonossa} other {{count} taustaprosessia jonossa}}",
"ios_debug_info_processing_ran_at": "Prosessi valmistui {dateTime}",
"items_count": "{count, plural, one {# kpl} other {# kpl}}", "items_count": "{count, plural, one {# kpl} other {# kpl}}",
"jobs": "Taustatehtävät", "jobs": "Taustatehtävät",
"keep": "Säilytä", "keep": "Säilytä",
@@ -1129,9 +1094,6 @@
"kept_this_deleted_others": "Tämä kohde säilytettiin. {count, plural, one {# asset} other {# assets}} poistettiin", "kept_this_deleted_others": "Tämä kohde säilytettiin. {count, plural, one {# asset} other {# assets}} poistettiin",
"keyboard_shortcuts": "Pikanäppäimet", "keyboard_shortcuts": "Pikanäppäimet",
"language": "Kieli", "language": "Kieli",
"language_no_results_subtitle": "Yritä säätää hakuehtoja",
"language_no_results_title": "Kieliä ei löydetty",
"language_search_hint": "Etsi kieliä...",
"language_setting_description": "Valitse suosimasi kieli", "language_setting_description": "Valitse suosimasi kieli",
"last_seen": "Viimeksi nähty", "last_seen": "Viimeksi nähty",
"latest_version": "Viimeisin versio", "latest_version": "Viimeisin versio",
@@ -1151,12 +1113,12 @@
"light": "Vaalea", "light": "Vaalea",
"like_deleted": "Tykkäys poistettu", "like_deleted": "Tykkäys poistettu",
"link_motion_video": "Linkitä liikevideo", "link_motion_video": "Linkitä liikevideo",
"link_options": "Linkin asetukset",
"link_to_oauth": "Linkki OAuth", "link_to_oauth": "Linkki OAuth",
"linked_oauth_account": "Linkitetty OAuth-tili", "linked_oauth_account": "Linkitetty OAuth-tili",
"list": "Lista", "list": "Lista",
"loading": "Ladataan", "loading": "Ladataan",
"loading_search_results_failed": "Hakutulosten lataaminen epäonnistui", "loading_search_results_failed": "Hakutulosten lataaminen epäonnistui",
"local_asset_cast_failed": "Kohdetta, joka ei ole ladattuna palvelimelle, ei voida striimata",
"local_network": "Lähiverkko", "local_network": "Lähiverkko",
"local_network_sheet_info": "Sovellus muodostaa yhteyden palvelimeen tämän URL-osoitteen kautta, kun käytetään määritettyä Wi-Fi-verkkoa", "local_network_sheet_info": "Sovellus muodostaa yhteyden palvelimeen tämän URL-osoitteen kautta, kun käytetään määritettyä Wi-Fi-verkkoa",
"location_permission": "Sijainnin käyttöoikeus", "location_permission": "Sijainnin käyttöoikeus",
@@ -1170,7 +1132,6 @@
"locked_folder": "Lukittu kansio", "locked_folder": "Lukittu kansio",
"log_out": "Kirjaudu ulos", "log_out": "Kirjaudu ulos",
"log_out_all_devices": "Kirjaudu ulos kaikilta laitteilta", "log_out_all_devices": "Kirjaudu ulos kaikilta laitteilta",
"logged_in_as": "Kirjautunut käyttäjänä {user}",
"logged_out_all_devices": "Kaikki laitteet kirjattu ulos", "logged_out_all_devices": "Kaikki laitteet kirjattu ulos",
"logged_out_device": "Laite kirjattu ulos", "logged_out_device": "Laite kirjattu ulos",
"login": "Kirjaudu", "login": "Kirjaudu",
@@ -1213,6 +1174,7 @@
"manage_your_devices": "Hallitse sisäänkirjautuneita laitteitasi", "manage_your_devices": "Hallitse sisäänkirjautuneita laitteitasi",
"manage_your_oauth_connection": "Hallitse OAuth-yhteyttäsi", "manage_your_oauth_connection": "Hallitse OAuth-yhteyttäsi",
"map": "Kartta", "map": "Kartta",
"map_assets_in_bound": "{count} kuva",
"map_assets_in_bounds": "{count} kuvaa", "map_assets_in_bounds": "{count} kuvaa",
"map_cannot_get_user_location": "Käyttäjän sijaintia ei voitu määrittää", "map_cannot_get_user_location": "Käyttäjän sijaintia ei voitu määrittää",
"map_location_dialog_yes": "Kyllä", "map_location_dialog_yes": "Kyllä",
@@ -1258,14 +1220,13 @@
"merged_people_count": "{count, plural, one {# Henkilö} other {# henkilöä}} yhdistetty", "merged_people_count": "{count, plural, one {# Henkilö} other {# henkilöä}} yhdistetty",
"minimize": "PIenennä", "minimize": "PIenennä",
"minute": "Minuutti", "minute": "Minuutti",
"missing": "Puuttuvat", "missing": "Puuttuu",
"model": "Malli", "model": "Malli",
"month": "Kuukauden mukaan", "month": "Kuukauden mukaan",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM y",
"more": "Enemmän", "more": "Enemmän",
"move": "Siirrä", "move": "Siirrä",
"move_off_locked_folder": "Siirrä pois lukitusta kansiosta", "move_off_locked_folder": "Siirrä pois lukitusta kansiosta",
"move_to_lock_folder_action_prompt": "{count} lisätty lukittuun kansioon",
"move_to_locked_folder": "Siirrä lukittuun kansioon", "move_to_locked_folder": "Siirrä lukittuun kansioon",
"move_to_locked_folder_confirmation": "Nämä kuvat ja videot poistetaan kaikista albumeista, ja ne ovat nähtävissä vain lukitussa kansiossa", "move_to_locked_folder_confirmation": "Nämä kuvat ja videot poistetaan kaikista albumeista, ja ne ovat nähtävissä vain lukitussa kansiossa",
"moved_to_archive": "Siirretty {count, plural, one {# kohde} other {# kohdetta}} arkistoon", "moved_to_archive": "Siirretty {count, plural, one {# kohde} other {# kohdetta}} arkistoon",
@@ -1298,7 +1259,6 @@
"no_archived_assets_message": "Arkistoi kuvia ja videoita piilottaaksesi ne kuvat näkymästä", "no_archived_assets_message": "Arkistoi kuvia ja videoita piilottaaksesi ne kuvat näkymästä",
"no_assets_message": "NAPAUTA LATAAKSESI ENSIMMÄISEN KUVASI", "no_assets_message": "NAPAUTA LATAAKSESI ENSIMMÄISEN KUVASI",
"no_assets_to_show": "Ei näytettäviä kohteita", "no_assets_to_show": "Ei näytettäviä kohteita",
"no_cast_devices_found": "Cast-laitteita ei löytynyt",
"no_duplicates_found": "Kaksoiskappaleita ei löytynyt.", "no_duplicates_found": "Kaksoiskappaleita ei löytynyt.",
"no_exif_info_available": "EXIF-tietoa ei saatavilla", "no_exif_info_available": "EXIF-tietoa ei saatavilla",
"no_explore_results_message": "Lataa lisää kuvia tutkiaksesi kokoelmaasi.", "no_explore_results_message": "Lataa lisää kuvia tutkiaksesi kokoelmaasi.",
@@ -1331,11 +1291,8 @@
"oldest_first": "Vanhin ensin", "oldest_first": "Vanhin ensin",
"on_this_device": "Laitteella", "on_this_device": "Laitteella",
"onboarding": "Käyttöönotto", "onboarding": "Käyttöönotto",
"onboarding_locale_description": "Valitse haluamasi kieli. Voit muuttaa kieliasetuksia myöhemmin asetuksista.", "onboarding_privacy_description": "Seuraavat (valinnaiset) ominaisuudet perustuvat ulkoisiin palveluihin, ja ne voidaan poistaa käytöstä milloin tahansa hallinta asetuksista.",
"onboarding_privacy_description": "Seuraavat (valinnaiset) ominaisuudet perustuvat ulkoisiin palveluihin ja ne voidaan milloin tahansa poistaa käytöstä asetuksista.",
"onboarding_server_welcome_description": "Määritellään seuraavaksi järjestelmäsi muutamalla yleisellä asetuksella.",
"onboarding_theme_description": "Valitse väriteema istunnollesi. Voit muuttaa tämän myöhemmin asetuksistasi.", "onboarding_theme_description": "Valitse väriteema istunnollesi. Voit muuttaa tämän myöhemmin asetuksistasi.",
"onboarding_user_welcome_description": "Aloitetaan!",
"onboarding_welcome_user": "Tervetuloa {user}", "onboarding_welcome_user": "Tervetuloa {user}",
"online": "Online", "online": "Online",
"only_favorites": "Vain suosikit", "only_favorites": "Vain suosikit",
@@ -1435,7 +1392,7 @@
"previous_or_next_photo": "Kuva seuraava/edellinen", "previous_or_next_photo": "Kuva seuraava/edellinen",
"previous_or_next_year": "Vuosi seuraava/edellinen", "previous_or_next_year": "Vuosi seuraava/edellinen",
"primary": "Ensisijainen", "primary": "Ensisijainen",
"privacy": "Tietosuoja", "privacy": "Yksityisyys",
"profile": "Profiili", "profile": "Profiili",
"profile_drawer_app_logs": "Lokit", "profile_drawer_app_logs": "Lokit",
"profile_drawer_client_out_of_date_major": "Sovelluksen mobiiliversio on vanhentunut. Päivitä viimeisimpään merkittävään versioon.", "profile_drawer_client_out_of_date_major": "Sovelluksen mobiiliversio on vanhentunut. Päivitä viimeisimpään merkittävään versioon.",
@@ -1515,15 +1472,12 @@
"remove_custom_date_range": "Poista aikaväliltä", "remove_custom_date_range": "Poista aikaväliltä",
"remove_deleted_assets": "Poista Offline-tiedostot", "remove_deleted_assets": "Poista Offline-tiedostot",
"remove_from_album": "Poista albumista", "remove_from_album": "Poista albumista",
"remove_from_album_action_prompt": "{count} poistettu albumista",
"remove_from_favorites": "Poista suosikeista", "remove_from_favorites": "Poista suosikeista",
"remove_from_lock_folder_action_prompt": "{count} poistettu lukitusta albumista",
"remove_from_locked_folder": "Poista lukitusta kansiosta", "remove_from_locked_folder": "Poista lukitusta kansiosta",
"remove_from_locked_folder_confirmation": "Haluatko varmasti siirtää nämä kuvat ja videot pois lukitusta kansiosta? Ne näkyvät sen jälkeen kirjastossasi.", "remove_from_locked_folder_confirmation": "Haluatko varmasti siirtää nämä kuvat ja videot pois lukitusta kansiosta? Ne näkyvät sen jälkeen kirjastossasi.",
"remove_from_shared_link": "Poista jakolinkistä", "remove_from_shared_link": "Poista jakolinkistä",
"remove_memory": "Tyhjennä muisti", "remove_memory": "Tyhjennä muisti",
"remove_photo_from_memory": "Poista kuva muistista", "remove_photo_from_memory": "Poista kuva muistista",
"remove_tag": "Poista tunniste",
"remove_url": "Poista URL", "remove_url": "Poista URL",
"remove_user": "Poista käyttäjä", "remove_user": "Poista käyttäjä",
"removed_api_key": "API-avain {name} poistettu", "removed_api_key": "API-avain {name} poistettu",
@@ -1630,7 +1584,6 @@
"select_album_cover": "Valitse albmin kansi", "select_album_cover": "Valitse albmin kansi",
"select_all": "Valitse kaikki", "select_all": "Valitse kaikki",
"select_all_duplicates": "Valitse kaikki kaksoiskappaleet", "select_all_duplicates": "Valitse kaikki kaksoiskappaleet",
"select_all_in": "Valitse kaikki {group}",
"select_avatar_color": "Valitse avatarin väri", "select_avatar_color": "Valitse avatarin väri",
"select_face": "Valitse kasvo", "select_face": "Valitse kasvo",
"select_featured_photo": "Valitse esittelykuva", "select_featured_photo": "Valitse esittelykuva",
@@ -1651,7 +1604,6 @@
"server_info_box_server_url": "Palvelimen URL-osoite", "server_info_box_server_url": "Palvelimen URL-osoite",
"server_offline": "Palvelin Offline-tilassa", "server_offline": "Palvelin Offline-tilassa",
"server_online": "Palvelin Online-tilassa", "server_online": "Palvelin Online-tilassa",
"server_privacy": "Palvelimen tietosuoja",
"server_stats": "Palvelimen tilastot", "server_stats": "Palvelimen tilastot",
"server_version": "Palvelimen versio", "server_version": "Palvelimen versio",
"set": "Aseta", "set": "Aseta",
@@ -1661,7 +1613,6 @@
"set_date_of_birth": "Aseta syntymäaika", "set_date_of_birth": "Aseta syntymäaika",
"set_profile_picture": "Aseta profiilikuva", "set_profile_picture": "Aseta profiilikuva",
"set_slideshow_to_fullscreen": "Näytä diaesitys koko ruudulla", "set_slideshow_to_fullscreen": "Näytä diaesitys koko ruudulla",
"set_stack_primary_asset": "Aseta pääkohteeksi",
"setting_image_viewer_help": "Kuvaa katseltaessa ensin ladataan pikkukuva, sitten keskilaatuinen pikkukuva (jos käytössä) ja lopuksi alkuperäinen (jos käytössä).", "setting_image_viewer_help": "Kuvaa katseltaessa ensin ladataan pikkukuva, sitten keskilaatuinen pikkukuva (jos käytössä) ja lopuksi alkuperäinen (jos käytössä).",
"setting_image_viewer_original_subtitle": "Ota käyttöön ladataksesi alkuperäinen täysitarkkuuksinen kuva (suuri!). Poista käytöstä vähentääksesi datan käyttöä (sekä verkossa että laitteen välimuistissa).", "setting_image_viewer_original_subtitle": "Ota käyttöön ladataksesi alkuperäinen täysitarkkuuksinen kuva (suuri!). Poista käytöstä vähentääksesi datan käyttöä (sekä verkossa että laitteen välimuistissa).",
"setting_image_viewer_original_title": "Lataa alkuperäinen kuva", "setting_image_viewer_original_title": "Lataa alkuperäinen kuva",
@@ -1799,7 +1750,6 @@
"start_date": "Alkupäivä", "start_date": "Alkupäivä",
"state": "Maakunta", "state": "Maakunta",
"status": "Tila", "status": "Tila",
"stop_casting": "Lopeta suoratoisto",
"stop_motion_photo": "Pysäytä liikkuva kuva", "stop_motion_photo": "Pysäytä liikkuva kuva",
"stop_photo_sharing": "Lopetetaanko kuvien jakaminen?", "stop_photo_sharing": "Lopetetaanko kuvien jakaminen?",
"stop_photo_sharing_description": "{partner} ei enää pääse kuviisi.", "stop_photo_sharing_description": "{partner} ei enää pääse kuviisi.",
@@ -1819,7 +1769,7 @@
"sync_albums": "Synkronoi albumit", "sync_albums": "Synkronoi albumit",
"sync_albums_manual_subtitle": "Synkronoi kaikki ladatut videot ja valokuvat valittuihin varmuuskopioalbumeihin", "sync_albums_manual_subtitle": "Synkronoi kaikki ladatut videot ja valokuvat valittuihin varmuuskopioalbumeihin",
"sync_upload_album_setting_subtitle": "Luo ja lataa valokuvasi ja videosi valittuihin albumeihin Immichissä", "sync_upload_album_setting_subtitle": "Luo ja lataa valokuvasi ja videosi valittuihin albumeihin Immichissä",
"tag": "Tunniste", "tag": "Lisää tunniste",
"tag_assets": "Lisää tunnisteita", "tag_assets": "Lisää tunnisteita",
"tag_created": "Luotu tunniste: {tag}", "tag_created": "Luotu tunniste: {tag}",
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan", "tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan",
@@ -1860,7 +1810,6 @@
"total": "Yhteensä", "total": "Yhteensä",
"total_usage": "Käyttö yhteensä", "total_usage": "Käyttö yhteensä",
"trash": "Roskakori", "trash": "Roskakori",
"trash_action_prompt": "{count} siirretty roskakoriin",
"trash_all": "Vie kaikki roskakoriin", "trash_all": "Vie kaikki roskakoriin",
"trash_count": "Roskakori {count, number}", "trash_count": "Roskakori {count, number}",
"trash_delete_asset": "Poista / vie roskakoriin", "trash_delete_asset": "Poista / vie roskakoriin",
@@ -1878,11 +1827,8 @@
"unable_to_change_pin_code": "PIN-koodin vaihtaminen epäonnistui", "unable_to_change_pin_code": "PIN-koodin vaihtaminen epäonnistui",
"unable_to_setup_pin_code": "PIN-koodin määrittäminen epäonnistui", "unable_to_setup_pin_code": "PIN-koodin määrittäminen epäonnistui",
"unarchive": "Palauta arkistosta", "unarchive": "Palauta arkistosta",
"unarchive_action_prompt": "{count} poistettu arkistosta",
"unarchived_count": "{count, plural, other {# poistettu arkistosta}}", "unarchived_count": "{count, plural, other {# poistettu arkistosta}}",
"undo": "Kumoa",
"unfavorite": "Poista suosikeista", "unfavorite": "Poista suosikeista",
"unfavorite_action_prompt": "{count} poistettu suosikeista",
"unhide_person": "Poista henkilö piilosta", "unhide_person": "Poista henkilö piilosta",
"unknown": "Tuntematon", "unknown": "Tuntematon",
"unknown_country": "Tuntematon maa", "unknown_country": "Tuntematon maa",
@@ -1898,10 +1844,8 @@
"unsaved_change": "Tallentamaton muutos", "unsaved_change": "Tallentamaton muutos",
"unselect_all": "Poista valinnat", "unselect_all": "Poista valinnat",
"unselect_all_duplicates": "Poista kaikkien kaksoiskappaleiden valinta", "unselect_all_duplicates": "Poista kaikkien kaksoiskappaleiden valinta",
"unselect_all_in": "Poista kaikki valinnat {group}",
"unstack": "Pura pino", "unstack": "Pura pino",
"unstacked_assets_count": "Poistettu pinosta {count, plural, one {# kohde} other {# kohdetta}}", "unstacked_assets_count": "Poistettu pinosta {count, plural, one {# kohde} other {# kohdetta}}",
"untagged": "Ilman tunnistetta",
"up_next": "Seuraavaksi", "up_next": "Seuraavaksi",
"updated_at": "Päivitetty", "updated_at": "Päivitetty",
"updated_password": "Salasana päivitetty", "updated_password": "Salasana päivitetty",
@@ -1917,7 +1861,7 @@
"upload_status_uploaded": "Ladattu", "upload_status_uploaded": "Ladattu",
"upload_success": "Lataus onnistui. Päivitä sivu jotta näet latauksesi.", "upload_success": "Lataus onnistui. Päivitä sivu jotta näet latauksesi.",
"upload_to_immich": "Lähetä Immichiin ({count})", "upload_to_immich": "Lähetä Immichiin ({count})",
"uploading": "Lähettää", "uploading": "Lähettään",
"url": "URL", "url": "URL",
"usage": "Käyttö", "usage": "Käyttö",
"use_biometric": "Käytä biometriikkaa", "use_biometric": "Käytä biometriikkaa",
@@ -1929,7 +1873,6 @@
"user_liked": "{user} tykkäsi {type, select, photo {kuvasta} video {videosta} asset {mediasta} other {tästä}}", "user_liked": "{user} tykkäsi {type, select, photo {kuvasta} video {videosta} asset {mediasta} other {tästä}}",
"user_pin_code_settings": "PIN-koodi", "user_pin_code_settings": "PIN-koodi",
"user_pin_code_settings_description": "Hallinnoi PIN-koodiasi", "user_pin_code_settings_description": "Hallinnoi PIN-koodiasi",
"user_privacy": "Käyttäjän tietosuoja",
"user_purchase_settings": "Osta", "user_purchase_settings": "Osta",
"user_purchase_settings_description": "Hallitse ostostasi", "user_purchase_settings_description": "Hallitse ostostasi",
"user_role_set": "Tee käyttäjästä {user} {role}", "user_role_set": "Tee käyttäjästä {user} {role}",

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