Merge branch 'main' into fix/memory-arrow-nav

This commit is contained in:
Yaros 2025-07-27 15:53:20 +02:00 committed by GitHub
commit a989070f8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1556 changed files with 92826 additions and 26357 deletions

View File

@ -4,6 +4,7 @@ services:
target: dev-container-mobile
environment:
- IMMICH_SERVER_URL=http://127.0.0.1:2283/
- IMMICH_MEDIA_LOCATION=/data
volumes: !override # bind mount host to /workspaces/immich
- ..:/workspaces/immich
- cli_node_modules:/workspaces/immich/cli/node_modules
@ -11,8 +12,8 @@ services:
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules
- server_node_modules:/workspaces/immich/server/node_modules
- web_node_modules:/workspaces/immich/web/node_modules
- ${UPLOAD_LOCATION}/photos:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION}/photos/upload:/workspaces/immich/server/upload/upload
- ${UPLOAD_LOCATION}/photos:/data
- ${UPLOAD_LOCATION}/photos/upload:/data/upload
- /etc/localtime:/etc/localtime:ro
database:

View File

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

View File

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

View File

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

6
.gitattributes vendored
View File

@ -12,6 +12,12 @@ mobile/lib/**/*.drift.dart linguist-generated=true
mobile/drift_schemas/main/drift_schema_*.json -diff -merge
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 linguist-generated=true

2
.github/.nvmrc vendored
View File

@ -1 +1 @@
22.16.0
22.17.1

4
.github/.prettierignore vendored Normal file
View File

@ -0,0 +1,4 @@
# 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": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
"bin": {

View File

@ -58,7 +58,7 @@ jobs:
contents: read
# 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' }}
runs-on: macos-14
runs-on: mich
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@ -66,24 +66,40 @@ jobs:
ref: ${{ inputs.ref || github.sha }}
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
with:
distribution: 'zulu'
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
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2.19.0
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
cache: true
- name: Create the Keystore
env:
KEY_JKS: ${{ secrets.KEY_JKS }}
working-directory: ./mobile
run: echo $KEY_JKS | base64 -d > android/key.jks
- name: Setup Android SDK
uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2
with:
packages: ''
- name: Get Packages
working-directory: ./mobile
@ -103,12 +119,30 @@ jobs:
ALIAS: ${{ secrets.ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
IS_MAIN: ${{ github.ref == 'refs/heads/main' }}
run: |
flutter build apk --release
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
if [[ $IS_MAIN == 'true' ]]; then
flutter build apk --release
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
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: release-apk-signed
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,6 +38,9 @@ jobs:
with:
node-version-file: './cli/.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Prepare SDK
run: npm ci --prefix ../open-api/typescript-sdk/
- name: Build SDK
@ -67,7 +70,7 @@ jobs:
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
- name: Login to GitHub Container Registry
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
@ -96,7 +99,7 @@ jobs:
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
- name: Build and push image
uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
with:
file: cli/Dockerfile
platforms: linux/amd64,linux/arm64

View File

@ -50,7 +50,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
with:
languages: ${{ matrix.language }}
# 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).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
# 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
@ -76,6 +76,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
with:
category: '/language:${{matrix.language}}'

View File

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

View File

@ -57,6 +57,8 @@ jobs:
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: './docs/.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Run npm install
run: npm ci

View File

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

13
.github/workflows/org-checks.yml vendored Normal file
View File

@ -0,0 +1,13 @@
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
steps:
- name: Require PR to have a changelog label
uses: mheap/github-action-required-labels@fb29a14a076b0f74099f6198f77750e8fc236016 # v5.5.0
uses: mheap/github-action-required-labels@8afbe8ae6ab7647d0c9f0cfa7c2f939650d22509 # v5.5.1
with:
mode: exactly
count: 1

View File

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

View File

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

View File

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

View File

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

View File

@ -52,6 +52,6 @@ jobs:
permissions: {}
if: always()
steps:
- uses: immich-app/devtools/actions/success-check@6b81b1572e466f7f48ba3c823159ce3f4a4d66a6 # success-check-action-0.0.3
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4
with:
needs: ${{ toJSON(needs) }}

1
.gitignore vendored
View File

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

View File

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

View File

@ -1 +1 @@
22.16.0
22.17.1

2
cli/bin/immich Executable file
View File

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

555
cli/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

@ -49,14 +49,14 @@ services:
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:fec42f399876eb6faf9e008570597741c87ff7662a54185593e74b09ce83d177
image: docker.io/valkey/valkey:8-bookworm@sha256:facc1d2c3462975c34e10fccb167bfa92b0e0dbd992fc282c29a61c3243afb11
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:5f6a838e4e44c8e0e019d0ebfe3ee8952b69afc2809b2c25f7b0119641978e91
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
@ -67,6 +67,7 @@ services:
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
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
volumes:

View File

@ -1 +1 @@
22.16.0
22.17.1

View File

@ -490,7 +490,7 @@ You can also scan the Postgres database file structure for errors:
<details>
<summary>Scan for file structure errors</summary>
```bash
docker exec -it immich_postgres pg_amcheck --username=postgres --heapallindexed --parent-check --rootdescend --progress --all --install-missing
docker exec -it immich_postgres pg_amcheck --username=<DB_USERNAME> --heapallindexed --parent-check --rootdescend --progress --all --install-missing
```
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>
```bash title='Backup'
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > "/path/to/backup/dump.sql.gz"
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
```
```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)">
```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=postgres))
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>))
```
```powershell title='Restore'
@ -150,12 +150,10 @@ 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.
- Stored in `UPLOAD_LOCATION/thumbs/<userID>`.
- **Encoded Assets:**
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
- **Postgres**
- 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.
- Stored in `DB_DATA_LOCATION`.
@ -201,7 +199,6 @@ When you turn off the storage template engine, it will leave the assets in `UPLO
- Temporarily located in `UPLOAD_LOCATION/upload/<userID>`.
- Transferred to `UPLOAD_LOCATION/library/<userID>` upon successful upload.
- **Postgres**
- 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.
- Stored in `DB_DATA_LOCATION`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -46,6 +46,12 @@ 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.
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" />
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,7 +20,6 @@ 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.
1. Create a new (Client) Application
1. The **Provider** type should be `OpenID Connect` or `OAuth2`
2. The **Client type** should be `Confidential`
3. The **Application** type should be `Web`
@ -29,7 +28,6 @@ Before enabling OAuth in Immich, a new client application needs to be configured
2. Configure Redirect URIs/Origins
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)
- `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
@ -37,21 +35,17 @@ 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:
Mobile
- `app.immich:///oauth-callback` (You **MUST** include this for iOS and Android mobile apps to work properly)
Localhost
- `http://localhost:2283/auth/login`
- `http://localhost:2283/user-settings`
Local IP
- `http://192.168.0.200:2283/auth/login`
- `http://192.168.0.200:2283/user-settings`
Hostname
- `https://immich.example.com/auth/login`
- `https://immich.example.com/user-settings`
@ -68,6 +62,7 @@ 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) |
| 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**¹** |
| 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**¹** |
| 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 |

View File

