Merge branch 'main' into copy-album-url-fix

This commit is contained in:
Damian Lesiuk 2025-10-10 20:43:01 +02:00 committed by GitHub
commit fb88355523
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
260 changed files with 7564 additions and 4094 deletions

View file

@ -6,28 +6,35 @@ services:
- IMMICH_SERVER_URL=http://127.0.0.1:2283/ - IMMICH_SERVER_URL=http://127.0.0.1:2283/
volumes: !override # bind mount host to /workspaces/immich volumes: !override # bind mount host to /workspaces/immich
- ..:/workspaces/immich - ..:/workspaces/immich
- cli_node_modules:/workspaces/immich/cli/node_modules - ${UPLOAD_LOCATION:-upload-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data
- e2e_node_modules:/workspaces/immich/e2e/node_modules - pnpm-store:/usr/src/app/.pnpm-store
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules - server-node_modules:/usr/src/app/server/node_modules
- server_node_modules:/workspaces/immich/server/node_modules - web-node_modules:/usr/src/app/web/node_modules
- web_node_modules:/workspaces/immich/web/node_modules - github-node_modules:/usr/src/app/.github/node_modules
- ${UPLOAD_LOCATION}/photos:/data - cli-node_modules:/usr/src/app/cli/node_modules
- docs-node_modules:/usr/src/app/docs/node_modules
- e2e-node_modules:/usr/src/app/e2e/node_modules
- sdk-node_modules:/usr/src/app/open-api/typescript-sdk/node_modules
- app-node_modules:/usr/src/app/node_modules
- sveltekit:/usr/src/app/web/.svelte-kit
- coverage:/usr/src/app/web/coverage
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
immich-web:
env_file: !reset []
immich-machine-learning:
env_file: !reset []
database: database:
env_file: !reset []
environment: !override
POSTGRES_PASSWORD: ${DB_PASSWORD-postgres}
POSTGRES_USER: ${DB_USERNAME-postgres}
POSTGRES_DB: ${DB_DATABASE_NAME-immich}
POSTGRES_INITDB_ARGS: '--data-checksums'
POSTGRES_HOST_AUTH_METHOD: md5
volumes: volumes:
- ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data - ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data
redis:
env_file: !reset []
volumes: volumes:
# Node modules for each service to avoid conflicts and ensure consistent dependencies upload-devcontainer-volume:
cli_node_modules: postgres-devcontainer-volume:
e2e_node_modules:
open_api_node_modules:
server_node_modules:
web_node_modules:
# UPLOAD_LOCATION must be set to a absolute path or vol-upload
vol-upload:
# DB_DATA_LOCATION must be set to a absolute path or vol-database
vol-database:

View file

@ -40,7 +40,7 @@
"userEnvProbe": "loginInteractiveShell", "userEnvProbe": "loginInteractiveShell",
"remoteEnv": { "remoteEnv": {
// The location where your uploaded files are stored // The location where your uploaded files are stored
"UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./Library}", "UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./library}",
// Connection secret for postgres. You should change it to a random password // Connection secret for postgres. You should change it to a random password
// Please use only the characters `A-Za-z0-9`, without special characters or spaces // Please use only the characters `A-Za-z0-9`, without special characters or spaces
"DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}", "DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}",

2
.github/.nvmrc vendored
View file

@ -1 +1 @@
22.19.0 22.20.0

View file

@ -55,7 +55,7 @@ jobs:
runs-on: mich runs-on: mich
steps: steps:
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
ref: ${{ inputs.ref || github.sha }} ref: ${{ inputs.ref || github.sha }}
persist-credentials: false persist-credentials: false
@ -66,14 +66,14 @@ jobs:
working-directory: ./mobile working-directory: ./mobile
run: printf "%s" $KEY_JKS | base64 -d > android/key.jks run: printf "%s" $KEY_JKS | base64 -d > android/key.jks
- uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with: with:
distribution: 'zulu' distribution: 'zulu'
java-version: '17' java-version: '17'
- name: Restore Gradle Cache - name: Restore Gradle Cache
id: cache-gradle-restore id: cache-gradle-restore
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with: with:
path: | path: |
~/.gradle/caches ~/.gradle/caches
@ -130,7 +130,7 @@ jobs:
- name: Save Gradle Cache - name: Save Gradle Cache
id: cache-gradle-save id: cache-gradle-save
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
with: with:
path: | path: |

View file

@ -19,7 +19,7 @@ jobs:
actions: write actions: write
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false

View file

@ -29,7 +29,7 @@ jobs:
working-directory: ./cli working-directory: ./cli
steps: steps:
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
@ -37,7 +37,7 @@ jobs:
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
@ -50,7 +50,7 @@ jobs:
- run: pnpm install --frozen-lockfile - run: pnpm install --frozen-lockfile
- run: pnpm build - run: pnpm build
- run: pnpm publish - run: pnpm publish --no-git-checks
if: ${{ github.event_name == 'release' }} if: ${{ github.event_name == 'release' }}
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@ -65,7 +65,7 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
@ -76,7 +76,7 @@ jobs:
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
if: ${{ !github.event.pull_request.head.repo.fork }} if: ${{ !github.event.pull_request.head.repo.fork }}
with: with:
registry: ghcr.io registry: ghcr.io

View file

@ -44,13 +44,13 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@ -63,7 +63,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 uses: github/codeql-action/autobuild@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@ -76,6 +76,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh # ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
with: with:
category: '/language:${{matrix.language}}' category: '/language:${{matrix.language}}'

View file

@ -53,7 +53,7 @@ jobs:
suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn'] suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
steps: steps:
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
@ -82,7 +82,7 @@ jobs:
suffix: [''] suffix: ['']
steps: steps:
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}

View file

@ -47,7 +47,7 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
@ -55,7 +55,7 @@ jobs:
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './docs/.nvmrc' node-version-file: './docs/.nvmrc'
cache: 'pnpm' cache: 'pnpm'

View file

@ -20,7 +20,7 @@ jobs:
run: echo 'The triggering workflow did not succeed' && exit 1 run: echo 'The triggering workflow did not succeed' && exit 1
- name: Get artifact - name: Get artifact
id: get-artifact id: get-artifact
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with: with:
script: | script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
@ -38,7 +38,7 @@ jobs:
return { found: true, id: matchArtifact.id }; return { found: true, id: matchArtifact.id };
- name: Determine deploy parameters - name: Determine deploy parameters
id: parameters id: parameters
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env: env:
HEAD_SHA: ${{ github.event.workflow_run.head_sha }} HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
with: with:
@ -108,13 +108,13 @@ jobs:
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }} if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Load parameters - name: Load parameters
id: parameters id: parameters
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env: env:
PARAM_JSON: ${{ needs.checks.outputs.parameters }} PARAM_JSON: ${{ needs.checks.outputs.parameters }}
with: with:
@ -125,7 +125,7 @@ jobs:
core.setOutput("shouldDeploy", parameters.shouldDeploy); core.setOutput("shouldDeploy", parameters.shouldDeploy);
- name: Download artifact - name: Download artifact
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
env: env:
ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }} ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }}
with: with:

View file

@ -14,7 +14,7 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false

View file

@ -22,7 +22,7 @@ jobs:
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: 'Checkout' - name: 'Checkout'
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
ref: ${{ github.event.pull_request.head.ref }} ref: ${{ github.event.pull_request.head.ref }}
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
@ -32,7 +32,7 @@ jobs:
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -48,7 +48,7 @@ jobs:
message: 'chore: fix formatting' message: 'chore: fix formatting'
- name: Remove label - name: Remove label
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
if: always() if: always()
with: with:
script: | script: |

View file

@ -11,4 +11,4 @@ jobs:
pull-requests: write pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 - uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1

View file

@ -55,20 +55,20 @@ jobs:
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
persist-credentials: true persist-credentials: true
ref: main ref: main
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -117,13 +117,13 @@ jobs:
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
persist-credentials: false persist-credentials: false
- name: Download APK - name: Download APK
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with: with:
name: release-apk-signed name: release-apk-signed

View file

@ -24,7 +24,7 @@ jobs:
permissions: permissions:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with: with:
script: | script: |
github.rest.issues.removeLabel({ github.rest.issues.removeLabel({

View file

@ -16,7 +16,7 @@ jobs:
run: run:
working-directory: ./open-api/typescript-sdk working-directory: ./open-api/typescript-sdk
steps: steps:
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
@ -24,7 +24,7 @@ jobs:
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
# Setup .npmrc file to publish to npm # Setup .npmrc file to publish to npm
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './open-api/typescript-sdk/.nvmrc' node-version-file: './open-api/typescript-sdk/.nvmrc'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
@ -35,6 +35,6 @@ jobs:
- name: Build - name: Build
run: pnpm build run: pnpm build
- name: Publish - name: Publish
run: pnpm publish run: pnpm publish --no-git-checks
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View file

@ -42,7 +42,7 @@ jobs:
working-directory: ./mobile working-directory: ./mobile
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false

View file

@ -56,13 +56,13 @@ jobs:
working-directory: ./server working-directory: ./server
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -93,13 +93,13 @@ jobs:
working-directory: ./cli working-directory: ./cli
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -133,13 +133,13 @@ jobs:
working-directory: ./cli working-directory: ./cli
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -168,13 +168,13 @@ jobs:
working-directory: ./web working-directory: ./web
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -185,7 +185,7 @@ jobs:
- name: Run pnpm install - name: Run pnpm install
run: pnpm rebuild && pnpm install --frozen-lockfile run: pnpm rebuild && pnpm install --frozen-lockfile
- name: Run linter - name: Run linter
run: pnpm lint:p run: pnpm lint
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run formatter - name: Run formatter
run: pnpm format run: pnpm format
@ -205,13 +205,13 @@ jobs:
working-directory: ./web working-directory: ./web
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -236,13 +236,13 @@ jobs:
contents: read contents: read
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -277,13 +277,13 @@ jobs:
working-directory: ./e2e working-directory: ./e2e
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -316,13 +316,13 @@ jobs:
working-directory: ./server working-directory: ./server
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -347,14 +347,14 @@ jobs:
runner: [ubuntu-latest, ubuntu-24.04-arm] runner: [ubuntu-latest, ubuntu-24.04-arm]
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
submodules: 'recursive' submodules: 'recursive'
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -395,14 +395,14 @@ jobs:
runner: [ubuntu-latest, ubuntu-24.04-arm] runner: [ubuntu-latest, ubuntu-24.04-arm]
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
submodules: 'recursive' submodules: 'recursive'
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -441,7 +441,7 @@ jobs:
permissions: permissions:
contents: read contents: read
steps: steps:
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup Flutter SDK - name: Setup Flutter SDK
@ -466,12 +466,12 @@ jobs:
run: run:
working-directory: ./machine-learning working-directory: ./machine-learning
steps: steps:
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2 uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818) # TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
# with: # with:
# python-version: 3.11 # python-version: 3.11
@ -503,13 +503,13 @@ jobs:
working-directory: ./.github working-directory: ./.github
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './.github/.nvmrc' node-version-file: './.github/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -525,7 +525,7 @@ jobs:
permissions: permissions:
contents: read contents: read
steps: steps:
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Run ShellCheck - name: Run ShellCheck
@ -540,13 +540,13 @@ jobs:
contents: read contents: read
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'pnpm' cache: 'pnpm'
@ -595,13 +595,13 @@ jobs:
working-directory: ./server working-directory: ./server
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
cache: 'pnpm' cache: 'pnpm'

14
.vscode/launch.json vendored
View file

@ -18,6 +18,20 @@
"name": "Immich Workers", "name": "Immich Workers",
"remoteRoot": "/usr/src/app/server", "remoteRoot": "/usr/src/app/server",
"localRoot": "${workspaceFolder}/server" "localRoot": "${workspaceFolder}/server"
},
{
"type": "node",
"request": "launch",
"name": "Immich CLI",
"program": "${workspaceFolder}/cli/dist/index.js",
"args": ["upload", "--help"],
"runtimeArgs": ["--enable-source-maps"],
"console": "integratedTerminal",
"resolveSourceMapLocations": ["${workspaceFolder}/cli/dist/**/*.js.map"],
"sourceMaps": true,
"outFiles": ["${workspaceFolder}/cli/dist/**/*.js"],
"skipFiles": ["<node_internals>/**"],
"preLaunchTask": "Build Immich CLI"
} }
] ]
} }

8
.vscode/tasks.json vendored
View file

@ -5,6 +5,7 @@
"label": "Fix Permissions, Install Dependencies", "label": "Fix Permissions, Install Dependencies",
"type": "shell", "type": "shell",
"command": "[ -f /immich-devcontainer/container-start.sh ] && /immich-devcontainer/container-start.sh || exit 0", "command": "[ -f /immich-devcontainer/container-start.sh ] && /immich-devcontainer/container-start.sh || exit 0",
"isBackground": true,
"presentation": { "presentation": {
"echo": true, "echo": true,
"reveal": "always", "reveal": "always",
@ -25,6 +26,7 @@
"dependsOn": ["Fix Permissions, Install Dependencies"], "dependsOn": ["Fix Permissions, Install Dependencies"],
"type": "shell", "type": "shell",
"command": "[ -f /immich-devcontainer/container-start-backend.sh ] && /immich-devcontainer/container-start-backend.sh || exit 0", "command": "[ -f /immich-devcontainer/container-start-backend.sh ] && /immich-devcontainer/container-start-backend.sh || exit 0",
"isBackground": true,
"presentation": { "presentation": {
"echo": true, "echo": true,
"reveal": "always", "reveal": "always",
@ -45,6 +47,7 @@
"dependsOn": ["Fix Permissions, Install Dependencies"], "dependsOn": ["Fix Permissions, Install Dependencies"],
"type": "shell", "type": "shell",
"command": "[ -f /immich-devcontainer/container-start-frontend.sh ] && /immich-devcontainer/container-start-frontend.sh || exit 0", "command": "[ -f /immich-devcontainer/container-start-frontend.sh ] && /immich-devcontainer/container-start-frontend.sh || exit 0",
"isBackground": true,
"presentation": { "presentation": {
"echo": true, "echo": true,
"reveal": "always", "reveal": "always",
@ -67,6 +70,11 @@
"runOn": "folderOpen" "runOn": "folderOpen"
}, },
"problemMatcher": [] "problemMatcher": []
},
{
"label": "Build Immich CLI",
"type": "shell",
"command": "pnpm --filter cli build:dev"
} }
] ]
} }

View file

@ -91,8 +91,6 @@ format-%:
pnpm --filter $(call map-package,$*) run format:fix pnpm --filter $(call map-package,$*) run format:fix
lint-%: lint-%:
pnpm --filter $(call map-package,$*) run lint:fix pnpm --filter $(call map-package,$*) run lint:fix
lint-web:
pnpm --filter $(call map-package,$*) run lint:p
check-%: check-%:
pnpm --filter $(call map-package,$*) run check pnpm --filter $(call map-package,$*) run check
check-web: check-web:

View file