@ -2,16 +2,17 @@
The `immich-server` docker image comes preinstalled with an administrative CLI (`immich-admin`) that supports the following commands:
| Command | Description |
| ------------------------ | ------------------------------------- |
| `help` | Display help |
| `reset-admin-password` | Reset the password for the admin user |
| `disable-password-login` | Disable password login |
| `enable-password-login` | Enable password login |
| `enable-oauth-login` | Enable OAuth login |
| `disable-oauth-login` | Disable OAuth login |
| `list-users` | List Immich users |
| `version` | Print Immich version |
| Command | Description |
| ------------------------ | ------------------------------------------------------------- |
| `help` | Display help |
| `reset-admin-password` | Reset the password for the admin user |
| `disable-password-login` | Disable password login |
| `enable-password-login` | Enable password login |
| `enable-oauth-login` | Enable OAuth login |
| `disable-oauth-login` | Disable OAuth login |
| `list-users` | List Immich users |
| `version` | Print Immich version |
| `change-media-location` | Change database file paths to align with a new media location |
## How to run a command
@ -88,3 +89,24 @@ Print Immich Version
immich-admin version
v1.129.0
```
Change media location
```
immich-admin change-media-location
? Enter the previous value of IMMICH_MEDIA_LOCATION: /usr/src/app/upload
? Enter the new value of IMMICH_MEDIA_LOCATION: /data
Previous value: /usr/src/app/upload
Current value: /data
Changing database paths from "/usr/src/app/upload/*" to "/data/*"
? Do you want to proceed? [Y/n] y
Database file paths updated successfully! 🎉
You may now set IMMICH_MEDIA_LOCATION=/data and restart!
(please remember to update applicable volume mounts e.g. ${UPLOAD_LOCATION}:/data)
```

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.
[![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/)
Get started fast!
[![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.
:::important Required Configuration
:::important 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.
```bash
@ -88,6 +88,10 @@ source ~/.bashrc
### 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:
1. Open the cloned repository in VS Code
@ -199,13 +203,11 @@ To use your SSH key for commit signing, see the [GitHub guide on SSH commit sign
When the Dev Container starts, it automatically:
1. **Runs post-create script** (`container-server-post-create.sh`):
- Adjusts file permissions for the `node` user
- Installs dependencies: `npm install` in all packages
- Builds TypeScript SDK: `npm run build` in `open-api/typescript-sdk`
2. **Starts development servers** via VS Code tasks:
- `Immich API Server (Nest)` - API server with hot-reloading on port 2283
- `Immich Web Server (Vite)` - Web frontend with hot-reloading on port 3000
- Both servers watch for file changes and recompile automatically
@ -335,14 +337,12 @@ make install-all # Install all dependencies
The Dev Container is pre-configured for debugging:
1. **API Server Debugging**:
- Set breakpoints in VS Code
- Press `F5` or use "Run and Debug" panel
- Select "Attach to Server" configuration
- Debug port: 9231
2. **Worker Debugging**:
- Use "Attach to Workers" configuration
- Debug port: 9230
@ -428,7 +428,6 @@ While the Dev Container focuses on server and web development, you can connect m
```
2. **Configure mobile app**:
- Server URL: `http://YOUR_IP:2283/api`
- Ensure firewall allows port 2283

View File

@ -38,6 +38,19 @@ 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`.
:::
## 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
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.
You can enable this feature under [`Account Settings > Features > Folder View`](https://my.immich.app/user-settings?isOpen=feature+folders)
You can enable this feature under [`Account Settings > Features > Folders`](https://my.immich.app/user-settings?isOpen=feature+folders)
## Enable folder view

View File

@ -56,7 +56,7 @@ Internally, Immich uses the [glob](https://www.npmjs.com/package/glob) package t
### Automatic watching (EXPERIMENTAL)
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.
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.
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.
@ -112,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.
- Click on your avatar on the upper right corner
- Click on your avatar in the upper right corner
- Click on Administration -> External Libraries
- Click on Create an external library…
- Select which user owns the library, this can not be changed later
@ -159,9 +159,7 @@ 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.
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.
You can enable this feature under [`Account Settings > Features > Folders`](https://my.immich.app/user-settings?isOpen=feature+folders)
<img src={require('./img/folder-view-1.webp').default} width="100%" title='Folder-view' />
@ -171,7 +169,7 @@ The UI is currently only available for the web; mobile will come in a subsequent
Only an admin can do this.
:::
You can define a custom interval for the trigger external library rescan under Administration -> Settings -> Library.
You can define a custom interval for the trigger external library rescan under Administration -> Settings -> External 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/).
<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.
To overcome this limitation, the files must be removed from the blacklist by
To overcome this limitation, the files must be removed from the ignore list by
App settings -> Advanced -> Duplicate Assets -> Clear
:::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 black 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 ignore 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: | |
| `HEIF` | `.heif` | :white_check_mark: | |
| `JPEG 2000` | `.jp2` | :white_check_mark: | |
| `JPEG` | `.webp` `.jpg` `.jpe` `.insp` | :white_check_mark: | |
| `JPEG` | `.jpeg` `.jpg` `.jpe` `.insp` | :white_check_mark: | |
| `JPEG XL` | `.jxl` | :white_check_mark: | |
| `PNG` | `.png` | :white_check_mark: | |
| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop |

View File

@ -17,22 +17,22 @@ The `"originalFileName"` column is the name of the file at time of upload, inclu
:::
```sql title="Find by original filename"
SELECT * FROM "assets" WHERE "originalFileName" = 'PXL_20230903_232542848.jpg';
SELECT * FROM "assets" WHERE "originalFileName" LIKE 'PXL_%'; -- all files starting with PXL_
SELECT * FROM "assets" WHERE "originalFileName" LIKE '%_2023_%'; -- all files with _2023_ in the middle
SELECT * FROM "asset" WHERE "originalFileName" = 'PXL_20230903_232542848.jpg';
SELECT * FROM "asset" WHERE "originalFileName" LIKE 'PXL_%'; -- all files starting with PXL_
SELECT * FROM "asset" WHERE "originalFileName" LIKE '%_2023_%'; -- all files with _2023_ in the middle
```
```sql title="Find by path"
SELECT * FROM "assets" WHERE "originalPath" = 'upload/library/admin/2023/2023-09-03/PXL_2023.jpg';
SELECT * FROM "assets" WHERE "originalPath" LIKE 'upload/library/admin/2023/%';
SELECT * FROM "asset" WHERE "originalPath" = 'upload/library/admin/2023/2023-09-03/PXL_2023.jpg';
SELECT * FROM "asset" WHERE "originalPath" LIKE 'upload/library/admin/2023/%';
```
```sql title="Find by ID"
SELECT * FROM "assets" WHERE "id" = '9f94e60f-65b6-47b7-ae44-a4df7b57f0e9';
SELECT * FROM "asset" WHERE "id" = '9f94e60f-65b6-47b7-ae44-a4df7b57f0e9';
```
```sql title="Find by partial ID"
SELECT * FROM "assets" WHERE "id"::text LIKE '%ab431d3a%';
SELECT * FROM "asset" WHERE "id"::text LIKE '%ab431d3a%';
```
:::note
@ -40,60 +40,60 @@ You can calculate the checksum for a particular file by using the command `sha1s
:::
```sql title="Find by checksum (SHA-1)"
SELECT encode("checksum", 'hex') FROM "assets";
SELECT * FROM "assets" WHERE "checksum" = decode('69de19c87658c4c15d9cacb9967b8e033bf74dd1', 'hex');
SELECT * FROM "assets" WHERE "checksum" = '\x69de19c87658c4c15d9cacb9967b8e033bf74dd1'; -- alternate notation
SELECT encode("checksum", 'hex') FROM "asset";
SELECT * FROM "asset" WHERE "checksum" = decode('69de19c87658c4c15d9cacb9967b8e033bf74dd1', 'hex');
SELECT * FROM "asset" WHERE "checksum" = '\x69de19c87658c4c15d9cacb9967b8e033bf74dd1'; -- alternate notation
```
```sql title="Find duplicate assets with identical checksum (SHA-1) (excluding trashed files)"
SELECT T1."checksum", array_agg(T2."id") ids FROM "assets" T1
INNER JOIN "assets" T2 ON T1."checksum" = T2."checksum" AND T1."id" != T2."id" AND T2."deletedAt" IS NULL
SELECT T1."checksum", array_agg(T2."id") ids FROM "asset" T1
INNER JOIN "asset" 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";
```
```sql title="Live photos"
SELECT * FROM "assets" WHERE "livePhotoVideoId" IS NOT NULL;
SELECT * FROM "asset" WHERE "livePhotoVideoId" IS NOT NULL;
```
```sql title="By description"
SELECT "assets".*, "exif"."description" FROM "exif"
JOIN "assets" ON "assets"."id" = "exif"."assetId"
WHERE TRIM("exif"."description") <> ''; -- all files with a description
SELECT "assets".*, "exif"."description" FROM "exif"
JOIN "assets" ON "assets"."id" = "exif"."assetId"
WHERE "exif"."description" ILIKE '%string to match%'; -- search by string
SELECT "asset".*, "asset_exif"."description" FROM "asset_exif"
JOIN "asset" ON "asset"."id" = "asset_exif"."assetId"
WHERE TRIM("asset_exif"."description") <> ''; -- all files with a description
SELECT "asset".*, "asset_exif"."description" FROM "asset_exif"
JOIN "asset" ON "asset"."id" = "asset_exif"."assetId"
WHERE "asset_exif"."description" ILIKE '%string to match%'; -- search by string
```
```sql title="Without metadata"
SELECT "assets".* FROM "exif"
LEFT JOIN "assets" ON "assets"."id" = "exif"."assetId"
WHERE "exif"."assetId" IS NULL;
SELECT "asset".* FROM "asset_exif"
LEFT JOIN "asset" ON "asset"."id" = "asset_exif"."assetId"
WHERE "asset_exif"."assetId" IS NULL;
```
```sql title="size < 100,000 bytes, smallest to largest"
SELECT * FROM "assets"
JOIN "exif" ON "assets"."id" = "exif"."assetId"
WHERE "exif"."fileSizeInByte" < 100000
ORDER BY "exif"."fileSizeInByte" ASC;
SELECT * FROM "asset"
JOIN "asset_exif" ON "asset"."id" = "asset_exif"."assetId"
WHERE "asset_exif"."fileSizeInByte" < 100000
ORDER BY "asset_exif"."fileSizeInByte" ASC;
```
```sql title="Without thumbnails"
SELECT * FROM "assets" WHERE "assets"."previewPath" IS NULL OR "assets"."thumbnailPath" IS NULL;
SELECT * FROM "asset" WHERE "asset"."previewPath" IS NULL OR "asset"."thumbnailPath" IS NULL;
```
```sql title="By type"
SELECT * FROM "assets" WHERE "assets"."type" = 'VIDEO';
SELECT * FROM "assets" WHERE "assets"."type" = 'IMAGE';
SELECT * FROM "asset" WHERE "asset"."type" = 'VIDEO';
SELECT * FROM "asset" WHERE "asset"."type" = 'IMAGE';
```
```sql title="Count by type"
SELECT "assets"."type", COUNT(*) FROM "assets" GROUP BY "assets"."type";
SELECT "asset"."type", COUNT(1) FROM "asset" GROUP BY "asset"."type";
```
```sql title="Count by type (per user)"
SELECT "users"."email", "assets"."type", COUNT(*) FROM "assets"
JOIN "users" ON "assets"."ownerId" = "users"."id"
GROUP BY "assets"."type", "users"."email" ORDER BY "users"."email";
SELECT "user"."email", "asset"."type", COUNT(1) FROM "asset"
JOIN "user" ON "asset"."ownerId" = "user"."id"
GROUP BY "asset"."type", "user"."email" ORDER BY "user"."email";
```
```sql title="Failed file movements"
@ -103,11 +103,11 @@ SELECT * FROM "move_history";
## Users
```sql title="List all users"
SELECT * FROM "users";
SELECT * FROM "user";
```
```sql title="Get owner info from asset ID"
SELECT "users".* FROM "users" JOIN "assets" ON "users"."id" = "assets"."ownerId" WHERE "assets"."id" = 'fa310b01-2f26-4b7a-9042-d578226e021f';
SELECT "user".* FROM "user" JOIN "asset" ON "user"."id" = "asset"."ownerId" WHERE "asset"."id" = 'fa310b01-2f26-4b7a-9042-d578226e021f';
```
## System Config

View File

@ -41,7 +41,7 @@ In the Immich web UI:
- Click Add path
<img src={require('./img/add-path-button.webp').default} width="50%" title="Add Path button" />
- Enter **/usr/src/app/external** as the path and click Add
- Enter **/home/user/photos1** as the path and click Add
<img src={require('./img/add-path-field.webp').default} width="50%" title="Add Path field" />
- Save the new path

View File

@ -52,9 +52,9 @@ REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
### Local
# Backup Immich database
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$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:
# docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz
# 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
### Append to local Borg repository
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 |
| `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_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**<sup>\*2</sup>⚠️ | `./upload`<sup>\*3</sup> | server | api, microservices |
| `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**<sup>\*2</sup>⚠️ | `/usr/src/app/upload` | 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 | |
| `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | |
@ -49,9 +49,6 @@ 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.
\*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
| Variable | Description | Default | Containers |
@ -72,22 +69,25 @@ Information on the current workers can be found [here](/docs/administration/jobs
## Database
| Variable | Description | Default | Containers |
| :---------------------------------- | :--------------------------------------------------------------------------- | :--------: | :----------------------------- |
| `DB_URL` | Database URL | | server |
| `DB_HOSTNAME` | Database host | `database` | server |
| `DB_PORT` | Database port | `5432` | server |
| `DB_USERNAME` | Database user | `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_SSL_MODE` | Database SSL mode | | 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 |
| Variable | Description | Default | Containers |
| :---------------------------------- | :------------------------------------------------------------------------------------- | :--------: | :----------------------------- |
| `DB_URL` | Database URL | | server |
| `DB_HOSTNAME` | Database host | `database` | server |
| `DB_PORT` | Database port | `5432` | server |
| `DB_USERNAME` | Database user | `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_SSL_MODE` | Database SSL mode | | 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_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`.
\*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
All `DB_` variables must be provided to all Immich workers, including `api` and `microservices`.

View File

@ -39,8 +39,8 @@ alt="Dot Env Example"
/>
- Change the default `DB_PASSWORD`, and add custom database connection information if necessary.
- Change `DB_DATA_LOCATION` to a folder where the database will be saved to disk.
- Change `UPLOAD_LOCATION` to a folder where media (uploaded and generated) will be stored.
- Change `DB_DATA_LOCATION` to a folder (absolute path) where the database will be saved to disk.
- Change `UPLOAD_LOCATION` to a folder (absolute path) where media (uploaded and generated) will be stored.
11. Click on "**Deploy the stack**".

View File

@ -75,7 +75,6 @@ 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**"
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:
- `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.

1533
docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -58,6 +58,12 @@ const guides: CommunityGuidesProps[] = [
description: 'Access Immich with an end-to-end encrypted connection.',
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 {

View File

@ -85,6 +85,7 @@ import React from 'react';
import { Item, Timeline } from '../components/timeline';
const releases = {
'v1.135.0': new Date(2025, 5, 18),
'v1.133.0': new Date(2025, 4, 21),
'v1.130.0': new Date(2025, 2, 25),
'v1.127.0': new Date(2025, 1, 26),
@ -196,14 +197,6 @@ const roadmap: Item[] = [
description: 'Automate tasks with workflows',
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,
icon: mdiImageEdit,
@ -239,12 +232,26 @@ const roadmap: 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({
icon: mdiCast,
iconColor: 'aqua',
title: 'Google Cast (web)',
title: 'Google Cast (web and mobile)',
description: 'Cast assets to Google Cast/Chromecast compatible devices',
release: 'v1.133.0',
release: 'v1.135.0',
}),
withRelease({
icon: mdiLockOutline,

View File

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

View File

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

View File

@ -1 +1 @@
22.16.0
22.17.1

View File

@ -3,7 +3,6 @@ name: immich-e2e
services:
immich-server:
container_name: immich-e2e-server
command: ['./start.sh']
image: immich-server:latest
build:
context: ../
@ -23,6 +22,7 @@ services:
- IMMICH_ENV=testing
- IMMICH_PORT=2285
- IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true
- IMMICH_MEDIA_LOCATION=/data
volumes:
- ./test-assets:/test-assets
extra_hosts:
@ -36,10 +36,10 @@ services:
- 2285:2285
redis:
image: redis:6.2-alpine@sha256:3211c33a618c457e5d241922c975dbc4f446d0bdb2dc75694f5573ef8e2d01fa
image: redis:6.2-alpine@sha256:7fe72c486b910f6b1a9769c937dad5d63648ddee82e056f47417542dd40825bb
database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:9c704fb49ce27549df00f1b096cc93f8b0c959ef087507704d74954808f78a82
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:3aef84a0a4fabbda17ef115c3019ba0c914ec73e9f6e59203674322d858b8eea
command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf
environment:
POSTGRES_PASSWORD: postgres

1288
e2e/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "1.135.3",
"version": "1.136.0",
"description": "",
"main": "index.js",
"type": "module",
@ -24,8 +24,9 @@
"@immich/cli": "file:../cli",
"@immich/sdk": "file:../open-api/typescript-sdk",
"@playwright/test": "^1.44.1",
"@socket.io/component-emitter": "^3.1.2",
"@types/luxon": "^3.4.2",
"@types/node": "^22.15.31",
"@types/node": "^22.16.4",
"@types/oidc-provider": "^9.0.0",
"@types/pg": "^8.15.1",
"@types/pngjs": "^6.0.4",
@ -44,6 +45,7 @@
"pngjs": "^7.0.0",
"prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0",
"sharp": "^0.34.0",
"socket.io-client": "^4.7.4",
"supertest": "^7.0.0",
"typescript": "^5.3.3",
@ -52,6 +54,6 @@
"vitest": "^3.0.0"
},
"volta": {
"node": "22.16.0"
"node": "22.17.1"
}
}

View File

@ -7,6 +7,7 @@ import {
ReactionType,
createActivity as create,
createAlbum,
removeAssetFromAlbum,
} from '@immich/sdk';
import { createUserDto, uuidDto } from 'src/fixtures';
import { errorDto } from 'src/responses';
@ -342,5 +343,36 @@ describe('/activities', () => {
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] });
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest('Not found or no album.addAsset access'));
expect(body).toEqual(errorDto.badRequest('Not found or no albumAsset.create access'));
});
it('should add duplicate assets only once', async () => {
@ -599,7 +599,7 @@ describe('/albums', () => {
.send({ ids: [user1Asset1.id] });
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest('Not found or no album.removeAsset access'));
expect(body).toEqual(errorDto.badRequest('Not found or no albumAsset.delete access'));
});
it('should remove duplicate assets only once', async () => {

View File

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

View File

@ -15,6 +15,7 @@ import { DateTime } from 'luxon';
import { randomBytes } from 'node:crypto';
import { readFile, writeFile } from 'node:fs/promises';
import { basename, join } from 'node:path';
import sharp from 'sharp';
import { Socket } from 'socket.io-client';
import { createUserDto, uuidDto } from 'src/fixtures';
import { makeRandomImage } from 'src/generators';
@ -40,6 +41,40 @@ const today = DateTime.fromObject({
}) as DateTime<true>;
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', () => {
let admin: LoginResponseDto;
let websocket: Socket;
@ -1190,6 +1225,411 @@ 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', () => {
it('ignores invalid deviceAssetIds', async () => {
const response = await utils.checkExistingAssets(user1.accessToken, {

View File

@ -1,146 +0,0 @@
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,
getMemory,
} from '@immich/sdk';
import { createUserDto, uuidDto } from 'src/fixtures';
import { createUserDto } from 'src/fixtures';
import { errorDto } from 'src/responses';
import { app, asBearerAuth, utils } from 'src/utils';
import request from 'supertest';
@ -17,7 +17,6 @@ describe('/memories', () => {
let user: LoginResponseDto;
let adminAsset: AssetMediaResponseDto;
let userAsset1: AssetMediaResponseDto;
let userAsset2: AssetMediaResponseDto;
let userMemory: MemoryResponseDto;
beforeAll(async () => {
@ -25,10 +24,9 @@ describe('/memories', () => {
admin = await utils.adminSetup();
user = await utils.userSetup(admin.accessToken, createUserDto.user1);
[adminAsset, userAsset1, userAsset2] = await Promise.all([
[adminAsset, userAsset1] = await Promise.all([
utils.createAsset(admin.accessToken),
utils.createAsset(user.accessToken),
utils.createAsset(user.accessToken),
]);
userMemory = await createMemory(
{
@ -43,121 +41,7 @@ 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', () => {
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 () => {
const { status, body } = await request(app)
.get(`/memories/${userMemory.id}`)
@ -176,22 +60,6 @@ describe('/memories', () => {
});
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 () => {
const { status, body } = await request(app)
.put(`/memories/${userMemory.id}`)
@ -218,23 +86,6 @@ describe('/memories', () => {
});
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 () => {
const { status, body } = await request(app)
.put(`/memories/${userMemory.id}/assets`)
@ -244,15 +95,6 @@ describe('/memories', () => {
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 () => {
const { status, body } = await request(app)
.put(`/memories/${userMemory.id}/assets`)
@ -279,23 +121,6 @@ describe('/memories', () => {
});
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 () => {
const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}/assets`)
@ -305,15 +130,6 @@ describe('/memories', () => {
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 () => {
const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}/assets`)
@ -340,21 +156,6 @@ describe('/memories', () => {
});
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 () => {
const { status, body } = await request(app)
.delete(`/memories/${userMemory.id}`)

View File

@ -227,6 +227,21 @@ describe(`/oauth`, () => {
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 () => {
await setupOAuth(admin.accessToken, {
enabled: true,

View File

@ -117,8 +117,25 @@ describe('/shared-links', () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
expect(resp.status).toBe(200);
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`);
});
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', () => {

View File

@ -15,12 +15,6 @@ describe('/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 () => {
const config = await getSystemConfig(admin.accessToken);

View File

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

View File

@ -1,230 +0,0 @@
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 () => {
await utils.resetDatabase(['assets', 'albums']);
await utils.resetDatabase(['asset', 'album']);
});
describe(`immich upload /path/to/file.jpg`, () => {

View File

@ -0,0 +1,178 @@
#!/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,6 +116,7 @@ export const deviceDto = {
createdAt: expect.any(String),
updatedAt: expect.any(String),
current: true,
isPendingSyncReset: false,
deviceOS: '',
deviceType: '',
},

View File

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

View File

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

@ -1 +1 @@
Subproject commit 8885d6d01c12242785b6ea68f4a277334f60bc90
Subproject commit 37f60ea537c0228f5f92e4f42dc42f0bb39a6d7f

View File

@ -4,6 +4,7 @@
"account_settings": "Rekeninginstellings",
"acknowledge": "Erken",
"action": "Aksie",
"action_common_update": "Opdateur",
"actions": "Aksies",
"active": "Aktief",
"activity": "Aktiwiteite",
@ -13,6 +14,7 @@
"add_a_location": "Voeg 'n ligging by",
"add_a_name": "Voeg 'n naam by",
"add_a_title": "Voeg 'n titel by",
"add_endpoint": "Voeg Koppelvlakpunt by",
"add_exclusion_pattern": "Voeg uitsgluitingspatrone by",
"add_import_path": "Voeg invoerpad by",
"add_location": "Voeg ligging by",
@ -20,26 +22,30 @@
"add_partner": "Voeg vennoot by",
"add_path": "Voeg pad by",
"add_photos": "Voeg foto's by",
"add_tag": "Voeg tag by",
"add_to": "Voeg by…",
"add_to_album": "Voeg na album",
"add_to_shared_album": "Voeg na gedeelde album",
"add_to_album_bottom_sheet_added": "By {album} bygevoeg",
"add_to_album_bottom_sheet_already_exists": "Reeds in {album}",
"add_to_shared_album": "Voeg toe aan gedeelde album",
"add_url": "Voeg URL by",
"added_to_archive": "By argief gevoeg",
"added_to_favorites": "By gunstelinge gevoeg",
"added_to_favorites_count": "Het {count, number} by gunstelinge gevoeg",
"added_to_archive": "By argief toegevoegd",
"added_to_favorites": "By gunstelinge toegevoegd",
"added_to_favorites_count": "Het {count, number} by gunstelinge toegevoegd",
"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/**\".",
"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.",
"authentication_settings": "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_reenable": "Om te heraktiveer, gebruik 'n <link>Server Command</link>.",
"background_task_job": "Agtergrondtake",
"backup_database": "Rugsteun databasis",
"backup_database": "Skep Datastortlêer",
"backup_database_enable_description": "Aktiveer databasisrugsteun",
"backup_keep_last_amount": "Aantal vorige rugsteune om te hou",
"backup_settings": "Rugsteun instellings",
"backup_settings_description": "Bestuur databasis rugsteun instellings",
"backup_settings_description": "Bestuur databasis rugsteun instellings.",
"cleared_jobs": "Poste gevee vir: {job}",
"config_set_by_file": "Config word tans deur 'n konfigurasielêer gestel",
"confirm_delete_library": "Is jy seker jy wil {library}-biblioteek uitvee?",
@ -47,6 +53,7 @@
"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_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",
"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>",
@ -56,10 +63,14 @@
"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",
"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}",
"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_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_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.",
@ -77,8 +88,99 @@
"job_concurrency": "{job} gelyktydigheid",
"job_created": "Taak gemaak",
"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_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

@ -22,6 +22,7 @@
"add_partner": "Дадаць партнёра",
"add_path": "Дадаць шлях",
"add_photos": "Дадаць фота",
"add_tag": "Дадаць тэг",
"add_to": "Дадаць у…",
"add_to_album": "Дадаць у альбом",
"add_to_album_bottom_sheet_added": "Дададзена да {album}",
@ -33,28 +34,30 @@
"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": "Стварыць рэзервовую копію базы даных",
"backup_database_enable_description": "Уключыць рэзерваванне базы даных",
"backup_keep_last_amount": "Колькасць папярэдніх рэзервовых копій для захавання",
"backup_settings": "Налады рэзервовага капіявання",
"backup_settings_description": "Кіраванне наладамі дампа базы дадзеных. Заўвага: гэтыя задачы не кантралююцца, і ў выпадку няўдачы паведамленне адпраўлена не будзе.",
"backup_settings_description": "Кіраванне наладамі рэзервавання базы даных.",
"cleared_jobs": "Ачышчаны заданні для: {job}",
"config_set_by_file": "Канфігурацыя ў зараз усталявана праз файл канфігурацыі",
"confirm_delete_library": "Вы ўпэўнены што жадаеце выдаліць {library} бібліятэку?",
"config_set_by_file": "Канфігурацыя зараз усталявана праз файл канфігурацыі",
"confirm_delete_library": "Вы ўпэўнены што жадаеце выдаліць бібліятэку {library}?",
"confirm_delete_library_assets": "Вы ўпэўнены, што хочаце выдаліць гэтую бібліятэку? Гэта прывядзе да выдалення {count, plural, one {# актыву} other {усіх # актываў}}, якія змяшчаюцца ў Immich, і гэта дзеянне немагчыма будзе адмяніць. Файлы застануцца на дыску.",
"confirm_email_below": "Каб пацвердзіць, увядзіце \"{email}\" ніжэй",
"confirm_reprocess_all_faces": "Вы ўпэўнены, што хочаце пераапрацаваць усе твары? Гэта таксама прывядзе да выдалення імя людзей.",
"confirm_user_password_reset": "Вы ўпэўнены ў тым, што жадаеце скінуць пароль {user}?",
"confirm_user_pin_code_reset": "Вы ўпэўнены ў тым, што жадаеце скінуць PIN-код {user}?",
"create_job": "Стварыць заданне",
"cron_expression": "Выраз Cron",
"cron_expression_description": "Усталюйце інтэрвал сканавання, выкарыстоўваючы фармат cron. Для атрымання дадатковай інфармацыі, калі ласка, звярніцеся, напрыклад, да <link>Crontab Guru</link>",
"cron_expression_presets": "Прадустановкі выразаў Cron",
"cron_expression_presets": "Прадустаноўкі выразаў Cron",
"disable_login": "Адключыць уваход",
"duplicate_detection_job_description": "Запусціць машыннае навучанне на актывах для выяўлення падобных выяў. Залежыць ад Smart Search",
"exclusion_pattern_description": "Шаблоны выключэння дазваляюць ігнараваць файлы і папкі пры сканаванні вашай бібліятэкі. Гэта карысна, калі ў вас ёсць папкі, якія змяшчаюць файлы, якія вы не хочаце імпартаваць, напрыклад, файлы RAW.",
@ -71,15 +74,272 @@
"image_fullsize_enabled_description": "Ствараць выяву ў поўным памеры для фарматаў, што не прыдатныя для вэб. Калі ўключана опцыя \"Аддаваць перавагу ўбудаванай праяве\", прагляды выкарыстоўваюцца непасрэдна без канвертацыі. Не ўплывае на вэб-прыдатныя фарматы, такія як JPEG.",
"image_fullsize_quality_description": "Якасць выявы ў поўным памеры ад 1 да 100. Больш высокае значэнне лепшае, але прыводзіць да павелічэння памеру файла.",
"image_fullsize_title": "Налады выявы ў поўным памеры",
"image_prefer_embedded_preview_setting_description": "Выкарыстоўваць убудаваныя праявы ў RAW-фотаздымках ў якасці ўваходных дадзеных для апрацоўкі малюнкаў, калі магчыма. Гэта дазваляе атрымаць больш дакладныя колеры для некаторых відарысаў, але ж якасць праяў залежыць ад камеры, і на відарысе можа быць больш артэфактаў сціску.",
"image_prefer_wide_gamut": "Аддаць перавагу шырокай гаме",
"image_preview_title": "Налады папярэдняга прагляду",
"image_quality": "Якасць",
"image_resolution": "Раздзяляльнасць",
"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",
"system_settings": "Сістэмныя налады",
"theme_settings": "Налады тэмы",
"transcoding_acceleration_vaapi": "VAAPI",
"transcoding_audio_codec": "Аудыякодэк",
"transcoding_video_codec": "Відэакодэк",
"trash_settings": "Налады сметніцы",
"trash_settings_description": "Кіраванне наладамі сметніцы",
"version_check_settings": "Праверка версіі",
"version_check_settings_description": "Уключыць/адключыць апавяшчэнні аб новай версіі"
},
"advanced_settings_troubleshooting_title": "Выпраўленне непаладак",
"album_added": "Альбом дададзены",
"album_name": "Назва альбома",
"album_remove_user": "Выдаліць карыстальніка?",
"album_updated": "Альбом абноўлены",
"albums": "Альбомы",
"all": "Усе",
"all_albums": "Усе альбомы",
"all_people": "Усе людзі",
"all_videos": "Усе відэа",
"app_bar_signout_dialog_ok": "Так",
"app_bar_signout_dialog_title": "Выйсці",
"app_settings": "Налады праграмы",
"archive": "Архіў",
"archive_size": "Памер архіва",
"asset_uploading": "Запампоўванне…",
"back": "Назад",
"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": "Хроніка",
"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_has_been_deleted": "Гэты карыстальнік быў выдалены.",
"user_id": "ID карыстальніка",
"user_purchase_settings": "Купля",
"user_purchase_settings_description": "Кіруйце пакупкамі",
@ -112,14 +372,14 @@
"view_next_asset": "Паказаць наступны аб'ект",
"view_previous_asset": "Праглядзець папярэдні аб'ект",
"view_stack": "Прагляд стэка",
"visibility_changed": "Відзімасць змянілася для {count, plural, one {# чалавек(-аў)} астатніх {# чалавек}}",
"visibility_changed": "Бачнасць змянілася для {count, plural, one {# чалавека} other {# чалавек}}",
"waiting": "Чакаюць",
"warning": "Папярэджанне",
"week": "Тыдзень",
"welcome": "Вітаем",
"welcome_to_immich": "Вітаем у Immich",
"year": "Год",
"years_ago": "{years, plural, one {# год} other {# гадоў}} таму",
"years_ago": "{years, plural, one {# год} few {# гады} many {# гадоў} other {# гадоў}} таму",
"yes": "Так",
"you_dont_have_any_shared_links": "У вас няма абагуленых спасылак",
"zoom_image": "Павялічыць відарыс"

View File

@ -166,6 +166,20 @@
"metadata_settings_description": "Управление на настройките за метаданни",
"migration_job": "Миграция",
"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_pattern_added": "Няма добавен модел",
"note_apply_storage_label_previous_assets": "Забележка: За да приложите етикета за съхранение към предварително качени файлове, стартирайте",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "URI за мобилно пренасочване",
"oauth_mobile_redirect_uri_override": "URI пренасочване за мобилни устройства",
"oauth_mobile_redirect_uri_override_description": "Разреши когато доставчика за OAuth удостоверяване не позволява за мобилни URI идентификатори, като ''{callback}''",
"oauth_role_claim": "Потвърждение на роля",
"oauth_role_claim_description": "Автоматично предоставяне на административни права при наличие на това потвържение. Потвърждението може да има стойност 'user' или 'admin'.",
"oauth_settings": "OAuth",
"oauth_settings_description": "Управление на настройките за вход с OAuth",
"oauth_settings_more_details": "За повече информация за функционалността, се потърсете в <link>docs</link>.",
@ -357,6 +373,8 @@
"admin_password": "Администраторска парола",
"administration": "Администрация",
"advanced": "Разширено",
"advanced_settings_beta_timeline_subtitle": "Опитайте новите функции на приложението",
"advanced_settings_beta_timeline_title": "Бета версия на времевата линия",
"advanced_settings_enable_alternate_media_filter_subtitle": "При синхронизация, използвайте тази опция като филтър, основан на промяна на даден критерии. Опитайте само в случай, че приложението има проблем с откриване на всички албуми.",
"advanced_settings_enable_alternate_media_filter_title": "[ЕКСПЕРИМЕНТАЛНО] Използвай филтъра на алтернативното устройство за синхронизация на албуми",
"advanced_settings_log_level_title": "Ниво на запис в дневника: {level}",
@ -427,6 +445,7 @@
"app_settings": "Настройки ма приложението",
"appears_in": "Излиза в",
"archive": "Архив",
"archive_action_prompt": "{count} са добавени в Архива",
"archive_or_unarchive_photo": "Архивиране или деархивиране на снимка",
"archive_page_no_archived_assets": "Не са намерени обекти в архива",
"archive_page_title": "Архив ({count})",
@ -464,7 +483,6 @@
"assets": "Елементи",
"assets_added_count": "Добавено {count, plural, one {# asset} other {# assets}}",
"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_count": "{count, plural, one {# актив} other {# актива}}",
"assets_deleted_permanently": "{count} обекта са изтрити завинаги",
@ -703,7 +721,7 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM yyyy",
"dark": "Тъмен",
"darkTheme": "Превключи на тъмна тема",
"dark_theme": "Тъмна тема",
"date_after": "Дата след",
"date_and_time": "Дата и час",
"date_before": "Дата преди",
@ -719,6 +737,7 @@
"default_locale": "Локализация по подразбиране",
"default_locale_description": "Форматиране на дати и числа в зависимост от езиковата настройка на браузъра",
"delete": "Изтрий",
"delete_action_prompt": "{count} са изтрити завинаги",
"delete_album": "Изтрий албум",
"delete_api_key_prompt": "Сигурни ли сте, че искате да изтриете този API ключ?",
"delete_dialog_alert": "Тези обекти ще бъдат изтрити завинаги и от Immich сървъра и от устройството",
@ -732,19 +751,20 @@
"delete_key": "Изтрий ключ",
"delete_library": "Изтрий библиотека",
"delete_link": "Изтрий линк",
"delete_local_action_prompt": "{count} са изтрити локално",
"delete_local_dialog_ok_backed_up_only": "Изтрий локално само архивираните",
"delete_local_dialog_ok_force": "Въпреки това изтрий",
"delete_others": "Изтрий останалите",
"delete_shared_link": "Изтриване на споделен линк",
"delete_shared_link_dialog_title": "Изтрий споделената връзка",
"delete_tag": "Изтрий таг",
"delete_tag_confirmation_prompt": "Сигурни ли сте, че искате да изтриете таг {tagName}?",
"delete_tag_confirmation_prompt": "Сигурни ли сте, че искате да изтриете тага {tagName}?",
"delete_user": "Изтрий потребител",
"deleted_shared_link": "Изтрит споделен линк",
"deletes_missing_assets": "Изтрива файлове, които липсват на диска",
"description": "Описание",
"description_input_hint_text": "Добави описание...",
"description_input_submit_error": "Неуспешно обновяване на описанието. За подробности виж в дневника",
"description_input_submit_error": "Неуспешно обновяване на описанието. За подробности вижте в дневника",
"details": "Детайли",
"direction": "Посока",
"disabled": "Изключено",
@ -762,6 +782,7 @@
"documentation": "Документация",
"done": "Готово",
"download": "Изтегли",
"download_action_prompt": "Зареждане на {count} обекта",
"download_canceled": "Изтеглянето е отменено",
"download_complete": "Изтеглянето завърши",
"download_enqueue": "Изтеглянето е добавено в опашката",
@ -799,6 +820,7 @@
"edit_key": "Редактиране на ключ",
"edit_link": "Редактиране на линк",
"edit_location": "Редактиране на местоположението",
"edit_location_action_prompt": "{count} локации са редактирани",
"edit_location_dialog_title": "Местоположение",
"edit_name": "Редактиране на име",
"edit_people": "Редактиране на хора",
@ -984,6 +1006,7 @@
"failed_to_load_assets": "Неуспешно зареждане на елементи",
"failed_to_load_folder": "Неуспешно зареждане на папка",
"favorite": "Любим",
"favorite_action_prompt": "{count} са добавени в Любими",
"favorite_or_unfavorite_photo": "Добави или премахни снимка от Любими",
"favorites": "Любими",
"favorites_page_no_favorites": "Не са намерени любими обекти",
@ -1127,6 +1150,7 @@
"library_page_sort_created": "Дата на създаване",
"library_page_sort_last_modified": "Последна промяна",
"library_page_sort_title": "Заглавие на албума",
"licenses": "Лицензи",
"light": "Светло",
"like_deleted": "Като изтрит",
"link_motion_video": "Линк към видео",
@ -1246,6 +1270,7 @@
"more": "Още",
"move": "Премести",
"move_off_locked_folder": "Извади от заключената папка",
"move_to_lock_folder_action_prompt": "{count} са добавени в заключената папка",
"move_to_locked_folder": "Премести в заключена папка",
"move_to_locked_folder_confirmation": "Тези снимки и видеа ще бъдат изтрити от всички албуми и ще са достъпни само в заключената папка",
"moved_to_archive": "{count, plural, one {# обект е преместен} many {# обекта са преместени} other {# обекта са преместени}} в архива",
@ -1495,7 +1520,9 @@
"remove_custom_date_range": "Премахни зададения диапазон от дати",
"remove_deleted_assets": "Премахни Изтритите Елементи",
"remove_from_album": "Премахни от албума",
"remove_from_album_action_prompt": "{count} са премахнати от албума",
"remove_from_favorites": "Премахни от Любими",
"remove_from_lock_folder_action_prompt": "{count} са премахнати от заключената папка",
"remove_from_locked_folder": "Махни от заключената папка",
"remove_from_locked_folder_confirmation": "Сигурни ли си, че искате тези снимки и видеа да бъдат извадени от заключената папка? Те ще бъдат видими в библиотеката.",
"remove_from_shared_link": "Премахни от споделения линк",
@ -1667,6 +1694,7 @@
"settings_saved": "Настройките са запазени",
"setup_pin_code": "Задай PIN код",
"share": "Споделяне",
"share_action_prompt": "{count} споделени обекта",
"share_add_photos": "Добави снимки",
"share_assets_selected": "{count} избрани",
"share_dialog_preparing": "Подготовка...",
@ -1768,6 +1796,7 @@
"sort_title": "Заглавие",
"source": "Код",
"stack": "Събери",
"stack_action_prompt": "{count} са групирани",
"stack_duplicates": "Подреждане на дубликати",
"stack_select_one_photo": "Избери една главна снимка за събраните снимки",
"stack_selected_photos": "Подреждане на избрани снимки",
@ -1838,6 +1867,7 @@
"total": "Общо",
"total_usage": "Общо използвано",
"trash": "Кошче",
"trash_action_prompt": "{count} са преместени в коша",
"trash_all": "Изхвърли всички",
"trash_count": "В Кошчето {count, number}",
"trash_delete_asset": "Вкарай в Кошчето/Изтрий елемент",
@ -1855,9 +1885,11 @@
"unable_to_change_pin_code": "Невъзможна промяна на PIN кода",
"unable_to_setup_pin_code": "Неуспешно задаване на PIN кода",
"unarchive": "Разархивирай",
"unarchive_action_prompt": "{count} са премахнати от Архива",
"unarchived_count": "{count, plural, other {Неархивирани #}}",
"undo": "Отмени",
"unfavorite": "Премахване от любимите",
"unfavorite_action_prompt": "{count} са премахнати от Любими",
"unhide_person": "Покажи отново човека",
"unknown": "Неизвестно",
"unknown_country": "Непозната Държава",
@ -1875,7 +1907,9 @@
"unselect_all_duplicates": "От маркирай всички дубликати",
"unselect_all_in": "Премахни избора на всички от групата {group}",
"unstack": "Разкачи",
"unstack_action_prompt": "{count} са разгрупирани",
"unstacked_assets_count": "Разкачени {count, plural, one {# елемент} other {# елементи}}",
"untagged": "Немаркирани",
"up_next": "Следващ",
"updated_at": "Обновено",
"updated_password": "Паролата е актуализирана",

View File

@ -8,6 +8,7 @@
"actions": "কর্ম",
"active": "সচল",
"activity": "কার্যকলাপ",
"activity_changed": "একটিভিটি এখন {enabled, select, true {চালু} other {বন্ধ}} আছে",
"add": "যোগ করুন",
"add_a_description": "একটি বিবরণ যোগ করুন",
"add_a_location": "একটি অবস্থান যোগ করুন",
@ -15,5 +16,84 @@
"add_a_title": "একটি শিরোনাম যোগ করুন",
"add_endpoint": "এন্ডপয়েন্ট যোগ করুন",
"add_exclusion_pattern": "বহির্ভূতকরণ নমুনা",
"add_url": "লিঙ্ক যোগ করুন"
"add_import_path": "ইমপোর্ট করার পাথ যুক্ত করুন",
"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,6 +166,10 @@
"metadata_settings_description": "Administrar la configuració de les metadades",
"migration_job": "Migració",
"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_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",
@ -196,6 +200,8 @@
"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_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_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>.",
@ -244,6 +250,7 @@
"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_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_settings": "Plantilla d'emmagatzematge",
"storage_template_settings_description": "Gestiona l'estructura de les carpetes i el nom del fitxers dels elements pujats",
@ -359,7 +366,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_title": "Utilitza el filtre de sincronització d'àlbums de dispositius alternatius",
"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 del dispositiu. 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 locals. Activeu aquest paràmetre per carregar imatges remotes en el seu lloc.",
"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_title": "Capçaleres de proxy",
@ -426,6 +433,7 @@
"app_settings": "Configuració de l'app",
"appears_in": "Apareix a",
"archive": "Arxiu",
"archive_action_prompt": "{count} afegit a Arxiu",
"archive_or_unarchive_photo": "Arxivar o desarxivar fotografia",
"archive_page_no_archived_assets": "No s'ha trobat res arxivat",
"archive_page_title": "Arxiu({count})",
@ -463,7 +471,6 @@
"assets": "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_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_count": "{count, plural, one {# recurs} other {# recursos}}",
"assets_deleted_permanently": "{count} element(s) esborrats permanentment",
@ -702,7 +709,7 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Fosc",
"darkTheme": "Activa/desactiva el tema fosc",
"dark_theme": "Canviar a tema fosc",
"date_after": "Data posterior a",
"date_and_time": "Data i hora",
"date_before": "Data anterior a",
@ -718,6 +725,7 @@
"default_locale": "Localització predeterminada",
"default_locale_description": "Format de dates i números segons la configuració del navegador",
"delete": "Esborra",
"delete_action_prompt": "{count} eliminats permanentment",
"delete_album": "Esborra l'àlbum",
"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",
@ -798,6 +806,7 @@
"edit_key": "Edita clau",
"edit_link": "Edita enllaç",
"edit_location": "Edita ubicació",
"edit_location_action_prompt": "{count} ubicacions editades",
"edit_location_dialog_title": "Ubicació",
"edit_name": "Edita el nom",
"edit_people": "Edita la gent",
@ -983,6 +992,7 @@
"failed_to_load_assets": "Error carregant recursos",
"failed_to_load_folder": "No s'ha pogut carregar la carpeta",
"favorite": "Preferit",
"favorite_action_prompt": "{count} afegit a Favorits",
"favorite_or_unfavorite_photo": "Foto preferida o no preferida",
"favorites": "Preferits",
"favorites_page_no_favorites": "No s'han trobat preferits",
@ -1149,6 +1159,7 @@
"locked_folder": "Carpeta bloquejada",
"log_out": "Tanca la sessió",
"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_device": "Dispositiu tancat",
"login": "Iniciar sessió",
@ -1244,6 +1255,7 @@
"more": "Més",
"move": "Moure",
"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_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",
@ -1494,6 +1506,7 @@
"remove_deleted_assets": "Suprimeix fitxers fora de línia",
"remove_from_album": "Treu de l'àlbum",
"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_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",
@ -1606,6 +1619,7 @@
"select_album_cover": "Seleccionar la portada de l'àlbum",
"select_all": "Selecciona-ho tot",
"select_all_duplicates": "Seleccioneu tots els duplicats",
"select_all_in": "Selecciona tot en {group}",
"select_avatar_color": "Tria color de l'avatar",
"select_face": "Selecciona cara",
"select_featured_photo": "Selecciona foto principal",
@ -1835,6 +1849,7 @@
"total": "Total",
"total_usage": "Ús total",
"trash": "Paperera",
"trash_action_prompt": "{count} mogudes a la brossa",
"trash_all": "Envia-ho tot a la paperera",
"trash_count": "Paperera {count, number}",
"trash_delete_asset": "Esborra/Elimina element",
@ -1852,9 +1867,11 @@
"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",
"unarchive": "Desarxivar",
"unarchive_action_prompt": "{count} eliminades de l'arxiu",
"unarchived_count": "{count, plural, other {# elements desarxivats}}",
"undo": "Desfer",
"unfavorite": "Reverteix preferit",
"unfavorite_action_prompt": "{count} eliminades de preferits",
"unhide_person": "Mostra persona",
"unknown": "Desconegut",
"unknown_country": "País Desconegut",
@ -1870,6 +1887,7 @@
"unsaved_change": "Canvi no desat",
"unselect_all": "Deselecciona-ho tot",
"unselect_all_duplicates": "Desmarqueu tots els duplicats",
"unselect_all_in": "Desseleccionar tots els elements de {group}",
"unstack": "Desapila",
"unstacked_assets_count": "No apilat {count, plural, one {# recurs} other {# recursos}}",
"up_next": "Pròxim",

View File

@ -44,7 +44,7 @@
"backup_database": "Vytvořit výpis 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_settings": "Nastavení výpisu databáze",
"backup_settings": "Zálohování databáze",
"backup_settings_description": "Správa nastavení výpisu databáze.",
"cleared_jobs": "Hotové úlohy pro: {job}",
"config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem",
@ -166,6 +166,20 @@
"metadata_settings_description": "Správa nastavení metadat",
"migration_job": "Migrace",
"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_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",
@ -196,6 +210,8 @@
"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_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_description": "Správa nastavení OAuth přihlášení",
"oauth_settings_more_details": "Další podrobnosti o této funkci naleznete v <link>dokumentaci</link>.",
@ -357,10 +373,12 @@
"admin_password": "Heslo správce",
"administration": "Administrace",
"advanced": "Pokročilé",
"advanced_settings_beta_timeline_subtitle": "Vyzkoušejte nové prostředí aplikace",
"advanced_settings_beta_timeline_title": "Časová osa beta verze",
"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_log_level_title": "Úroveň protokolování: {level}",
"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_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_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_title": "Proxy hlavičky",
@ -388,6 +406,7 @@
"album_options": "Možnosti alba",
"album_remove_user": "Odebrat uživatele?",
"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_updated": "Album aktualizováno",
"album_updated_setting_description": "Dostávat e-mailová oznámení o nových položkách sdíleného alba",
@ -407,6 +426,7 @@
"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_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_albums": "Všechna alba",
"all_people": "Všichni lidé",
@ -427,7 +447,8 @@
"app_settings": "Aplikace",
"appears_in": "Vyskytuje se v",
"archive": "Archiv",
"archive_or_unarchive_photo": "Archivovat nebo odarchivovat fotku",
"archive_action_prompt": "{count} přidaných do archivu",
"archive_or_unarchive_photo": "Přidat nebo odebrat fotku z archivu",
"archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média",
"archive_page_title": "Archiv ({count})",
"archive_size": "Velikost archivu",
@ -464,14 +485,13 @@
"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_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_count": "{count, plural, one {# položka} few {# položky} other {# položek}}",
"assets_deleted_permanently": "{count} položek trvale odstraněno",
"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_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": "Do koše {count, plural, one {přesunuta # položka} few {přesunuty # položky} other {přesunuto # položek}}",
"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_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_permanently_from_device": "{count} položek trvale odstraněno z vašeho zařízení",
@ -553,6 +573,8 @@
"backup_options_page_title": "Nastavení záloh",
"backup_setting_subtitle": "Správa nastavení zálohování na pozadí a na popředí",
"backward": "Pozpátku",
"beta_sync": "Stav synchronizace beta verze",
"beta_sync_subtitle": "Správa nového systému synchronizace",
"biometric_auth_enabled": "Biometrické ověřování je povoleno",
"biometric_locked_out": "Jste vyloučeni z biometrického ověřování",
"biometric_no_options": "Biometrické možnosti nejsou k dispozici",
@ -570,7 +592,7 @@
"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_duplicated_assets_clear_button": "VYMAZAT",
"cache_settings_duplicated_assets_subtitle": "Fotografie a videa, které aplikace zařadila na černou listinu",
"cache_settings_duplicated_assets_subtitle": "Fotografie a videa, které aplikace ignoruje",
"cache_settings_duplicated_assets_title": "Duplicitní položky ({count})",
"cache_settings_statistics_album": "Knihovna náhledů",
"cache_settings_statistics_full": "Kompletní fotografie",
@ -587,6 +609,7 @@
"cancel": "Zrušit",
"cancel_search": "Zrušit vyhledávání",
"canceled": "Zrušeno",
"canceling": "Rušení",
"cannot_merge_people": "Nelze sloučit osoby",
"cannot_undo_this_action": "Tuto akci nelze vrátit zpět!",
"cannot_update_the_description": "Nelze aktualizovat popis",
@ -703,7 +726,7 @@
"daily_title_text_date": "EEEE, d. MMMM",
"daily_title_text_date_year": "EEEE, d. MMMM y",
"dark": "Tmavý",
"darkTheme": "Přepnout tmavý motiv",
"dark_theme": "Přepnout tmavý motiv",
"date_after": "Datum po",
"date_and_time": "Datum a čas",
"date_before": "Datum před",
@ -719,6 +742,7 @@
"default_locale": "Výchozí jazyk",
"default_locale_description": "Formátovat datumy a čísla podle místního prostředí prohlížeče",
"delete": "Smazat",
"delete_action_prompt": "{count} trvale smazaných",
"delete_album": "Smazat album",
"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í",
@ -732,6 +756,7 @@
"delete_key": "Smazat klíč",
"delete_library": "Smazat knihovnu",
"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_force": "Přesto smazat",
"delete_others": "Odstranit ostatní",
@ -745,6 +770,7 @@
"description": "Popis",
"description_input_hint_text": "Přidat popis...",
"description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu",
"deselect_all": "Zrušit výběr všech",
"details": "Podrobnosti",
"direction": "Směr",
"disabled": "Zakázáno",
@ -762,6 +788,7 @@
"documentation": "Dokumentace",
"done": "Hotovo",
"download": "Stáhnout",
"download_action_prompt": "Stahování {count} položek",
"download_canceled": "Stahování zrušeno",
"download_complete": "Stahování kompletní",
"download_enqueue": "Stahování ve frontě",
@ -799,6 +826,7 @@
"edit_key": "Upravit klíč",
"edit_link": "Upravit odkaz",
"edit_location": "Upravit polohu",
"edit_location_action_prompt": "{count} upravených poloh",
"edit_location_dialog_title": "Poloha",
"edit_name": "Upravit jméno",
"edit_people": "Upravit lidi",
@ -817,6 +845,7 @@
"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!",
"enable": "Povolit",
"enable_backup": "Povolit zálohování",
"enable_biometric_auth_description": "Zadejte váš PIN kód pro povolení biometrického ověřování",
"enabled": "Povoleno",
"end_date": "Konečné datum",
@ -861,7 +890,7 @@
"failed_to_load_people": "Chyba načítání osob",
"failed_to_remove_product_key": "Nepodařilo se odebrat klíč produktu",
"failed_to_stack_assets": "Nepodařilo se seskupit položky",
"failed_to_unstack_assets": "Nepodařilo se rozložit položky",
"failed_to_unstack_assets": "Nepodařilo se zrušit seskupení položek",
"failed_to_update_notification_status": "Nepodařilo se aktualizovat stav oznámení",
"import_path_already_exists": "Tato cesta importu již existuje.",
"incorrect_email_or_password": "Nesprávný e-mail nebo heslo",
@ -876,7 +905,7 @@
"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_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 {odarchivovat}}",
"unable_to_archive_unarchive": "Nelze {archived, select, true {archivovat} other {odebrat z archivu}}",
"unable_to_change_album_user_role": "Nelze změnit roli uživatele alba",
"unable_to_change_date": "Nelze změnit datum",
"unable_to_change_description": "Nelze změnit popis",
@ -984,6 +1013,7 @@
"failed_to_load_assets": "Nepodařilo se načíst položky",
"failed_to_load_folder": "Nepodařilo se načíst složku",
"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",
"favorites": "Oblíbené",
"favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média",
@ -1023,6 +1053,9 @@
"haptic_feedback_switch": "Povolit dotykovou zpětnou vazbu",
"haptic_feedback_title": "Dotyková zpětná vazba",
"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_field_validator_msg": "Hodnota nemůže být prázdná",
"header_settings_header_name_input": "Název hlavičky",
@ -1055,6 +1088,7 @@
"host": "Hostitel",
"hour": "Hodina",
"id": "ID",
"idle": "Nečinnost",
"ignore_icloud_photos": "Ignorovat fotografie na iCloudu",
"ignore_icloud_photos_description": "Fotografie uložené na iCloudu se nebudou nahrávat na Immich server",
"image": "Obrázek",
@ -1127,6 +1161,7 @@
"library_page_sort_created": "Naposledy vytvořené",
"library_page_sort_last_modified": "Naposledy upraveno",
"library_page_sort_title": "Podle názvu alba",
"licenses": "Licence",
"light": "Světlý",
"like_deleted": "Lajk smazán",
"link_motion_video": "Připojit pohyblivé video",
@ -1136,7 +1171,9 @@
"list": "Seznam",
"loading": "Načítání",
"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_assets": "Místní položky",
"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",
"location_permission": "Oprávnění polohy",
@ -1246,10 +1283,11 @@
"more": "Více",
"move": "Přesunout",
"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_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 {Přesunuta # položka} few {Přesunuty # položky} other {Přesunuto # položek}} do archivu",
"moved_to_library": "{count, plural, one {Přesunuta # položka} few {Přesunuty # položky} other {Přesunuto # položek}} do knihovny",
"moved_to_archive": "{count, plural, one {# položka přesunuta} few {# položky přesunuty} other {# položek přesunuto}} 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_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_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji",
@ -1292,6 +1330,7 @@
"no_results": "Žádné výsledky",
"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_uploads_in_progress": "Neprobíhá žádné nahrávání",
"not_in_any_album": "Bez alba",
"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",
@ -1329,6 +1368,7 @@
"original": "originál",
"other": "Ostatní",
"other_devices": "Ostatní zařízení",
"other_entities": "Ostatní entity",
"other_variables": "Další proměnné",
"owned": "Vlastní",
"owner": "Vlastník",
@ -1460,6 +1500,7 @@
"purchase_server_description_2": "Stav podporovatele",
"purchase_server_title": "Server",
"purchase_settings_server_activated": "Produktový klíč serveru spravuje správce",
"queue_status": "Ve frontě {count}/{total}",
"rating": "Hodnocení hvězdičkami",
"rating_clear": "Vyčistit hodnocení",
"rating_count": "{count, plural, one {# hvězdička} few {# hvězdičky} other {# hvězdček}}",
@ -1488,6 +1529,8 @@
"refreshing_faces": "Obnovování obličejů",
"refreshing_metadata": "Obnovování metadat",
"regenerating_thumbnails": "Regenerace miniatur",
"remote": "Vzdálený",
"remote_assets": "Vzdálené položky",
"remove": "Odstranit",
"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}}?",
@ -1495,7 +1538,9 @@
"remove_custom_date_range": "Odstranit vlastní rozsah datumů",
"remove_deleted_assets": "Odstranit offline soubory",
"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_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_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",
@ -1523,11 +1568,15 @@
"reset_password": "Obnovit heslo",
"reset_people_visibility": "Obnovit viditelnost lidí",
"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í",
"resolve_duplicates": "Vyřešit duplicity",
"resolved_all_duplicates": "Vyřešeny všechny duplicity",
"restore": "Obnovit",
"restore_all": "Obnovit vše",
"restore_trash_action_prompt": "{count} obnoveno z koše",
"restore_user": "Obnovit uživatele",
"restored_asset": "Položka obnovena",
"resume": "Pokračovat",
@ -1536,6 +1585,7 @@
"role": "Role",
"role_editor": "Editor",
"role_viewer": "Divák",
"running": "Probíhá",
"save": "Uložit",
"save_to_gallery": "Uložit do galerie",
"saved_api_key": "API klíč uložen",
@ -1667,6 +1717,7 @@
"settings_saved": "Nastavení uloženo",
"setup_pin_code": "Nastavení PIN kódu",
"share": "Sdílet",
"share_action_prompt": "Sdíleno {count} položek",
"share_add_photos": "Přidat fotografie",
"share_assets_selected": "{count} vybráno",
"share_dialog_preparing": "Připravuji...",
@ -1768,6 +1819,7 @@
"sort_title": "Název alba",
"source": "Zdroj",
"stack": "Seskupit",
"stack_action_prompt": "{count} seskupeno",
"stack_duplicates": "Seskupit duplicity",
"stack_select_one_photo": "Vyberte jednu hlavní fotografii pro seskupení",
"stack_selected_photos": "Seskupení vybraných fotografií",
@ -1787,6 +1839,7 @@
"storage_quota": "Kvóta úložiště",
"storage_usage": "Využito {used} z {available}",
"submit": "Odeslat",
"success": "Úspěch",
"suggestions": "Návrhy",
"sunrise_on_the_beach": "Východ slunce na pláži",
"support": "Podpora",
@ -1796,6 +1849,8 @@
"sync": "Synchronizovat",
"sync_albums": "Synchronizovat alba",
"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",
"tag": "Značka",
"tag_assets": "Přiřadit značku",
@ -1806,6 +1861,7 @@
"tag_updated": "Aktualizována značka: {tag}",
"tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}",
"tags": "Značky",
"tap_to_run_job": "Klepnutím na spustíte úlohu",
"template": "Šablona",
"theme": "Motiv",
"theme_selection": "Výběr motivu",
@ -1838,6 +1894,7 @@
"total": "Celkem",
"total_usage": "Celkové využití",
"trash": "Koš",
"trash_action_prompt": "{count} přesunutých do koše",
"trash_all": "Vyhodit vše",
"trash_count": "Vyhodit {count, number}",
"trash_delete_asset": "Vyhodit/Smazat položku",
@ -1854,10 +1911,12 @@
"type": "Typ",
"unable_to_change_pin_code": "Nelze změnit PIN kód",
"unable_to_setup_pin_code": "Nelze nastavit PIN kód",
"unarchive": "Odarchivovat",
"unarchive": "Odebrat z archivu",
"unarchive_action_prompt": "{count} odstraněných z archivu",
"unarchived_count": "{count, plural, one {Odarchivována #} few {Odarchivovány #} other {Odarchivováno #}}",
"undo": "Vrátit zpět",
"unfavorite": "Zrušit oblíbení",
"unfavorite_action_prompt": "{count} odstraněných z oblíbených",
"unhide_person": "Zrušit skrytí osoby",
"unknown": "Neznámý",
"unknown_country": "Neznámá země",
@ -1875,12 +1934,15 @@
"unselect_all_duplicates": "Zrušit výběr všech duplicit",
"unselect_all_in": "Zrušit výběr ve skupině {group}",
"unstack": "Zrušit seskupení",
"unstacked_assets_count": "{count, plural, one {Rozložená # položka} few {Rozložené # položky} other {Rozložených # položiek}}",
"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žek}}",
"untagged": "Neoznačeno",
"up_next": "To je prozatím vše",
"updated_at": "Aktualizováno",
"updated_password": "Heslo aktualizováno",
"upload": "Nahrát",
"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_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.",
@ -1912,6 +1974,7 @@
"user_usage_stats_description": "Zobrazit statistiky používání účtu",
"username": "Uživateleské jméno",
"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",
"validate": "Ověřit",
"validate_endpoint_error": "Zadejte platné URL",
@ -1930,6 +1993,7 @@
"view_album": "Zobrazit album",
"view_all": "Zobrazit vše",
"view_all_users": "Zobrazit všechny uživatele",
"view_details": "Zobrazit podrobnosti",
"view_in_timeline": "Zobrazit na časové ose",
"view_link": "Zobrazit odkaz",
"view_links": "Zobrazit odkazy",
@ -1941,7 +2005,7 @@
"view_user": "Zobrazit uživatele",
"viewer_remove_from_stack": "Odstranit ze zásobníku",
"viewer_stack_use_as_main_asset": "Použít jako hlavní položku",
"viewer_unstack": "Rozbalit zásobník",
"viewer_unstack": "Zrušit zásobník",
"visibility_changed": "Viditelnost změněna u {count, plural, one {# osoby} few {# osob} other {# lidí}}",
"waiting": "Čekající",
"warning": "Upozornění",

View File

@ -34,6 +34,7 @@
"added_to_favorites_count": "Tilføjet {count, number} til favoritter",
"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/**\".",
"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.",
"authentication_settings": "Godkendelsesindstillinger",
"authentication_settings_description": "Administrer adgangskode, OAuth og andre godkendelsesindstillinger",
@ -165,6 +166,7 @@
"metadata_settings_description": "Håndtér metadataindstillinger",
"migration_job": "Migrering",
"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",
"no_paths_added": "Ingen stier 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",
@ -462,7 +464,6 @@
"assets": "elementer",
"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_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_count": "{count, plural, one {# mediefil} other {# mediefiler}}",
"assets_deleted_permanently": "{count} element(er) blev fjernet permanent",
@ -701,7 +702,6 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Mørk",
"darkTheme": "Skift til mørkt tema",
"date_after": "Dato efter",
"date_and_time": "Dato og klokkeslæt",
"date_before": "Dato før",

View File

@ -56,9 +56,9 @@
"confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN Code von {user} zurücksetzen möchtest?",
"create_job": "Aufgabe erstellen",
"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",
"disable_login": "Login deaktvieren",
"disable_login": "Login deaktivieren",
"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.",
"external_library_management": "Verwaltung externer Bibliotheken",
@ -166,6 +166,20 @@
"metadata_settings_description": "Metadaten-Einstellungen verwalten",
"migration_job": "Migration",
"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_pattern_added": "Kein Ausschlussmuster hinzugefügt",
"note_apply_storage_label_previous_assets": "Hinweis: Um den Speicherpfad auf die vorher hochgeladenen Dateien anzuwenden, starte den",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "Mobile Umleitungs-URI",
"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_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_description": "OAuth-Anmeldeeinstellungen verwalten",
"oauth_settings_more_details": "Weitere Informationen zu dieser Funktion findest du in der <link>Dokumentation</link>.",
@ -244,6 +260,7 @@
"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_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_settings": "Speichervorlage",
"storage_template_settings_description": "Die Ordnerstruktur und den Dateinamen der hochgeladenen Datei verwalten",
@ -356,10 +373,12 @@
"admin_password": "Administrator Passwort",
"administration": "Verwaltung",
"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_title": "[EXPERIMENTELL] Benutze alternativen Filter für Synchronisierung der Gerätealben",
"advanced_settings_log_level_title": "Log-Level: {level}",
"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_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_title": "Server-Bilder bevorzugen",
"advanced_settings_proxy_headers_subtitle": "Definiere einen Proxy-Header, den Immich bei jeder Netzwerkanfrage mitschicken soll",
"advanced_settings_proxy_headers_title": "Proxy-Headers",
@ -387,6 +406,7 @@
"album_options": "Albumoptionen",
"album_remove_user": "Nutzer entfernen?",
"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_updated": "Album aktualisiert",
"album_updated_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn ein freigegebenes Album neue Dateien enthält",
@ -406,6 +426,7 @@
"albums_default_sort_order": "Standard Album Sortierung",
"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_on_device_count": "Alben auf dem Gerät ({count})",
"all": "Alle",
"all_albums": "Alle Alben",
"all_people": "Alle Personen",
@ -426,6 +447,7 @@
"app_settings": "App-Einstellungen",
"appears_in": "Erscheint in",
"archive": "Archiv",
"archive_action_prompt": "{count} zum Archiv hinzugefügt",
"archive_or_unarchive_photo": "Foto archivieren bzw. Archivierung aufheben",
"archive_page_no_archived_assets": "Keine archivierten Inhalte gefunden",
"archive_page_title": "Archiv ({count})",
@ -463,7 +485,6 @@
"assets": "Dateien",
"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_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_count": "{count, plural, one {# Datei} other {# Dateien}}",
"assets_deleted_permanently": "{count} Element(e) permanent gelöscht",
@ -552,6 +573,8 @@
"backup_options_page_title": "Sicherungsoptionen",
"backup_setting_subtitle": "Verwaltung der Upload-Einstellungen im Hintergrund und im Vordergrund",
"backward": "Rückwärts",
"beta_sync": "Status des Beta Sync",
"beta_sync_subtitle": "Verwalte das neue Synchronisierungssystem",
"biometric_auth_enabled": "Biometrische Authentifizierung aktiviert",
"biometric_locked_out": "Du bist von der biometrischen Authentifizierung ausgeschlossen",
"biometric_no_options": "Keine biometrischen Optionen verfügbar",
@ -586,6 +609,7 @@
"cancel": "Abbrechen",
"cancel_search": "Suche abbrechen",
"canceled": "Abgebrochen",
"canceling": "Abbrechen",
"cannot_merge_people": "Personen können nicht zusammengeführt werden",
"cannot_undo_this_action": "Diese Aktion kann nicht rückgängig gemacht werden!",
"cannot_update_the_description": "Beschreibung kann nicht aktualisiert werden",
@ -702,7 +726,7 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Dunkel",
"darkTheme": "Dunkles Theme umschalten",
"dark_theme": "Dunkle Ansicht umschalten",
"date_after": "Datum nach",
"date_and_time": "Datum und Zeit",
"date_before": "Datum vor",
@ -718,6 +742,7 @@
"default_locale": "Standard-Sprache",
"default_locale_description": "Datumsangaben und Zahlen basierend auf dem Gebietsschema des Browsers formatieren",
"delete": "Löschen",
"delete_action_prompt": "{count} endgültig gelöscht",
"delete_album": "Album löschen",
"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",
@ -731,6 +756,7 @@
"delete_key": "Schlüssel löschen",
"delete_library": "Bibliothek 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_force": "Trotzdem löschen",
"delete_others": "Andere löschen",
@ -744,6 +770,7 @@
"description": "Beschreibung",
"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",
"deselect_all": "Alle abwählen",
"details": "Details",
"direction": "Richtung",
"disabled": "Deaktiviert",
@ -761,6 +788,7 @@
"documentation": "Dokumentation",
"done": "Fertig",
"download": "Herunterladen",
"download_action_prompt": "Herunterladen von {count} Dateien",
"download_canceled": "Download abgebrochen",
"download_complete": "Download vollständig",
"download_enqueue": "Download in die Warteschlange gesetzt",
@ -798,6 +826,7 @@
"edit_key": "Schlüssel bearbeiten",
"edit_link": "Link bearbeiten",
"edit_location": "Standort bearbeiten",
"edit_location_action_prompt": "{count} Geolokationen angepasst",
"edit_location_dialog_title": "Ort bearbeiten",
"edit_name": "Name bearbeiten",
"edit_people": "Personen bearbeiten",
@ -816,6 +845,7 @@
"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!",
"enable": "Aktivieren",
"enable_backup": "Sicherung aktivieren",
"enable_biometric_auth_description": "Gib deinen PIN Code ein, um die biometrische Authentifizierung zu aktivieren",
"enabled": "Aktiviert",
"end_date": "Enddatum",
@ -983,6 +1013,7 @@
"failed_to_load_assets": "Laden der Assets fehlgeschlagen",
"failed_to_load_folder": "Fehler beim Laden des Ordners",
"favorite": "Favorit",
"favorite_action_prompt": "{count} zu den Favoriten hinzugefügt",
"favorite_or_unfavorite_photo": "Favorisiertes oder nicht favorisiertes Foto",
"favorites": "Favoriten",
"favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden",
@ -1022,6 +1053,9 @@
"haptic_feedback_switch": "Haptisches Feedback aktivieren",
"haptic_feedback_title": "Haptisches Feedback",
"has_quota": "Kontingent",
"hash_asset": "Dateihash",
"hashed_assets": "Gehashte Dateien",
"hashing": "Hashen",
"header_settings_add_header_tip": "Header hinzufügen",
"header_settings_field_validator_msg": "Der Wert darf nicht leer sein",
"header_settings_header_name_input": "Header-Name",
@ -1054,6 +1088,7 @@
"host": "Host",
"hour": "Stunde",
"id": "ID",
"idle": "Untätig",
"ignore_icloud_photos": "iCloud Fotos ignorieren",
"ignore_icloud_photos_description": "Fotos, die in der iCloud gespeichert sind, werden nicht auf den immich Server hochgeladen",
"image": "Bild",
@ -1126,6 +1161,7 @@
"library_page_sort_created": "Zuletzt erstellt",
"library_page_sort_last_modified": "Zuletzt bearbeitet",
"library_page_sort_title": "Titel des Albums",
"licenses": "Lizenzen",
"light": "Hell",
"like_deleted": "Like gelöscht",
"link_motion_video": "Bewegungsvideo verknüpfen",
@ -1135,7 +1171,9 @@
"list": "Liste",
"loading": "Laden",
"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_assets": "Lokale Dateien",
"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",
"location_permission": "Standort Genehmigung",
@ -1245,6 +1283,7 @@
"more": "Mehr",
"move": "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_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",
@ -1291,6 +1330,7 @@
"no_results": "Keine Ergebnisse",
"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_uploads_in_progress": "Kein Upload in Bearbeitung",
"not_in_any_album": "In keinem Album",
"not_selected": "Nicht ausgewählt",
"note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um eine Speicherpfadbezeichnung anzuwenden, starte den",
@ -1328,6 +1368,7 @@
"original": "Original",
"other": "Sonstiges",
"other_devices": "Andere Geräte",
"other_entities": "Andere Entitäten",
"other_variables": "Sonstige Variablen",
"owned": "Eigenes",
"owner": "Besitzer",
@ -1459,6 +1500,7 @@
"purchase_server_description_2": "Unterstützerstatus",
"purchase_server_title": "Server",
"purchase_settings_server_activated": "Der Server-Produktschlüssel wird durch den Administrator verwaltet",
"queue_status": "Warteschlange {count}/{total}",
"rating": "Bewertung",
"rating_clear": "Bewertung löschen",
"rating_count": "{count, plural, one {# Stern} other {# Sterne}}",
@ -1487,6 +1529,8 @@
"refreshing_faces": "Gesichter werden aktualisiert",
"refreshing_metadata": "Metadaten werden aktualisiert",
"regenerating_thumbnails": "Miniaturansichten werden neu erstellt",
"remote": "Entfernt",
"remote_assets": "Entfernte Dateien",
"remove": "Entfernen",
"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?",
@ -1494,7 +1538,9 @@
"remove_custom_date_range": "Benutzerdefinierten Datumsbereich entfernen",
"remove_deleted_assets": "Offline-Dateien entfernen",
"remove_from_album": "Aus Album entfernen",
"remove_from_album_action_prompt": "{count} vom Album entfernt",
"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_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",
@ -1522,11 +1568,15 @@
"reset_password": "Passwort zurücksetzen",
"reset_people_visibility": "Sichtbarkeit von Personen 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",
"resolve_duplicates": "Duplikate entfernen",
"resolved_all_duplicates": "Alle Duplikate aufgelöst",
"restore": "Wiederherstellen",
"restore_all": "Alle wiederherstellen",
"restore_trash_action_prompt": "{count} aus dem Papierkorb wiederhergestellt",
"restore_user": "Nutzer wiederherstellen",
"restored_asset": "Datei wiederhergestellt",
"resume": "Fortsetzen",
@ -1535,6 +1585,7 @@
"role": "Rolle",
"role_editor": "Bearbeiter",
"role_viewer": "Betrachter",
"running": "Läuft",
"save": "Speichern",
"save_to_gallery": "In Galerie speichern",
"saved_api_key": "API-Schlüssel wurde gespeichert",
@ -1666,6 +1717,7 @@
"settings_saved": "Einstellungen gespeichert",
"setup_pin_code": "Einen PIN Code festlegen",
"share": "Teilen",
"share_action_prompt": "{count} Dateien geteilt",
"share_add_photos": "Fotos hinzufügen",
"share_assets_selected": "{count} ausgewählt",
"share_dialog_preparing": "Vorbereiten...",
@ -1767,6 +1819,7 @@
"sort_title": "Titel",
"source": "Quellcode",
"stack": "Stapel",
"stack_action_prompt": "{count} gestapelt",
"stack_duplicates": "Duplikate stapeln",
"stack_select_one_photo": "Hauptfoto für den Stapel auswählen",
"stack_selected_photos": "Ausgewählte Fotos stapeln",
@ -1786,6 +1839,7 @@
"storage_quota": "Speicherplatz-Kontingent",
"storage_usage": "{used} von {available} verwendet",
"submit": "Bestätigen",
"success": "Erfolgreich",
"suggestions": "Vorschläge",
"sunrise_on_the_beach": "Sonnenaufgang am Strand",
"support": "Unterstützung",
@ -1795,6 +1849,8 @@
"sync": "Synchronisieren",
"sync_albums": "Alben synchronisieren",
"sync_albums_manual_subtitle": "Synchronisiere alle hochgeladenen Videos und Fotos in die ausgewählten Backup-Alben",
"sync_local": "Lokal synchronisieren",
"sync_remote": "Entfernt synchronisieren",
"sync_upload_album_setting_subtitle": "Erstelle deine ausgewählten Alben in Immich und lade die Fotos und Videos dort hoch",
"tag": "Tag",
"tag_assets": "Dateien taggen",
@ -1805,6 +1861,7 @@
"tag_updated": "Tag aktualisiert: {tag}",
"tagged_assets": "{count, plural, one {# Datei} other {# Dateien}} getagged",
"tags": "Tags",
"tap_to_run_job": "Tippen um den Job zu starten",
"template": "Vorlage",
"theme": "Theme",
"theme_selection": "Themenauswahl",
@ -1837,6 +1894,7 @@
"total": "Gesamt",
"total_usage": "Gesamtnutzung",
"trash": "Papierkorb",
"trash_action_prompt": "{count} in den Papierkorb verschoben",
"trash_all": "Alle löschen",
"trash_count": "Papierkorb {count, number}",
"trash_delete_asset": "Datei löschen/in den Papierkorb verschieben",
@ -1854,9 +1912,11 @@
"unable_to_change_pin_code": "PIN Code konnte nicht geändert werden",
"unable_to_setup_pin_code": "PIN Code konnte nicht festgelegt werden",
"unarchive": "Entarchivieren",
"unarchive_action_prompt": "{count} aus dem Archiv entfernt",
"unarchived_count": "{count, plural, other {# entarchiviert}}",
"undo": "Rückgängig",
"unfavorite": "Entfavorisieren",
"unfavorite_action_prompt": "{count} aus den Favoriten entfernt",
"unhide_person": "Person einblenden",
"unknown": "Unbekannt",
"unknown_country": "Unbekanntes Land",
@ -1874,12 +1934,15 @@
"unselect_all_duplicates": "Alle Duplikate abwählen",
"unselect_all_in": "Alle in {group} abwählen",
"unstack": "Entstapeln",
"unstack_action_prompt": "{count} entstapelt",
"unstacked_assets_count": "{count, plural, one {# Datei} other {# Dateien}} entstapelt",
"untagged": "Ohne Tag",
"up_next": "Weiter",
"updated_at": "Aktualisiert",
"updated_password": "Passwort aktualisiert",
"upload": "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_title": "Element hochladen",
"upload_errors": "Hochladen mit {count, plural, one {# Fehler} other {# Fehlern}} abgeschlossen, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.",
@ -1911,6 +1974,7 @@
"user_usage_stats_description": "Statistiken zur Kontonutzung anzeigen",
"username": "Nutzername",
"users": "Benutzer",
"users_added_to_album_count": "{count, plural, one {# Benutzer} other {# Benutzer}} zum Album hinzugefügt",
"utilities": "Hilfsmittel",
"validate": "Validieren",
"validate_endpoint_error": "Bitte gib eine gültige URL ein",
@ -1929,6 +1993,7 @@
"view_album": "Album anzeigen",
"view_all": "Alles anzeigen",
"view_all_users": "Alle Nutzer anzeigen",
"view_details": "Details ansehen",
"view_in_timeline": "In Zeitleiste anzeigen",
"view_link": "Link anzeigen",
"view_links": "Links anzeigen",

View File

@ -464,7 +464,6 @@
"assets": "Αντικείμενα",
"assets_added_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_count": "{count, plural, one {# αρχείο} other {# αρχεία}}",
"assets_deleted_permanently": "{count} τα στοιχεία διαγράφηκαν οριστικά",
@ -703,7 +702,6 @@
"daily_title_text_date": "Ε, MMM dd",
"daily_title_text_date_year": "Ε, MMM dd, yyyy",
"dark": "Σκούρο",
"darkTheme": "Εναλλαγή σκούρου θέματος",
"date_after": "Ημερομηνία μετά",
"date_and_time": "Ημερομηνία και ώρα",
"date_before": "Ημερομηνία πριν",

View File

@ -166,6 +166,20 @@
"metadata_settings_description": "Manage metadata settings",
"migration_job": "Migration",
"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_pattern_added": "No pattern added",
"note_apply_storage_label_previous_assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "Mobile redirect URI",
"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_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_description": "Manage OAuth login settings",
"oauth_settings_more_details": "For more details about this feature, refer to the <link>docs</link>.",
@ -357,10 +373,12 @@
"admin_password": "Admin Password",
"administration": "Administration",
"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_title": "[EXPERIMENTAL] Use alternate device album sync filter",
"advanced_settings_log_level_title": "Log level: {level}",
"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_subtitle": "Some devices are painfully slow to load thumbnails from local assets. Activate this setting to load remote images instead.",
"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_title": "Proxy Headers",
@ -379,6 +397,7 @@
"album_cover_updated": "Album cover updated",
"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_deleted": "Album deleted",
"album_info_card_backup_album_excluded": "EXCLUDED",
"album_info_card_backup_album_included": "INCLUDED",
"album_info_updated": "Album info updated",
@ -388,6 +407,7 @@
"album_options": "Album options",
"album_remove_user": "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_updated": "Album updated",
"album_updated_setting_description": "Receive an email notification when a shared album has new assets",
@ -407,6 +427,7 @@
"albums_default_sort_order": "Default album sort order",
"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_on_device_count": "Albums on device ({count})",
"all": "All",
"all_albums": "All albums",
"all_people": "All people",
@ -427,6 +448,7 @@
"app_settings": "App Settings",
"appears_in": "Appears in",
"archive": "Archive",
"archive_action_prompt": "{count} added to Archive",
"archive_or_unarchive_photo": "Archive or unarchive photo",
"archive_page_no_archived_assets": "No archived assets found",
"archive_page_title": "Archive ({count})",
@ -464,7 +486,6 @@
"assets": "Assets",
"assets_added_count": "Added {count, plural, one {# asset} other {# assets}}",
"assets_added_to_album_count": "Added {count, plural, one {# asset} other {# assets}} to the album",
"assets_added_to_name_count": "Added {count, plural, one {# asset} other {# assets}} to {hasName, select, true {<b>{name}</b>} other {new album}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} cannot be added to the album",
"assets_count": "{count, plural, one {# asset} other {# assets}}",
"assets_deleted_permanently": "{count} asset(s) deleted permanently",
@ -490,6 +511,7 @@
"back_close_deselect": "Back, close, or deselect",
"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",
"backup": "Backup",
"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_assets_scatter": "Assets can scatter across multiple albums. Thus, albums can be included or excluded during the backup process.",
@ -553,6 +575,8 @@
"backup_options_page_title": "Backup options",
"backup_setting_subtitle": "Manage background and foreground upload settings",
"backward": "Backward",
"beta_sync": "Beta Sync Status",
"beta_sync_subtitle": "Manage the new sync system",
"biometric_auth_enabled": "Biometric authentication enabled",
"biometric_locked_out": "You are locked out of biometric authentication",
"biometric_no_options": "No biometric options available",
@ -570,7 +594,7 @@
"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_duplicated_assets_clear_button": "CLEAR",
"cache_settings_duplicated_assets_subtitle": "Photos and videos that are black listed by the app",
"cache_settings_duplicated_assets_subtitle": "Photos and videos that are ignore listed by the app",
"cache_settings_duplicated_assets_title": "Duplicated Assets ({count})",
"cache_settings_statistics_album": "Library thumbnails",
"cache_settings_statistics_full": "Full images",
@ -587,6 +611,7 @@
"cancel": "Cancel",
"cancel_search": "Cancel search",
"canceled": "Canceled",
"canceling": "Canceling",
"cannot_merge_people": "Cannot merge people",
"cannot_undo_this_action": "You cannot undo this action!",
"cannot_update_the_description": "Cannot update the description",
@ -703,7 +728,7 @@
"daily_title_text_date": "E, MMM dd",
"daily_title_text_date_year": "E, MMM dd, yyyy",
"dark": "Dark",
"darkTheme": "Toggle dark theme",
"dark_theme": "Toggle dark theme",
"date_after": "Date after",
"date_and_time": "Date and Time",
"date_before": "Date before",
@ -719,6 +744,8 @@
"default_locale": "Default Locale",
"default_locale_description": "Format dates and numbers based on your browser locale",
"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_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",
@ -732,9 +759,12 @@
"delete_key": "Delete key",
"delete_library": "Delete Library",
"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_force": "Delete Anyway",
"delete_others": "Delete others",
"delete_permanently": "Delete permanently",
"delete_permanently_action_prompt": "{count} deleted permanently",
"delete_shared_link": "Delete shared link",
"delete_shared_link_dialog_title": "Delete Shared Link",
"delete_tag": "Delete tag",
@ -745,6 +775,7 @@
"description": "Description",
"description_input_hint_text": "Add description...",
"description_input_submit_error": "Error updating description, check the log for more details",
"deselect_all": "Deselect All",
"details": "Details",
"direction": "Direction",
"disabled": "Disabled",
@ -762,6 +793,7 @@
"documentation": "Documentation",
"done": "Done",
"download": "Download",
"download_action_prompt": "Downloading {count} assets",
"download_canceled": "Download canceled",
"download_complete": "Download complete",
"download_enqueue": "Download enqueued",
@ -799,6 +831,7 @@
"edit_key": "Edit key",
"edit_link": "Edit link",
"edit_location": "Edit location",
"edit_location_action_prompt": "{count} location edited",
"edit_location_dialog_title": "Location",
"edit_name": "Edit name",
"edit_people": "Edit people",
@ -817,6 +850,7 @@
"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!",
"enable": "Enable",
"enable_backup": "Enable Backup",
"enable_biometric_auth_description": "Enter your PIN code to enable biometric authentication",
"enabled": "Enabled",
"end_date": "End date",
@ -973,6 +1007,8 @@
"explorer": "Explorer",
"export": "Export",
"export_as_json": "Export as JSON",
"export_database": "Export Database",
"export_database_description": "Export the SQLite database",
"extension": "Extension",
"external": "External",
"external_libraries": "External Libraries",
@ -984,6 +1020,7 @@
"failed_to_load_assets": "Failed to load assets",
"failed_to_load_folder": "Failed to load folder",
"favorite": "Favorite",
"favorite_action_prompt": "{count} added to Favorites",
"favorite_or_unfavorite_photo": "Favorite or unfavorite photo",
"favorites": "Favorites",
"favorites_page_no_favorites": "No favorite assets found",
@ -1023,6 +1060,9 @@
"haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback",
"has_quota": "Has quota",
"hash_asset": "Hash asset",
"hashed_assets": "Hashed assets",
"hashing": "Hashing",
"header_settings_add_header_tip": "Add Header",
"header_settings_field_validator_msg": "Value cannot be empty",
"header_settings_header_name_input": "Header name",
@ -1055,6 +1095,7 @@
"host": "Host",
"hour": "Hour",
"id": "ID",
"idle": "Idle",
"ignore_icloud_photos": "Ignore iCloud photos",
"ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server",
"image": "Image",
@ -1127,6 +1168,7 @@
"library_page_sort_created": "Created date",
"library_page_sort_last_modified": "Last modified",
"library_page_sort_title": "Album title",
"licenses": "Licenses",
"light": "Light",
"like_deleted": "Like deleted",
"link_motion_video": "Link motion video",
@ -1136,7 +1178,9 @@
"list": "List",
"loading": "Loading",
"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_assets": "Local Assets",
"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",
"location_permission": "Location permission",
@ -1193,8 +1237,7 @@
"manage_your_devices": "Manage your logged-in devices",
"manage_your_oauth_connection": "Manage your OAuth connection",
"map": "Map",
"map_assets_in_bound": "{count} photo",
"map_assets_in_bounds": "{count} photos",
"map_assets_in_bounds": "{count, plural, one {# photo} other {# photos}}",
"map_cannot_get_user_location": "Cannot get user's location",
"map_location_dialog_yes": "Yes",
"map_location_picker_page_use_location": "Use this location",
@ -1246,6 +1289,7 @@
"more": "More",
"move": "Move",
"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_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",
@ -1292,6 +1336,7 @@
"no_results": "No results",
"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_uploads_in_progress": "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: To apply the Storage Label to previously uploaded assets, run the",
@ -1329,6 +1374,7 @@
"original": "original",
"other": "Other",
"other_devices": "Other devices",
"other_entities": "Other entities",
"other_variables": "Other variables",
"owned": "Owned",
"owner": "Owner",
@ -1460,6 +1506,7 @@
"purchase_server_description_2": "Supporter status",
"purchase_server_title": "Server",
"purchase_settings_server_activated": "The server product key is managed by the admin",
"queue_status": "Queuing {count}/{total}",
"rating": "Star rating",
"rating_clear": "Clear rating",
"rating_count": "{count, plural, one {# star} other {# stars}}",
@ -1488,6 +1535,8 @@
"refreshing_faces": "Refreshing faces",
"refreshing_metadata": "Refreshing metadata",
"regenerating_thumbnails": "Regenerating thumbnails",
"remote": "Remote",
"remote_assets": "Remote Assets",
"remove": "Remove",
"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?",
@ -1495,7 +1544,9 @@
"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} removed from the album",
"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_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",
@ -1523,11 +1574,15 @@
"reset_password": "Reset password",
"reset_people_visibility": "Reset people visibility",
"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",
"resolve_duplicates": "Resolve duplicates",
"resolved_all_duplicates": "Resolved all duplicates",
"restore": "Restore",
"restore_all": "Restore all",
"restore_trash_action_prompt": "{count} restored from trash",
"restore_user": "Restore user",
"restored_asset": "Restored asset",
"resume": "Resume",
@ -1536,6 +1591,7 @@
"role": "Role",
"role_editor": "Editor",
"role_viewer": "Viewer",
"running": "Running",
"save": "Save",
"save_to_gallery": "Save to gallery",
"saved_api_key": "Saved API Key",
@ -1667,6 +1723,7 @@
"settings_saved": "Settings saved",
"setup_pin_code": "Setup a PIN code",
"share": "Share",
"share_action_prompt": "Shared {count} assets",
"share_add_photos": "Add photos",
"share_assets_selected": "{count} selected",
"share_dialog_preparing": "Preparing...",
@ -1768,6 +1825,7 @@
"sort_title": "Title",
"source": "Source",
"stack": "Stack",
"stack_action_prompt": "{count} stacked",
"stack_duplicates": "Stack duplicates",
"stack_select_one_photo": "Select one main photo for the stack",
"stack_selected_photos": "Stack selected photos",
@ -1787,6 +1845,7 @@
"storage_quota": "Storage Quota",
"storage_usage": "{used} of {available} used",
"submit": "Submit",
"success": "Success",
"suggestions": "Suggestions",
"sunrise_on_the_beach": "Sunrise on the beach",
"support": "Support",
@ -1796,6 +1855,8 @@
"sync": "Sync",
"sync_albums": "Sync 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",
"tag": "Tag",
"tag_assets": "Tag assets",
@ -1806,6 +1867,7 @@
"tag_updated": "Updated tag: {tag}",
"tagged_assets": "Tagged {count, plural, one {# asset} other {# assets}}",
"tags": "Tags",
"tap_to_run_job": "Tap to run job",
"template": "Template",
"theme": "Theme",
"theme_selection": "Theme selection",
@ -1838,6 +1900,7 @@
"total": "Total",
"total_usage": "Total usage",
"trash": "Trash",
"trash_action_prompt": "{count} moved to trash",
"trash_all": "Trash All",
"trash_count": "Trash {count, number}",
"trash_delete_asset": "Trash/Delete Asset",
@ -1855,9 +1918,11 @@
"unable_to_change_pin_code": "Unable to change PIN code",
"unable_to_setup_pin_code": "Unable to setup PIN code",
"unarchive": "Unarchive",
"unarchive_action_prompt": "{count} removed from Archive",
"unarchived_count": "{count, plural, other {Unarchived #}}",
"undo": "Undo",
"unfavorite": "Unfavorite",
"unfavorite_action_prompt": "{count} removed from Favorites",
"unhide_person": "Unhide person",
"unknown": "Unknown",
"unknown_country": "Unknown Country",
@ -1875,15 +1940,20 @@
"unselect_all_duplicates": "Unselect all duplicates",
"unselect_all_in": "Unselect all in {group}",
"unstack": "Un-stack",
"unstack_action_prompt": "{count} unstacked",
"unstacked_assets_count": "Un-stacked {count, plural, one {# asset} other {# assets}}",
"untagged": "Untagged",
"up_next": "Up next",
"updated_at": "Updated",
"updated_password": "Updated password",
"upload": "Upload",
"upload_action_prompt": "{count} queued for upload",
"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_title": "Upload Asset",
"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_skipped_duplicates": "Skipped {count, plural, one {# duplicate asset} other {# duplicate assets}}",
"upload_status_duplicates": "Duplicates",
@ -1892,6 +1962,7 @@
"upload_success": "Upload success, refresh the page to see new upload assets.",
"upload_to_immich": "Upload to Immich ({count})",
"uploading": "Uploading",
"uploading_media": "Uploading media",
"url": "URL",
"usage": "Usage",
"use_biometric": "Use biometric",
@ -1912,6 +1983,7 @@
"user_usage_stats_description": "View account usage statistics",
"username": "Username",
"users": "Users",
"users_added_to_album_count": "Added {count, plural, one {# user} other {# users}} to the album",
"utilities": "Utilities",
"validate": "Validate",
"validate_endpoint_error": "Please enter a valid URL",
@ -1930,6 +2002,7 @@
"view_album": "View Album",
"view_all": "View All",
"view_all_users": "View all users",
"view_details": "View Details",
"view_in_timeline": "View in timeline",
"view_link": "View link",
"view_links": "View links",

View File

@ -2,7 +2,7 @@
"about": "Acerca de",
"account": "Cuenta",
"account_settings": "Ajustes de la cuenta",
"acknowledge": "De acuerdo",
"acknowledge": "Aceptar",
"action": "Acción",
"action_common_update": "Actualizar",
"actions": "Acciones",
@ -14,13 +14,13 @@
"add_a_location": "Agregar ubicación",
"add_a_name": "Agregar nombre",
"add_a_title": "Agregar título",
"add_endpoint": "Añadir endpoint",
"add_endpoint": "Agregar endpoint",
"add_exclusion_pattern": "Agregar patrón de exclusión",
"add_import_path": "Agregar ruta de importación",
"add_location": "Agregar ubicación",
"add_more_users": "Agregar más usuarios",
"add_partner": "Agregar compañero",
"add_path": "Agregar carpeta",
"add_path": "Agregar ruta",
"add_photos": "Agregar fotos",
"add_tag": "Agregar etiqueta",
"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.",
"external_library_management": "Gestión de bibliotecas externas",
"face_detection": "Detección de caras",
"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 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.",
"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.",
"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.",
"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.",
"image_format": "Formato",
@ -166,6 +166,20 @@
"metadata_settings_description": "Administrar la configuración de metadatos",
"migration_job": "Migración",
"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_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 cargado, lanza el",
@ -196,6 +210,8 @@
"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_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_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>.",
@ -205,7 +221,7 @@
"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_description": "Cuota en GiB que se utilizará cuando no se proporcione ninguna por defecto.",
"oauth_timeout": "Expiración de solicitud",
"oauth_timeout": "Límite de tiempo para la solicitud",
"oauth_timeout_description": "Tiempo de espera de solicitudes en milisegundos",
"password_enable_description": "Iniciar sesión con correo electrónico y contraseña",
"password_settings": "Contraseña de Acceso",
@ -357,10 +373,12 @@
"admin_password": "Contraseña del Administrador",
"administration": "Administración",
"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_title": "[EXPERIMENTAL] Usar filtro alternativo de sincronización de álbumes del dispositivo",
"advanced_settings_log_level_title": "Nivel de registro: {level}",
"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_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_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_title": "Cabeceras Proxy",
@ -405,8 +423,8 @@
"albums": "Á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_description": "Orden de clasificación inicial de los activos al crear nuevos álbumes.",
"albums_feature_description": "Colecciones de activos que pueden compartirse con otros usuarios.",
"albums_default_sort_order_description": "Orden de clasificación inicial de los recursos al crear nuevos álbumes.",
"albums_feature_description": "Colecciones de recursos que pueden ser compartidos con otros usuarios.",
"all": "Todos",
"all_albums": "Todos los albums",
"all_people": "Todas las personas",
@ -427,6 +445,7 @@
"app_settings": "Ajustes de Aplicacion",
"appears_in": "Aparece en",
"archive": "Archivo",
"archive_action_prompt": "{count} añadidos al Archivo",
"archive_or_unarchive_photo": "Archivar o restaurar foto",
"archive_page_no_archived_assets": "No se encontraron elementos archivados",
"archive_page_title": "Archivo ({count})",
@ -464,13 +483,12 @@
"assets": "elementos",
"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_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_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_count": "{count, plural, one {# activo} other {# activos}}",
"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_downloaded_failed": "{count, plural, one {Descargado archivo # - {error} archivo fallido} other {Descargados # archivos - {error} archivos fallidos}}",
"assets_downloaded_successfully": "{count, plural, one {Archivo # descargado correctamente} other {Archivos # descargados correctamente}}",
"assets_downloaded_failed": "{count, plural, one {# archivo descargado - {error} archivo fallido} other {# archivos descargados - {error} archivos fallidos}}",
"assets_downloaded_successfully": "{count, plural, one {# archivo descargado exitosamente} other {# archivos descargados exitosamente}}",
"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_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}",
@ -703,7 +721,7 @@
"daily_title_text_date": "E dd, MMM",
"daily_title_text_date_year": "E dd de MMM, yyyy",
"dark": "Oscuro",
"darkTheme": "Activar tema oscuro",
"dark_theme": "Alternar tema oscuro",
"date_after": "Fecha posterior",
"date_and_time": "Fecha y Hora",
"date_before": "Fecha anterior",
@ -719,6 +737,7 @@
"default_locale": "Configuración regional predeterminada",
"default_locale_description": "Formatee fechas y números según la configuración regional de su navegador",
"delete": "Eliminar",
"delete_action_prompt": "{count} eliminados permanentemente",
"delete_album": "Eliminar álbum",
"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",
@ -732,6 +751,7 @@
"delete_key": "Eliminar clave",
"delete_library": "Eliminar biblioteca",
"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_force": "Borrar de todos modos",
"delete_others": "Eliminar otros",
@ -749,6 +769,7 @@
"direction": "Dirección",
"disabled": "Deshabilitado",
"disallow_edits": "Bloquear edición",
"discord": "Discord",
"discover": "Descubrir",
"discovered_devices": "Dispositivos descubiertos",
"dismiss_all_errors": "Descartar todos los errores",
@ -761,6 +782,7 @@
"documentation": "Documentación",
"done": "Hecho",
"download": "Descargar",
"download_action_prompt": "Descargando {count} archivos",
"download_canceled": "Descarga cancelada",
"download_complete": "Descarga completada",
"download_enqueue": "Descarga en cola",
@ -798,6 +820,7 @@
"edit_key": "Editar clave",
"edit_link": "Editar enlace",
"edit_location": "Editar ubicación",
"edit_location_action_prompt": "{count} ubicaciones actualizadas",
"edit_location_dialog_title": "Ubicación",
"edit_name": "Cambiar nombre",
"edit_people": "Editar persona",
@ -983,6 +1006,7 @@
"failed_to_load_assets": "Error al cargar los activos",
"failed_to_load_folder": "No se pudo cargar la carpeta",
"favorite": "Favorito",
"favorite_action_prompt": "{count} añadidos a Favoritos",
"favorite_or_unfavorite_photo": "Foto favorita o no favorita",
"favorites": "Favoritos",
"favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos",
@ -1126,6 +1150,7 @@
"library_page_sort_created": "Creado más recientemente",
"library_page_sort_last_modified": "Última modificación",
"library_page_sort_title": "Título del álbum",
"licenses": "Licencias",
"light": "Claro",
"like_deleted": "Me gusta eliminado",
"link_motion_video": "Enlazar vídeo en movimiento",
@ -1135,7 +1160,7 @@
"list": "Listar",
"loading": "Cargando",
"loading_search_results_failed": "Error al cargar los resultados de la búsqueda",
"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_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",
"location_permission": "Permiso de ubicación",
@ -1238,13 +1263,14 @@
"merged_people_count": "Fusionada {count, plural, one {# persona} other {# personas}}",
"minimize": "Minimizar",
"minute": "Minuto",
"missing": "Perdido",
"missing": "Faltante",
"model": "Modelo",
"month": "Mes",
"monthly_title_text_date_format": "MMMM y",
"monthly_title_text_date_format": "MMMM a",
"more": "Mas",
"move": "Mover",
"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_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",
@ -1277,7 +1303,7 @@
"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_to_show": "No hay elementos a mostrar",
"no_cast_devices_found": "Dispositivos de difusión no encontrados",
"no_cast_devices_found": "No se encontraron dispositivos de transmisión",
"no_duplicates_found": "No se encontraron duplicados.",
"no_exif_info_available": "No hay información exif disponible",
"no_explore_results_message": "Sube más fotos para explorar tu colección.",
@ -1494,7 +1520,9 @@
"remove_custom_date_range": "Eliminar intervalo de fechas personalizado",
"remove_deleted_assets": "Eliminar archivos sin conexión",
"remove_from_album": "Eliminar del álbum",
"remove_from_album_action_prompt": "{count} eliminado del álbum",
"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_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",
@ -1558,17 +1586,17 @@
"search_city": "Buscar ciudad...",
"search_country": "Buscar país...",
"search_filter_apply": "Aplicar filtros",
"search_filter_camera_title": "Elige tipo de cámara",
"search_filter_camera_title": "Elegir tipo de cámara",
"search_filter_date": "Fecha",
"search_filter_date_interval": "{start} al {end}",
"search_filter_date_title": "Selecciona un intervalo de fechas",
"search_filter_date_title": "Seleccionar un intervalo de fechas",
"search_filter_display_option_not_in_album": "No en álbum",
"search_filter_display_options": "Opciones de visualización",
"search_filter_filename": "Buscar por nombre de archivo",
"search_filter_location": "Ubicación",
"search_filter_location_title": "Seleccionar una ubicación",
"search_filter_media_type": "Tipo de archivo",
"search_filter_media_type_title": "Selecciona el tipo de archivo",
"search_filter_media_type_title": "Seleccionar el tipo de archivo",
"search_filter_people_title": "Seleccionar personas",
"search_for": "Buscar",
"search_for_existing_person": "Buscar persona existente",
@ -1591,23 +1619,23 @@
"search_people": "Buscar personas",
"search_places": "Buscar lugar",
"search_rating": "Buscar por calificación...",
"search_result_page_new_search_hint": "Nueva Busqueda",
"search_result_page_new_search_hint": "Nueva Búsqueda",
"search_settings": "Ajustes de la búsqueda",
"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_2": "m:tu-término-de-búsqueda",
"search_tags": "Buscando etiquetas...",
"search_tags": "Buscar etiquetas...",
"search_timezone": "Buscar zona horaria...",
"search_type": "Tipo de búsqueda",
"search_your_photos": "Busca tus fotos",
"searching_locales": "Buscando sitios...",
"second": "Segundo",
"see_all_people": "Ver todas las personas",
"select": "Selecciona",
"select": "Seleccionar",
"select_album_cover": "Seleccionar portada del álbum",
"select_all": "Seleccionar todo",
"select_all_duplicates": "Seleccionar todos los duplicados",
"select_all_in": "Selecciona todos en {group}",
"select_all_in": "Seleccionar todos en {group}",
"select_avatar_color": "Seleccionar color del avatar",
"select_face": "Seleccionar cara",
"select_featured_photo": "Seleccionar foto principal",
@ -1638,7 +1666,7 @@
"set_date_of_birth": "Establecer fecha de nacimiento",
"set_profile_picture": "Establecer foto de perfil",
"set_slideshow_to_fullscreen": "Mostrar diapositivas en pantalla completa",
"set_stack_primary_asset": "Establecer como activo principal",
"set_stack_primary_asset": "Establecer como recurso 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_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",
@ -1666,6 +1694,7 @@
"settings_saved": "Ajustes guardados",
"setup_pin_code": "Establecer un PIN",
"share": "Compartir",
"share_action_prompt": "{count} recursos compartidos",
"share_add_photos": "Agregar fotos",
"share_assets_selected": "{count} seleccionado(s)",
"share_dialog_preparing": "Preparando...",
@ -1767,6 +1796,7 @@
"sort_title": "Título",
"source": "Origen",
"stack": "Apilar",
"stack_action_prompt": "{count} apilados",
"stack_duplicates": "Apilar duplicados",
"stack_select_one_photo": "Selecciona una imagen principal para la pila",
"stack_selected_photos": "Apilar fotos seleccionadas",
@ -1776,7 +1806,7 @@
"start_date": "Fecha de inicio",
"state": "Estado",
"status": "Estado",
"stop_casting": "Parar difusión",
"stop_casting": "Detener transmisión",
"stop_motion_photo": "Parar foto en movimiento",
"stop_photo_sharing": "¿Dejar de compartir tus fotos?",
"stop_photo_sharing_description": "{partner} ya no podrá acceder a tus fotos.",
@ -1837,6 +1867,7 @@
"total": "Total",
"total_usage": "Uso total",
"trash": "Papelera",
"trash_action_prompt": "{count} movidos a la papelera",
"trash_all": "Descartar todo",
"trash_count": "Descartar {count, number}",
"trash_delete_asset": "Borrar/Eliminar archivo",
@ -1854,9 +1885,11 @@
"unable_to_change_pin_code": "No se ha podido cambiar el PIN",
"unable_to_setup_pin_code": "No se ha podido establecer el PIN",
"unarchive": "Desarchivar",
"unarchive_action_prompt": "{count} eliminados del archivo",
"unarchived_count": "{count, plural, one {# No archivado} other {# No archivados}}",
"undo": "Deshacer",
"unfavorite": "Retirar favorito",
"unfavorite_action_prompt": "{count} eliminados de favoritos",
"unhide_person": "Mostrar persona",
"unknown": "Desconocido",
"unknown_country": "País desconocido",
@ -1874,7 +1907,9 @@
"unselect_all_duplicates": "Deseleccionar todos los duplicados",
"unselect_all_in": "Deselecciona todos en {group}",
"unstack": "Desapilar",
"unstack_action_prompt": "{count} desapilado(s)",
"unstacked_assets_count": "Desapilado(s) {count, plural, one {# elemento} other {# elementos}}",
"untagged": "Sin etiqueta",
"up_next": "A continuación",
"updated_at": "Actualizado",
"updated_password": "Contraseña actualizada",
@ -1911,6 +1946,7 @@
"user_usage_stats_description": "Ver estadísticas de uso de la cuenta",
"username": "Nombre de usuario",
"users": "Usuarios",
"users_added_to_album_count": "{count, plural, one {# usuario agregado} other {# usuarios agregados}} al álbum",
"utilities": "Utilidades",
"validate": "Validar",
"validate_endpoint_error": "Por favor, introduce una URL válida",

View File

@ -33,11 +33,11 @@
"added_to_favorites": "Lisatud lemmikutesse",
"added_to_favorites_count": "{count, number} pilti lisatud lemmikutesse",
"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 failide ignoreerimiseks kasuta \"**/*.tif\". Absouutse tee ignoreerimiseks kasuta \"/path/to/ignore/**\".",
"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/**\".",
"admin_user": "Administraator",
"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.",
"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.",
"authentication_settings": "Autentimise seaded",
"authentication_settings_description": "Halda parooli, OAuth ja muid autentimise seadeid",
"authentication_settings_description": "Halda parooli, OAuth'i 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_reenable": "Et taas lubada, kasuta <link>serveri käsku</link>.",
"background_task_job": "Tausttegumid",
@ -47,26 +47,26 @@
"backup_settings": "Andmebaasi tõmmiste seaded",
"backup_settings_description": "Halda andmebaasi tõmmiste seadeid.",
"cleared_jobs": "Tööted eemaldatud: {job}",
"config_set_by_file": "Konfiguratsioon on määratud konfifaili abil",
"config_set_by_file": "Konfiguratsioon on määratud konfiguratsioonifaili abil",
"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 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 toimingut ei saa tagasi võtta. Failid jäävad kettale alles.",
"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_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?",
"create_job": "Lisa tööde",
"cron_expression": "Cron avaldis",
"cron_expression_description": "Sea skaneerimise intervall cron formaadis. Rohkema info jaoks vaata nt. <link>Crontab Guru</link>",
"cron_expression_description": "Määra skaneerimise intervall cron formaadis. Rohkema info jaoks vaata nt. <link>Crontab Guru</link>",
"cron_expression_presets": "Eelseadistatud cron avaldised",
"disable_login": "Keela sisselogimine",
"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 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 selle 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",
"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ä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.",
"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.",
"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}",
"force_delete_user_warning": "HOIATUS: See kustutab koheselt kasutaja ja kõik üksused. Seda ei saa tagasi võtta ja faile ei saa taastada.",
"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.",
"image_format": "Formaat",
"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",
@ -77,9 +77,9 @@
"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_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, aga 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, kuid 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_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_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_title": "Eelvaate seaded",
"image_quality": "Kvaliteet",
"image_resolution": "Resolutsioon",
@ -92,7 +92,7 @@
"job_concurrency": "{job} samaaegsus",
"job_created": "Tööde lisatud",
"job_not_concurrency_safe": "Seda töödet pole ohutu samaaegselt käivitada.",
"job_settings": "Tööte seaded",
"job_settings": "Töödete seaded",
"job_settings_description": "Halda töödete samaaegsust",
"job_status": "Tööte seisund",
"jobs_delayed": "{jobCount, plural, other {# edasi lükatud}}",
@ -166,6 +166,20 @@
"metadata_settings_description": "Halda metaandmete seadeid",
"migration_job": "Migratsioon",
"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_pattern_added": "Mustreid ei ole",
"note_apply_storage_label_previous_assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "Mobiilne ümbersuunamise URI",
"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_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_description": "Halda OAuth sisselogimise seadeid",
"oauth_settings_more_details": "Selle funktsiooni kohta rohkem teada saamiseks loe <link>dokumentatsiooni</link>.",
@ -357,10 +373,12 @@
"admin_password": "Administraatori parool",
"administration": "Administratsioon",
"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_title": "[EKSPERIMENTAALNE] Kasuta alternatiivset seadme albumi sünkroonimise filtrit",
"advanced_settings_log_level_title": "Logimistase: {level}",
"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_subtitle": "Mõned seadmed laadivad lokaalsete üksuste pisipilte piinavalt aeglaselt. Aktiveeri see seadistus, et laadida selle asemel 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_title": "Vaheserveri päised",
@ -388,6 +406,7 @@
"album_options": "Albumi valikud",
"album_remove_user": "Eemalda kasutaja?",
"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_updated": "Album muudetud",
"album_updated_setting_description": "Saa teavitus e-posti teel, kui jagatud albumis on uusi üksuseid",
@ -407,6 +426,7 @@
"albums_default_sort_order": "Vaikimisi albumi järjestus",
"albums_default_sort_order_description": "Uute albumite lisamisel üksuste esialgne järjekord.",
"albums_feature_description": "Üksuste kollektsioonid, mida saab teiste kasutajatega jagada.",
"albums_on_device_count": "Albumid seadmel ({count})",
"all": "Kõik",
"all_albums": "Kõik albumid",
"all_people": "Kõik isikud",
@ -427,6 +447,7 @@
"app_settings": "Rakenduse seaded",
"appears_in": "Albumid",
"archive": "Arhiiv",
"archive_action_prompt": "{count} lisatud arhiivi",
"archive_or_unarchive_photo": "Arhiveeri või taasta foto",
"archive_page_no_archived_assets": "Arhiveeritud üksuseid ei leitud",
"archive_page_title": "Arhiveeri ({count})",
@ -464,7 +485,6 @@
"assets": "Üksused",
"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_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_count": "{count, plural, one {# üksus} other {# üksust}}",
"assets_deleted_permanently": "{count} üksus(t) jäädavalt kustutatud",
@ -553,6 +573,8 @@
"backup_options_page_title": "Varundamise valikud",
"backup_setting_subtitle": "Halda taustal ja esiplaanil üleslaadimise seadeid",
"backward": "Tagasi",
"beta_sync": "Beeta sünkroonimise staatus",
"beta_sync_subtitle": "Halda uut sünkroonimissüsteemi",
"biometric_auth_enabled": "Biomeetriline autentimine lubatud",
"biometric_locked_out": "Biomeetriline autentimine on blokeeritud",
"biometric_no_options": "Biomeetrilisi valikuid ei ole",
@ -570,7 +592,7 @@
"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_duplicated_assets_clear_button": "TÜHJENDA",
"cache_settings_duplicated_assets_subtitle": "Fotod ja videod, mis on rakenduse poolt mustfiltreeritud",
"cache_settings_duplicated_assets_subtitle": "Fotod ja videod, mis on rakenduse poolt ignoreeritud",
"cache_settings_duplicated_assets_title": "Dubleeritud üksused ({count})",
"cache_settings_statistics_album": "Kogu pisipildid",
"cache_settings_statistics_full": "Täismõõdus pildid",
@ -587,6 +609,7 @@
"cancel": "Katkesta",
"cancel_search": "Katkesta otsing",
"canceled": "Tühistatud",
"canceling": "Tühistamine",
"cannot_merge_people": "Ei saa isikuid ühendada",
"cannot_undo_this_action": "Sa ei saa seda tagasi võtta!",
"cannot_update_the_description": "Kirjelduse muutmine ebaõnnestus",
@ -703,7 +726,7 @@
"daily_title_text_date": "d. MMMM",
"daily_title_text_date_year": "d. MMMM yyyy",
"dark": "Tume",
"darkTheme": "Lülita tume teema",
"dark_theme": "Lülita tume teema",
"date_after": "Kuupäev pärast",
"date_and_time": "Kuupäev ja kellaaeg",
"date_before": "Kuupäev enne",
@ -719,6 +742,7 @@
"default_locale": "Vaikimisi lokaat",
"default_locale_description": "Vorminda kuupäevad ja numbrid vastavalt brauseri lokaadile",
"delete": "Kustuta",
"delete_action_prompt": "{count} jäädavalt kustutatud",
"delete_album": "Kustuta album",
"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",
@ -732,6 +756,7 @@
"delete_key": "Kustuta võti",
"delete_library": "Kustuta kogu",
"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_force": "Kustuta sellegipoolest",
"delete_others": "Kustuta teised",
@ -745,6 +770,7 @@
"description": "Kirjeldus",
"description_input_hint_text": "Lisa kirjeldus...",
"description_input_submit_error": "Viga kirjelduse muutmisel, rohkem infot leiad logist",
"deselect_all": "Eemalda kõik valikust",
"details": "Üksikasjad",
"direction": "Suund",
"disabled": "Välja lülitatud",
@ -762,6 +788,7 @@
"documentation": "Dokumentatsioon",
"done": "Tehtud",
"download": "Laadi alla",
"download_action_prompt": "{count} üksust laaditakse alla",
"download_canceled": "Allalaadimine katkestatud",
"download_complete": "Allalaadimine lõpetatud",
"download_enqueue": "Allalaadimine ootel",
@ -799,6 +826,7 @@
"edit_key": "Muuda võtit",
"edit_link": "Muuda linki",
"edit_location": "Muuda asukohta",
"edit_location_action_prompt": "{count} asukoht muudetud",
"edit_location_dialog_title": "Asukoht",
"edit_name": "Muuda nime",
"edit_people": "Muuda isikuid",
@ -817,6 +845,7 @@
"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!",
"enable": "Luba",
"enable_backup": "Luba varundus",
"enable_biometric_auth_description": "Biomeetrilise autentimise lubamiseks sisesta oma PIN-kood",
"enabled": "Lubatud",
"end_date": "Lõppkuupäev",
@ -984,6 +1013,7 @@
"failed_to_load_assets": "Üksuste laadimine ebaõnnestus",
"failed_to_load_folder": "Kausta laadimine ebaõnnestus",
"favorite": "Lemmik",
"favorite_action_prompt": "{count} lisatud lemmikutesse",
"favorite_or_unfavorite_photo": "Lisa foto lemmikutesse või eemalda lemmikutest",
"favorites": "Lemmikud",
"favorites_page_no_favorites": "Lemmikuid üksuseid ei leitud",
@ -1023,6 +1053,9 @@
"haptic_feedback_switch": "Luba haptiline tagasiside",
"haptic_feedback_title": "Haptiline tagasiside",
"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_field_validator_msg": "Väärtus ei saa olla tühi",
"header_settings_header_name_input": "Päise nimi",
@ -1055,6 +1088,7 @@
"host": "Host",
"hour": "Tund",
"id": "ID",
"idle": "Jõude",
"ignore_icloud_photos": "Ignoreeri iCloud fotosid",
"ignore_icloud_photos_description": "Fotosid, mis on iCloud'is, ei laadita üles Immich'i serverisse",
"image": "Pilt",
@ -1099,7 +1133,7 @@
"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_processes_queued": "{count, plural, one {{count} taustaprotsess järjekorras} other {{count} taustaprotsessi järjekorras}}",
"ios_debug_info_processing_ran_at": "Töötlemine käis {dateTime}",
"ios_debug_info_processing_ran_at": "Töötlemine toimus {dateTime}",
"items_count": "{count, plural, one {# üksus} other {# üksust}}",
"jobs": "Tööted",
"keep": "Jäta alles",
@ -1127,6 +1161,7 @@
"library_page_sort_created": "Loomise aeg",
"library_page_sort_last_modified": "Viimase muutmise aeg",
"library_page_sort_title": "Albumi pealkiri",
"licenses": "Litsentsid",
"light": "Hele",
"like_deleted": "Meeldimine kustutatud",
"link_motion_video": "Lingi liikuv video",
@ -1136,7 +1171,9 @@
"list": "Loend",
"loading": "Laadimine",
"loading_search_results_failed": "Otsitulemuste laadimine ebaõnnestus",
"local": "Lokaalne üksus",
"local_asset_cast_failed": "Ei saa edastada üksust, mis pole serverisse üles laaditud",
"local_assets": "Lokaalsed üksused",
"local_network": "Kohalik võrk",
"local_network_sheet_info": "Rakendus ühendub valitud Wi-Fi võrgus olles serveriga selle URL-i kaudu",
"location_permission": "Asukoha luba",
@ -1246,6 +1283,7 @@
"more": "Rohkem",
"move": "Liiguta",
"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_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",
@ -1292,6 +1330,7 @@
"no_results": "Vasteid pole",
"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_uploads_in_progress": "Üleslaadimisi käimas ei ole",
"not_in_any_album": "Pole üheski albumis",
"not_selected": "Ei ole valitud",
"note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
@ -1329,6 +1368,7 @@
"original": "originaal",
"other": "Muud",
"other_devices": "Muud seadmed",
"other_entities": "Muud objektid",
"other_variables": "Muud muutujad",
"owned": "Minu omad",
"owner": "Omanik",
@ -1460,6 +1500,7 @@
"purchase_server_description_2": "Toetaja staatus",
"purchase_server_title": "Server",
"purchase_settings_server_activated": "Serveri tootevõtit haldab administraator",
"queue_status": "Järjekorras {count}/{total}",
"rating": "Hinnang",
"rating_clear": "Tühjenda hinnang",
"rating_count": "{count, plural, one {# tärn} other {# tärni}}",
@ -1488,6 +1529,8 @@
"refreshing_faces": "Nägude värskendamine",
"refreshing_metadata": "Metaandmete värskendamine",
"regenerating_thumbnails": "Pisipiltide uuesti genereerimine",
"remote": "Kaugüksus",
"remote_assets": "Kaugüksused",
"remove": "Eemalda",
"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?",
@ -1495,7 +1538,9 @@
"remove_custom_date_range": "Eemalda kohandatud kuupäevavahemik",
"remove_deleted_assets": "Eemalda kustutatud üksused",
"remove_from_album": "Eemalda albumist",
"remove_from_album_action_prompt": "{count} eemaldatud albumist",
"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_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",
@ -1523,11 +1568,15 @@
"reset_password": "Lähtesta parool",
"reset_people_visibility": "Lähtesta isikute nähtavus",
"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",
"resolve_duplicates": "Lahenda duplikaadid",
"resolved_all_duplicates": "Kõik duplikaadid lahendatud",
"restore": "Taasta",
"restore_all": "Taasta kõik",
"restore_trash_action_prompt": "{count} prügikastust taastatud",
"restore_user": "Taasta kasutaja",
"restored_asset": "Üksus taastatud",
"resume": "Jätka",
@ -1536,6 +1585,7 @@
"role": "Roll",
"role_editor": "Muutja",
"role_viewer": "Vaataja",
"running": "Käimas",
"save": "Salvesta",
"save_to_gallery": "Salvesta galeriisse",
"saved_api_key": "API võti salvestatud",
@ -1667,6 +1717,7 @@
"settings_saved": "Seaded salvestatud",
"setup_pin_code": "Seadista PIN-kood",
"share": "Jaga",
"share_action_prompt": "Jagatud {count} üksust",
"share_add_photos": "Lisa fotosid",
"share_assets_selected": "{count} valitud",
"share_dialog_preparing": "Ettevalmistamine...",
@ -1768,6 +1819,7 @@
"sort_title": "Pealkiri",
"source": "Lähtekood",
"stack": "Virnasta",
"stack_action_prompt": "{count} virnastatud",
"stack_duplicates": "Virnasta duplikaadid",
"stack_select_one_photo": "Vali virnale kaanefoto",
"stack_selected_photos": "Virnasta valitud fotod",
@ -1787,6 +1839,7 @@
"storage_quota": "Talletuskvoot",
"storage_usage": "{used}/{available} kasutatud",
"submit": "Saada",
"success": "Õnnestus",
"suggestions": "Soovitused",
"sunrise_on_the_beach": "Päikesetõus rannal",
"support": "Tugi",
@ -1796,6 +1849,8 @@
"sync": "Sünkrooni",
"sync_albums": "Sünkrooni albumid",
"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",
"tag": "Silt",
"tag_assets": "Sildista üksuseid",
@ -1806,6 +1861,7 @@
"tag_updated": "Muudetud silt: {tag}",
"tagged_assets": "{count, plural, one {# üksus} other {# üksust}} sildistatud",
"tags": "Sildid",
"tap_to_run_job": "Puuduta tööte käivitamiseks",
"template": "Mall",
"theme": "Teema",
"theme_selection": "Teema valik",
@ -1838,6 +1894,7 @@
"total": "Kokku",
"total_usage": "Kogukasutus",
"trash": "Prügikast",
"trash_action_prompt": "{count} liigutatud prügikasti",
"trash_all": "Kõik prügikasti",
"trash_count": "Liiguta {count, number} prügikasti",
"trash_delete_asset": "Kustuta üksus",
@ -1855,9 +1912,11 @@
"unable_to_change_pin_code": "PIN-koodi muutmine ebaõnnestus",
"unable_to_setup_pin_code": "PIN-koodi seadistamine ebaõnnestus",
"unarchive": "Taasta arhiivist",
"unarchive_action_prompt": "{count} eemaldatud arhiivist",
"unarchived_count": "{count, plural, other {# arhiivist taastatud}}",
"undo": "Võta tagasi",
"unfavorite": "Eemalda lemmikutest",
"unfavorite_action_prompt": "{count} eemaldatud lemmikutest",
"unhide_person": "Ära peida isikut",
"unknown": "Teadmata",
"unknown_country": "Tundmatu riik",
@ -1875,12 +1934,15 @@
"unselect_all_duplicates": "Ära vali duplikaate",
"unselect_all_in": "Ära vali ühtegi grupis {group}",
"unstack": "Eralda",
"unstack_action_prompt": "{count} eraldatud",
"unstacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} eraldatud",
"untagged": "Sildistamata",
"up_next": "Järgmine",
"updated_at": "Uuendatud",
"updated_password": "Parool muudetud",
"upload": "Laadi üles",
"upload_concurrency": "Üleslaadimise samaaegsus",
"upload_details": "Üleslaadimise üksikasjad",
"upload_dialog_info": "Kas soovid valitud üksuse(d) serverisse varundada?",
"upload_dialog_title": "Üksuse üleslaadimine",
"upload_errors": "Üleslaadimine lõpetatud {count, plural, one {# veaga} other {# veaga}}, uute üksuste nägemiseks värskenda lehte.",
@ -1912,6 +1974,7 @@
"user_usage_stats_description": "Vaata konto kasutuse statistikat",
"username": "Kasutajanimi",
"users": "Kasutajad",
"users_added_to_album_count": "{count, plural, one {# kasutaja} other {# kasutajat}} lisatud albumisse",
"utilities": "Tööriistad",
"validate": "Valideeri",
"validate_endpoint_error": "Sisesta korrektne URL",
@ -1930,6 +1993,7 @@
"view_album": "Vaata albumit",
"view_all": "Vaata kõiki",
"view_all_users": "Vaata kõiki kasutajaid",
"view_details": "Vaata üksikasju",
"view_in_timeline": "Vaata ajajoonel",
"view_link": "Vaata linki",
"view_links": "Vaata linke",

View File

@ -166,6 +166,20 @@
"metadata_settings_description": "Hallitse metatietoja",
"migration_job": "Migraatio",
"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_pattern_added": "Kaavoja ei lisättynä",
"note_apply_storage_label_previous_assets": "Huom: Asettaaksesi nimikkeen aiemmin ladatulle aineistolle, aja",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-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_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_description": "Hallitse OAuth-kirjautumisen asetuksia",
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
@ -244,6 +260,7 @@
"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_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_settings": "Tallennustilan malli",
"storage_template_settings_description": "Hallitse palvelimelle ladatun aineiston kansiorakennetta ja tiedostonimiä",
@ -403,6 +420,9 @@
"album_with_link_access": "Anna kenen tahansa nähdä linkin kautta tämän albumin valokuvat ja henkilöt.",
"albums": "Albumit",
"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_albums": "Kaikki albumit",
"all_people": "Kaikki henkilöt",
@ -423,6 +443,7 @@
"app_settings": "Sovellusasetukset",
"appears_in": "Esiintyy albumeissa",
"archive": "Arkisto",
"archive_action_prompt": "{count} lisätty arkistoon",
"archive_or_unarchive_photo": "Arkistoi kuva tai palauta arkistosta",
"archive_page_no_archived_assets": "Arkistoituja kohteita ei löytynyt",
"archive_page_title": "Arkisto ({count})",
@ -460,10 +481,12 @@
"assets": "Kohteet",
"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_name_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}} {hasName, select, true {<b>{name}</b>} other {uuteen albumiin}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Kohdetta} other {Kohdetta}} ei voida lisätä albumiin",
"assets_count": "{count, plural, one {# media} other {# mediaa}}",
"assets_deleted_permanently": "{count} kohdetta poistettu pysyvästi",
"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_permanently_deleted_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
"assets_removed_count": "{count, plural, one {# media} other {# mediaa}} poistettu",
@ -478,6 +501,7 @@
"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_title": "Automaattinen URL-osoitteen vaihto",
"autoplay_slideshow": "Toista diaesitys automaattisesti",
"back": "Takaisin",
"back_close_deselect": "Palaa, sulje tai poista valinnat",
"background_location_permission": "Taustasijainnin käyttöoikeus",
@ -582,7 +606,8 @@
"cannot_merge_people": "Ihmisiä ei voitu yhdistää",
"cannot_undo_this_action": "Et voi perua tätä toimintoa!",
"cannot_update_the_description": "Kuvausta ei voi päivittää",
"cast": "Lähettää",
"cast": "Suoratoisto",
"cast_description": "Määritä saatavilla olevat suoratoistopalvelut",
"change_date": "Vaihda päiväys",
"change_description": "Muuta kuvausta",
"change_display_order": "Muuta näyttöjärjestystä",
@ -641,6 +666,7 @@
"confirm_password": "Vahvista salasana",
"confirm_tag_face": "Haluatko merkitä nämä kasvot nimellä {name}?",
"confirm_tag_face_unnamed": "Merkitäänkö nämä kasvot?",
"connected_device": "Yhdistetty laite",
"connected_to": "Yhdistetty",
"contain": "Mahduta",
"context": "Konteksti",
@ -693,6 +719,7 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Tumma",
"dark_theme": "Vaihda tumma teema",
"date_after": "Päivämäärän jälkeen",
"date_and_time": "Päivämäärä ja aika",
"date_before": "Päivä ennen",
@ -708,6 +735,7 @@
"default_locale": "Oletuskieliasetus",
"default_locale_description": "Muotoile päivämäärät ja numerot selaimesi kielen mukaan",
"delete": "Poista",
"delete_action_prompt": "{count} poistettu pysyvästi",
"delete_album": "Poista albumi",
"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",
@ -740,12 +768,13 @@
"disallow_edits": "Älä salli muokkauksia",
"discord": "Discord",
"discover": "Tutki",
"discovered_devices": "Löydetyt laitteet",
"dismiss_all_errors": "Sivuuta kaikki virheet",
"dismiss_error": "Sivuuta virhe",
"display_options": "Näyttöasetukset",
"display_order": "Näyttöjärjestys",
"display_original_photos": "Näytä alkuperäiset kuvat",
"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.",
"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.",
"do_not_show_again": "Älä näytä tätä enää",
"documentation": "Dokumentaatio",
"done": "Valmis",
@ -787,6 +816,7 @@
"edit_key": "Muokkaa avainta",
"edit_link": "Muokkaa linkkiä",
"edit_location": "Muokkaa sijaintia",
"edit_location_action_prompt": "{count} sijaintia muokattu",
"edit_location_dialog_title": "Sijainti",
"edit_name": "Muokkaa nimeä",
"edit_people": "Muokkaa henkilöitä",
@ -972,6 +1002,7 @@
"failed_to_load_assets": "Kohteiden lataus epäonnistui",
"failed_to_load_folder": "Kansion lataaminen epäonnistui",
"favorite": "Suosikki",
"favorite_action_prompt": "{count} lisätty suosikkeihin",
"favorite_or_unfavorite_photo": "Suosikki- tai ei-suosikkikuva",
"favorites": "Suosikit",
"favorites_page_no_favorites": "Suosikkikohteita ei löytynyt",
@ -1086,6 +1117,8 @@
"ios_debug_info_last_sync_at": "Viimeisin synkronisointi {dateTime}",
"ios_debug_info_no_processes_queued": "Ei taustaprosesseja jonossa",
"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}}",
"jobs": "Taustatehtävät",
"keep": "Säilytä",
@ -1094,6 +1127,9 @@
"kept_this_deleted_others": "Tämä kohde säilytettiin. {count, plural, one {# asset} other {# assets}} poistettiin",
"keyboard_shortcuts": "Pikanäppäimet",
"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",
"last_seen": "Viimeksi nähty",
"latest_version": "Viimeisin versio",
@ -1119,6 +1155,7 @@
"list": "Lista",
"loading": "Ladataan",
"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_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",
@ -1132,6 +1169,7 @@
"locked_folder": "Lukittu kansio",
"log_out": "Kirjaudu ulos",
"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_device": "Laite kirjattu ulos",
"login": "Kirjaudu",
@ -1220,13 +1258,14 @@
"merged_people_count": "{count, plural, one {# Henkilö} other {# henkilöä}} yhdistetty",
"minimize": "PIenennä",
"minute": "Minuutti",
"missing": "Puuttuu",
"missing": "Puuttuvat",
"model": "Malli",
"month": "Kuukauden mukaan",
"monthly_title_text_date_format": "MMMM y",
"more": "Enemmän",
"move": "Siirrä",
"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_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",
@ -1259,6 +1298,7 @@
"no_archived_assets_message": "Arkistoi kuvia ja videoita piilottaaksesi ne kuvat näkymästä",
"no_assets_message": "NAPAUTA LATAAKSESI ENSIMMÄISEN KUVASI",
"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_exif_info_available": "EXIF-tietoa ei saatavilla",
"no_explore_results_message": "Lataa lisää kuvia tutkiaksesi kokoelmaasi.",
@ -1291,8 +1331,11 @@
"oldest_first": "Vanhin ensin",
"on_this_device": "Laitteella",
"onboarding": "Käyttöönotto",
"onboarding_privacy_description": "Seuraavat (valinnaiset) ominaisuudet perustuvat ulkoisiin palveluihin, ja ne voidaan poistaa käytöstä milloin tahansa hallinta asetuksista.",
"onboarding_locale_description": "Valitse haluamasi kieli. Voit muuttaa kieliasetuksia myöhemmin 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_user_welcome_description": "Aloitetaan!",
"onboarding_welcome_user": "Tervetuloa {user}",
"online": "Online",
"only_favorites": "Vain suosikit",
@ -1392,7 +1435,7 @@
"previous_or_next_photo": "Kuva seuraava/edellinen",
"previous_or_next_year": "Vuosi seuraava/edellinen",
"primary": "Ensisijainen",
"privacy": "Yksityisyys",
"privacy": "Tietosuoja",
"profile": "Profiili",
"profile_drawer_app_logs": "Lokit",
"profile_drawer_client_out_of_date_major": "Sovelluksen mobiiliversio on vanhentunut. Päivitä viimeisimpään merkittävään versioon.",
@ -1472,12 +1515,15 @@
"remove_custom_date_range": "Poista aikaväliltä",
"remove_deleted_assets": "Poista Offline-tiedostot",
"remove_from_album": "Poista albumista",
"remove_from_album_action_prompt": "{count} poistettu albumista",
"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_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_memory": "Tyhjennä muisti",
"remove_photo_from_memory": "Poista kuva muistista",
"remove_tag": "Poista tunniste",
"remove_url": "Poista URL",
"remove_user": "Poista käyttäjä",
"removed_api_key": "API-avain {name} poistettu",
@ -1584,6 +1630,7 @@
"select_album_cover": "Valitse albmin kansi",
"select_all": "Valitse kaikki",
"select_all_duplicates": "Valitse kaikki kaksoiskappaleet",
"select_all_in": "Valitse kaikki {group}",
"select_avatar_color": "Valitse avatarin väri",
"select_face": "Valitse kasvo",
"select_featured_photo": "Valitse esittelykuva",
@ -1604,6 +1651,7 @@
"server_info_box_server_url": "Palvelimen URL-osoite",
"server_offline": "Palvelin Offline-tilassa",
"server_online": "Palvelin Online-tilassa",
"server_privacy": "Palvelimen tietosuoja",
"server_stats": "Palvelimen tilastot",
"server_version": "Palvelimen versio",
"set": "Aseta",
@ -1613,6 +1661,7 @@
"set_date_of_birth": "Aseta syntymäaika",
"set_profile_picture": "Aseta profiilikuva",
"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_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",
@ -1750,6 +1799,7 @@
"start_date": "Alkupäivä",
"state": "Maakunta",
"status": "Tila",
"stop_casting": "Lopeta suoratoisto",
"stop_motion_photo": "Pysäytä liikkuva kuva",
"stop_photo_sharing": "Lopetetaanko kuvien jakaminen?",
"stop_photo_sharing_description": "{partner} ei enää pääse kuviisi.",
@ -1769,7 +1819,7 @@
"sync_albums": "Synkronoi albumit",
"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ä",
"tag": "Lisää tunniste",
"tag": "Tunniste",
"tag_assets": "Lisää tunnisteita",
"tag_created": "Luotu tunniste: {tag}",
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan",
@ -1810,6 +1860,7 @@
"total": "Yhteensä",
"total_usage": "Käyttö yhteensä",
"trash": "Roskakori",
"trash_action_prompt": "{count} siirretty roskakoriin",
"trash_all": "Vie kaikki roskakoriin",
"trash_count": "Roskakori {count, number}",
"trash_delete_asset": "Poista / vie roskakoriin",
@ -1827,8 +1878,11 @@
"unable_to_change_pin_code": "PIN-koodin vaihtaminen epäonnistui",
"unable_to_setup_pin_code": "PIN-koodin määrittäminen epäonnistui",
"unarchive": "Palauta arkistosta",
"unarchive_action_prompt": "{count} poistettu arkistosta",
"unarchived_count": "{count, plural, other {# poistettu arkistosta}}",
"undo": "Kumoa",
"unfavorite": "Poista suosikeista",
"unfavorite_action_prompt": "{count} poistettu suosikeista",
"unhide_person": "Poista henkilö piilosta",
"unknown": "Tuntematon",
"unknown_country": "Tuntematon maa",
@ -1844,8 +1898,10 @@
"unsaved_change": "Tallentamaton muutos",
"unselect_all": "Poista valinnat",
"unselect_all_duplicates": "Poista kaikkien kaksoiskappaleiden valinta",
"unselect_all_in": "Poista kaikki valinnat {group}",
"unstack": "Pura pino",
"unstacked_assets_count": "Poistettu pinosta {count, plural, one {# kohde} other {# kohdetta}}",
"untagged": "Ilman tunnistetta",
"up_next": "Seuraavaksi",
"updated_at": "Päivitetty",
"updated_password": "Salasana päivitetty",
@ -1861,7 +1917,7 @@
"upload_status_uploaded": "Ladattu",
"upload_success": "Lataus onnistui. Päivitä sivu jotta näet latauksesi.",
"upload_to_immich": "Lähetä Immichiin ({count})",
"uploading": "Lähettään",
"uploading": "Lähettää",
"url": "URL",
"usage": "Käyttö",
"use_biometric": "Käytä biometriikkaa",
@ -1873,6 +1929,7 @@
"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_description": "Hallinnoi PIN-koodiasi",
"user_privacy": "Käyttäjän tietosuoja",
"user_purchase_settings": "Osta",
"user_purchase_settings_description": "Hallitse ostostasi",
"user_role_set": "Tee käyttäjästä {user} {role}",

View File

@ -14,10 +14,13 @@
"add_a_location": "Dagdagan ng lugar",
"add_a_name": "Dagdagan ng pangalan",
"add_a_title": "Dagdagan ng pamagat",
"add_endpoint": "Dagdagan ng dulo",
"add_location": "Magdagdag ng lugar",
"add_more_users": "Magdagdag ng mga user",
"add_partner": "Magdagdag ng kasangga",
"add_path": "Magdagdag ng path",
"add_photos": "Magdagdag ng litrato",
"add_tag": "Magdagdag ng tag",
"add_to": "Idagdag sa…",
"add_to_album": "Idagdag sa album",
"add_to_album_bottom_sheet_added": "Naidagdag sa {album}",

View File

@ -17,7 +17,7 @@
"add_endpoint": "Ajouter une adresse",
"add_exclusion_pattern": "Ajouter un schéma d'exclusion",
"add_import_path": "Ajouter un chemin à importer",
"add_location": "Ajouter un lieu",
"add_location": "Ajouter une localisation",
"add_more_users": "Ajouter plus d'utilisateurs",
"add_partner": "Ajouter un partenaire",
"add_path": "Ajouter un chemin",
@ -166,6 +166,20 @@
"metadata_settings_description": "Gestion des paramètres de métadonnées",
"migration_job": "Migration",
"migration_job_description": "Migration des miniatures pour les médias et les visages vers la dernière structure de dossiers",
"nightly_tasks_cluster_faces_setting_description": "Démarrer la reconnaissance faciale sur les visages nouvellement détectés",
"nightly_tasks_cluster_new_faces_setting": "Regrouper les nouveaux visages",
"nightly_tasks_database_cleanup_setting": "Tâches de nettoyage de la base de données",
"nightly_tasks_database_cleanup_setting_description": "Nettoyage ancien, données de la base de données expirées",
"nightly_tasks_generate_memories_setting": "Générer les souvenirs",
"nightly_tasks_generate_memories_setting_description": "Créer des souvenirs à partir des éléments",
"nightly_tasks_missing_thumbnails_setting": "Générer les miniatures manquantes",
"nightly_tasks_missing_thumbnails_setting_description": "Mettre en file d'attente les éléments sans miniature pour la création de miniature",
"nightly_tasks_settings": "Paramètres des tâches de nuit",
"nightly_tasks_settings_description": "Gérer les tâches de nuit",
"nightly_tasks_start_time_setting": "Heure de démarrage",
"nightly_tasks_start_time_setting_description": "Heure à laquelle le serveur commence à exécuter les tâches de nuit",
"nightly_tasks_sync_quota_usage_setting": "Synchroniser les quota d'usage",
"nightly_tasks_sync_quota_usage_setting_description": "Mettre à jour les quota d'usage de l'utilisateur, en se basant sur l'utilisation actuelle",
"no_paths_added": "Aucun chemin n'a été ajouté",
"no_pattern_added": "Aucun schéma d'exclusion n'a été ajouté",
"note_apply_storage_label_previous_assets": "Remarque : pour appliquer l'étiquette de stockage à des médias précédemment envoyés, exécutez",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "URI de redirection mobile",
"oauth_mobile_redirect_uri_override": "Remplacer l'URI de redirection mobile",
"oauth_mobile_redirect_uri_override_description": "Activer quand le fournisseur d'OAuth ne permet pas un URI mobile, comme ''{callback}''",
"oauth_role_claim": "Attribut de rôle",
"oauth_role_claim_description": "Donne automatiquement un accès en tant qu'admin, en se basant sur la présence de cet attribut. L'attribut peut avoir soit 'user' (utilisateur) soit 'admin'.",
"oauth_settings": "OAuth",
"oauth_settings_description": "Gérer les paramètres de connexion OAuth",
"oauth_settings_more_details": "Pour plus de détails sur cette fonctionnalité, consultez <link>ce lien</link>.",
@ -244,7 +260,7 @@
"storage_template_migration_info": "L'enregistrement des modèles va convertir toutes les extensions en minuscule. Les changements de modèle ne s'appliqueront qu'aux nouveaux médias. Pour appliquer rétroactivement le modèle aux médias précédemment envoyés, exécutez la tâche <link>{job}</link>.",
"storage_template_migration_job": "Tâche de migration du modèle de stockage",
"storage_template_more_details": "Pour plus de détails sur cette fonctionnalité, reportez-vous au <template-link>Modèle de stockage</template-link> et à ses <implications-link>implications</implications-link>",
"storage_template_onboarding_description_v2": "Quand elle est activée, cette fonctionnalité organise automatiquement les fichiers, sur base d'un modèle défini par l'utilisateur. Pour plus d'informations, se répéter à la <link>documentation</link>.",
"storage_template_onboarding_description_v2": "Quand elle est activée, cette fonctionnalité organise automatiquement les fichiers, sur base d'un modèle défini par l'utilisateur. Pour plus d'informations, se référer à la <link>documentation</link>.",
"storage_template_path_length": "Limite approximative de la longueur du chemin: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Modèle de stockage",
"storage_template_settings_description": "Gérer la structure des dossiers et le nom des fichiers du média envoyé",
@ -357,10 +373,12 @@
"admin_password": "Mot de passe Admin",
"administration": "Administration",
"advanced": "Avancé",
"advanced_settings_beta_timeline_subtitle": "Essayer la nouvelle application",
"advanced_settings_beta_timeline_title": "Timeline de la béta",
"advanced_settings_enable_alternate_media_filter_subtitle": "Utilisez cette option pour filtrer les média durant la synchronisation avec des critères alternatifs. N'utilisez cela que lorsque l'application n'arrive pas à détecter tout les albums.",
"advanced_settings_enable_alternate_media_filter_title": "[EXPÉRIMENTAL] Utiliser le filtre de synchronisation d'album alternatif",
"advanced_settings_log_level_title": "Niveau de journalisation : {level}",
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des miniatures à partir de ressources présentes sur l'appareil. Activez ce paramètre pour charger des images externes à la place.",
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des miniatures à partir de ressources locales. Activez ce paramètre pour charger des images externes à la place.",
"advanced_settings_prefer_remote_title": "Préférer les images externes",
"advanced_settings_proxy_headers_subtitle": "Ajoutez des en-têtes personnalisés à chaque requête réseau",
"advanced_settings_proxy_headers_title": "En-têtes de proxy",
@ -388,6 +406,7 @@
"album_options": "Options de l'album",
"album_remove_user": "Supprimer l'utilisateur?",
"album_remove_user_confirmation": "Êtes-vous sûr de vouloir supprimer {user}?",
"album_search_not_found": "Aucun album trouvé ne correspond à votre recherche",
"album_share_no_users": "Il semble que vous ayez partagé cet album avec tous les utilisateurs ou que vous n'ayez aucun utilisateur avec lequel le partager.",
"album_updated": "Album mis à jour",
"album_updated_setting_description": "Recevoir une notification par courriel lorsqu'un album partagé a de nouveaux médias",
@ -407,14 +426,15 @@
"albums_default_sort_order": "Ordre de tri par défaut des albums",
"albums_default_sort_order_description": "Ordre de tri des médias pour les nouveaux albums créés.",
"albums_feature_description": "Bibliothèques de médias pouvant être partagés avec d'autres utilisateurs.",
"albums_on_device_count": "Album sur l'appareil ({count})",
"all": "Tout",
"all_albums": "Tous les albums",
"all_people": "Toutes les personnes",
"all_videos": "Toutes les vidéos",
"allow_dark_mode": "Autoriser le mode sombre",
"allow_edits": "Autoriser les modifications",
"allow_public_user_to_download": "Permettre aux utilisateurs non connectés de télécharger",
"allow_public_user_to_upload": "Autoriser l'envoi aux utilisateurs non connectés",
"allow_public_user_to_download": "Permettre le téléchargement par des utilisateurs non connectés",
"allow_public_user_to_upload": "Permettre l'envoi par des utilisateurs non connectés",
"alt_text_qr_code": "Image du code QR",
"anti_clockwise": "Sens anti-horaire",
"api_key": "Clé API",
@ -427,6 +447,7 @@
"app_settings": "Paramètres de l'application",
"appears_in": "Apparaît dans",
"archive": "Archiver",
"archive_action_prompt": "{count} ajouté(s) à l'archive",
"archive_or_unarchive_photo": "Archiver ou désarchiver une photo",
"archive_page_no_archived_assets": "Aucun élément archivé n'a été trouvé",
"archive_page_title": "Archiver ({count})",
@ -464,7 +485,6 @@
"assets": "Médias",
"assets_added_count": "{count, plural, one {# média ajouté} other {# médias ajoutés}}",
"assets_added_to_album_count": "{count, plural, one {# média ajouté} other {# médias ajoutés}} à l'album",
"assets_added_to_name_count": "{count, plural, one {# média ajouté} other {# médias ajoutés}} à {hasName, select, true {<b>{name}</b>} other {new album}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Le média ne peut pas être ajouté} other {Les médias ne peuvent pas être ajoutés}} à l'album",
"assets_count": "{count, plural, one {# média} other {# médias}}",
"assets_deleted_permanently": "{count} média(s) supprimé(s) définitivement",
@ -553,6 +573,8 @@
"backup_options_page_title": "Options de sauvegarde",
"backup_setting_subtitle": "Ajuster les paramètres d'envoi au premier et en arrière-plan",
"backward": "Arrière",
"beta_sync": "Statut de la synchronisation béta",
"beta_sync_subtitle": "Gérer le nouveau système de synchronisation",
"biometric_auth_enabled": "Authentification biométrique activée",
"biometric_locked_out": "L'authentification biométrique est verrouillé",
"biometric_no_options": "Aucune option biométrique disponible",
@ -587,6 +609,7 @@
"cancel": "Annuler",
"cancel_search": "Annuler la recherche",
"canceled": "Annulé",
"canceling": "Annulation",
"cannot_merge_people": "Impossible de fusionner les personnes",
"cannot_undo_this_action": "Vous ne pouvez pas annuler cette action!",
"cannot_update_the_description": "Impossible de mettre à jour la description",
@ -703,7 +726,7 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Sombre",
"darkTheme": "Basculer sur le thème sombre",
"dark_theme": "Activer le thème sombre",
"date_after": "Date après",
"date_and_time": "Date et heure",
"date_before": "Date avant",
@ -719,6 +742,7 @@
"default_locale": "Région par défaut",
"default_locale_description": "Afficher les dates et nombres en fonction des paramètres de votre navigateur",
"delete": "Supprimer",
"delete_action_prompt": "{count} supprimé(s) définitivement",
"delete_album": "Supprimer l'album",
"delete_api_key_prompt": "Voulez-vous vraiment supprimer cette clé API?",
"delete_dialog_alert": "Ces médias seront définitivement supprimés de Immich et de votre appareil",
@ -732,6 +756,7 @@
"delete_key": "Supprimer la clé",
"delete_library": "Supprimer la bibliothèque",
"delete_link": "Supprimer le lien",
"delete_local_action_prompt": "{count} supprimé(s) localement",
"delete_local_dialog_ok_backed_up_only": "Suppression des données sauvegardées uniquement",
"delete_local_dialog_ok_force": "Supprimer tout de même",
"delete_others": "Supprimer les autres",
@ -745,6 +770,7 @@
"description": "Description",
"description_input_hint_text": "Ajouter une description...",
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
"deselect_all": "Tout désélectionner",
"details": "Détails",
"direction": "Ordre",
"disabled": "Désactivé",
@ -762,6 +788,7 @@
"documentation": "Documentation",
"done": "Terminé",
"download": "Télécharger",
"download_action_prompt": "Téléchargement de {count} éléments",
"download_canceled": "Téléchargement annulé",
"download_complete": "Téléchargement terminé",
"download_enqueue": "Téléchargement en attente",
@ -799,6 +826,7 @@
"edit_key": "Modifier la clé",
"edit_link": "Modifier le lien",
"edit_location": "Modifier la localisation",
"edit_location_action_prompt": "{count} localisation(s) mise(s) à jour",
"edit_location_dialog_title": "Localisation",
"edit_name": "Modifier le nom",
"edit_people": "Modifier les personnes",
@ -817,6 +845,7 @@
"empty_trash": "Vider la corbeille",
"empty_trash_confirmation": "Êtes-vous sûr de vouloir vider la corbeille? Cela supprimera définitivement de Immich tous les médias qu'elle contient.\nVous ne pouvez pas annuler cette action!",
"enable": "Active",
"enable_backup": "Activer Backup",
"enable_biometric_auth_description": "Entrez votre code PIN pour activer l'authentification biométrique",
"enabled": "Activé",
"end_date": "Date de fin",
@ -984,6 +1013,7 @@
"failed_to_load_assets": "Échec du chargement des ressources",
"failed_to_load_folder": "Échec de chargement du dossier",
"favorite": "Favori",
"favorite_action_prompt": "{count} ajouté(s) aux Favoris",
"favorite_or_unfavorite_photo": "Ajouter ou supprimer des favoris",
"favorites": "Favoris",
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
@ -1023,6 +1053,9 @@
"haptic_feedback_switch": "Activer le retour haptique",
"haptic_feedback_title": "Retour haptique",
"has_quota": "Quota",
"hash_asset": "Hasher le média",
"hashed_assets": "Média hashés",
"hashing": "Hash",
"header_settings_add_header_tip": "Ajouter un en-tête",
"header_settings_field_validator_msg": "Cette valeur ne peut pas être vide",
"header_settings_header_name_input": "Nom de l'en-tête",
@ -1036,7 +1069,7 @@
"hide_password": "Masquer le mot de passe",
"hide_person": "Masquer la personne",
"hide_unnamed_people": "Cacher les personnes non nommées",
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.",
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. {failed} éléments sont déjà dans l'album.",
"home_page_add_to_album_err_local": "Impossible d'ajouter des médias locaux aux albums, ils sont ignorés",
"home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.",
"home_page_album_err_partner": "Impossible d'ajouter des médias d'un partenaire à un album, ils sont ignorés",
@ -1127,6 +1160,7 @@
"library_page_sort_created": "Créations les plus récentes",
"library_page_sort_last_modified": "Dernière modification",
"library_page_sort_title": "Titre de l'album",
"licenses": "Licences",
"light": "Clair",
"like_deleted": "Réaction « j'aime » supprimée",
"link_motion_video": "Lier la photo animée",
@ -1136,7 +1170,9 @@
"list": "Liste",
"loading": "Chargement",
"loading_search_results_failed": "Chargement des résultats échoué",
"local": "Local",
"local_asset_cast_failed": "Impossible de caster un média qui n'a pas envoyé vers le serveur",
"local_assets": "Média locaux",
"local_network": "Réseau local",
"local_network_sheet_info": "L'application va se connecter au serveur via cette URL quand l'appareil est connecté à ce réseau Wi-Fi",
"location_permission": "Autorisation de localisation",
@ -1246,6 +1282,7 @@
"more": "Plus",
"move": "Déplacer",
"move_off_locked_folder": "Déplacer en dehors du dossier verrouillé",
"move_to_lock_folder_action_prompt": "{count} ajouté(s) au dossier verrouillé",
"move_to_locked_folder": "Déplacer dans le dossier verrouillé",
"move_to_locked_folder_confirmation": "Ces photos et vidéos seront retirés de tout les albums et ne seront visibles que dans le dossier verrouillé",
"moved_to_archive": "{count, plural, one {# élément déplacé} other {# éléments déplacés}} vers les archives",
@ -1292,6 +1329,7 @@
"no_results": "Aucun résultat",
"no_results_description": "Essayez un synonyme ou un mot-clé plus général",
"no_shared_albums_message": "Créer un album pour partager vos photos et vidéos avec les personnes de votre réseau",
"no_uploads_in_progress": "Pas d'envoi en cours",
"not_in_any_album": "Dans aucun album",
"not_selected": "Non sélectionné",
"note_apply_storage_label_to_previously_uploaded assets": "Note : Pour appliquer l'étiquette de stockage aux médias précédemment envoyés, exécutez",
@ -1329,6 +1367,7 @@
"original": "original",
"other": "Autre",
"other_devices": "Autres appareils",
"other_entities": "Autres entités",
"other_variables": "Autres variables",
"owned": "Possédé",
"owner": "Propriétaire",
@ -1390,7 +1429,7 @@
"photos_and_videos": "Photos et vidéos",
"photos_count": "{count, plural, one {{count, number} Photo} other {{count, number} Photos}}",
"photos_from_previous_years": "Photos des années précédentes",
"pick_a_location": "Choisissez un lieu",
"pick_a_location": "Choisissez une localisation",
"pin_code_changed_successfully": "Code PIN changé avec succès",
"pin_code_reset_successfully": "Réinitialisation du code PIN réussie",
"pin_code_setup_successfully": "Définition du code PIN réussie",
@ -1460,6 +1499,7 @@
"purchase_server_description_2": "Statut de contributeur",
"purchase_server_title": "Serveur",
"purchase_settings_server_activated": "La clé du produit pour le Serveur est gérée par l'administrateur",
"queue_status": "File d'attente {count}/{total}",
"rating": "Étoile d'évaluation",
"rating_clear": "Effacer l'évaluation",
"rating_count": "{count, plural, one {# étoile} other {# étoiles}}",
@ -1488,6 +1528,8 @@
"refreshing_faces": "Actualisation des visages",
"refreshing_metadata": "Actualisation des métadonnées",
"regenerating_thumbnails": "Regénération des miniatures",
"remote": "A distance",
"remote_assets": "Média à distance",
"remove": "Supprimer",
"remove_assets_album_confirmation": "Êtes-vous sûr de vouloir supprimer {count, plural, one {# média} other {# médias}} de l'album?",
"remove_assets_shared_link_confirmation": "Êtes-vous sûr de vouloir supprimer {count, plural, one {# média} other {# médias}} de ce lien partagé?",
@ -1495,7 +1537,9 @@
"remove_custom_date_range": "Supprimer la plage de date personnalisée",
"remove_deleted_assets": "Supprimer les fichiers hors ligne",
"remove_from_album": "Supprimer de l'album",
"remove_from_album_action_prompt": "{count} supprimé(s) de l'album",
"remove_from_favorites": "Supprimer des favoris",
"remove_from_lock_folder_action_prompt": "{count} supprimé(s) du dossier verrouillé",
"remove_from_locked_folder": "Supprimer du dossier verrouillé",
"remove_from_locked_folder_confirmation": "Êtes vous sûr de vouloir déplacer ces photos et vidéos en dehors du dossier verrouillé? Elles seront visibles dans votre galerie.",
"remove_from_shared_link": "Supprimer des liens partagés",
@ -1510,7 +1554,7 @@
"removed_from_favorites_count": "{count, plural, one {# supprimé} other {# supprimés}} des favoris",
"removed_memory": "Souvenir supprimé",
"removed_photo_from_memory": "Photo supprimée du souvenir",
"removed_tagged_assets": "Tag supprimé de {count, plural, one {# média} other {# médias}}",
"removed_tagged_assets": "Étiquette supprimée de {count, plural, one {# média} other {# médias}}",
"rename": "Renommer",
"repair": "Réparer",
"repair_no_results_message": "Les fichiers non importés ou absents s'afficheront ici",
@ -1523,11 +1567,15 @@
"reset_password": "Réinitialiser le mot de passe",
"reset_people_visibility": "Réinitialiser la visibilité des personnes",
"reset_pin_code": "Réinitialiser le code PIN",
"reset_sqlite": "Réinitialiser la base de données SQLite",
"reset_sqlite_confirmation": "Êtes vous sur que vous voulez réinitialiser la base de données SQLite? Vous devrez vous déconnecter and vous reconnecter à nouveau pour re-synchroniser les données",
"reset_sqlite_success": "La base de données SQLite à été réinitialisé avec succès",
"reset_to_default": "Rétablir les valeurs par défaut",
"resolve_duplicates": "Résoudre les doublons",
"resolved_all_duplicates": "Résolution de tous les doublons",
"restore": "Restaurer",
"restore_all": "Tout restaurer",
"restore_trash_action_prompt": "{count} restauré de la corbeille",
"restore_user": "Restaurer l'utilisateur",
"restored_asset": "Média restauré",
"resume": "Reprendre",
@ -1536,6 +1584,7 @@
"role": "Rôle",
"role_editor": "Éditeur",
"role_viewer": "Visionneuse",
"running": "En marche",
"save": "Sauvegarder",
"save_to_gallery": "Enregistrer",
"saved_api_key": "Clé API sauvegardée",
@ -1566,8 +1615,8 @@
"search_filter_display_option_not_in_album": "Pas dans un album",
"search_filter_display_options": "Options d'affichage",
"search_filter_filename": "Recherche par nom de fichier",
"search_filter_location": "Lieu",
"search_filter_location_title": "Sélectionner un lieu",
"search_filter_location": "Localisation",
"search_filter_location_title": "Sélectionner une localisation",
"search_filter_media_type": "Type de média",
"search_filter_media_type_title": "Sélectionner type de média",
"search_filter_people_title": "Sélectionner une personne",
@ -1667,6 +1716,7 @@
"settings_saved": "Paramètres sauvegardés",
"setup_pin_code": "Définir un code PIN",
"share": "Partager",
"share_action_prompt": "{count} éléments partagés",
"share_add_photos": "Ajouter des photos",
"share_assets_selected": "{count} sélectionné(s)",
"share_dialog_preparing": "Préparation...",
@ -1768,6 +1818,7 @@
"sort_title": "Titre",
"source": "Source",
"stack": "Empiler",
"stack_action_prompt": "{count} groupé(s)",
"stack_duplicates": "Empiler les doublons",
"stack_select_one_photo": "Sélectionnez une photo principale pour la pile",
"stack_selected_photos": "Empiler les photos sélectionnées",
@ -1787,6 +1838,7 @@
"storage_quota": "Quota de stockage",
"storage_usage": "{used} sur {available} utilisé",
"submit": "Soumettre",
"success": "Réussi",
"suggestions": "Suggestions",
"sunrise_on_the_beach": "Lever de soleil sur la plage",
"support": "Soutenir",
@ -1796,6 +1848,8 @@
"sync": "Synchroniser",
"sync_albums": "Synchroniser dans des albums",
"sync_albums_manual_subtitle": "Synchroniser toutes les vidéos et photos envoyées dans les albums sélectionnés",
"sync_local": "Synchronisation locale",
"sync_remote": "Synchronisation à distance",
"sync_upload_album_setting_subtitle": "Créez et envoyez vos photos et vidéos dans les albums sélectionnés sur Immich",
"tag": "Étiquette",
"tag_assets": "Étiqueter les médias",
@ -1806,6 +1860,7 @@
"tag_updated": "Étiquette mise à jour: {tag}",
"tagged_assets": "Étiquette ajoutée à {count, plural, one {# média} other {# médias}}",
"tags": "Étiquettes",
"tap_to_run_job": "Appuyez pour démarrer la tâche",
"template": "Modèle",
"theme": "Thème",
"theme_selection": "Sélection du thème",
@ -1838,6 +1893,7 @@
"total": "Total",
"total_usage": "Utilisation globale",
"trash": "Corbeille",
"trash_action_prompt": "{count} mis à la corbeille",
"trash_all": "Tout supprimer",
"trash_count": "Corbeille {count, number}",
"trash_delete_asset": "Mettre à la corbeille/Supprimer un média",
@ -1855,9 +1911,11 @@
"unable_to_change_pin_code": "Impossible de changer le code PIN",
"unable_to_setup_pin_code": "Impossible de définir le code PIN",
"unarchive": "Désarchiver",
"unarchive_action_prompt": "{count} supprimé(s) de l'archive",
"unarchived_count": "{count, plural, one {# supprimé} other {# supprimés}} de l'archive",
"undo": "Annuler",
"unfavorite": "Enlever des favoris",
"unfavorite_action_prompt": "{count} supprimé(s) des favoris",
"unhide_person": "Afficher la personne",
"unknown": "Inconnu",
"unknown_country": "Pays non connu",
@ -1875,12 +1933,15 @@
"unselect_all_duplicates": "Désélectionner tous les doublons",
"unselect_all_in": "Tout désélectionner dans {group}",
"unstack": "Désempiler",
"unstack_action_prompt": "{count} non groupés",
"unstacked_assets_count": "{count, plural, one {# média dépilé} other {# médias dépilés}}",
"untagged": "Étiquette supprimée",
"up_next": "Suite",
"updated_at": "Mis à jour à",
"updated_password": "Mot de passe mis à jour",
"upload": "Envoyer",
"upload_concurrency": "Envois simultanés",
"upload_details": "Uploader les details",
"upload_dialog_info": "Voulez-vous sauvegarder la sélection vers le serveur?",
"upload_dialog_title": "Envoyer le média",
"upload_errors": "L'envoi s'est complété avec {count, plural, one {# erreur} other {# erreurs}}. Rafraîchissez la page pour voir les nouveaux médias envoyés.",
@ -1912,6 +1973,7 @@
"user_usage_stats_description": "Voir les statistiques d'utilisation du compte",
"username": "Nom d'utilisateur",
"users": "Utilisateurs",
"users_added_to_album_count": "{count, plural, one {# utilisateur ajouté} other {# utilisateurs ajoutés}} à l'album",
"utilities": "Utilitaires",
"validate": "Valider",
"validate_endpoint_error": "Merci d'entrer un lien valide",
@ -1930,6 +1992,7 @@
"view_album": "Afficher l'album",
"view_all": "Voir tout",
"view_all_users": "Voir tous les utilisateurs",
"view_details": "Voir les détails",
"view_in_timeline": "Voir dans la vue chronologique",
"view_link": "Voir le lien",
"view_links": "Voir les liens",

View File

@ -455,7 +455,6 @@
"assets": "Activos",
"assets_added_count": "Engadido {count, plural, one {# activo} other {# activos}}",
"assets_added_to_album_count": "Engadido {count, plural, one {# activo} other {# activos}} ao álbum",
"assets_added_to_name_count": "Engadido {count, plural, one {# activo} other {# activos}} a {hasName, select, true {<b>{name}</b>} other {novo álbum}}",
"assets_count": "{count, plural, one {# activo} other {# activos}}",
"assets_deleted_permanently": "{count} activo(s) eliminado(s) permanentemente",
"assets_deleted_permanently_from_server": "{count} activo(s) eliminado(s) permanentemente do servidor Immich",

View File

@ -34,6 +34,7 @@
"added_to_favorites_count": "{count, number} נוספו למועדפים",
"admin": {
"add_exclusion_pattern_description": "הוספת דפוסי החרגה. נתמכת התאמת דפוסים באמצעות *, ** ו-?. כדי להתעלם מכל הקבצים בתיקיה כלשהי בשם \"Raw\", יש להשתמש ב \"**/Raw/**\". כדי להתעלם מכל הקבצים המסתיימים ב \"tif.\", יש להשתמש ב \"tif.*/**\". כדי להתעלם מנתיב מוחלט, יש להשתמש ב \"**/נתיב/להתעלמות\".",
"admin_user": "מנהל מערכת",
"asset_offline_description": "תמונה מספרייה חיצונית זו לא נמצאת יותר בדיסק והועברה לאשפה. אם הקובץ הועבר מתוך הספרייה, נא לבדוק את ציר הזמן שלך עבור התמונה המקבילה החדש. כדי לשחזר תמונה זו, נא לוודא ש-Immich יכול לגשת אל נתיב הקובץ למטה ולסרוק מחדש את הספרייה.",
"authentication_settings": "הגדרות התחברות",
"authentication_settings_description": "ניהול סיסמה, OAuth, והגדרות התחברות אחרות",
@ -165,6 +166,20 @@
"metadata_settings_description": "ניהול הגדרות מטא-נתונים",
"migration_job": "העברה",
"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_pattern_added": "לא נוספה תבנית",
"note_apply_storage_label_previous_assets": "הערה: כדי להחיל את תווית האחסון על תמונות שהועלו בעבר, הפעל את",
@ -203,7 +218,7 @@
"oauth_storage_quota_claim": "דרישת מכסת אחסון",
"oauth_storage_quota_claim_description": "הגדר אוטומטית את מכסת האחסון של המשתמש לערך של דרישה זו.",
"oauth_storage_quota_default": "מכסת אחסון ברירת מחדל (GiB)",
"oauth_storage_quota_default_description": "מכסה ב-GiB לשימוש כאשר לא מסופקת דרישה (הזן 0 עבור מכסה בלתי מוגבלת).",
"oauth_storage_quota_default_description": "מכסה ב-GiB לשימוש כאשר לא מסופקת דרישה.",
"oauth_timeout": "הבקשה נכשלה הזמן הקצוב הסתיים",
"oauth_timeout_description": "זמן קצוב לבקשות (במילישניות)",
"password_enable_description": "התחבר עם דוא\"ל וסיסמה",
@ -243,6 +258,7 @@
"storage_template_migration_info": "תבנית האחסון תמיר את כל ההרחבות לאותיות קטנות. שינויים בתבנית יחולו רק על תמונות חדשות. כדי להחיל באופן רטרואקטיבי את התבנית על תמונות שהועלו בעבר, הפעל את <link>{job}</link>.",
"storage_template_migration_job": "משימת העברת תבנית אחסון",
"storage_template_more_details": "לפרטים נוספים אודות תכונה זו, עיין ב<template-link>תבנית האחסון</template-link> וב<implications-link>השלכותיה</implications-link>",
"storage_template_onboarding_description_v2": "כאשר פיצ’ר זה מופעל, הקבצים יאורגנו אוטומטית לפי תבנית שהוגדרה על ידי המשתמש. למידע נוסף, עיין ב־<link>תיעוד</link>.",
"storage_template_path_length": "מגבלת אורך נתיב משוערת: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "תבנית אחסון",
"storage_template_settings_description": "ניהול מבנה התיקיות ואת שם הקובץ של התמונה שהועלתה",
@ -425,6 +441,7 @@
"app_settings": "הגדרות יישום",
"appears_in": "מופיע ב",
"archive": "ארכיון",
"archive_action_prompt": "{count} נוספו לארכיון",
"archive_or_unarchive_photo": "העבר תמונה לארכיון או הוצא אותה משם",
"archive_page_no_archived_assets": "לא נמצאו תמונות בארכיון",
"archive_page_title": "בארכיון ({count})",
@ -462,7 +479,6 @@
"assets": "תמונות",
"assets_added_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_count": "{count, plural, one {תמונה #} other {# תמונות}}",
"assets_deleted_permanently": "{count} תמונות נמחקו לצמיתות",
@ -701,7 +717,7 @@
"daily_title_text_date": "E, MMM dd",
"daily_title_text_date_year": "E, MMM dd, yyyy",
"dark": "כהה",
"darkTheme": "החלפה למצב חושך",
"dark_theme": "הפעל/כבה מצב כהה",
"date_after": "תאריך אחרי",
"date_and_time": "תאריך ושעה",
"date_before": "תאריך לפני",
@ -711,12 +727,13 @@
"day": "יום",
"deduplicate_all": "ביטול כל הכפילויות",
"deduplication_criteria_1": "גודל תמונה בבתים",
"deduplication_criteria_2": "ספירת נתוני EXIF",
"deduplication_criteria_2": "כמות נתוני EXIF",
"deduplication_info": "מידע על ביטול כפילויות",
"deduplication_info_description": "כדי לבחור מראש תמונות באופן אוטומטי ולהסיר כפילויות בכמות גדולה, אנו מסתכלים על:",
"default_locale": "שפת ברירת מחדל",
"default_locale_description": "פורמט תאריכים ומספרים מבוסס שפת הדפדפן שלך",
"delete": "מחק",
"delete_action_prompt": "{count} נמחקו לצמיתות",
"delete_album": "מחק אלבום",
"delete_api_key_prompt": "האם אתה בטוח שברצונך למחוק מפתח ה-API הזה?",
"delete_dialog_alert": "הפריטים האלה ימחקו לצמיתות מהשרת ומהמכשיר שלך",
@ -797,6 +814,7 @@
"edit_key": "ערוך מפתח",
"edit_link": "ערוך קישור",
"edit_location": "ערוך מיקום",
"edit_location_action_prompt": "{count} מיקומים נערכו",
"edit_location_dialog_title": "מיקום",
"edit_name": "ערוך שם",
"edit_people": "ערוך אנשים",
@ -982,6 +1000,7 @@
"failed_to_load_assets": "טעינת תמונות נכשלה",
"failed_to_load_folder": "טעינת תיקיה נכשלה",
"favorite": "מועדף",
"favorite_action_prompt": "{count} נוספו למועדפים",
"favorite_or_unfavorite_photo": "הוסף או הסר תמונה מהמועדפים",
"favorites": "מועדפים",
"favorites_page_no_favorites": "לא נמצאו תמונות מועדפים",
@ -1148,6 +1167,7 @@
"locked_folder": "תיקיה נעולה",
"log_out": "התנתק",
"log_out_all_devices": "התנתק מכל המכשירים",
"logged_in_as": "מחובר כ {user}",
"logged_out_all_devices": "מנותק מכל המכשירים",
"logged_out_device": "מכשיר מנותק",
"login": "כניסה",
@ -1243,6 +1263,7 @@
"more": "עוד",
"move": "העבר",
"move_off_locked_folder": "הוצאה מהתיקייה הנעולה",
"move_to_lock_folder_action_prompt": "{count} נוספו לתיקייה הנעולה",
"move_to_locked_folder": "העבר לתיקיה הנעולה",
"move_to_locked_folder_confirmation": "התמונות והסרטונים האלו יוסרו מכל האלבומים, ויהיו מוצגים רק בתיקיה הנעולה",
"moved_to_archive": "{count, plural, one {הועברה תמונה # } other {# תמונות הועברו}} לארכיון",
@ -1492,7 +1513,9 @@
"remove_custom_date_range": "הסר טווח תאריכים מותאם",
"remove_deleted_assets": "הסר קבצים לא מקוונים",
"remove_from_album": "הסר מאלבום",
"remove_from_album_action_prompt": "{count} הוסרו מהאלבום",
"remove_from_favorites": "הסר מהמועדפים",
"remove_from_lock_folder_action_prompt": "{count} הוסרו מהתיקייה הנעולה",
"remove_from_locked_folder": "הסר מהתיקייה הנעולה",
"remove_from_locked_folder_confirmation": "האם אתה בטוח שברצונך להעביר את התמונות והסרטונים האלה מחוץ לתיקייה הנעולה? הם יהיו מוצגים בספרייה שלך.",
"remove_from_shared_link": "הסר מקישור משותף",
@ -1605,6 +1628,7 @@
"select_album_cover": "בחר עטיפת אלבום",
"select_all": "בחר הכל",
"select_all_duplicates": "בחר את כל הכפילויות",
"select_all_in": "בחר הכול בתוך {group}",
"select_avatar_color": "בחר צבע תמונת פרופיל",
"select_face": "בחר פנים",
"select_featured_photo": "בחר תמונה מייצגת",
@ -1834,6 +1858,7 @@
"total": "סה\"כ",
"total_usage": "שימוש כולל",
"trash": "אשפה",
"trash_action_prompt": "{count} הועברו לאשפה",
"trash_all": "העבר הכל לאשפה",
"trash_count": "העבר לאשפה {count, number}",
"trash_delete_asset": "העבר לאשפה/מחק תמונה",
@ -1851,9 +1876,11 @@
"unable_to_change_pin_code": "לא ניתן לשנות את קוד ה PIN",
"unable_to_setup_pin_code": "לא ניתן להגדיר קוד PIN",
"unarchive": "הוצא מארכיון",
"unarchive_action_prompt": "{count} הוסרו מהארכיון",
"unarchived_count": "{count, plural, other {# הוצאו מהארכיון}}",
"undo": "לבטל",
"unfavorite": "לא מועדף",
"unfavorite_action_prompt": "{count} הוסרו מהמועדפים",
"unhide_person": "בטל הסתרת אדם",
"unknown": "לא ידוע",
"unknown_country": "מדינה לא ידועה",
@ -1869,8 +1896,10 @@
"unsaved_change": "שינוי לא נשמר",
"unselect_all": "בטל בחירה בהכל",
"unselect_all_duplicates": "בטל בחירת כל הכפילויות",
"unselect_all_in": "בטל את הבחירה של הכל ב {group}",
"unstack": "בטל ערימה",
"unstacked_assets_count": "{count, plural, one {תמונה # הוסרה} other {# תמונות הוסרו}} מהערימה",
"untagged": "לא מתיוגים",
"up_next": "הבא בתור",
"updated_at": "עודכן",
"updated_password": "סיסמה עודכנה",

View File

@ -22,6 +22,7 @@
"add_partner": "जोड़ीदार डालें",
"add_path": "पथ डालें",
"add_photos": "फ़ोटो डालें",
"add_tag": "चिह्नित करें",
"add_to": "इसमें डालें…",
"add_to_album": "एल्बम में डालें",
"add_to_album_bottom_sheet_added": "{album} में डालें",
@ -33,6 +34,7 @@
"added_to_favorites_count": "पसंदीदा में {count, number} डाला गया",
"admin": {
"add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।",
"admin_user": "व्यवस्थापक उपयोगकर्ता",
"asset_offline_description": "यह बाहरी लाइब्रेरी एसेट अब डिस्क पर मौजूद नहीं है और इसे ट्रैश में डाल दिया गया है। यदि फ़ाइल को लाइब्रेरी के भीतर कहीं ले जाया गया था, तो नई संबंधित एसेट के लिए अपनी टाइमलाइन देखें। इस एसेट को वापस पाने के लिए, कृपया सुनिश्चित करें कि नीचे दिए गए फ़ाइल पथ को इम्मिच द्वारा एक्सेस किया जा सकता है और फिर लाइब्रेरी को स्कैन करें।",
"authentication_settings": "प्रमाणीकरण सेटिंग्स",
"authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें",

View File

@ -462,7 +462,6 @@
"assets": "Sredstva",
"assets_added_count": "Dodano {count, plural, one {# asset} other {# assets}}",
"assets_added_to_album_count": "Dodano {count, plural, one {# asset} other {# assets}} u album",
"assets_added_to_name_count": "Dodano {count, plural, one {# asset} other {# assets}} u {hasName, select, true {<b>{name}</b>} other {new album}}",
"assets_cannot_be_added_to_album_count": "{count, plural,\n one {Nije moguće dodati medij u album}\n few {Nije moguće dodati # medija u album}\n other {Nije moguće dodati # medija u album}\n}",
"assets_count": "{count, plural, one {# asset} other {# assets}}",
"assets_deleted_permanently": "{count} resurs(i) uspješno uklonjeni",

View File

@ -22,6 +22,7 @@
"add_partner": "Partner hozzáadása",
"add_path": "Elérési útvonal megadása",
"add_photos": "Fotók hozzáadása",
"add_tag": "Címke hozzáadása",
"add_to": "Hozzáadás ide…",
"add_to_album": "Felvétel albumba",
"add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz",
@ -33,6 +34,7 @@
"added_to_favorites_count": "{count, number} hozzáadva a kedvencekhez",
"admin": {
"add_exclusion_pattern_description": "Kihagyási minták (pattern) megadása. A *, ** és ? helyettesítő karakterek engedélyezettek. Pl. a \"Raw\" könyvtárban tárolt összes fájl kihagyásához használható a \"**/Raw/**\". Minden \".tif\" fájl kihagyása az összes mappában: \"**/*.tif\". Abszolút elérési útvonal kihagyása: \"/kihagyni/kivant/mappa/**\".",
"admin_user": "Admin felhasználó",
"asset_offline_description": "Ez a külső képtárban lévő elem már nem található, ezért a lomtárba került. Ha a fájl a képtáron belül lett áthelyezve, akkor ellenőrizd, hogy továbbra is látható az idővonaladon. Az elem visszaállításához győződj meg róla, hogy az alábbi mappa az Immich számára elérhető, majd újra fésüld át a képtárat.",
"authentication_settings": "Hitelesítési beállítások",
"authentication_settings_description": "Jelszó, OAuth és egyéb hitelesítési beállítások kezelése",
@ -43,7 +45,7 @@
"backup_database_enable_description": "Adatbázis mentések engedélyezése",
"backup_keep_last_amount": "Megőrizendő korábbi mentések száma",
"backup_settings": "Adatbázis mentés beállításai",
"backup_settings_description": "Adatbázis mentés beállításainak kezelése. Megjegyzés: Ezek a feladatok nincsenek felügyelve, így nem kapsz értesítés meghiúsulás esetén.",
"backup_settings_description": "Adatbázis mentés beállításainak kezelése.",
"cleared_jobs": "{job}: feladatai törölve",
"config_set_by_file": "A konfigurációt jelenleg egy konfigurációs fájl állítja be",
"confirm_delete_library": "Biztosan ki szeretnéd törölni a {library} képtárat?",
@ -138,7 +140,7 @@
"machine_learning_smart_search_description": "Képek szemantikai keresése CLIP beágyazások segítségével",
"machine_learning_smart_search_enabled": "Okos keresés engedélyezése",
"machine_learning_smart_search_enabled_description": "Ha ki van kapcsolva, a képek nem lesznek átalakítva okos kereséshez.",
"machine_learning_url_description": "Gépi tanulás szerver URL címe. Ha többi, mint egy URL van megadva, mindegyik szervert egyenként próbálja meg, amíg az egyik sikeresen nem válaszol, sorrendben az elsőtől az utólsóig. A nem válaszoló szervereket átmenetileg figyelmen kívül hagyja, amíg újra online nem lesznek.",
"machine_learning_url_description": "Gépi tanulás szerver URL címe. Ha többi, mint egy URL van megadva, mindegyik szervert egyenként próbálja meg, amíg az egyik sikeresen nem válaszol, sorrendben az elsőtől az utólsóig. A nem elérhető szervereket átmenetileg figyelmen kívül lesznek hagyva, amíg újra online nem lesznek.",
"manage_concurrency": "Párhuzamos Feladatok Kezelése",
"manage_log_settings": "Naplózási beállítások kezelése",
"map_dark_style": "Sötét stílus",
@ -155,7 +157,7 @@
"map_settings_description": "Térkép beállítások kezelése",
"map_style_description": "Egy style.json térképtémára mutató URL cím",
"memory_cleanup_job": "Memória takarítás",
"memory_generate_job": "Emlék generálálsa",
"memory_generate_job": "Emlék generálása",
"metadata_extraction_job": "Metaadatok kinyerése",
"metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből",
"metadata_faces_import_setting": "Arc importálás engedélyezése",
@ -164,12 +166,18 @@
"metadata_settings_description": "Metaadat beállítások kezelése",
"migration_job": "Migrálás",
"migration_job_description": "Az elemek és arcok bélyegképeinek migrálása a legújabb mappastruktúrába",
"nightly_tasks_cluster_faces_setting_description": "Arcfelismerés futtatása az újonnan érzékelt arcokon",
"nightly_tasks_database_cleanup_setting": "Adatbázis-tisztítási feladatok",
"nightly_tasks_database_cleanup_setting_description": "A régi, lejárt adatok törlése az adatbázisból",
"nightly_tasks_generate_memories_setting": "Emlékek generálása",
"nightly_tasks_generate_memories_setting_description": "Új emlékek létrehozása elemekből",
"nightly_tasks_missing_thumbnails_setting": "Hiányzó indexképek generálása",
"no_paths_added": "Nincs megadva elérési útvonal",
"no_pattern_added": "Nincs megadva minta (pattern)",
"note_apply_storage_label_previous_assets": "Megjegyzés: Ha a korábban feltöltött elemekhez is szeretne Tárhely Címkéket társítani, akkor futtassa ezt",
"note_cannot_be_changed_later": "FIGYELEM: ezt később nem lehet megváltoztatni!",
"notification_email_from_address": "Feladó cím",
"notification_email_from_address_description": "Küldő email címe, például: \"Immich Fotószerver <noreply@example.com>\"",
"notification_email_from_address_description": "Küldő email címe, például: \"Immich Fotószerver <noreply@example.com>\". Figyelj hogy olyan címet adj meg ahonnan az email küldés engedélyezett.",
"notification_email_host_description": "Email szerver kiszolgálója (pl. smtp.immich.app)",
"notification_email_ignore_certificate_errors": "Tanúsítvány hibák figyelmen kívül hagyása",
"notification_email_ignore_certificate_errors_description": "TLS tanúsítvány érvényességi hibák figyelmen kívül hagyása (nem ajánlott)",
@ -202,7 +210,7 @@
"oauth_storage_quota_claim": "Tárhelykvóta igénylése",
"oauth_storage_quota_claim_description": "A felhasználó tárhelykvótájának automatikus beállítása ennek az igényeltre.",
"oauth_storage_quota_default": "Alapértelmezett tárhelykvóta (GiB)",
"oauth_storage_quota_default_description": "Alapértelmezett tárhely kvóta GiB-ban, amennyiben a felhasználó nem jelezte az igényét (A korlátlan tárhelyhez 0-t adj meg).",
"oauth_storage_quota_default_description": "Alapértelmezett tárhely kvóta GiB-ban, amennyiben a felhasználó nem jelezte az igényét.",
"oauth_timeout": "Kérés időkorlátja",
"oauth_timeout_description": "Kérések időkorlátja milliszekundumban",
"password_enable_description": "Bejelentkezés emaillel és jelszóval",
@ -242,6 +250,7 @@
"storage_template_migration_info": "A sablon az összes kiterjesztést kisbetűssé alakítja át. A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.",
"storage_template_migration_job": "Tárhely Sablon Migrációja",
"storage_template_more_details": "További részletekért erről a funkcióról lásd a <template-link>Tárhely Sablon</template-link> és annak <implications-link>következményeit</implications-link> a dokumentációban",
"storage_template_onboarding_description_v2": "A funkció engedélyezésével automatikusan, a felhasználó által definiált sablon alapján lesznek rendezve a fájlok. Több információért lásd a <link>dokumentációt</link>.",
"storage_template_path_length": "Útvonal hozzávetőleges maximális hossza: <b>{length, number}</b>{limit, number}",
"storage_template_settings": "Tárhely Sablon",
"storage_template_settings_description": "A feltöltött elemek mappaszerkezetének és fájl elnevezésének kezelése",
@ -256,7 +265,7 @@
"template_email_update_album": "Album frissítve sablon",
"template_email_welcome": "Üdvözlő email sablon",
"template_settings": "Értesítés sablon",
"template_settings_description": "Egyéni sablonok kezelése az értesítésekhez.",
"template_settings_description": "Egyéni sablonok kezelése az értesítésekhez",
"theme_custom_css_settings": "Egyedi CSS",
"theme_custom_css_settings_description": "CSS Stíluslapokkal az Immich stílusa megváltoztatható.",
"theme_settings": "Téma Beállítások",
@ -288,7 +297,7 @@
"transcoding_encoding_options": "Enkódolás beállítások",
"transcoding_encoding_options_description": "Beállíthatod az enkódolt videók kódolási algoritmusát, felbontását, minőségét és egyéb beállításait",
"transcoding_hardware_acceleration": "Hardveres Gyorsítás",
"transcoding_hardware_acceleration_description": "Kísérleti funkció. Sokkal gyorsabb, viszont azonos bitrátán is alacsonyabb minőséghez vezet",
"transcoding_hardware_acceleration_description": "Kísérleti funkció: gyorsabb transzkódolás, viszont azonos bitrátán alacsonyabb minőséghez vezethet",
"transcoding_hardware_decoding": "Hardveres dekódolás",
"transcoding_hardware_decoding_setting_description": "Lehetővé teszi az egész folyamat gyorsítását a pusztán kódolás gyorsítása helyett. Nem biztos, hogy minden videó esetén működik.",
"transcoding_max_b_frames": "B-képkockák maximum száma",
@ -334,6 +343,7 @@
"user_delete_delay_settings_description": "Hány nappal az eltávolítás után legyen véglegesen törölve a felhasználó fiókja és tárolt elemei. A végleges törlés feladat minden éjfélkor fut le, hogy ellenőrizze, hogy van-e törlendő felhasználó. Ez a beállítás a következő futtatás során lép életbe.",
"user_delete_immediately": "<b>{user}</b> felhasználója és összes eleme <b>azonnal</b> sorba állításra kerül a végleges törléshez .",
"user_delete_immediately_checkbox": "Felhasználó és tárolt elemeinek sorba állítása azonnali törlésre",
"user_details": "Felhasználói adatok",
"user_management": "Felhasználók Kezelése",
"user_password_has_been_reset": "A felhasználó jelszava megváltoztatásra került:",
"user_password_reset_description": "Juttasd el az átmeneti jelszót a felhasználóhoz és tájékoztasd, hogy a következő belépésnél azt majd meg kell változtatnia.",
@ -349,19 +359,21 @@
"video_conversion_job": "Videók Átkódolása",
"video_conversion_job_description": "Videók átkódolása böngészőkkel és eszközökkel való széleskörű kompatibilitás érdekében"
},
"admin_email": "Admin e-mail",
"admin_password": "Admin Jelszó",
"administration": "Adminisztráció",
"advanced": "Haladó",
"advanced_settings_enable_alternate_media_filter_subtitle": "Ezzel a beállítással a szinkronizálás során alternatív kritériumok alapján szűrheted a fájlokat. Csak akkor próbáld ki, ha problémáid vannak azzal, hogy az alkalmazás nem ismeri fel az összes albumot.",
"advanced_settings_enable_alternate_media_filter_title": "[KÍSÉRLETI] Alternatív eszköz album szinkronizálási szűrő használata",
"advanced_settings_log_level_title": "Naplózás szintje: {level}",
"advanced_settings_prefer_remote_subtitle": "Néhány eszköz fájdalmasan lassan tölti be az eszközön lévő bélyegképeket. Ez a beállítás inkább a távoli képeket tölti be helyettük.",
"advanced_settings_prefer_remote_subtitle": "Néhány eszköz fájdalmasan lassan tölti be az eszközön lévő indexképeket. Ez a beállítás inkább a távoli képeket (a szerverről) tölti be helyettük.",
"advanced_settings_prefer_remote_title": "Távoli képek előnyben részesítése",
"advanced_settings_proxy_headers_subtitle": "Add meg azokat a proxy fejléceket, amiket az app elküldjön minden hálózati kérésnél",
"advanced_settings_proxy_headers_title": "Proxy Fejlécek",
"advanced_settings_self_signed_ssl_subtitle": "Nem ellenőrzi a szerver SSL tanúsítványát. Önaláírt tanúsítvány esetén szükséges beállítás.",
"advanced_settings_self_signed_ssl_title": "Önaláírt SSL tanúsítványok engedélyezése",
"advanced_settings_sync_remote_deletions_subtitle": "Automatikusan törölni vagy visszaállítani egy elemet ezen az eszközön, ha az adott műveletet a weben hajtották végre",
"advanced_settings_sync_remote_deletions_title": "Távoli törlések szinkronizálása [KÍSÉRLETI FUNKCIÓ]",
"advanced_settings_tile_subtitle": "Haladó felhasználói beállítások",
"advanced_settings_troubleshooting_subtitle": "További funkciók engedélyezése hibaelhárítás céljából",
"advanced_settings_troubleshooting_title": "Hibaelhárítás",
@ -398,6 +410,9 @@
"album_with_link_access": "A link birtokában bárki láthatja a fotókat és a személyeket ebben az albumban.",
"albums": "Albumok",
"albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Album}}",
"albums_default_sort_order": "Alapértelmezett album rendezés",
"albums_default_sort_order_description": "Alapértelmezett sorrendezés új albumok létrehozásánál.",
"albums_feature_description": "Másokkal megosztható elemek gyűjteménye.",
"all": "Mind",
"all_albums": "Minden album",
"all_people": "Minden személy",
@ -455,10 +470,11 @@
"assets": "Elemek",
"assets_added_count": "{count, plural, other {# elem}} hozzáadva",
"assets_added_to_album_count": "{count, plural, other {# elem}} hozzáadva az albumhoz",
"assets_added_to_name_count": "{count, plural, other {# elem}} hozzáadva {hasName, select, true {a(z) <b>{name}</b>} other {az új}} albumhoz",
"assets_cannot_be_added_to_album_count": "{count, plural, one {Az elem} other {Az elemek}} nem adhatóak hozzá az albumhoz",
"assets_count": "{count, plural, other {# elem}}",
"assets_deleted_permanently": "{count} elem véglegesen törölve",
"assets_deleted_permanently_from_server": "{count} elem véglegesen törölve az Immich szerverről",
"assets_downloaded_successfully": "{count, plural, one {# fájl sikeresen letöltve} other {# fájl sikeresen letöltve}}",
"assets_moved_to_trash_count": "{count, plural, other {# elem}} áthelyezve a lomtárba",
"assets_permanently_deleted_count": "{count, plural, other {# elem}} véglegesen törölve",
"assets_removed_count": "{count, plural, other {# elem}} eltávolítva",
@ -484,10 +500,10 @@
"backup_album_selection_page_selection_info": "Összegzés",
"backup_album_selection_page_total_assets": "Összes egyedi elem",
"backup_all": "Összes",
"backup_background_service_backup_failed_message": "Az elemek mentése sikertelen. Újrapróbálkozás...",
"backup_background_service_connection_failed_message": "A szerverhez csatlakozás sikertelen. Újrapróbálkozás...",
"backup_background_service_backup_failed_message": "Az elemek mentése sikertelen. Újrapróbálkozás",
"backup_background_service_connection_failed_message": "A szerverhez csatlakozás sikertelen. Újrapróbálkozás",
"backup_background_service_current_upload_notification": "Feltöltés {filename}",
"backup_background_service_default_notification": "Új elemek ellenőrzése...",
"backup_background_service_default_notification": "Új elemek ellenőrzése",
"backup_background_service_error_title": "Hiba a mentés közben",
"backup_background_service_in_progress_notification": "Elemek mentése folyamatban…",
"backup_background_service_upload_failure_notification": "A feltöltés sikertelen {filename}",
@ -497,6 +513,7 @@
"backup_controller_page_background_app_refresh_enable_button_text": "Beállítások megnyitása",
"backup_controller_page_background_battery_info_link": "Mutasd meg hogyan",
"backup_controller_page_background_battery_info_message": "A sikeres háttérben történő mentéshez kérjük, tiltsd le az Immich akkumulátor optimalizálását.\n\nMivel ezt a különféle eszközökön máshogy kell, ezért kérjük, az eszközöd gyártójától tudd meg, hogyan kell.",
"backup_controller_page_background_battery_info_ok": "OK",
"backup_controller_page_background_battery_info_title": "Akkumulátor optimalizálás",
"backup_controller_page_background_charging": "Csak töltés közben",
"backup_controller_page_background_configure_error": "A háttérszolgáltatás beállítása sikertelen",
@ -506,7 +523,7 @@
"backup_controller_page_background_is_on": "Automatikus mentés a háttérben be van kapcsolva",
"backup_controller_page_background_turn_off": "Háttérszolgáltatás kikapcsolása",
"backup_controller_page_background_turn_on": "Háttérszolgáltatás bekapcsolása",
"backup_controller_page_background_wifi": "Csak WiFi-n",
"backup_controller_page_background_wifi": "Csak Wi-Fi-n",
"backup_controller_page_backup": "Mentés",
"backup_controller_page_backup_selected": "Kiválasztva: ",
"backup_controller_page_backup_sub": "Mentett fotók és videók",
@ -539,6 +556,10 @@
"backup_options_page_title": "Biztonági mentés beállításai",
"backup_setting_subtitle": "A háttérben és előtérben mentés beállításainak kezelése",
"backward": "Visszafele",
"biometric_auth_enabled": "Biometrikus azonosítás engedélyezve",
"biometric_locked_out": "Ki vagy zárva a biometrikus azonosításból",
"biometric_no_options": "Nincsen elérhető biometrikus azonosítás",
"biometric_not_available": "Biometrikus azonosítás ezen az eszközön nem elérhető",
"birthdate_saved": "Születésnap elmentve",
"birthdate_set_description": "A születés napját a rendszer arra használja, hogy kiírja, hogy a fénykép készítésekor a személy hány éves volt.",
"blurred_background": "Homályos háttér",
@ -572,6 +593,7 @@
"cannot_undo_this_action": "Ez a művelet nem visszavonható!",
"cannot_update_the_description": "A leírás megváltoztatása nem sikerült",
"change_date": "Dátum változtatása",
"change_description": "Leírás megváltoztatása",
"change_display_order": "Megjelenítési sorrend megváltoztatása",
"change_expiration_time": "Lejárati idő megváltoztatása",
"change_location": "Helyszín változtatása",
@ -598,6 +620,7 @@
"clear_all_recent_searches": "Legutóbbi keresések törlése",
"clear_message": "Üzenet törlése",
"clear_value": "Érték törlése",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Jelszó Megadása",
"client_cert_import": "Importálás",
"client_cert_import_success_msg": "Kliens tanúsítvány importálva",
@ -625,6 +648,10 @@
"confirm_keep_this_delete_others": "Minden más elem a készletben törlésre kerül, kivéve ezt az elemet. Biztosan folytatni szeretnéd?",
"confirm_new_pin_code": "Új PIN kód megerősítése",
"confirm_password": "Jelszó megerősítése",
"confirm_tag_face": "Szeretnéd ezt az arcot {name}-nak/nek megjelölni?",
"confirm_tag_face_unnamed": "Szeretnéd ezt az arcot megjelölni?",
"connected_device": "Kapcsolt eszköz",
"connected_to": "Kapcsolódva",
"contain": "Belül",
"context": "Kontextus",
"continue": "Folytatás",
@ -633,6 +660,7 @@
"control_bottom_app_bar_delete_from_local": "Törlés az eszközről",
"control_bottom_app_bar_edit_location": "Hely Módosítása",
"control_bottom_app_bar_edit_time": "Dátum és Idő Módosítása",
"control_bottom_app_bar_share_link": "Link megosztása",
"control_bottom_app_bar_share_to": "Megosztás Ide",
"control_bottom_app_bar_trash_from_immich": "Lomtárba Helyez",
"copied_image_to_clipboard": "Kép a vágólapra másolva.",
@ -664,6 +692,7 @@
"create_tag_description": "Új címke létrehozása. Beágyazott címkék esetén add meg a címke teljes elérési útvonalát, beleértve a perjeleket is.",
"create_user": "Felhasználó létrehozása",
"created": "Készült",
"created_at": "Létrehozva",
"crop": "Kivágás",
"curated_object_page_title": "Dolgok",
"current_device": "Ez az eszköz",
@ -719,7 +748,9 @@
"direction": "Irány",
"disabled": "Letiltott",
"disallow_edits": "Módosítások letiltása",
"discord": "Discord",
"discover": "Felfedez",
"discovered_devices": "Felfedezett eszközök",
"dismiss_all_errors": "Minden hiba elvetése",
"dismiss_error": "Hiba elvetése",
"display_options": "Megjelenítési beállítások",
@ -744,8 +775,8 @@
"download_settings_description": "Elemek letöltésével kapcsolatos beállítások kezelése",
"download_started": "Letöltés megkezdve",
"download_sucess": "Sikeres letöltés",
"download_sucess_android": "Média letöltve a DCIM/Immich mappába\n",
"download_waiting_to_retry": "Várakozás",
"download_sucess_android": "Média letöltve a DCIM/Immich mappába",
"download_waiting_to_retry": "Várás az újrapróbálkozásra",
"downloading": "Letöltés",
"downloading_asset_filename": "{filename} elem letöltése",
"downloading_media": "Média letöltése",
@ -758,6 +789,8 @@
"edit_avatar": "Profilkép módosítása",
"edit_date": "Dátum módosítása",
"edit_date_and_time": "Dátum és idő módosítása",
"edit_description": "Leírás szerkesztése",
"edit_description_prompt": "Kérlek válassz egy új leírást:",
"edit_exclusion_pattern": "Kizárási minta (pattern) módosítása",
"edit_faces": "Arcok módosítása",
"edit_import_path": "Importálási útvonal módosítása",
@ -777,18 +810,25 @@
"editor_close_without_save_title": "Szerkesztő bezárása?",
"editor_crop_tool_h2_aspect_ratios": "Oldalarányok",
"editor_crop_tool_h2_rotation": "Forgatás",
"email": "E-mail",
"email_notifications": "E-mail értesítések",
"empty_folder": "Ez a mappa üres",
"empty_trash": "Lomtár ürítése",
"empty_trash_confirmation": "Biztosan kiüríted a lomtárat? Ez az Immich lomtárában lévő összes elemet véglegesen törli.\nEz a művelet nem visszavonható!",
"enable": "Engedélyezés",
"enable_biometric_auth_description": "Add meg a jelszavad a biometrikus azonosítás engedélyezéséhez",
"enabled": "Engedélyezve",
"end_date": "Vég dátum",
"enqueued": "Sorba állítva",
"enter_wifi_name": "Add meg a WiFi hálózat nevét",
"enter_wifi_name": "Add meg a Wi-Fi hálózat nevét",
"enter_your_pin_code": "Add meg a jelszavad",
"enter_your_pin_code_subtitle": "Add meg a PIN kódodat a zárolt mappa megnyitásához",
"error": "Hiba",
"error_change_sort_album": "Album sorbarendezésének megváltoztatása sikertelen",
"error_delete_face": "Hiba az arc törlése során",
"error_loading_image": "Hiba a kép betöltése közben",
"error_saving_image": "Hiba: {error}",
"error_tag_face_bounding_box": "Hiba az arc megjelölése közben - nem elérhetőek a határoló koordináták",
"error_title": "Hiba - valami félresikerült",
"errors": {
"cannot_navigate_next_asset": "Nem lehet a következő elemhez navigálni",
@ -816,10 +856,12 @@
"failed_to_keep_this_delete_others": "Nem sikerült megtartani ezt az elemet, és a többi elemet törölni",
"failed_to_load_asset": "Elem betöltése sikertelen",
"failed_to_load_assets": "Elemek betöltése sikertelen",
"failed_to_load_notifications": "Értesítések betöltése sikertelen",
"failed_to_load_people": "Személyek betöltése sikertelen",
"failed_to_remove_product_key": "Termékkulcs eltávolítása sikertelen",
"failed_to_stack_assets": "Elemek csoportosítása sikertelen",
"failed_to_unstack_assets": "Csoportosított elemek szétszedése sikertelen",
"failed_to_update_notification_status": "Értesítés státusz frissítése sikertelen",
"import_path_already_exists": "Ez az importálási útvonal már létezik.",
"incorrect_email_or_password": "Helytelen email vagy jelszó",
"paths_validation_failed": "A(z) {paths, plural, one {# elérési útvonal} other {# elérési útvonal}} érvényesítése sikertelen",
@ -836,6 +878,7 @@
"unable_to_archive_unarchive": "Az elem {archived, select, true {archiválása} other {kivétele az archívumból}} sikertelen",
"unable_to_change_album_user_role": "Az album felhasználói jogkörének megváltoztatása sikertelen",
"unable_to_change_date": "Dátum megváltoztatása sikertelen",
"unable_to_change_description": "Leírás módosítása sikertelen",
"unable_to_change_favorite": "Az elem kedvenc állapotának megváltoztatása sikertelen",
"unable_to_change_location": "Hely megváltoztatása sikertelen",
"unable_to_change_password": "Jelszó megváltoztatása sikertelen",
@ -879,6 +922,7 @@
"unable_to_remove_partner": "Partner eltávolítása sikertelen",
"unable_to_remove_reaction": "Reakció eltávolítása sikertelen",
"unable_to_reset_password": "Jelszó visszaállítása sikertelen",
"unable_to_reset_pin_code": "PIN kód visszaállítása sikertelen",
"unable_to_resolve_duplicate": "Duplikátum feloldása sikertelen",
"unable_to_restore_assets": "Elemek visszaállítása sikertelen",
"unable_to_restore_trash": "Az összes elem visszaállítása sikertelen",
@ -906,11 +950,14 @@
"unable_to_update_user": "Felhasználó módosítása sikertelen",
"unable_to_upload_file": "Fájlfeltöltés sikertelen"
},
"exif": "Exif",
"exif_bottom_sheet_description": "Leírás Hozzáadása...",
"exif_bottom_sheet_details": "RÉSZLETEK",
"exif_bottom_sheet_location": "HELY",
"exif_bottom_sheet_people": "EMBEREK",
"exif_bottom_sheet_person_add_person": "Elnevez",
"exif_bottom_sheet_person_age_months": "{months} hónap idős",
"exif_bottom_sheet_person_age_year_months": "1 év, {months} hónap idős",
"exit_slideshow": "Kilépés a Diavetítésből",
"expand_all": "Összes kinyitása",
"experimental_settings_new_asset_list_subtitle": "Fejlesztés alatt",
@ -928,10 +975,12 @@
"external": "Külső Képtár",
"external_libraries": "Külső Képtárak",
"external_network": "Külső hálózat",
"external_network_sheet_info": "Ha nem vagy a megadott WiFi hálózathoz csatlakozva, akkor az alkalmazás az alábbi URL címeken fogja elérni a szervert, fentről lefelé haladva",
"external_network_sheet_info": "Ha nem vagy a megadott Wi-Fi hálózathoz csatlakozva, akkor az alkalmazás az alábbi URL címeken fogja elérni a szervert, fentről lefelé haladva",
"face_unassigned": "Nincs hozzárendelve",
"failed": "Sikertelen",
"failed_to_authenticate": "Autentikáció sikertelen",
"failed_to_load_assets": "Nem sikerült betölteni az elemeket",
"failed_to_load_folder": "Mappa betöltése sikertelen",
"favorite": "Kedvenc",
"favorite_or_unfavorite_photo": "Fotó kedvencnek jelölése vagy annak visszavonása",
"favorites": "Kedvencek",
@ -945,14 +994,19 @@
"filetype": "Fájltípus",
"filter": "Szűrő",
"filter_people": "Személyek szűrése",
"filter_places": "Helyszínek szűrése",
"find_them_fast": "Név alapján kereséssel gyorsan megtalálhatóak",
"fix_incorrect_match": "Hibás találat javítása",
"folder": "Mappa",
"folder_not_found": "Mappa nem található",
"folders": "Mappák",
"folders_feature_description": "A fájlrendszerben lévő fényképek és videók mappanézetben való böngészése",
"forward": "Előre",
"gcast_enabled": "Google Cast",
"gcast_enabled_description": "Ez a funkció a Google-től tölti be a működéséhez szükséges külső adatokat.",
"general": "Általános",
"get_help": "Segítségkérés",
"get_wifiname_error": "Nem sikerült lekérni a Wi-Fi nevét. Győződj meg róla, hogy megadtad a szükséges engedélyeket és csatlakoztál egy Wi-Fi hálózathoz.",
"get_wifiname_error": "Nem sikerült lekérni a Wi-Fi nevét. Győződj meg róla, hogy megadtad a szükséges engedélyeket és csatlakoztál egy Wi-Fi hálózathoz",
"getting_started": "Kezdő Lépések",
"go_back": "Visszalépés",
"go_to_folder": "Ugrás a mappához",
@ -981,9 +1035,9 @@
"hide_person": "Személy elrejtése",
"hide_unnamed_people": "Név nélküli személyek elrejtése",
"home_page_add_to_album_conflicts": "{added} elem hozzáadva a(z) \"{album}\" albumhoz. {failed} elem már eleve az albumban volt.",
"home_page_add_to_album_err_local": "Helyi elemeket még nem lehet albumba tenni. Kihagyjuk.",
"home_page_add_to_album_err_local": "Helyi elemeket még nem lehet albumba tenni, ki lesznek hagyva",
"home_page_add_to_album_success": "{added} elem hozzáadva a(z) \"{album}\" albumhoz.",
"home_page_album_err_partner": "Még nem lehet a partner elemeit albumokhoz adni, úghogy kihagyjuk.",
"home_page_album_err_partner": "Még nem lehet a partner elemeit albumokhoz adni, ki lesznek hagyva",
"home_page_archive_err_local": "Helyi elemek archiválása még nem támogatott, úgyhogy kihagyjuk",
"home_page_archive_err_partner": "Partner elemeit nem lehet archiválni, úgyhogy kihagyjuk",
"home_page_building_timeline": "Idővonal összeállítása",
@ -991,11 +1045,14 @@
"home_page_delete_remote_err_local": "Helyi elemek vannak távoli törlésre kiválasztva, úgyhogy ezeket kihagyjuk",
"home_page_favorite_err_local": "Helyi elemeket még nem lehet a kedvencek közé tenni, úgyhogy ezeket kihagyjuk",
"home_page_favorite_err_partner": "Partner elemeit még nem lehet a kedvencek közé tenni, úgyhogy ezeket kihagyjuk",
"home_page_first_time_notice": "Ha most használod először az alkalmazást, akkor ahhoz, hogy megjelenjenek a fotók és a videók az idővonaladon, állítsd be, hogy melyik albumaidról készüljön biztonsági mentés.",
"home_page_first_time_notice": "Ha most használod először az alkalmazást, a fotók és videók megjelenítéséhez az idővonaladon, állítsd be, hogy melyik albumaidról készüljön biztonsági mentés",
"home_page_locked_error_local": "A Helyi elemek nem mozgathatóak a zárolt mappába, ki lesznek hagyva",
"home_page_locked_error_partner": "Partner elemek nem mozgathatóak a zárolt mappába, átugorva",
"home_page_share_err_local": "Helyi elemekről nem lehet megosztott linket készíteni, úgyhogy kihagyjuk",
"home_page_upload_err_limit": "Csak 30 elemet tudsz egyszerre feltölteni, úgyhogy kihagyjuk",
"host": "Kiszolgáló",
"hour": "Óra",
"id": "Azonosító",
"ignore_icloud_photos": "iCloud fotók figyelmen kívül hagyása",
"ignore_icloud_photos_description": "Az iCloud-ban tárolt fotók nem lesznek feltöltve az Immich szerverre",
"image": "Kép",
@ -1035,6 +1092,11 @@
"invalid_date_format": "Érvénytelen dátumformátum",
"invite_people": "Személyek Meghívása",
"invite_to_album": "Meghívás az albumba",
"ios_debug_info_last_sync_at": "Utoljára szinkronizálva {dateTime}",
"ios_debug_info_no_processes_queued": "Nincs a sorban háttérfolyamat jelenleg",
"ios_debug_info_no_sync_yet": "Még nem futott szinkronizáló háttérfolyamat",
"ios_debug_info_processes_queued": "{count, plural, one {{count} háttérfolyamat előkészítve} other {{count} háttérfolyamat előkészítve}}",
"ios_debug_info_processing_ran_at": "A feldolgozás ekkor futott: {dateTime}",
"items_count": "{count, plural, other {# elem}}",
"jobs": "Feladatok",
"keep": "Megtart",
@ -1043,6 +1105,8 @@
"kept_this_deleted_others": "Ez az elem és a töröltek meg lettek hagyva {count, plural, one {# asset} other {# assets}}",
"keyboard_shortcuts": "Billentyűparancsok",
"language": "Nyelv",
"language_no_results_subtitle": "Próbáld módosítani a szavaidat a keresésnél",
"language_search_hint": "Nyelvek keresése...",
"language_setting_description": "Válaszd ki preferált nyelvet",
"last_seen": "Utoljára láttuk",
"latest_version": "Legfrissebb Verzió",
@ -1071,14 +1135,17 @@
"local_network": "Helyi hálózat",
"local_network_sheet_info": "Az alkalmazés ezen az URL címen fogja elérni a szervert, ha a megadott WiFi hálózathoz van csatlankozva",
"location_permission": "Helymeghatározási engedély",
"location_permission_content": "Hálózatok automatikus váltásához az Immich-nek *mindenképpen* hozzá kell férnie a pontos helyzethez, hogy az alkalmazás le tudja kérni a Wi-Fi hálózat nevét",
"location_permission_content": "A Hálózatok automatikus váltásához az Immich-nek szüksége van a pontos helymeghatározásra, hogy az alkalmazás le tudja kérni a Wi-Fi hálózat nevét",
"location_picker_choose_on_map": "Válassz a térképen",
"location_picker_latitude_error": "Érvényes szélességi kört írj be",
"location_picker_latitude_hint": "Ide írd a szélességi kört",
"location_picker_longitude_error": "Érvényes hosszúsági kört írj be",
"location_picker_longitude_hint": "Ide írd a hosszúsági kört",
"lock": "Zárolás",
"locked_folder": "Zárolt mappa",
"log_out": "Kijelentkezés",
"log_out_all_devices": "Kijelentkezés Minden Eszközön",
"logged_in_as": "Belépve: {user} néven",
"logged_out_all_devices": "Minden eszköz kijelentkeztetve",
"logged_out_device": "Eszköz kijelentkeztetve",
"login": "Bejelentkezés",
@ -1093,7 +1160,7 @@
"login_form_err_invalid_url": "Érvénytelen cím",
"login_form_err_leading_whitespace": "Az első karakter szóköz",
"login_form_err_trailing_whitespace": "Az utolsó karakter szóköz",
"login_form_failed_get_oauth_server_config": "Nem sikerült az OAuth bejelentkezés. Ellenőrizd a szerver címét.",
"login_form_failed_get_oauth_server_config": "Nem sikerült az OAuth bejelentkezés. Ellenőrizd a szerver URL-t",
"login_form_failed_get_oauth_server_disable": "OAuth bejelentkezés nem elérhető ezen a szerveren",
"login_form_failed_login": "Hiba a bejelentkezés közben, ellenőrizd a szerver címét, az emailt és a jelszót",
"login_form_handshake_exception": "SSL Kézfogási Hiba törént. Engedélyezd az önaláírt tanúsítvényokat a beállításokban, hogy ha önaláírt tanúsítványt használsz.",
@ -1145,6 +1212,9 @@
"map_settings_only_show_favorites": "Csak Kedvencek Mutatása",
"map_settings_theme_settings": "Térkép Témája",
"map_zoom_to_see_photos": "Kicsinyítsd, hogy láss fényképeket",
"mark_all_as_read": "Összes megjelölése olvasottként",
"mark_as_read": "Megjelölés olvasottként",
"marked_all_as_read": "Összes megjelölve olvasottként",
"matches": "Azonosak",
"media_type": "Médiatípus",
"memories": "Emlékek",
@ -1169,6 +1239,12 @@
"month": "Hónap",
"monthly_title_text_date_format": "y MMMM",
"more": "Továbbiak",
"move": "Áthelyezés",
"move_off_locked_folder": "Átmozgatás a zárolt mappából",
"move_to_locked_folder": "Áthelyezés a zárolt mappába",
"move_to_locked_folder_confirmation": "Ezek a képek és videók az összes albumból kikerülnek, és csak a zárolt mappában lesznek elérhetőek",
"moved_to_archive": "{count, plural, one {# Elem} other {# Elemek}} archiválva",
"moved_to_library": "{count, plural, one {# Elem} other {# Elemek}} másik könyvtárba költöztetve",
"moved_to_trash": "Áthelyezve a lomtárba",
"multiselect_grid_edit_date_time_err_read_only": "Csak-olvasható elem(ek) dátuma nem módosítható, ezért kihagyjuk",
"multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helye nem módosítható, ezért kihagyjuk",
@ -1184,6 +1260,7 @@
"new_password": "Új jelszó",
"new_person": "Új személy",
"new_pin_code": "Új PIN kód",
"new_pin_code_subtitle": "Ez az első alkalom hogy megnyitod a zárolt mappát. Hozz létre egy jelszót a mappa biztonságos eléréséhez",
"new_user_created": "Új felhasználó létrehozva",
"new_version_available": "ÚJ VERZIÓ ÉRHETŐ EL",
"newest_first": "Legújabb először",
@ -1201,7 +1278,9 @@
"no_explore_results_message": "Tölts fel több képet, hogy böngészhesd a gyűjteményed.",
"no_favorites_message": "Add hozzá a kedvencekhez, hogy gyorsan megtaláld a legjobb képeidet és videóidat",
"no_libraries_message": "Hozz létre külső képtárat a fényképeid és videóid megtekintéséhez",
"no_locked_photos_message": "A zárolt mappában elhelyezett fotók és videók rejtettek, és nem jelennek meg a könyvtárad böngészése vagy keresése közben sem.",
"no_name": "Nincs Név",
"no_notifications": "Nincsenek értesítések",
"no_places": "Nincsenek helyek",
"no_results": "Nincs találat",
"no_results_description": "Próbálkozz szinonimákkal vagy általánosabb kulcsszavakkal",
@ -1210,6 +1289,7 @@
"not_selected": "Nincs kiválasztva",
"note_apply_storage_label_to_previously_uploaded assets": "Megjegyzés: a korábban feltöltött elemek Tárhely Címkézéséhez futtasd a(z)",
"notes": "Megjegyzések",
"nothing_here_yet": "Még semmi sincs itt",
"notification_permission_dialog_content": "Az értesítések bekapcsolásához a Beállítások menüben válaszd ki az Engedélyezés-t.",
"notification_permission_list_tile_content": "Értesítések engedélyezése.",
"notification_permission_list_tile_enable_button": "Értesítések Bekapcsolása",
@ -1217,15 +1297,21 @@
"notification_toggle_setting_description": "Email értesítések engedélyezése",
"notifications": "Értesítések",
"notifications_setting_description": "Értesítések kezelése",
"oauth": "OAuth",
"official_immich_resources": "Hivatalos Immich Források",
"offline": "Nem elérhető (offline)",
"ok": "Rendben",
"oldest_first": "Legrégebbi először",
"on_this_device": "Ezen az eszközön",
"onboarding": "Első lépések",
"onboarding_privacy_description": "Az alábbi (nem kötelező) funkciók külsős szolgáltatásokon alapulnak és bármikor kikapcsolhatóak az adminisztrációs beállításokban.",
"onboarding_locale_description": "Válaszd ki a preferált nyelved. Ezt később a beállításokban bármikor módosíthatod.",
"onboarding_privacy_description": "Az alábbi (nem kötelező) funkciók külsős szolgáltatásokon alapulnak és bármikor kikapcsolhatóak a beállításokban.",
"onboarding_theme_description": "Válassz egy színtémát. Ezt bármikor megváltoztathatod a beállításokban.",
"onboarding_user_welcome_description": "Kezdjünk bele!",
"onboarding_welcome_user": "Üdvözöllek {user}",
"online": "Online (elérhető)",
"only_favorites": "Csak kedvencek",
"open": "Nyitva",
"open_in_map_view": "Megnyitás térkép nézetben",
"open_in_openstreetmap": "Megnyitás OpenStreetMap-ben",
"open_the_search_filters": "Keresési szűrők megnyitása",
@ -1238,6 +1324,7 @@
"other_variables": "Egyéb változók",
"owned": "Tulajdonos",
"owner": "Tulajdonos",
"partner": "Partner",
"partner_can_access": "{partner} hozzáférhet",
"partner_can_access_assets": "Minden fényképed és videód, kivéve az Archiváltak és a Töröltek",
"partner_can_access_location": "A helyszín, ahol a fotókat készítették",
@ -1247,7 +1334,7 @@
"partner_page_no_more_users": "Nincs több hozzáadható felhasználó",
"partner_page_partner_add_failed": "Partner hozzáadása sikertelen",
"partner_page_select_partner": "Partner kiválasztása",
"partner_page_shared_to_title": "Megosztva: ",
"partner_page_shared_to_title": "Megosztva",
"partner_page_stop_sharing_content": "{partner} nem fog többé hozzáférni a fotóidhoz.",
"partner_sharing": "Partner Megosztás",
"partners": "Partnerek",
@ -1277,6 +1364,8 @@
"permanently_delete_assets_prompt": "Biztos, hogy véglegesen törölni {count, plural, one {szeretnéd ezt az elemet} other {szeretnél <b>#</b> elemet}}? Ez el fogja távolítani az {count, plural, one {elemet az albumokból, amikben szerepel} other {elemeket az albumokból, amikben szerepelnek}}.",
"permanently_deleted_asset": "Elem véglegesen törölve",
"permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve",
"permission": "Jogosultság",
"permission_empty": "A jogosultság nem hagyható üresen",
"permission_onboarding_back": "Vissza",
"permission_onboarding_continue_anyway": "Folytatás mindenképp",
"permission_onboarding_get_started": "Vágjunk bele",
@ -1284,7 +1373,7 @@
"permission_onboarding_permission_denied": "Hozzáférés megtagadva. Az Immich használatához engedélyezni kell a fotó és videó hozzáférést a Beállításokban.",
"permission_onboarding_permission_granted": "Hozzáférés engedélyezve! Minden készen áll.",
"permission_onboarding_permission_limited": "Korlátozott hozzáférés. Ha szeretnéd, hogy az Immich a teljes galéria gyűjteményedet mentse és kezelje, akkor a Beállításokban engedélyezd a fotó és videó jogosultságokat.",
"permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képeidhez és videóidhoz",
"permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képeidhez és videóidhoz.",
"person": "Személy",
"person_birthdate": "Született: {date}",
"person_hidden": "{name}{hidden, select, true { (rejtett)} other {}}",
@ -1304,19 +1393,25 @@
"play_memories": "Emlékek lejátszása",
"play_motion_photo": "Mozgókép lejátszása",
"play_or_pause_video": "Videó elindítása vagy megállítása",
"port": "Port",
"preferences_settings_subtitle": "Alkalmazásbeállítások kezelése",
"preferences_settings_title": "Beállítások",
"preset": "Sablon",
"preview": "Előnézet",
"previous": "Előző",
"previous_memory": "Előző emlék",
"previous_or_next_photo": "Előző vagy következő fotó",
"previous_or_next_day": "Nap előre/hátra",
"previous_or_next_month": "Hónap előre/hátra",
"previous_or_next_photo": "Fotó előre/hátra",
"previous_or_next_year": "Év előre/hátra",
"primary": "Elsődleges",
"privacy": "Magánszféra",
"profile": "Profil",
"profile_drawer_app_logs": "Naplók",
"profile_drawer_client_out_of_date_major": "A mobilalkalmazás elavult. Kérjük, frissítsd a legfrisebb főverzióra.",
"profile_drawer_client_out_of_date_minor": "A mobilalkalmazás elavult. Kérjük, frissítsd a legfrisebb alverzióra.",
"profile_drawer_client_server_up_to_date": "A Kliens és a Szerver is naprakész",
"profile_drawer_github": "GitHub",
"profile_drawer_server_out_of_date_major": "A szerver elavult. Kérjük, frissítsd a legfrisebb főverzióra.",
"profile_drawer_server_out_of_date_minor": "A szerver elavult. Kérjük, frissítsd a legfrisebb alverzióra.",
"profile_image_of_user": "{user} profilképe",
@ -1370,6 +1465,8 @@
"recent_searches": "Legutóbbi keresések",
"recently_added": "Nemrég hozzáadott",
"recently_added_page_title": "Nemrég Hozzáadott",
"recently_taken": "Nemrég készített",
"recently_taken_page_title": "Nemrég készített",
"refresh": "Frissítés",
"refresh_encoded_videos": "Átkódolt videók frissítése",
"refresh_faces": "Arcok frissítése",
@ -1389,9 +1486,12 @@
"remove_deleted_assets": "Törölt Elemek Eltávolítása",
"remove_from_album": "Eltávolítás az albumból",
"remove_from_favorites": "Eltávolítás a kedvencekből",
"remove_from_locked_folder": "Eltávolítás a zárolt mappából",
"remove_from_locked_folder_confirmation": "Biztosan ki szeretnéd venni ezeket a fotókat és videókat a zárolt mappából? Láthatóak lesznek a könyvtáradban.",
"remove_from_shared_link": "Eltávolítás a megosztott linkből",
"remove_memory": "Emlék eltávolítása",
"remove_photo_from_memory": "Kép eltávolítása az emlékből",
"remove_tag": "Címke eltávolítása",
"remove_url": "URL eltávolítása",
"remove_user": "Felhasználó eltávolítása",
"removed_api_key": "API Kulcs eltávolítva: {name}",
@ -1485,7 +1585,7 @@
"search_result_page_new_search_hint": "Új Keresés",
"search_settings": "Keresési beállítások",
"search_state": "Megye/Állam keresése...",
"search_suggestion_list_smart_search_hint_1": "Az intelligens keresés alapértelmezetten be van kapcsolva, metaadatokat így kereshetsz: ",
"search_suggestion_list_smart_search_hint_1": "Az intelligens keresés alapértelmezetten be van kapcsolva, metaadatokat így kereshetsz ",
"search_suggestion_list_smart_search_hint_2": "m:keresési-kifejezés",
"search_tags": "Címkék keresése...",
"search_timezone": "Időzóna keresése...",
@ -1517,6 +1617,7 @@
"server_info_box_server_url": "Szerver Címe",
"server_offline": "Szerver Nem Elérhető",
"server_online": "Szerver Elérhető",
"server_privacy": "Szerver biztonság",
"server_stats": "Szerver Statisztikák",
"server_version": "Szerver Verzió",
"set": "Beállít",
@ -1526,6 +1627,7 @@
"set_date_of_birth": "Születési dátum beállítása",
"set_profile_picture": "Profilkép beállítása",
"set_slideshow_to_fullscreen": "Diavetítés teljes képernyőre állítása",
"set_stack_primary_asset": "Beállítás elsődleges elemként",
"setting_image_viewer_help": "Az Elem Megjelenítő először a kis bélyegképet tölti be, aztán a közepes méretű előnézetet (ha elérhető), végül az eredetit (ha elérhető).",
"setting_image_viewer_original_subtitle": "Engedélyezi az eredeti teljes felbontású kép betöltését (nagy!). Kikapcsolva csökkenti az adathasználatot (a neten és az eszköz gyorsítótárán is).",
"setting_image_viewer_original_title": "Eredeti kép betöltése",
@ -1556,6 +1658,7 @@
"share_add_photos": "Fotók hozzáadása",
"share_assets_selected": "{count} kiválasztva",
"share_dialog_preparing": "Előkészítés...",
"share_link": "Link megosztása",
"shared": "Megosztva",
"shared_album_activities_input_disable": "Hozzászólások kikapcsolva",
"shared_album_activity_remove_content": "Törölni szeretnéd ezt a tevékenységet?",
@ -1595,6 +1698,7 @@
"shared_link_expires_second": "{count} másodperc múlva lejár",
"shared_link_expires_seconds": "{count} másodperc múlva lejár",
"shared_link_individual_shared": "Egyénileg megosztva",
"shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Megosztott linkek kezelése",
"shared_link_options": "Megosztott link beállításai",
"shared_links": "Megosztott linkek",
@ -1656,6 +1760,7 @@
"stack_select_one_photo": "Válassz egy fő képet a csoportból",
"stack_selected_photos": "Kiválasztott fényképek csoportosítása",
"stacked_assets_count": "{count, plural, other {# elem}} csoportosítva",
"stacktrace": "Hiba leírása",
"start": "Elindít",
"start_date": "Kezdő dátum",
"state": "Megye/Állam",
@ -1666,6 +1771,7 @@
"stop_sharing_photos_with_user": "Fényképeid megosztásának megszüntetése ezzel a felhasználóval",
"storage": "Tárhely",
"storage_label": "Tárhely címke",
"storage_quota": "Tárhely kvóta",
"storage_usage": "{used}/{available} használatban",
"submit": "Beküldés",
"suggestions": "Javaslatok",
@ -1693,11 +1799,11 @@
"theme_selection_description": "A böngésző beállításának megfelelően automatikusan használjon világos vagy sötét témát",
"theme_setting_asset_list_storage_indicator_title": "Tárhely ikon mutatása az elemeken",
"theme_setting_asset_list_tiles_per_row_title": "Elemek száma soronként ({count})",
"theme_setting_colorful_interface_subtitle": "Alapértelmezett szín használata a háttérben lévő felületekhez",
"theme_setting_colorful_interface_subtitle": "Alapértelmezett szín használata a háttérben lévő felületekhez.",
"theme_setting_colorful_interface_title": "Színes felhasználói felület",
"theme_setting_image_viewer_quality_subtitle": "Részletes képmegjelenítő minőségének beállítása",
"theme_setting_image_viewer_quality_title": "Képmegjelenítő minősége",
"theme_setting_primary_color_subtitle": "Válassz egy színt az alapértelmezett műveletekhez és kiemelésekhez",
"theme_setting_primary_color_subtitle": "Válassz egy színt az alapértelmezett műveletekhez és kiemelésekhez.",
"theme_setting_primary_color_title": "Alapértelmezett szín",
"theme_setting_system_primary_color_title": "Rendszerszínek használata",
"theme_setting_system_theme_switch": "Automatikus (követi a rendszer témáját)",
@ -1737,6 +1843,7 @@
"unable_to_setup_pin_code": "Sikertelen PIN kód beállítás",
"unarchive": "Archívumból kivesz",
"unarchived_count": "{count, plural, other {# elem kivéve az archívumból}}",
"undo": "Visszavonás",
"unfavorite": "Kedvenc közül kivesz",
"unhide_person": "Nem rejtett személy",
"unknown": "Ismeretlen",
@ -1756,6 +1863,7 @@
"unstack": "Csoport Szétszedése",
"unstacked_assets_count": "{count, plural, other {# elemből}} álló csoport szétszedve",
"up_next": "Következik",
"updated_at": "Frissített",
"updated_password": "Jelszó megváltoztatva",
"upload": "Feltöltés",
"upload_concurrency": "Párhuzamos feltöltés",
@ -1770,14 +1878,17 @@
"upload_success": "Feltöltés sikeres, frissítsd az oldalt az újonnan feltöltött elemek megtekintéséhez.",
"upload_to_immich": "Feltöltés Immich-be ({count})",
"uploading": "Feltöltés folyamatban",
"url": "URL",
"usage": "Használat",
"use_current_connection": "Jelenlegi kapcsolat használata",
"use_custom_date_range": "Szabadon megadott időintervallum használata",
"user": "Felhasználó",
"user_has_been_deleted": "Ez a felhasználó törlésre került.",
"user_id": "Felhasználó azonosítója",
"user_liked": "{user} felhasználónak {type, select, photo {ez a fénykép} video {ez a videó} asset {ez az elem} other {ez}} tetszik",
"user_pin_code_settings": "PIN kód",
"user_pin_code_settings_description": "PIN kód kezelése",
"user_privacy": "Felhasználói adatvédelem",
"user_purchase_settings": "Megvásárlás",
"user_purchase_settings_description": "Vásárlás kezelése",
"user_role_set": "{user} felhasználónak {role} jogkör biztosítása",
@ -1822,12 +1933,12 @@
"week": "Hét",
"welcome": "Üdvözlünk",
"welcome_to_immich": "Üdvözöl az Immich",
"wifi_name": "WiFi Neve",
"wifi_name": "Wi-Fi Neve",
"wrong_pin_code": "Hibás PIN kód",
"year": "Év",
"years_ago": "{years, plural, one {# évvel} other {# évvel}} ezelőtt",
"yes": "Igen",
"you_dont_have_any_shared_links": "Nincsenek megosztott linkjeid",
"your_wifi_name": "A WiFi hálózatod neve",
"your_wifi_name": "A Wi-Fi hálózatod neve",
"zoom_image": "Kép Nagyítása"
}

View File

@ -34,6 +34,7 @@
"added_to_favorites_count": "Ditambahkan {count, number} ke favorit",
"admin": {
"add_exclusion_pattern_description": "Tambahkan pola pengecualian. Glob menggunakan *, **, dan ? didukung. Untuk mengabaikan semua berkas dalam direktori apa pun bernama \"Raw\", gunakan \"**/Raw/**\". Untuk mengabaikan semua berkas berakhiran dengan \".tif\", gunakan \"**/*.tif\". Untuk mengabaikan jalur absolut, gunakan \"/jalur/untuk/diabaikan/**\".",
"admin_user": "Pengguna Admin",
"asset_offline_description": "Aset pustaka eksternal ini tidak ada di diska dan telah dipindahkan ke tempat sampah. Jika berkasnya dipindah dalam pustaka, periksa lini masa Anda untuk aset baru yang cocok. Untuk memulihkan aset ini, pastikan jalur berkas di bawah dapat diakses oleh Immich dan pindai pustaka.",
"authentication_settings": "Pengaturan Autentikasi",
"authentication_settings_description": "Kelola kata sandi, OAuth, dan pengaturan autentikasi lainnya",
@ -44,7 +45,7 @@
"backup_database_enable_description": "Aktifkan pencadangan basis data",
"backup_keep_last_amount": "Jumlah cadangan untuk disimpan",
"backup_settings": "Pengaturan Pencadangan Basis Data",
"backup_settings_description": "Kelola pengaturan pencadangan basis data. Catatan: Tugas ini tidak dipantau dan Anda tidak akan diberi tahu jika ada kesalahan.",
"backup_settings_description": "Kelola pengaturan pencadangan basis data.",
"cleared_jobs": "Tugas terselesaikan untuk: {job}",
"config_set_by_file": "Konfigurasi saat ini ditetapkan oleh berkas konfigurasi",
"confirm_delete_library": "Apakah Anda yakin ingin menghapus pustaka {library}?",
@ -165,12 +166,26 @@
"metadata_settings_description": "Kelola pengaturan metadata",
"migration_job": "Migrasi",
"migration_job_description": "Migrasikan gambar kecil untuk aset dan wajah ke struktur folder terkini",
"nightly_tasks_cluster_faces_setting_description": "Mulai pengenalan wajah pada semua wajah yang baru saja terdeteksi",
"nightly_tasks_cluster_new_faces_setting": "Kelompokkan semua wajah baru",
"nightly_tasks_database_cleanup_setting": "Tugas pembersihan basis data",
"nightly_tasks_database_cleanup_setting_description": "Membersihkan data lama, kadaluarsa dari database",
"nightly_tasks_generate_memories_setting": "Buat kenang-kenangan",
"nightly_tasks_generate_memories_setting_description": "Buat kenang-kenangan baru dari berbagai aset",
"nightly_tasks_missing_thumbnails_setting": "Membuat thumbnail yang hilang",
"nightly_tasks_missing_thumbnails_setting_description": "Mengantrikan aset tanpa thumbnail untuk pembuatan thumbnail",
"nightly_tasks_settings": "Pengaturan Tugas Malam",
"nightly_tasks_settings_description": "Atur tugas malam",
"nightly_tasks_start_time_setting": "Waktu mulai",
"nightly_tasks_start_time_setting_description": "Waktu saat server mulai menjalankan tugas malam",
"nightly_tasks_sync_quota_usage_setting": "Sinkronisasi penggunaan kuota",
"nightly_tasks_sync_quota_usage_setting_description": "Pembaruan kuota penyimpanan pengguna, berdasarkan penggunaan sekarang",
"no_paths_added": "Tidak ada jalur yang ditambahkan",
"no_pattern_added": "Tidak ada pola yang ditambahkan",
"note_apply_storage_label_previous_assets": "Catatan: Untuk menerapkan Label Penyimpanan untuk aset yang telah diunggah sebelumnya, jalankan",
"note_cannot_be_changed_later": "CATATAN: Ini tidak akan dapat diubah lagi!",
"notification_email_from_address": "Dari alamat",
"notification_email_from_address_description": "Alamat surel pengirim, misalnya: \"Server Foto Immich <noreply@example.com>\"",
"notification_email_from_address_description": "Alamat surel pengirim, misalnya: \"Server Foto Immich <noreply@example.com>\". Pastikan untuk menggunakan alamat yang diizinkan untuk mengirim email.",
"notification_email_host_description": "Hos server surel (mis. smtp.immich.app)",
"notification_email_ignore_certificate_errors": "Abaikan eror sertifikat",
"notification_email_ignore_certificate_errors_description": "Abaikan eror validasi sertifikat TLS (tidak disarankan)",
@ -195,6 +210,7 @@
"oauth_mobile_redirect_uri": "URI pengalihan ponsel",
"oauth_mobile_redirect_uri_override": "Penimpaan URI penerusan ponsel",
"oauth_mobile_redirect_uri_override_description": "Aktifkan ketika provider OAuth tidak mengizinkan tautan mobile, seperti ''{callback}''",
"oauth_role_claim_description": "Secara otomatis memberikan akses admin berdasarkan keberadaan klaim ini. Klaim dapat berupa \"user\" atau \"admin\".",
"oauth_settings": "OAuth",
"oauth_settings_description": "Kelola pengaturan log masuk OAuth",
"oauth_settings_more_details": "Untuk detail lanjut tentang fitur ini, lihat <link>docs</link>.",
@ -243,6 +259,7 @@
"storage_template_migration_info": "Templat penyimpanan akan mengubah semua ekstensi ke huruf kecil. Perubahan templat hanya akan diterapkan pada aset baru. Untuk menerapkan templat pada setiap aset yang sebelumnya telah diunggah, jalankan <link>{job}</link>.",
"storage_template_migration_job": "Tugas Migrasi Templat Ruang Penyimpanan",
"storage_template_more_details": "Untuk detail lebih lanjut tentang fitur ini, pergi ke <template-link>Templat Penyimpanan</template-link> dan <implications-link>kekurangannya</implications-link>",
"storage_template_onboarding_description_v2": "Saat diaktifkan, fitur ini akan mengatur file secara otomatis berdasarkan templat yang ditentukan pengguna. Untuk informasi selengkapnya, silakan lihat <link>dokumentasi</link>.",
"storage_template_path_length": "Batas panjang jalur: <b>{length, number}</b>{limit, number}",
"storage_template_settings": "Templat Penyimpanan",
"storage_template_settings_description": "Kelola struktur folder dan nama berkas dari aset yang diunggah",
@ -257,7 +274,7 @@
"template_email_update_album": "Perbarui Templat Album",
"template_email_welcome": "Templat surel selamat datang",
"template_settings": "Templat Notifikasi",
"template_settings_description": "Kelola templat kustom untuk notifikasi.",
"template_settings_description": "Kelola templat kustom untuk notifikasi",
"theme_custom_css_settings": "CSS Kustom",
"theme_custom_css_settings_description": "CSS memungkinkan desain Immich untuk diubah.",
"theme_settings": "Pengaturan Tema",
@ -355,13 +372,20 @@
"admin_password": "Kata Sandi Admin",
"administration": "Administrasi",
"advanced": "Tingkat lanjut",
"advanced_settings_beta_timeline_subtitle": "Coba pengalaman aplikasi baru",
"advanced_settings_beta_timeline_title": "Garis waktu Beta",
"advanced_settings_enable_alternate_media_filter_subtitle": "Gunakan opsi ini untuk menyaring media saat sinkronisasi berdasarkan kriteria alternatif. Hanya coba ini dengan aplikasi mendeteksi semua album.",
"advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTAL] Gunakan saringan sinkronisasi album perangkat alternatif",
"advanced_settings_log_level_title": "Tingkat log: {level}",
"advanced_settings_prefer_remote_subtitle": "Beberapa perangkat tidak dapat memuat gambar kecil dengan cepat. Menyalakan ini akan memuat gambar kecil dari server.",
"advanced_settings_prefer_remote_title": "Prioritaskan gambar dari server",
"advanced_settings_proxy_headers_subtitle": "Tentukan header proxy yang harus dikirim Immich dengan setiap permintaan jaringan",
"advanced_settings_self_signed_ssl_subtitle": "Melewati verifikasi sertifikat SSL untuk titik akhir server. Diperlukan untuk sertifikat yang ditandatangani sendiri.",
"advanced_settings_self_signed_ssl_title": "Izinkan sertifikat SSL yang ditandatangani sendiri",
"advanced_settings_sync_remote_deletions_subtitle": "Hapus atau pulihkan aset pada perangkat ini secara otomatis ketika tindakan dilakukan di web",
"advanced_settings_sync_remote_deletions_title": "Sinkronisasi penghapusan jarak jauh [EKSPERIMENTAL]",
"advanced_settings_tile_subtitle": "Pengaturan pengguna tingkat lanjut",
"advanced_settings_troubleshooting_subtitle": "Aktifkan fitur tambahan untuk pemecahan masalah",
"age_months": "Umur {months, plural, one {# bulan} other {# bulan}}",
"age_year_months": "Umur 1 tahun, {months, plural, one {# bulan} other {# bulan}}",
"age_years": "{years, plural, other {Umur #}}",
@ -446,7 +470,6 @@
"assets": "Aset",
"assets_added_count": "{count, plural, one {# aset} other {# aset}} ditambahkan",
"assets_added_to_album_count": "Ditambahkan {count, plural, one {# aset} other {# aset}} ke album",
"assets_added_to_name_count": "Ditambahkan {count, plural, one {# aset} other {# aset}} ke {hasName, select, true {<b>{name}</b>} other {album baru}}",
"assets_count": "{count, plural, one {# aset} other {# aset}}",
"assets_deleted_permanently": "{count} aset dihapus secara permanen",
"assets_deleted_permanently_from_server": "{count} aset dihapus secara permanen dari server Immich",

View File

@ -87,7 +87,7 @@
"image_settings": "Impostazioni delle immagini",
"image_settings_description": "Gestisci qualità e risoluzione delle immagini generate",
"image_thumbnail_description": "Miniatura piccola senza metadati, utilizzata durante la visualizzazione di gruppi di foto come la sequenza temporale principale",
"image_thumbnail_quality_description": "Qualità delle miniature da 1 a 100. Un valore più alto è migliore, ma produce file più grandi e può ridurre la reattività dell'app.",
"image_thumbnail_quality_description": "Qualità delle anteprime da 1 a 100. Un valore più alto è migliore ma produce file più grandi e può ridurre la reattività dell'app.",
"image_thumbnail_title": "Impostazioni della copertina",
"job_concurrency": "Concorrenza {job}",
"job_created": "Processo creato",
@ -105,7 +105,7 @@
"library_scanning_enable_description": "Attiva la scansione periodica della libreria",
"library_settings": "Libreria Esterna",
"library_settings_description": "Gestisci le impostazioni della libreria esterna",
"library_tasks_description": "Scansiona le librerie esterne per i nuovi aggiornamenti",
"library_tasks_description": "Scansiona le librerie esterne per risorse nuove o modificate",
"library_watching_enable_description": "Osserva le librerie esterne per cambiamenti",
"library_watching_settings": "Osserva librerie (SPERIMENTALE)",
"library_watching_settings_description": "Osserva automaticamente i cambiamenti dei file",
@ -121,7 +121,7 @@
"machine_learning_enabled": "Attiva machine learning",
"machine_learning_enabled_description": "Se disabilitato, tutte le funzioni di ML saranno disabilitate ignorando le importazioni sottostanti.",
"machine_learning_facial_recognition": "Riconoscimento Facciale",
"machine_learning_facial_recognition_description": "Rileva, riconosci, e raggruppa facce nelle immagini",
"machine_learning_facial_recognition_description": "Rileva, riconosci e raggruppa volti nelle immagini",
"machine_learning_facial_recognition_model": "Modello di riconoscimento facciale",
"machine_learning_facial_recognition_model_description": "I modelli sono mostrati in ordine decrescente in base alla dimensione. I modelli più grandi sono più lenti e utilizzano più memoria, però producono risultati migliori. Nota che devi ri-eseguire il processo di rilevamento facciale per tutte le immagini quando cambi il modello.",
"machine_learning_facial_recognition_setting": "Attiva riconoscimento facciale",
@ -156,16 +156,30 @@
"map_settings": "Impostazioni Mappa e Posizione",
"map_settings_description": "Gestisci impostazioni mappa",
"map_style_description": "URL per un tema della mappa style.json",
"memory_cleanup_job": "pulizia memoria",
"memory_generate_job": "Generazione della memoria",
"memory_cleanup_job": "Pulizia dei vecchi Ricordi",
"memory_generate_job": "Generazione dei Ricordi",
"metadata_extraction_job": "Estrazione Metadata",
"metadata_extraction_job_description": "Estrai informazioni dai metadati di ciascun asset, ad esempio coordinate GPS, volti e risoluzione",
"metadata_extraction_job_description": "Estrai informazioni dai metadati di ciascuna risorsa, come coordinate GPS, volti e risoluzione",
"metadata_faces_import_setting": "Abilita l'importazione dei volti",
"metadata_faces_import_setting_description": "Importa i volti dai dati EXIF dell'immagine e dai file sidecar",
"metadata_settings": "Impostazioni Metadati",
"metadata_settings_description": "Gestisci le impostazioni dei metadati",
"migration_job": "Migrazione",
"migration_job_description": "Migra le anteprime per gli asset e volti alla struttura di cartelle più recente",
"nightly_tasks_cluster_faces_setting_description": "Avvia riconoscimento facciale sui volti appena rilevati",
"nightly_tasks_cluster_new_faces_setting": "Raggruppa nuovi volti",
"nightly_tasks_database_cleanup_setting": "Processi di pulizia del database",
"nightly_tasks_database_cleanup_setting_description": "Ripulisci il database da file vecchi e scaduti",
"nightly_tasks_generate_memories_setting": "Genera ricordi",
"nightly_tasks_generate_memories_setting_description": "Genera nuovi ricordi a partire dalle risorse",
"nightly_tasks_missing_thumbnails_setting": "Genera anteprime mancanti",
"nightly_tasks_missing_thumbnails_setting_description": "Metti in coda le risorse senza miniatura per la generazione delle anteprime",
"nightly_tasks_settings": "Impostazioni delle attività notturne",
"nightly_tasks_settings_description": "Gestisci attività notturne",
"nightly_tasks_start_time_setting": "Tempo di avvio",
"nightly_tasks_start_time_setting_description": "Il tempo in cui il server fa partire le attività notturne",
"nightly_tasks_sync_quota_usage_setting": "Sincronizza la quota di utilizzo",
"nightly_tasks_sync_quota_usage_setting_description": "Aggiorna la quota di spazio dell'utente in base all'utilizzo corrente",
"no_paths_added": "Nessun percorso aggiunto",
"no_pattern_added": "Nessun pattern aggiunto",
"note_apply_storage_label_previous_assets": "Nota: Per assegnare l'etichetta storage ad asset precedentemente caricati, esegui",
@ -196,6 +210,8 @@
"oauth_mobile_redirect_uri": "URI reindirizzamento mobile",
"oauth_mobile_redirect_uri_override": "Sovrascrivi URI reindirizzamento cellulare",
"oauth_mobile_redirect_uri_override_description": "Abilita quando il gestore OAuth non consente un URL come ''{callback}''",
"oauth_role_claim": "Claim del ruolo",
"oauth_role_claim_description": "Concedi automaticamente l'accesso come amministratore in base alla presenza di questo claim. Il claim può essere 'user' o 'admin'.",
"oauth_settings": "OAuth",
"oauth_settings_description": "Gestisci impostazioni di login OAuth",
"oauth_settings_more_details": "Per più dettagli riguardo a questa funzionalità, consulta <link>la documentazione</link>.",
@ -264,8 +280,8 @@
"theme_custom_css_settings_description": "I Cascading Style Sheets (CSS) permettono di personalizzare l'interfaccia di Immich.",
"theme_settings": "Impostazioni Tema",
"theme_settings_description": "Gestisci la personalizzazione dell'interfaccia web di Immich",
"thumbnail_generation_job": "Generazione Miniature",
"thumbnail_generation_job_description": "Genera miniature grandi, piccole e sfocate per ogni asset, oltre a miniature per ogni persona",
"thumbnail_generation_job": "Genera Anteprime",
"thumbnail_generation_job_description": "Genera anteprime grandi, piccole e sfocate per ogni asset, oltre a miniature per ogni persona",
"transcoding_acceleration_api": "API di accelerazione",
"transcoding_acceleration_api_description": "L'API che interagirà con il tuo dispositivo per accelerare la transcodifica. Questa impostazione è \"best effort\": ripiegherà sulla transcodifica software in caso di fallimento. VP9 potrebbe funzionare o meno a seconda del tuo hardware.",
"transcoding_acceleration_nvenc": "NVENC (richiede GPU NVIDIA)",
@ -357,25 +373,27 @@
"admin_password": "Password Amministratore",
"administration": "Amministrazione",
"advanced": "Avanzate",
"advanced_settings_beta_timeline_subtitle": "Prova la nuova esperienza dell'app",
"advanced_settings_beta_timeline_title": "Timeline beta",
"advanced_settings_enable_alternate_media_filter_subtitle": "Usa questa opzione per filtrare i contenuti multimediali durante la sincronizzazione in base a criteri alternativi. Prova questa opzione solo se riscontri problemi con il rilevamento di tutti gli album da parte dell'app.",
"advanced_settings_enable_alternate_media_filter_title": "[SPERIMENTALE] Usa un filtro alternativo per la sincronizzazione degli album del dispositivo",
"advanced_settings_log_level_title": "Livello log: {level}",
"advanced_settings_prefer_remote_subtitle": "Alcuni dispositivi sono molto lenti a caricare le anteprime delle immagini dal dispositivo. Attivare questa impostazione per caricare invece le immagini remote.",
"advanced_settings_prefer_remote_subtitle": "Alcuni dispositivi sono molto lenti a caricare le anteprime delle immagini locali. Attivare questa impostazione per caricare invece le immagini remote.",
"advanced_settings_prefer_remote_title": "Preferisci immagini remote",
"advanced_settings_proxy_headers_subtitle": "Definisci gli header per i proxy che Immich dovrebbe inviare con ogni richiesta di rete",
"advanced_settings_proxy_headers_title": "Header Proxy",
"advanced_settings_self_signed_ssl_subtitle": "Salta la verifica dei certificati SSL del server. Richiesto con l'uso di certificati self-signed.",
"advanced_settings_self_signed_ssl_title": "Consenti certificati SSL self-signed",
"advanced_settings_sync_remote_deletions_subtitle": "Rimuovi o ripristina automaticamente un elemento su questo dispositivo se l'azione è stata fatta via web",
"advanced_settings_sync_remote_deletions_subtitle": "Rimuovi o ripristina automaticamente un elemento su questo dispositivo quando l'azione è stata fatta via web",
"advanced_settings_sync_remote_deletions_title": "Sincronizza le cancellazioni remote [SPERIMENTALE]",
"advanced_settings_tile_subtitle": "Impostazioni aggiuntive utenti",
"advanced_settings_tile_subtitle": "Impostazioni avanzate dell'utente",
"advanced_settings_troubleshooting_subtitle": "Attiva funzioni addizionali per la risoluzione dei problemi",
"advanced_settings_troubleshooting_title": "Risoluzione problemi",
"age_months": "Età {months, plural, one {# mese} other {# mesi}}",
"age_year_months": "Età 1 anno, {months, plural, one {# mese} other {# mesi}}",
"age_years": "{years, plural, one {# anno} other {# anni}}",
"album_added": "Album aggiunto",
"album_added_notification_setting_description": "Ricevi una notifica email quando sei aggiunto a un album condiviso",
"album_added_notification_setting_description": "Ricevi una notifica email quando sei aggiunto ad un album condiviso",
"album_cover_updated": "Copertina dell'album aggiornata",
"album_delete_confirmation": "Sei sicuro di voler cancellare l'album {album}?",
"album_delete_confirmation_description": "Se l'album è condiviso gli altri utenti perderanno l'accesso.",
@ -388,38 +406,40 @@
"album_options": "Impostazioni Album",
"album_remove_user": "Rimuovi l'utente?",
"album_remove_user_confirmation": "Sicuro di voler rimuovere l'utente {user}?",
"album_search_not_found": "Nessun album trovato corrispondente alla tua ricerca",
"album_share_no_users": "Sembra che tu abbia condiviso questo album con tutti gli utenti oppure non hai nessun utente con cui condividere.",
"album_updated": "Album aggiornato",
"album_updated_setting_description": "Ricevi una notifica email quando un album condiviso ha nuovi media",
"album_user_left": "{album} abbandonato",
"album_user_removed": "Utente {user} rimosso",
"album_viewer_appbar_delete_confirm": "Sei sicuro di voler rimuovere questo album dal tuo account?",
"album_viewer_appbar_share_err_delete": "Impossibile eliminare l'album",
"album_viewer_appbar_share_err_leave": "Impossibile lasciare l'album",
"album_viewer_appbar_share_err_remove": "Ci sono problemi nel rimuovere oggetti dall'album",
"album_viewer_appbar_share_err_title": "Impossibile cambiare il titolo dell'album",
"album_viewer_appbar_share_err_delete": "Non è stato possibile eliminare l'album",
"album_viewer_appbar_share_err_leave": "Non è stato possibile lasciare l'album",
"album_viewer_appbar_share_err_remove": "Ci sono problemi nel rimuovere elementi dall'album",
"album_viewer_appbar_share_err_title": "Non è stato possibile cambiare il titolo dell'album",
"album_viewer_appbar_share_leave": "Lascia album",
"album_viewer_appbar_share_to": "Condividi a",
"album_viewer_page_share_add_users": "Aggiungi utenti",
"album_with_link_access": "Permetti a chiunque possieda il link di visualizzare le foto e le persone dell'album.",
"albums": "Album",
"albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Album}}",
"albums_default_sort_order": "Ordinamento album predefinito",
"albums_default_sort_order_description": "Ordine iniziale degli asset alla creazione di nuovi album.",
"albums_feature_description": "Collezione di asset che possono essere condivisi con altri utenti.",
"albums_default_sort_order": "Ordinamento predefinito degli album",
"albums_default_sort_order_description": "Ordine iniziale degli elementi alla creazione di nuovi album.",
"albums_feature_description": "Raggruppamento di elementi che possono essere condivisi con altri utenti.",
"albums_on_device_count": "Album sul dispositivo ({count})",
"all": "Tutti",
"all_albums": "Tutti gli album",
"all_people": "Tutte le persone",
"all_videos": "Tutti i video",
"allow_dark_mode": "Permetti Tema Scuro",
"allow_edits": "Permetti Modifiche",
"allow_edits": "Permetti modifiche",
"allow_public_user_to_download": "Permetti agli utenti pubblici di scaricare",
"allow_public_user_to_upload": "Permetti agli utenti pubblici di caricare",
"alt_text_qr_code": "Immagine QR",
"anti_clockwise": "Senso anti-orario",
"api_key": "Chiave API",
"api_key_description": "Il valore verrà mostrato solo una volta. Assicurati di copiarlo prima di chiudere la finestra.",
"api_key_empty": "Il nome della chiave API non può essere vuoto",
"api_key_description": "Questo valore verrà mostrato una sola volta. Assicurati di copiarlo prima di chiudere la finestra.",
"api_key_empty": "Il nome della chiave API non dovrebbe essere vuoto",
"api_keys": "Chiavi API",
"app_bar_signout_dialog_content": "Sei sicuro di volerti disconnettere?",
"app_bar_signout_dialog_ok": "Si",
@ -427,8 +447,9 @@
"app_settings": "Impostazioni Applicazione",
"appears_in": "Compare in",
"archive": "Archivio",
"archive_action_prompt": "Aggiunti {count} elementi all'Archivio",
"archive_or_unarchive_photo": "Archivia o ripristina foto",
"archive_page_no_archived_assets": "Nessuna oggetto archiviato",
"archive_page_no_archived_assets": "Non è stato trovato nessun elemento archiviato",
"archive_page_title": "Archivio ({count})",
"archive_size": "Dimensioni Archivio",
"archive_size_description": "Imposta le dimensioni dell'archivio per i download (in GiB)",
@ -440,42 +461,41 @@
"asset_action_share_err_offline": "Non è possibile recuperare le risorse offline, azione ignorata",
"asset_added_to_album": "Aggiunto all'album",
"asset_adding_to_album": "Aggiungendo all'album…",
"asset_description_updated": "La descrizione del media è stata aggiornata",
"asset_description_updated": "La descrizione dell'elemento è stata aggiornata",
"asset_filename_is_offline": "Il media {filename} è offline",
"asset_has_unassigned_faces": "Il media ha dei volti non categorizzati",
"asset_hashing": "Hashing in corso …",
"asset_list_group_by_sub_title": "Raggruppa per",
"asset_list_layout_settings_dynamic_layout_title": "Layout dinamico",
"asset_list_layout_settings_group_automatically": "Automatico",
"asset_list_layout_settings_group_by": "Raggruppa le risorse per",
"asset_list_layout_settings_group_by": "Raggruppa gli elementi per",
"asset_list_layout_settings_group_by_month_day": "Mese + giorno",
"asset_list_layout_sub_title": "Layout",
"asset_list_settings_subtitle": "Impostazion del layout della griglia delle foto",
"asset_list_settings_subtitle": "Impostazioni del layout della griglia delle foto",
"asset_list_settings_title": "Griglia foto",
"asset_offline": "Risorsa Offline",
"asset_offline_description": "Questo media non è stato trovato nel disco. Contatta il tuo amministratore di Immich per assistenza.",
"asset_restored_successfully": "Asset ripristinato con successo",
"asset_offline": "Elemento Offline",
"asset_offline_description": "Questo elemento esterno non viene più trovato sul disco. Contatta il tuo amministratore di Immich per assistenza.",
"asset_restored_successfully": "Elemento ripristinato con successo",
"asset_skipped": "Saltato",
"asset_skipped_in_trash": "Nel cestino",
"asset_uploaded": "Caricato",
"asset_uploading": "Caricamento…",
"asset_viewer_settings_subtitle": "Gestisci le impostazioni del visualizzatore risorse",
"asset_viewer_settings_subtitle": "Gestisci le impostazioni del visualizzatore della galleria",
"asset_viewer_settings_title": "Visualizzazione risorse",
"assets": "Risorse",
"assets_added_count": "{count, plural, one {# asset aggiunto} other {# asset aggiunti}}",
"assets_added_to_album_count": "{count, plural, one {# asset aggiunto} other {# asset aggiunti}} all'album",
"assets_added_to_name_count": "Aggiunti {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 {L'asset} other {Gli asset}} non possono essere aggiunti all'album",
"assets_count": "{count, plural, other {# asset}}",
"assets_cannot_be_added_to_album_count": "{count, plural, one {L'elemento} other {Gli elementi}} non possono essere aggiunti all'album",
"assets_count": "{count, plural, one {# elemento} other {# elementi}}",
"assets_deleted_permanently": "{count} elementi cancellati definitivamente",
"assets_deleted_permanently_from_server": "{count} elementi cancellati definitivamente dal server Immich",
"assets_downloaded_failed": "{count, plural, one {Scaricato # file - {error} file non riusciti} other {Scaricati # file - {error} file non riusciti}}",
"assets_downloaded_failed": "{count, plural, one {Scaricato # file - {error} file non riuscito} other {Scaricati # file - {error} file non riusciti}}",
"assets_downloaded_successfully": "{count, plural, one {Scaricato # file con successo} other {Scaricati # file con successo}}",
"assets_moved_to_trash_count": "{count, plural, one {# asset spostato} other {# asset spostati}} nel cestino",
"assets_moved_to_trash_count": "{count, plural, one {# elemento spostato} other {# elementi spostati}} nel cestino",
"assets_permanently_deleted_count": "{count, plural, one {# asset cancellato} other {# asset cancellati}} definitivamente",
"assets_removed_count": "{count, plural, one {# asset rimosso} other {# asset rimossi}}",
"assets_removed_permanently_from_device": "{count} elementi cancellati definitivamente dal tuo dispositivo",
"assets_restore_confirmation": "Sei sicuro di voler ripristinare tutti gli asset cancellati? Non puoi annullare questa azione! Tieni presente che eventuali risorse offline NON possono essere ripristinate in questo modo.",
"assets_restore_confirmation": "Sei sicuro di voler ripristinare tutti gli elementi cancellati? Non puoi annullare questa azione! Tieni presente che eventuali risorse offline NON possono essere ripristinate in questo modo.",
"assets_restored_count": "{count, plural, one {# asset ripristinato} other {# asset ripristinati}}",
"assets_restored_successfully": "{count} elementi ripristinati",
"assets_trashed": "{count} elementi cestinati",
@ -497,7 +517,7 @@
"backup_album_selection_page_selection_info": "Informazioni sulla selezione",
"backup_album_selection_page_total_assets": "Numero totale delle risorse",
"backup_all": "Tutti",
"backup_background_service_backup_failed_message": "Impossibile caricare i contenuti. Riprovo…",
"backup_background_service_backup_failed_message": "È stato impossibile fare il backup dei contenuti. Riprovo…",
"backup_background_service_connection_failed_message": "Impossibile connettersi al server. Riprovo…",
"backup_background_service_current_upload_notification": "Caricamento di {filename} in corso",
"backup_background_service_default_notification": "Ricerca di nuovi contenuti…",
@ -506,7 +526,7 @@
"backup_background_service_upload_failure_notification": "Impossibile caricare {filename}",
"backup_controller_page_albums": "Backup Album",
"backup_controller_page_background_app_refresh_disabled_content": "Attiva l'aggiornamento dell'app in background in Impostazioni > Generale > Aggiorna app in background per utilizzare backup in background.",
"backup_controller_page_background_app_refresh_disabled_title": "Backup in background è disattivo",
"backup_controller_page_background_app_refresh_disabled_title": "Aggiornamento dell'app in background disattivo",
"backup_controller_page_background_app_refresh_enable_button_text": "Vai alle impostazioni",
"backup_controller_page_background_battery_info_link": "Mostrami come",
"backup_controller_page_background_battery_info_message": "Per una migliore esperienza di backup, disabilita le ottimizzazioni della batteria per l'app Immich.\n\nDal momento che è una funzionalità specifica del dispositivo, per favore consulta il manuale del produttore.",
@ -515,12 +535,12 @@
"backup_controller_page_background_charging": "Solo durante la ricarica",
"backup_controller_page_background_configure_error": "Impossibile configurare i servizi in background",
"backup_controller_page_background_delay": "Ritarda il backup di nuovi elementi: {duration}",
"backup_controller_page_background_description": "Abilita i servizi in background per fare il backup di tutti i nuovi contenuti senza la necessità di aprire l'app",
"backup_controller_page_background_is_off": "Backup automatico disattivato",
"backup_controller_page_background_is_on": "Backup automatico attivo",
"backup_controller_page_background_description": "Abilita i servizi in background per fare il backup di nuovi contenuti senza la necessità di aprire l'app",
"backup_controller_page_background_is_off": "Backup automatico in background disattivato",
"backup_controller_page_background_is_on": "Backup automatico in background attivo",
"backup_controller_page_background_turn_off": "Disabilita servizi in background",
"backup_controller_page_background_turn_on": "Abilita servizi in background",
"backup_controller_page_background_wifi": "Solo Wi-Fi",
"backup_controller_page_background_wifi": "Solo con Wi-Fi",
"backup_controller_page_backup": "Backup",
"backup_controller_page_backup_selected": "Selezionati: ",
"backup_controller_page_backup_sub": "Foto e video caricati",
@ -587,6 +607,7 @@
"cancel": "Annulla",
"cancel_search": "Annulla ricerca",
"canceled": "Annullato",
"canceling": "Annullamento",
"cannot_merge_people": "Impossibile unire le persone",
"cannot_undo_this_action": "Non puoi annullare questa azione!",
"cannot_update_the_description": "Impossibile aggiornare la descrizione",
@ -703,7 +724,7 @@
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Scuro",
"darkTheme": "Attiva/Disattiva tema scuro",
"dark_theme": "Imposta tema scuro",
"date_after": "Data dopo",
"date_and_time": "Data e ora",
"date_before": "Data prima",
@ -719,6 +740,7 @@
"default_locale": "Localizzazione preimpostata",
"default_locale_description": "Formatta la data e i numeri in base alle impostazioni del tuo browser",
"delete": "Elimina",
"delete_action_prompt": "{count} elementi eliminati definitivamente",
"delete_album": "Elimina album",
"delete_api_key_prompt": "Sei sicuro di voler eliminare questa chiave API?",
"delete_dialog_alert": "Questi oggetti saranno eliminati definitivamente da Immich e dal tuo device",
@ -732,6 +754,7 @@
"delete_key": "Elimina chiave",
"delete_library": "Elimina libreria",
"delete_link": "Elimina link",
"delete_local_action_prompt": "{count} elementi rimossi in locale",
"delete_local_dialog_ok_backed_up_only": "Elimina solo con backup",
"delete_local_dialog_ok_force": "Elimina comunque",
"delete_others": "Elimina gli altri",
@ -745,6 +768,7 @@
"description": "Descrizione",
"description_input_hint_text": "Aggiungi descrizione...",
"description_input_submit_error": "Errore modificare descrizione, controlli I log per maggiori dettagli",
"deselect_all": "Deseleziona Tutto",
"details": "Dettagli",
"direction": "Direzione",
"disabled": "Disabilitato",
@ -762,6 +786,7 @@
"documentation": "Documentazione",
"done": "Fatto",
"download": "Scarica",
"download_action_prompt": "Scaricando {count} elementi",
"download_canceled": "Download annullato",
"download_complete": "Download completato",
"download_enqueue": "Download in coda",
@ -799,6 +824,7 @@
"edit_key": "Modifica chiave",
"edit_link": "Modifica link",
"edit_location": "Modifica posizione",
"edit_location_action_prompt": "{count} luoghi modificati",
"edit_location_dialog_title": "Posizione",
"edit_name": "Modifica nome",
"edit_people": "Modifica persone",
@ -817,6 +843,7 @@
"empty_trash": "Svuota cestino",
"empty_trash_confirmation": "Sei sicuro di volere svuotare il cestino? Questo rimuoverà tutte le risorse nel cestino in modo permanente da Immich.\nNon puoi annullare questa azione!",
"enable": "Abilita",
"enable_backup": "Abilita Backup",
"enable_biometric_auth_description": "Inserire il codice PIN per abilitare l'autenticazione biometrica",
"enabled": "Abilitato",
"end_date": "Data Fine",
@ -984,6 +1011,7 @@
"failed_to_load_assets": "Impossibile caricare gli asset",
"failed_to_load_folder": "Impossibile caricare la cartella",
"favorite": "Preferito",
"favorite_action_prompt": "{count} elementi aggiunti ai preferiti",
"favorite_or_unfavorite_photo": "Aggiungi o rimuovi foto da preferiti",
"favorites": "Preferiti",
"favorites_page_no_favorites": "Nessun preferito",
@ -1127,6 +1155,7 @@
"library_page_sort_created": "Data di creazione",
"library_page_sort_last_modified": "Ultima modifica",
"library_page_sort_title": "Titolo album",
"licenses": "Licenze",
"light": "Chiaro",
"like_deleted": "Mi piace rimosso",
"link_motion_video": "Collega video in movimento",
@ -1246,6 +1275,7 @@
"more": "Di più",
"move": "Sposta",
"move_off_locked_folder": "Sposta al di fuori della cartella privata",
"move_to_lock_folder_action_prompt": "{count} elementi aggiunti alla cartella sicura",
"move_to_locked_folder": "Sposta nella cartella privata",
"move_to_locked_folder_confirmation": "Queste foto e video verranno rimossi da tutti gli album, e saranno visibili solo dalla cartella privata",
"moved_to_archive": "Spostati {count, plural, one {# asset} other {# assets}} nell'archivio",
@ -1460,6 +1490,7 @@
"purchase_server_description_2": "Stato di Contributore",
"purchase_server_title": "Server",
"purchase_settings_server_activated": "La chiave del prodotto del server è gestita dall'amministratore",
"queue_status": "Messi in coda {count}/{total}",
"rating": "Valutazione a stelle",
"rating_clear": "Crea valutazione",
"rating_count": "{count, plural, one {# stella} other {# stelle}}",
@ -1479,13 +1510,13 @@
"recently_taken_page_title": "Scattate di Recente",
"refresh": "Aggiorna",
"refresh_encoded_videos": "Ricarica video codificati",
"refresh_faces": "Aggiorna facce",
"refresh_faces": "Aggiorna volti",
"refresh_metadata": "Ricarica metadati",
"refresh_thumbnails": "Ricarica anteprime",
"refreshed": "Aggiornato",
"refreshes_every_file": "Rilegge tutti i file esistenti e nuovi",
"refreshing_encoded_video": "Ricaricando il video codificato",
"refreshing_faces": "Aggiorna Facce",
"refreshing_faces": "Aggiornando volti",
"refreshing_metadata": "Ricaricando i metadati",
"regenerating_thumbnails": "Rigenerando le anteprime",
"remove": "Rimuovi",
@ -1495,7 +1526,9 @@
"remove_custom_date_range": "Rimuovi intervallo data personalizzato",
"remove_deleted_assets": "Rimuovi file offline",
"remove_from_album": "Rimuovere dall'album",
"remove_from_album_action_prompt": "{count} elementi rimossi dall'album",
"remove_from_favorites": "Rimuovi dai preferiti",
"remove_from_lock_folder_action_prompt": "{count} elementi rimossi dalla cartella sicura",
"remove_from_locked_folder": "Rimuovi dalla cartella privata",
"remove_from_locked_folder_confirmation": "Sei sicuro di voler spostare queste foto e questi video dalla cartella privata? Diventeranno visibili nella vostra libreria.",
"remove_from_shared_link": "Rimuovi dal link condiviso",
@ -1667,6 +1700,7 @@
"settings_saved": "Impostazioni salvate",
"setup_pin_code": "Configura un codice PIN",
"share": "Condivisione",
"share_action_prompt": "Condivisi {count} elementi",
"share_add_photos": "Aggiungi foto",
"share_assets_selected": "{count} selezionati",
"share_dialog_preparing": "Preparo…",
@ -1768,6 +1802,7 @@
"sort_title": "Titolo",
"source": "Fonte",
"stack": "Raggruppa",
"stack_action_prompt": "{count} elementi raggruppati",
"stack_duplicates": "Raggruppa i duplicati",
"stack_select_one_photo": "Seleziona una foto principale per il gruppo",
"stack_selected_photos": "Impila foto selezionate",
@ -1838,6 +1873,7 @@
"total": "Totale",
"total_usage": "Utilizzo totale",
"trash": "Cestino",
"trash_action_prompt": "{count} elementi spostati nel cestino",
"trash_all": "Cestina Tutto",
"trash_count": "Cancella {count, number}",
"trash_delete_asset": "Cestina/Cancella Asset",
@ -1855,6 +1891,7 @@
"unable_to_change_pin_code": "Impossibile cambiare il codice PIN",
"unable_to_setup_pin_code": "Impossibile configurare il codice PIN",
"unarchive": "Annulla l'archiviazione",
"unarchive_action_prompt": "{count} elementi rimossi dall'Archivio",
"unarchived_count": "{count, plural, other {Non archiviati #}}",
"undo": "Annulla",
"unfavorite": "Rimuovi preferito",

View File

@ -427,6 +427,7 @@
"app_settings": "アプリ設定",
"appears_in": "これらに含まれます",
"archive": "アーカイブ",
"archive_action_prompt": "アーカイブに{count}項目追加しました",
"archive_or_unarchive_photo": "写真をアーカイブまたはアーカイブ解除",
"archive_page_no_archived_assets": "アーカイブした写真またはビデオがありません",
"archive_page_title": "アーカイブ ({count})",
@ -464,7 +465,6 @@
"assets": "アセット",
"assets_added_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_count": "{count, plural, one {#個} other {#個}}のアセット",
"assets_deleted_permanently": "{count}項目を完全に削除しました",
@ -492,7 +492,7 @@
"background_location_permission_content": "正常にWi-Fiの名前(SSID)を獲得するにはアプリが常に詳細な位置情報にアクセスできる必要があります",
"backup_album_selection_page_albums_device": "デバイス上のアルバム({count})",
"backup_album_selection_page_albums_tap": "タップで選択、ダブルタップで除外",
"backup_album_selection_page_assets_scatter": "アルバムを選択・除外してバックアップする写真を選ぶ (同じ写真が複数のアルバムに登録されていることがあるため)",
"backup_album_selection_page_assets_scatter": "アルバムを選択・除外してバックアップする写真を選ぶ (同じ写真が複数のアルバムに登録されていることがあるため)",
"backup_album_selection_page_select_albums": "アルバムを選択",
"backup_album_selection_page_selection_info": "選択・除外中のアルバム",
"backup_album_selection_page_total_assets": "選択されたアルバムの写真と動画の数",
@ -703,7 +703,7 @@
"daily_title_text_date": "MM DD, EE",
"daily_title_text_date_year": "yyyy MM DD, EE",
"dark": "ダークモード",
"darkTheme": "ダークモードを切り替え",
"dark_theme": "ダークモード切り替え",
"date_after": "この日以降",
"date_and_time": "日付と時間",
"date_before": "この日以前",
@ -719,6 +719,7 @@
"default_locale": "デフォルトのロケール",
"default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします",
"delete": "削除",
"delete_action_prompt": "{count}項目を完全に削除しました",
"delete_album": "アルバムを削除",
"delete_api_key_prompt": "本当にこのAPI キーを削除しますか?",
"delete_dialog_alert": "サーバーとデバイスの両方から完全に削除されます",
@ -799,6 +800,7 @@
"edit_key": "キーを編集",
"edit_link": "リンクを編集する",
"edit_location": "位置情報を編集",
"edit_location_action_prompt": "{count}項目の位置情報を変更しました",
"edit_location_dialog_title": "位置情報",
"edit_name": "名前を変更",
"edit_people": "人物を編集",
@ -984,6 +986,7 @@
"failed_to_load_assets": "アセットのロードに失敗しました",
"failed_to_load_folder": "フォルダーの読み込みに失敗",
"favorite": "お気に入り",
"favorite_action_prompt": "{count}項目をお気に入りに追加しました",
"favorite_or_unfavorite_photo": "写真をお気にいりに登録または解除",
"favorites": "お気に入り",
"favorites_page_no_favorites": "お気に入り登録された項目がありません",
@ -1246,6 +1249,7 @@
"more": "もっと表示",
"move": "移動",
"move_off_locked_folder": "鍵付きフォルダーから出す",
"move_to_lock_folder_action_prompt": "{count}項目を鍵付きフォルダーに追加しました",
"move_to_locked_folder": "鍵付きフォルダーへ移動",
"move_to_locked_folder_confirmation": "これらの写真や動画はすべてのアルバムから外され、鍵付きフォルダー内でのみ閲覧可能になります",
"moved_to_archive": "{count, plural, one {#} other {#}}項目をアーカイブしました",
@ -1496,6 +1500,7 @@
"remove_deleted_assets": "オフラインのアセットを削除",
"remove_from_album": "アルバムから削除",
"remove_from_favorites": "お気に入り解除",
"remove_from_lock_folder_action_prompt": "{count}項目を鍵付きフォルダーから出しました",
"remove_from_locked_folder": "鍵付きフォルダーから取り除く",
"remove_from_locked_folder_confirmation": "選択した写真・動画を鍵付きフォルダーの外に出してよろしいですか?ライブラリに再び表示されるようになります",
"remove_from_shared_link": "共有リンクから削除",
@ -1838,6 +1843,7 @@
"total": "合計",
"total_usage": "総使用量",
"trash": "ゴミ箱",
"trash_action_prompt": "{count}項目をゴミ箱に移動しました",
"trash_all": "全て削除",
"trash_count": "{count, number}枚ゴミ箱へ移動",
"trash_delete_asset": "アセットをゴミ箱へ移動/削除",

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