@ -28,7 +28,8 @@
<a href="readme_i18n/README_de_DE.md">Deutsch</a> <a href="readme_i18n/README_de_DE.md">Deutsch</a>
<a href="readme_i18n/README_nl_NL.md">Nederlands</a> <a href="readme_i18n/README_nl_NL.md">Nederlands</a>
<a href="readme_i18n/README_tr_TR.md">Türkçe</a> <a href="readme_i18n/README_tr_TR.md">Türkçe</a>
<a href="readme_i18n/README_zh_CN.md">中文</a> <a href="readme_i18n/README_zh_CN.md">简体中文</a>
<a href="readme_i18n/README_zh_TW.md">正體中文</a>
<a href="readme_i18n/README_uk_UA.md">Українська</a> <a href="readme_i18n/README_uk_UA.md">Українська</a>
<a href="readme_i18n/README_ru_RU.md">Русский</a> <a href="readme_i18n/README_ru_RU.md">Русский</a>
<a href="readme_i18n/README_pt_BR.md">Português Brasileiro</a> <a href="readme_i18n/README_pt_BR.md">Português Brasileiro</a>
@ -38,26 +39,25 @@
<a href="readme_i18n/README_th_TH.md">ภาษาไทย</a> <a href="readme_i18n/README_th_TH.md">ภาษาไทย</a>
</p> </p>
## Disclaimer
- ⚠️ The project is under **very active** development. > [!WARNING]
- ⚠️ Expect bugs and breaking changes. > ⚠️ Always follow [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) backup plan for your precious photos and videos!
- ⚠️ **Do not use the app as the only way to store your photos and videos.** >
- ⚠️ Always follow [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) backup plan for your precious photos and videos!
> [!NOTE] > [!NOTE]
> You can find the main documentation, including installation guides, at https://immich.app/. > You can find the main documentation, including installation guides, at https://immich.app/.
## Links ## Links
- [Documentation](https://immich.app/docs) - [Documentation](https://docs.immich.app/)
- [About](https://immich.app/docs/overview/introduction) - [About](https://docs.immich.app/overview/introduction)
- [Installation](https://immich.app/docs/install/requirements) - [Installation](https://docs.immich.app/install/requirements)
- [Roadmap](https://immich.app/roadmap) - [Roadmap](https://immich.app/roadmap)
- [Demo](#demo) - [Demo](#demo)
- [Features](#features) - [Features](#features)
- [Translations](https://immich.app/docs/developer/translations) - [Translations](https://docs.immich.app/developer/translations)
- [Contributing](https://immich.app/docs/overview/support-the-project) - [Contributing](https://docs.immich.app/overview/support-the-project)
## Demo ## Demo
@ -106,7 +106,7 @@ Access the demo [here](https://demo.immich.app). For the mobile app, you can use
## Translations ## Translations
Read more about translations [here](https://immich.app/docs/developer/translations). Read more about translations [here](https://docs.immich.app/developer/translations).
<a href="https://hosted.weblate.org/engage/immich/"> <a href="https://hosted.weblate.org/engage/immich/">
<img src="https://hosted.weblate.org/widget/immich/immich/multi-auto.svg" alt="Translation status" /> <img src="https://hosted.weblate.org/widget/immich/immich/multi-auto.svg" alt="Translation status" />

View file

@ -1 +1 @@
22.19.0 22.20.0

View file

@ -1,30 +1,38 @@
A command-line interface for interfacing with the self-hosted photo manager [Immich](https://immich.app/). A command-line interface for interfacing with the self-hosted photo manager [Immich](https://immich.app/).
Please see the [Immich CLI documentation](https://immich.app/docs/features/command-line-interface). Please see the [Immich CLI documentation](https://docs.immich.app/features/command-line-interface).
# For developers # For developers
Before building the CLI, you must build the immich server and the open-api client. To build the server run the following in the server folder: Before building the CLI, you must build the immich server and the open-api client. To build the server run the following in the server folder:
$ npm install $ pnpm install
$ npm run build $ pnpm run build
Then, to build the open-api client run the following in the open-api folder: Then, to build the open-api client run the following in the open-api folder:
$ ./bin/generate-open-api.sh $ ./bin/generate-open-api.sh
To run the Immich CLI from source, run the following in the cli folder: ## Run from build
$ npm install Go to the cli folder and build it:
$ npm run build
$ ts-node .
You'll need ts-node, the easiest way to install it is to use npm: $ pnpm install
$ pnpm run build
$ node dist/index.js
$ npm i -g ts-node ## Run and Debug from source (VSCode)
With VScode you can run and debug the Immich CLI. Go to the launch.json file, find the Immich CLI config and change this with the command you need to debug
`"args": ["upload", "--help"],`
replace that for the command of your choice.
## Install from build
You can also build and install the CLI using You can also build and install the CLI using
$ npm run build $ pnpm run build
$ npm install -g . $ pnpm install -g .
**** ****

View file

@ -1,6 +1,6 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.2.94", "version": "2.2.96",
"description": "Command Line Interface (CLI) for Immich", "description": "Command Line Interface (CLI) for Immich",
"type": "module", "type": "module",
"exports": "./dist/index.js", "exports": "./dist/index.js",
@ -20,7 +20,7 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9", "@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1", "@types/mock-fs": "^4.13.1",
"@types/node": "^22.18.1", "@types/node": "^22.18.8",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0", "byte-size": "^9.0.0",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
@ -43,6 +43,7 @@
}, },
"scripts": { "scripts": {
"build": "vite build", "build": "vite build",
"build:dev": "vite build --sourcemap true",
"lint": "eslint \"src/**/*.ts\" --max-warnings 0", "lint": "eslint \"src/**/*.ts\" --max-warnings 0",
"lint:fix": "npm run lint -- --fix", "lint:fix": "npm run lint -- --fix",
"prepack": "npm run build", "prepack": "npm run build",
@ -68,6 +69,6 @@
"micromatch": "^4.0.8" "micromatch": "^4.0.8"
}, },
"volta": { "volta": {
"node": "22.19.0" "node": "22.20.0"
} }
} }

View file

@ -1,5 +1,5 @@
# #
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose # WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
# #
# Make sure to use the docker-compose.yml of the current release: # Make sure to use the docker-compose.yml of the current release:
# #
@ -8,8 +8,8 @@
# The compose file on main may not be compatible with the latest release. # The compose file on main may not be compatible with the latest release.
# For development see: # For development see:
# - https://immich.app/docs/developer/setup # - https://docs.immich.app/developer/setup
# - https://immich.app/docs/developer/troubleshooting # - https://docs.immich.app/developer/troubleshooting
name: immich-dev name: immich-dev
@ -55,8 +55,8 @@ services:
IMMICH_BUILD_IMAGE_URL: https://github.com/immich-app/immich/pkgs/container/immich-server IMMICH_BUILD_IMAGE_URL: https://github.com/immich-app/immich/pkgs/container/immich-server
IMMICH_THIRD_PARTY_SOURCE_URL: https://github.com/immich-app/immich/ IMMICH_THIRD_PARTY_SOURCE_URL: https://github.com/immich-app/immich/
IMMICH_THIRD_PARTY_BUG_FEATURE_URL: https://github.com/immich-app/immich/issues IMMICH_THIRD_PARTY_BUG_FEATURE_URL: https://github.com/immich-app/immich/issues
IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://immich.app/docs IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://docs.immich.app
IMMICH_THIRD_PARTY_SUPPORT_URL: https://immich.app/docs/community-guides IMMICH_THIRD_PARTY_SUPPORT_URL: https://docs.immich.app/community-guides
ulimits: ulimits:
nofile: nofile:
soft: 1048576 soft: 1048576

View file

@ -1,5 +1,5 @@
# #
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose # WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
# #
# Make sure to use the docker-compose.yml of the current release: # Make sure to use the docker-compose.yml of the current release:
# #

View file

@ -1,5 +1,5 @@
# #
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose # WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
# #
# Make sure to use the docker-compose.yml of the current release: # Make sure to use the docker-compose.yml of the current release:
# #
@ -36,7 +36,7 @@ services:
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda # Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
# file: hwaccel.ml.yml # file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes: volumes:

View file

@ -1,4 +1,4 @@
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables
# The location where your uploaded files are stored # The location where your uploaded files are stored
UPLOAD_LOCATION=./library UPLOAD_LOCATION=./library

View file

@ -4,7 +4,7 @@
# you can inline the config for a backend by copying its contents # you can inline the config for a backend by copying its contents
# into the immich-machine-learning service in the docker-compose.yml file. # into the immich-machine-learning service in the docker-compose.yml file.
# See https://immich.app/docs/features/ml-hardware-acceleration for info on usage. # See https://docs.immich.app/features/ml-hardware-acceleration for info on usage.
services: services:
armnn: armnn:

View file

@ -4,7 +4,7 @@
# you can inline the config for a backend by copying its contents # you can inline the config for a backend by copying its contents
# into the immich-microservices service in the docker-compose.yml file. # into the immich-microservices service in the docker-compose.yml file.
# See https://immich.app/docs/features/hardware-transcoding for more info on using hardware transcoding. # See https://docs.immich.app/features/hardware-transcoding for more info on using hardware transcoding.
services: services:
cpu: {} cpu: {}

View file

@ -1 +1 @@
22.19.0 22.20.0

View file

@ -55,3 +55,19 @@ Additionally, some jobs (such as memories generation) run on a schedule, which i
:::note :::note
Some jobs ([External Libraries](/features/libraries) scanning, Database Dump) are configured in their own sections in System Settings. Some jobs ([External Libraries](/features/libraries) scanning, Database Dump) are configured in their own sections in System Settings.
::: :::
## Job processing order
The below diagram shows the job run order for newly uploaded files
```mermaid
graph TD
A[Asset Upload] --> B[Metadata Extraction]
B --> C[Storage Template Migration]
C --> D["Thumbnail Generation (Large, small, blurred and person)"]
D --> E[Smart Search]
D --> F[Face Detection]
D --> G[Video Transcoding]
E --> H[Duplicate Detection]
F --> I[Facial Recognition]
```

View file

@ -1,5 +1,9 @@
# External Libraries # External Libraries
:::info
Currently an external library can only belong to a single user which is selected when the library is initially created.
:::
External libraries track assets stored in the filesystem outside of Immich. When the external library is scanned, Immich will load videos and photos from disk and create the corresponding assets. These assets will then be shown in the main timeline, and they will look and behave like any other asset, including viewing on the map, adding to albums, etc. Later, if a file is modified outside of Immich, you need to scan the library for the changes to show up. External libraries track assets stored in the filesystem outside of Immich. When the external library is scanned, Immich will load videos and photos from disk and create the corresponding assets. These assets will then be shown in the main timeline, and they will look and behave like any other asset, including viewing on the map, adding to albums, etc. Later, if a file is modified outside of Immich, you need to scan the library for the changes to show up.
If an external asset is deleted from disk, Immich will move it to trash on rescan. To restore the asset, you need to restore the original file. After 30 days the file will be removed from trash, and any changes to metadata within Immich will be lost. If an external asset is deleted from disk, Immich will move it to trash on rescan. To restore the asset, you need to restore the original file. After 30 days the file will be removed from trash, and any changes to metadata within Immich will be lost.

View file

@ -21,6 +21,10 @@ Restart Immich by running `docker compose up -d`.
# Create the library # Create the library
:::info
External library management requires administrator access and the steps below assume you are using an admin account.
:::
In the Immich web UI: In the Immich web UI:
- click the **Administration** link in the upper right corner. - click the **Administration** link in the upper right corner.

View file

@ -0,0 +1,32 @@
---
sidebar_position: 65
---
# One-Click [Cloud Service]
:::note
This version of Immich is provided via cloud service providers' one-click marketplaces. Hosting costs are set by the cloud service providers.
Support for these are provided by the individual cloud service providers.
**Please report issues to the corresponding [Github Repository][github].**
:::
## Installation
Go to the provider's marketplace and choose Immich, then follow the provided instructions.
## One-Click Immich marketplace providers
### DigitalOcean
https://marketplace.digitalocean.com/apps/immich
### Vultr
https://www.vultr.com/marketplace/apps/immich
## Issues
For issues, open an issue on the associated [GitHub Repository][github].
[github]: https://github.com/immich-app/immich/

View file

@ -16,7 +16,7 @@ Immich can easily be installed on a Synology NAS using Container Manager within
## Step 1 - Download the required files ## Step 1 - Download the required files
Create a directory of your choice (e.g. `./immich-app`) to house Immich. In general, it's a best practice to have all Docker-based applications running under the `./docker` directory, so in this case, your directory structure will look like `./docker/immich-app`. Create a directory of your choice (e.g. `./immich-app`) to house Immich. In general, it's best practice to have all Docker-based applications running under the `./docker` directory, so in this case, your directory structure will look like `./docker/immich-app`.
Now create a `./postgres` and `./library` directory as sub-directories of the `./docker/immich-app`. Now create a `./postgres` and `./library` directory as sub-directories of the `./docker/immich-app`.
@ -25,7 +25,7 @@ When you're all done, you should have the following:
- `./docker/immich-app/postgres` - `./docker/immich-app/postgres`
- `./docker/immich-app/library` - `./docker/immich-app/library`
Download [`docker-compose.yml`](https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml) and [`example.env`](https://github.com/immich-app/immich/releases/latest/download/example.env) to your computer. Upload the files to the `./docker/immich-app` directory, and rename `example.env` to `.env`. Download [`docker-compose.yml`](https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml) and [`example.env`](https://github.com/immich-app/immich/releases/latest/download/example.env) to your computer. Upload the files to the `./docker/immich-app` directory, and rename `example.env` to `.env`. Note: If you plan to use the Synology Text editor to edit the `.env` file on the NAS within File Station, you will need to rename it to a temporary name (e.g. `example.txt`) in order to see 'Open with Text Editor' in the file context menu. Once saved, rename it back to `.env`.
## Step 2 - Populate the .env file with custom values ## Step 2 - Populate the .env file with custom values
@ -34,23 +34,23 @@ Follow [Step 2 in Docker Compose](/install/docker-compose#step-2---populate-the-
## Step 3 - Create a new project in Container Manager ## Step 3 - Create a new project in Container Manager
Open Container Manager, and select the "**Project**" action on the left navigation bar and then click "**Create**". Open Container Manager, and select the "**Project**" action on the left navigation bar and then click "**Create**".
![Create Project](../../static/img/synology-container-manager-create-project.png) ![Create project](../../static/img/synology-container-manager-create-project.png)
In the settings of your new project, set "**Project name**" to a name you'll remember, such as _immich-app_. When setting the "**Path**", select the `./docker/immich-app` directory you created earlier. Doing so will prompt a message to use the existing `docker-compose.yml` already present in the directory for your project. Click "**OK**" to continue. In the settings of your new project, set "**Project name**" to a name you'll remember, such as _immich-app_. When setting the "**Path**", select the `./docker/immich-app` directory you created earlier. Doing so will prompt a message to use the existing `docker-compose.yml` already present in the directory for your project. Click "**OK**" to continue.
![Set Path](../../static/img/synology-container-manager-set-path.png) ![Set path](../../static/img/synology-container-manager-set-path.png)
The following screen will give you the option to further customize your `docker-compose.yml` file, giving you a warning regarding the `start_interval` property. Under the `healthcheck` heading, remove the `start_interval: 30s` completely and click "**Next**". The following screen will give you the option to further customize your `docker-compose.yml` file. Take note of `DB_STORAGE_TYPE: 'HDD'`and uncomment if applicable for your Synology setup.
![start interval](../../static/img/synology-container-manager-customize-docker-compose.png) ![DB storage](../../static/img/synology-container-manager-customize-docker-compose.png)
Skip the section asking to set-up a portal for Web Station, and then complete the wizard which will build and start the containers for your project. Skip the section asking to set-up a portal for Web Station, and then complete the wizard which will build and start the containers for your project.
Once your containers are successfully running, navigate to the "**Container**" section of Container Manager, right-click on the "**immich-server**" container, and choose the "**Details**". Once your containers are successfully running, navigate to the "**Container**" section of Container Manager, right-click on the "**immich-server**" container, and choose the "**Details**".
Scroll to the bottom of the "**Details**" section, and find the `IP Address` of the container, located in the `Network` section. Take note of the container's IP address as you will need it for **Step 4**. Scroll to the bottom of the "**Details**" section and find the `IP Address` listed in the `Network` section. Take note of the container's IP address as you will need it for **Step 4**.
![Container Details](../../static/img/synology-container-manager-container-details.png) ![Container details](../../static/img/synology-container-manager-container-details.png)
## Step 4 - Configure Firewall Settings ## Step 4 - Configure Firewall Settings
@ -63,8 +63,66 @@ Open "**Control Panel**" on your Synology NAS, and select "**Security**". Naviga
Click "**Edit Rules**" and add the following firewall rules: Click "**Edit Rules**" and add the following firewall rules:
- Add a "**Source IP**" rule for the IP address of your container that you obtained in Step 3 above - Add a "**Source IP**" rule for the IP address of your container that you obtained in Step 3 above
![IP address rule](../../static/img/synology-ipaddress-firewall-rule.png)
- Add a "**Ports**" rule for the port specified in the `docker-compose.yml`, which should be `2283` - Add a "**Ports**" rule for the port specified in the `docker-compose.yml`, which should be `2283`
![Custom port rule](../../static/img/synology-custom-port-firewall-rule.png)
## Next Steps ## Next Steps
Read the [Post Installation](/install/post-install.mdx) steps and [upgrade instructions](/install/upgrading.md). Read the [Post Installation](/install/post-install.mdx) steps and [upgrade instructions](/install/upgrading.md).
<details>
<summary>Updating Immich using Container Manager</summary>
Check the post installation and upgrade instructions at the links above before proceeding with this section.
## Step 1. Backup
Ensure your photos and videos are backed up. Your `.env` settings will define where they are stored. There is no need to delete any files or folders within the `docker` folder when doing a release upgrade unless instructed in the release notes.
## Step 2. Check release notes
Always check the [release notes](https://github.com/immich-app/immich/releases) before proceeding with an update!
## Step 3. Stop containers & clean up
Open **Container Manager**. Select **Project** then your Immich app
![Select project](../../static/img/synology-select-proj.png)
Select **Stop**
![Stop project](../../static/img/synology-project-stop.png)
Select **Action** then **Clean**. This removes the containers.
![Clean project](../../static/img/synology-action-clean.png)
Go to **Image** and select **Remove Unused Images**.
![Remove unused](../../static/img/synology-remove-unused.png)
## Step 4. Build
Go to **Project**, select **Action** then **Build**. This will download, unpack, install and start the containers.
![Build](../../static/img/synology-build.png)
## Step 5. Update firewall rule
The default behavior is to automatically start the containers once installed. If `immich_server` runs for a few seconds and then stops, it may be because the firewall rule no longer matches the server IP address.
Go to the **Container** section. Click on `immich_server` and scroll down on **General** to find the IP address.
![Container IP](../../static/img/synology-container-ip.png)
Go to Synology **Control Panel**. Select **Security** and **Firewall**.
![Firewall](../../static/img/synology-fw-rules.png)
In this example, the IP addresses mismatch and the firewall rule needs to be edited to match above.
![Edit IP](../../static/img/synology-fw-ipedit.png)
</details>

View file

@ -387,27 +387,35 @@ To migrate from the old storage configuration to the new one, you will need to c
3. **Copy the data** from the old datasets to the new dataset. We advise using the `rsync` command to copy the data, as it will preserve the permissions and ownership of the files. The following commands are examples: 3. **Copy the data** from the old datasets to the new dataset. We advise using the `rsync` command to copy the data, as it will preserve the permissions and ownership of the files. The following commands are examples:
```bash ```bash
rsync -av /mnt/tank/immich/library/ /mnt/tank/immich/data/library/ sudo rsync -av /mnt/tank/immich/library/ /mnt/tank/immich/data/library/
rsync -av /mnt/tank/immich/upload/ /mnt/tank/immich/data/upload/ sudo rsync -av /mnt/tank/immich/upload/ /mnt/tank/immich/data/upload/
rsync -av /mnt/tank/immich/thumbs/ /mnt/tank/immich/data/thumbs/ sudo rsync -av /mnt/tank/immich/thumbs/ /mnt/tank/immich/data/thumbs/
rsync -av /mnt/tank/immich/profile/ /mnt/tank/immich/data/profile/ sudo rsync -av /mnt/tank/immich/profile/ /mnt/tank/immich/data/profile/
rsync -av /mnt/tank/immich/video/ /mnt/tank/immich/data/encoded-video/ sudo rsync -av /mnt/tank/immich/video/ /mnt/tank/immich/data/encoded-video/
rsync -av /mnt/tank/immich/backups/ /mnt/tank/immich/data/backups/ sudo rsync -av /mnt/tank/immich/backups/ /mnt/tank/immich/data/backups/
``` ```
Make sure to replace `/mnt/tank/immich/` with the correct path to your old datasets and `/mnt/tank/immich/data/` with the correct path to your new dataset. Make sure to replace `/mnt/tank/immich/` with the correct path to your old datasets and `/mnt/tank/immich/data/` with the correct path to your new dataset.
:::tip :::tip
If you were using **ixVolume (dataset created automatically by the system)** for Immich data storage, the path to the data should be `/mnt/.ix-apps/app_mounts/immich/`. You have to use this path instead of `/mnt/tank/immich/` in the `rsync` command above, for example: If you were using **ixVolume (dataset created automatically by the system)** for some of Immich data storage, the path to the data should be `/mnt/.ix-apps/app_mounts/immich/`. You have to use this path instead of `/mnt/tank/immich/` in the `rsync` command above, for example:
```bash ```bash
rsync -av /mnt/.ix-apps/app_mounts/immich/library/ /mnt/tank/immich/data/library/ sudo rsync -av /mnt/.ix-apps/app_mounts/immich/library/ /mnt/tank/immich/data/library/
``` ```
If you also were storing your files in the **ixVolume**, the **_upload_** folder is named `uploads` instead of `upload`, so the command to run should be:
```bash
sudo rsync -av /mnt/.ix-apps/app_mounts/immich/uploads/ /mnt/tank/immich/data/upload/
```
This means that depending on your old storage configuration, you might have to use a mix of paths in the `rsync` commands above.
If you were also using an ixVolume for Postgres data storage, you also should, first create the pgData dataset, as described in the [Setting up Storage Datasets](#setting-up-storage-datasets) section above, and then you can use the following command to copy the Postgres data: If you were also using an ixVolume for Postgres data storage, you also should, first create the pgData dataset, as described in the [Setting up Storage Datasets](#setting-up-storage-datasets) section above, and then you can use the following command to copy the Postgres data:
```bash ```bash
rsync -av /mnt/.ix-apps/app_mounts/immich/pgData/ /mnt/tank/immich/pgData/ sudo rsync -av /mnt/.ix-apps/app_mounts/immich/pgData/ /mnt/tank/immich/pgData/
``` ```
::: :::
@ -416,7 +424,7 @@ rsync -av /mnt/.ix-apps/app_mounts/immich/pgData/ /mnt/tank/immich/pgData/
Make sure that for each folder, the `.immich` file is copied as well, as it contains important metadata for Immich. If for some reason the `.immich` file is not copied, you can copy it manually with the `rsync` command, for example: Make sure that for each folder, the `.immich` file is copied as well, as it contains important metadata for Immich. If for some reason the `.immich` file is not copied, you can copy it manually with the `rsync` command, for example:
```bash ```bash
rsync -av /mnt/tank/immich/library/.immich /mnt/tank/immich/data/library/ sudo rsync -av /mnt/tank/immich/library/.immich /mnt/tank/immich/data/library/
``` ```
Replace `library` with the name of the folder where you are copying the file. Replace `library` with the name of the folder where you are copying the file.
@ -437,38 +445,37 @@ This will recreate the Immich container with the new storage configuration and s
If everything went well, you should now be able to access Immich with the new storage configuration. You can verify that the data has been copied correctly by checking the Immich web interface and ensuring that all your photos and videos are still available. You may delete the old datasets, if you no longer need them, using the TrueNAS web interface. If everything went well, you should now be able to access Immich with the new storage configuration. You can verify that the data has been copied correctly by checking the Immich web interface and ensuring that all your photos and videos are still available. You may delete the old datasets, if you no longer need them, using the TrueNAS web interface.
:::tip
If you were using **ixVolume (dataset created automatically by the system)** or folders for Immich data storage, you can delete the old datasets using the following commands: If you were using **ixVolume (dataset created automatically by the system)** or folders for Immich data storage, you can delete the old datasets using the following commands:
```bash ```bash
rm -r /mnt/.ix-apps/app_mounts/immich/library sudo rm -r /mnt/.ix-apps/app_mounts/immich/*
rm -r /mnt/.ix-apps/app_mounts/immich/uploads
rm -r /mnt/.ix-apps/app_mounts/immich/thumbs
rm -r /mnt/.ix-apps/app_mounts/immich/profile
rm -r /mnt/.ix-apps/app_mounts/immich/video
rm -r /mnt/.ix-apps/app_mounts/immich/backups
``` ```
:::
</TabItem> </TabItem>
<TabItem value="migrate-old-dataset" label="Keep the existing datasets"> <TabItem value="migrate-old-dataset" label="Keep the existing datasets">
To migrate from the old storage configuration to the new one without creating new datasets. To migrate from the old storage configuration to the new one without creating new datasets.
1. **Stop the Immich app** from the TrueNAS web interface to ensure no data is being written while you are updating the app. 1. **Stop the Immich app** from the TrueNAS web interface to ensure no data is being written while you are updating the app.
2. **Update the datasets permissions**: Ensure that the datasets used for Immich data storage (`library`, `upload`, `thumbs`, `profile`, `video`, `backups`) have the correct permissions set for the user who will run Immich. The user should have ***modify*** permissions on these datasets. The default user for Immich is `apps` (UID 568) and the default group is `apps` (GID 568). If you are using a different user, make sure to set the permissions accordingly. You can do this from the TrueNAS web interface by going to the **Datasets** screen, selecting each dataset, clicking on the **Edit** button next to **Permissions**, and adding the user with ***modify*** permissions. 2. **Update the datasets permissions**: Ensure that the datasets used for Immich data storage (`library`, `upload`, `thumbs`, `profile`, `video`, `backups`) have the correct permissions set for the user who will run Immich. The user should have **_modify_** permissions on these datasets. The default user for Immich is `apps` (UID 568) and the default group is `apps` (GID 568). If you are using a different user, make sure to set the permissions accordingly. You can do this from the TrueNAS web interface by going to the **Datasets** screen, selecting each dataset, clicking on the **Edit** button next to **Permissions**, and adding the user with **_modify_** permissions.
3. **Update the Immich app** to use the existing datasets: 3. **Update the Immich app** to use the existing datasets:
- Go to the **Installed Applications** screen and select Immich from the list of installed applications. - Go to the **Installed Applications** screen and select Immich from the list of installed applications.
- Click **Edit** on the **Application Info** widget. - Click **Edit** on the **Application Info** widget.
- In the **Storage Configuration** section, untick the **Use Old Storage Configuration (Deprecated)** checkbox. - In the **Storage Configuration** section, untick the **Use Old Storage Configuration (Deprecated)** checkbox.
- For the **Data Storage**, you can keep the **ixVolume (dataset created automatically by the system)** as no data will be directly written to it. We recommend selecting **Host Path (Path that already exists on the system)** and then select a **new** dataset you created for Immich data storage, for example, `data`. - For the **Data Storage**, you can keep the **ixVolume (dataset created automatically by the system)** as no data will be directly written to it. We recommend selecting **Host Path (Path that already exists on the system)** and then select a **new** dataset you created for Immich data storage, for example, `data`.
- For the **Postgres Data Storage**, keep **Host Path (Path that already exists on the system)** and then select the existing dataset you used for Postgres data storage, for example, `pgData`. - For the **Postgres Data Storage**, keep **Host Path (Path that already exists on the system)** and then select the existing dataset you used for Postgres data storage, for example, `pgData`.
- Following the instructions in the [Multiple Datasets for Immich Storage](#additional-storage-advanced-users) section, you can add, **for each old dataset**, a new Additional Storage with the following settings: - Following the instructions in the [Multiple Datasets for Immich Storage](#additional-storage-advanced-users) section, you can add, **for each old dataset**, a new Additional Storage with the following settings:
- **Type**: `Host Path (Path that already exists on the system)` - **Type**: `Host Path (Path that already exists on the system)`
- **Mount Path**: `/data/<folder-name>` (e.g. `/data/library`) - **Mount Path**: `/data/<folder-name>` (e.g. `/data/library`)
- **Host Path**: `/mnt/<your-pool-name>/<dataset-name>` (e.g. `/mnt/tank/immich/library`) - **Host Path**: `/mnt/<your-pool-name>/<dataset-name>` (e.g. `/mnt/tank/immich/library`)
:::danger Ensure using the correct paths names :::danger Ensure using the correct paths names
Make sure to replace `<folder-name>` with the actual name of the folder used by Immich: `library`, `upload`, `thumbs`, `profile`, `encoded-video`, and `backups`. Also, replace `<your-pool-name>` and `<dataset-name>` with the actual names of your pool and dataset. Make sure to replace `<folder-name>` with the actual name of the folder used by Immich: `library`, `upload`, `thumbs`, `profile`, `encoded-video`, and `backups`. Also, replace `<your-pool-name>` and `<dataset-name>` with the actual names of your pool and dataset.
::: :::
- **Read Only**: Keep it unticked as Immich needs to write to these datasets. - **Read Only**: Keep it unticked as Immich needs to write to these datasets.
- Click **Update** at the bottom of the page to save changes. - Click **Update** at the bottom of the page to save changes.
4. **Start the Immich app** from the TrueNAS web interface. This will recreate the Immich container with the new storage configuration and start the app. If everything went well, you should now be able to access Immich with the new storage configuration. You can verify that the data is still available by checking the Immich web interface and ensuring that all your photos and videos are still accessible. 4. **Start the Immich app** from the TrueNAS web interface. This will recreate the Immich container with the new storage configuration and start the app. If everything went well, you should now be able to access Immich with the new storage configuration. You can verify that the data is still available by checking the Immich web interface and ensuring that all your photos and videos are still accessible.
</TabItem> </TabItem>

View file

@ -4,9 +4,7 @@ sidebar_position: 95
# Upgrading # Upgrading
:::danger Read the release notes :::tip Breaking changes
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. You should read the release notes prior to updating and take special care when using automated tools like [Watchtower][watchtower].
You can see versions that had breaking changes [here][breaking]. You can see versions that had breaking changes [here][breaking].
::: :::

View file

@ -1,7 +1,6 @@
Now that you have imported some pictures, you should setup server backups to preserve your memories. Now that you have imported some pictures, you should setup server backups to preserve your memories.
You can do so by following our [backup guide](/administration/backup-and-restore.md). You can do so by following our [backup guide](/administration/backup-and-restore.md).
:::danger :::info
Immich is still under heavy development _and_ handles very important data. A 3-2-1 backup strategy is still crucial. The team has the responsibility to ensure that the application doesnt cause loss of your precious memories; however, we cannot guarantee that hard drives will not fail, or an electrical event causes unexpected shutdown of your server/system, leading to data loss. Therefore, we still encourage users to follow best practices when safeguarding their data. Keep multiple copies of your most precious data: at least two local copies and one copy offsite in cold storage.
It is essential that you set up good backups, and test them.
::: :::

View file

@ -65,11 +65,6 @@ const config = {
themeConfig: themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */ /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({ ({
announcementBar: {
id: 'site_announcement_immich',
content: `⚠️ The project is under <strong>very active</strong> development. Expect bugs and changes. Do not use it as <strong>the only way</strong> to store your photos and videos!`,
isCloseable: false,
},
docs: { docs: {
sidebar: { sidebar: {
autoCollapseCategories: false, autoCollapseCategories: false,

View file

@ -17,9 +17,9 @@
"write-heading-ids": "docusaurus write-heading-ids" "write-heading-ids": "docusaurus write-heading-ids"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "~3.8.0", "@docusaurus/core": "~3.9.0",
"@docusaurus/preset-classic": "~3.8.0", "@docusaurus/preset-classic": "~3.9.0",
"@docusaurus/theme-common": "~3.8.0", "@docusaurus/theme-common": "~3.9.0",
"@mdi/js": "^7.3.67", "@mdi/js": "^7.3.67",
"@mdi/react": "^1.6.1", "@mdi/react": "^1.6.1",
"@mdx-js/react": "^3.0.0", "@mdx-js/react": "^3.0.0",
@ -35,7 +35,7 @@
"url": "^0.11.0" "url": "^0.11.0"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "~3.8.0", "@docusaurus/module-type-aliases": "~3.9.0",
"@docusaurus/tsconfig": "^3.7.0", "@docusaurus/tsconfig": "^3.7.0",
"@docusaurus/types": "^3.7.0", "@docusaurus/types": "^3.7.0",
"prettier": "^3.2.4", "prettier": "^3.2.4",
@ -57,6 +57,6 @@
"node": ">=20" "node": ">=20"
}, },
"volta": { "volta": {
"node": "22.19.0" "node": "22.20.0"
} }
} }

View file

@ -23,11 +23,6 @@ const projects: CommunityProjectProps[] = [
description: 'A Python script to sync folders as albums.', description: 'A Python script to sync folders as albums.',
url: 'https://git.orenit.solutions/open/immichalbumpull', url: 'https://git.orenit.solutions/open/immichalbumpull',
}, },
{
title: 'Remove offline files',
description: 'A simple way to remove orphaned offline assets from the Immich database',
url: 'https://github.com/Thoroslives/immich_remove_offline_files',
},
{ {
title: 'Immich-Tools', title: 'Immich-Tools',
description: 'Provides scripts for handling problems on the repair page.', description: 'Provides scripts for handling problems on the repair page.',
@ -120,6 +115,11 @@ const projects: CommunityProjectProps[] = [
description: 'Auto-stack photos with identical filenames and differing extensions (i.e. JPG+RAW)', description: 'Auto-stack photos with identical filenames and differing extensions (i.e. JPG+RAW)',
url: 'https://github.com/sid3windr/immich-stack', url: 'https://github.com/sid3windr/immich-stack',
}, },
{
title: 'Immich Stack',
description: 'Automatically groups similar photos into stacks within the Immich photo management system.',
url: 'https://github.com/Majorfi/immich-stack/',
},
]; ];
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element { function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {

View file

@ -1,4 +1,12 @@
[ [
{
"label": "v2.0.1",
"url": "https://docs.v2.0.1.archive.immich.app"
},
{
"label": "v2.0.0",
"url": "https://docs.v2.0.0.archive.immich.app"
},
{ {
"label": "v1.144.1", "label": "v1.144.1",
"url": "https://docs.v1.144.1.archive.immich.app" "url": "https://docs.v1.144.1.archive.immich.app"

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
docs/static/img/synology-build.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 153 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/static/img/synology-fw-ipedit.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
docs/static/img/synology-fw-rules.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/static/img/synology-select-proj.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -1 +1 @@
22.19.0 22.20.0

View file

@ -35,7 +35,7 @@ services:
- 2285:2285 - 2285:2285
redis: redis:
image: redis:6.2-alpine@sha256:7fe72c486b910f6b1a9769c937dad5d63648ddee82e056f47417542dd40825bb image: redis:6.2-alpine@sha256:2185e741f4c1e7b0ea9ca1e163a3767c4270a73086b6bbea2049a7203212fb7f
database: database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:11ced39d65a92a54d12890ced6a26cc2003f92697d6f0d4d944b98459dba7138 image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:11ced39d65a92a54d12890ced6a26cc2003f92697d6f0d4d944b98459dba7138

View file

@ -1,6 +1,6 @@
{ {
"name": "immich-e2e", "name": "immich-e2e",
"version": "1.144.1", "version": "2.0.1",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",
@ -25,7 +25,7 @@
"@playwright/test": "^1.44.1", "@playwright/test": "^1.44.1",
"@socket.io/component-emitter": "^3.1.2", "@socket.io/component-emitter": "^3.1.2",
"@types/luxon": "^3.4.2", "@types/luxon": "^3.4.2",
"@types/node": "^22.18.1", "@types/node": "^22.18.8",
"@types/oidc-provider": "^9.0.0", "@types/oidc-provider": "^9.0.0",
"@types/pg": "^8.15.1", "@types/pg": "^8.15.1",
"@types/pngjs": "^6.0.4", "@types/pngjs": "^6.0.4",
@ -43,7 +43,7 @@
"pngjs": "^7.0.0", "pngjs": "^7.0.0",
"prettier": "^3.2.5", "prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-organize-imports": "^4.0.0",
"sharp": "^0.34.3", "sharp": "^0.34.4",
"socket.io-client": "^4.7.4", "socket.io-client": "^4.7.4",
"supertest": "^7.0.0", "supertest": "^7.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
@ -52,6 +52,6 @@
"vitest": "^3.0.0" "vitest": "^3.0.0"
}, },
"volta": { "volta": {
"node": "22.19.0" "node": "22.20.0"
} }
} }

View file

@ -28,6 +28,7 @@
"add_to_album": "إضافة إلى ألبوم", "add_to_album": "إضافة إلى ألبوم",
"add_to_album_bottom_sheet_added": "تمت الاضافة الى {album}", "add_to_album_bottom_sheet_added": "تمت الاضافة الى {album}",
"add_to_album_bottom_sheet_already_exists": "موجود مسبقا في {album}", "add_to_album_bottom_sheet_already_exists": "موجود مسبقا في {album}",
"add_to_album_bottom_sheet_some_local_assets": "لا يمكن إضافة بعض الأصول المحلية إلى الألبوم",
"add_to_album_toggle": "تبديل التحديد لـ{album}", "add_to_album_toggle": "تبديل التحديد لـ{album}",
"add_to_albums": "إضافة الى البومات", "add_to_albums": "إضافة الى البومات",
"add_to_albums_count": "إضافه إلى البومات ({count})", "add_to_albums_count": "إضافه إلى البومات ({count})",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "قم بتشغيل النسخ الاحتياطي المقدمة", "backup_controller_page_turn_on": "قم بتشغيل النسخ الاحتياطي المقدمة",
"backup_controller_page_uploading_file_info": "تحميل معلومات الملف", "backup_controller_page_uploading_file_info": "تحميل معلومات الملف",
"backup_err_only_album": "لا يمكن إزالة الألبوم الوحيد", "backup_err_only_album": "لا يمكن إزالة الألبوم الوحيد",
"backup_error_sync_failed": "فشل المزامنة. لا يمكن معالجة النسخ الاحتياطي.",
"backup_info_card_assets": "أصول", "backup_info_card_assets": "أصول",
"backup_manual_cancelled": "ملغي", "backup_manual_cancelled": "ملغي",
"backup_manual_in_progress": "قيد التحميل حاول مره اخرى", "backup_manual_in_progress": "قيد التحميل حاول مره اخرى",

View file

@ -1,8 +1,8 @@
{ {
"about": "Haqqında", "about": "Haqqında",
"account": "Hesab", "account": "Hesab",
"account_settings": "Hesab parametrləri", "account_settings": "Hesab Parametrləri",
"acknowledge": "Aydındır", "acknowledge": "Təsdiq et",
"action": "Əməliyyat", "action": "Əməliyyat",
"action_common_update": "Yenilə", "action_common_update": "Yenilə",
"actions": "Əməliyyatlar", "actions": "Əməliyyatlar",
@ -16,8 +16,8 @@
"add_a_title": "Başlıq əlavə et", "add_a_title": "Başlıq əlavə et",
"add_birthday": "Doğum günü əlavə et", "add_birthday": "Doğum günü əlavə et",
"add_endpoint": "Son nöqtə əlavə et", "add_endpoint": "Son nöqtə əlavə et",
"add_exclusion_pattern": "İstisna nümunəsi əlavə et", "add_exclusion_pattern": "Çıxarma nümunəsi əlavə et",
"add_import_path": "Import yolunu əlavə et", "add_import_path": "İdxal yolu əlavə et",
"add_location": "Məkan əlavə et", "add_location": "Məkan əlavə et",
"add_more_users": "Daha çox istifadəçi əlavə et", "add_more_users": "Daha çox istifadəçi əlavə et",
"add_partner": "Partnyor əlavə et", "add_partner": "Partnyor əlavə et",
@ -25,20 +25,21 @@
"add_photos": "Şəkillər əlavə et", "add_photos": "Şəkillər əlavə et",
"add_tag": "Etiket əlavə et", "add_tag": "Etiket əlavə et",
"add_to": "Bura əlavə et…", "add_to": "Bura əlavə et…",
"add_to_album": "Albom əlavə et", "add_to_album": "Alboma əlavə et",
"add_to_album_bottom_sheet_added": "{album} albomuna əlavə edildi", "add_to_album_bottom_sheet_added": "{album} albomuna əlavə edildi",
"add_to_album_bottom_sheet_already_exists": "Artıq {album} albomunda var", "add_to_album_bottom_sheet_already_exists": "Artıq {album} albomunda var",
"add_to_album_bottom_sheet_some_local_assets": "Bəzi lokal resurslar alboma əlavə edilə bilmədi",
"add_to_album_toggle": "{album} üçün seçimi dəyişin", "add_to_album_toggle": "{album} üçün seçimi dəyişin",
"add_to_albums": "Albomlara əlavə et", "add_to_albums": "Albomlara əlavə et",
"add_to_albums_count": "Albomlara əlavə et ({count})", "add_to_albums_count": "({count}) albomlarına əlavə et",
"add_to_shared_album": "Paylaşılan alboma əlavə et", "add_to_shared_album": "Paylaşılan alboma əlavə et",
"add_url": "URL əlavə et", "add_url": "URL əlavə et",
"added_to_archive": "Arxivə əlavə edildi", "added_to_archive": "Arxivə əlavə edildi",
"added_to_favorites": "Sevimlilələrə əlavə edildi", "added_to_favorites": "Sevimlilələrə əlavə edildi",
"added_to_favorites_count": "{count, number} şəkil sevimlilələrə əlavə edildi", "added_to_favorites_count": "{count, number} şəkil sevimlilələrə əlavə edildi",
"admin": { "admin": {
"add_exclusion_pattern_description": "İstisna şablonlarını əlavə edin. *, ** və ? ilə Globbing dəstəklənir. Məs.: \"Raw\" adlanan hər hansısa bir qovluqda bütün faylları saymamaq üçün \"**/Raw/**\"-dan istifadə edin. \".tif\" ilə bitən bütün faylları saymamaq üçün \"**/*.tif\"-dən istifadə edin. Faylı mütləq yoldan istifadə etməklə saymamaq istəyirsinizsə \"/path/to/ignore/**\"-dan istifadə edin.", "add_exclusion_pattern_description": "Çıxarma nümunələri əlavə et. *, ** və ? istifadə edilərək globbing dəstəklənir. Hər hansı bir \"Raw\" adlı qovluqdakı bütün faylları görməməzlikdən gəlmək üçün **/Raw/** istifadə et. “.tif” ilə bitən bütün faylları görməməzlikdən gəlmək üçün **/*.tif istifadə et. Tam yolu görməməzlikdən gəlmək üçün /path/to/ignore/** istifadə et.",
"admin_user": "Admin İstifadəçi", "admin_user": "İdarəçi İstifadəçi",
"asset_offline_description": "Bu xarici kitabxana varlığı diskdə artıq tapılmadı və zibil qutusuna köçürüldü. Əgər fayl kitabxana içərisində köçürülübsə, zaman şkalanızı yeni uyğun gələn varlıq üçün yoxlayın. Varlığı yenidən qaytarmaq üçün aşağıda verilmiş fayl yolunun Immich tərəfindən əlçatan olduğundan əmin olduqdan sonra kitabxananı skan edin.", "asset_offline_description": "Bu xarici kitabxana varlığı diskdə artıq tapılmadı və zibil qutusuna köçürüldü. Əgər fayl kitabxana içərisində köçürülübsə, zaman şkalanızı yeni uyğun gələn varlıq üçün yoxlayın. Varlığı yenidən qaytarmaq üçün aşağıda verilmiş fayl yolunun Immich tərəfindən əlçatan olduğundan əmin olduqdan sonra kitabxananı skan edin.",
"authentication_settings": "Səlahiyyətləndirmə parametrləri", "authentication_settings": "Səlahiyyətləndirmə parametrləri",
"authentication_settings_description": "Şifrə, OAuth və digər səlahiyyətləndirmə parametrləri", "authentication_settings_description": "Şifrə, OAuth və digər səlahiyyətləndirmə parametrləri",
@ -76,7 +77,7 @@
"image_thumbnail_title": "Önizləmə parametrləri", "image_thumbnail_title": "Önizləmə parametrləri",
"job_concurrency": "{job}paralellik", "job_concurrency": "{job}paralellik",
"job_created": "Tapşırıq yaradıldı", "job_created": "Tapşırıq yaradıldı",
"job_not_concurrency_safe": "Bu tapşırıq parallel fəaliyyət üçün uyğun deyil", "job_not_concurrency_safe": "Bu iş eyni vaxtda icra üçün təhlükəsiz deyil.",
"job_settings": "Tapşırıq parametrləri", "job_settings": "Tapşırıq parametrləri",
"job_settings_description": "Parallel şəkildə fəaliyyət göstərən tapşırıqları idarə et", "job_settings_description": "Parallel şəkildə fəaliyyət göstərən tapşırıqları idarə et",
"job_status": "Tapşırıq statusu", "job_status": "Tapşırıq statusu",

View file

@ -28,6 +28,7 @@
"add_to_album": "Добави към албум", "add_to_album": "Добави към албум",
"add_to_album_bottom_sheet_added": "Добавено в {album}", "add_to_album_bottom_sheet_added": "Добавено в {album}",
"add_to_album_bottom_sheet_already_exists": "Вече е в {album}", "add_to_album_bottom_sheet_already_exists": "Вече е в {album}",
"add_to_album_bottom_sheet_some_local_assets": "Някои локални файлове не успяха да се добавят към албума",
"add_to_album_toggle": "Сменете избора за {album}", "add_to_album_toggle": "Сменете избора за {album}",
"add_to_albums": "Добавяне в албуми", "add_to_albums": "Добавяне в албуми",
"add_to_albums_count": "Добавяне в албуми ({count})", "add_to_albums_count": "Добавяне в албуми ({count})",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "Включи архивиране в активен режим", "backup_controller_page_turn_on": "Включи архивиране в активен режим",
"backup_controller_page_uploading_file_info": "Инфо за архивирания файл", "backup_controller_page_uploading_file_info": "Инфо за архивирания файл",
"backup_err_only_album": "Не може да се премахне единствения албум", "backup_err_only_album": "Не може да се премахне единствения албум",
"backup_error_sync_failed": "Синхронизацията е неуспешна. Резервното копие не може да се обработи.",
"backup_info_card_assets": "обекта", "backup_info_card_assets": "обекта",
"backup_manual_cancelled": "Отменено", "backup_manual_cancelled": "Отменено",
"backup_manual_in_progress": "Върви архивиране. Опитай след малко", "backup_manual_in_progress": "Върви архивиране. Опитай след малко",
@ -1235,7 +1237,7 @@
"local": "Локално", "local": "Локално",
"local_asset_cast_failed": "Не може да се предава обект, който още не е качен на сървъра", "local_asset_cast_failed": "Не може да се предава обект, който още не е качен на сървъра",
"local_assets": "Локални обекти", "local_assets": "Локални обекти",
"local_media_summary": "Обобщение на локалните медийни файлове", "local_media_summary": "Обобщение на локалните файлове",
"local_network": "Локална мрежа", "local_network": "Локална мрежа",
"local_network_sheet_info": "Приложението ще се свърже със сървъра на този URL, когато устройството е свързано към зададената Wi-Fi мрежа", "local_network_sheet_info": "Приложението ще се свърже със сървъра на този URL, когато устройството е свързано към зададената Wi-Fi мрежа",
"location_permission": "Разрешение за местоположение", "location_permission": "Разрешение за местоположение",
@ -1344,7 +1346,7 @@
"missing": "Липсващи", "missing": "Липсващи",
"model": "Модел", "model": "Модел",
"month": "Месец", "month": "Месец",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM г",
"more": "Още", "more": "Още",
"move": "Премести", "move": "Премести",
"move_off_locked_folder": "Извади от заключената папка", "move_off_locked_folder": "Извади от заключената папка",

View file

@ -34,7 +34,7 @@
"add_to_albums_count": "Afegir als àlbums ({count})", "add_to_albums_count": "Afegir als àlbums ({count})",
"add_to_shared_album": "Afegir a un àlbum compartit", "add_to_shared_album": "Afegir a un àlbum compartit",
"add_url": "Afegir URL", "add_url": "Afegir URL",
"added_to_archive": "Afegit als arxivats", "added_to_archive": "Afegir a l'arxiu",
"added_to_favorites": "Afegit als preferits", "added_to_favorites": "Afegit als preferits",
"added_to_favorites_count": "{count, number} afegits als preferits", "added_to_favorites_count": "{count, number} afegits als preferits",
"admin": { "admin": {
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Activa la còpia de seguretat", "backup_controller_page_turn_on": "Activa la còpia de seguretat",
"backup_controller_page_uploading_file_info": "S'està pujant la informació del fitxer", "backup_controller_page_uploading_file_info": "S'està pujant la informació del fitxer",
"backup_err_only_album": "No es pot eliminar l'únic àlbum", "backup_err_only_album": "No es pot eliminar l'únic àlbum",
"backup_error_sync_failed": "Sincronització malament, No es pot fer backup.",
"backup_info_card_assets": "elements", "backup_info_card_assets": "elements",
"backup_manual_cancelled": "Cancel·lat", "backup_manual_cancelled": "Cancel·lat",
"backup_manual_in_progress": "La pujada ja està en curs. Torneu-ho a provar més tard", "backup_manual_in_progress": "La pujada ja està en curs. Torneu-ho a provar més tard",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Povolit zálohování na popředí", "backup_controller_page_turn_on": "Povolit zálohování na popředí",
"backup_controller_page_uploading_file_info": "Informace o nahraném souboru", "backup_controller_page_uploading_file_info": "Informace o nahraném souboru",
"backup_err_only_album": "Nelze odstranit jediné vybrané album", "backup_err_only_album": "Nelze odstranit jediné vybrané album",
"backup_error_sync_failed": "Synchronizace selhala. Nelze zpracovat zálohu.",
"backup_info_card_assets": "položek", "backup_info_card_assets": "položek",
"backup_manual_cancelled": "Zrušeno", "backup_manual_cancelled": "Zrušeno",
"backup_manual_in_progress": "Nahrávání již probíhá. Zkuste to znovu později", "backup_manual_in_progress": "Nahrávání již probíhá. Zkuste to znovu později",

View file

@ -28,6 +28,7 @@
"add_to_album": "Tilføj til album", "add_to_album": "Tilføj til album",
"add_to_album_bottom_sheet_added": "Tilføjet til {album}", "add_to_album_bottom_sheet_added": "Tilføjet til {album}",
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
"add_to_album_bottom_sheet_some_local_assets": "Nogle lokale elementer kunne ikke føjes til albummet",
"add_to_album_toggle": "Skift selektion for {album}", "add_to_album_toggle": "Skift selektion for {album}",
"add_to_albums": "Tilføj til albummer", "add_to_albums": "Tilføj til albummer",
"add_to_albums_count": "Tilføj til albummer({count})", "add_to_albums_count": "Tilføj til albummer({count})",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "Slå sikkerhedskopiering til", "backup_controller_page_turn_on": "Slå sikkerhedskopiering til",
"backup_controller_page_uploading_file_info": "Uploader filinformation", "backup_controller_page_uploading_file_info": "Uploader filinformation",
"backup_err_only_album": "Kan ikke slette det eneste album", "backup_err_only_album": "Kan ikke slette det eneste album",
"backup_error_sync_failed": "Synkroniseringen mislykkedes. Sikkerhedskopieringen kunne ikke behandles.",
"backup_info_card_assets": "objekter", "backup_info_card_assets": "objekter",
"backup_manual_cancelled": "Annulleret", "backup_manual_cancelled": "Annulleret",
"backup_manual_in_progress": "Upload er allerede undervejs. Prøv igen efter noget tid", "backup_manual_in_progress": "Upload er allerede undervejs. Prøv igen efter noget tid",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Sicherung im Vordergrund einschalten", "backup_controller_page_turn_on": "Sicherung im Vordergrund einschalten",
"backup_controller_page_uploading_file_info": "Informationen", "backup_controller_page_uploading_file_info": "Informationen",
"backup_err_only_album": "Das einzige Album kann nicht entfernt werden", "backup_err_only_album": "Das einzige Album kann nicht entfernt werden",
"backup_error_sync_failed": "Synchronisierung fehlgeschlagen. Backup kann nicht verarbeitet werden.",
"backup_info_card_assets": "Elemente", "backup_info_card_assets": "Elemente",
"backup_manual_cancelled": "Abgebrochen", "backup_manual_cancelled": "Abgebrochen",
"backup_manual_in_progress": "Sicherung läuft bereits. Bitte versuche es später erneut", "backup_manual_in_progress": "Sicherung läuft bereits. Bitte versuche es später erneut",

View file

@ -28,6 +28,7 @@
"add_to_album": "Προσθήκη σε άλμπουμ", "add_to_album": "Προσθήκη σε άλμπουμ",
"add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}", "add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}",
"add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}", "add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}",
"add_to_album_bottom_sheet_some_local_assets": "Ορισμένοι τοπικά στοιχεία δεν μπόρεσαν να προστεθούν στο άλμπουμ",
"add_to_album_toggle": "Εναλλαγή επιλογής για το {album}", "add_to_album_toggle": "Εναλλαγή επιλογής για το {album}",
"add_to_albums": "Προσθήκη στα άλμπουμ", "add_to_albums": "Προσθήκη στα άλμπουμ",
"add_to_albums_count": "Προσθήκη στα άλμπουμ ({count})", "add_to_albums_count": "Προσθήκη στα άλμπουμ ({count})",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "Ενεργοποίηση δημιουργίας αντιγράφου ασφαλείας στο προσκήνιο", "backup_controller_page_turn_on": "Ενεργοποίηση δημιουργίας αντιγράφου ασφαλείας στο προσκήνιο",
"backup_controller_page_uploading_file_info": "Μεταφόρτωση πληροφοριών αρχείου", "backup_controller_page_uploading_file_info": "Μεταφόρτωση πληροφοριών αρχείου",
"backup_err_only_album": "Δεν είναι δυνατή η αφαίρεση του μοναδικού άλμπουμ", "backup_err_only_album": "Δεν είναι δυνατή η αφαίρεση του μοναδικού άλμπουμ",
"backup_error_sync_failed": "Ο συγχρονισμός απέτυχε. Δεν είναι δυνατή η επεξεργασία του αντιγράφου ασφαλείας.",
"backup_info_card_assets": "στοιχεία", "backup_info_card_assets": "στοιχεία",
"backup_manual_cancelled": "Ακυρώθηκε", "backup_manual_cancelled": "Ακυρώθηκε",
"backup_manual_in_progress": "Μεταφόρτωση σε εξέλιξη. Δοκιμάστε αργότερα", "backup_manual_in_progress": "Μεταφόρτωση σε εξέλιξη. Δοκιμάστε αργότερα",

View file

@ -33,6 +33,7 @@
"add_to_albums": "Add to albums", "add_to_albums": "Add to albums",
"add_to_albums_count": "Add to albums ({count})", "add_to_albums_count": "Add to albums ({count})",
"add_to_shared_album": "Add to shared album", "add_to_shared_album": "Add to shared album",
"add_upload_to_stack": "Add upload to stack",
"add_url": "Add URL", "add_url": "Add URL",
"added_to_archive": "Added to archive", "added_to_archive": "Added to archive",
"added_to_favorites": "Added to favorites", "added_to_favorites": "Added to favorites",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Activar la copia de seguridad", "backup_controller_page_turn_on": "Activar la copia de seguridad",
"backup_controller_page_uploading_file_info": "Subiendo información del archivo", "backup_controller_page_uploading_file_info": "Subiendo información del archivo",
"backup_err_only_album": "No se puede eliminar el único álbum", "backup_err_only_album": "No se puede eliminar el único álbum",
"backup_error_sync_failed": "Sincronización falló. No es posible procesar la copia de seguridad.",
"backup_info_card_assets": "elementos", "backup_info_card_assets": "elementos",
"backup_manual_cancelled": "Cancelado", "backup_manual_cancelled": "Cancelado",
"backup_manual_in_progress": "Subida ya en progreso. Vuelve a intentarlo más tarde", "backup_manual_in_progress": "Subida ya en progreso. Vuelve a intentarlo más tarde",
@ -1088,7 +1089,7 @@
"folders": "Carpetas", "folders": "Carpetas",
"folders_feature_description": "Explorar la vista de carpetas para las fotos y los videos en el sistema de archivos", "folders_feature_description": "Explorar la vista de carpetas para las fotos y los videos en el sistema de archivos",
"forgot_pin_code_question": "¿Olvidaste tu código PIN?", "forgot_pin_code_question": "¿Olvidaste tu código PIN?",
"forward": "Reenviar", "forward": "Avanzar",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Esta funcionalidad carga recursos externos desde Google para poder funcionar.", "gcast_enabled_description": "Esta funcionalidad carga recursos externos desde Google para poder funcionar.",
"general": "General", "general": "General",
@ -1905,7 +1906,7 @@
"skip_to_content": "Saltar al contenido", "skip_to_content": "Saltar al contenido",
"skip_to_folders": "Ir a las carpetas", "skip_to_folders": "Ir a las carpetas",
"skip_to_tags": "Ir a las etiquetas", "skip_to_tags": "Ir a las etiquetas",
"slideshow": "Diapositivas", "slideshow": "Pase de diapositivas",
"slideshow_settings": "Ajustes de diapositivas", "slideshow_settings": "Ajustes de diapositivas",
"sort_albums_by": "Ordenar álbumes por…", "sort_albums_by": "Ordenar álbumes por…",
"sort_created": "Fecha de creación", "sort_created": "Fecha de creación",

View file

@ -599,7 +599,7 @@
"backup_controller_page_turn_on": "Activer la sauvegarde au premier plan", "backup_controller_page_turn_on": "Activer la sauvegarde au premier plan",
"backup_controller_page_uploading_file_info": "Envoi des informations du fichier", "backup_controller_page_uploading_file_info": "Envoi des informations du fichier",
"backup_err_only_album": "Impossible de retirer le seul album", "backup_err_only_album": "Impossible de retirer le seul album",
"backup_error_sync_failed": "Échec de la synchronisation. Impossible de démarrer la sauvegarde.", "backup_error_sync_failed": "Échec de la synchronisation. Impossible d'exécuter la sauvegarde.",
"backup_info_card_assets": "éléments", "backup_info_card_assets": "éléments",
"backup_manual_cancelled": "Annulé", "backup_manual_cancelled": "Annulé",
"backup_manual_in_progress": "Envoi déjà en cours. Réessayez plus tard", "backup_manual_in_progress": "Envoi déjà en cours. Réessayez plus tard",

View file

@ -28,9 +28,10 @@
"add_to_album": "הוספה לאלבום", "add_to_album": "הוספה לאלבום",
"add_to_album_bottom_sheet_added": "נוסף ל {album}", "add_to_album_bottom_sheet_added": "נוסף ל {album}",
"add_to_album_bottom_sheet_already_exists": "כבר ב {album}", "add_to_album_bottom_sheet_already_exists": "כבר ב {album}",
"add_to_album_bottom_sheet_some_local_assets": "לא ניתן היה להוסיף חלק מהקבצים המקומיים לאלבום",
"add_to_album_toggle": "החלפת מצב בחירה עבור {album}", "add_to_album_toggle": "החלפת מצב בחירה עבור {album}",
"add_to_albums": "הוספה לאלבומים", "add_to_albums": "הוספה לאלבומים",
"add_to_albums_count": "Add to albums ({count})", "add_to_albums_count": "הוסף ({count}) לאלבום",
"add_to_shared_album": "הוספה לאלבום משותף", "add_to_shared_album": "הוספה לאלבום משותף",
"add_url": "הוספת קישור", "add_url": "הוספת קישור",
"added_to_archive": "נוסף לארכיון", "added_to_archive": "נוסף לארכיון",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "הפעל גיבוי חזית", "backup_controller_page_turn_on": "הפעל גיבוי חזית",
"backup_controller_page_uploading_file_info": "מעלה מידע על הקובץ", "backup_controller_page_uploading_file_info": "מעלה מידע על הקובץ",
"backup_err_only_album": "לא ניתן להסיר את האלבום היחיד", "backup_err_only_album": "לא ניתן להסיר את האלבום היחיד",
"backup_error_sync_failed": "הסינכרון נכשל. לא ניתן להשלים את הגיבוי.",
"backup_info_card_assets": "תמונות", "backup_info_card_assets": "תמונות",
"backup_manual_cancelled": "בוטל", "backup_manual_cancelled": "בוטל",
"backup_manual_in_progress": "העלאה כבר בתהליך. נסה אחרי זמן מה", "backup_manual_in_progress": "העלאה כבר בתהליך. נסה אחרי זמן מה",
@ -753,6 +755,7 @@
"create_user": "צור משתמש", "create_user": "צור משתמש",
"created": "נוצר", "created": "נוצר",
"created_at": "נוצר", "created_at": "נוצר",
"creating_linked_albums": "יוצר אלבומים מקושרים...",
"crop": "חתוך", "crop": "חתוך",
"curated_object_page_title": "דברים", "curated_object_page_title": "דברים",
"current_device": "מכשיר נוכחי", "current_device": "מכשיר נוכחי",
@ -1500,7 +1503,7 @@
"permission_onboarding_permission_limited": "הרשאה מוגבלת. כדי לתת ליישום לגבות ולנהל את כל אוסף הגלריה שלך, הענק הרשאה לתמונות וסרטונים בהגדרות.", "permission_onboarding_permission_limited": "הרשאה מוגבלת. כדי לתת ליישום לגבות ולנהל את כל אוסף הגלריה שלך, הענק הרשאה לתמונות וסרטונים בהגדרות.",
"permission_onboarding_request": "היישום דורש הרשאה כדי לראות את התמונות והסרטונים שלך.", "permission_onboarding_request": "היישום דורש הרשאה כדי לראות את התמונות והסרטונים שלך.",
"person": "אדם", "person": "אדם",
"person_age_months": "בגיל {months, plural, one {חודש #} other {# חודשים}}", "person_age_months": "{months, plural, one {חודש #} other {# חודשים}}",
"person_age_year_months": "בגיל שנה ו{months, plural, one {חודש #} other {# חודשים}}", "person_age_year_months": "בגיל שנה ו{months, plural, one {חודש #} other {# חודשים}}",
"person_age_years": "בגיל {years, plural, other {# שנים}}", "person_age_years": "בגיל {years, plural, other {# שנים}}",
"person_birthdate": "נולד בתאריך {date}", "person_birthdate": "נולד בתאריך {date}",

View file

@ -28,6 +28,7 @@
"add_to_album": "Felvétel albumba", "add_to_album": "Felvétel albumba",
"add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz", "add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz",
"add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban", "add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban",
"add_to_album_bottom_sheet_some_local_assets": "Néhány helyi elem nem adható hozzá az albumhoz",
"add_to_album_toggle": "{album} kijelölésének váltása", "add_to_album_toggle": "{album} kijelölésének váltása",
"add_to_albums": "Hozzáadás albumokhoz", "add_to_albums": "Hozzáadás albumokhoz",
"add_to_albums_count": "Hozzáadás albumokhoz ({count})", "add_to_albums_count": "Hozzáadás albumokhoz ({count})",
@ -175,7 +176,7 @@
"map_settings_description": "Térkép beállítások kezelése", "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", "map_style_description": "Egy style.json térképtémára mutató URL cím",
"memory_cleanup_job": "Memória takarítás", "memory_cleanup_job": "Memória takarítás",
"memory_generate_job": "Emlék generálása", "memory_generate_job": "Emlékek generálása",
"metadata_extraction_job": "Metaadatok kinyerése", "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_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", "metadata_faces_import_setting": "Arc importálás engedélyezése",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "Előtérben mentés bekapcsolása", "backup_controller_page_turn_on": "Előtérben mentés bekapcsolása",
"backup_controller_page_uploading_file_info": "Fájl információk feltöltése", "backup_controller_page_uploading_file_info": "Fájl információk feltöltése",
"backup_err_only_album": "Az utolsó albumot nem tudod törölni", "backup_err_only_album": "Az utolsó albumot nem tudod törölni",
"backup_error_sync_failed": "A szinkronizálás nem sikerült. A biztonsági mentés nem elkészíthető.",
"backup_info_card_assets": "elemek", "backup_info_card_assets": "elemek",
"backup_manual_cancelled": "Megszakítva", "backup_manual_cancelled": "Megszakítva",
"backup_manual_in_progress": "Feltöltés már folyamatban. Próbáld meg később", "backup_manual_in_progress": "Feltöltés már folyamatban. Próbáld meg később",

View file

@ -177,7 +177,7 @@
"map_style_description": "URL per un tema della mappa style.json", "map_style_description": "URL per un tema della mappa style.json",
"memory_cleanup_job": "Pulizia dei vecchi Ricordi", "memory_cleanup_job": "Pulizia dei vecchi Ricordi",
"memory_generate_job": "Generazione dei Ricordi", "memory_generate_job": "Generazione dei Ricordi",
"metadata_extraction_job": "Estrazione Metadata", "metadata_extraction_job": "Estrazione Metadati",
"metadata_extraction_job_description": "Estrai informazioni dai metadati di ciascuna risorsa, come 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": "Abilita l'importazione dei volti",
"metadata_faces_import_setting_description": "Importa i volti dai dati EXIF dell'immagine e dai file sidecar", "metadata_faces_import_setting_description": "Importa i volti dai dati EXIF dell'immagine e dai file sidecar",
@ -308,11 +308,11 @@
"transcoding_acceleration_rkmpp": "RKMPP (Solo per SOC Rockchip)", "transcoding_acceleration_rkmpp": "RKMPP (Solo per SOC Rockchip)",
"transcoding_acceleration_vaapi": "VAAPI", "transcoding_acceleration_vaapi": "VAAPI",
"transcoding_accepted_audio_codecs": "Codifiche audio accettate", "transcoding_accepted_audio_codecs": "Codifiche audio accettate",
"transcoding_accepted_audio_codecs_description": "Seleziona quali codifiche audio non devono essere trascodificate. Solo usato per alcune politiche di trascodifica.", "transcoding_accepted_audio_codecs_description": "Seleziona quali codifiche audio non devono essere transcodificate. Solo usato per alcune politiche di transcodifica.",
"transcoding_accepted_containers": "Contenitori accettati", "transcoding_accepted_containers": "Contenitori accettati",
"transcoding_accepted_containers_description": "Seleziona quali formati non hanno bisogno di essere remuxati in MP4. Usato solo per certe politiche di transcodifica.", "transcoding_accepted_containers_description": "Seleziona quali formati non hanno bisogno di essere remuxati in MP4. Usato solo per certe politiche di transcodifica.",
"transcoding_accepted_video_codecs": "Codifiche video accettate", "transcoding_accepted_video_codecs": "Codifiche video accettate",
"transcoding_accepted_video_codecs_description": "Seleziona quali codifiche video non devono essere trascodificate. Usato solo per alcune politiche di trascodifica.", "transcoding_accepted_video_codecs_description": "Seleziona quali codifiche video non devono essere transcodificate. Usato solo per alcune politiche di transcodifica.",
"transcoding_advanced_options_description": "Impostazioni che la maggior parte degli utenti non dovrebbero cambiare", "transcoding_advanced_options_description": "Impostazioni che la maggior parte degli utenti non dovrebbero cambiare",
"transcoding_audio_codec": "Codifica Audio", "transcoding_audio_codec": "Codifica Audio",
"transcoding_audio_codec_description": "Opus è l'opzione con la qualità più alta, ma è meno compatibile con dispositivi o software vecchi.", "transcoding_audio_codec_description": "Opus è l'opzione con la qualità più alta, ma è meno compatibile con dispositivi o software vecchi.",
@ -345,7 +345,7 @@
"transcoding_reference_frames": "Frame di riferimento", "transcoding_reference_frames": "Frame di riferimento",
"transcoding_reference_frames_description": "Il numero di frame da prendere in considerazione nel comprimere un determinato frame. Valori più alti migliorano l'efficienza di compressione, ma rallentano la codifica. 0 imposta questo valore automaticamente.", "transcoding_reference_frames_description": "Il numero di frame da prendere in considerazione nel comprimere un determinato frame. Valori più alti migliorano l'efficienza di compressione, ma rallentano la codifica. 0 imposta questo valore automaticamente.",
"transcoding_required_description": "Solo video che non sono in un formato accettato", "transcoding_required_description": "Solo video che non sono in un formato accettato",
"transcoding_settings": "Impostazioni Trascodifica Video", "transcoding_settings": "Impostazioni Transcodifica Video",
"transcoding_settings_description": "Gestisci quali video transcodificare e come processarli", "transcoding_settings_description": "Gestisci quali video transcodificare e come processarli",
"transcoding_target_resolution": "Risoluzione desiderata", "transcoding_target_resolution": "Risoluzione desiderata",
"transcoding_target_resolution_description": "Risoluzioni più elevate possono preservare più dettagli ma richiedono più tempo per la codifica, producono file di dimensioni maggiori e possono ridurre la reattività dell'applicazione.", "transcoding_target_resolution_description": "Risoluzioni più elevate possono preservare più dettagli ma richiedono più tempo per la codifica, producono file di dimensioni maggiori e possono ridurre la reattività dell'applicazione.",
@ -356,11 +356,11 @@
"transcoding_tone_mapping": "Mappatura della tonalità", "transcoding_tone_mapping": "Mappatura della tonalità",
"transcoding_tone_mapping_description": "Tenta di preservare l'aspetto dei video HDR quando convertiti in SDR. Ciascun algoritmo fa diversi compromessi per colore, dettaglio e luminosità. Hable conserva il dettaglio, Mobius conserva il colore e Reinhard conserva la luminosità.", "transcoding_tone_mapping_description": "Tenta di preservare l'aspetto dei video HDR quando convertiti in SDR. Ciascun algoritmo fa diversi compromessi per colore, dettaglio e luminosità. Hable conserva il dettaglio, Mobius conserva il colore e Reinhard conserva la luminosità.",
"transcoding_transcode_policy": "Politica di transcodifica", "transcoding_transcode_policy": "Politica di transcodifica",
"transcoding_transcode_policy_description": "Politica che determina quando un video deve essere trascodificato. I video HDR verranno sempre trascodificati (eccetto quando la trascodifica è disabilitata).", "transcoding_transcode_policy_description": "Politica che determina quando un video deve essere transcodificato. I video HDR verranno sempre transcodificati (eccetto quando la transcodifica è disabilitata).",
"transcoding_two_pass_encoding": "Codifica a due passaggi", "transcoding_two_pass_encoding": "Codifica a due passaggi",
"transcoding_two_pass_encoding_setting_description": "Trascodifica in due passaggi per produrre video codificati migliori. Quando il bitrate massimo è abilitato (necessario affinché funzioni con H.264 e HEVC), questa modalità utilizza un intervallo di bitrate basato sul bitrate massimo e ignora CRF. Per VP9, CRF può essere utilizzato se il bitrate massimo è disabilitato.", "transcoding_two_pass_encoding_setting_description": "Transcodifica in due passaggi per produrre video codificati migliori. Quando il bitrate massimo è abilitato (necessario affinché funzioni con H.264 e HEVC), questa modalità utilizza un intervallo di bitrate basato sul bitrate massimo e ignora CRF. Per VP9, CRF può essere utilizzato se il bitrate massimo è disabilitato.",
"transcoding_video_codec": "Codec video", "transcoding_video_codec": "Codec video",
"transcoding_video_codec_description": "VP9 ha alta efficienza e compatibilità web, ma richiede più tempo per la trascodifica. HEVC ha prestazioni simili, ma una minore compatibilità web. H.264 è ampiamente compatibile e veloce da transcodificare, ma produce file molto più grandi. AV1 è il codec più efficiente, ma non è supportato sui dispositivi più vecchi.", "transcoding_video_codec_description": "VP9 ha alta efficienza e compatibilità web, ma richiede più tempo per la transcodifica. HEVC ha prestazioni simili, ma una minore compatibilità web. H.264 è ampiamente compatibile e veloce da transcodificare, ma produce file molto più grandi. AV1 è il codec più efficiente, ma non è supportato sui dispositivi più vecchi.",
"trash_enabled_description": "Abilita Funzionalità Cestino", "trash_enabled_description": "Abilita Funzionalità Cestino",
"trash_number_of_days": "Numero di giorni", "trash_number_of_days": "Numero di giorni",
"trash_number_of_days_description": "Numero di giorni per cui mantenere gli asset nel cestino prima di rimuoverli definitivamente", "trash_number_of_days_description": "Numero di giorni per cui mantenere gli asset nel cestino prima di rimuoverli definitivamente",
@ -388,8 +388,8 @@
"version_check_implications": "La funzione di controllo della versione fa uso di una comunicazione periodica con github.com", "version_check_implications": "La funzione di controllo della versione fa uso di una comunicazione periodica con github.com",
"version_check_settings": "Controllo Versione", "version_check_settings": "Controllo Versione",
"version_check_settings_description": "Abilita/disabilita la notifica per nuove versioni", "version_check_settings_description": "Abilita/disabilita la notifica per nuove versioni",
"video_conversion_job": "Trascodifica video", "video_conversion_job": "Transcodifica video",
"video_conversion_job_description": "Trascodifica video per maggiore compatibilità con browser e dispositivi" "video_conversion_job_description": "Transcodifica video per maggiore compatibilità con browser e dispositivi"
}, },
"admin_email": "Email Amministratore", "admin_email": "Email Amministratore",
"admin_password": "Password Amministratore", "admin_password": "Password Amministratore",
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Attiva backup", "backup_controller_page_turn_on": "Attiva backup",
"backup_controller_page_uploading_file_info": "Caricamento informazioni file", "backup_controller_page_uploading_file_info": "Caricamento informazioni file",
"backup_err_only_album": "Non è possibile rimuovere l'unico album", "backup_err_only_album": "Non è possibile rimuovere l'unico album",
"backup_error_sync_failed": "Sincronizzazione non riuscita. Impossibile elaborare il backup.",
"backup_info_card_assets": "risorse", "backup_info_card_assets": "risorse",
"backup_manual_cancelled": "Annullato", "backup_manual_cancelled": "Annullato",
"backup_manual_in_progress": "Caricamento già in corso. Riprova più tardi", "backup_manual_in_progress": "Caricamento già in corso. Riprova più tardi",

View file

@ -8,11 +8,13 @@
"actions": "ಕ್ರಿಯೆಗಳು", "actions": "ಕ್ರಿಯೆಗಳು",
"active": "ಸಕ್ರಿಯ", "active": "ಸಕ್ರಿಯ",
"activity": "ಚಟುವಟಿಕೆ", "activity": "ಚಟುವಟಿಕೆ",
"activity_changed": "ಚಟುವಟಿಕೆ {enabled, select, true{ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ} other {ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ}}",
"add": "ಸೇರಿಸಿ", "add": "ಸೇರಿಸಿ",
"add_a_description": "ವಿವರಣೆಯನ್ನು ಸೇರಿಸಿ", "add_a_description": "ವಿವರಣೆಯನ್ನು ಸೇರಿಸಿ",
"add_a_location": "ಸ್ಥಳವನ್ನು ಸೇರಿಸಿ", "add_a_location": "ಸ್ಥಳವನ್ನು ಸೇರಿಸಿ",
"add_a_name": "ಹೆಸರನ್ನು ಸೇರಿಸಿ", "add_a_name": "ಹೆಸರನ್ನು ಸೇರಿಸಿ",
"add_a_title": "ಶೀರ್ಷಿಕೆಯನ್ನು ಸೇರಿಸಿ", "add_a_title": "ಶೀರ್ಷಿಕೆಯನ್ನು ಸೇರಿಸಿ",
"add_birthday": "ಜನ್ಮದಿನ ಸೇರಿಸಿ",
"add_endpoint": "ಎಂಡ್‌ಪಾಯಿಂಟ್ ಸೇರಿಸಿ", "add_endpoint": "ಎಂಡ್‌ಪಾಯಿಂಟ್ ಸೇರಿಸಿ",
"add_exclusion_pattern": "ಹೊರಗಿಡುವಿಕೆ ಮಾದರಿಯನ್ನು ಸೇರಿಸಿ", "add_exclusion_pattern": "ಹೊರಗಿಡುವಿಕೆ ಮಾದರಿಯನ್ನು ಸೇರಿಸಿ",
"add_import_path": "ಆಮದು ಮಾರ್ಗವನ್ನು ಸೇರಿಸಿ", "add_import_path": "ಆಮದು ಮಾರ್ಗವನ್ನು ಸೇರಿಸಿ",
@ -22,5 +24,6 @@
"add_path": "ಹಾದಿಯನ್ನು ಸೇರಿಸಿ", "add_path": "ಹಾದಿಯನ್ನು ಸೇರಿಸಿ",
"add_photos": "ಫೋಟೋಗಳನ್ನು ಸೇರಿಸಿ", "add_photos": "ಫೋಟೋಗಳನ್ನು ಸೇರಿಸಿ",
"add_to": "ಸೇರಿಸಿ…", "add_to": "ಸೇರಿಸಿ…",
"add_to_album": "ಆಲ್ಬಮ್‌ಗೆ ಸೇರಿಸಿ" "add_to_album": "ಆಲ್ಬಮ್‌ಗೆ ಸೇರಿಸಿ",
"add_to_album_bottom_sheet_added": "{album}ಗೆ ಸೇರಿಸಿದೆ"
} }

View file

@ -8,7 +8,7 @@
"actions": "작업", "actions": "작업",
"active": "활성", "active": "활성",
"activity": "활동", "activity": "활동",
"activity_changed": "활동이 {enabled, select, true {활성화} other {비활성화}}되었습니다.", "activity_changed": "활동이 {enabled, select, true {활성화} other {비활성화}}되었습니다",
"add": "추가", "add": "추가",
"add_a_description": "설명 추가", "add_a_description": "설명 추가",
"add_a_location": "위치 추가", "add_a_location": "위치 추가",
@ -34,15 +34,15 @@
"add_to_albums_count": "여러 앨범에 추가 ({count})", "add_to_albums_count": "여러 앨범에 추가 ({count})",
"add_to_shared_album": "공유 앨범에 추가", "add_to_shared_album": "공유 앨범에 추가",
"add_url": "URL 추가", "add_url": "URL 추가",
"added_to_archive": "보관함으로 이동되었습니다.", "added_to_archive": "보관함으로 이동되었습니다",
"added_to_favorites": "즐겨찾기에 추가되었습니다.", "added_to_favorites": "즐겨찾기에 추가되었습니다",
"added_to_favorites_count": "즐겨찾기에 항목 {count, number}개 추가됨", "added_to_favorites_count": "즐겨찾기에 항목 {count, number}개 추가됨",
"admin": { "admin": {
"add_exclusion_pattern_description": "*, **, ? 등의 glob 패턴을 사용할 수 있습니다. 예를 들어 \"Raw\" 폴더 내 모든 파일을 제외하려면 \"**/Raw/**\"를, .tif 파일을 제외하려면 \"**/*.tif\", 특정한 절대 경로를 제외하려면 \"/path/to/ignore/**\" 처럼 사용합니다.", "add_exclusion_pattern_description": "*, **, ? 등의 glob 패턴을 사용할 수 있습니다. 예를 들어 \"Raw\" 폴더 내 모든 파일을 제외하려면 \"**/Raw/**\"를, .tif 파일을 제외하려면 \"**/*.tif\", 특정한 절대 경로를 제외하려면 \"/path/to/ignore/**\" 처럼 사용합니다.",
"admin_user": "관리자", "admin_user": "관리자",
"asset_offline_description": "이 항목은 외부 라이브러리에 등록되었으나 디스크에서 찾을 수 없어 휴지통으로 이동했습니다. 파일이 라이브러리 경로 내에서 이동된 경우 타임라인에서 새로 인식된 항목이 있는지 확인해보세요. 이 항목을 복원하려면 아래 경로에 Immich가 접근할 수 있는지 확인하고 라이브러리를 다시 스캔하세요.", "asset_offline_description": "이 항목은 외부 라이브러리에 등록되었으나 디스크에서 찾을 수 없어 휴지통으로 이동했습니다. 파일이 라이브러리 경로 내에서 이동된 경우 타임라인에서 새로 인식된 항목이 있는지 확인해보세요. 이 항목을 복원하려면 아래 경로에 Immich가 접근할 수 있는지 확인하고 라이브러리를 다시 스캔하세요.",
"authentication_settings": "인증 설정", "authentication_settings": "인증 설정",
"authentication_settings_description": "비밀번호, OAuth 및 기타 인증 설정을 관리합니다.", "authentication_settings_description": "비밀번호, OAuth 및 기타 인증 설정을 관리합니다",
"authentication_settings_disable_all": "모든 로그인 수단을 비활성화하시겠습니까? 더이상 로그인할 수 없습니다.", "authentication_settings_disable_all": "모든 로그인 수단을 비활성화하시겠습니까? 더이상 로그인할 수 없습니다.",
"authentication_settings_reenable": "다시 활성화하려면 <link>서버 명령어</link>를 사용하세요.", "authentication_settings_reenable": "다시 활성화하려면 <link>서버 명령어</link>를 사용하세요.",
"background_task_job": "백그라운드 작업", "background_task_job": "백그라운드 작업",
@ -50,7 +50,7 @@
"backup_database_enable_description": "데이터베이스 덤프 활성화", "backup_database_enable_description": "데이터베이스 덤프 활성화",
"backup_keep_last_amount": "보관할 이전 덤프 수", "backup_keep_last_amount": "보관할 이전 덤프 수",
"backup_onboarding_1_description": "개는 클라우드나 다른 물리적 위치에 보관합니다.", "backup_onboarding_1_description": "개는 클라우드나 다른 물리적 위치에 보관합니다.",
"backup_onboarding_2_description": "개는 서로 다른 로컬 장치에 보관하고,", "backup_onboarding_2_description": "다른 기기의 로컬 사본. 메인 파일과 로컬 백업을 포함합니다.",
"backup_onboarding_3_description": "개의 데이터 사본을 만듭니다.", "backup_onboarding_3_description": "개의 데이터 사본을 만듭니다.",
"backup_onboarding_description": "소중한 데이터를 안전하게 보호하기 위해 <backblaze-link>3-2-1 백업 전략</backblaze-link> 사용을 권장합니다. Immich를 백업할 때 업로드한 사진 및 동영상뿐 아니라 데이터베이스도 함께 보관해야 한다는 점을 잊지 마세요.", "backup_onboarding_description": "소중한 데이터를 안전하게 보호하기 위해 <backblaze-link>3-2-1 백업 전략</backblaze-link> 사용을 권장합니다. Immich를 백업할 때 업로드한 사진 및 동영상뿐 아니라 데이터베이스도 함께 보관해야 한다는 점을 잊지 마세요.",
"backup_onboarding_footer": "Immich 백업에 대한 자세한 내용은 <link>공식 문서</link>를 참조하세요.", "backup_onboarding_footer": "Immich 백업에 대한 자세한 내용은 <link>공식 문서</link>를 참조하세요.",
@ -59,10 +59,10 @@
"backup_settings": "데이터베이스 덤프 설정", "backup_settings": "데이터베이스 덤프 설정",
"backup_settings_description": "데이터베이스 덤프 주기와 보관 기간을 설정합니다.", "backup_settings_description": "데이터베이스 덤프 주기와 보관 기간을 설정합니다.",
"cleared_jobs": "작업 중단: {job}", "cleared_jobs": "작업 중단: {job}",
"config_set_by_file": "설정이 구성 파일을 통해 관리되고 있습니다.", "config_set_by_file": "설정이 구성 파일을 통해 관리되고 있습니다",
"confirm_delete_library": "{library} 라이브러리를 삭제하시겠습니까?", "confirm_delete_library": "{library} 라이브러리를 삭제하시겠습니까?",
"confirm_delete_library_assets": "이 라이브러리를 삭제하시겠습니까? Immich에서 {count, plural, one {항목 #개가} other {항목 #개가}} 삭제되며 되돌릴 수 없습니다. 원본 파일은 디스크에 남아 있습니다.", "confirm_delete_library_assets": "이 라이브러리를 삭제하시겠습니까? Immich에서 {count, plural, one {항목 #개가} other {항목 #개가}} 삭제되며 되돌릴 수 없습니다. 원본 파일은 디스크에 남아 있습니다.",
"confirm_email_below": "계속하려면 아래에 \"{email}\"을(를) 입력하세요.", "confirm_email_below": "계속하려면 아래에 \"{email}\"을(를) 입력하세요",
"confirm_reprocess_all_faces": "모든 얼굴을 다시 처리하시겠습니까? 이름이 지정된 인물도 초기화됩니다.", "confirm_reprocess_all_faces": "모든 얼굴을 다시 처리하시겠습니까? 이름이 지정된 인물도 초기화됩니다.",
"confirm_user_password_reset": "{user}님의 비밀번호를 초기화하시겠습니까?", "confirm_user_password_reset": "{user}님의 비밀번호를 초기화하시겠습니까?",
"confirm_user_pin_code_reset": "{user}님의 PIN 코드를 초기화하시겠습니까?", "confirm_user_pin_code_reset": "{user}님의 PIN 코드를 초기화하시겠습니까?",
@ -71,7 +71,7 @@
"cron_expression_description": "Cron 표현식으로 스캔 주기를 설정합니다. 자세한 내용은 다음을 참조하세요, <link>Crontab Guru</link>", "cron_expression_description": "Cron 표현식으로 스캔 주기를 설정합니다. 자세한 내용은 다음을 참조하세요, <link>Crontab Guru</link>",
"cron_expression_presets": "Cron 표현식 프리셋", "cron_expression_presets": "Cron 표현식 프리셋",
"disable_login": "로그인 비활성화", "disable_login": "로그인 비활성화",
"duplicate_detection_job_description": "기계 학습으로 유사한 이미지를 감지합니다. 스마트 검색이 활성화되어 있어야 합니다.", "duplicate_detection_job_description": "기계 학습으로 유사한 이미지를 감지합니다. 스마트 검색이 활성화되어 있어야 합니다",
"exclusion_pattern_description": "라이브러리 스캔에서 제외할 파일이나 폴더 규칙을 설정합니다. 폴더에 원하지 않는 파일(RAW 파일 등)이 함께 존재하는 경우 유용합니다.", "exclusion_pattern_description": "라이브러리 스캔에서 제외할 파일이나 폴더 규칙을 설정합니다. 폴더에 원하지 않는 파일(RAW 파일 등)이 함께 존재하는 경우 유용합니다.",
"external_library_management": "외부 라이브러리 관리", "external_library_management": "외부 라이브러리 관리",
"face_detection": "얼굴 감지", "face_detection": "얼굴 감지",
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "활성화", "backup_controller_page_turn_on": "활성화",
"backup_controller_page_uploading_file_info": "파일 정보 업로드 중", "backup_controller_page_uploading_file_info": "파일 정보 업로드 중",
"backup_err_only_album": "유일한 앨범은 삭제할 수 없습니다.", "backup_err_only_album": "유일한 앨범은 삭제할 수 없습니다.",
"backup_error_sync_failed": "동기화에 실패했습니다. 백업을 진행할 수 없습니다.",
"backup_info_card_assets": "항목", "backup_info_card_assets": "항목",
"backup_manual_cancelled": "취소됨", "backup_manual_cancelled": "취소됨",
"backup_manual_in_progress": "업로드가 이미 진행 중입니다. 잠시 후 다시 시도하세요", "backup_manual_in_progress": "업로드가 이미 진행 중입니다. 잠시 후 다시 시도하세요",
@ -1092,6 +1093,7 @@
"gcast_enabled": "구글 캐스트", "gcast_enabled": "구글 캐스트",
"gcast_enabled_description": "이 기능은 Google의 외부 리소스를 사용하여 실행됩니다.", "gcast_enabled_description": "이 기능은 Google의 외부 리소스를 사용하여 실행됩니다.",
"general": "일반", "general": "일반",
"geolocation_instruction_location": "GPS 좌표가 포함된 항목을 클릭해 위치를 사용하거나, 지도에서 직접 위치를 선택하세요",
"get_help": "도움 얻기", "get_help": "도움 얻기",
"get_wifiname_error": "Wi-Fi 이름을 가져올 수 없습니다. 필수 권한이 부여되었는지, Wi-Fi 네트워크에 연결되어 있는지 확인하세요.", "get_wifiname_error": "Wi-Fi 이름을 가져올 수 없습니다. 필수 권한이 부여되었는지, Wi-Fi 네트워크에 연결되어 있는지 확인하세요.",
"getting_started": "시작하기", "getting_started": "시작하기",
@ -1387,20 +1389,25 @@
"no_assets_message": "여기를 클릭해 첫 사진을 업로드하세요.", "no_assets_message": "여기를 클릭해 첫 사진을 업로드하세요.",
"no_assets_to_show": "표시할 항목 없음", "no_assets_to_show": "표시할 항목 없음",
"no_cast_devices_found": "캐스트 기기 없음", "no_cast_devices_found": "캐스트 기기 없음",
"no_checksum_local": "체크섬이 없습니다. 로컬 항목을 불러올 수 없습니다",
"no_checksum_remote": "체크섬이 없습니다. 외부 항목을 불러올 수 없습니다",
"no_duplicates_found": "비슷한 항목이 없습니다.", "no_duplicates_found": "비슷한 항목이 없습니다.",
"no_exif_info_available": "EXIF 정보 없음", "no_exif_info_available": "EXIF 정보 없음",
"no_explore_results_message": "더 많은 사진을 업로드하여 탐색 기능을 사용하세요.", "no_explore_results_message": "더 많은 사진을 업로드하여 탐색 기능을 사용하세요.",
"no_favorites_message": "즐겨찾기에서 사진과 동영상을 빠르게 찾기", "no_favorites_message": "즐겨찾기에서 사진과 동영상을 빠르게 찾기",
"no_libraries_message": "외부 라이브러리로 다른 경로의 사진과 동영상을 확인하세요.", "no_libraries_message": "외부 라이브러리로 다른 경로의 사진과 동영상을 확인하세요.",
"no_local_assets_found": "체크섬에 맞는 로컬 항목을 찾을 수 없습니다",
"no_locked_photos_message": "잠금 폴더의 사진 및 동영상은 숨겨지며 라이브러리를 탐색할 때 표시되지 않습니다.", "no_locked_photos_message": "잠금 폴더의 사진 및 동영상은 숨겨지며 라이브러리를 탐색할 때 표시되지 않습니다.",
"no_name": "이름 없음", "no_name": "이름 없음",
"no_notifications": "알림 없음", "no_notifications": "알림 없음",
"no_people_found": "일치하는 인물 없음", "no_people_found": "일치하는 인물 없음",
"no_places": "장소 없음", "no_places": "장소 없음",
"no_remote_assets_found": "체크섬에 맞는 외부 항목을 찾을 수 없습니다",
"no_results": "결과 없음", "no_results": "결과 없음",
"no_results_description": "동의어 또는 더 일반적인 단어를 사용해 보세요.", "no_results_description": "동의어 또는 더 일반적인 단어를 사용해 보세요.",
"no_shared_albums_message": "앨범을 만들어 주변 사람들과 사진 및 동영상을 공유하세요.", "no_shared_albums_message": "앨범을 만들어 주변 사람들과 사진 및 동영상을 공유하세요.",
"no_uploads_in_progress": "진행 중인 업로드 없음", "no_uploads_in_progress": "진행 중인 업로드 없음",
"not_available": "없음",
"not_in_any_album": "앨범에 없음", "not_in_any_album": "앨범에 없음",
"not_selected": "선택되지 않음", "not_selected": "선택되지 않음",
"note_apply_storage_label_to_previously_uploaded assets": "참고: 이전에 업로드한 항목에도 스토리지 레이블을 적용하려면 다음을 실행합니다,", "note_apply_storage_label_to_previously_uploaded assets": "참고: 이전에 업로드한 항목에도 스토리지 레이블을 적용하려면 다음을 실행합니다,",
@ -1435,6 +1442,8 @@
"open_the_search_filters": "검색 필터 열기", "open_the_search_filters": "검색 필터 열기",
"options": "옵션", "options": "옵션",
"or": "또는", "or": "또는",
"organize_into_albums": "앨범으로 정리하기",
"organize_into_albums_description": "현재 동기화 설정을 사용하여 기존 사진을 앨범으로 정리합니다",
"organize_your_library": "라이브러리 정리", "organize_your_library": "라이브러리 정리",
"original": "원본", "original": "원본",
"other": "기타", "other": "기타",
@ -1576,6 +1585,7 @@
"purchase_server_description_2": "서포터 배지", "purchase_server_description_2": "서포터 배지",
"purchase_server_title": "서버", "purchase_server_title": "서버",
"purchase_settings_server_activated": "서버 제품 키는 관리자가 제어합니다.", "purchase_settings_server_activated": "서버 제품 키는 관리자가 제어합니다.",
"query_asset_id": "쿼리 항목 ID",
"queue_status": "전체 {total}, {count} 대기 중", "queue_status": "전체 {total}, {count} 대기 중",
"rating": "등급", "rating": "등급",
"rating_clear": "등급 초기화", "rating_clear": "등급 초기화",
@ -1663,6 +1673,7 @@
"restore_user": "사용자 복원", "restore_user": "사용자 복원",
"restored_asset": "항목이 복원되었습니다.", "restored_asset": "항목이 복원되었습니다.",
"resume": "재개", "resume": "재개",
"resume_paused_jobs": "재개 {count, plural, one {# 일시 중지된 작업} other {# 일시 중지된 작업}}",
"retry_upload": "다시 시도", "retry_upload": "다시 시도",
"review_duplicates": "비슷한 항목 확인", "review_duplicates": "비슷한 항목 확인",
"review_large_files": "용량이 큰 파일 확인", "review_large_files": "용량이 큰 파일 확인",
@ -1756,6 +1767,7 @@
"select_user_for_sharing_page_err_album": "앨범을 생성하지 못했습니다.", "select_user_for_sharing_page_err_album": "앨범을 생성하지 못했습니다.",
"selected": "선택됨", "selected": "선택됨",
"selected_count": "{count, plural, other {#개 선택됨}}", "selected_count": "{count, plural, other {#개 선택됨}}",
"selected_gps_coordinates": "선택한 GPS 좌표",
"send_message": "메시지 전송", "send_message": "메시지 전송",
"send_welcome_email": "환영 이메일 전송", "send_welcome_email": "환영 이메일 전송",
"server_endpoint": "서버 엔드포인트", "server_endpoint": "서버 엔드포인트",

View file

@ -65,9 +65,13 @@
"duplicate_detection_job_description": "Analizēt failus ar mašīnmācīšanos, lai noteiktu līdzīgus attēlus. Šī funkcija izmanto viedo meklēšanu", "duplicate_detection_job_description": "Analizēt failus ar mašīnmācīšanos, lai noteiktu līdzīgus attēlus. Šī funkcija izmanto viedo meklēšanu",
"external_library_management": "Ārējo bibliotēku pārvaldība", "external_library_management": "Ārējo bibliotēku pārvaldība",
"face_detection": "Seju noteikšana", "face_detection": "Seju noteikšana",
"face_detection_description": "Atpazīt attēlos sejas, izmantojot mašīnmācīšanos. Video gadījumā tiek ņemta vērā tikai sīktēls. \"Atsvaidzināt\" atkārtoti apstrādā visus attēlus. \"Atiestatīt\" izdzēš visus pašreizējos seju datus. \"Trūkstošie\" ierindo attēlus, kas vēl nav apstrādāti. Pēc seju noteikšanas pabeigšanas atrastās sejas tiek ierindotas seju atpazīšanai, grupējot tās pēc esošas vai jauns personas.",
"facial_recognition_job_description": "Grupēt atpazītās sejas pēc cilvēkiem. Šis solis tiek veikts pēc seju noteikšanas pabeigšanas. \"Atiestatīt\" atkārtoti sagrupē visas sejas. \"Trūkstošie\" ierindo sejas, kurām nav piešķirta persona.",
"image_format": "Formāts", "image_format": "Formāts",
"image_format_description": "WebP veido mazākus failus nekā JPEG, taču to kodēšana ir lēnāka.", "image_format_description": "WebP veido mazākus failus nekā JPEG, taču to kodēšana ir lēnāka.",
"image_fullsize_enabled_description": "Ģenerēt pilna izmēra attēlu formātiem, kas nav piemēroti izmantošanai tīmeklī. Ja ir iespējota opcija \"Priekšroka iegultajam priekšskatījumam\", tiks izmantoti iegultie priekšskatījumi bez konvertēšanas. Neietekmē tīmeklim draudzīgus formātus, piemēram, JPEG.", "image_fullsize_description": "Pilnizmēra attēls ar noņemtiem metadatiem, ko izmanto, kad attēls ir tuvināts",
"image_fullsize_enabled": "Iespējot pilnizmēra attēlu ģenerēšanu",
"image_fullsize_enabled_description": "Ģenerēt pilnizmēra attēlu formātiem, kas nav piemēroti izmantošanai tīmeklī. Ja ir iespējota opcija \"Priekšroka iegultajam priekšskatījumam\", tiks izmantoti iegultie priekšskatījumi bez konvertēšanas. Neietekmē tīmeklim draudzīgus formātus, piemēram, JPEG.",
"image_fullsize_quality_description": "Pilnizmēra attēlu kvalitāte no 1-100. Augstāka vērtība dos labāku kvalitāti, taču faili būs lielāka izmēra.", "image_fullsize_quality_description": "Pilnizmēra attēlu kvalitāte no 1-100. Augstāka vērtība dos labāku kvalitāti, taču faili būs lielāka izmēra.",
"image_fullsize_title": "Pilnizmēra attēlu iestatījumi", "image_fullsize_title": "Pilnizmēra attēlu iestatījumi",
"image_prefer_embedded_preview": "Priekšroka iegultajam priekšskatījumam", "image_prefer_embedded_preview": "Priekšroka iegultajam priekšskatījumam",
@ -92,15 +96,24 @@
"library_scanning_enable_description": "Iespējot periodisku bibliotēku skenēšanu", "library_scanning_enable_description": "Iespējot periodisku bibliotēku skenēšanu",
"library_settings": "Ārējā bibliotēka", "library_settings": "Ārējā bibliotēka",
"library_settings_description": "Ārējo bibliotēku iestatījumu pārvaldība", "library_settings_description": "Ārējo bibliotēku iestatījumu pārvaldība",
"library_tasks_description": "Pārbaudīt ārējās bibliotēkas, lai atrastu jaunus un/vai mainītus failus",
"library_watching_settings": "Bibliotēku uzraudzīšana (EKSPERIMENTĀLA)", "library_watching_settings": "Bibliotēku uzraudzīšana (EKSPERIMENTĀLA)",
"library_watching_settings_description": "Automātiski uzraudzīt, vai ir mainīti faili", "library_watching_settings_description": "Automātiski uzraudzīt, vai ir mainīti faili",
"machine_learning_availability_checks_enabled": "Iespējot pieejamības pārbaudes",
"machine_learning_clip_model": "CLIP modelis", "machine_learning_clip_model": "CLIP modelis",
"machine_learning_duplicate_detection": "Dublikātu noteikšana", "machine_learning_duplicate_detection": "Dublikātu noteikšana",
"machine_learning_duplicate_detection_enabled": "Iespējot dublikātu noteikšanu",
"machine_learning_duplicate_detection_enabled_description": "Ja šī funkcija ir atspējota, joprojām tiks izlaisti identiski faili.",
"machine_learning_enabled": "Iespējot mašīnmācīšanos",
"machine_learning_enabled_description": "Ja funkcija ir atspējota, tiks atspējotas visas ML funkcijas neatkarīgi no zemāk esošajiem iestatījumiem.",
"machine_learning_facial_recognition": "Seju atpazīšana", "machine_learning_facial_recognition": "Seju atpazīšana",
"machine_learning_facial_recognition_model": "Seju atpazīšanas modelis", "machine_learning_facial_recognition_model": "Seju atpazīšanas modelis",
"machine_learning_facial_recognition_setting": "Iespējot seju atpazīšanu",
"machine_learning_settings": "Mašīnmācīšanās iestatījumi", "machine_learning_settings": "Mašīnmācīšanās iestatījumi",
"machine_learning_settings_description": "Mašīnmācīšanās funkciju un iestatījumu pārvaldība", "machine_learning_settings_description": "Mašīnmācīšanās funkciju un iestatījumu pārvaldība",
"machine_learning_smart_search": "Viedā meklēšana", "machine_learning_smart_search": "Viedā meklēšana",
"machine_learning_smart_search_enabled": "Iespējot viedo meklēšanu",
"machine_learning_smart_search_enabled_description": "Ja funkcija ir atspējota, attēli netiks kodēti viedai meklēšanai.",
"machine_learning_url_description": "Mašīnmācīšanās servera URL. Ja ir norādīts vairāk nekā viens URL, katrs serveris, sākot no pirmā līdz pēdējam, tiks pārbaudīts pa vienam, līdz kāds no tiem atbildēs veiksmīgi. Serveri, kas neatbild, tiks īslaicīgi ignorēti, līdz tie atkal būs pieejami tiešsaistē.", "machine_learning_url_description": "Mašīnmācīšanās servera URL. Ja ir norādīts vairāk nekā viens URL, katrs serveris, sākot no pirmā līdz pēdējam, tiks pārbaudīts pa vienam, līdz kāds no tiem atbildēs veiksmīgi. Serveri, kas neatbild, tiks īslaicīgi ignorēti, līdz tie atkal būs pieejami tiešsaistē.",
"manage_concurrency": "Vienlaicīgas darbības pārvaldība", "manage_concurrency": "Vienlaicīgas darbības pārvaldība",
"manage_log_settings": "Žurnāla iestatījumu pārvaldība", "manage_log_settings": "Žurnāla iestatījumu pārvaldība",
@ -114,10 +127,14 @@
"map_settings": "Karte", "map_settings": "Karte",
"map_settings_description": "Kartes iestatījumu pārvaldība", "map_settings_description": "Kartes iestatījumu pārvaldība",
"map_style_description": "URL uz style.json kartes tēmu", "map_style_description": "URL uz style.json kartes tēmu",
"memory_generate_job": "Atmiņu ģenerēšana",
"metadata_extraction_job": "Metadatu iegūšana", "metadata_extraction_job": "Metadatu iegūšana",
"metadata_extraction_job_description": "iegūt metadatu informāciju no katra faila, piemēram, GPS, sejas un izšķirtspēju",
"metadata_faces_import_setting_description": "Importēt sejas no attēla EXIF datiem un blakusfailiem",
"metadata_settings": "Metadatu iestatījumi", "metadata_settings": "Metadatu iestatījumi",
"metadata_settings_description": "Metadatu iestatījumu pārvaldība", "metadata_settings_description": "Metadatu iestatījumu pārvaldība",
"migration_job": "Migrācija", "migration_job": "Migrācija",
"migration_job_description": "Pārvietot failu un seju sīktēlus uz jaunāko mapju struktūru",
"nightly_tasks_cluster_faces_setting_description": "Veikt sejas atpazīšanu jaunatklātajām sejām", "nightly_tasks_cluster_faces_setting_description": "Veikt sejas atpazīšanu jaunatklātajām sejām",
"nightly_tasks_cluster_new_faces_setting": "Sagrupēt jaunās sejas", "nightly_tasks_cluster_new_faces_setting": "Sagrupēt jaunās sejas",
"nightly_tasks_database_cleanup_setting": "Datubāzes apkopes uzdevumi", "nightly_tasks_database_cleanup_setting": "Datubāzes apkopes uzdevumi",
@ -176,10 +193,15 @@
"server_settings_description": "Servera iestatījumu pārvaldība", "server_settings_description": "Servera iestatījumu pārvaldība",
"server_welcome_message": "Sveiciena ziņa", "server_welcome_message": "Sveiciena ziņa",
"server_welcome_message_description": "Ziņojums, kas tiek parādīts pieslēgšanās lapā.", "server_welcome_message_description": "Ziņojums, kas tiek parādīts pieslēgšanās lapā.",
"sidecar_job": "Blakusfailu metadati",
"sidecar_job_description": "Atklāt vai sinhronizēt blakusfailu metadatus no failu sistēmas",
"slideshow_duration_description": "Katra attēla rādīšanas ilgums sekundēs",
"smart_search_job_description": "Analizēt failus ar mašīnmācīšanos lai sagatavotu datus viedajai meklēšanai", "smart_search_job_description": "Analizēt failus ar mašīnmācīšanos lai sagatavotu datus viedajai meklēšanai",
"storage_template_date_time_sample": "Laika paraugs {date}", "storage_template_date_time_sample": "Laika paraugs {date}",
"storage_template_migration": "Krātuves veidņu migrācija", "storage_template_migration": "Krātuves veidņu migrācija",
"storage_template_migration_job": "Krātuves veidņu migrācijas uzdevums", "storage_template_migration_description": "Piemēro pašreizējo <link>{template}</link> iepriekš augšupielādētajiem failiem",
"storage_template_migration_info": "Krātuves veidne pārveidos visus failu paplašinājumus uz mazajiem burtiem. Veidnes izmaiņas attieksies tikai uz jauniem failiem. Lai veidni piemērotu ar atpakaļejošu efektu iepriekš augšupielādētiem failiem, palaidiet <link>{job}</link>.",
"storage_template_migration_job": "Krātuves veidņu migrācijas uzdevumu",
"storage_template_path_length": "Aptuvenais ceļa garuma ierobežojums: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "Aptuvenais ceļa garuma ierobežojums: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "Krātuves veidne", "storage_template_settings": "Krātuves veidne",
"system_settings": "Sistēmas iestatījumi", "system_settings": "Sistēmas iestatījumi",
@ -247,7 +269,7 @@
"age_years": "{years, plural, zero {# gadu} one {# gads} other {# gadi}}", "age_years": "{years, plural, zero {# gadu} one {# gads} other {# gadi}}",
"album_added": "Albums pievienots", "album_added": "Albums pievienots",
"album_added_notification_setting_description": "Saņemt e-pasta paziņojumu, kad tevi pievieno kopīgam albumam", "album_added_notification_setting_description": "Saņemt e-pasta paziņojumu, kad tevi pievieno kopīgam albumam",
"album_cover_updated": "Albuma attēls atjaunināts", "album_cover_updated": "Albuma vāciņš atjaunināts",
"album_delete_confirmation_description": "Ja šis albums tiek kopīgots, citi lietotāji vairs nevarēs tam piekļūt.", "album_delete_confirmation_description": "Ja šis albums tiek kopīgots, citi lietotāji vairs nevarēs tam piekļūt.",
"album_deleted": "Albums dzēsts", "album_deleted": "Albums dzēsts",
"album_info_card_backup_album_excluded": "NEIEKĻAUTS", "album_info_card_backup_album_excluded": "NEIEKĻAUTS",
@ -328,6 +350,7 @@
"automatic_endpoint_switching_title": "Automātiska URL pārslēgšana", "automatic_endpoint_switching_title": "Automātiska URL pārslēgšana",
"autoplay_slideshow": "Automātiska slaidrādes atskaņošana", "autoplay_slideshow": "Automātiska slaidrādes atskaņošana",
"back": "Atpakaļ", "back": "Atpakaļ",
"background_backup_running_error": "Pašlaik darbojas dublēšana fonā, nevar uzsākt manuālu dublēšanu",
"background_options": "Fona opcijas", "background_options": "Fona opcijas",
"backup": "Dublēšana", "backup": "Dublēšana",
"backup_album_selection_page_albums_device": "Albumi ierīcē ({count})", "backup_album_selection_page_albums_device": "Albumi ierīcē ({count})",
@ -376,7 +399,7 @@
"backup_controller_page_remainder": "Atlikums", "backup_controller_page_remainder": "Atlikums",
"backup_controller_page_remainder_sub": "Atlikušie fotoattēli un videoklipi, kurus dublēt no atlases", "backup_controller_page_remainder_sub": "Atlikušie fotoattēli un videoklipi, kurus dublēt no atlases",
"backup_controller_page_server_storage": "Servera krātuve", "backup_controller_page_server_storage": "Servera krātuve",
"backup_controller_page_start_backup": "Sākt Dublēšanu", "backup_controller_page_start_backup": "Sākt dublēšanu",
"backup_controller_page_status_off": "Automātiskā priekšplāna dublēšana ir izslēgta", "backup_controller_page_status_off": "Automātiskā priekšplāna dublēšana ir izslēgta",
"backup_controller_page_status_on": "Automātiskā priekšplāna dublēšana ir ieslēgta", "backup_controller_page_status_on": "Automātiskā priekšplāna dublēšana ir ieslēgta",
"backup_controller_page_storage_format": "{used} no {total} tiek izmantots", "backup_controller_page_storage_format": "{used} no {total} tiek izmantots",
@ -393,20 +416,22 @@
"backup_manual_title": "Augšupielādes statuss", "backup_manual_title": "Augšupielādes statuss",
"backup_options_page_title": "Dublēšanas iestatījumi", "backup_options_page_title": "Dublēšanas iestatījumi",
"backup_settings_subtitle": "Pārvaldīt augšupielādes iestatījumus", "backup_settings_subtitle": "Pārvaldīt augšupielādes iestatījumus",
"backward": "Atpakaļejoši", "backward": "Atpakaļejoša",
"biometric_auth_enabled": "Ieslēgta biometriskā autentifikācija", "biometric_auth_enabled": "Ieslēgta biometriskā autentifikācija",
"biometric_locked_out": "Biometriskā autentifikācija tev ir bloķēta", "biometric_locked_out": "Biometriskā autentifikācija tev ir bloķēta",
"biometric_no_options": "Nav pieejamas biometriskās autentifikācijas iespējas", "biometric_no_options": "Nav pieejamas biometriskās autentifikācijas iespējas",
"biometric_not_available": "Biometriskā autentifikācija šajā ierīcē nav pieejama", "biometric_not_available": "Biometriskā autentifikācija šajā ierīcē nav pieejama",
"birthdate_saved": "Dzimšanas datums veiksmīgi saglabāts", "birthdate_saved": "Dzimšanas datums veiksmīgi saglabāts",
"birthdate_set_description": "Dzimšanas datums tiek izmantots, lai aprēķinātu šīs personas vecumu fotogrāfijas uzņemšanas brīdī.", "birthdate_set_description": "Dzimšanas datums tiek izmantots, lai aprēķinātu šīs personas vecumu fotogrāfijas uzņemšanas brīdī.",
"blurred_background": "Izpludināts fons",
"bugs_and_feature_requests": "Kļūdas un funkciju pieprasījumi", "bugs_and_feature_requests": "Kļūdas un funkciju pieprasījumi",
"build": "Būvējums", "build": "Būvējums",
"build_image": "Būvējuma attēls", "build_image": "Būvējuma attēls",
"buy": "Iegādāties Immich",
"cache_settings_clear_cache_button": "Iztīrīt kešatmiņu", "cache_settings_clear_cache_button": "Iztīrīt kešatmiņu",
"cache_settings_clear_cache_button_title": "Iztīra aplikācijas kešatmiņu. Tas būtiski ietekmēs lietotnes veiktspēju, līdz kešatmiņa būs pārbūvēta.", "cache_settings_clear_cache_button_title": "Iztīra aplikācijas kešatmiņu. Tas būtiski ietekmēs lietotnes veiktspēju, līdz kešatmiņa būs pārbūvēta.",
"cache_settings_duplicated_assets_clear_button": "NOTĪRĪT", "cache_settings_duplicated_assets_clear_button": "NOTĪRĪT",
"cache_settings_duplicated_assets_subtitle": "Fotoattēli un videoklipi, kurus lietotne ir iekļāvusi melnajā sarakstā", "cache_settings_duplicated_assets_subtitle": "Fotoattēli un videoklipi, kurus lietotne ir iekļāvusi ignorējamo sarakstā",
"cache_settings_duplicated_assets_title": "Dublicētie faili ({count})", "cache_settings_duplicated_assets_title": "Dublicētie faili ({count})",
"cache_settings_statistics_album": "Bibliotēkas sīktēli", "cache_settings_statistics_album": "Bibliotēkas sīktēli",
"cache_settings_statistics_full": "Pilni attēli", "cache_settings_statistics_full": "Pilni attēli",
@ -418,10 +443,14 @@
"cache_settings_tile_title": "Lokālā Krātuve", "cache_settings_tile_title": "Lokālā Krātuve",
"cache_settings_title": "Kešdarbes iestatījumi", "cache_settings_title": "Kešdarbes iestatījumi",
"camera": "Fotokamera", "camera": "Fotokamera",
"camera_brand": "Fotokameras zīmols",
"camera_model": "Fotokameras modelis",
"cancel": "Atcelt", "cancel": "Atcelt",
"cancel_search": "Atcelt meklēšanu",
"canceled": "Atcelts", "canceled": "Atcelts",
"canceling": "Atceļ", "canceling": "Atceļ",
"cannot_merge_people": "Nevar apvienot personas", "cannot_merge_people": "Nevar apvienot personas",
"cannot_undo_this_action": "Šo darbību nevar atcelt!",
"cast": "Pārraidīt", "cast": "Pārraidīt",
"cast_description": "Konfigurēt pieejamos pārraides galamērķus", "cast_description": "Konfigurēt pieejamos pārraides galamērķus",
"change_date": "Mainīt datumu", "change_date": "Mainīt datumu",
@ -432,6 +461,7 @@
"change_name": "Mainīt nosaukumu", "change_name": "Mainīt nosaukumu",
"change_name_successfully": "Vārds veiksmīgi nomainīts", "change_name_successfully": "Vārds veiksmīgi nomainīts",
"change_password": "Nomainīt paroli", "change_password": "Nomainīt paroli",
"change_password_description": "Vai nu šī ir pirmā reize, kad pieslēdzaties sistēmai, vai arī ir iesniegts pieprasījums mainīt paroli. Lūdzu, ievadiet jauno paroli zemāk.",
"change_password_form_confirm_password": "Apstiprināt Paroli", "change_password_form_confirm_password": "Apstiprināt Paroli",
"change_password_form_description": "Sveiki {name},\n\nŠī ir pirmā reize, kad pierakstāties sistēmā, vai arī ir iesniegts pieprasījums mainīt paroli. Lūdzu, zemāk ievadiet jauno paroli.", "change_password_form_description": "Sveiki {name},\n\nŠī ir pirmā reize, kad pierakstāties sistēmā, vai arī ir iesniegts pieprasījums mainīt paroli. Lūdzu, zemāk ievadiet jauno paroli.",
"change_password_form_new_password": "Jauna Parole", "change_password_form_new_password": "Jauna Parole",
@ -445,7 +475,9 @@
"city": "Pilsēta", "city": "Pilsēta",
"clear": "Notīrīt", "clear": "Notīrīt",
"clear_all": "Notīrīt visu", "clear_all": "Notīrīt visu",
"clear_all_recent_searches": "Notīrīt visas pēdējās meklēšanas",
"clear_file_cache": "Notīrīt failu kešatmiņu", "clear_file_cache": "Notīrīt failu kešatmiņu",
"clear_message": "Notīrīt paziņojumu",
"clear_value": "Notīrīt vērtību", "clear_value": "Notīrīt vērtību",
"client_cert_dialog_msg_confirm": "Labi", "client_cert_dialog_msg_confirm": "Labi",
"client_cert_enter_password": "Ievadi paroli", "client_cert_enter_password": "Ievadi paroli",
@ -462,10 +494,14 @@
"color": "Krāsa", "color": "Krāsa",
"color_theme": "Krāsu tēma", "color_theme": "Krāsu tēma",
"comment_deleted": "Komentārs dzēsts", "comment_deleted": "Komentārs dzēsts",
"comment_options": "Komentāru iespējas",
"comments_and_likes": "Komentāri un tīkšķi",
"comments_are_disabled": "Komentāri ir atslēgti",
"common_create_new_album": "Izveidot jaunu albumu", "common_create_new_album": "Izveidot jaunu albumu",
"common_server_error": "Lūdzu, pārbaudiet tīkla savienojumu, pārliecinieties, vai serveris ir sasniedzams un aplikācijas/servera versijas ir saderīgas.", "common_server_error": "Lūdzu, pārbaudiet tīkla savienojumu, pārliecinieties, vai serveris ir sasniedzams un aplikācijas/servera versijas ir saderīgas.",
"completed": "Pabeigts", "completed": "Pabeigts",
"confirm": "Apstiprināt", "confirm": "Apstiprināt",
"confirm_admin_password": "Administratora paroles apstiprinājums",
"confirm_new_pin_code": "Apstiprināt jauno PIN kodu", "confirm_new_pin_code": "Apstiprināt jauno PIN kodu",
"confirm_password": "Apstiprināt paroli", "confirm_password": "Apstiprināt paroli",
"confirm_tag_face": "Vai vēlies atzīmēt šo seju kā {name}?", "confirm_tag_face": "Vai vēlies atzīmēt šo seju kā {name}?",
@ -482,6 +518,8 @@
"copy_error": "Kopēšanas kļūda", "copy_error": "Kopēšanas kļūda",
"copy_to_clipboard": "Kopēt starpliktuvē", "copy_to_clipboard": "Kopēt starpliktuvē",
"country": "Valsts", "country": "Valsts",
"cover": "Aizpildīts ekrāns",
"covers": "Vāciņi",
"create": "Izveidot", "create": "Izveidot",
"create_album": "Izveidot albumu", "create_album": "Izveidot albumu",
"create_album_page_untitled": "Bez nosaukuma", "create_album_page_untitled": "Bez nosaukuma",
@ -490,6 +528,7 @@
"create_link_to_share": "Izveidot kopīgošanas saiti", "create_link_to_share": "Izveidot kopīgošanas saiti",
"create_new": "IZVEIDOT JAUNU", "create_new": "IZVEIDOT JAUNU",
"create_new_person": "Izveidot jaunu personu", "create_new_person": "Izveidot jaunu personu",
"create_new_person_hint": "Piesaistīt izvēlētos failus jaunai personai",
"create_new_user": "Izveidot jaunu lietotāju", "create_new_user": "Izveidot jaunu lietotāju",
"create_shared_album_page_share_add_assets": "PIEVIENOT AKTĪVUS", "create_shared_album_page_share_add_assets": "PIEVIENOT AKTĪVUS",
"create_shared_album_page_share_select_photos": "Fotoattēlu Izvēle", "create_shared_album_page_share_select_photos": "Fotoattēlu Izvēle",
@ -544,6 +583,8 @@
"details": "INFORMĀCIJA", "details": "INFORMĀCIJA",
"direction": "Secība", "direction": "Secība",
"discord": "Discord", "discord": "Discord",
"discover": "Atklāt",
"discovered_devices": "Atrastās ierīces",
"display_order": "Attēlošanas secība", "display_order": "Attēlošanas secība",
"display_original_photos": "Rādīt oriģinālās fotogrāfijas", "display_original_photos": "Rādīt oriģinālās fotogrāfijas",
"documentation": "Dokumentācija", "documentation": "Dokumentācija",
@ -556,6 +597,8 @@
"download_error": "Lejupielādes kļūda", "download_error": "Lejupielādes kļūda",
"download_failed": "Lejupielāde neizdevās", "download_failed": "Lejupielāde neizdevās",
"download_finished": "Lejupielāde pabeigta", "download_finished": "Lejupielāde pabeigta",
"download_include_embedded_motion_videos": "Iegultie videoklipi",
"download_include_embedded_motion_videos_description": "Iekļaut video, kas iebūvēti kustīgos fotoattēlos, kā atsevišķu failu",
"download_notfound": "Lejupielāde nav atrasta", "download_notfound": "Lejupielāde nav atrasta",
"download_paused": "Lejupielāde nopauzēta", "download_paused": "Lejupielāde nopauzēta",
"download_settings": "Lejupielāde", "download_settings": "Lejupielāde",
@ -607,6 +650,7 @@
"enter_your_pin_code_subtitle": "Ievadi savu PIN kodu, lai piekļūtu slēgtajai mapei", "enter_your_pin_code_subtitle": "Ievadi savu PIN kodu, lai piekļūtu slēgtajai mapei",
"error": "Kļūda", "error": "Kļūda",
"error_change_sort_album": "Neizdevās nomainīt albuma kārtošanas secību", "error_change_sort_album": "Neizdevās nomainīt albuma kārtošanas secību",
"error_loading_image": "Kļūda, ielādējot attēlu",
"error_loading_partners": "Kļūda, ielādējot partnerus: {error}", "error_loading_partners": "Kļūda, ielādējot partnerus: {error}",
"error_saving_image": "Kļūda: {error}", "error_saving_image": "Kļūda: {error}",
"errors": { "errors": {
@ -640,7 +684,8 @@
"unable_to_save_date_of_birth": "Neizdevās saglabāt dzimšanas datumu", "unable_to_save_date_of_birth": "Neizdevās saglabāt dzimšanas datumu",
"unable_to_scan_libraries": "Bibliotēku skenēšana neizdevās", "unable_to_scan_libraries": "Bibliotēku skenēšana neizdevās",
"unable_to_scan_library": "Bibliotēkas skenēšana neizdevās", "unable_to_scan_library": "Bibliotēkas skenēšana neizdevās",
"unable_to_trash_asset": "Neizdevās pārvietot failu uz atkritni" "unable_to_trash_asset": "Neizdevās pārvietot failu uz atkritni",
"unable_to_update_album_cover": "Nevar atjaunināt albuma vāciņu"
}, },
"exif": "Exif", "exif": "Exif",
"exif_bottom_sheet_description": "Pievienot Aprakstu...", "exif_bottom_sheet_description": "Pievienot Aprakstu...",
@ -712,6 +757,10 @@
"hashed_assets": "Faili ar jaucējvērtībām", "hashed_assets": "Faili ar jaucējvērtībām",
"hashing": "Veido jaucējvērtības", "hashing": "Veido jaucējvērtības",
"header_settings_field_validator_msg": "Vērtība nevar būt tukša", "header_settings_field_validator_msg": "Vērtība nevar būt tukša",
"header_settings_header_name_input": "Galvenes lauks",
"header_settings_header_value_input": "Galvenes vērtība",
"headers_settings_tile_subtitle": "Norādiet starpniekservera galvenes, kuras lietotnei jānosūta ar katru tīkla pieprasījumu",
"headers_settings_tile_title": "Pielāgotas starpniekservera galvenes",
"hide_all_people": "Paslēpt visas personas", "hide_all_people": "Paslēpt visas personas",
"hide_gallery": "Paslēpt galeriju", "hide_gallery": "Paslēpt galeriju",
"hide_named_person": "Paslēpt personu {name}", "hide_named_person": "Paslēpt personu {name}",
@ -742,7 +791,7 @@
"ignore_icloud_photos_description": "iCloud uzglabātās fotogrāfijas netiks augšupielādētas Immich serverī", "ignore_icloud_photos_description": "iCloud uzglabātās fotogrāfijas netiks augšupielādētas Immich serverī",
"image": "Attēls", "image": "Attēls",
"image_saved_successfully": "Attēls saglabāts", "image_saved_successfully": "Attēls saglabāts",
"image_viewer_page_state_provider_download_started": "Lejupielāde Uzsākta", "image_viewer_page_state_provider_download_started": "Lejupielāde uzsākta",
"image_viewer_page_state_provider_download_success": "Lejupielāde izdevās", "image_viewer_page_state_provider_download_success": "Lejupielāde izdevās",
"image_viewer_page_state_provider_share_error": "Kopīgošanas Kļūda", "image_viewer_page_state_provider_share_error": "Kopīgošanas Kļūda",
"immich_logo": "Immich logo", "immich_logo": "Immich logo",
@ -908,6 +957,7 @@
"network_requirement_photos_upload": "Izmantot mobilo datu pārraidi, lai dublētu fotoattēlus", "network_requirement_photos_upload": "Izmantot mobilo datu pārraidi, lai dublētu fotoattēlus",
"network_requirement_videos_upload": "Izmantot mobilo datu pārraidi, lai dublētu video", "network_requirement_videos_upload": "Izmantot mobilo datu pārraidi, lai dublētu video",
"network_requirements": "Tīkla prasības", "network_requirements": "Tīkla prasības",
"network_requirements_updated": "Tīkla prasības ir mainījušās, atiestata dublēšanas rindu",
"networking_settings": "Tīkla iestatījumi", "networking_settings": "Tīkla iestatījumi",
"networking_subtitle": "Pārvaldīt servera galapunktu iestatījumus", "networking_subtitle": "Pārvaldīt servera galapunktu iestatījumus",
"never": "nekad", "never": "nekad",
@ -928,8 +978,12 @@
"no_archived_assets_message": "Arhivē fotoattēlus un videoklipus, lai paslēptu tos no Fotoattēli skata", "no_archived_assets_message": "Arhivē fotoattēlus un videoklipus, lai paslēptu tos no Fotoattēli skata",
"no_assets_message": "NOKLIKŠĶINIET, LAI AUGŠUPIELĀDĒTU SAVU PIRMO FOTOATTĒLU", "no_assets_message": "NOKLIKŠĶINIET, LAI AUGŠUPIELĀDĒTU SAVU PIRMO FOTOATTĒLU",
"no_assets_to_show": "Nav uzrādāmo aktīvu", "no_assets_to_show": "Nav uzrādāmo aktīvu",
"no_cast_devices_found": "Nav atrasta neviena pārraides ierīce",
"no_checksum_local": "Nav pieejama kontrolsumma - nevar iegūt vietējos failus",
"no_checksum_remote": "Nav pieejama kontrolsumma - nevar iegūt attālo failu",
"no_duplicates_found": "Dublikāti netika atrasti.", "no_duplicates_found": "Dublikāti netika atrasti.",
"no_exif_info_available": "Nav pieejama exif informācija", "no_exif_info_available": "Nav pieejama exif informācija",
"no_explore_results_message": "Augšupielādē vairāk fotogrāfiju, lai iepazītu savu kolekciju.",
"no_name": "Nav nosaukuma", "no_name": "Nav nosaukuma",
"no_notifications": "Nav paziņojumu", "no_notifications": "Nav paziņojumu",
"no_places": "Nav atrašanās vietu", "no_places": "Nav atrašanās vietu",
@ -1172,13 +1226,14 @@
"search_page_your_activity": "Jūsu aktivitāte", "search_page_your_activity": "Jūsu aktivitāte",
"search_page_your_map": "Jūsu Karte", "search_page_your_map": "Jūsu Karte",
"search_people": "Meklēt personas", "search_people": "Meklēt personas",
"search_rating": "Meklēt pēc vērtējuma...",
"search_result_page_new_search_hint": "Jauns Meklējums", "search_result_page_new_search_hint": "Jauns Meklējums",
"search_settings": "Meklēt iestatījumos", "search_settings": "Meklēt iestatījumos",
"search_state": "Meklēt pēc štata...", "search_state": "Meklēt pēc štata...",
"search_suggestion_list_smart_search_hint_1": "Viedā meklēšana pēc noklusējuma ir iespējota, lai meklētu metadatos, izmanto sintaksi ", "search_suggestion_list_smart_search_hint_1": "Viedā meklēšana pēc noklusējuma ir iespējota, lai meklētu metadatos, izmanto sintaksi ",
"search_suggestion_list_smart_search_hint_2": "m:jūsu-meklēšanas-frāze", "search_suggestion_list_smart_search_hint_2": "m:jūsu-meklēšanas-frāze",
"search_type": "Meklēšanas veids", "search_type": "Meklēšanas veids",
"search_your_photos": "Meklēt Jūsu fotoattēlus", "search_your_photos": "Meklēt fotoattēlos",
"second": "Sekunde", "second": "Sekunde",
"see_all_people": "Skatīt visas personas", "see_all_people": "Skatīt visas personas",
"select_album_cover": "Izvēlieties albuma vāciņu", "select_album_cover": "Izvēlieties albuma vāciņu",
@ -1200,6 +1255,8 @@
"server_privacy": "Servera privātums", "server_privacy": "Servera privātums",
"server_stats": "Servera statistika", "server_stats": "Servera statistika",
"server_version": "Servera versija", "server_version": "Servera versija",
"set_as_album_cover": "Iestatīt kā albuma vāciņu",
"set_as_profile_picture": "Iestatīt kā profila attēlu",
"set_date_of_birth": "Iestatīt dzimšanas datumu", "set_date_of_birth": "Iestatīt dzimšanas datumu",
"setting_image_viewer_help": "Detaļu skatītājs vispirms ielādē mazo sīktēlu, pēc tam ielādē vidēja lieluma priekšskatījumu (ja iespējots), visbeidzot ielādē oriģinālu (ja iespējots).", "setting_image_viewer_help": "Detaļu skatītājs vispirms ielādē mazo sīktēlu, pēc tam ielādē vidēja lieluma priekšskatījumu (ja iespējots), visbeidzot ielādē oriģinālu (ja iespējots).",
"setting_image_viewer_original_subtitle": "Iespējot sākotnējā pilnas izšķirtspējas attēla (liels!) ielādi. Atspējot, lai samazinātu datu lietojumu (gan tīklā, gan ierīces kešatmiņā).", "setting_image_viewer_original_subtitle": "Iespējot sākotnējā pilnas izšķirtspējas attēla (liels!) ielādi. Atspējot, lai samazinātu datu lietojumu (gan tīklā, gan ierīces kešatmiņā).",
@ -1227,7 +1284,7 @@
"setup_pin_code": "Uzstādīt PIN kodu", "setup_pin_code": "Uzstādīt PIN kodu",
"share": "Kopīgot", "share": "Kopīgot",
"share_add_photos": "Pievienot fotoattēlus", "share_add_photos": "Pievienot fotoattēlus",
"share_assets_selected": "{count} izvēlēti", "share_assets_selected": "{count} atlasīti",
"share_dialog_preparing": "Notiek sagatavošana...", "share_dialog_preparing": "Notiek sagatavošana...",
"shared": "Kopīgots", "shared": "Kopīgots",
"shared_album_activities_input_disable": "Komentāri atslēgti", "shared_album_activities_input_disable": "Komentāri atslēgti",
@ -1317,7 +1374,9 @@
"sort_title": "Nosaukums", "sort_title": "Nosaukums",
"source": "Pirmkods", "source": "Pirmkods",
"stack": "Apvienot kaudzē", "stack": "Apvienot kaudzē",
"start": "Sākt",
"start_date": "Sākuma datums", "start_date": "Sākuma datums",
"start_date_before_end_date": "Sākuma datumam jābūt pirms beigu datuma",
"state": "Štats", "state": "Štats",
"status": "Statuss", "status": "Statuss",
"stop_photo_sharing": "Beigt kopīgot jūsu fotogrāfijas?", "stop_photo_sharing": "Beigt kopīgot jūsu fotogrāfijas?",
@ -1386,6 +1445,7 @@
"unlimited": "Neierobežots", "unlimited": "Neierobežots",
"unnamed_album": "Albums bez nosaukuma", "unnamed_album": "Albums bez nosaukuma",
"unsaved_change": "Nesaglabāta izmaiņa", "unsaved_change": "Nesaglabāta izmaiņa",
"unselect_all": "Atcelt visu atlasi",
"unstack": "At-Stekot", "unstack": "At-Stekot",
"updated_at": "Atjaunināts", "updated_at": "Atjaunināts",
"updated_password": "Parole ir atjaunināta", "updated_password": "Parole ir atjaunināta",
@ -1426,6 +1486,7 @@
"version_history": "Versiju vēsture", "version_history": "Versiju vēsture",
"version_history_item": "{version} uzstādīta {date}", "version_history_item": "{version} uzstādīta {date}",
"video": "Videoklips", "video": "Videoklips",
"video_hover_setting_description": "Atskaņot video sīktēlu, kad peles kursors atrodas virs objekta. Pat ja funkcija ir atspējota, atskaņošanu var sākt, uzvirzot kursoru uz atskaņošanas ikonas.",
"videos": "Videoklipi", "videos": "Videoklipi",
"view": "Apskatīt", "view": "Apskatīt",
"view_album": "Skatīt Albumu", "view_album": "Skatīt Albumu",

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -416,7 +416,7 @@
"age_years": "{years, plural, other {Leeftijd #}}", "age_years": "{years, plural, other {Leeftijd #}}",
"album_added": "Album toegevoegd", "album_added": "Album toegevoegd",
"album_added_notification_setting_description": "Ontvang een e-mailmelding wanneer je aan een gedeeld album wordt toegevoegd", "album_added_notification_setting_description": "Ontvang een e-mailmelding wanneer je aan een gedeeld album wordt toegevoegd",
"album_cover_updated": "Album cover is bijgewerkt", "album_cover_updated": "Albumomslag is bijgewerkt",
"album_delete_confirmation": "Weet je zeker dat je het album {album} wilt verwijderen?", "album_delete_confirmation": "Weet je zeker dat je het album {album} wilt verwijderen?",
"album_delete_confirmation_description": "Als dit album gedeeld is, hebben andere gebruikers er geen toegang meer toe.", "album_delete_confirmation_description": "Als dit album gedeeld is, hebben andere gebruikers er geen toegang meer toe.",
"album_deleted": "Album verwijderd", "album_deleted": "Album verwijderd",
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Back-up op de voorgrond aanzetten", "backup_controller_page_turn_on": "Back-up op de voorgrond aanzetten",
"backup_controller_page_uploading_file_info": "Bestandsgegevens uploaden", "backup_controller_page_uploading_file_info": "Bestandsgegevens uploaden",
"backup_err_only_album": "Kan het enige album niet verwijderen", "backup_err_only_album": "Kan het enige album niet verwijderen",
"backup_error_sync_failed": "Synchronisatie mislukt. Kan back-up niet verwerken.",
"backup_info_card_assets": "bestanden", "backup_info_card_assets": "bestanden",
"backup_manual_cancelled": "Geannuleerd", "backup_manual_cancelled": "Geannuleerd",
"backup_manual_in_progress": "Het uploaden is al bezig. Probeer het na een tijdje", "backup_manual_in_progress": "Het uploaden is al bezig. Probeer het na een tijdje",
@ -734,7 +735,7 @@
"copy_to_clipboard": "Kopiëren naar klembord", "copy_to_clipboard": "Kopiëren naar klembord",
"country": "Land", "country": "Land",
"cover": "Bedekken", "cover": "Bedekken",
"covers": "Covers", "covers": "Omslagen",
"create": "Aanmaken", "create": "Aanmaken",
"create_album": "Album aanmaken", "create_album": "Album aanmaken",
"create_album_page_untitled": "Naamloos", "create_album_page_untitled": "Naamloos",
@ -820,7 +821,7 @@
"disabled": "Uitgeschakeld", "disabled": "Uitgeschakeld",
"disallow_edits": "Geen bewerkingen toestaan", "disallow_edits": "Geen bewerkingen toestaan",
"discord": "Discord", "discord": "Discord",
"discover": "Zoeken", "discover": "Zoek",
"discovered_devices": "Gevonden apparaten", "discovered_devices": "Gevonden apparaten",
"dismiss_all_errors": "Negeer alle fouten", "dismiss_all_errors": "Negeer alle fouten",
"dismiss_error": "Negeer fout", "dismiss_error": "Negeer fout",
@ -840,7 +841,7 @@
"download_failed": "Download mislukt", "download_failed": "Download mislukt",
"download_finished": "Download voltooid", "download_finished": "Download voltooid",
"download_include_embedded_motion_videos": "Ingesloten video's", "download_include_embedded_motion_videos": "Ingesloten video's",
"download_include_embedded_motion_videos_description": "Voeg video's toe die ingesloten zijn in bewegende foto's als een apart bestand", "download_include_embedded_motion_videos_description": "Voeg video's die in bewegingsfoto's zijn ingebed toe als een apart bestand",
"download_notfound": "Download niet gevonden", "download_notfound": "Download niet gevonden",
"download_paused": "Download gepauseerd", "download_paused": "Download gepauseerd",
"download_settings": "Downloaden", "download_settings": "Downloaden",
@ -1023,7 +1024,7 @@
"unable_to_trash_asset": "Kan item niet naar prullenbak verplaatsen", "unable_to_trash_asset": "Kan item niet naar prullenbak verplaatsen",
"unable_to_unlink_account": "Kan account niet ontkoppelen", "unable_to_unlink_account": "Kan account niet ontkoppelen",
"unable_to_unlink_motion_video": "Kan bewegende video niet ontkoppelen", "unable_to_unlink_motion_video": "Kan bewegende video niet ontkoppelen",
"unable_to_update_album_cover": "Kan album cover niet bijwerken", "unable_to_update_album_cover": "Kan albumomslag niet bijwerken",
"unable_to_update_album_info": "Kan albumgegevens niet bijwerken", "unable_to_update_album_info": "Kan albumgegevens niet bijwerken",
"unable_to_update_library": "Kan bibliotheek niet bijwerken", "unable_to_update_library": "Kan bibliotheek niet bijwerken",
"unable_to_update_location": "Kan locatie niet bijwerken", "unable_to_update_location": "Kan locatie niet bijwerken",
@ -1749,7 +1750,7 @@
"second": "Seconde", "second": "Seconde",
"see_all_people": "Bekijk alle mensen", "see_all_people": "Bekijk alle mensen",
"select": "Selecteer", "select": "Selecteer",
"select_album_cover": "Selecteer album cover", "select_album_cover": "Selecteer albumomslag",
"select_all": "Alles selecteren", "select_all": "Alles selecteren",
"select_all_duplicates": "Selecteer alle duplicaten", "select_all_duplicates": "Selecteer alle duplicaten",
"select_all_in": "Selecteer alles in {group}", "select_all_in": "Selecteer alles in {group}",
@ -1778,7 +1779,7 @@
"server_stats": "Serverstatistieken", "server_stats": "Serverstatistieken",
"server_version": "Serverversie", "server_version": "Serverversie",
"set": "Instellen", "set": "Instellen",
"set_as_album_cover": "Stel in als album cover", "set_as_album_cover": "Stel in als albumomslag",
"set_as_featured_photo": "Instellen als uitgelichte foto", "set_as_featured_photo": "Instellen als uitgelichte foto",
"set_as_profile_picture": "Instellen als profielfoto", "set_as_profile_picture": "Instellen als profielfoto",
"set_date_of_birth": "Geboortedatum instellen", "set_date_of_birth": "Geboortedatum instellen",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Włącz kopię zapasową na pierwszym planie", "backup_controller_page_turn_on": "Włącz kopię zapasową na pierwszym planie",
"backup_controller_page_uploading_file_info": "Informacje o przesyłanym pliku", "backup_controller_page_uploading_file_info": "Informacje o przesyłanym pliku",
"backup_err_only_album": "Nie można usunąć jedynego albumu", "backup_err_only_album": "Nie można usunąć jedynego albumu",
"backup_error_sync_failed": "Synchronizacja nie powiodła się. Nie można wykonać kopii zapasowej.",
"backup_info_card_assets": "zasoby", "backup_info_card_assets": "zasoby",
"backup_manual_cancelled": "Anulowano", "backup_manual_cancelled": "Anulowano",
"backup_manual_in_progress": "Przesyłanie już trwa. Spróbuj po pewnym czasie", "backup_manual_in_progress": "Przesyłanie już trwa. Spróbuj po pewnym czasie",

View file

@ -368,7 +368,7 @@
"trash_settings_description": "Gerir definições da reciclagem", "trash_settings_description": "Gerir definições da reciclagem",
"unlink_all_oauth_accounts": "Desvincular todas as contas OAuth", "unlink_all_oauth_accounts": "Desvincular todas as contas OAuth",
"unlink_all_oauth_accounts_description": "Lembre-se de desvincular todas as contas OAuth antes de migrar para um novo provedor.", "unlink_all_oauth_accounts_description": "Lembre-se de desvincular todas as contas OAuth antes de migrar para um novo provedor.",
"unlink_all_oauth_accounts_prompt": "Tem a certeza de que deseja desvincular todas as contas OAuth? Isso redefinirá o ID OAuth de cada utilizador e não poderá ser desfeito.", "unlink_all_oauth_accounts_prompt": "Tem a certeza de que deseja desvincular todas as contas OAuth? Isto irá redefinir o ID OAuth de cada utilizador e não poderá ser anulado.",
"user_cleanup_job": "Limpeza de utilizadores", "user_cleanup_job": "Limpeza de utilizadores",
"user_delete_delay": "A conta e os ficheiros de <b>{user}</b> serão agendados para eliminação permanente dentro de {delay, plural, one {# dia} other {# dias}}.", "user_delete_delay": "A conta e os ficheiros de <b>{user}</b> serão agendados para eliminação permanente dentro de {delay, plural, one {# dia} other {# dias}}.",
"user_delete_delay_settings": "Atraso de eliminação", "user_delete_delay_settings": "Atraso de eliminação",
@ -402,8 +402,8 @@
"advanced_settings_prefer_remote_title": "Preferir imagens do servidor", "advanced_settings_prefer_remote_title": "Preferir imagens do servidor",
"advanced_settings_proxy_headers_subtitle": "Defina os cabeçalhos do proxy que o Immich deve enviar em todas comunicações com a rede", "advanced_settings_proxy_headers_subtitle": "Defina os cabeçalhos do proxy que o Immich deve enviar em todas comunicações com a rede",
"advanced_settings_proxy_headers_title": "Cabeçalhos do Proxy", "advanced_settings_proxy_headers_title": "Cabeçalhos do Proxy",
"advanced_settings_readonly_mode_subtitle": "Ativa o modo somente leitura, onde as fotos podem ser visualizadas. Recursos como selecionar várias imagens, partilhar, transmitir e excluir ficam deactivados. Ativar/Desativar o modo somente leitura via avatar do utilizador na janela principal", "advanced_settings_readonly_mode_subtitle": "Ativa o modo só de leitura, onde as fotos apenas podem ser visualizadas. Funções como selecionar várias imagens, partilhar, transmitir e eliminar ficam deactivadas. Pode ativar ou desativar o modo só de leitura através da imagem de perfil do utilizador na janela principal",
"advanced_settings_readonly_mode_title": "Modo somente leitura", "advanced_settings_readonly_mode_title": "Modo só de leitura",
"advanced_settings_self_signed_ssl_subtitle": "Não validar o certificado SSL com o endereço do servidor. Isto é necessário para certificados auto-assinados.", "advanced_settings_self_signed_ssl_subtitle": "Não validar o certificado SSL com o endereço do servidor. Isto é necessário para certificados auto-assinados.",
"advanced_settings_self_signed_ssl_title": "Permitir certificados SSL auto-assinados", "advanced_settings_self_signed_ssl_title": "Permitir certificados SSL auto-assinados",
"advanced_settings_sync_remote_deletions_subtitle": "Automaticamente eliminar ou restaurar um ficheiro neste dispositivo quando essa mesma ação for efetuada na web", "advanced_settings_sync_remote_deletions_subtitle": "Automaticamente eliminar ou restaurar um ficheiro neste dispositivo quando essa mesma ação for efetuada na web",
@ -512,9 +512,9 @@
"assets": "Ficheiros", "assets": "Ficheiros",
"assets_added_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}}", "assets_added_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}}",
"assets_added_to_album_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}} ao álbum", "assets_added_to_album_count": "{count, plural, one {# ficheiro adicionado} other {# ficheiros adicionados}} ao álbum",
"assets_added_to_albums_count": "Adicionado {assetTotal, plural, one {# asset} other {# assets}} a {albumTotal, plural, one {# album} other {# albums}}", "assets_added_to_albums_count": "{assetTotal, plural, one {Foi adicionado # ficheiro} other {Foram adiciondos # ficheiros}} a {albumTotal, plural, one {# álbum} other {# albuns}}",
"assets_cannot_be_added_to_album_count": "Não foi possível adicionar {count, plural, one {ficheiro} other {ficheiros}} ao álbum", "assets_cannot_be_added_to_album_count": "Não foi possível adicionar {count, plural, one {ficheiro} other {ficheiros}} ao álbum",
"assets_cannot_be_added_to_albums": "{count, plural, one {Asset} other {Assets}} não pode ser adicionado a nenhum dos álbuns", "assets_cannot_be_added_to_albums": "{count, plural, one {Ficheiro não pode ser adicionado} other {Ficheiros não podem ser adiciondos}} a nenhum dos álbuns",
"assets_count": "{count, plural, one {# ficheiro} other {# ficheiros}}", "assets_count": "{count, plural, one {# ficheiro} other {# ficheiros}}",
"assets_deleted_permanently": "{count} ficheiro(s) eliminado(s) permanentemente", "assets_deleted_permanently": "{count} ficheiro(s) eliminado(s) permanentemente",
"assets_deleted_permanently_from_server": "{count} ficheiro(s) eliminado(s) permanentemente do servidor Immich", "assets_deleted_permanently_from_server": "{count} ficheiro(s) eliminado(s) permanentemente do servidor Immich",
@ -531,7 +531,7 @@
"assets_trashed_count": "{count, plural, one {# ficheiro enviado} other {# ficheiros enviados}} para a reciclagem", "assets_trashed_count": "{count, plural, one {# ficheiro enviado} other {# ficheiros enviados}} para a reciclagem",
"assets_trashed_from_server": "{count} ficheiro(s) do servidor Immich foi/foram enviados para a reciclagem", "assets_trashed_from_server": "{count} ficheiro(s) do servidor Immich foi/foram enviados para a reciclagem",
"assets_were_part_of_album_count": "{count, plural, one {O ficheiro já fazia} other {Os ficheiros já faziam}} parte do álbum", "assets_were_part_of_album_count": "{count, plural, one {O ficheiro já fazia} other {Os ficheiros já faziam}} parte do álbum",
"assets_were_part_of_albums_count": "{count, plural, one {Asset was} other {Assets were}} já faz parte dos álbuns", "assets_were_part_of_albums_count": "{count, plural, one {Ficheiro já fazia} other {Ficheiros já faziam}} parte dos álbuns",
"authorized_devices": "Dispositivos Autorizados", "authorized_devices": "Dispositivos Autorizados",
"automatic_endpoint_switching_subtitle": "Conecte-se localmente quando estiver em uma rede uma Wi-Fi específica e use conexões alternativas em outras redes", "automatic_endpoint_switching_subtitle": "Conecte-se localmente quando estiver em uma rede uma Wi-Fi específica e use conexões alternativas em outras redes",
"automatic_endpoint_switching_title": "Troca automática de URL", "automatic_endpoint_switching_title": "Troca automática de URL",
@ -589,7 +589,7 @@
"backup_controller_page_remainder": "Restante", "backup_controller_page_remainder": "Restante",
"backup_controller_page_remainder_sub": "Fotos e vídeos selecionados restantes para fazer backup", "backup_controller_page_remainder_sub": "Fotos e vídeos selecionados restantes para fazer backup",
"backup_controller_page_server_storage": "Armazenamento no servidor", "backup_controller_page_server_storage": "Armazenamento no servidor",
"backup_controller_page_start_backup": "Iniciar Backup", "backup_controller_page_start_backup": "Iniciar Cópia de Segurança",
"backup_controller_page_status_off": "Backup automático desativado", "backup_controller_page_status_off": "Backup automático desativado",
"backup_controller_page_status_on": "Backup automático ativado", "backup_controller_page_status_on": "Backup automático ativado",
"backup_controller_page_storage_format": "{used} de {total} utilizado", "backup_controller_page_storage_format": "{used} de {total} utilizado",
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Ativar backup", "backup_controller_page_turn_on": "Ativar backup",
"backup_controller_page_uploading_file_info": "Enviando arquivo", "backup_controller_page_uploading_file_info": "Enviando arquivo",
"backup_err_only_album": "Não é possível remover apenas o álbum", "backup_err_only_album": "Não é possível remover apenas o álbum",
"backup_error_sync_failed": "A sincronização falhou. Não é possível fazer cópia de segurança.",
"backup_info_card_assets": "arquivos", "backup_info_card_assets": "arquivos",
"backup_manual_cancelled": "Cancelado", "backup_manual_cancelled": "Cancelado",
"backup_manual_in_progress": "Envio já está em progresso. Tente novamente mais tarde", "backup_manual_in_progress": "Envio já está em progresso. Tente novamente mais tarde",
@ -667,7 +668,7 @@
"change_your_password": "Alterar a sua palavra-passe", "change_your_password": "Alterar a sua palavra-passe",
"changed_visibility_successfully": "Visibilidade alterada com sucesso", "changed_visibility_successfully": "Visibilidade alterada com sucesso",
"charging": "A carregar", "charging": "A carregar",
"charging_requirement_mobile_backup": "Cópia de segurança de fundo necesssita que o dispositivo esteja a carregar", "charging_requirement_mobile_backup": "Cópia de segurança de fundo necessita que o dispositivo esteja a carregar",
"check_corrupt_asset_backup": "Verificar por backups corrompidos", "check_corrupt_asset_backup": "Verificar por backups corrompidos",
"check_corrupt_asset_backup_button": "Verificar", "check_corrupt_asset_backup_button": "Verificar",
"check_corrupt_asset_backup_description": "Execute esta verificação somente em uma rede Wi-Fi e quando o backup de todos os arquivos já estiver concluído. O processo demora alguns minutos.", "check_corrupt_asset_backup_description": "Execute esta verificação somente em uma rede Wi-Fi e quando o backup de todos os arquivos já estiver concluído. O processo demora alguns minutos.",
@ -906,7 +907,7 @@
"error_delete_face": "Falha ao remover rosto do ficheiro", "error_delete_face": "Falha ao remover rosto do ficheiro",
"error_getting_places": "Erro ao obter locais", "error_getting_places": "Erro ao obter locais",
"error_loading_image": "Erro ao carregar a imagem", "error_loading_image": "Erro ao carregar a imagem",
"error_loading_partners": "Erro a carregar parceiros: {error}", "error_loading_partners": "Erro ao carregar parceiros: {error}",
"error_saving_image": "Erro: {error}", "error_saving_image": "Erro: {error}",
"error_tag_face_bounding_box": "Erro ao marcar o rosto - não foi possível localizar o rosto", "error_tag_face_bounding_box": "Erro ao marcar o rosto - não foi possível localizar o rosto",
"error_title": "Erro - Algo correu mal", "error_title": "Erro - Algo correu mal",
@ -939,7 +940,7 @@
"failed_to_load_notifications": "Ocorreu um erro ao carregar notificações", "failed_to_load_notifications": "Ocorreu um erro ao carregar notificações",
"failed_to_load_people": "Ocorreu um erro ao carregar pessoas", "failed_to_load_people": "Ocorreu um erro ao carregar pessoas",
"failed_to_remove_product_key": "Ocorreu um erro ao remover chave de produto", "failed_to_remove_product_key": "Ocorreu um erro ao remover chave de produto",
"failed_to_reset_pin_code": "Falha ao repor o código PIN", "failed_to_reset_pin_code": "Ocorreu um erro ao repor o código PIN",
"failed_to_stack_assets": "Ocorreu um erro ao empilhar os ficheiros", "failed_to_stack_assets": "Ocorreu um erro ao empilhar os ficheiros",
"failed_to_unstack_assets": "Ocorreu um erro ao desempilhar ficheiros", "failed_to_unstack_assets": "Ocorreu um erro ao desempilhar ficheiros",
"failed_to_update_notification_status": "Ocorreu um erro ao atualizar o estado das notificações", "failed_to_update_notification_status": "Ocorreu um erro ao atualizar o estado das notificações",
@ -948,7 +949,7 @@
"paths_validation_failed": "Ocorreu um erro na validação de {paths, plural, one {# caminho} other {# caminhos}}", "paths_validation_failed": "Ocorreu um erro na validação de {paths, plural, one {# caminho} other {# caminhos}}",
"profile_picture_transparent_pixels": "Imagem de perfil não pode ter pixeis transparentes. Por favor amplie e/ou mova a imagem.", "profile_picture_transparent_pixels": "Imagem de perfil não pode ter pixeis transparentes. Por favor amplie e/ou mova a imagem.",
"quota_higher_than_disk_size": "Definiu uma quota maior do que o tamanho do disco", "quota_higher_than_disk_size": "Definiu uma quota maior do que o tamanho do disco",
"something_went_wrong": "Algo deu errado", "something_went_wrong": "Algo correu mal",
"unable_to_add_album_users": "Não foi possível adicionar utilizadores ao álbum", "unable_to_add_album_users": "Não foi possível adicionar utilizadores ao álbum",
"unable_to_add_assets_to_shared_link": "Não foi possível adicionar os ficheiros ao link partilhado", "unable_to_add_assets_to_shared_link": "Não foi possível adicionar os ficheiros ao link partilhado",
"unable_to_add_comment": "Não foi possível adicionar o comentário", "unable_to_add_comment": "Não foi possível adicionar o comentário",
@ -1087,12 +1088,12 @@
"folder_not_found": "Pasta não encontrada", "folder_not_found": "Pasta não encontrada",
"folders": "Pastas", "folders": "Pastas",
"folders_feature_description": "Navegar na vista de pastas por fotos e vídeos no sistema de ficheiros", "folders_feature_description": "Navegar na vista de pastas por fotos e vídeos no sistema de ficheiros",
"forgot_pin_code_question": "Esqueceu o seu PIN?", "forgot_pin_code_question": "Esqueceu-se do seu PIN?",
"forward": "Para a frente", "forward": "Para a frente",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Esta funcionalidade requer o carregamento de recursos externos da Google para poder funcionar.", "gcast_enabled_description": "Esta funcionalidade requer o carregamento de recursos externos da Google para poder funcionar.",
"general": "Geral", "general": "Geral",
"geolocation_instruction_location": "Clique num ativo com coordenadas GPS para usar a sua localização ou seleccione um local diretamente do mapa", "geolocation_instruction_location": "Clique num ficheiro com coordenadas GPS para usar a sua localização ou selecione um local diretamente do mapa",
"get_help": "Obter Ajuda", "get_help": "Obter Ajuda",
"get_wifiname_error": "Não foi possível obter o nome do Wi-Fi. Verifique se concedeu as permissões necessárias e se está conectado a uma rede Wi-Fi", "get_wifiname_error": "Não foi possível obter o nome do Wi-Fi. Verifique se concedeu as permissões necessárias e se está conectado a uma rede Wi-Fi",
"getting_started": "Primeiros Passos", "getting_started": "Primeiros Passos",
@ -1225,7 +1226,7 @@
"library_page_sort_title": "Título do álbum", "library_page_sort_title": "Título do álbum",
"licenses": "Licenças", "licenses": "Licenças",
"light": "Claro", "light": "Claro",
"like": "Gostar", "like": "Gosto",
"like_deleted": "Gosto removido", "like_deleted": "Gosto removido",
"link_motion_video": "Relacionar video animado", "link_motion_video": "Relacionar video animado",
"link_to_oauth": "Link do OAuth", "link_to_oauth": "Link do OAuth",
@ -1254,7 +1255,7 @@
"logged_in_as": "Utilizador atual: {user}", "logged_in_as": "Utilizador atual: {user}",
"logged_out_all_devices": "Sessão terminada em todos os dispositivos", "logged_out_all_devices": "Sessão terminada em todos os dispositivos",
"logged_out_device": "Sessão terminada no dispositivo", "logged_out_device": "Sessão terminada no dispositivo",
"login": "Iniciar sessão", "login": "Iniciar Sessão",
"login_disabled": "Login desativado", "login_disabled": "Login desativado",
"login_form_api_exception": "Erro de API. Verifique a URL do servidor e tente novamente.", "login_form_api_exception": "Erro de API. Verifique a URL do servidor e tente novamente.",
"login_form_back_button_text": "Voltar", "login_form_back_button_text": "Voltar",
@ -1284,7 +1285,7 @@
"look": "Estilo", "look": "Estilo",
"loop_videos": "Repetir vídeos", "loop_videos": "Repetir vídeos",
"loop_videos_description": "Ativar para repetir os vídeos automaticamente durante a exibição.", "loop_videos_description": "Ativar para repetir os vídeos automaticamente durante a exibição.",
"main_branch_warning": "Está a utilizar uma versão de desenvolvimento, recomendamos vivamente que utilize uma versão estável!", "main_branch_warning": "Está a usar uma versão de desenvolvimento; recomendamos vivamente que use uma versão de lançamento!",
"main_menu": "Menu Principal", "main_menu": "Menu Principal",
"make": "Marca", "make": "Marca",
"manage_geolocation": "Gerir localização", "manage_geolocation": "Gerir localização",
@ -1296,7 +1297,7 @@
"manage_your_devices": "Gerir os seus dispositivos com sessão iniciada", "manage_your_devices": "Gerir os seus dispositivos com sessão iniciada",
"manage_your_oauth_connection": "Gerir a sua ligação ao OAuth", "manage_your_oauth_connection": "Gerir a sua ligação ao OAuth",
"map": "Mapa", "map": "Mapa",
"map_assets_in_bounds": "{count, plural, =0 {No photos in this area} one {# photo} other {# photos}}", "map_assets_in_bounds": "{count, plural, =0 {Sem fotos nesta área} one {# foto} other {# fotos}}",
"map_cannot_get_user_location": "Impossível obter a sua localização", "map_cannot_get_user_location": "Impossível obter a sua localização",
"map_location_dialog_yes": "Sim", "map_location_dialog_yes": "Sim",
"map_location_picker_page_use_location": "Utilizar esta localização", "map_location_picker_page_use_location": "Utilizar esta localização",
@ -1361,12 +1362,12 @@
"my_albums": "Os meus álbuns", "my_albums": "Os meus álbuns",
"name": "Nome", "name": "Nome",
"name_or_nickname": "Nome ou alcunha", "name_or_nickname": "Nome ou alcunha",
"network_requirement_photos_upload": "Usar dados móveis para fazer backup de fotos", "network_requirement_photos_upload": "Usar dados móveis para fazer cópia de segurança de fotos",
"network_requirement_videos_upload": "Usar dados móveis para fazer backup de vídeos", "network_requirement_videos_upload": "Usar dados móveis para fazer cópia de segurança de vídeos",
"network_requirements": "Requisitos de rede", "network_requirements": "Requisitos de rede",
"network_requirements_updated": "Requisitos de rede alterados, redefinindo fila de backup", "network_requirements_updated": "Requisitos de rede alterados, a redefinir fila de cópia de segurança",
"networking_settings": "Conexões", "networking_settings": "Ligações",
"networking_subtitle": "Gerencie a conexão do servidor", "networking_subtitle": "Gerir as ligações de rede do servidor",
"never": "Nunca", "never": "Nunca",
"new_album": "Novo Álbum", "new_album": "Novo Álbum",
"new_api_key": "Nova Chave de API", "new_api_key": "Nova Chave de API",
@ -1389,16 +1390,19 @@
"no_assets_to_show": "Não há arquivos para exibir", "no_assets_to_show": "Não há arquivos para exibir",
"no_cast_devices_found": "Nenhum dispositivo de transmissão encontrado", "no_cast_devices_found": "Nenhum dispositivo de transmissão encontrado",
"no_checksum_local": "Sem cálculo de verificação disponível - não pode capturar conteúdos locais", "no_checksum_local": "Sem cálculo de verificação disponível - não pode capturar conteúdos locais",
"no_checksum_remote": "Soma de verificação (checksum) não disponível - não é possível obter o recurso remoto",
"no_duplicates_found": "Nenhum item duplicado foi encontrado.", "no_duplicates_found": "Nenhum item duplicado foi encontrado.",
"no_exif_info_available": "Sem informações exif disponíveis", "no_exif_info_available": "Sem informações exif disponíveis",
"no_explore_results_message": "Carregue mais fotos para explorar a sua coleção.", "no_explore_results_message": "Carregue mais fotos para explorar a sua coleção.",
"no_favorites_message": "Adicione aos favoritos para encontrar as suas melhores fotos e vídeos rapidamente", "no_favorites_message": "Adicione aos favoritos para encontrar as suas melhores fotos e vídeos rapidamente",
"no_libraries_message": "Crie uma biblioteca externa para ver as suas fotos e vídeos", "no_libraries_message": "Crie uma biblioteca externa para ver as suas fotos e vídeos",
"no_local_assets_found": "Sem cálculo de verificação disponível",
"no_locked_photos_message": "Fotos e vídeos na pasta trancada estão ocultos e não serão exibidos enquanto explora ou pesquisa na biblioteca.", "no_locked_photos_message": "Fotos e vídeos na pasta trancada estão ocultos e não serão exibidos enquanto explora ou pesquisa na biblioteca.",
"no_name": "Sem nome", "no_name": "Sem nome",
"no_notifications": "Sem notificações", "no_notifications": "Sem notificações",
"no_people_found": "Nenhuma pessoa encontrada", "no_people_found": "Nenhuma pessoa encontrada",
"no_places": "Sem lugares", "no_places": "Sem lugares",
"no_remote_assets_found": "Soma de verificação (checksum) não disponível - não é possível obter o recurso remoto",
"no_results": "Sem resultados", "no_results": "Sem resultados",
"no_results_description": "Tente um sinónimo ou uma palavra-chave mais comum", "no_results_description": "Tente um sinónimo ou uma palavra-chave mais comum",
"no_shared_albums_message": "Crie um álbum para partilhar fotos e vídeos com pessoas na sua rede", "no_shared_albums_message": "Crie um álbum para partilhar fotos e vídeos com pessoas na sua rede",
@ -1499,9 +1503,9 @@
"permission_onboarding_permission_limited": "Permissão limitada. Para permitir que o Immich faça backups e gerencie sua galeria, conceda permissões para fotos e vídeos nas configurações.", "permission_onboarding_permission_limited": "Permissão limitada. Para permitir que o Immich faça backups e gerencie sua galeria, conceda permissões para fotos e vídeos nas configurações.",
"permission_onboarding_request": "O Immich requer autorização para ver as suas fotos e vídeos.", "permission_onboarding_request": "O Immich requer autorização para ver as suas fotos e vídeos.",
"person": "Pessoa", "person": "Pessoa",
"person_age_months": "{months, plural, one {# month} other {# months}} idade", "person_age_months": "{months, plural, one {# month} other {# months}} de idade",
"person_age_year_months": "1 ano, {months, plural, one {# month} other {# months}} idade", "person_age_year_months": "1 ano, {months, plural, one {# month} other {# months}} de idade",
"person_age_years": "{years, plural, other {# years}} idade", "person_age_years": "{years, plural, other {# anos}} de idade",
"person_birthdate": "Nasceu a {date}", "person_birthdate": "Nasceu a {date}",
"person_hidden": "{name}{hidden, select, true { (oculto)} other {}}", "person_hidden": "{name}{hidden, select, true { (oculto)} other {}}",
"photo_shared_all_users": "Parece que partilhou as suas fotos com todos os utilizadores ou não tem nenhum utilizador para partilhar.", "photo_shared_all_users": "Parece que partilhou as suas fotos com todos os utilizadores ou não tem nenhum utilizador para partilhar.",
@ -1542,7 +1546,7 @@
"profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.", "profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.",
"profile_drawer_client_server_up_to_date": "Cliente e Servidor atualizados", "profile_drawer_client_server_up_to_date": "Cliente e Servidor atualizados",
"profile_drawer_github": "GitHub", "profile_drawer_github": "GitHub",
"profile_drawer_readonly_mode": "Modo somente leitura ativado. Toque duas vezes no ícone do avatar do utilizador para sair.", "profile_drawer_readonly_mode": "Modo só de leitura ativado. Faça um toque longo no ícone do perfil do utilizador para sair.",
"profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.", "profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.",
"profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.", "profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.",
"profile_image_of_user": "Imagem de perfil de {user}", "profile_image_of_user": "Imagem de perfil de {user}",
@ -1569,7 +1573,7 @@
"purchase_lifetime_description": "Compra vitalícia", "purchase_lifetime_description": "Compra vitalícia",
"purchase_option_title": "OPÇÕES DE COMPRA", "purchase_option_title": "OPÇÕES DE COMPRA",
"purchase_panel_info_1": "O desenvolvimento do Immich requer muito tempo e esforço, e temos engenheiros a tempo inteiro a trabalhar nele para melhorá-lo quanto possível. A nossa missão é para que o software de código aberto e práticas de negócio éticas se tornem numa fonte de rendimento sustentável para os desenvolvedores e criar um ecossistema que respeite a privacidade dos utilizadores e que ofereça alternativas reais a serviços cloud explorativos.", "purchase_panel_info_1": "O desenvolvimento do Immich requer muito tempo e esforço, e temos engenheiros a tempo inteiro a trabalhar nele para melhorá-lo quanto possível. A nossa missão é para que o software de código aberto e práticas de negócio éticas se tornem numa fonte de rendimento sustentável para os desenvolvedores e criar um ecossistema que respeite a privacidade dos utilizadores e que ofereça alternativas reais a serviços cloud explorativos.",
"purchase_panel_info_2": "Como estamos comprometidos a não adicionar acesso pago, esta compra não lhe dará acesso a nenhuma funcionalidade adicional do Immich. Contamos com utilizadores como você para dar suporte ao desenvolvimento contínuo do Immich.", "purchase_panel_info_2": "Uma vez que estamos empenhados em não adicionar barreiras de pagamento, esta compra não lhe dará quaisquer funcionalidades adicionais no Immich. Contamos com utilizadores como você para apoiar o desenvolvimento contínuo do Immich.",
"purchase_panel_title": "Apoie o projeto", "purchase_panel_title": "Apoie o projeto",
"purchase_per_server": "Por servidor", "purchase_per_server": "Por servidor",
"purchase_per_user": "Por utilizador", "purchase_per_user": "Por utilizador",
@ -1581,7 +1585,7 @@
"purchase_server_description_2": "Status de apoiante", "purchase_server_description_2": "Status de apoiante",
"purchase_server_title": "Servidor", "purchase_server_title": "Servidor",
"purchase_settings_server_activated": "A chave de produto do servidor é gerida pelo administrador", "purchase_settings_server_activated": "A chave de produto do servidor é gerida pelo administrador",
"query_asset_id": "Consultar ID do recurso", "query_asset_id": "Consultar ID do ficheiro",
"queue_status": "Em fila {count}/{total}", "queue_status": "Em fila {count}/{total}",
"rating": "Classificação por estrelas", "rating": "Classificação por estrelas",
"rating_clear": "Limpar classificação", "rating_clear": "Limpar classificação",
@ -1589,8 +1593,8 @@
"rating_description": "Mostrar a classificação EXIF no painel de informações", "rating_description": "Mostrar a classificação EXIF no painel de informações",
"reaction_options": "Opções de reação", "reaction_options": "Opções de reação",
"read_changelog": "Ler Novidades", "read_changelog": "Ler Novidades",
"readonly_mode_disabled": "Modo somente leitura desativado", "readonly_mode_disabled": "Modo só de leitura desativado",
"readonly_mode_enabled": "Modo somente leitura ativado", "readonly_mode_enabled": "Modo só de leitura ativado",
"ready_for_upload": "Pronto para upload", "ready_for_upload": "Pronto para upload",
"reassign": "Reatribuir", "reassign": "Reatribuir",
"reassigned_assets_to_existing_person": "Reatribuir {count, plural, one {# ficheiro} other {# ficheiros}} para {name, select, null {uma pessoa existente} other {{name}}}", "reassigned_assets_to_existing_person": "Reatribuir {count, plural, one {# ficheiro} other {# ficheiros}} para {name, select, null {uma pessoa existente} other {{name}}}",
@ -1616,6 +1620,7 @@
"regenerating_thumbnails": "A atualizar miniaturas", "regenerating_thumbnails": "A atualizar miniaturas",
"remote": "Remoto", "remote": "Remoto",
"remote_assets": "Ficheiros Remotos", "remote_assets": "Ficheiros Remotos",
"remote_media_summary": "Sumário de Ficheiros Remotos",
"remove": "Remover", "remove": "Remover",
"remove_assets_album_confirmation": "Tem a certeza de que deseja remover {count, plural, one {# ficheiro} other {# ficheiros}} do álbum?", "remove_assets_album_confirmation": "Tem a certeza de que deseja remover {count, plural, one {# ficheiro} other {# ficheiros}} do álbum?",
"remove_assets_shared_link_confirmation": "Tem certeza de que deseja remover {count, plural, one {# ficheiro} other {# ficheiros}} deste link partilhado?", "remove_assets_shared_link_confirmation": "Tem certeza de que deseja remover {count, plural, one {# ficheiro} other {# ficheiros}} deste link partilhado?",
@ -1653,9 +1658,9 @@
"reset_password": "Redefinir palavra-passe", "reset_password": "Redefinir palavra-passe",
"reset_people_visibility": "Redefinir pessoas ocultas", "reset_people_visibility": "Redefinir pessoas ocultas",
"reset_pin_code": "Repor código PIN", "reset_pin_code": "Repor código PIN",
"reset_pin_code_description": "Se esqueceu o seu código PIN, pode entrar em contato com o administrador do servidor para o repor", "reset_pin_code_description": "Se esqueceu o seu código PIN, pode entrar em contacto com o administrador do servidor para o repor",
"reset_pin_code_success": "Código PIN redefinido com sucesso", "reset_pin_code_success": "Código PIN redefinido com sucesso",
"reset_pin_code_with_password": "Pode sempre repor o seu código PIN com a sua senha", "reset_pin_code_with_password": "Pode sempre repor o seu código PIN com a sua palavra-passe",
"reset_sqlite": "Reiniciar Base de Dados SQLite", "reset_sqlite": "Reiniciar Base de Dados SQLite",
"reset_sqlite_confirmation": "Tem a certeza de que quer reiniciar a base de dados SQLite? Vai ter de terminar a sessão e entrar outra vez para sincronizar os dados de novo", "reset_sqlite_confirmation": "Tem a certeza de que quer reiniciar a base de dados SQLite? Vai ter de terminar a sessão e entrar outra vez para sincronizar os dados de novo",
"reset_sqlite_success": "Base de dados SQLite reiniciada com sucesso", "reset_sqlite_success": "Base de dados SQLite reiniciada com sucesso",
@ -1668,10 +1673,10 @@
"restore_user": "Restaurar utilizador", "restore_user": "Restaurar utilizador",
"restored_asset": "Ficheiro restaurado", "restored_asset": "Ficheiro restaurado",
"resume": "Continuar", "resume": "Continuar",
"resume_paused_jobs": "Continuar {count, plural, one {# trabalho em pausa} other {# trabalhos pausados}}", "resume_paused_jobs": "Continuar {count, plural, one {# trabalho em pausa} other {# trabalhos em pausa}}",
"retry_upload": "Tentar carregar novamente", "retry_upload": "Tentar carregar novamente",
"review_duplicates": "Rever itens duplicados", "review_duplicates": "Rever itens duplicados",
"review_large_files": "Rever arquivos grandes", "review_large_files": "Rever ficheiros grandes",
"role": "Função", "role": "Função",
"role_editor": "Editor", "role_editor": "Editor",
"role_viewer": "Visualizador", "role_viewer": "Visualizador",
@ -1856,7 +1861,7 @@
"shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Gerenciar links compartilhados", "shared_link_manage_links": "Gerenciar links compartilhados",
"shared_link_options": "Opções de link partilhado", "shared_link_options": "Opções de link partilhado",
"shared_link_password_description": "Exigir uma senha para aceder a este link partilhado", "shared_link_password_description": "Exigir uma palavra-passe para aceder a este link partilhado",
"shared_links": "Links partilhados", "shared_links": "Links partilhados",
"shared_links_description": "Partilhar fotos e videos com um link", "shared_links_description": "Partilhar fotos e videos com um link",
"shared_photos_and_videos_count": "{assetCount, plural, other {# Fotos & videos partilhados.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# Fotos & videos partilhados.}}",
@ -1947,7 +1952,7 @@
"sync_albums_manual_subtitle": "Sincronizar todas as fotos e vídeos enviados para o álbum de backup selecionado", "sync_albums_manual_subtitle": "Sincronizar todas as fotos e vídeos enviados para o álbum de backup selecionado",
"sync_local": "Sincronização Local", "sync_local": "Sincronização Local",
"sync_remote": "Sincronização Remota", "sync_remote": "Sincronização Remota",
"sync_status": "Status da sincronização", "sync_status": "Estado da sincronização",
"sync_status_subtitle": "Ver e gerir o sistema de sincronização", "sync_status_subtitle": "Ver e gerir o sistema de sincronização",
"sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich", "sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich",
"tag": "Etiqueta", "tag": "Etiqueta",
@ -2125,5 +2130,6 @@
"yes": "Sim", "yes": "Sim",
"you_dont_have_any_shared_links": "Não tem links partilhados", "you_dont_have_any_shared_links": "Não tem links partilhados",
"your_wifi_name": "Nome da sua rede Wi-Fi", "your_wifi_name": "Nome da sua rede Wi-Fi",
"zoom_image": "Ampliar/Reduzir imagem" "zoom_image": "Ampliar/Reduzir imagem",
"zoom_to_bounds": "Aproximar aos limites"
} }

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Ativar backup automático", "backup_controller_page_turn_on": "Ativar backup automático",
"backup_controller_page_uploading_file_info": "Informações do arquivo", "backup_controller_page_uploading_file_info": "Informações do arquivo",
"backup_err_only_album": "Não é possível remover o único álbum", "backup_err_only_album": "Não é possível remover o único álbum",
"backup_error_sync_failed": "A sincronização falhou. Não foi possível processar o backup.",
"backup_info_card_assets": "arquivos", "backup_info_card_assets": "arquivos",
"backup_manual_cancelled": "Cancelado", "backup_manual_cancelled": "Cancelado",
"backup_manual_in_progress": "Envio já está em progresso. Tente novamente mais tarde", "backup_manual_in_progress": "Envio já está em progresso. Tente novamente mais tarde",

View file

@ -468,7 +468,7 @@
"app_bar_signout_dialog_content": "Ești sigur că vrei să te deconectezi?", "app_bar_signout_dialog_content": "Ești sigur că vrei să te deconectezi?",
"app_bar_signout_dialog_ok": "Da", "app_bar_signout_dialog_ok": "Da",
"app_bar_signout_dialog_title": "Deconectare", "app_bar_signout_dialog_title": "Deconectare",
"app_settings": "Setări Aplicație", "app_settings": "Setări aplicație",
"appears_in": "Apare în", "appears_in": "Apare în",
"apply_count": "Aplică ({count, number})", "apply_count": "Aplică ({count, number})",
"archive": "Arhivă", "archive": "Arhivă",
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Activează backup-ul în prim-plan", "backup_controller_page_turn_on": "Activează backup-ul în prim-plan",
"backup_controller_page_uploading_file_info": "Informații încărcare fișier", "backup_controller_page_uploading_file_info": "Informații încărcare fișier",
"backup_err_only_album": "Nu poți șterge singurul album", "backup_err_only_album": "Nu poți șterge singurul album",
"backup_error_sync_failed": "Sincronizarea a eșuat. Nu se poate procesa copia de rezervă.",
"backup_info_card_assets": "resurse", "backup_info_card_assets": "resurse",
"backup_manual_cancelled": "Anulat", "backup_manual_cancelled": "Anulat",
"backup_manual_in_progress": "Încărcarea este deja în curs. Încearcă din nou mai târziu", "backup_manual_in_progress": "Încărcarea este deja în curs. Încearcă din nou mai târziu",

View file

@ -599,7 +599,7 @@
"backup_controller_page_turn_on": "Включить", "backup_controller_page_turn_on": "Включить",
"backup_controller_page_uploading_file_info": "Информация о загружаемом файле", "backup_controller_page_uploading_file_info": "Информация о загружаемом файле",
"backup_err_only_album": "Невозможно удалить единственный альбом", "backup_err_only_album": "Невозможно удалить единственный альбом",
"backup_error_sync_failed": "Сбой синхронизации. Невозможно запустить резервное копирование.", "backup_error_sync_failed": "Сбой синхронизации. Невозможно выполнить резервное копирование.",
"backup_info_card_assets": "объектов", "backup_info_card_assets": "объектов",
"backup_manual_cancelled": "Отменено", "backup_manual_cancelled": "Отменено",
"backup_manual_in_progress": "Загрузка в процессе. Попробуйте позже", "backup_manual_in_progress": "Загрузка в процессе. Попробуйте позже",
@ -732,7 +732,7 @@
"copy_link": "Копировать ссылку", "copy_link": "Копировать ссылку",
"copy_link_to_clipboard": "Скопировать ссылку в буфер обмена", "copy_link_to_clipboard": "Скопировать ссылку в буфер обмена",
"copy_password": "Скопировать пароль", "copy_password": "Скопировать пароль",
"copy_to_clipboard": "Скопировать настройки в буфер обмена", "copy_to_clipboard": "Скопировать в буфер обмена",
"country": "Страна", "country": "Страна",
"cover": "Обложка", "cover": "Обложка",
"covers": "Обложки", "covers": "Обложки",
@ -1779,7 +1779,7 @@
"server_stats": "Статистика сервера", "server_stats": "Статистика сервера",
"server_version": "Версия сервера", "server_version": "Версия сервера",
"set": "Установить", "set": "Установить",
"set_as_album_cover": "Установить в качестве обложки альбома", "set_as_album_cover": "Установить как обложку альбома",
"set_as_featured_photo": "Установить как основное фото", "set_as_featured_photo": "Установить как основное фото",
"set_as_profile_picture": "Установить как фото профиля", "set_as_profile_picture": "Установить как фото профиля",
"set_date_of_birth": "Установить дату рождения", "set_date_of_birth": "Установить дату рождения",
@ -1969,7 +1969,7 @@
"theme": "Тема", "theme": "Тема",
"theme_selection": "Выбор темы", "theme_selection": "Выбор темы",
"theme_selection_description": "Автоматически устанавливать светлую или тёмную тему в зависимости от настроек вашего браузера", "theme_selection_description": "Автоматически устанавливать светлую или тёмную тему в зависимости от настроек вашего браузера",
"theme_setting_asset_list_storage_indicator_title": "Показать индикатор хранилища на плитках объектов", "theme_setting_asset_list_storage_indicator_title": "Отображать индикатор хранилища на плитках объектов",
"theme_setting_asset_list_tiles_per_row_title": "Количество объектов в строке ({count})", "theme_setting_asset_list_tiles_per_row_title": "Количество объектов в строке ({count})",
"theme_setting_colorful_interface_subtitle": "Добавить оттенок к фону.", "theme_setting_colorful_interface_subtitle": "Добавить оттенок к фону.",
"theme_setting_colorful_interface_title": "Цвет фона", "theme_setting_colorful_interface_title": "Цвет фона",

View file

@ -497,7 +497,7 @@
"asset_list_layout_settings_group_by_month_day": "Mesiac + deň", "asset_list_layout_settings_group_by_month_day": "Mesiac + deň",
"asset_list_layout_sub_title": "Rozvrhnutie", "asset_list_layout_sub_title": "Rozvrhnutie",
"asset_list_settings_subtitle": "Nastavenia rozloženia mriežky fotografií", "asset_list_settings_subtitle": "Nastavenia rozloženia mriežky fotografií",
"asset_list_settings_title": "Fotografická mriežka", "asset_list_settings_title": "Mriežka fotografií",
"asset_offline": "Médium je offline", "asset_offline": "Médium je offline",
"asset_offline_description": "Toto externý obsah sa už nenachádza na disku. Požiadajte o pomoc svojho správcu Immich.", "asset_offline_description": "Toto externý obsah sa už nenachádza na disku. Požiadajte o pomoc svojho správcu Immich.",
"asset_restored_successfully": "Položky boli úspešne obnovené", "asset_restored_successfully": "Položky boli úspešne obnovené",
@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Povoliť zálohovanie na popredí", "backup_controller_page_turn_on": "Povoliť zálohovanie na popredí",
"backup_controller_page_uploading_file_info": "Nahrávaný súbor", "backup_controller_page_uploading_file_info": "Nahrávaný súbor",
"backup_err_only_album": "Nie je možné odstrániť jediný vybraný album", "backup_err_only_album": "Nie je možné odstrániť jediný vybraný album",
"backup_error_sync_failed": "Synchronizácia sa nepodarila. Nie je možné spracovať zálohu.",
"backup_info_card_assets": "položiek", "backup_info_card_assets": "položiek",
"backup_manual_cancelled": "Zrušené", "backup_manual_cancelled": "Zrušené",
"backup_manual_in_progress": "Nahrávanie už prebieha. Vyskúšajte neskôr", "backup_manual_in_progress": "Nahrávanie už prebieha. Vyskúšajte neskôr",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "Vklopite varnostno kopiranje v ospredju", "backup_controller_page_turn_on": "Vklopite varnostno kopiranje v ospredju",
"backup_controller_page_uploading_file_info": "Nalaganje podatkov o datoteki", "backup_controller_page_uploading_file_info": "Nalaganje podatkov o datoteki",
"backup_err_only_album": "Edinega albuma ni mogoče odstraniti", "backup_err_only_album": "Edinega albuma ni mogoče odstraniti",
"backup_error_sync_failed": "Sinhronizacija ni uspela. Varnostne kopije ni mogoče obdelati.",
"backup_info_card_assets": "sredstva", "backup_info_card_assets": "sredstva",
"backup_manual_cancelled": "Preklicano", "backup_manual_cancelled": "Preklicano",
"backup_manual_in_progress": "Nalaganje že poteka. Poskusite čez nekaj časa", "backup_manual_in_progress": "Nalaganje že poteka. Poskusite čez nekaj časa",

View file

@ -28,6 +28,7 @@
"add_to_album": "Lägg till i album", "add_to_album": "Lägg till i album",
"add_to_album_bottom_sheet_added": "Tillagd till {album}", "add_to_album_bottom_sheet_added": "Tillagd till {album}",
"add_to_album_bottom_sheet_already_exists": "Redan i {album}", "add_to_album_bottom_sheet_already_exists": "Redan i {album}",
"add_to_album_bottom_sheet_some_local_assets": "Vissa lokala tillgångar kunde inte läggas till i albumet",
"add_to_album_toggle": "Växla val för {album}", "add_to_album_toggle": "Växla val för {album}",
"add_to_albums": "Lägg till i album", "add_to_albums": "Lägg till i album",
"add_to_albums_count": "Lägg till i album ({count})", "add_to_albums_count": "Lägg till i album ({count})",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "Aktivera automatisk säkerhetskopiering", "backup_controller_page_turn_on": "Aktivera automatisk säkerhetskopiering",
"backup_controller_page_uploading_file_info": "Laddar upp filinformation", "backup_controller_page_uploading_file_info": "Laddar upp filinformation",
"backup_err_only_album": "Kan inte ta bort det enda albumet", "backup_err_only_album": "Kan inte ta bort det enda albumet",
"backup_error_sync_failed": "Synkroniseringen misslyckades. Det går inte att bearbeta säkerhetskopian.",
"backup_info_card_assets": "objekt", "backup_info_card_assets": "objekt",
"backup_manual_cancelled": "Avbrutet", "backup_manual_cancelled": "Avbrutet",
"backup_manual_in_progress": "Uppladdning pågår redan. Försök igen om en liten stund", "backup_manual_in_progress": "Uppladdning pågår redan. Försök igen om en liten stund",

View file

@ -28,6 +28,7 @@
"add_to_album": "ஆல்பமில் சேர்க்க", "add_to_album": "ஆல்பமில் சேர்க்க",
"add_to_album_bottom_sheet_added": "{album}-இல் சேர்க்கப்பட்டது", "add_to_album_bottom_sheet_added": "{album}-இல் சேர்க்கப்பட்டது",
"add_to_album_bottom_sheet_already_exists": "ஏற்கனவே {album}-இல் உள்ளது", "add_to_album_bottom_sheet_already_exists": "ஏற்கனவே {album}-இல் உள்ளது",
"add_to_album_bottom_sheet_some_local_assets": "சில உள்ளக சொத்துக்களை ஆல்பத்தில் சேர்க்க முடியவில்லை",
"add_to_album_toggle": "{album} க்கான தேர்வை மாற்று", "add_to_album_toggle": "{album} க்கான தேர்வை மாற்று",
"add_to_albums": "ஆல்பத்தில் சேர்", "add_to_albums": "ஆல்பத்தில் சேர்",
"add_to_albums_count": "ஆல்பங்களில் சேர்({count})", "add_to_albums_count": "ஆல்பங்களில் சேர்({count})",
@ -39,16 +40,16 @@
"admin": { "admin": {
"add_exclusion_pattern_description": "விலக்கு வடிவங்களைச் சேர்க்கவும். *, **, மற்றும் ? ஆதரிக்கப்படுகிறது. \"Raw\" என்ற பெயரிடப்பட்ட எந்த கோப்பகத்திலும் உள்ள எல்லா கோப்புகளையும் புறக்கணிக்க, \"**/Raw/**\" ஐப் பயன்படுத்தவும். \".tif\" இல் முடியும் எல்லா கோப்புகளையும் புறக்கணிக்க, \"**/*.tif\" ஐப் பயன்படுத்தவும். ஒரு முழுமையான பாதையை புறக்கணிக்க, \"/path/to/ignore/**\" ஐப் பயன்படுத்தவும்.", "add_exclusion_pattern_description": "விலக்கு வடிவங்களைச் சேர்க்கவும். *, **, மற்றும் ? ஆதரிக்கப்படுகிறது. \"Raw\" என்ற பெயரிடப்பட்ட எந்த கோப்பகத்திலும் உள்ள எல்லா கோப்புகளையும் புறக்கணிக்க, \"**/Raw/**\" ஐப் பயன்படுத்தவும். \".tif\" இல் முடியும் எல்லா கோப்புகளையும் புறக்கணிக்க, \"**/*.tif\" ஐப் பயன்படுத்தவும். ஒரு முழுமையான பாதையை புறக்கணிக்க, \"/path/to/ignore/**\" ஐப் பயன்படுத்தவும்.",
"admin_user": "நிர்வாக பயனர்", "admin_user": "நிர்வாக பயனர்",
"asset_offline_description": "இந்த வெளிப்புற நூலக சொத்து இனி வட்டில் காணப்படவில்லை மற்றும் குப்பைக்கு நகர்த்தப்பட்டுள்ளது. கோப்பு நூலகத்திற்குள் நகர்த்தப்பட்டிருந்தால், புதிய தொடர்புடைய சொத்துக்கான உங்கள் காலவரிசையை சரிபார்க்கவும். இந்த சொத்தை மீட்டெடுக்க, கீழேயுள்ள கோப்பு பாதையை இம்மிச் மூலம் அணுகலாம் மற்றும் நூலகத்தை ச்கேன் செய்ய முடியும் என்பதை உறுதிப்படுத்தவும்.", "asset_offline_description": "இந்த வெளிப்புற நூலகச் சொத்து (external library asset) இனி கோப்புப் பதிப்பில் காணப்படவில்லை மற்றும் குப்பைத்தொட்டியில் (trash) நகர்த்தப்பட்டுள்ளது.கோப்பு நூலகத்தில் உள்ளே நகர்த்தப்பட்டிருந்தால், புதிய இணை சொத்தை (corresponding asset) கண்டுபிடிக்க உங்கள் காலவரிசையை (timeline) சரிபார்க்கவும். இந்த சொத்தை மீட்டமைக்க, கீழே உள்ள கோப்புப் பாதை Immich மூலம் அணுகக்கூடியதா என்பதை உறுதி செய்து, நூலகத்தை (library) மீண்டும் ஸ்கேன் செய்யவும்.",
"authentication_settings": "அடையாள உறுதிப்படுத்தல் அமைப்புகள் (செட்டிங்ஸ்)", "authentication_settings": "அங்கீகார அமைப்புகள்",
"authentication_settings_description": "கடவுச்சொல், OAuth, மற்றும் பிற அடையாள அமைப்புகள்", "authentication_settings_description": "அடையாளச் சொல்லுகள் (Password), OAuth மற்றும் பிற அங்கீகார அமைப்புகளை நிர்வகிக்கவும்",
"authentication_settings_disable_all": "எல்லா உள்நுழைவு முறைகளையும் நிச்சயமாக முடக்க விரும்புகிறீர்களா? உள்நுழைவு முற்றிலும் முடக்கப்படும்.", "authentication_settings_disable_all": "நீங்கள் உண்மையில் அனைத்து உள்நுழைவு முறைகளையும் முடக்க விரும்புகிறீர்களா? உள்நுழைவு முழுமையாக முடக்கப்படும்.",
"authentication_settings_reenable": "மீண்டும் இயக்க, <link> சர்வர் கட்டளை</link> பயன்படுத்தவும்.", "authentication_settings_reenable": "மீண்டும் செயல்படுத்த, <link>சேவையகம் கட்டளை</link> பயன்படுத்தவும்.",
"background_task_job": "பின்னணி பணிகள்", "background_task_job": "பின்னணி பணிகள்",
"backup_database": "தரவுத்தள காப்புப்பிரதியை உருவாக்கு", "backup_database": "தரவுத்தள நகல் உருவாக்கவும்",
"backup_database_enable_description": "தரவுத்தள திணிப்புகள் இயக்கவும்", "backup_database_enable_description": "தரவுத்தள நகல்களை இயக்கவும்",
"backup_keep_last_amount": "வைத்திருக்க முந்தைய திணிப்புகள் அளவு", "backup_keep_last_amount": "வைத்திருக்க முந்தைய நகல்களின் அளவு",
"backup_onboarding_1_description": "மேகக்கட்டத்தில் அல்லது மற்றொரு உடல் இடத்தில் ஆஃப்சைட் நகல்.", "backup_onboarding_1_description": "மேகம் அல்லது வேறு இடத்தில் நகல்.",
"backup_onboarding_2_description": "வெவ்வேறு சாதனங்களில் உள்ள நகல் பிரதிகள். இதில் முக்கிய கோப்புகள் மற்றும் அந்தக் கோப்புகளின் நகல் காப்புப்பிரதி ஆகியவை அடங்கும்.", "backup_onboarding_2_description": "வெவ்வேறு சாதனங்களில் உள்ள நகல் பிரதிகள். இதில் முக்கிய கோப்புகள் மற்றும் அந்தக் கோப்புகளின் நகல் காப்புப்பிரதி ஆகியவை அடங்கும்.",
"backup_onboarding_3_description": "உங்கள் தரவின் மொத்த கோப்புகள் அசல் மற்றும் நகல்கள் உட்பட. இதில் 1 வெளிப்புற நகல் மற்றும் 2 சாதனப் பிரதிகள் அடங்கும்.", "backup_onboarding_3_description": "உங்கள் தரவின் மொத்த கோப்புகள் அசல் மற்றும் நகல்கள் உட்பட. இதில் 1 வெளிப்புற நகல் மற்றும் 2 சாதனப் பிரதிகள் அடங்கும்.",
"backup_onboarding_description": "உங்கள் தரவை பாதுகாப்பதற்காக ஒரு <backblaze-link>3-2-1 காப்புப் பிரதி</backblaze-link> பரிந்துரைக்கப்படுகிறது. முழுமையான காப்பு பாதுகாப்பு தீர்விற்காக, நீங்கள் பதிவேற்றிய புகைப்படங்கள்/வீடியோக்கள் மற்றும் Immich தரவுத்தளத்தின் நகல்களையும் வைத்திருக்க வேண்டும்.", "backup_onboarding_description": "உங்கள் தரவை பாதுகாப்பதற்காக ஒரு <backblaze-link>3-2-1 காப்புப் பிரதி</backblaze-link> பரிந்துரைக்கப்படுகிறது. முழுமையான காப்பு பாதுகாப்பு தீர்விற்காக, நீங்கள் பதிவேற்றிய புகைப்படங்கள்/வீடியோக்கள் மற்றும் Immich தரவுத்தளத்தின் நகல்களையும் வைத்திருக்க வேண்டும்.",
@ -56,7 +57,7 @@
"backup_onboarding_parts_title": "3-2-1 காப்புப்பிரதியில் பின்வருவன அடங்கும்:", "backup_onboarding_parts_title": "3-2-1 காப்புப்பிரதியில் பின்வருவன அடங்கும்:",
"backup_onboarding_title": "காப்புப்பிரதிகள்", "backup_onboarding_title": "காப்புப்பிரதிகள்",
"backup_settings": "தரவுத்தள திணிப்பு அமைப்புகள்", "backup_settings": "தரவுத்தள திணிப்பு அமைப்புகள்",
"backup_settings_description": "தரவுத்தள திணிப்பு அமைப்புகளை நிர்வகிக்கவும்", "backup_settings_description": "தரவுத்தள நகல் அமைப்புகளை நிர்வகிக்கவும்",
"cleared_jobs": "முடித்த வேலைகள்: {job}", "cleared_jobs": "முடித்த வேலைகள்: {job}",
"config_set_by_file": "கட்டமைப்பு, தற்போது ஒரு கட்டமைப்பு கோப்பு மூலம் அமைக்கப்பட்டுள்ளது", "config_set_by_file": "கட்டமைப்பு, தற்போது ஒரு கட்டமைப்பு கோப்பு மூலம் அமைக்கப்பட்டுள்ளது",
"confirm_delete_library": "{library} படங்கள் நூலகத்தை நிச்சயமாக நீக்க விரும்புகிறீர்களா?", "confirm_delete_library": "{library} படங்கள் நூலகத்தை நிச்சயமாக நீக்க விரும்புகிறீர்களா?",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "முன்புற காப்புப்பிரதியை இயக்கவும்", "backup_controller_page_turn_on": "முன்புற காப்புப்பிரதியை இயக்கவும்",
"backup_controller_page_uploading_file_info": "கோப்பு தகவலைப் பதிவேற்றுகிறது", "backup_controller_page_uploading_file_info": "கோப்பு தகவலைப் பதிவேற்றுகிறது",
"backup_err_only_album": "ஒரே ஆல்பத்தை அகற்ற முடியாது", "backup_err_only_album": "ஒரே ஆல்பத்தை அகற்ற முடியாது",
"backup_error_sync_failed": "ஒத்திசைவு தோல்வியுற்றது. காப்புப்பிரதியை செயலாக்க முடியாது.",
"backup_info_card_assets": "சொத்துக்கள்", "backup_info_card_assets": "சொத்துக்கள்",
"backup_manual_cancelled": "ரத்து செய்யப்பட்டது", "backup_manual_cancelled": "ரத்து செய்யப்பட்டது",
"backup_manual_in_progress": "ஏற்கனவே முன்னேற்றத்தில் பதிவேற்றவும். சிறிது நேரம் கழித்து முயற்சிக்கவும்", "backup_manual_in_progress": "ஏற்கனவே முன்னேற்றத்தில் பதிவேற்றவும். சிறிது நேரம் கழித்து முயற்சிக்கவும்",

View file

@ -28,6 +28,7 @@
"add_to_album": "Albüme ekle", "add_to_album": "Albüme ekle",
"add_to_album_bottom_sheet_added": "{album} albümüne eklendi", "add_to_album_bottom_sheet_added": "{album} albümüne eklendi",
"add_to_album_bottom_sheet_already_exists": "Zaten {album} albümüne ekli", "add_to_album_bottom_sheet_already_exists": "Zaten {album} albümüne ekli",
"add_to_album_bottom_sheet_some_local_assets": "Bazı yerel öğeler albüme eklenemedi",
"add_to_album_toggle": "{album} için seçimi değiştir", "add_to_album_toggle": "{album} için seçimi değiştir",
"add_to_albums": "Albümlere ekle", "add_to_albums": "Albümlere ekle",
"add_to_albums_count": "{count} albümlerine ekle", "add_to_albums_count": "{count} albümlerine ekle",
@ -574,16 +575,16 @@
"backup_controller_page_background_turn_off": "Arka plan hizmetini kapat", "backup_controller_page_background_turn_off": "Arka plan hizmetini kapat",
"backup_controller_page_background_turn_on": "Arka plan hizmetini aç", "backup_controller_page_background_turn_on": "Arka plan hizmetini aç",
"backup_controller_page_background_wifi": "Sadece Wi-Fi", "backup_controller_page_background_wifi": "Sadece Wi-Fi",
"backup_controller_page_backup": "Yedekle", "backup_controller_page_backup": "Yedek",
"backup_controller_page_backup_selected": "Seçilen: ", "backup_controller_page_backup_selected": "Seçilen: ",
"backup_controller_page_backup_sub": "Yedeklenen öğeler", "backup_controller_page_backup_sub": "Yedeklenen fotoğraflar ve videolar",
"backup_controller_page_created": "Oluşturma tarihi: {date}", "backup_controller_page_created": "Oluşturma tarihi: {date}",
"backup_controller_page_desc_backup": "Uygulamayı açtığınızda yeni öğelerin sunucuya otomatik olarak yüklenmesi için ön planda yedeklemeyi açın.", "backup_controller_page_desc_backup": "Uygulamayı açtığınızda yeni öğelerin sunucuya otomatik olarak yüklenmesi için ön planda yedeklemeyi açın.",
"backup_controller_page_excluded": "Hariç tutuldu: ", "backup_controller_page_excluded": "Hariç tutuldu: ",
"backup_controller_page_failed": "Başarısız ({count})", "backup_controller_page_failed": "Başarısız ({count})",
"backup_controller_page_filename": "Dosya adı: {filename} [{size}]", "backup_controller_page_filename": "Dosya adı: {filename} [{size}]",
"backup_controller_page_id": "KNu: {id}", "backup_controller_page_id": "KNu: {id}",
"backup_controller_page_info": "Yedekleme bilgileri", "backup_controller_page_info": "Yedekleme Bilgileri",
"backup_controller_page_none_selected": "Hiçbiri seçilmedi", "backup_controller_page_none_selected": "Hiçbiri seçilmedi",
"backup_controller_page_remainder": "Kalan", "backup_controller_page_remainder": "Kalan",
"backup_controller_page_remainder_sub": "Seçili albümlerden yedeklenecek kalan öğeler", "backup_controller_page_remainder_sub": "Seçili albümlerden yedeklenecek kalan öğeler",
@ -598,6 +599,7 @@
"backup_controller_page_turn_on": "Ön planda yedeklemeyi aç", "backup_controller_page_turn_on": "Ön planda yedeklemeyi aç",
"backup_controller_page_uploading_file_info": "Dosya bilgisi yükleniyor", "backup_controller_page_uploading_file_info": "Dosya bilgisi yükleniyor",
"backup_err_only_album": "Tek albüm kaldırılamaz", "backup_err_only_album": "Tek albüm kaldırılamaz",
"backup_error_sync_failed": "Senkronizasyon başarısız. Yedekleme işlemi gerçekleştirilemiyor.",
"backup_info_card_assets": "öğeler", "backup_info_card_assets": "öğeler",
"backup_manual_cancelled": "İptal Edildi", "backup_manual_cancelled": "İptal Edildi",
"backup_manual_in_progress": "Yükleme halihazırda devam ediyor. Bir süre sonra deneyin", "backup_manual_in_progress": "Yükleme halihazırda devam ediyor. Bir süre sonra deneyin",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "開啟前台備份", "backup_controller_page_turn_on": "開啟前台備份",
"backup_controller_page_uploading_file_info": "上傳中的檔案資訊", "backup_controller_page_uploading_file_info": "上傳中的檔案資訊",
"backup_err_only_album": "不能移除唯一的相簿", "backup_err_only_album": "不能移除唯一的相簿",
"backup_error_sync_failed": "同步失敗。 無法處理備份。",
"backup_info_card_assets": "個媒體", "backup_info_card_assets": "個媒體",
"backup_manual_cancelled": "已取消", "backup_manual_cancelled": "已取消",
"backup_manual_in_progress": "上傳正在進行中,請稍後再試", "backup_manual_in_progress": "上傳正在進行中,請稍後再試",

View file

@ -599,6 +599,7 @@
"backup_controller_page_turn_on": "开启前台备份", "backup_controller_page_turn_on": "开启前台备份",
"backup_controller_page_uploading_file_info": "正在上传中的文件信息", "backup_controller_page_uploading_file_info": "正在上传中的文件信息",
"backup_err_only_album": "不能移除唯一的一个相册", "backup_err_only_album": "不能移除唯一的一个相册",
"backup_error_sync_failed": "同步失败。无法处理备份。",
"backup_info_card_assets": "项", "backup_info_card_assets": "项",
"backup_manual_cancelled": "已取消", "backup_manual_cancelled": "已取消",
"backup_manual_in_progress": "上传正在进行中,请稍后再试", "backup_manual_in_progress": "上传正在进行中,请稍后再试",

View file

@ -1,6 +1,7 @@
import os import os
import signal import signal
import subprocess import subprocess
from ipaddress import ip_address
from pathlib import Path from pathlib import Path
from .config import log, non_prefixed_settings, settings from .config import log, non_prefixed_settings, settings
@ -12,6 +13,19 @@ else:
module_dir = Path(__file__).parent module_dir = Path(__file__).parent
def is_ipv6(host: str) -> bool:
try:
return ip_address(host).version == 6
except ValueError:
return False
bind_host = non_prefixed_settings.immich_host
if is_ipv6(bind_host):
bind_host = f"[{bind_host}]"
bind_address = f"{bind_host}:{non_prefixed_settings.immich_port}"
try: try:
with subprocess.Popen( with subprocess.Popen(
[ [
@ -24,7 +38,7 @@ try:
"-c", "-c",
module_dir / "gunicorn_conf.py", module_dir / "gunicorn_conf.py",
"-b", "-b",
f"{non_prefixed_settings.immich_host}:{non_prefixed_settings.immich_port}", bind_address,
"-w", "-w",
str(settings.workers), str(settings.workers),
"-t", "-t",

View file

@ -1,6 +1,6 @@
[project] [project]
name = "immich-ml" name = "immich-ml"
version = "1.144.1" version = "2.0.1"
description = "" description = ""
authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }] authors = [{ name = "Hau Tran", email = "alex.tran1502@gmail.com" }]
requires-python = ">=3.10,<4.0" requires-python = ">=3.10,<4.0"

View file

@ -1,12 +1,22 @@
import os import os
import sys import sys
from ipaddress import ip_address
import requests import requests
port = os.getenv("IMMICH_PORT", 3003) port = os.getenv("IMMICH_PORT", 3003)
host = os.getenv("IMMICH_HOST", "0.0.0.0") host = os.getenv("IMMICH_HOST", "0.0.0.0")
def is_ipv6(host: str) -> bool:
try:
return ip_address(host).version == 6
except ValueError:
return False
host = "localhost" if host == "0.0.0.0" else host host = "localhost" if host == "0.0.0.0" else host
host = f"[{host}]" if is_ipv6(host) else host
try: try:
response = requests.get(f"http://{host}:{port}/ping", timeout=2) response = requests.get(f"http://{host}:{port}/ping", timeout=2)

View file

@ -1,7 +1,7 @@
[tools] [tools]
node = "22.19.0" node = "22.20.0"
flutter = "3.35.4" flutter = "3.35.5"
pnpm = "10.15.1" pnpm = "10.18.0"
[tools."github:CQLabs/homebrew-dcm"] [tools."github:CQLabs/homebrew-dcm"]
version = "1.30.0" version = "1.30.0"
@ -278,12 +278,7 @@ run = "prettier --write ."
[tasks."web:lint"] [tasks."web:lint"]
env._.path = "web/node_modules/.bin" env._.path = "web/node_modules/.bin"
dir = "web" dir = "web"
run = "eslint . --max-warnings 0" run = "eslint . --max-warnings 0 --concurrency 4"
[tasks."web:lint-p"]
env._.path = "web/node_modules/.bin"
dir = "web"
run = "eslint-p . --max-warnings 0 --concurrency=4"
[tasks."web:lint-fix"] [tasks."web:lint-fix"]
run = "mise run web:lint --fix" run = "mise run web:lint --fix"

View file

@ -84,4 +84,4 @@ Below is how your code needs to be structured:
## Contributing ## Contributing
Please refer to the [architecture](https://immich.app/docs/developer/architecture/) for contributing to the mobile app! Please refer to the [architecture](https://docs.immich.app/developer/architecture/) for contributing to the mobile app!

View file

@ -1,8 +1,11 @@
package app.alextran.immich package app.alextran.immich
import android.app.Application import android.app.Application
import android.os.Handler
import android.os.Looper
import androidx.work.Configuration import androidx.work.Configuration
import androidx.work.WorkManager import androidx.work.WorkManager
import app.alextran.immich.background.BackgroundEngineLock
import app.alextran.immich.background.BackgroundWorkerApiImpl import app.alextran.immich.background.BackgroundWorkerApiImpl
class ImmichApp : Application() { class ImmichApp : Application() {
@ -17,6 +20,11 @@ class ImmichApp : Application() {
// As a workaround, we also run a backup check when initializing the application // As a workaround, we also run a backup check when initializing the application
ContentObserverWorker.startBackupWorker(context = this, delayMilliseconds = 0) ContentObserverWorker.startBackupWorker(context = this, delayMilliseconds = 0)
BackgroundWorkerApiImpl.enqueueBackgroundWorker(this) Handler(Looper.getMainLooper()).postDelayed({
// We can only check the engine count and not the status of the lock here,
// as the previous start might have been killed without unlocking.
if (BackgroundEngineLock.connectEngines > 0) return@postDelayed
BackgroundWorkerApiImpl.enqueueBackgroundWorker(this)
}, 5000)
} }
} }

View file

@ -8,43 +8,46 @@ import java.util.concurrent.atomic.AtomicInteger
private const val TAG = "BackgroundEngineLock" private const val TAG = "BackgroundEngineLock"
class BackgroundEngineLock(context: Context) : BackgroundWorkerLockApi, FlutterPlugin { class BackgroundEngineLock(context: Context) : BackgroundWorkerLockApi, FlutterPlugin {
private val ctx: Context = context.applicationContext private val ctx: Context = context.applicationContext
companion object { companion object {
private var engineCount = AtomicInteger(0) private var engineCount = AtomicInteger(0)
private fun checkAndEnforceBackgroundLock(ctx: Context) { val connectEngines: Int
// work manager task is running while the main app is opened, cancel the worker get() = engineCount.get()
if (BackgroundWorkerPreferences(ctx).isLocked() &&
engineCount.get() > 1 && private fun checkAndEnforceBackgroundLock(ctx: Context) {
BackgroundWorkerApiImpl.isBackgroundWorkerRunning() // work manager task is running while the main app is opened, cancel the worker
) { if (BackgroundWorkerPreferences(ctx).isLocked() &&
Log.i(TAG, "Background worker is locked, cancelling the background worker") connectEngines > 1 &&
BackgroundWorkerApiImpl.cancelBackgroundWorker(ctx) BackgroundWorkerApiImpl.isBackgroundWorkerRunning()
} ) {
} Log.i(TAG, "Background worker is locked, cancelling the background worker")
BackgroundWorkerApiImpl.cancelBackgroundWorker(ctx)
}
} }
}
override fun lock() { override fun lock() {
BackgroundWorkerPreferences(ctx).setLocked(true) BackgroundWorkerPreferences(ctx).setLocked(true)
checkAndEnforceBackgroundLock(ctx) checkAndEnforceBackgroundLock(ctx)
Log.i(TAG, "Background worker is locked") Log.i(TAG, "Background worker is locked")
} }
override fun unlock() { override fun unlock() {
BackgroundWorkerPreferences(ctx).setLocked(false) BackgroundWorkerPreferences(ctx).setLocked(false)
Log.i(TAG, "Background worker is unlocked") Log.i(TAG, "Background worker is unlocked")
} }
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
checkAndEnforceBackgroundLock(binding.applicationContext) checkAndEnforceBackgroundLock(binding.applicationContext)
engineCount.incrementAndGet() engineCount.incrementAndGet()
Log.i(TAG, "Flutter engine attached. Attached Engines count: $engineCount") Log.i(TAG, "Flutter engine attached. Attached Engines count: $engineCount")
} }
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
engineCount.decrementAndGet() engineCount.decrementAndGet()
Log.i(TAG, "Flutter engine detached. Attached Engines count: $engineCount") Log.i(TAG, "Flutter engine detached. Attached Engines count: $engineCount")
} }
} }

View file

@ -136,6 +136,7 @@ private open class BackgroundWorkerPigeonCodec : StandardMessageCodec() {
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
interface BackgroundWorkerFgHostApi { interface BackgroundWorkerFgHostApi {
fun enable() fun enable()
fun saveNotificationMessage(title: String, body: String)
fun configure(settings: BackgroundWorkerSettings) fun configure(settings: BackgroundWorkerSettings)
fun disable() fun disable()
@ -164,6 +165,25 @@ interface BackgroundWorkerFgHostApi {
channel.setMessageHandler(null) channel.setMessageHandler(null)
} }
} }
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.saveNotificationMessage$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val titleArg = args[0] as String
val bodyArg = args[1] as String
val wrapped: List<Any?> = try {
api.saveNotificationMessage(titleArg, bodyArg)
listOf(null)
} catch (exception: Throwable) {
BackgroundWorkerPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run { run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.configure$separatedMessageChannelSuffix", codec) val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerFgHostApi.configure$separatedMessageChannelSuffix", codec)
if (api != null) { if (api != null) {
@ -204,7 +224,6 @@ interface BackgroundWorkerFgHostApi {
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ /** Generated interface from Pigeon that represents a handler of messages from Flutter. */
interface BackgroundWorkerBgHostApi { interface BackgroundWorkerBgHostApi {
fun onInitialized() fun onInitialized()
fun showNotification(title: String, content: String)
fun close() fun close()
companion object { companion object {
@ -232,25 +251,6 @@ interface BackgroundWorkerBgHostApi {
channel.setMessageHandler(null) channel.setMessageHandler(null)
} }
} }
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.showNotification$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val titleArg = args[0] as String
val contentArg = args[1] as String
val wrapped: List<Any?> = try {
api.showNotification(titleArg, contentArg)
listOf(null)
} catch (exception: Throwable) {
BackgroundWorkerPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run { run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.close$separatedMessageChannelSuffix", codec) val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.immich_mobile.BackgroundWorkerBgHostApi.close$separatedMessageChannelSuffix", codec)
if (api != null) { if (api != null) {

View file

@ -73,6 +73,8 @@ class BackgroundWorker(context: Context, params: WorkerParameters) :
NotificationManager.IMPORTANCE_LOW NotificationManager.IMPORTANCE_LOW
) )
notificationManager.createNotificationChannel(notificationChannel) notificationManager.createNotificationChannel(notificationChannel)
val notificationConfig = BackgroundWorkerPreferences(ctx).getNotificationConfig()
showNotification(notificationConfig.first, notificationConfig.second)
loader.ensureInitializationCompleteAsync(ctx, null, Handler(Looper.getMainLooper())) { loader.ensureInitializationCompleteAsync(ctx, null, Handler(Looper.getMainLooper())) {
engine = FlutterEngine(ctx) engine = FlutterEngine(ctx)
@ -109,7 +111,7 @@ class BackgroundWorker(context: Context, params: WorkerParameters) :
} }
// TODO: Move this to a separate NotificationManager class // TODO: Move this to a separate NotificationManager class
override fun showNotification(title: String, content: String) { private fun showNotification(title: String, content: String) {
val notification = NotificationCompat.Builder(applicationContext, NOTIFICATION_CHANNEL_ID) val notification = NotificationCompat.Builder(applicationContext, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon) .setSmallIcon(R.drawable.notification_icon)
.setOnlyAlertOnce(true) .setOnlyAlertOnce(true)

View file

@ -20,6 +20,10 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
enqueueMediaObserver(ctx) enqueueMediaObserver(ctx)
} }
override fun saveNotificationMessage(title: String, body: String) {
BackgroundWorkerPreferences(ctx).updateNotificationConfig(title, body)
}
override fun configure(settings: BackgroundWorkerSettings) { override fun configure(settings: BackgroundWorkerSettings) {
BackgroundWorkerPreferences(ctx).updateSettings(settings) BackgroundWorkerPreferences(ctx).updateSettings(settings)
enqueueMediaObserver(ctx) enqueueMediaObserver(ctx)

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