Compare commits
306 Commits
v1.116.0
...
mobile/nat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
284f8c035e | ||
|
|
b461318641 | ||
|
|
7ed2c68c46 | ||
|
|
338e5a8e5c | ||
|
|
ba499d9f54 | ||
|
|
4dbe2cc662 | ||
|
|
0da5146e11 | ||
|
|
0876897843 | ||
|
|
7bf5a19971 | ||
|
|
6553e4d0be | ||
|
|
de791153a0 | ||
|
|
e6aa35af79 | ||
|
|
aef99c4c04 | ||
|
|
3551407d95 | ||
|
|
6bfc20ef95 | ||
|
|
eadcbd52fb | ||
|
|
fed882a28a | ||
|
|
cdabd08139 | ||
|
|
b95bc32310 | ||
|
|
b9096f3e99 | ||
|
|
5ac236d6fd | ||
|
|
458f2acf42 | ||
|
|
5b2cd704d3 | ||
|
|
0130052de5 | ||
|
|
16027678ee | ||
|
|
343cdcfeed | ||
|
|
a28b92b3cc | ||
|
|
066682f48d | ||
|
|
7d933ec97a | ||
|
|
30d42e571c | ||
|
|
318ab756cb | ||
|
|
9d75c5b999 | ||
|
|
40fbef50cf | ||
|
|
7961435d36 | ||
|
|
92ad03615c | ||
|
|
33409a8cd0 | ||
|
|
244c8cb4d4 | ||
|
|
0d62ff11f1 | ||
|
|
ae2992a6d8 | ||
|
|
952c6be6ea | ||
|
|
0f668fd5c6 | ||
|
|
19eb3ed8b9 | ||
|
|
2efba6326d | ||
|
|
0230dc284b | ||
|
|
a39a1cfffa | ||
|
|
f776e049e9 | ||
|
|
37e437a568 | ||
|
|
2c86da07c6 | ||
|
|
4b9e460db5 | ||
|
|
143ee0bc34 | ||
|
|
68a4cc25dc | ||
|
|
e74ddca6c0 | ||
|
|
02819dc079 | ||
|
|
6a011a4595 | ||
|
|
e029190a5d | ||
|
|
00dd9419a5 | ||
|
|
96e97278d3 | ||
|
|
e1d968d1b3 | ||
|
|
db69361f19 | ||
|
|
490fcc5591 | ||
|
|
921b7cbc8d | ||
|
|
044c3e93f8 | ||
|
|
8449e78c8f | ||
|
|
f8a2bcee79 | ||
|
|
9204cd6a21 | ||
|
|
988d527212 | ||
|
|
a70ed7c7f6 | ||
|
|
88d85eff0a | ||
|
|
d95b474e58 | ||
|
|
43d18ccc36 | ||
|
|
fb995816a1 | ||
|
|
151ba9f1d9 | ||
|
|
bc06863d28 | ||
|
|
5d9b4b4532 | ||
|
|
a1dd587590 | ||
|
|
7e9fb5df5e | ||
|
|
1ec9a60e41 | ||
|
|
a76c39812f | ||
|
|
c124cf9ace | ||
|
|
110546bab2 | ||
|
|
a93fda8e0d | ||
|
|
d455a547cc | ||
|
|
1ef2804d20 | ||
|
|
d40cbe4c5f | ||
|
|
e98acc976e | ||
|
|
62e0658e5a | ||
|
|
0d4a18151d | ||
|
|
45c86e95e8 | ||
|
|
13d2febc33 | ||
|
|
0cb9c0d20d | ||
|
|
c6227b49ff | ||
|
|
84e6e276bf | ||
|
|
e6a666f1d3 | ||
|
|
16f2364e93 | ||
|
|
21d7cf6de6 | ||
|
|
c77345637b | ||
|
|
b7cd770831 | ||
|
|
791c37d2cc | ||
|
|
d137fc3eb6 | ||
|
|
b411e30796 | ||
|
|
56bebd01df | ||
|
|
45517ab7ae | ||
|
|
ee0130a58b | ||
|
|
62e55f3db9 | ||
|
|
8c38d22f42 | ||
|
|
39b571a95c | ||
|
|
c9c0212ca9 | ||
|
|
4a2a7b7735 | ||
|
|
76c0b964eb | ||
|
|
e1e3ae811d | ||
|
|
3fb5adb31c | ||
|
|
b1149881bd | ||
|
|
12628b80bc | ||
|
|
23646f0d55 | ||
|
|
c8f672f494 | ||
|
|
0eabb3ef80 | ||
|
|
6b2f23b5a3 | ||
|
|
57704ba5a7 | ||
|
|
274381deaa | ||
|
|
7011231c4c | ||
|
|
e3fc4d7b0a | ||
|
|
d9949434f6 | ||
|
|
3d971f69dc | ||
|
|
bb694aeeeb | ||
|
|
3f663106e8 | ||
|
|
79acbc1d7b | ||
|
|
01a9cda15d | ||
|
|
8ac40a933a | ||
|
|
51d4899cd1 | ||
|
|
e8015dc7d7 | ||
|
|
782ba48470 | ||
|
|
c266465317 | ||
|
|
426008b714 | ||
|
|
a17d34b186 | ||
|
|
263d2ba161 | ||
|
|
ece4553321 | ||
|
|
5bb7854f4f | ||
|
|
7d3ed6bd55 | ||
|
|
c653c48ed2 | ||
|
|
240de1239e | ||
|
|
edd7dfb5d8 | ||
|
|
4c55597478 | ||
|
|
7e49b0c875 | ||
|
|
e57bd94f04 | ||
|
|
8eb79805ae | ||
|
|
0a3bfd5cc3 | ||
|
|
f2b799cd6f | ||
|
|
6d56927c2c | ||
|
|
8f69d9d0ec | ||
|
|
0985d7f3c4 | ||
|
|
ee50d0b42a | ||
|
|
b8524680f6 | ||
|
|
22a2bfc812 | ||
|
|
7a78c3372c | ||
|
|
452ce73e7f | ||
|
|
346a0847ef | ||
|
|
f59b813ffe | ||
|
|
1193adf0f5 | ||
|
|
e7397f35c9 | ||
|
|
f29fb1655a | ||
|
|
9bdfb41e9c | ||
|
|
5a3e352950 | ||
|
|
e183ff6feb | ||
|
|
20b4d281bb | ||
|
|
0b48d46402 | ||
|
|
3b7bf76db9 | ||
|
|
930df46f74 | ||
|
|
8daa8073ae | ||
|
|
97edf90889 | ||
|
|
24e266cd52 | ||
|
|
79ae4e211b | ||
|
|
bd779ff437 | ||
|
|
94048dedbd | ||
|
|
ee461e5910 | ||
|
|
4ce49e4666 | ||
|
|
1baa49edb7 | ||
|
|
53358c768c | ||
|
|
e9813315e7 | ||
|
|
b59abdff3d | ||
|
|
465f4639da | ||
|
|
b7dcc97712 | ||
|
|
057510af0a | ||
|
|
7561d41a6a | ||
|
|
360e7d6d7a | ||
|
|
e1540c8dfd | ||
|
|
1a72602ff9 | ||
|
|
f7ad6efc4a | ||
|
|
27c04f9d26 | ||
|
|
4780bb4fcd | ||
|
|
3ba2602664 | ||
|
|
08d428cbce | ||
|
|
9d0f03808c | ||
|
|
f5e0cdedbc | ||
|
|
9a6fd1c3ff | ||
|
|
bff3690a2f | ||
|
|
d2800a647c | ||
|
|
d47def41d3 | ||
|
|
34305b2eae | ||
|
|
a11d45458b | ||
|
|
60e0698110 | ||
|
|
48c6c1ad2f | ||
|
|
58f14f27cf | ||
|
|
680bf34042 | ||
|
|
bd826b0b9b | ||
|
|
063969ca05 | ||
|
|
5b00bc499f | ||
|
|
94d213bbb9 | ||
|
|
1b62c99b9e | ||
|
|
b4bf1bbb3c | ||
|
|
6f86c2f372 | ||
|
|
4bb42c4a25 | ||
|
|
a8d16feb32 | ||
|
|
52c700e9b0 | ||
|
|
c5c492eb4f | ||
|
|
a5e9adb593 | ||
|
|
9d9bf1c88d | ||
|
|
0f3b8b67fe | ||
|
|
6bbaba7866 | ||
|
|
5d0a4bb1a5 | ||
|
|
7ee0221c8e | ||
|
|
08db817d14 | ||
|
|
dc18731bab | ||
|
|
4adedea128 | ||
|
|
bb3b4c8086 | ||
|
|
2c87683fd4 | ||
|
|
9edc9d6151 | ||
|
|
3ac00b0ffa | ||
|
|
e2bf6808ca | ||
|
|
0eb77147ef | ||
|
|
3ddb5b8733 | ||
|
|
2c8c3651de | ||
|
|
db1623f43f | ||
|
|
892a35acb5 | ||
|
|
bf43c32dbf | ||
|
|
68930cc42c | ||
|
|
0454863c1e | ||
|
|
432bcbbd1a | ||
|
|
1700de909e | ||
|
|
35bb2e786f | ||
|
|
31c0dfb681 | ||
|
|
6b8462402b | ||
|
|
9821b4608c | ||
|
|
8ee825964d | ||
|
|
355ed5be72 | ||
|
|
3c9413fef3 | ||
|
|
681b06a508 | ||
|
|
e7862fc0f0 | ||
|
|
4ea281f854 | ||
|
|
1b7e4b4e52 | ||
|
|
f463bd18ef | ||
|
|
6c7d51da34 | ||
|
|
e5457ac8ee | ||
|
|
b0bcc6c03e | ||
|
|
63437529e1 | ||
|
|
4d20b11f25 | ||
|
|
1c3603e23b | ||
|
|
eb3ac09e0d | ||
|
|
305fc77ebe | ||
|
|
d46e50213a | ||
|
|
49486f2d26 | ||
|
|
eac189a9e5 | ||
|
|
3b968707a7 | ||
|
|
67aa124de9 | ||
|
|
076d8808bb | ||
|
|
67ddba0b13 | ||
|
|
3eccff4306 | ||
|
|
ecb5cb00eb | ||
|
|
06048b6db9 | ||
|
|
f0ad6627a5 | ||
|
|
14e6d23eeb | ||
|
|
d772cc6c6a | ||
|
|
fe33732958 | ||
|
|
a019fb670e | ||
|
|
f63d251490 | ||
|
|
dfc2d5002b | ||
|
|
47821cda35 | ||
|
|
15c04d3056 | ||
|
|
a2d457b01d | ||
|
|
95c67949f7 | ||
|
|
5bcbe77fb6 | ||
|
|
7adb35e59e | ||
|
|
2f13db51df | ||
|
|
9b309e84c9 | ||
|
|
fa9bb8074c | ||
|
|
2bcd27e166 | ||
|
|
995f0fda47 | ||
|
|
4248594ac5 | ||
|
|
7579bc4359 | ||
|
|
8bbcd5c31e | ||
|
|
4ed1517e60 | ||
|
|
789937d4a2 | ||
|
|
dbe542803f | ||
|
|
7c15e11efc | ||
|
|
03aa346020 | ||
|
|
3a37fc8bfd | ||
|
|
36ee72cd87 | ||
|
|
12da250028 | ||
|
|
5b282733fe | ||
|
|
971ba63447 | ||
|
|
d5ee823fbc | ||
|
|
26f33652e1 | ||
|
|
c86fa81e47 | ||
|
|
42ad3e6bb0 | ||
|
|
a6e703ed6b | ||
|
|
b6f871786c | ||
|
|
62a490eca2 |
7
.github/dependabot.yml
vendored
@@ -1,7 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
4
.github/release.yml
vendored
@@ -4,6 +4,10 @@ changelog:
|
||||
labels:
|
||||
- changelog:breaking-change
|
||||
|
||||
- title: 🫥 Deprecated Changes
|
||||
labels:
|
||||
- changelog:deprecated
|
||||
|
||||
- title: 🔒 Security
|
||||
labels:
|
||||
- changelog:security
|
||||
|
||||
4
.github/workflows/cli.yml
vendored
@@ -59,7 +59,7 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.6.1
|
||||
uses: docker/setup-buildx-action@v3.7.1
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
|
||||
|
||||
- name: Build and push image
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
uses: docker/build-push-action@v6.9.0
|
||||
with:
|
||||
file: cli/Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
||||
8
.github/workflows/docker-cleanup.yml
vendored
@@ -22,7 +22,7 @@ concurrency:
|
||||
jobs:
|
||||
cleanup-images:
|
||||
name: Cleanup Stale Images Tags for ${{ matrix.primary-name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
steps:
|
||||
- name: Clean temporary images
|
||||
if: "${{ env.TOKEN != '' }}"
|
||||
uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0
|
||||
uses: stumpylog/image-cleaner-action/ephemeral@v0.9.0
|
||||
with:
|
||||
token: "${{ env.TOKEN }}"
|
||||
owner: "immich-app"
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
|
||||
cleanup-untagged-images:
|
||||
name: Cleanup Untagged Images Tags for ${{ matrix.primary-name }}
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
needs:
|
||||
- cleanup-images
|
||||
strategy:
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
steps:
|
||||
- name: Clean untagged images
|
||||
if: "${{ env.TOKEN != '' }}"
|
||||
uses: stumpylog/image-cleaner-action/untagged@v0.8.0
|
||||
uses: stumpylog/image-cleaner-action/untagged@v0.9.0
|
||||
with:
|
||||
token: "${{ env.TOKEN }}"
|
||||
owner: "immich-app"
|
||||
|
||||
9
.github/workflows/docker.yml
vendored
@@ -33,6 +33,7 @@ jobs:
|
||||
- 'server/**'
|
||||
- 'openapi/**'
|
||||
- 'web/**'
|
||||
- 'i18n/**'
|
||||
machine-learning:
|
||||
- 'machine-learning/**'
|
||||
|
||||
@@ -124,7 +125,7 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.6.1
|
||||
uses: docker/setup-buildx-action@v3.7.1
|
||||
|
||||
- name: Login to Docker Hub
|
||||
# Only push to Docker Hub when making a release
|
||||
@@ -173,7 +174,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Build and push image
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
uses: docker/build-push-action@v6.9.0
|
||||
with:
|
||||
context: ${{ env.context }}
|
||||
file: ${{ env.file }}
|
||||
@@ -215,7 +216,7 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.6.1
|
||||
uses: docker/setup-buildx-action@v3.7.1
|
||||
|
||||
- name: Login to Docker Hub
|
||||
# Only push to Docker Hub when making a release
|
||||
@@ -264,7 +265,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Build and push image
|
||||
uses: docker/build-push-action@v6.7.0
|
||||
uses: docker/build-push-action@v6.9.0
|
||||
with:
|
||||
context: ${{ env.context }}
|
||||
file: ${{ env.file }}
|
||||
|
||||
2
.github/workflows/docs-build.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
- 'docs/**'
|
||||
- name: Check if we should force jobs to run
|
||||
id: should_force
|
||||
run: echo "should_force=${{ github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
|
||||
run: echo "should_force=${{ github.event_name == 'release' || github.ref_name == 'main' }}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
build:
|
||||
name: Docs Build
|
||||
|
||||
2
.github/workflows/docs-destroy.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
tg_version: "0.58.12"
|
||||
tofu_version: "1.7.1"
|
||||
tg_dir: "deployment/modules/cloudflare/docs"
|
||||
tg_command: "destroy"
|
||||
tg_command: "destroy -refresh=false"
|
||||
|
||||
- name: Comment
|
||||
uses: actions-cool/maintain-one-comment@v3
|
||||
|
||||
52
.github/workflows/fix-format.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
name: Fix formatting
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [labeled]
|
||||
|
||||
jobs:
|
||||
fix-formatting:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.label.name == 'fix:formatting' }}
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: './server/.nvmrc'
|
||||
|
||||
- name: Fix formatting
|
||||
run: make install-all && make format-all
|
||||
|
||||
- name: Commit and push
|
||||
uses: EndBug/add-and-commit@v9
|
||||
with:
|
||||
default_author: github_actions
|
||||
message: 'chore: fix formatting'
|
||||
|
||||
- name: Remove label
|
||||
uses: actions/github-script@v7
|
||||
if: always()
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.removeLabel({
|
||||
issue_number: context.payload.pull_request.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
name: 'fix:formatting'
|
||||
})
|
||||
|
||||
2
.github/workflows/pr-label-validation.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Require PR to have a changelog label
|
||||
uses: mheap/github-action-required-labels@v5
|
||||
|
||||
23
.github/workflows/test.yml
vendored
@@ -30,6 +30,7 @@ jobs:
|
||||
filters: |
|
||||
web:
|
||||
- 'web/**'
|
||||
- 'i18n/**'
|
||||
- 'open-api/typescript-sdk/**'
|
||||
server:
|
||||
- 'server/**'
|
||||
@@ -80,7 +81,7 @@ jobs:
|
||||
run: npm run check
|
||||
if: ${{ !cancelled() }}
|
||||
|
||||
- name: Run unit tests & coverage
|
||||
- name: Run small tests & coverage
|
||||
run: npm run test:cov
|
||||
if: ${{ !cancelled() }}
|
||||
|
||||
@@ -243,6 +244,26 @@ jobs:
|
||||
run: npm run check
|
||||
if: ${{ !cancelled() }}
|
||||
|
||||
medium-tests-server:
|
||||
name: Medium Tests (Server)
|
||||
needs: pre-job
|
||||
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
|
||||
runs-on: mich
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
|
||||
- name: Production build
|
||||
if: ${{ !cancelled() }}
|
||||
run: docker compose -f e2e/docker-compose.yml build
|
||||
|
||||
- name: Run medium tests
|
||||
if: ${{ !cancelled() }}
|
||||
run: make test-medium
|
||||
|
||||
e2e-tests-server-cli:
|
||||
name: End-to-End Tests (Server & CLI)
|
||||
needs: pre-job
|
||||
|
||||
2
.gitignore
vendored
@@ -21,3 +21,5 @@ mobile/openapi/.openapi-generator/FILES
|
||||
open-api/typescript-sdk/build
|
||||
mobile/android/fastlane/report.xml
|
||||
mobile/ios/fastlane/report.xml
|
||||
|
||||
vite.config.js.timestamp-*
|
||||
|
||||
12
Makefile
@@ -66,6 +66,18 @@ test-e2e:
|
||||
docker compose -f ./e2e/docker-compose.yml build
|
||||
npm --prefix e2e run test
|
||||
npm --prefix e2e run test:web
|
||||
test-medium:
|
||||
docker run \
|
||||
--rm \
|
||||
-v ./server/src:/usr/src/app/src \
|
||||
-v ./server/test:/usr/src/app/test \
|
||||
-v ./server/vitest.config.medium.mjs:/usr/src/app/vitest.config.medium.mjs \
|
||||
-v ./server/tsconfig.json:/usr/src/app/tsconfig.json \
|
||||
-e NODE_ENV=development \
|
||||
immich-server:latest \
|
||||
-c "npm ci && npm run test:medium -- --run"
|
||||
test-medium-dev:
|
||||
docker exec -it immich_server /bin/sh -c "npm run test:medium"
|
||||
|
||||
build-all: $(foreach M,$(MODULES),build-$M) ;
|
||||
install-all: $(foreach M,$(MODULES),install-$M) ;
|
||||
|
||||
35
README.md
@@ -17,23 +17,24 @@
|
||||
<img src="design/immich-screenshots.png" title="Main Screenshot">
|
||||
</a>
|
||||
<br/>
|
||||
|
||||
<p align="center">
|
||||
|
||||
<a href="readme_i18n/README_ca_ES.md">Català</a>
|
||||
<a href="readme_i18n/README_es_ES.md">Español</a>
|
||||
<a href="readme_i18n/README_fr_FR.md">Français</a>
|
||||
<a href="readme_i18n/README_it_IT.md">Italiano</a>
|
||||
<a href="readme_i18n/README_ja_JP.md">日本語</a>
|
||||
<a href="readme_i18n/README_ko_KR.md">한국어</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_tr_TR.md">Türkçe</a>
|
||||
<a href="readme_i18n/README_zh_CN.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_sv_SE.md">Svenska</a>
|
||||
<a href="readme_i18n/README_ar_JO.md">العربية</a>
|
||||
|
||||
<a href="readme_i18n/README_ca_ES.md">Català</a>
|
||||
<a href="readme_i18n/README_es_ES.md">Español</a>
|
||||
<a href="readme_i18n/README_fr_FR.md">Français</a>
|
||||
<a href="readme_i18n/README_it_IT.md">Italiano</a>
|
||||
<a href="readme_i18n/README_ja_JP.md">日本語</a>
|
||||
<a href="readme_i18n/README_ko_KR.md">한국어</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_tr_TR.md">Türkçe</a>
|
||||
<a href="readme_i18n/README_zh_CN.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_sv_SE.md">Svenska</a>
|
||||
<a href="readme_i18n/README_ar_JO.md">العربية</a>
|
||||
<a href="readme_i18n/README_vi_VN.md">Tiếng Việt</a>
|
||||
<a href="readme_i18n/README_th_TH.md">ภาษาไทย</a>
|
||||
</p>
|
||||
|
||||
## Disclaimer
|
||||
@@ -101,6 +102,8 @@ For the mobile app, you can use `https://demo.immich.app/api` for the `Server En
|
||||
| Offline support | Yes | No |
|
||||
| Read-only gallery | Yes | Yes |
|
||||
| Stacked Photos | Yes | Yes |
|
||||
| Tags | No | Yes |
|
||||
| Folder View | No | Yes |
|
||||
|
||||
## Translations
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
20.17.0
|
||||
22.11.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:20.17.0-alpine3.20@sha256:2d07db07a2df6830718ae2a47db6fedce6745f5bcd174c398f2acdda90a11c03 AS core
|
||||
FROM node:22.10.0-alpine3.20@sha256:fc95a044b87e95507c60c1f8c829e5d98ddf46401034932499db370c494ef0ff AS core
|
||||
|
||||
WORKDIR /usr/src/open-api/typescript-sdk
|
||||
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
|
||||
|
||||
457
cli/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@immich/cli",
|
||||
"version": "2.2.20",
|
||||
"version": "2.2.28",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@immich/cli",
|
||||
"version": "2.2.20",
|
||||
"version": "2.2.28",
|
||||
"license": "GNU Affero General Public License version 3",
|
||||
"dependencies": {
|
||||
"fast-glob": "^3.3.2",
|
||||
@@ -24,7 +24,7 @@
|
||||
"@types/cli-progress": "^3.11.0",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/mock-fs": "^4.13.1",
|
||||
"@types/node": "^20.16.5",
|
||||
"@types/node": "^22.8.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
||||
"@typescript-eslint/parser": "^8.0.0",
|
||||
"@vitest/coverage-v8": "^2.0.5",
|
||||
@@ -43,7 +43,7 @@
|
||||
"vite": "^5.0.12",
|
||||
"vite-tsconfig-paths": "^5.0.0",
|
||||
"vitest": "^2.0.5",
|
||||
"vitest-fetch-mock": "^0.3.0",
|
||||
"vitest-fetch-mock": "^0.4.0",
|
||||
"yaml": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -52,14 +52,14 @@
|
||||
},
|
||||
"../open-api/typescript-sdk": {
|
||||
"name": "@immich/sdk",
|
||||
"version": "1.116.0",
|
||||
"version": "1.119.1",
|
||||
"dev": true,
|
||||
"license": "GNU Affero General Public License version 3",
|
||||
"dependencies": {
|
||||
"@oazapfts/runtime": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.16.5",
|
||||
"@types/node": "^22.8.1",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
},
|
||||
@@ -765,6 +765,16 @@
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/core": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
|
||||
"integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
|
||||
@@ -825,9 +835,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "9.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
|
||||
"integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
|
||||
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -845,9 +855,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/plugin-kit": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz",
|
||||
"integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==",
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz",
|
||||
"integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -857,6 +867,30 @@
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@humanfs/core": {
|
||||
"version": "0.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
|
||||
"integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18.18.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@humanfs/node": {
|
||||
"version": "0.16.5",
|
||||
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz",
|
||||
"integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@humanfs/core": "^0.19.0",
|
||||
"@humanwhocodes/retry": "^0.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.18.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/module-importer": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
||||
@@ -871,9 +905,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/retry": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz",
|
||||
"integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==",
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
|
||||
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -1312,6 +1346,13 @@
|
||||
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/json-schema": {
|
||||
"version": "7.0.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
|
||||
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/lodash": {
|
||||
"version": "4.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz",
|
||||
@@ -1337,13 +1378,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.16.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz",
|
||||
"integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==",
|
||||
"version": "22.8.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz",
|
||||
"integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.19.2"
|
||||
"undici-types": "~6.19.8"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/normalize-package-data": {
|
||||
@@ -1353,17 +1394,17 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz",
|
||||
"integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz",
|
||||
"integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/regexpp": "^4.10.0",
|
||||
"@typescript-eslint/scope-manager": "8.6.0",
|
||||
"@typescript-eslint/type-utils": "8.6.0",
|
||||
"@typescript-eslint/utils": "8.6.0",
|
||||
"@typescript-eslint/visitor-keys": "8.6.0",
|
||||
"@typescript-eslint/scope-manager": "8.11.0",
|
||||
"@typescript-eslint/type-utils": "8.11.0",
|
||||
"@typescript-eslint/utils": "8.11.0",
|
||||
"@typescript-eslint/visitor-keys": "8.11.0",
|
||||
"graphemer": "^1.4.0",
|
||||
"ignore": "^5.3.1",
|
||||
"natural-compare": "^1.4.0",
|
||||
@@ -1387,16 +1428,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/parser": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz",
|
||||
"integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz",
|
||||
"integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "8.6.0",
|
||||
"@typescript-eslint/types": "8.6.0",
|
||||
"@typescript-eslint/typescript-estree": "8.6.0",
|
||||
"@typescript-eslint/visitor-keys": "8.6.0",
|
||||
"@typescript-eslint/scope-manager": "8.11.0",
|
||||
"@typescript-eslint/types": "8.11.0",
|
||||
"@typescript-eslint/typescript-estree": "8.11.0",
|
||||
"@typescript-eslint/visitor-keys": "8.11.0",
|
||||
"debug": "^4.3.4"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1416,14 +1457,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/scope-manager": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz",
|
||||
"integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz",
|
||||
"integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "8.6.0",
|
||||
"@typescript-eslint/visitor-keys": "8.6.0"
|
||||
"@typescript-eslint/types": "8.11.0",
|
||||
"@typescript-eslint/visitor-keys": "8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -1434,14 +1475,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/type-utils": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz",
|
||||
"integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz",
|
||||
"integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/typescript-estree": "8.6.0",
|
||||
"@typescript-eslint/utils": "8.6.0",
|
||||
"@typescript-eslint/typescript-estree": "8.11.0",
|
||||
"@typescript-eslint/utils": "8.11.0",
|
||||
"debug": "^4.3.4",
|
||||
"ts-api-utils": "^1.3.0"
|
||||
},
|
||||
@@ -1459,9 +1500,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/types": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz",
|
||||
"integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz",
|
||||
"integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -1473,14 +1514,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/typescript-estree": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz",
|
||||
"integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz",
|
||||
"integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "8.6.0",
|
||||
"@typescript-eslint/visitor-keys": "8.6.0",
|
||||
"@typescript-eslint/types": "8.11.0",
|
||||
"@typescript-eslint/visitor-keys": "8.11.0",
|
||||
"debug": "^4.3.4",
|
||||
"fast-glob": "^3.3.2",
|
||||
"is-glob": "^4.0.3",
|
||||
@@ -1502,16 +1543,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/utils": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz",
|
||||
"integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz",
|
||||
"integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
"@typescript-eslint/scope-manager": "8.6.0",
|
||||
"@typescript-eslint/types": "8.6.0",
|
||||
"@typescript-eslint/typescript-estree": "8.6.0"
|
||||
"@typescript-eslint/scope-manager": "8.11.0",
|
||||
"@typescript-eslint/types": "8.11.0",
|
||||
"@typescript-eslint/typescript-estree": "8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -1525,13 +1566,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/visitor-keys": {
|
||||
"version": "8.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz",
|
||||
"integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz",
|
||||
"integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "8.6.0",
|
||||
"@typescript-eslint/types": "8.11.0",
|
||||
"eslint-visitor-keys": "^3.4.3"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1543,9 +1584,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/coverage-v8": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz",
|
||||
"integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz",
|
||||
"integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1566,8 +1607,8 @@
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vitest/browser": "2.1.1",
|
||||
"vitest": "2.1.1"
|
||||
"@vitest/browser": "2.1.3",
|
||||
"vitest": "2.1.3"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vitest/browser": {
|
||||
@@ -1576,14 +1617,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/expect": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz",
|
||||
"integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz",
|
||||
"integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "2.1.1",
|
||||
"@vitest/utils": "2.1.1",
|
||||
"@vitest/spy": "2.1.3",
|
||||
"@vitest/utils": "2.1.3",
|
||||
"chai": "^5.1.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
@@ -1592,13 +1633,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/mocker": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz",
|
||||
"integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz",
|
||||
"integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "^2.1.0-beta.1",
|
||||
"@vitest/spy": "2.1.3",
|
||||
"estree-walker": "^3.0.3",
|
||||
"magic-string": "^0.30.11"
|
||||
},
|
||||
@@ -1606,7 +1647,7 @@
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vitest/spy": "2.1.1",
|
||||
"@vitest/spy": "2.1.3",
|
||||
"msw": "^2.3.5",
|
||||
"vite": "^5.0.0"
|
||||
},
|
||||
@@ -1620,9 +1661,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/pretty-format": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz",
|
||||
"integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz",
|
||||
"integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1633,13 +1674,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/runner": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz",
|
||||
"integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz",
|
||||
"integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/utils": "2.1.1",
|
||||
"@vitest/utils": "2.1.3",
|
||||
"pathe": "^1.1.2"
|
||||
},
|
||||
"funding": {
|
||||
@@ -1647,13 +1688,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/snapshot": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz",
|
||||
"integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz",
|
||||
"integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": "2.1.1",
|
||||
"@vitest/pretty-format": "2.1.3",
|
||||
"magic-string": "^0.30.11",
|
||||
"pathe": "^1.1.2"
|
||||
},
|
||||
@@ -1662,9 +1703,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/spy": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz",
|
||||
"integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz",
|
||||
"integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1675,13 +1716,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/utils": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz",
|
||||
"integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz",
|
||||
"integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": "2.1.1",
|
||||
"@vitest/pretty-format": "2.1.3",
|
||||
"loupe": "^3.1.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
},
|
||||
@@ -2026,15 +2067,6 @@
|
||||
"url": "https://opencollective.com/core-js"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-fetch": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
|
||||
"integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"node-fetch": "^2.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
@@ -2170,29 +2202,32 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "9.10.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz",
|
||||
"integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==",
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
|
||||
"integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.11.0",
|
||||
"@eslint/config-array": "^0.18.0",
|
||||
"@eslint/core": "^0.7.0",
|
||||
"@eslint/eslintrc": "^3.1.0",
|
||||
"@eslint/js": "9.10.0",
|
||||
"@eslint/plugin-kit": "^0.1.0",
|
||||
"@eslint/js": "9.13.0",
|
||||
"@eslint/plugin-kit": "^0.2.0",
|
||||
"@humanfs/node": "^0.16.5",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@humanwhocodes/retry": "^0.3.0",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
"@humanwhocodes/retry": "^0.3.1",
|
||||
"@types/estree": "^1.0.6",
|
||||
"@types/json-schema": "^7.0.15",
|
||||
"ajv": "^6.12.4",
|
||||
"chalk": "^4.0.0",
|
||||
"cross-spawn": "^7.0.2",
|
||||
"debug": "^4.3.2",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"eslint-scope": "^8.0.2",
|
||||
"eslint-visitor-keys": "^4.0.0",
|
||||
"espree": "^10.1.0",
|
||||
"eslint-scope": "^8.1.0",
|
||||
"eslint-visitor-keys": "^4.1.0",
|
||||
"espree": "^10.2.0",
|
||||
"esquery": "^1.5.0",
|
||||
"esutils": "^2.0.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
@@ -2202,13 +2237,11 @@
|
||||
"ignore": "^5.2.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"is-glob": "^4.0.0",
|
||||
"is-path-inside": "^3.0.3",
|
||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||
"lodash.merge": "^4.6.2",
|
||||
"minimatch": "^3.1.2",
|
||||
"natural-compare": "^1.4.0",
|
||||
"optionator": "^0.9.3",
|
||||
"strip-ansi": "^6.0.1",
|
||||
"text-table": "^0.2.0"
|
||||
},
|
||||
"bin": {
|
||||
@@ -2307,9 +2340,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-scope": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
|
||||
"integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
|
||||
"integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
@@ -2335,6 +2368,13 @@
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/@types/estree": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
|
||||
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/eslint/node_modules/brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
@@ -2347,9 +2387,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/eslint-visitor-keys": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
|
||||
"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
|
||||
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -2373,15 +2413,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/espree": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
|
||||
"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
|
||||
"version": "10.2.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
|
||||
"integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"acorn": "^8.12.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
"eslint-visitor-keys": "^4.0.0"
|
||||
"eslint-visitor-keys": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -2391,9 +2431,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/espree/node_modules/eslint-visitor-keys": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
|
||||
"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
|
||||
"integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -2420,6 +2460,7 @@
|
||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"estraverse": "^5.2.0"
|
||||
},
|
||||
@@ -2471,6 +2512,7 @@
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
||||
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nodelib/fs.stat": "^2.0.2",
|
||||
"@nodelib/fs.walk": "^1.2.3",
|
||||
@@ -2613,16 +2655,6 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-func-name": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
|
||||
"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "10.4.5",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||
@@ -2656,9 +2688,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "15.9.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
|
||||
"integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
|
||||
"version": "15.11.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz",
|
||||
"integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -2825,15 +2857,6 @@
|
||||
"node": ">=0.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-path-inside": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
|
||||
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
@@ -3016,14 +3039,11 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/loupe": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz",
|
||||
"integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==",
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz",
|
||||
"integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"get-func-name": "^2.0.1"
|
||||
}
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
"version": "10.4.3",
|
||||
@@ -3121,10 +3141,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mock-fs": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.2.0.tgz",
|
||||
"integrity": "sha512-2dF2R6YMSZbpip1V1WHKGLNjr/k48uQClqMVb5H3MOvwc9qhYis3/IWbj02qIg/Y8MDXKFF4c5v0rxx2o6xTZw==",
|
||||
"version": "5.4.0",
|
||||
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.0.tgz",
|
||||
"integrity": "sha512-3ROPnEMgBOkusBMYQUW2rnT3wZwsgfOKzJDLvx/TZ7FL1WmWvwSwn3j4aDR5fLDGtgcc1WF0Z1y0di7c9L4FKw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
}
|
||||
@@ -3159,26 +3180,6 @@
|
||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||
@@ -3449,21 +3450,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier-plugin-organize-imports": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.0.0.tgz",
|
||||
"integrity": "sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA==",
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
|
||||
"integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@vue/language-plugin-pug": "^2.0.24",
|
||||
"prettier": ">=2.0",
|
||||
"typescript": ">=2.9",
|
||||
"vue-tsc": "^2.0.24"
|
||||
"vue-tsc": "^2.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/language-plugin-pug": {
|
||||
"optional": true
|
||||
},
|
||||
"vue-tsc": {
|
||||
"optional": true
|
||||
}
|
||||
@@ -4028,12 +4025,6 @@
|
||||
"node": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ts-api-utils": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
|
||||
@@ -4085,9 +4076,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
|
||||
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
|
||||
"version": "5.6.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
@@ -4155,9 +4146,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "5.4.6",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz",
|
||||
"integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==",
|
||||
"version": "5.4.10",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
|
||||
"integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -4215,9 +4206,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vite-node": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz",
|
||||
"integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz",
|
||||
"integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -4257,19 +4248,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vitest": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz",
|
||||
"integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==",
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz",
|
||||
"integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/expect": "2.1.1",
|
||||
"@vitest/mocker": "2.1.1",
|
||||
"@vitest/pretty-format": "^2.1.1",
|
||||
"@vitest/runner": "2.1.1",
|
||||
"@vitest/snapshot": "2.1.1",
|
||||
"@vitest/spy": "2.1.1",
|
||||
"@vitest/utils": "2.1.1",
|
||||
"@vitest/expect": "2.1.3",
|
||||
"@vitest/mocker": "2.1.3",
|
||||
"@vitest/pretty-format": "^2.1.3",
|
||||
"@vitest/runner": "2.1.3",
|
||||
"@vitest/snapshot": "2.1.3",
|
||||
"@vitest/spy": "2.1.3",
|
||||
"@vitest/utils": "2.1.3",
|
||||
"chai": "^5.1.1",
|
||||
"debug": "^4.3.6",
|
||||
"magic-string": "^0.30.11",
|
||||
@@ -4280,7 +4271,7 @@
|
||||
"tinypool": "^1.0.0",
|
||||
"tinyrainbow": "^1.2.0",
|
||||
"vite": "^5.0.0",
|
||||
"vite-node": "2.1.1",
|
||||
"vite-node": "2.1.3",
|
||||
"why-is-node-running": "^2.3.0"
|
||||
},
|
||||
"bin": {
|
||||
@@ -4295,8 +4286,8 @@
|
||||
"peerDependencies": {
|
||||
"@edge-runtime/vm": "*",
|
||||
"@types/node": "^18.0.0 || >=20.0.0",
|
||||
"@vitest/browser": "2.1.1",
|
||||
"@vitest/ui": "2.1.1",
|
||||
"@vitest/browser": "2.1.3",
|
||||
"@vitest/ui": "2.1.3",
|
||||
"happy-dom": "*",
|
||||
"jsdom": "*"
|
||||
},
|
||||
@@ -4322,36 +4313,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vitest-fetch-mock": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.3.0.tgz",
|
||||
"integrity": "sha512-g6upWcL8/32fXL43/5f4VHcocuwQIi9Fj5othcK9gPO8XqSEGtnIZdenr2IaipDr61ReRFt+vaOEgo8jiUUX5w==",
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.4.1.tgz",
|
||||
"integrity": "sha512-Y6VEV2AgJps1t9NUdhID/vUwarAuhOkPHShfoEruIlQr5+O31hgJ4YmZpU8kVWD3KQjEyZqPeMibWehd7rMq+A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cross-fetch": "^4.0.0"
|
||||
},
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.14.0"
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vitest": ">=2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
@@ -4481,9 +4454,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
|
||||
"integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
|
||||
"integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@immich/cli",
|
||||
"version": "2.2.20",
|
||||
"version": "2.2.28",
|
||||
"description": "Command Line Interface (CLI) for Immich",
|
||||
"type": "module",
|
||||
"exports": "./dist/index.js",
|
||||
@@ -20,7 +20,7 @@
|
||||
"@types/cli-progress": "^3.11.0",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/mock-fs": "^4.13.1",
|
||||
"@types/node": "^20.16.5",
|
||||
"@types/node": "^22.8.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
||||
"@typescript-eslint/parser": "^8.0.0",
|
||||
"@vitest/coverage-v8": "^2.0.5",
|
||||
@@ -39,7 +39,7 @@
|
||||
"vite": "^5.0.12",
|
||||
"vite-tsconfig-paths": "^5.0.0",
|
||||
"vitest": "^2.0.5",
|
||||
"vitest-fetch-mock": "^0.3.0",
|
||||
"vitest-fetch-mock": "^0.4.0",
|
||||
"yaml": "^2.3.1"
|
||||
},
|
||||
"scripts": {
|
||||
@@ -67,6 +67,6 @@
|
||||
"lodash-es": "^4.17.21"
|
||||
},
|
||||
"volta": {
|
||||
"node": "20.17.0"
|
||||
"node": "22.11.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,17 +115,7 @@ const tests: Test[] = [
|
||||
'/albums/image3.jpg': true,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support globbing paths',
|
||||
options: {
|
||||
pathsToCrawl: ['/photos*'],
|
||||
},
|
||||
files: {
|
||||
'/photos1/image1.jpg': true,
|
||||
'/photos2/image2.jpg': true,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
test: 'should crawl a single path without trailing slash',
|
||||
options: {
|
||||
|
||||
@@ -141,25 +141,21 @@ export const crawl = async (options: CrawlOptions): Promise<string[]> => {
|
||||
}
|
||||
}
|
||||
|
||||
let searchPattern: string;
|
||||
if (patterns.length === 1) {
|
||||
searchPattern = patterns[0];
|
||||
} else if (patterns.length === 0) {
|
||||
if (patterns.length === 0) {
|
||||
return crawledFiles;
|
||||
} else {
|
||||
searchPattern = '{' + patterns.join(',') + '}';
|
||||
}
|
||||
|
||||
if (recursive) {
|
||||
searchPattern = searchPattern + '/**/';
|
||||
}
|
||||
const searchPatterns = patterns.map((pattern) => {
|
||||
let escapedPattern = pattern;
|
||||
if (recursive) {
|
||||
escapedPattern = escapedPattern + '/**';
|
||||
}
|
||||
return `${escapedPattern}/*.{${extensions.join(',')}}`;
|
||||
});
|
||||
|
||||
searchPattern = `${searchPattern}/*.{${extensions.join(',')}}`;
|
||||
|
||||
const globbedFiles = await glob(searchPattern, {
|
||||
const globbedFiles = await glob(searchPatterns, {
|
||||
absolute: true,
|
||||
caseSensitiveMatch: false,
|
||||
onlyFiles: true,
|
||||
dot: includeHidden,
|
||||
ignore: [`**/${exclusionPattern}`],
|
||||
});
|
||||
|
||||
@@ -2,37 +2,37 @@
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
||||
version = "4.41.0"
|
||||
constraints = "4.41.0"
|
||||
version = "4.45.0"
|
||||
constraints = "4.45.0"
|
||||
hashes = [
|
||||
"h1:0mc+YrjQrcctGrGYDmzlcqcgSv9MYB74rvMaZylIKC8=",
|
||||
"h1:0zUx4vk4jOORQqn6xHBF7dO6N6bielFHdJ0mgF4Obn8=",
|
||||
"h1:AsIZW3uLFNOZO7kL/K7/Y/S0IYxUV9Hz85NNk/3TTsA=",
|
||||
"h1:FSgYM4+LHMbX/a4Y1kx7FPPWmXqS3/MQYzvjMJHHHWM=",
|
||||
"h1:Tx6Nh3BWP1x9L3KK/Eyi+ET0T26g3+jf1jyiuqpNIis=",
|
||||
"h1:VRI9wu8P43xxfpeTndRwsisLnqncfnmEYMOEH5zH4pQ=",
|
||||
"h1:YxQqmiES/Yanq/VfGqBEqg+VIO7FGhO88aKoWFHyGIg=",
|
||||
"h1:ZWHiaesjgDLKWlfdNj0oKyj/DWdxcfsO6NINu39zfpY=",
|
||||
"h1:a2aCgDDBz3ccrr8YstIMl7VFnKo1xZAp+rOv59PPJ7U=",
|
||||
"h1:aRyv8tB6wBAF9lKsLEdiHyCqnK5LfZq0FqMXCcUB4UU=",
|
||||
"h1:lXpuO7zv2uD2GzPE1ARxznreRAh+QHTc2lAJ7iOoFgY=",
|
||||
"h1:sA1xq0QNQ4fH8SHXouYNq50xirVD18SamKQwPsBQrrY=",
|
||||
"h1:v7sHvKq7oqMYPn47ULHFyIQsKD9o+6Xg/uHbxQUixEw=",
|
||||
"h1:wo/x4atWyXuWGlfR6h5nH0YwBAmBwTRY27HtWP8ycLo=",
|
||||
"zh:339d26e06dc6fb299ea8aad9476a60fd65bb1d40631ae8eeb81cddf2dd2bebc8",
|
||||
"zh:3dec2ad96ac2c283fd34ce65781b55c4edbb4d5c5cb53da8e31537176c0ed562",
|
||||
"zh:5f63a5f8080319a2fff09d4d49944829fa708723436520787cfb60725ced80cf",
|
||||
"zh:67162c28ccea71cb8141ed15c0637e35621354ebe14878e0b75a8f160fc5505d",
|
||||
"zh:6ac1e07f5347b6395aca690ed22101bb25e957d25f986f760ff673a7adfd5ef6",
|
||||
"zh:70282a723c7b52fcabde2baad41c864ed3a8d69f0c4d27a6b6933cac434cffc6",
|
||||
"h1:/CGpnYMkLRDmqn4iAsh/jg7ELZ6QExUw03VdjKZyK5M=",
|
||||
"h1:82C/ryqwQvxhBINYOOyF5ZzPW/k4zJ/RYT13eCdPgEc=",
|
||||
"h1:8Wu1D7ZwbLGdHakLRAzoAJ5VqZ8I14qzkPv1OGNfIlg=",
|
||||
"h1:CVq0CAibeueOuiNk0UQtwZvMLMof33n1BgskFPOymrk=",
|
||||
"h1:FSS5Kq+L+CX1zARy8PhaF8edBFNgsLtds4Uo8MwJiK8=",
|
||||
"h1:L4qsorLII7f8xSFmv6JOoWfLWDunWQEpK964Bxk7mtM=",
|
||||
"h1:StO3PV5PDskSCnhoHhWHOPxu6hbzJUQggfLgOSkvhwg=",
|
||||
"h1:Tjo+Er9ets5YrTRIdP9LBmi4p89nL/W+A7r8a1MM9nI=",
|
||||
"h1:XIwT+AWvks1LTytePM9zls+O8ItxoqCfPOgHwuH9ivQ=",
|
||||
"h1:aOXn/zuM1+5GGy/SSRx8q4EYCSTFE9Tr0twHPIf5/KE=",
|
||||
"h1:lb+YcuZ4guYd8zE51vgSnDsRAD9IV00Z15l1i1X52s8=",
|
||||
"h1:pYwNXGjfXA2rUEmotGMLWgmavT9D2rdHnV3TpuIK3ko=",
|
||||
"h1:q1qrnPq6KkljwBrugCwzb7f0SVP4Lzkfh+EOLARY9V8=",
|
||||
"h1:v9sL4cZLTV5Gu2004DDyy7209gT0JmudBCAD0WCr/JE=",
|
||||
"zh:00be2a6adc76615a368491c7a026098103b6286deb31e3cfb037365dd39f095f",
|
||||
"zh:05bd072e6119f7a5abff05c6064001f745473119a956586cf77ae843cf55d666",
|
||||
"zh:228bbe61345c4e8e0bc6b698b4b9652abff65662ee72ede2aecb4c3efb91b243",
|
||||
"zh:2948aeefe71ba041c94082cf931ecc95510d93af0a61d0a287880f5b9d24b11a",
|
||||
"zh:5dfc2c5e95843ca54957212ee3ecb7ff06f2cf60bfd6ca278b5249fd70ac18f5",
|
||||
"zh:69922cb45559b0b0544b9c2d31ed2d0fac9121faa75bc2f523484785b45d8e2b",
|
||||
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
||||
"zh:924cd23abc326c6b3914e2cd9c94c7832c2552e1e9ae258fb9fd9aedaa5f7ce7",
|
||||
"zh:a4b75e4c239879296259e7d54f1befbc7fdc16da2d62d1294e9f73add4cae61e",
|
||||
"zh:a6ceb08feb63b00c7141783b31e45a154c76fd8cdebbdf371074805f0053572d",
|
||||
"zh:afae1843f9ba85f2f6d94108c65cf43a457e83531a632d44d863e935160cb2ba",
|
||||
"zh:bd6628ce60c778960a5755f7010b7e2cc5c6ff0341a21c175341b28058ec843d",
|
||||
"zh:cd30866a1ff99d72b5fa1699db582fa4f25562e6ab21dcc6870324f3056108e0",
|
||||
"zh:df5924cca691a8220aaaebb5cb55c3d6c32ff0a881f198695eff28155eb12b54",
|
||||
"zh:e78d0696c941aba58df1cb36b8a0d25cd5f3963f01d9338fdbda74db58afdd49",
|
||||
"zh:9d83a0cbf72327286f7dbd63cd4af89059c648163fe6ed21b1df768e0518d445",
|
||||
"zh:a8e1982945822c7d7aaa6ba8602c7247d1a3fad15d612f30eb323491a637bf8d",
|
||||
"zh:c6d41ebd69ddb23e3dad49a0ebf1da5a9c7d8706a4f55d953115d371f407928b",
|
||||
"zh:d03e5442b12846c2737f099d30cd23d9f85a0c6d65437ccb44819f9a6c4e1d7f",
|
||||
"zh:d446f2e1186b35037aea03b0e27d8b032d2f069f194f84b3f0e2907b3a79a955",
|
||||
"zh:e4d7549a4c856524e01f3dd4d69f57119ea205f7a0fa38dcfe154475b4ae9258",
|
||||
"zh:e64b8915cb9686f85e77115bd674f2faf4f29880688067d7d0f1376566fdb3b0",
|
||||
"zh:f046efdc55e6385cdd69baaa06a929bef9fe6809d373b0d2d6c7df8f8c23eddc",
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ terraform {
|
||||
required_providers {
|
||||
cloudflare = {
|
||||
source = "cloudflare/cloudflare"
|
||||
version = "4.41.0"
|
||||
version = "4.45.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,37 +2,37 @@
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
||||
version = "4.41.0"
|
||||
constraints = "4.41.0"
|
||||
version = "4.45.0"
|
||||
constraints = "4.45.0"
|
||||
hashes = [
|
||||
"h1:0mc+YrjQrcctGrGYDmzlcqcgSv9MYB74rvMaZylIKC8=",
|
||||
"h1:0zUx4vk4jOORQqn6xHBF7dO6N6bielFHdJ0mgF4Obn8=",
|
||||
"h1:AsIZW3uLFNOZO7kL/K7/Y/S0IYxUV9Hz85NNk/3TTsA=",
|
||||
"h1:FSgYM4+LHMbX/a4Y1kx7FPPWmXqS3/MQYzvjMJHHHWM=",
|
||||
"h1:Tx6Nh3BWP1x9L3KK/Eyi+ET0T26g3+jf1jyiuqpNIis=",
|
||||
"h1:VRI9wu8P43xxfpeTndRwsisLnqncfnmEYMOEH5zH4pQ=",
|
||||
"h1:YxQqmiES/Yanq/VfGqBEqg+VIO7FGhO88aKoWFHyGIg=",
|
||||
"h1:ZWHiaesjgDLKWlfdNj0oKyj/DWdxcfsO6NINu39zfpY=",
|
||||
"h1:a2aCgDDBz3ccrr8YstIMl7VFnKo1xZAp+rOv59PPJ7U=",
|
||||
"h1:aRyv8tB6wBAF9lKsLEdiHyCqnK5LfZq0FqMXCcUB4UU=",
|
||||
"h1:lXpuO7zv2uD2GzPE1ARxznreRAh+QHTc2lAJ7iOoFgY=",
|
||||
"h1:sA1xq0QNQ4fH8SHXouYNq50xirVD18SamKQwPsBQrrY=",
|
||||
"h1:v7sHvKq7oqMYPn47ULHFyIQsKD9o+6Xg/uHbxQUixEw=",
|
||||
"h1:wo/x4atWyXuWGlfR6h5nH0YwBAmBwTRY27HtWP8ycLo=",
|
||||
"zh:339d26e06dc6fb299ea8aad9476a60fd65bb1d40631ae8eeb81cddf2dd2bebc8",
|
||||
"zh:3dec2ad96ac2c283fd34ce65781b55c4edbb4d5c5cb53da8e31537176c0ed562",
|
||||
"zh:5f63a5f8080319a2fff09d4d49944829fa708723436520787cfb60725ced80cf",
|
||||
"zh:67162c28ccea71cb8141ed15c0637e35621354ebe14878e0b75a8f160fc5505d",
|
||||
"zh:6ac1e07f5347b6395aca690ed22101bb25e957d25f986f760ff673a7adfd5ef6",
|
||||
"zh:70282a723c7b52fcabde2baad41c864ed3a8d69f0c4d27a6b6933cac434cffc6",
|
||||
"h1:/CGpnYMkLRDmqn4iAsh/jg7ELZ6QExUw03VdjKZyK5M=",
|
||||
"h1:82C/ryqwQvxhBINYOOyF5ZzPW/k4zJ/RYT13eCdPgEc=",
|
||||
"h1:8Wu1D7ZwbLGdHakLRAzoAJ5VqZ8I14qzkPv1OGNfIlg=",
|
||||
"h1:CVq0CAibeueOuiNk0UQtwZvMLMof33n1BgskFPOymrk=",
|
||||
"h1:FSS5Kq+L+CX1zARy8PhaF8edBFNgsLtds4Uo8MwJiK8=",
|
||||
"h1:L4qsorLII7f8xSFmv6JOoWfLWDunWQEpK964Bxk7mtM=",
|
||||
"h1:StO3PV5PDskSCnhoHhWHOPxu6hbzJUQggfLgOSkvhwg=",
|
||||
"h1:Tjo+Er9ets5YrTRIdP9LBmi4p89nL/W+A7r8a1MM9nI=",
|
||||
"h1:XIwT+AWvks1LTytePM9zls+O8ItxoqCfPOgHwuH9ivQ=",
|
||||
"h1:aOXn/zuM1+5GGy/SSRx8q4EYCSTFE9Tr0twHPIf5/KE=",
|
||||
"h1:lb+YcuZ4guYd8zE51vgSnDsRAD9IV00Z15l1i1X52s8=",
|
||||
"h1:pYwNXGjfXA2rUEmotGMLWgmavT9D2rdHnV3TpuIK3ko=",
|
||||
"h1:q1qrnPq6KkljwBrugCwzb7f0SVP4Lzkfh+EOLARY9V8=",
|
||||
"h1:v9sL4cZLTV5Gu2004DDyy7209gT0JmudBCAD0WCr/JE=",
|
||||
"zh:00be2a6adc76615a368491c7a026098103b6286deb31e3cfb037365dd39f095f",
|
||||
"zh:05bd072e6119f7a5abff05c6064001f745473119a956586cf77ae843cf55d666",
|
||||
"zh:228bbe61345c4e8e0bc6b698b4b9652abff65662ee72ede2aecb4c3efb91b243",
|
||||
"zh:2948aeefe71ba041c94082cf931ecc95510d93af0a61d0a287880f5b9d24b11a",
|
||||
"zh:5dfc2c5e95843ca54957212ee3ecb7ff06f2cf60bfd6ca278b5249fd70ac18f5",
|
||||
"zh:69922cb45559b0b0544b9c2d31ed2d0fac9121faa75bc2f523484785b45d8e2b",
|
||||
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
||||
"zh:924cd23abc326c6b3914e2cd9c94c7832c2552e1e9ae258fb9fd9aedaa5f7ce7",
|
||||
"zh:a4b75e4c239879296259e7d54f1befbc7fdc16da2d62d1294e9f73add4cae61e",
|
||||
"zh:a6ceb08feb63b00c7141783b31e45a154c76fd8cdebbdf371074805f0053572d",
|
||||
"zh:afae1843f9ba85f2f6d94108c65cf43a457e83531a632d44d863e935160cb2ba",
|
||||
"zh:bd6628ce60c778960a5755f7010b7e2cc5c6ff0341a21c175341b28058ec843d",
|
||||
"zh:cd30866a1ff99d72b5fa1699db582fa4f25562e6ab21dcc6870324f3056108e0",
|
||||
"zh:df5924cca691a8220aaaebb5cb55c3d6c32ff0a881f198695eff28155eb12b54",
|
||||
"zh:e78d0696c941aba58df1cb36b8a0d25cd5f3963f01d9338fdbda74db58afdd49",
|
||||
"zh:9d83a0cbf72327286f7dbd63cd4af89059c648163fe6ed21b1df768e0518d445",
|
||||
"zh:a8e1982945822c7d7aaa6ba8602c7247d1a3fad15d612f30eb323491a637bf8d",
|
||||
"zh:c6d41ebd69ddb23e3dad49a0ebf1da5a9c7d8706a4f55d953115d371f407928b",
|
||||
"zh:d03e5442b12846c2737f099d30cd23d9f85a0c6d65437ccb44819f9a6c4e1d7f",
|
||||
"zh:d446f2e1186b35037aea03b0e27d8b032d2f069f194f84b3f0e2907b3a79a955",
|
||||
"zh:e4d7549a4c856524e01f3dd4d69f57119ea205f7a0fa38dcfe154475b4ae9258",
|
||||
"zh:e64b8915cb9686f85e77115bd674f2faf4f29880688067d7d0f1376566fdb3b0",
|
||||
"zh:f046efdc55e6385cdd69baaa06a929bef9fe6809d373b0d2d6c7df8f8c23eddc",
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ terraform {
|
||||
required_providers {
|
||||
cloudflare = {
|
||||
source = "cloudflare/cloudflare"
|
||||
version = "4.41.0"
|
||||
version = "4.45.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,12 +36,15 @@ services:
|
||||
IMMICH_BUILD_URL: https://github.com/immich-app/immich/actions/runs/9654404849
|
||||
IMMICH_BUILD_IMAGE: development
|
||||
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_BUG_FEATURE_URL: https://github.com/immich-app/immich/issues
|
||||
IMMICH_THIRD_PARTY_DOCUMENTATION_URL: https://immich.app/docs
|
||||
IMMICH_THIRD_PARTY_SUPPORT_URL: https://immich.app/docs/third-party
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 1048576
|
||||
hard: 1048576
|
||||
ports:
|
||||
- 3001:3001
|
||||
- 9230:9230
|
||||
- 9231:9231
|
||||
depends_on:
|
||||
@@ -63,6 +66,7 @@ services:
|
||||
- 24678:24678
|
||||
volumes:
|
||||
- ../web:/usr/src/app
|
||||
- ../i18n:/usr/src/i18n
|
||||
- ../open-api/:/usr/src/open-api/
|
||||
- /usr/src/app/node_modules
|
||||
ulimits:
|
||||
@@ -99,7 +103,7 @@ services:
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
||||
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
|
||||
@@ -139,7 +143,7 @@ services:
|
||||
'wal_compression=on',
|
||||
]
|
||||
|
||||
# set IMMICH_METRICS=true in .env to enable metrics
|
||||
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
|
||||
# immich-prometheus:
|
||||
# container_name: immich_prometheus
|
||||
# ports:
|
||||
|
||||
@@ -16,7 +16,7 @@ services:
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
- 2283:3001
|
||||
- 2283:2283
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
@@ -47,7 +47,7 @@ services:
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
||||
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
restart: always
|
||||
@@ -71,15 +71,30 @@ services:
|
||||
interval: 5m
|
||||
start_interval: 30s
|
||||
start_period: 5m
|
||||
command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
|
||||
command:
|
||||
[
|
||||
'postgres',
|
||||
'-c',
|
||||
'shared_preload_libraries=vectors.so',
|
||||
'-c',
|
||||
'search_path="$$user", public, vectors',
|
||||
'-c',
|
||||
'logging_collector=on',
|
||||
'-c',
|
||||
'max_wal_size=2GB',
|
||||
'-c',
|
||||
'shared_buffers=512MB',
|
||||
'-c',
|
||||
'wal_compression=on',
|
||||
]
|
||||
restart: always
|
||||
|
||||
# set IMMICH_METRICS=true in .env to enable metrics
|
||||
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
|
||||
immich-prometheus:
|
||||
container_name: immich_prometheus
|
||||
ports:
|
||||
- 9090:9090
|
||||
image: prom/prometheus@sha256:f6639335d34a77d9d9db382b92eeb7fc00934be8eae81dbc03b31cfe90411a94
|
||||
image: prom/prometheus@sha256:378f4e03703557d1c6419e6caccf922f96e6d88a530f7431d66a4c4f4b1000fe
|
||||
volumes:
|
||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheus-data:/prometheus
|
||||
@@ -91,7 +106,7 @@ services:
|
||||
command: ['./run.sh', '-disable-reporting']
|
||||
ports:
|
||||
- 3000:3000
|
||||
image: grafana/grafana:11.2.0-ubuntu@sha256:8e2c13739563c3da9d45de96c6bcb63ba617cac8c571c060112c7fc8ad6914e9
|
||||
image: grafana/grafana:11.3.0-ubuntu@sha256:51587e148ac0214d7938e7f3fe8512182e4eb6141892a3ffb88bba1901b49285
|
||||
volumes:
|
||||
- grafana-data:/var/lib/grafana
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ services:
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
- 2283:3001
|
||||
- '2283:2283'
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
@@ -48,7 +48,7 @@ services:
|
||||
|
||||
redis:
|
||||
container_name: immich_redis
|
||||
image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
||||
image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
restart: always
|
||||
@@ -69,7 +69,22 @@ services:
|
||||
interval: 5m
|
||||
start_interval: 30s
|
||||
start_period: 5m
|
||||
command: ["postgres", "-c", "shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
|
||||
command:
|
||||
[
|
||||
'postgres',
|
||||
'-c',
|
||||
'shared_preload_libraries=vectors.so',
|
||||
'-c',
|
||||
'search_path="$$user", public, vectors',
|
||||
'-c',
|
||||
'logging_collector=on',
|
||||
'-c',
|
||||
'max_wal_size=2GB',
|
||||
'-c',
|
||||
'shared_buffers=512MB',
|
||||
'-c',
|
||||
'wal_compression=on',
|
||||
]
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
|
||||
@@ -1 +1 @@
|
||||
20.17.0
|
||||
22.11.0
|
||||
|
||||
@@ -187,7 +187,7 @@ However, when the trash is emptied, the files will re-appear in the main timelin
|
||||
|
||||
### How does smart search work?
|
||||
|
||||
Immich uses CLIP models. For more information about CLIP and its capabilities, read about it [here](https://openai.com/research/clip).
|
||||
Immich uses CLIP models. An ML model converts each image to an "embedding", which is essentially a string of numbers that semantically encodes what is in the image. The same is done for the text that you enter when you do a search, and that text embedding is then compared with those of the images to find similar ones. As such, there are no "tags", "labels", or "descriptions" generated that you can look at. For more information about CLIP and its capabilities, read about it [here](https://openai.com/research/clip).
|
||||
|
||||
### How does facial recognition work?
|
||||
|
||||
@@ -333,7 +333,11 @@ You may need to add mount points or docker volumes for the following internal co
|
||||
- `immich-machine-learning:/.cache`
|
||||
- `redis:/data`
|
||||
|
||||
The non-root user/group needs read/write access to the volume mounts, including `UPLOAD_LOCATION`.
|
||||
The non-root user/group needs read/write access to the volume mounts, including `UPLOAD_LOCATION` and `/cache` for machine-learning.
|
||||
|
||||
:::note Docker Compose Volumes
|
||||
The Docker Compose top level volume element does not support non-root access, all of the above volumes must be local volume mounts.
|
||||
:::
|
||||
|
||||
For a further hardened system, you can add the following block to every container except for `immich_postgres`.
|
||||
|
||||
|
||||
@@ -21,6 +21,17 @@ The recommended way to backup and restore the Immich database is to use the `pg_
|
||||
It is not recommended to directly backup the `DB_DATA_LOCATION` folder. Doing so while the database is running can lead to a corrupted backup that cannot be restored.
|
||||
:::
|
||||
|
||||
### Automatic Database Backups
|
||||
|
||||
Immich will automatically create database backups by default. The backups are stored in `UPLOAD_LOCATION/backups`.
|
||||
You can adjust the schedule and amount of kept backups in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup).
|
||||
By default, Immich will keep the last 14 backups and create a new backup every day at 2:00 AM.
|
||||
|
||||
#### Restoring
|
||||
|
||||
We hope to make restoring simpler in future versions, for now you can find the backups in the `UPLOAD_LOCATION/backups` folder on your host.
|
||||
Then please follow the steps in the following section for restoring the database.
|
||||
|
||||
### Manual Backup and Restore
|
||||
|
||||
<Tabs>
|
||||
@@ -34,14 +45,15 @@ docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgre
|
||||
docker compose down -v # CAUTION! Deletes all Immich data to start from scratch
|
||||
## Uncomment the next line and replace DB_DATA_LOCATION with your Postgres path to permanently reset the Postgres database
|
||||
# rm -rf DB_DATA_LOCATION # CAUTION! Deletes all Immich data to start from scratch
|
||||
docker compose pull # Update to latest version of Immich (if desired)
|
||||
docker compose create # Create Docker containers for Immich apps without running them
|
||||
docker compose pull # Update to latest version of Immich (if desired)
|
||||
docker compose create # Create Docker containers for Immich apps without running them
|
||||
docker start immich_postgres # Start Postgres server
|
||||
sleep 10 # Wait for Postgres server to start up
|
||||
sleep 10 # Wait for Postgres server to start up
|
||||
# Check the database user if you deviated from the default
|
||||
gunzip < "/path/to/backup/dump.sql.gz" \
|
||||
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
|
||||
| docker exec -i immich_postgres psql --username=postgres # Restore Backup
|
||||
docker compose up -d # Start remainder of Immich apps
|
||||
| docker exec -i immich_postgres psql --username=postgres # Restore Backup
|
||||
docker compose up -d # Start remainder of Immich apps
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
@@ -55,12 +67,13 @@ docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgre
|
||||
docker compose down -v # CAUTION! Deletes all Immich data to start from scratch
|
||||
## Uncomment the next line and replace DB_DATA_LOCATION with your Postgres path to permanently reset the Postgres database
|
||||
# Remove-Item -Recurse -Force DB_DATA_LOCATION # CAUTION! Deletes all Immich data to start from scratch
|
||||
docker compose pull # Update to latest version of Immich (if desired)
|
||||
docker compose create # Create Docker containers for Immich apps without running them
|
||||
docker compose pull # Update to latest version of Immich (if desired)
|
||||
docker compose create # Create Docker containers for Immich apps without running them
|
||||
docker start immich_postgres # Start Postgres server
|
||||
sleep 10 # Wait for Postgres server to start up
|
||||
gc "C:\path\to\backup\dump.sql" | docker exec -i immich_postgres psql --username=postgres # Restore Backup
|
||||
docker compose up -d # Start remainder of Immich apps
|
||||
sleep 10 # Wait for Postgres server to start up
|
||||
# Check the database user if you deviated from the default
|
||||
gc "C:\path\to\backup\dump.sql" | docker exec -i immich_postgres psql --username=postgres # Restore Backup
|
||||
docker compose up -d # Start remainder of Immich apps
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
@@ -103,6 +116,7 @@ services:
|
||||
Then you can restore with the same command but pointed at the latest dump.
|
||||
|
||||
```bash title='Automated Restore'
|
||||
# Be sure to check the username if you changed it from default
|
||||
gunzip < db_dumps/last/immich-latest.sql.gz \
|
||||
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
|
||||
| docker exec -i immich_postgres psql --username=postgres
|
||||
@@ -197,7 +211,7 @@ When you turn off the storage template engine, it will leave the assets in `UPLO
|
||||
- Stored in `UPLOAD_LOCATION/profile/<userID>`.
|
||||
- **Thumbs Images:**
|
||||
- Preview images (blurred, small, large) for each asset and thumbnails for recognized faces.
|
||||
- Stored in `UPLOCAD_LOCATION/thumbs/<userID>`.
|
||||
- Stored in `UPLOAD_LOCATION/thumbs/<userID>`.
|
||||
- **Encoded Assets:**
|
||||
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
|
||||
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
|
||||
|
||||
@@ -22,7 +22,7 @@ Copy the entire `immich-server` block as a new service and make the following ch
|
||||
- container_name: immich_server
|
||||
...
|
||||
- ports:
|
||||
- - 2283:3001
|
||||
- - 2283:2283
|
||||
+ immich-microservices:
|
||||
+ container_name: immich_microservices
|
||||
```
|
||||
|
||||
@@ -11,7 +11,7 @@ Unable to set `app.immich:///oauth-callback` as a valid redirect URI? See [Mobil
|
||||
Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an identity layer built on top of OAuth2. OIDC is supported by most identity providers, including:
|
||||
|
||||
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
||||
- [Authelia](https://www.authelia.com/configuration/identity-providers/openid-connect/clients/)
|
||||
- [Authelia](https://www.authelia.com/integration/openid-connect/immich/)
|
||||
- [Okta](https://www.okta.com/openid-connect/)
|
||||
- [Google](https://developers.google.com/identity/openid-connect/openid-connect)
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ Running with a pre-existing Postgres server can unlock powerful administrative f
|
||||
You must install pgvecto.rs into your instance of Postgres using their [instructions][vectors-install]. After installation, add `shared_preload_libraries = 'vectors.so'` to your `postgresql.conf`. If you already have some `shared_preload_libraries` set, you can separate each extension with a comma. For example, `shared_preload_libraries = 'pg_stat_statements, vectors.so'`.
|
||||
|
||||
:::note
|
||||
Immich is known to work with Postgres versions 14, 15, and 16. Earlier versions are unsupported.
|
||||
Immich is known to work with Postgres versions 14, 15, and 16. Earlier versions are unsupported. Postgres 17 is nominally compatible, but pgvecto.rs does not have prebuilt images or packages for it as of writing.
|
||||
|
||||
Make sure the installed version of pgvecto.rs is compatible with your version of Immich. For example, if your Immich version uses the dedicated database image `tensorchord/pgvecto-rs:pg14-v0.2.1`, you must install pgvecto.rs `>= 0.2.1, < 0.3.0`.
|
||||
Make sure the installed version of pgvecto.rs is compatible with your version of Immich. The current accepted range for pgvecto.rs is `>= 0.2.0, < 0.4.0`.
|
||||
:::
|
||||
|
||||
## Specifying the connection URL
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# Repair Page
|
||||
|
||||
:::warning
|
||||
This feature is currently disabled and will be reworked in the near future.
|
||||
:::
|
||||
|
||||
The repair page is designed to give information to the system administrator about files that are not tracked, or offline paths.
|
||||
|
||||
## Natural State
|
||||
|
||||
@@ -40,6 +40,26 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
#### Compatibility with Let's Encrypt
|
||||
|
||||
In the event that your nginx configuration includes a section for Let's Encrypt, it's likely that you have a segment similar to the following:
|
||||
|
||||
```nginx
|
||||
location ~ /.well-known {
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
This particular `location` directive can inadvertently prevent mobile clients from reaching the `/.well-known/immich` path, which is crucial for discovery. Usual error message for this case is: "Your app major version is not compatible with the server". To remedy this, you should introduce an additional location block specifically for this path, ensuring that requests are correctly proxied to the Immich server:
|
||||
|
||||
```nginx
|
||||
location = /.well-known/immich {
|
||||
proxy_pass http://<backend_url>:2283;
|
||||
}
|
||||
```
|
||||
|
||||
By doing so, you'll maintain the functionality of Let's Encrypt while allowing mobile clients to access the necessary Immich path without obstruction.
|
||||
|
||||
### Caddy example config
|
||||
|
||||
As an alternative to nginx, you can also use [Caddy](https://caddyserver.com/) as a reverse proxy (with automatic HTTPS configuration). Below is an example config.
|
||||
@@ -99,7 +119,7 @@ services:
|
||||
# increase readingTimeouts for the entrypoint used here
|
||||
traefik.http.routers.immich.entrypoints: websecure
|
||||
traefik.http.routers.immich.rule: Host(`immich.your-domain.com`)
|
||||
traefik.http.services.immich.loadbalancer.server.port: 3001
|
||||
traefik.http.services.immich.loadbalancer.server.port: 2283
|
||||
```
|
||||
|
||||
Keep in mind, that Traefik needs to communicate with the network where immich is in, usually done
|
||||
|
||||
@@ -7,7 +7,7 @@ If a storage quota has been defined for the user, the usage number will be displ
|
||||
:::
|
||||
|
||||
:::info External library
|
||||
External library is not included in the storage quota.
|
||||
External libraries are not included in the storage quota.
|
||||
:::
|
||||
|
||||
<img src={require('./img/server-stats.png').default} title="server statistic" />
|
||||
|
||||
47
docs/docs/administration/system-integrity.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# System Integrity
|
||||
|
||||
## Folder checks
|
||||
|
||||
:::info
|
||||
The folders considered for these checks include: `upload/`, `library/`, `thumbs/`, `encoded-video/`, `profile/`
|
||||
:::
|
||||
|
||||
When Immich starts, it performs a series of checks in order to validate that it can read and write files to the volume mounts used by the storage system. If it cannot perform all the required operations, it will fail to start. The checks include:
|
||||
|
||||
- Creating an initial hidden file (`.immich`) in each folder
|
||||
- Reading a hidden file (`.immich`) in each folder
|
||||
- Overwriting a hidden file (`.immich`) in each folder
|
||||
|
||||
The checks are designed to catch the following situations:
|
||||
|
||||
- Incorrect permissions (cannot read/write files)
|
||||
- Missing volume mount (`.immich` files should exist, but are missing)
|
||||
|
||||
### Common issues
|
||||
|
||||
:::note
|
||||
`.immich` files serve as markers and help keep track of volume mounts being used by Immich. Except for the situations listed below, they should never be manually created or deleted.
|
||||
:::
|
||||
|
||||
#### Missing `.immich` files
|
||||
|
||||
```
|
||||
Verifying system mount folder checks (enabled=true)
|
||||
...
|
||||
ENOENT: no such file or directory, open 'upload/encoded-video/.immich'
|
||||
```
|
||||
|
||||
The above error messages show that the server has previously (successfully) written `.immich` files to each folder, but now does not detect them. This could be because any of the following:
|
||||
|
||||
- Permission error - unable to read the file, but it exists
|
||||
- File does not exist - volume mount has changed and should be corrected
|
||||
- File does not exist - user manually deleted it and should be manually re-created (`touch .immich`)
|
||||
- File does not exist - user restored from a backup, but did not restore each folder (user should restore all folders or manually create `.immich` in any missing folders)
|
||||
|
||||
### Ignoring the checks
|
||||
|
||||
The checks are designed to catch common problems that we have seen users have in the past, but if you want to disable them you can set the following environment variable:
|
||||
|
||||
```
|
||||
IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true
|
||||
```
|
||||
@@ -15,7 +15,7 @@ Our [GitHub Repository](https://github.com/immich-app/immich) is a [monorepo](ht
|
||||
| `design/` | Screenshots and logos for the README |
|
||||
| `docs/` | Source code for the [https://immich.app](https://immich.app) website |
|
||||
| `machine-learning/` | Source code for the `immich-machine-learning` docker image |
|
||||
| `misc/release/` | Scripts for version pumps and draft releases |
|
||||
| `misc/release/` | Scripts for version bumps and draft releases |
|
||||
| `mobile/` | Source code for the mobile app, both Android and iOS |
|
||||
| `server/` | Source code for the `immich-server` docker image |
|
||||
| `web/` | Source code for the `web` |
|
||||
|
||||
@@ -23,7 +23,7 @@ You do not need to redo any transcoding jobs after enabling hardware acceleratio
|
||||
- Raspberry Pi is currently not supported.
|
||||
- Two-pass mode is only supported for NVENC. Other APIs will ignore this setting.
|
||||
- By default, only encoding is currently hardware accelerated. This means the CPU is still used for software decoding and tone-mapping.
|
||||
- NVENC and RKMPP can be fully accelerated by enabling hardware decoding in the video transcoding settings.
|
||||
- You can benefit from end-to-end acceleration by enabling hardware decoding in the video transcoding settings.
|
||||
- Hardware dependent
|
||||
- Codec support varies, but H.264 and HEVC are usually supported.
|
||||
- Notably, NVIDIA and AMD GPUs do not support VP9 encoding.
|
||||
@@ -49,7 +49,7 @@ For RKMPP to work:
|
||||
|
||||
- You must have a supported Rockchip ARM SoC.
|
||||
- Only RK3588 supports hardware tonemapping, other SoCs use slower software tonemapping while still using hardware encoding.
|
||||
- Tonemapping requires `/usr/lib/aarch64-linux-gnu/libmali.so.1` to be present on your host system. Install [`libmali-valhall-g610-g6p0-gbm`][libmali-rockchip] and modify the [`hwaccel.transcoding.yml`][hw-file] file:
|
||||
- Tonemapping requires `/usr/lib/aarch64-linux-gnu/libmali.so.1` to be present on your host system. Install the [`libmali`][libmali-rockchip] release that corresponds to your Mali GPU (`libmali-valhall-g610-g13p0-gbm` on RK3588) and modify the [`hwaccel.transcoding.yml`][hw-file] file:
|
||||
- under `rkmpp` uncomment the 3 lines required for OpenCL tonemapping by removing the `#` symbol at the beginning of each line
|
||||
- `- /dev/mali0:/dev/mali0`
|
||||
- `- /etc/OpenCL:/etc/OpenCL:ro`
|
||||
@@ -62,11 +62,14 @@ For RKMPP to work:
|
||||
1. If you do not already have it, download the latest [`hwaccel.transcoding.yml`][hw-file] file and ensure it's in the same folder as the `docker-compose.yml`.
|
||||
2. In the `docker-compose.yml` under `immich-server`, uncomment the `extends` section and change `cpu` to the appropriate backend.
|
||||
|
||||
- For VAAPI on WSL2, be sure to use `vaapi-wsl` rather than `vaapi`
|
||||
Note: For VAAPI on WSL2, be sure to use `vaapi-wsl` rather than `vaapi`
|
||||
|
||||
3. Redeploy the `immich-server` container with these updated settings.
|
||||
4. In the Admin page under `Video transcoding settings`, change the hardware acceleration setting to the appropriate option and save.
|
||||
5. (Optional) If using a compatible backend, you may enable hardware decoding for optimal performance.
|
||||
|
||||
Note: For Jasper Lake and Elkhart Lake CPUs, you will need to set the `Hardware Acceleration` -> `Constant quality mode` to `CQP`
|
||||
|
||||
5. (Optional) Enable hardware decoding for optimal performance.
|
||||
|
||||
#### Single Compose File
|
||||
|
||||
@@ -89,16 +92,7 @@ immich-server:
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
volumes:
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
- 2283:3001
|
||||
depends_on:
|
||||
- redis
|
||||
- database
|
||||
restart: always
|
||||
...
|
||||
```
|
||||
|
||||
Once this is done, you can continue to step 3 of "Basic Setup".
|
||||
|
||||
BIN
docs/docs/features/img/folder-view.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
@@ -149,6 +149,22 @@ If you get an error here, please rename the other external library to something
|
||||
|
||||
Within seconds, the assets from the old-pics and videos folders should show up in the main timeline.
|
||||
|
||||
### Folder view
|
||||
|
||||
:::info
|
||||
This feature also exists for assets uploaded other than through external libraries.
|
||||
:::tip
|
||||
You can use the storage template migration feature for the best experience with uploaded assets in this view.
|
||||
:::
|
||||
|
||||
You can browse your photos and videos by folder like in a file explorer.
|
||||
|
||||
Enable this feature from the Users Settings > Features > Folders.
|
||||
|
||||
The UI is currently only available for the web; mobile will come in a subsequent release.
|
||||
|
||||
<img src={require('./img/folder-view.png').default} width="75%" title='Folder-view' />
|
||||
|
||||
### Set Custom Scan Interval
|
||||
|
||||
:::note
|
||||
|
||||
@@ -53,6 +53,12 @@ You do not need to redo any machine learning jobs after enabling hardware accele
|
||||
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, openvino] to the `image` section's tag at the end of the line.
|
||||
4. Redeploy the `immich-machine-learning` container with these updated settings.
|
||||
|
||||
### Confirming Device Usage
|
||||
|
||||
You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel and `intel_gpu_top` for Intel.
|
||||
|
||||
You can also check the logs of the `immich-machine-learning` container. When a Smart Search or Face Detection job begins, or when you search with text in Immich, you should either see a log for `Available ORT providers` containing the relevant provider (e.g. `CUDAExecutionProvider` in the case of CUDA), or a `Loaded ANN model` log entry without errors in the case of ARM NN.
|
||||
|
||||
#### Single Compose File
|
||||
|
||||
Some platforms, including Unraid and Portainer, do not support multiple Compose files as of writing. As an alternative, you can "inline" the relevant contents of the [`hwaccel.ml.yml`][hw-file] file into the `immich-machine-learning` service directly.
|
||||
@@ -95,9 +101,22 @@ immich-machine-learning:
|
||||
|
||||
Once this is done, you can redeploy the `immich-machine-learning` container.
|
||||
|
||||
:::info
|
||||
You can confirm the device is being recognized and used by checking its utilization (via `nvtop` for CUDA, `intel_gpu_top` for OpenVINO, etc.). You can also enable debug logging by setting `IMMICH_LOG_LEVEL=debug` in the `.env` file and restarting the `immich-machine-learning` container. When a Smart Search or Face Detection job begins, you should see a log for `Available ORT providers` containing the relevant provider. In the case of ARM NN, the absence of a `Could not load ANN shared libraries` log entry means it loaded successfully.
|
||||
:::
|
||||
#### Multi-GPU
|
||||
|
||||
If you want to utilize multiple NVIDIA or Intel GPUs, you can set the `MACHINE_LEARNING_DEVICE_IDS` environmental variable to a comma-separated list of device IDs and set `MACHINE_LEARNING_WORKERS` to the number of listed devices. You can run a command such as `nvidia-smi -L` or `glxinfo -B` to see the currently available devices and their corresponding IDs.
|
||||
|
||||
For example, if you have devices 0 and 1, set the values as follows:
|
||||
|
||||
```
|
||||
MACHINE_LEARNING_DEVICE_IDS=0,1
|
||||
MACHINE_LEARNING_WORKERS=2
|
||||
```
|
||||
|
||||
In this example, the machine learning service will spawn two workers, one of which will allocate models to device 0 and the other to device 1. Different requests will be processed by one worker or the other.
|
||||
|
||||
This approach can be used to simply specify a particular device as well. For example, setting `MACHINE_LEARNING_DEVICE_IDS=1` will ensure device 1 is always used instead of device 0.
|
||||
|
||||
Note that you should increase job concurrencies to increase overall utilization and more effectively distribute work across multiple GPUs. Additionally, each GPU must be able to load all models. It is not possible to distribute a single model to multiple GPUs that individually have insufficient VRAM, or to delegate a specific model to one GPU.
|
||||
|
||||
[hw-file]: https://github.com/immich-app/immich/releases/latest/download/hwaccel.ml.yml
|
||||
[nvct]: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
|
||||
|
||||
@@ -27,3 +27,39 @@ The beta release channel allows users to test upcoming changes before they are o
|
||||
:::info
|
||||
You can enable automatic backup on supported devices. For more information see [Automatic Backup](/docs/features/automatic-backup.md).
|
||||
:::
|
||||
|
||||
## Album Sync
|
||||
|
||||
You can sync or mirror an album from your phone to the Immich server on your account. For example, if you select Recents, Camera and Videos album for backup, the corresponding album with the same name will be created on the server. Once the assets from those albums are uploaded, they will be put into the target albums automatically.
|
||||
|
||||
### Album Synchronization Highlights
|
||||
|
||||
- **One-Way Sync:** Synchronization is one-way, from the device to the server.
|
||||
|
||||
- **Name Matching:** If an album on the server has the same name as the album on the device, images from the device will be merged with the existing images in the server album.
|
||||
|
||||
- **Shared Albums:** If the matching album on the server is shared, the new photos merged into the album will also be shared.
|
||||
|
||||
- **Album Structure:** When an album is created for the first time, its structure is based on the initial state. Future updates made on the phone (such as deleting or repositioning photos) will not be reflected in Immich.
|
||||
|
||||
- **User-Specific Sync:** Album synchronization is unique to each server user and does not sync between different users or partners.
|
||||
|
||||
- **Mobile-Only Feature:** Album synchronization is currently only available on mobile. For similar options on a computer, refer to [Libraries](/docs/features/libraries) for further details.
|
||||
|
||||
### Synchronizing albums from the past
|
||||
|
||||
Albums can be synchronized to the server even if they did not exist on the server before. In order to apply this setting you have to:
|
||||
Enter the cloud on the top right -> cog wheel on the top right -> select the sync option under Sync albums.
|
||||
|
||||
:::info Sync albums delete/move photos
|
||||
If you delete/move photos in the local album on your device, it will not be reflected in the album on the server **even if** you click Sync albums
|
||||
It will only reflect files you add.
|
||||
:::
|
||||
|
||||
If the same asset is in more than one album it will only sync to the first album it's in, after that it won't sync again even if the user clicks sync albums manually.
|
||||
To overcome this limitation, the files must be removed from the blacklist by
|
||||
App settings -> Advanced -> Duplicate Assets -> Clear
|
||||
|
||||
:::info
|
||||
Cleaning duplicate assets from the list will cause all the previously uploaded duplicate files to be re-uploaded, the files will not actually be uploaded and will be rejected on the server side (due to duplication) but will be synchronized to the album and at the end will be added to the black list again at the end of the synchronization.
|
||||
:::
|
||||
|
||||
@@ -25,10 +25,10 @@ The metrics in immich are grouped into API (endpoint calls and response times),
|
||||
|
||||
### Configuration
|
||||
|
||||
Immich will not expose an endpoint for metrics by default. To enable this endpoint, you can add the `IMMICH_METRICS=true` environmental variable to your `.env` file. Note that only the server and microservices containers currently use this variable.
|
||||
Immich will not expose an endpoint for metrics by default. To enable this endpoint, you can add the `IMMICH_TELEMETRY_INCLUDE=all` environmental variable to your `.env` file. Note that only the server container currently use this variable.
|
||||
|
||||
:::tip
|
||||
`IMMICH_METRICS` enables all metrics, but there are also [environmental variables](/docs/install/environment-variables.md#prometheus) to toggle specific metric groups. If you'd like to only expose certain kinds of metrics, you can set only those environmental variables to `true`. Explicitly setting the environmental variable for a metric group overrides `IMMICH_METRICS` for that group. For example, setting `IMMICH_METRICS=true` and `IMMICH_API_METRICS=false` will enable all metrics except API metrics.
|
||||
`IMMICH_TELEMETRY_INCLUDE=all` enables all metrics. For a more granular configuration you can enumerate the telemetry metrics that should be included as a comma separated list (e.g. `IMMICH_TELEMETRY_INCLUDE=repo,api`). Alternatively, you can also exclude specific metrics with `IMMICH_TELEMETRY_EXCLUDE`. For more information refer to the [environment section](/docs/install/environment-variables.md#prometheus).
|
||||
:::
|
||||
|
||||
The next step is to configure a new or existing Prometheus instance to scrape this endpoint. The following steps assume that you do not have an existing Prometheus instance, but the steps will be similar either way.
|
||||
|
||||
@@ -9,7 +9,7 @@ The database is saved to your Immich upload folder in the `database-backup` subd
|
||||
### Prerequisites
|
||||
|
||||
- Borg needs to be installed on your server as well as the remote machine. You can find instructions to install Borg [here](https://borgbackup.readthedocs.io/en/latest/installation.html).
|
||||
- (Optional) To run this sript as a non-root user, you should [add your username to the docker group](https://docs.docker.com/engine/install/linux-postinstall/).
|
||||
- (Optional) To run this script as a non-root user, you should [add your username to the docker group](https://docs.docker.com/engine/install/linux-postinstall/).
|
||||
- To run this script non-interactively, set up [passwordless ssh](https://www.redhat.com/sysadmin/passwordless-ssh) to your remote machine from your server. If you skipped the previous step, make sure this step is done from your root account.
|
||||
|
||||
To initialize the borg repository, run the following commands once.
|
||||
|
||||
@@ -19,20 +19,21 @@ The default configuration looks like this:
|
||||
"targetVideoCodec": "h264",
|
||||
"acceptedVideoCodecs": ["h264"],
|
||||
"targetAudioCodec": "aac",
|
||||
"acceptedAudioCodecs": ["aac", "mp3", "libopus"],
|
||||
"acceptedAudioCodecs": ["aac", "mp3", "libopus", "pcm_s16le"],
|
||||
"acceptedContainers": ["mov", "ogg", "webm"],
|
||||
"targetResolution": "720",
|
||||
"maxBitrate": "0",
|
||||
"bframes": -1,
|
||||
"refs": 0,
|
||||
"gopSize": 0,
|
||||
"npl": 0,
|
||||
"temporalAQ": false,
|
||||
"cqMode": "auto",
|
||||
"twoPass": false,
|
||||
"preferredHwDevice": "auto",
|
||||
"transcode": "required",
|
||||
"tonemap": "hable",
|
||||
"accel": "disabled"
|
||||
"accel": "disabled",
|
||||
"accelDecode": false
|
||||
},
|
||||
"job": {
|
||||
"backgroundTask": {
|
||||
@@ -60,10 +61,13 @@ The default configuration looks like this:
|
||||
"concurrency": 5
|
||||
},
|
||||
"thumbnailGeneration": {
|
||||
"concurrency": 5
|
||||
"concurrency": 3
|
||||
},
|
||||
"videoConversion": {
|
||||
"concurrency": 1
|
||||
},
|
||||
"notifications": {
|
||||
"concurrency": 5
|
||||
}
|
||||
},
|
||||
"logging": {
|
||||
@@ -78,40 +82,46 @@ The default configuration looks like this:
|
||||
"modelName": "ViT-B-32__openai"
|
||||
},
|
||||
"duplicateDetection": {
|
||||
"enabled": false,
|
||||
"maxDistance": 0.03
|
||||
"enabled": true,
|
||||
"maxDistance": 0.01
|
||||
},
|
||||
"facialRecognition": {
|
||||
"enabled": true,
|
||||
"modelName": "buffalo_l",
|
||||
"minScore": 0.7,
|
||||
"maxDistance": 0.6,
|
||||
"maxDistance": 0.5,
|
||||
"minFaces": 3
|
||||
}
|
||||
},
|
||||
"map": {
|
||||
"enabled": true,
|
||||
"lightStyle": "",
|
||||
"darkStyle": ""
|
||||
"lightStyle": "https://tiles.immich.cloud/v1/style/light.json",
|
||||
"darkStyle": "https://tiles.immich.cloud/v1/style/dark.json"
|
||||
},
|
||||
"reverseGeocoding": {
|
||||
"enabled": true
|
||||
},
|
||||
"metadata": {
|
||||
"faces": {
|
||||
"import": false
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"enabled": false,
|
||||
"issuerUrl": "",
|
||||
"autoLaunch": false,
|
||||
"autoRegister": true,
|
||||
"buttonText": "Login with OAuth",
|
||||
"clientId": "",
|
||||
"clientSecret": "",
|
||||
"defaultStorageQuota": 0,
|
||||
"enabled": false,
|
||||
"issuerUrl": "",
|
||||
"mobileOverrideEnabled": false,
|
||||
"mobileRedirectUri": "",
|
||||
"scope": "openid email profile",
|
||||
"signingAlgorithm": "RS256",
|
||||
"profileSigningAlgorithm": "none",
|
||||
"storageLabelClaim": "preferred_username",
|
||||
"storageQuotaClaim": "immich_quota",
|
||||
"defaultStorageQuota": 0,
|
||||
"buttonText": "Login with OAuth",
|
||||
"autoRegister": true,
|
||||
"autoLaunch": false,
|
||||
"mobileOverrideEnabled": false,
|
||||
"mobileRedirectUri": ""
|
||||
"storageQuotaClaim": "immich_quota"
|
||||
},
|
||||
"passwordLogin": {
|
||||
"enabled": true
|
||||
@@ -122,11 +132,16 @@ The default configuration looks like this:
|
||||
"template": "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"
|
||||
},
|
||||
"image": {
|
||||
"thumbnailFormat": "webp",
|
||||
"thumbnailSize": 250,
|
||||
"previewFormat": "jpeg",
|
||||
"previewSize": 1440,
|
||||
"quality": 80,
|
||||
"thumbnail": {
|
||||
"format": "webp",
|
||||
"size": 250,
|
||||
"quality": 80
|
||||
},
|
||||
"preview": {
|
||||
"format": "jpeg",
|
||||
"size": 1440,
|
||||
"quality": 80
|
||||
},
|
||||
"colorspace": "p3",
|
||||
"extractEmbedded": false
|
||||
},
|
||||
@@ -140,23 +155,35 @@ The default configuration looks like this:
|
||||
"theme": {
|
||||
"customCss": ""
|
||||
},
|
||||
"user": {
|
||||
"deleteDelay": 7
|
||||
},
|
||||
"library": {
|
||||
"scan": {
|
||||
"enabled": true,
|
||||
"cronExpression": "0 0 * * *"
|
||||
},
|
||||
"watch": {
|
||||
"enabled": false,
|
||||
"usePolling": false,
|
||||
"interval": 10000
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"server": {
|
||||
"externalDomain": "",
|
||||
"loginPageMessage": ""
|
||||
},
|
||||
"notifications": {
|
||||
"smtp": {
|
||||
"enabled": false,
|
||||
"from": "",
|
||||
"replyTo": "",
|
||||
"transport": {
|
||||
"ignoreCert": false,
|
||||
"host": "",
|
||||
"port": 587,
|
||||
"username": "",
|
||||
"password": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"deleteDelay": 7
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -42,6 +42,7 @@ These environment variables are used by the `docker-compose.yml` file and do **N
|
||||
| `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices |
|
||||
| `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices |
|
||||
| `IMMICH_TRUSTED_PROXIES` | List of comma separated IPs set as trusted proxies | | server | api |
|
||||
| `IMMICH_IGNORE_MOUNT_CHECK_ERRORS` | See [System Integrity](/docs/administration/system-integrity) | | server | api, microservices |
|
||||
|
||||
\*1: `TZ` should be set to a `TZ identifier` from [this list][tz-list]. For example, `TZ="Etc/UTC"`.
|
||||
`TZ` is used by `exiftool` as a fallback in case the timezone cannot be determined from the image metadata. It is also used for logfile timestamps and cron job execution.
|
||||
@@ -67,7 +68,7 @@ Information on the current workers can be found [here](/docs/administration/jobs
|
||||
| Variable | Description | Default |
|
||||
| :------------ | :------------- | :----------------------------------------: |
|
||||
| `IMMICH_HOST` | Listening host | `0.0.0.0` |
|
||||
| `IMMICH_PORT` | Listening port | `3001` (server), `3003` (machine learning) |
|
||||
| `IMMICH_PORT` | Listening port | `2283` (server), `3003` (machine learning) |
|
||||
|
||||
## Database
|
||||
|
||||
@@ -147,22 +148,24 @@ Redis (Sentinel) URL example JSON before encoding:
|
||||
|
||||
## Machine Learning
|
||||
|
||||
| Variable | Description | Default | Containers |
|
||||
| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :-----------------------------------: | :--------------- |
|
||||
| `MACHINE_LEARNING_MODEL_TTL` | Inactivity time (s) before a model is unloaded (disabled if \<= 0) | `300` | machine learning |
|
||||
| `MACHINE_LEARNING_MODEL_TTL_POLL_S` | Interval (s) between checks for the model TTL (disabled if \<= 0) | `10` | machine learning |
|
||||
| `MACHINE_LEARNING_CACHE_FOLDER` | Directory where models are downloaded | `/cache` | machine learning |
|
||||
| `MACHINE_LEARNING_REQUEST_THREADS`<sup>\*1</sup> | Thread count of the request thread pool (disabled if \<= 0) | number of CPU cores | machine learning |
|
||||
| `MACHINE_LEARNING_MODEL_INTER_OP_THREADS` | Number of parallel model operations | `1` | machine learning |
|
||||
| `MACHINE_LEARNING_MODEL_INTRA_OP_THREADS` | Number of threads for each model operation | `2` | machine learning |
|
||||
| `MACHINE_LEARNING_WORKERS`<sup>\*2</sup> | Number of worker processes to spawn | `1` | machine learning |
|
||||
| `MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S`<sup>\*3</sup> | HTTP Keep-alive time in seconds | `2` | machine learning |
|
||||
| `MACHINE_LEARNING_WORKER_TIMEOUT` | Maximum time (s) of unresponsiveness before a worker is killed | `120` (`300` if using OpenVINO image) | machine learning |
|
||||
| `MACHINE_LEARNING_PRELOAD__CLIP` | Name of a CLIP model to be preloaded and kept in cache | | machine learning |
|
||||
| `MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION` | Name of a facial recognition model to be preloaded and kept in cache | | machine learning |
|
||||
| `MACHINE_LEARNING_ANN` | Enable ARM-NN hardware acceleration if supported | `True` | machine learning |
|
||||
| `MACHINE_LEARNING_ANN_FP16_TURBO` | Execute operations in FP16 precision: increasing speed, reducing precision (applies only to ARM-NN) | `False` | machine learning |
|
||||
| `MACHINE_LEARNING_ANN_TUNING_LEVEL` | ARM-NN GPU tuning level (1: rapid, 2: normal, 3: exhaustive) | `2` | machine learning |
|
||||
| Variable | Description | Default | Containers |
|
||||
| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :-----------------------------: | :--------------- |
|
||||
| `MACHINE_LEARNING_MODEL_TTL` | Inactivity time (s) before a model is unloaded (disabled if \<= 0) | `300` | machine learning |
|
||||
| `MACHINE_LEARNING_MODEL_TTL_POLL_S` | Interval (s) between checks for the model TTL (disabled if \<= 0) | `10` | machine learning |
|
||||
| `MACHINE_LEARNING_CACHE_FOLDER` | Directory where models are downloaded | `/cache` | machine learning |
|
||||
| `MACHINE_LEARNING_REQUEST_THREADS`<sup>\*1</sup> | Thread count of the request thread pool (disabled if \<= 0) | number of CPU cores | machine learning |
|
||||
| `MACHINE_LEARNING_MODEL_INTER_OP_THREADS` | Number of parallel model operations | `1` | machine learning |
|
||||
| `MACHINE_LEARNING_MODEL_INTRA_OP_THREADS` | Number of threads for each model operation | `2` | machine learning |
|
||||
| `MACHINE_LEARNING_WORKERS`<sup>\*2</sup> | Number of worker processes to spawn | `1` | machine learning |
|
||||
| `MACHINE_LEARNING_HTTP_KEEPALIVE_TIMEOUT_S`<sup>\*3</sup> | HTTP Keep-alive time in seconds | `2` | machine learning |
|
||||
| `MACHINE_LEARNING_WORKER_TIMEOUT` | Maximum time (s) of unresponsiveness before a worker is killed | `120` (`300` if using OpenVINO) | machine learning |
|
||||
| `MACHINE_LEARNING_PRELOAD__CLIP` | Name of a CLIP model to be preloaded and kept in cache | | machine learning |
|
||||
| `MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION` | Name of a facial recognition model to be preloaded and kept in cache | | machine learning |
|
||||
| `MACHINE_LEARNING_ANN` | Enable ARM-NN hardware acceleration if supported | `True` | machine learning |
|
||||
| `MACHINE_LEARNING_ANN_FP16_TURBO` | Execute operations in FP16 precision: increasing speed, reducing precision (applies only to ARM-NN) | `False` | machine learning |
|
||||
| `MACHINE_LEARNING_ANN_TUNING_LEVEL` | ARM-NN GPU tuning level (1: rapid, 2: normal, 3: exhaustive) | `2` | machine learning |
|
||||
| `MACHINE_LEARNING_DEVICE_IDS`<sup>\*4</sup> | Device IDs to use in multi-GPU environments | `0` | machine learning |
|
||||
| `MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION` | Set the maximum number of faces that will be processed at once by the facial recognition model | None (`1` if using OpenVINO) | machine learning |
|
||||
|
||||
\*1: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones.
|
||||
|
||||
@@ -170,6 +173,8 @@ Redis (Sentinel) URL example JSON before encoding:
|
||||
|
||||
\*3: For scenarios like HPA in K8S. https://github.com/immich-app/immich/discussions/12064
|
||||
|
||||
\*4: Using multiple GPUs requires `MACHINE_LEARNING_WORKERS` to be set greater than 1. A single device is assigned to each worker in round-robin priority.
|
||||
|
||||
:::info
|
||||
|
||||
Other machine learning parameters can be tuned from the admin UI.
|
||||
@@ -178,15 +183,10 @@ Other machine learning parameters can be tuned from the admin UI.
|
||||
|
||||
## Prometheus
|
||||
|
||||
| Variable | Description | Default | Containers | Workers |
|
||||
| :----------------------------- | :-------------------------------------------------------------------------------------------- | :-----: | :--------- | :----------------- |
|
||||
| `IMMICH_METRICS`<sup>\*1</sup> | Toggle all metrics (one of [`true`, `false`]) | | server | api, microservices |
|
||||
| `IMMICH_API_METRICS` | Toggle metrics for endpoints and response times (one of [`true`, `false`]) | | server | api, microservices |
|
||||
| `IMMICH_HOST_METRICS` | Toggle metrics for CPU and memory utilization for host and process (one of [`true`, `false`]) | | server | api, microservices |
|
||||
| `IMMICH_IO_METRICS` | Toggle metrics for database queries, image processing, etc. (one of [`true`, `false`]) | | server | api, microservices |
|
||||
| `IMMICH_JOB_METRICS` | Toggle metrics for jobs and queues (one of [`true`, `false`]) | | server | api, microservices |
|
||||
|
||||
\*1: Overridden for a metric group when its corresponding environmental variable is set.
|
||||
| Variable | Description | Default | Containers | Workers |
|
||||
| :------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :-----: | :--------- | :----------------- |
|
||||
| `IMMICH_TELEMETRY_INCLUDE` | Collect these telemetries. List of `host`, `api`, `io`, `repo`, `job`. Note: You can also specify `all` to enable all | | server | api, microservices |
|
||||
| `IMMICH_TELEMETRY_EXCLUDE` | Do not collect these telemetries. List of `host`, `api`, `io`, `repo`, `job` | | server | api, microservices |
|
||||
|
||||
## Docker Secrets
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ You can organize these as one parent with seven child datasets, for example `mnt
|
||||
|
||||
:::info Permissions
|
||||
The **pgData** dataset must be owned by the user `netdata` (UID 999) for postgres to start. The other datasets must be owned by the user `root` (UID 0) or a group that includes the user `root` (UID 0) for immich to have the necessary permissions.
|
||||
|
||||
The **library** dataset must have [ACL mode](https://www.truenas.com/docs/core/coretutorials/storage/pools/permissions/#access-control-lists) set to `Passthrough` if you plan on using a [storage template](/docs/administration/storage-template.mdx) and the dataset is configured for network sharing (its ACL type is set to `SMB/NFSv4`). When the template is applied and files need to be moved from **uploads** to **library**, immich performs `chmod` internally and needs to be allowed to execute the command.
|
||||
:::
|
||||
|
||||
## Installing the Immich Application
|
||||
|
||||
@@ -77,6 +77,7 @@ alt="Select Plugins > Compose.Manager > Add New Stack > Label it Immich"
|
||||
7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following:
|
||||
|
||||
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
|
||||
- `DB_DATA_LOCATION`: Change this to use an Unraid share (preferably a cache pool, e.g. `/mnt/user/appdata`). If left at default it will try to use Unraid's `/boot/config/plugins/compose.manager/projects/[stack_name]/postgres` folder which it doesn't have permissions to, resulting in this container continuously restarting.
|
||||
|
||||
<img
|
||||
src={require('./img/unraid05.webp').default}
|
||||
|
||||
@@ -16,5 +16,9 @@ Support the project by localizing on [Weblate](https://hosted.weblate.org/projec
|
||||
|
||||
If you are a programmer or developer, take a look at Immich's [technology stack](/docs/developer/architecture.mdx) and consider fixing bugs or building new features. The team and I are always looking for new contributors. For information about how to contribute as a developer, see the [Developer](/docs/developer/architecture.mdx) section.
|
||||
|
||||
## Purchase Immich
|
||||
|
||||
You can also [purchase Immich](https://buy.immich.app), for either one user or your entire server. Building Immich takes a lot of time and effort, and we have full-time engineers working on it to make it as good as we possibly can, so any support is greatly appreciated. Don't worry, all features will be free, forever! Nothing will ever be put behind any paywalls.
|
||||
|
||||
[github-issue]: https://github.com/immich-app/immich/issues/new/choose
|
||||
[github-langs]: https://github.com/immich-app/immich/tree/main/mobile/assets/i18n
|
||||
|
||||
@@ -31,5 +31,5 @@ Immich also provides a mechanism to migrate between templates so that if the tem
|
||||
If you want to store assets in album folders, but you also have assets that do not belong to any album, you can use `{{#if album}}`, `{{else}}` and `{{/if}}` to create a conditional statement. For example, the following template will store assets in album folders if they belong to an album, and in a folder named "Other/Month" if they do not belong to an album:
|
||||
|
||||
```
|
||||
{{y}}/{{#if album}}{{album}}{{else}}Other/{{MM}}{{/if}}/{{filename}}
|
||||
{{y}}/{{#if album}}{{album}}{{else}}Other{{/if}}/{{MM}}/{{filename}}
|
||||
```
|
||||
|
||||
@@ -72,14 +72,9 @@ const config = {
|
||||
themeConfig:
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
colorMode: {
|
||||
defaultMode: 'dark',
|
||||
},
|
||||
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!`,
|
||||
backgroundColor: '#593f00',
|
||||
textColor: '#ffefc9',
|
||||
isCloseable: false,
|
||||
},
|
||||
docs: {
|
||||
@@ -201,7 +196,7 @@ const config = {
|
||||
darkTheme: prism.themes.dracula,
|
||||
additionalLanguages: ['sql', 'diff', 'bash', 'powershell', 'nginx'],
|
||||
},
|
||||
image: 'overview/img/feature-panel.png',
|
||||
image: 'img/feature-panel.png',
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
42
docs/package-lock.json
generated
@@ -3006,9 +3006,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mdx-js/react": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz",
|
||||
"integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==",
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz",
|
||||
"integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/mdx": "^2.0.0"
|
||||
},
|
||||
@@ -12715,9 +12716,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
|
||||
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
|
||||
"integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
@@ -12829,9 +12830,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.40",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
|
||||
"integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
|
||||
"version": "8.4.47",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
|
||||
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@@ -12849,8 +12850,8 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.7",
|
||||
"picocolors": "^1.0.1",
|
||||
"source-map-js": "^1.2.0"
|
||||
"picocolors": "^1.1.0",
|
||||
"source-map-js": "^1.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
@@ -15670,9 +15671,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
||||
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -16091,9 +16093,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss": {
|
||||
"version": "3.4.12",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.12.tgz",
|
||||
"integrity": "sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==",
|
||||
"version": "3.4.14",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
|
||||
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
@@ -16453,9 +16455,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
|
||||
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
|
||||
"version": "5.6.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
|
||||
@@ -56,6 +56,6 @@
|
||||
"node": ">=20"
|
||||
},
|
||||
"volta": {
|
||||
"node": "20.17.0"
|
||||
"node": "22.11.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,20 +52,20 @@ const guides: CommunityGuidesProps[] = [
|
||||
|
||||
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {
|
||||
return (
|
||||
<section className="flex flex-col gap-4 justify-between dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl p-4">
|
||||
<section className="flex flex-col gap-4 justify-between dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl px-4 py-6">
|
||||
<div className="flex flex-col gap-2">
|
||||
<p className="m-0 items-start flex gap-2">
|
||||
<p className="m-0 items-start flex gap-2 text-2xl font-bold text-immich-primary dark:text-immich-dark-primary">
|
||||
<span>{title}</span>
|
||||
</p>
|
||||
|
||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300">{description}</p>
|
||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300">
|
||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300 my-4">
|
||||
<a href={url}>{url}</a>
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<Link
|
||||
className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-full hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold uppercase"
|
||||
className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-xl text-sm hover:no-underline text-immich-primary dark:text-immich-dark-bg font-semibold"
|
||||
to={url}
|
||||
>
|
||||
View Guide
|
||||
|
||||
@@ -83,27 +83,33 @@ const projects: CommunityProjectProps[] = [
|
||||
description: 'Power tools for organizing your immich library.',
|
||||
url: 'https://github.com/varun-raj/immich-power-tools',
|
||||
},
|
||||
{
|
||||
title: 'Immich Public Proxy',
|
||||
description:
|
||||
'Share your Immich photos and albums in a safe way without exposing your Immich instance to the public.',
|
||||
url: 'https://github.com/alangrainger/immich-public-proxy',
|
||||
},
|
||||
];
|
||||
|
||||
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
|
||||
return (
|
||||
<section className="flex flex-col gap-4 justify-between dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl p-4">
|
||||
<section className="flex flex-col gap-4 justify-between dark:bg-immich-dark-gray bg-immich-gray dark:border-0 border-gray-200 border border-solid rounded-2xl px-4 py-6">
|
||||
<div className="flex flex-col gap-2">
|
||||
<p className="m-0 items-start flex gap-2">
|
||||
<p className="m-0 items-start flex gap-2 text-2xl font-bold text-immich-primary dark:text-immich-dark-primary">
|
||||
<span>{title}</span>
|
||||
</p>
|
||||
|
||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300">{description}</p>
|
||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300">
|
||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300 my-4">
|
||||
<a href={url}>{url}</a>
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<Link
|
||||
className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-full hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold uppercase"
|
||||
className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-xl text-sm hover:no-underline text-immich-primary dark:text-immich-dark-bg font-semibold"
|
||||
to={url}
|
||||
>
|
||||
View Project
|
||||
View Link
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
2
docs/src/components/svg-paths.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export const discordPath =
|
||||
'M 9.1367188 3.8691406 C 9.1217187 3.8691406 9.1067969 3.8700938 9.0917969 3.8710938 C 8.9647969 3.8810937 5.9534375 4.1403594 4.0234375 5.6933594 C 3.0154375 6.6253594 1 12.073203 1 16.783203 C 1 16.866203 1.0215 16.946531 1.0625 17.019531 C 2.4535 19.462531 6.2473281 20.102859 7.1113281 20.130859 L 7.1269531 20.130859 C 7.2799531 20.130859 7.4236719 20.057594 7.5136719 19.933594 L 8.3886719 18.732422 C 6.0296719 18.122422 4.8248594 17.086391 4.7558594 17.025391 C 4.5578594 16.850391 4.5378906 16.549563 4.7128906 16.351562 C 4.8068906 16.244563 4.9383125 16.189453 5.0703125 16.189453 C 5.1823125 16.189453 5.2957188 16.228594 5.3867188 16.308594 C 5.4157187 16.334594 7.6340469 18.216797 11.998047 18.216797 C 16.370047 18.216797 18.589328 16.325641 18.611328 16.306641 C 18.702328 16.227641 18.815734 16.189453 18.927734 16.189453 C 19.059734 16.189453 19.190156 16.243562 19.285156 16.351562 C 19.459156 16.549563 19.441141 16.851391 19.244141 17.025391 C 19.174141 17.087391 17.968375 18.120469 15.609375 18.730469 L 16.484375 19.933594 C 16.574375 20.057594 16.718094 20.130859 16.871094 20.130859 L 16.886719 20.130859 C 17.751719 20.103859 21.5465 19.463531 22.9375 17.019531 C 22.9785 16.947531 23 16.866203 23 16.783203 C 23 12.073203 20.984172 6.624875 19.951172 5.671875 C 18.047172 4.140875 15.036203 3.8820937 14.908203 3.8710938 C 14.895203 3.8700938 14.880188 3.8691406 14.867188 3.8691406 C 14.681188 3.8691406 14.510594 3.9793906 14.433594 4.1503906 C 14.427594 4.1623906 14.362062 4.3138281 14.289062 4.5488281 C 15.548063 4.7608281 17.094141 5.1895937 18.494141 6.0585938 C 18.718141 6.1975938 18.787437 6.4917969 18.648438 6.7167969 C 18.558438 6.8627969 18.402188 6.9433594 18.242188 6.9433594 C 18.156188 6.9433594 18.069234 6.9200937 17.990234 6.8710938 C 15.584234 5.3800938 12.578 5.3046875 12 5.3046875 C 11.422 5.3046875 8.4157187 5.3810469 6.0117188 6.8730469 C 5.9327188 6.9210469 5.8457656 6.9433594 5.7597656 6.9433594 C 5.5997656 6.9433594 5.4425625 6.86475 5.3515625 6.71875 C 5.2115625 6.49375 5.2818594 6.1985938 5.5058594 6.0585938 C 6.9058594 5.1905937 8.4528906 4.7627812 9.7128906 4.5507812 C 9.6388906 4.3147813 9.5714062 4.1643437 9.5664062 4.1523438 C 9.4894063 3.9813438 9.3217188 3.8691406 9.1367188 3.8691406 z M 12 7.3046875 C 12.296 7.3046875 14.950594 7.3403125 16.933594 8.5703125 C 17.326594 8.8143125 17.777234 8.9453125 18.240234 8.9453125 C 18.633234 8.9453125 19.010656 8.8555 19.347656 8.6875 C 19.964656 10.2405 20.690828 12.686219 20.923828 15.199219 C 20.883828 15.143219 20.840922 15.089109 20.794922 15.037109 C 20.324922 14.498109 19.644687 14.191406 18.929688 14.191406 C 18.332687 14.191406 17.754078 14.405437 17.330078 14.773438 C 17.257078 14.832437 15.505 16.21875 12 16.21875 C 8.496 16.21875 6.7450313 14.834687 6.7070312 14.804688 C 6.2540312 14.407687 5.6742656 14.189453 5.0722656 14.189453 C 4.3612656 14.189453 3.6838438 14.494391 3.2148438 15.025391 C 3.1658438 15.080391 3.1201719 15.138266 3.0761719 15.197266 C 3.3091719 12.686266 4.0344375 10.235594 4.6484375 8.6835938 C 4.9864375 8.8525938 5.3657656 8.9433594 5.7597656 8.9433594 C 6.2217656 8.9433594 6.6724531 8.8143125 7.0644531 8.5703125 C 9.0494531 7.3393125 11.704 7.3046875 12 7.3046875 z M 8.890625 10.044922 C 7.966625 10.044922 7.2167969 10.901031 7.2167969 11.957031 C 7.2167969 13.013031 7.965625 13.869141 8.890625 13.869141 C 9.815625 13.869141 10.564453 13.013031 10.564453 11.957031 C 10.564453 10.900031 9.815625 10.044922 8.890625 10.044922 z M 15.109375 10.044922 C 14.185375 10.044922 13.435547 10.901031 13.435547 11.957031 C 13.435547 13.013031 14.184375 13.869141 15.109375 13.869141 C 16.034375 13.869141 16.783203 13.013031 16.783203 11.957031 C 16.783203 10.900031 16.033375 10.044922 15.109375 10.044922 z';
|
||||
@@ -7,11 +7,12 @@
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@import url('https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
||||
|
||||
html,
|
||||
button {
|
||||
font-family: 'Overpass', sans-serif;
|
||||
font-family: 'Be Vietnam Pro', sans-serif;
|
||||
font-optical-sizing: auto;
|
||||
}
|
||||
|
||||
img {
|
||||
@@ -27,7 +28,6 @@ img {
|
||||
--ifm-color-primary-light: #4250af;
|
||||
--ifm-color-primary-lighter: #4250af;
|
||||
--ifm-color-primary-lightest: #4250af;
|
||||
--ifm-code-font-size: 95%;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
@@ -40,10 +40,28 @@ img {
|
||||
--ifm-color-primary-light: #d5e4fc;
|
||||
--ifm-color-primary-lighter: #e9f1fe;
|
||||
--ifm-color-primary-lightest: #ffffff;
|
||||
--ifm-background-color: #000000;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||
--ifm-background-color: #000000;
|
||||
}
|
||||
|
||||
div[class^='announcementBar_'] {
|
||||
min-height: 2rem;
|
||||
background-color: #2b3336;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menu__link {
|
||||
padding: 10px;
|
||||
padding-left: 16px;
|
||||
border-radius: 10px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.menu__list-item-collapsible {
|
||||
border-radius: 10px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
@@ -2,46 +2,82 @@ import React from 'react';
|
||||
import Link from '@docusaurus/Link';
|
||||
import Layout from '@theme/Layout';
|
||||
import { useColorMode } from '@docusaurus/theme-common';
|
||||
import { discordPath } from '@site/src/components/svg-paths';
|
||||
import Icon from '@mdi/react';
|
||||
function HomepageHeader() {
|
||||
const { isDarkTheme } = useColorMode();
|
||||
|
||||
return (
|
||||
<header>
|
||||
<section className="text-center m-6 p-12 border border-red-400 rounded-[50px] bg-slate-200 dark:bg-immich-dark-gray">
|
||||
<div className="top-[calc(12%)] md:top-[calc(30%)] h-screen w-full absolute -z-10">
|
||||
<img src={'img/immich-logo.svg'} className="h-[110%] w-[110%] mb-2 antialiased -z-10" alt="Immich logo" />
|
||||
<div className="w-full h-[120vh] absolute left-0 top-0 backdrop-blur-3xl bg-immich-bg/40 dark:bg-transparent"></div>
|
||||
</div>
|
||||
<section className="text-center pt-12 sm:pt-24 bg-immich-bg/50 dark:bg-immich-dark-bg/80">
|
||||
<img
|
||||
src={isDarkTheme ? 'img/immich-logo-stacked-dark.svg' : 'img/immich-logo-stacked-light.svg'}
|
||||
className="md:h-60 h-44 mb-2 antialiased rounded-none"
|
||||
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'}
|
||||
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
|
||||
alt="Immich logo"
|
||||
/>
|
||||
<div className="sm:text-2xl text-lg md:text-4xl mb-12 sm:leading-tight">
|
||||
<p className="mb-1 font-medium text-immich-primary dark:text-immich-dark-primary">
|
||||
Self-hosted photo and <span className="block"></span>
|
||||
video management solution<span className="block"></span>
|
||||
<div className="mt-8">
|
||||
<p className="text-3xl md:text-5xl sm:leading-tight mb-1 font-extrabold text-black/90 dark:text-white px-4">
|
||||
Self-hosted{' '}
|
||||
<span className="text-immich-primary dark:text-immich-dark-primary">
|
||||
photo and <span className="block"></span>
|
||||
video management{' '}
|
||||
</span>
|
||||
solution<span className="block"></span>
|
||||
</p>
|
||||
|
||||
<p className="max-w-1/4 m-auto mt-4 px-4">
|
||||
Easily back up, organize, and manage your photos on your own server. Immich helps you
|
||||
<span className="sm:block"></span> browse, search and organize your photos and videos with ease, without
|
||||
sacrificing your privacy.
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 mb-16 gap-4 ">
|
||||
|
||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 gap-4 ">
|
||||
<Link
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-full no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold uppercase"
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-xl no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold uppercase"
|
||||
to="docs/overview/introduction"
|
||||
>
|
||||
Get started
|
||||
</Link>
|
||||
|
||||
<Link
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary/10 dark:bg-gray-300 rounded-full hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold uppercase"
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary/10 dark:bg-gray-300 rounded-xl hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold uppercase"
|
||||
to="https://demo.immich.app/"
|
||||
>
|
||||
Demo portal
|
||||
</Link>
|
||||
|
||||
<Link
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-dark-primary dark:bg-immich-primary rounded-full hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold uppercase"
|
||||
to="https://discord.immich.app"
|
||||
>
|
||||
Discord
|
||||
Demo
|
||||
</Link>
|
||||
</div>
|
||||
<img src="/img/immich-screenshots.webp" alt="screenshots" width={'70%'} />
|
||||
|
||||
<div className="my-12 flex gap-1 font-medium place-items-center place-content-center text-immich-primary dark:text-immich-dark-primary">
|
||||
<Icon path={discordPath} size={1} />
|
||||
<Link to="https://discord.immich.app/">Join our Discord</Link>
|
||||
</div>
|
||||
<img
|
||||
src={isDarkTheme ? '/img/screenshot-dark.webp' : '/img/screenshot-light.webp'}
|
||||
alt="screenshots"
|
||||
className="w-[95%] lg:w-[85%] xl:w-[70%] 2xl:w-[60%] "
|
||||
/>
|
||||
|
||||
<div className="mx-[25%] m-auto my-14 md:my-28">
|
||||
<hr className="border bg-gray-500 dark:bg-gray-400" />
|
||||
</div>
|
||||
|
||||
<img
|
||||
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'}
|
||||
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
|
||||
alt="Immich logo"
|
||||
/>
|
||||
|
||||
<div>
|
||||
<p className="font-bold text-2xl md:text-5xl ">Download mobile app</p>
|
||||
<p className="text-lg">
|
||||
Download Immich app and start backing up your photos and videos securely to your own server
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-4 gap-1">
|
||||
<div className="h-24">
|
||||
<a href="https://play.google.com/store/apps/details?id=app.alextran.immich">
|
||||
@@ -54,6 +90,13 @@ function HomepageHeader() {
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<img
|
||||
src={isDarkTheme ? '/img/app-qr-code-dark.svg' : '/img/app-qr-code-light.svg'}
|
||||
alt="app qr code"
|
||||
width={'150px'}
|
||||
className="shadow-lg p-3 my-8 dark:bg-immich-dark-bg "
|
||||
/>
|
||||
</section>
|
||||
</header>
|
||||
);
|
||||
@@ -61,13 +104,9 @@ function HomepageHeader() {
|
||||
|
||||
export default function Home(): JSX.Element {
|
||||
return (
|
||||
<Layout
|
||||
title="Home"
|
||||
description="immich Self-hosted photo and video backup solution directly from your mobile phone "
|
||||
noFooter={true}
|
||||
>
|
||||
<Layout title="Home" description="Self-hosted photo and video management solution" noFooter={true}>
|
||||
<HomepageHeader />
|
||||
<div className="flex flex-col place-items-center place-content-center">
|
||||
<div className="flex flex-col place-items-center text-center place-content-center dark:bg-immich-dark-bg py-8">
|
||||
<p>This project is available under GNU AGPL v3 license.</p>
|
||||
<p className="text-xs">Privacy should not be a luxury</p>
|
||||
</div>
|
||||
|
||||
@@ -70,6 +70,8 @@ import {
|
||||
mdiThemeLightDark,
|
||||
mdiTrashCanOutline,
|
||||
mdiVectorCombine,
|
||||
mdiFolderSync,
|
||||
mdiFaceRecognition,
|
||||
mdiVideo,
|
||||
mdiWeb,
|
||||
} from '@mdi/js';
|
||||
@@ -78,6 +80,7 @@ import React from 'react';
|
||||
import { Item, Timeline } from '../components/timeline';
|
||||
|
||||
const releases = {
|
||||
'v1.114.0': new Date(2024, 8, 6),
|
||||
'v1.113.0': new Date(2024, 7, 30),
|
||||
'v1.112.0': new Date(2024, 7, 14),
|
||||
'v1.111.0': new Date(2024, 6, 26),
|
||||
@@ -231,6 +234,12 @@ const roadmap: Item[] = [
|
||||
];
|
||||
|
||||
const milestones: Item[] = [
|
||||
withRelease({
|
||||
icon: mdiFaceRecognition,
|
||||
title: 'Metadata Face Import',
|
||||
description: 'Read face metadata in Digikam format during import',
|
||||
release: 'v1.114.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiTagMultiple,
|
||||
iconColor: 'orange',
|
||||
@@ -238,11 +247,18 @@ const milestones: Item[] = [
|
||||
description: 'Tag your photos and videos',
|
||||
release: 'v1.113.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolderSync,
|
||||
iconColor: 'green',
|
||||
title: 'Album sync (mobile)',
|
||||
description: 'Sync or mirror an album from your phone to the Immich server',
|
||||
release: 'v1.113.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolderMultiple,
|
||||
iconColor: 'brown',
|
||||
title: 'Folders',
|
||||
description: 'View your photos and videos in folders',
|
||||
description: 'Browse your photos and videos in their folder structure',
|
||||
release: 'v1.113.0',
|
||||
}),
|
||||
withRelease({
|
||||
|
||||
32
docs/static/archived-versions.json
vendored
@@ -1,4 +1,36 @@
|
||||
[
|
||||
{
|
||||
"label": "v1.119.1",
|
||||
"url": "https://v1.119.1.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.119.0",
|
||||
"url": "https://v1.119.0.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.118.2",
|
||||
"url": "https://v1.118.2.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.118.1",
|
||||
"url": "https://v1.118.1.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.118.0",
|
||||
"url": "https://v1.118.0.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.117.0",
|
||||
"url": "https://v1.117.0.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.116.2",
|
||||
"url": "https://v1.116.2.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.116.1",
|
||||
"url": "https://v1.116.1.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.116.0",
|
||||
"url": "https://v1.116.0.archive.immich.app"
|
||||
|
||||
378
docs/static/img/app-qr-code-dark.svg
vendored
Normal file
@@ -0,0 +1,378 @@
|
||||
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1160_310)">
|
||||
<path d="M500 0H0V500H500V0Z" fill="#070915"/>
|
||||
<mask id="mask0_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="18" y="18" width="464" height="464">
|
||||
<path d="M18 162H34V146H26C23.8783 146 21.8434 146.843 20.3431 148.343C18.8428 149.843 18 151.878 18 154" fill="white"/>
|
||||
<path d="M34 178V162H18L18 170C18 172.122 18.8429 174.157 20.3431 175.657C21.8434 177.157 23.8783 178 26 178" fill="white"/>
|
||||
<path d="M18 242H34V234C34 231.878 33.1572 229.843 31.6569 228.343C30.1566 226.843 28.1217 226 26 226C23.8783 226 21.8434 226.843 20.3431 228.343C18.8428 229.843 18 231.878 18 234" fill="white"/>
|
||||
<path d="M34 242H18V258H34V242Z" fill="white"/>
|
||||
<path d="M34 258H18V266C18 268.122 18.8428 270.157 20.3431 271.657C21.8434 273.157 23.8783 274 26 274C28.1217 274 30.1566 273.157 31.6569 271.657C33.1572 270.157 34 268.122 34 266" fill="white"/>
|
||||
<path d="M34 322V306H26C23.8783 306 21.8434 306.843 20.3431 308.343C18.8429 309.843 18 311.878 18 314C18 316.122 18.8429 318.157 20.3431 319.657C21.8434 321.157 23.8783 322 26 322" fill="white"/>
|
||||
<path d="M50 146H34V162H50V146Z" fill="white"/>
|
||||
<path d="M50 162H34V178H42C44.1217 178 46.1566 177.157 47.6569 175.657C49.1572 174.157 50 172.122 50 170" fill="white"/>
|
||||
<path d="M34 290H50V282C50 279.878 49.1572 277.843 47.6569 276.343C46.1566 274.843 44.1217 274 42 274C39.8783 274 37.8434 274.843 36.3431 276.343C34.8428 277.843 34 279.878 34 282" fill="white"/>
|
||||
<path d="M50 290H34V306H50V290Z" fill="white"/>
|
||||
<path d="M50 306H34V322H50V306Z" fill="white"/>
|
||||
<path d="M66 146H50V162H66V146Z" fill="white"/>
|
||||
<path d="M58 258C62.4183 258 66 254.418 66 250C66 245.582 62.4183 242 58 242C53.5817 242 50 245.582 50 250C50 254.418 53.5817 258 58 258Z" fill="white"/>
|
||||
<path d="M50 306V322H66V314C66 311.878 65.1571 309.843 63.6569 308.343C62.1566 306.843 60.1217 306 58 306" fill="white"/>
|
||||
<path d="M66 322H50V330C50 332.122 50.8428 334.157 52.3431 335.657C53.8434 337.157 55.8783 338 58 338C60.1217 338 62.1566 337.157 63.6569 335.657C65.1572 334.157 66 332.122 66 330" fill="white"/>
|
||||
<path d="M82 146H66V162H82V146Z" fill="white"/>
|
||||
<path d="M66 210H82V202C82 199.878 81.1572 197.843 79.6569 196.343C78.1566 194.843 76.1217 194 74 194C71.8783 194 69.8434 194.843 68.3431 196.343C66.8428 197.843 66 199.878 66 202" fill="white"/>
|
||||
<path d="M82 210H66V218C66 220.122 66.8428 222.157 68.3431 223.657C69.8434 225.157 71.8783 226 74 226C76.1217 226 78.1566 225.157 79.6569 223.657C81.1572 222.157 82 220.122 82 218" fill="white"/>
|
||||
<path d="M74 354C78.4183 354 82 350.418 82 346C82 341.582 78.4183 338 74 338C69.5817 338 66 341.582 66 346C66 350.418 69.5817 354 74 354Z" fill="white"/>
|
||||
<path d="M82 146V162H98V154C98 151.878 97.1571 149.843 95.6569 148.343C94.1566 146.843 92.1217 146 90 146" fill="white"/>
|
||||
<path d="M98 162H82V178H98V162Z" fill="white"/>
|
||||
<path d="M98 194V178H82V186C82 188.122 82.8429 190.157 84.3431 191.657C85.8434 193.157 87.8783 194 90 194" fill="white"/>
|
||||
<path d="M82 242H98V226H90C87.8783 226 85.8434 226.843 84.3431 228.343C82.8428 229.843 82 231.878 82 234" fill="white"/>
|
||||
<path d="M98 258V242H82V250C82 252.122 82.8429 254.157 84.3431 255.657C85.8434 257.157 87.8783 258 90 258" fill="white"/>
|
||||
<path d="M98 290V274H90C87.8783 274 85.8434 274.843 84.3431 276.343C82.8429 277.843 82 279.878 82 282C82 284.122 82.8429 286.157 84.3431 287.657C85.8434 289.157 87.8783 290 90 290" fill="white"/>
|
||||
<path d="M82 322H98V314C98 311.878 97.1572 309.843 95.6569 308.343C94.1566 306.843 92.1217 306 90 306C87.8783 306 85.8434 306.843 84.3431 308.343C82.8428 309.843 82 311.878 82 314" fill="white"/>
|
||||
<path d="M98 338V322H82V330C82 332.122 82.8429 334.157 84.3431 335.657C85.8434 337.157 87.8783 338 90 338" fill="white"/>
|
||||
<path d="M98 162V178H114V170C114 167.878 113.157 165.843 111.657 164.343C110.157 162.843 108.122 162 106 162" fill="white"/>
|
||||
<path d="M114 178H98V194H114V178Z" fill="white"/>
|
||||
<path d="M114 194H98V210H114V194Z" fill="white"/>
|
||||
<path d="M114 210H98V226H114V210Z" fill="white"/>
|
||||
<path d="M114 226H98V242H114V226Z" fill="white"/>
|
||||
<path d="M114 242H98V258H114V242Z" fill="white"/>
|
||||
<path d="M114 258H98V274H114V258Z" fill="white"/>
|
||||
<path d="M114 274H98V290H114V274Z" fill="white"/>
|
||||
<path d="M114 290H98V298C98 300.122 98.8428 302.157 100.343 303.657C101.843 305.157 103.878 306 106 306C108.122 306 110.157 305.157 111.657 303.657C113.157 302.157 114 300.122 114 298" fill="white"/>
|
||||
<path d="M98 322V338H114V330C114 327.878 113.157 325.843 111.657 324.343C110.157 322.843 108.122 322 106 322" fill="white"/>
|
||||
<path d="M114 354V338H98V346C98 348.122 98.8429 350.157 100.343 351.657C101.843 353.157 103.878 354 106 354" fill="white"/>
|
||||
<path d="M130 162V146H122C119.878 146 117.843 146.843 116.343 148.343C114.843 149.843 114 151.878 114 154C114 156.122 114.843 158.157 116.343 159.657C117.843 161.157 119.878 162 122 162" fill="white"/>
|
||||
<path d="M114 178V194H122C124.122 194 126.157 193.157 127.657 191.657C129.157 190.157 130 188.122 130 186C130 183.878 129.157 181.843 127.657 180.343C126.157 178.843 124.122 178 122 178" fill="white"/>
|
||||
<path d="M114 210V226H122C124.122 226 126.157 225.157 127.657 223.657C129.157 222.157 130 220.122 130 218C130 215.878 129.157 213.843 127.657 212.343C126.157 210.843 124.122 210 122 210" fill="white"/>
|
||||
<path d="M130 242H114V258H130V242Z" fill="white"/>
|
||||
<path d="M114 274V290H122C124.122 290 126.157 289.157 127.657 287.657C129.157 286.157 130 284.122 130 282C130 279.878 129.157 277.843 127.657 276.343C126.157 274.843 124.122 274 122 274" fill="white"/>
|
||||
<path d="M130 322V306H122C119.878 306 117.843 306.843 116.343 308.343C114.843 309.843 114 311.878 114 314C114 316.122 114.843 318.157 116.343 319.657C117.843 321.157 119.878 322 122 322" fill="white"/>
|
||||
<path d="M130 338H114V354H130V338Z" fill="white"/>
|
||||
<path d="M130 146V162H146V154C146 151.878 145.157 149.843 143.657 148.343C142.157 146.843 140.122 146 138 146" fill="white"/>
|
||||
<path d="M146 162H130V170C130 172.122 130.843 174.157 132.343 175.657C133.843 177.157 135.878 178 138 178C140.122 178 142.157 177.157 143.657 175.657C145.157 174.157 146 172.122 146 170" fill="white"/>
|
||||
<path d="M138 210C142.418 210 146 206.418 146 202C146 197.582 142.418 194 138 194C133.582 194 130 197.582 130 202C130 206.418 133.582 210 138 210Z" fill="white"/>
|
||||
<path d="M130 242V258H138C140.122 258 142.157 257.157 143.657 255.657C145.157 254.157 146 252.122 146 250C146 247.878 145.157 245.843 143.657 244.343C142.157 242.843 140.122 242 138 242" fill="white"/>
|
||||
<path d="M130 306H146V298C146 295.878 145.157 293.843 143.657 292.343C142.157 290.843 140.122 290 138 290C135.878 290 133.843 290.843 132.343 292.343C130.843 293.843 130 295.878 130 298" fill="white"/>
|
||||
<path d="M146 306H130V322H146V306Z" fill="white"/>
|
||||
<path d="M146 322H130V338H146V322Z" fill="white"/>
|
||||
<path d="M146 338H130V354H138C140.122 354 142.157 353.157 143.657 351.657C145.157 350.157 146 348.122 146 346" fill="white"/>
|
||||
<path d="M146 50H162V42C162 39.8783 161.157 37.8434 159.657 36.3431C158.157 34.8428 156.122 34 154 34C151.878 34 149.843 34.8428 148.343 36.3431C146.843 37.8434 146 39.8783 146 42" fill="white"/>
|
||||
<path d="M162 66V50H146V58C146 60.1217 146.843 62.1566 148.343 63.6569C149.843 65.1571 151.878 66 154 66" fill="white"/>
|
||||
<path d="M162 98V82H154C151.878 82 149.843 82.8429 148.343 84.3431C146.843 85.8434 146 87.8783 146 90C146 92.1217 146.843 94.1566 148.343 95.6569C149.843 97.1571 151.878 98 154 98" fill="white"/>
|
||||
<path d="M146 130H162V122C162 119.878 161.157 117.843 159.657 116.343C158.157 114.843 156.122 114 154 114C151.878 114 149.843 114.843 148.343 116.343C146.843 117.843 146 119.878 146 122" fill="white"/>
|
||||
<path d="M162 146V130H146V138C146 140.122 146.843 142.157 148.343 143.657C149.843 145.157 151.878 146 154 146" fill="white"/>
|
||||
<path d="M162 194V178H154C151.878 178 149.843 178.843 148.343 180.343C146.843 181.843 146 183.878 146 186C146 188.122 146.843 190.157 148.343 191.657C149.843 193.157 151.878 194 154 194" fill="white"/>
|
||||
<path d="M154 226C158.418 226 162 222.418 162 218C162 213.582 158.418 210 154 210C149.582 210 146 213.582 146 218C146 222.418 149.582 226 154 226Z" fill="white"/>
|
||||
<path d="M146 274H162V266C162 263.878 161.157 261.843 159.657 260.343C158.157 258.843 156.122 258 154 258C151.878 258 149.843 258.843 148.343 260.343C146.843 261.843 146 263.878 146 266" fill="white"/>
|
||||
<path d="M162 274H146V282C146 284.122 146.843 286.157 148.343 287.657C149.843 289.157 151.878 290 154 290C156.122 290 158.157 289.157 159.657 287.657C161.157 286.157 162 284.122 162 282" fill="white"/>
|
||||
<path d="M162 306H146V322H162V306Z" fill="white"/>
|
||||
<path d="M154 386C158.418 386 162 382.418 162 378C162 373.582 158.418 370 154 370C149.582 370 146 373.582 146 378C146 382.418 149.582 386 154 386Z" fill="white"/>
|
||||
<path d="M146 418H162V410C162 407.878 161.157 405.843 159.657 404.343C158.157 402.843 156.122 402 154 402C151.878 402 149.843 402.843 148.343 404.343C146.843 405.843 146 407.878 146 410" fill="white"/>
|
||||
<path d="M162 418H146V434H162V418Z" fill="white"/>
|
||||
<path d="M162 434H146V450H162V434Z" fill="white"/>
|
||||
<path d="M162 450H146V466H162V450Z" fill="white"/>
|
||||
<path d="M162 482V466H146V474C146 476.122 146.843 478.157 148.343 479.657C149.843 481.157 151.878 482 154 482" fill="white"/>
|
||||
<path d="M178 50H162V66H178V50Z" fill="white"/>
|
||||
<path d="M178 66H162V82H178V66Z" fill="white"/>
|
||||
<path d="M178 82H162V98H178V82Z" fill="white"/>
|
||||
<path d="M178 98H162V106C162 108.122 162.843 110.157 164.343 111.657C165.843 113.157 167.878 114 170 114C172.122 114 174.157 113.157 175.657 111.657C177.157 110.157 178 108.122 178 106" fill="white"/>
|
||||
<path d="M178 130H162V146H178V130Z" fill="white"/>
|
||||
<path d="M178 146H162V162H178V146Z" fill="white"/>
|
||||
<path d="M178 162H162V178H178V162Z" fill="white"/>
|
||||
<path d="M178 178H162V194H178V178Z" fill="white"/>
|
||||
<path d="M178 194H162V202C162 204.122 162.843 206.157 164.343 207.657C165.843 209.157 167.878 210 170 210C172.122 210 174.157 209.157 175.657 207.657C177.157 206.157 178 204.122 178 202" fill="white"/>
|
||||
<path d="M178 242V226H170C167.878 226 165.843 226.843 164.343 228.343C162.843 229.843 162 231.878 162 234C162 236.122 162.843 238.157 164.343 239.657C165.843 241.157 167.878 242 170 242" fill="white"/>
|
||||
<path d="M162 306V322H178V314C178 311.878 177.157 309.843 175.657 308.343C174.157 306.843 172.122 306 170 306" fill="white"/>
|
||||
<path d="M178 322H162V330C162 332.122 162.843 334.157 164.343 335.657C165.843 337.157 167.878 338 170 338C172.122 338 174.157 337.157 175.657 335.657C177.157 334.157 178 332.122 178 330" fill="white"/>
|
||||
<path d="M170 370C174.418 370 178 366.418 178 362C178 357.582 174.418 354 170 354C165.582 354 162 357.582 162 362C162 366.418 165.582 370 170 370Z" fill="white"/>
|
||||
<path d="M170 402C174.418 402 178 398.418 178 394C178 389.582 174.418 386 170 386C165.582 386 162 389.582 162 394C162 398.418 165.582 402 170 402Z" fill="white"/>
|
||||
<path d="M162 418V434H178V426C178 423.878 177.157 421.843 175.657 420.343C174.157 418.843 172.122 418 170 418" fill="white"/>
|
||||
<path d="M178 434H162V450H178V434Z" fill="white"/>
|
||||
<path d="M178 466H162V482H178V466Z" fill="white"/>
|
||||
<path d="M178 50V66H186C188.122 66 190.157 65.1571 191.657 63.6569C193.157 62.1566 194 60.1217 194 58C194 55.8783 193.157 53.8434 191.657 52.3431C190.157 50.8429 188.122 50 186 50" fill="white"/>
|
||||
<path d="M194 82H178V98H194V82Z" fill="white"/>
|
||||
<path d="M178 130H194V122C194 119.878 193.157 117.843 191.657 116.343C190.157 114.843 188.122 114 186 114C183.878 114 181.843 114.843 180.343 116.343C178.843 117.843 178 119.878 178 122" fill="white"/>
|
||||
<path d="M194 130H178V146H194V130Z" fill="white"/>
|
||||
<path d="M194 178H178V194H194V178Z" fill="white"/>
|
||||
<path d="M194 226H178V242H194V226Z" fill="white"/>
|
||||
<path d="M194 242H178V258H194V242Z" fill="white"/>
|
||||
<path d="M194 258H178V274H194V258Z" fill="white"/>
|
||||
<path d="M194 274H178V290H194V274Z" fill="white"/>
|
||||
<path d="M194 306V290H178V298C178 300.122 178.843 302.157 180.343 303.657C181.843 305.157 183.878 306 186 306" fill="white"/>
|
||||
<path d="M186 418C190.418 418 194 414.418 194 410C194 405.582 190.418 402 186 402C181.582 402 178 405.582 178 410C178 414.418 181.582 418 186 418Z" fill="white"/>
|
||||
<path d="M178 434V450H194V442C194 439.878 193.157 437.843 191.657 436.343C190.157 434.843 188.122 434 186 434" fill="white"/>
|
||||
<path d="M194 450H178V466H194V450Z" fill="white"/>
|
||||
<path d="M194 466H178V482H186C188.122 482 190.157 481.157 191.657 479.657C193.157 478.157 194 476.122 194 474" fill="white"/>
|
||||
<path d="M202 50C206.418 50 210 46.4183 210 42C210 37.5817 206.418 34 202 34C197.582 34 194 37.5817 194 42C194 46.4183 197.582 50 202 50Z" fill="white"/>
|
||||
<path d="M210 82H194V98H210V82Z" fill="white"/>
|
||||
<path d="M210 130H194V146H210V130Z" fill="white"/>
|
||||
<path d="M210 146H194V154C194 156.122 194.843 158.157 196.343 159.657C197.843 161.157 199.878 162 202 162C204.122 162 206.157 161.157 207.657 159.657C209.157 158.157 210 156.122 210 154" fill="white"/>
|
||||
<path d="M194 178V194H202C204.122 194 206.157 193.157 207.657 191.657C209.157 190.157 210 188.122 210 186C210 183.878 209.157 181.843 207.657 180.343C206.157 178.843 204.122 178 202 178" fill="white"/>
|
||||
<path d="M194 226V242H210V234C210 231.878 209.157 229.843 207.657 228.343C206.157 226.843 204.122 226 202 226" fill="white"/>
|
||||
<path d="M210 242H194V258H202C204.122 258 206.157 257.157 207.657 255.657C209.157 254.157 210 252.122 210 250" fill="white"/>
|
||||
<path d="M194 274V290H210V282C210 279.878 209.157 277.843 207.657 276.343C206.157 274.843 204.122 274 202 274" fill="white"/>
|
||||
<path d="M210 290H194V306H210V290Z" fill="white"/>
|
||||
<path d="M202 338C206.418 338 210 334.418 210 330C210 325.582 206.418 322 202 322C197.582 322 194 325.582 194 330C194 334.418 197.582 338 202 338Z" fill="white"/>
|
||||
<path d="M194 370H210V362C210 359.878 209.157 357.843 207.657 356.343C206.157 354.843 204.122 354 202 354C199.878 354 197.843 354.843 196.343 356.343C194.843 357.843 194 359.878 194 362" fill="white"/>
|
||||
<path d="M210 370H194V386H210V370Z" fill="white"/>
|
||||
<path d="M210 402V386H194V394C194 396.122 194.843 398.157 196.343 399.657C197.843 401.157 199.878 402 202 402" fill="white"/>
|
||||
<path d="M202 434C206.418 434 210 430.418 210 426C210 421.582 206.418 418 202 418C197.582 418 194 421.582 194 426C194 430.418 197.582 434 202 434Z" fill="white"/>
|
||||
<path d="M194 450V466H202C204.122 466 206.157 465.157 207.657 463.657C209.157 462.157 210 460.122 210 458C210 455.878 209.157 453.843 207.657 452.343C206.157 450.843 204.122 450 202 450" fill="white"/>
|
||||
<path d="M218 66C222.418 66 226 62.4183 226 58C226 53.5817 222.418 50 218 50C213.582 50 210 53.5817 210 58C210 62.4183 213.582 66 218 66Z" fill="white"/>
|
||||
<path d="M210 82V98H218C220.122 98 222.157 97.1571 223.657 95.6569C225.157 94.1566 226 92.1217 226 90C226 87.8783 225.157 85.8434 223.657 84.3431C222.157 82.8429 220.122 82 218 82" fill="white"/>
|
||||
<path d="M210 130H226V122C226 119.878 225.157 117.843 223.657 116.343C222.157 114.843 220.122 114 218 114C215.878 114 213.843 114.843 212.343 116.343C210.843 117.843 210 119.878 210 122" fill="white"/>
|
||||
<path d="M226 130H210V146H218C220.122 146 222.157 145.157 223.657 143.657C225.157 142.157 226 140.122 226 138" fill="white"/>
|
||||
<path d="M226 178V162H218C215.878 162 213.843 162.843 212.343 164.343C210.843 165.843 210 167.878 210 170C210 172.122 210.843 174.157 212.343 175.657C213.843 177.157 215.878 178 218 178" fill="white"/>
|
||||
<path d="M218 226C222.418 226 226 222.418 226 218C226 213.582 222.418 210 218 210C213.582 210 210 213.582 210 218C210 222.418 213.582 226 218 226Z" fill="white"/>
|
||||
<path d="M210 290V306H218C220.122 306 222.157 305.157 223.657 303.657C225.157 302.157 226 300.122 226 298C226 295.878 225.157 293.843 223.657 292.343C222.157 290.843 220.122 290 218 290" fill="white"/>
|
||||
<path d="M226 354V338H218C215.878 338 213.843 338.843 212.343 340.343C210.843 341.843 210 343.878 210 346C210 348.122 210.843 350.157 212.343 351.657C213.843 353.157 215.878 354 218 354" fill="white"/>
|
||||
<path d="M226 370H210V386H226V370Z" fill="white"/>
|
||||
<path d="M226 386H210V402H226V386Z" fill="white"/>
|
||||
<path d="M234 50C238.418 50 242 46.4183 242 42C242 37.5817 238.418 34 234 34C229.582 34 226 37.5817 226 42C226 46.4183 229.582 50 234 50Z" fill="white"/>
|
||||
<path d="M242 82V66H234C231.878 66 229.843 66.8429 228.343 68.3431C226.843 69.8434 226 71.8783 226 74C226 76.1217 226.843 78.1566 228.343 79.6569C229.843 81.1571 231.878 82 234 82" fill="white"/>
|
||||
<path d="M242 162H226V178H242V162Z" fill="white"/>
|
||||
<path d="M234 274C238.418 274 242 270.418 242 266C242 261.582 238.418 258 234 258C229.582 258 226 261.582 226 266C226 270.418 229.582 274 234 274Z" fill="white"/>
|
||||
<path d="M226 338V354H242V346C242 343.878 241.157 341.843 239.657 340.343C238.157 338.843 236.122 338 234 338" fill="white"/>
|
||||
<path d="M242 354H226V370H242V354Z" fill="white"/>
|
||||
<path d="M242 370H226V386H242V370Z" fill="white"/>
|
||||
<path d="M242 386H226V402H242V386Z" fill="white"/>
|
||||
<path d="M226 466H242V450H234C231.878 450 229.843 450.843 228.343 452.343C226.843 453.843 226 455.878 226 458" fill="white"/>
|
||||
<path d="M242 482V466H226V474C226 476.122 226.843 478.157 228.343 479.657C229.843 481.157 231.878 482 234 482" fill="white"/>
|
||||
<path d="M242 66H258V50H250C247.878 50 245.843 50.8428 244.343 52.3431C242.843 53.8434 242 55.8783 242 58" fill="white"/>
|
||||
<path d="M258 66H242V82H258V66Z" fill="white"/>
|
||||
<path d="M258 82H242V98H258V82Z" fill="white"/>
|
||||
<path d="M258 98H242V114H258V98Z" fill="white"/>
|
||||
<path d="M258 114H242V122C242 124.122 242.843 126.157 244.343 127.657C245.843 129.157 247.878 130 250 130C252.122 130 254.157 129.157 255.657 127.657C257.157 126.157 258 124.122 258 122" fill="white"/>
|
||||
<path d="M242 162V178H258V170C258 167.878 257.157 165.843 255.657 164.343C254.157 162.843 252.122 162 250 162" fill="white"/>
|
||||
<path d="M258 178H242V194H258V178Z" fill="white"/>
|
||||
<path d="M258 194H242V210H258V194Z" fill="white"/>
|
||||
<path d="M258 210H242V226H258V210Z" fill="white"/>
|
||||
<path d="M258 226H242V242H258V226Z" fill="white"/>
|
||||
<path d="M258 242H242V250C242 252.122 242.843 254.157 244.343 255.657C245.843 257.157 247.878 258 250 258C252.122 258 254.157 257.157 255.657 255.657C257.157 254.157 258 252.122 258 250" fill="white"/>
|
||||
<path d="M250 306C254.418 306 258 302.418 258 298C258 293.582 254.418 290 250 290C245.582 290 242 293.582 242 298C242 302.418 245.582 306 250 306Z" fill="white"/>
|
||||
<path d="M258 354H242V370H258V354Z" fill="white"/>
|
||||
<path d="M258 386H242V402H258V386Z" fill="white"/>
|
||||
<path d="M242 450H258V442C258 439.878 257.157 437.843 255.657 436.343C254.157 434.843 252.122 434 250 434C247.878 434 245.843 434.843 244.343 436.343C242.843 437.843 242 439.878 242 442" fill="white"/>
|
||||
<path d="M258 450H242V466H258V450Z" fill="white"/>
|
||||
<path d="M258 466H242V482H258V466Z" fill="white"/>
|
||||
<path d="M258 34H274V18H266C263.878 18 261.843 18.8428 260.343 20.3431C258.843 21.8434 258 23.8783 258 26" fill="white"/>
|
||||
<path d="M274 34H258V50H274V34Z" fill="white"/>
|
||||
<path d="M274 50H258V66H274V50Z" fill="white"/>
|
||||
<path d="M274 66H258V82H266C268.122 82 270.157 81.1572 271.657 79.6569C273.157 78.1566 274 76.1217 274 74" fill="white"/>
|
||||
<path d="M274 98H258V114H274V98Z" fill="white"/>
|
||||
<path d="M266 146C270.418 146 274 142.418 274 138C274 133.582 270.418 130 266 130C261.582 130 258 133.582 258 138C258 142.418 261.582 146 266 146Z" fill="white"/>
|
||||
<path d="M274 194H258V210H274V194Z" fill="white"/>
|
||||
<path d="M274 210H258V226H274V210Z" fill="white"/>
|
||||
<path d="M258 354H274V338H266C263.878 338 261.843 338.843 260.343 340.343C258.843 341.843 258 343.878 258 346" fill="white"/>
|
||||
<path d="M274 354H258V370H274V354Z" fill="white"/>
|
||||
<path d="M274 370H258V386H274V370Z" fill="white"/>
|
||||
<path d="M274 386H258V402H274V386Z" fill="white"/>
|
||||
<path d="M274 466H258V482H274V466Z" fill="white"/>
|
||||
<path d="M274 18V34H290V26C290 23.8783 289.157 21.8434 287.657 20.3431C286.157 18.8429 284.122 18 282 18" fill="white"/>
|
||||
<path d="M290 34H274V50H290V34Z" fill="white"/>
|
||||
<path d="M290 50H274V66H282C284.122 66 286.157 65.1572 287.657 63.6569C289.157 62.1566 290 60.1217 290 58" fill="white"/>
|
||||
<path d="M290 98H274V114H290V98Z" fill="white"/>
|
||||
<path d="M290 114H274V122C274 124.122 274.843 126.157 276.343 127.657C277.843 129.157 279.878 130 282 130C284.122 130 286.157 129.157 287.657 127.657C289.157 126.157 290 124.122 290 122" fill="white"/>
|
||||
<path d="M274 162H290V154C290 151.878 289.157 149.843 287.657 148.343C286.157 146.843 284.122 146 282 146C279.878 146 277.843 146.843 276.343 148.343C274.843 149.843 274 151.878 274 154" fill="white"/>
|
||||
<path d="M290 178V162H274V170C274 172.122 274.843 174.157 276.343 175.657C277.843 177.157 279.878 178 282 178" fill="white"/>
|
||||
<path d="M274 194V210H290V202C290 199.878 289.157 197.843 287.657 196.343C286.157 194.843 284.122 194 282 194" fill="white"/>
|
||||
<path d="M290 210H274V226H290V210Z" fill="white"/>
|
||||
<path d="M282 258C286.418 258 290 254.418 290 250C290 245.582 286.418 242 282 242C277.582 242 274 245.582 274 250C274 254.418 277.582 258 282 258Z" fill="white"/>
|
||||
<path d="M290 338H274V354H290V338Z" fill="white"/>
|
||||
<path d="M290 354H274V370H290V354Z" fill="white"/>
|
||||
<path d="M274 386V402H282C284.122 402 286.157 401.157 287.657 399.657C289.157 398.157 290 396.122 290 394C290 391.878 289.157 389.843 287.657 388.343C286.157 386.843 284.122 386 282 386" fill="white"/>
|
||||
<path d="M282 434C286.418 434 290 430.418 290 426C290 421.582 286.418 418 282 418C277.582 418 274 421.582 274 426C274 430.418 277.582 434 282 434Z" fill="white"/>
|
||||
<path d="M290 466H274V482H290V466Z" fill="white"/>
|
||||
<path d="M290 98H306V82H298C295.878 82 293.843 82.8428 292.343 84.3431C290.843 85.8434 290 87.8783 290 90" fill="white"/>
|
||||
<path d="M306 98H290V114H306V98Z" fill="white"/>
|
||||
<path d="M298 146C302.418 146 306 142.418 306 138C306 133.582 302.418 130 298 130C293.582 130 290 133.582 290 138C290 142.418 293.582 146 298 146Z" fill="white"/>
|
||||
<path d="M306 162H290V178H306V162Z" fill="white"/>
|
||||
<path d="M306 210H290V226H306V210Z" fill="white"/>
|
||||
<path d="M298 274C302.418 274 306 270.418 306 266C306 261.582 302.418 258 298 258C293.582 258 290 261.582 290 266C290 270.418 293.582 274 298 274Z" fill="white"/>
|
||||
<path d="M290 338H306V322H298C295.878 322 293.843 322.843 292.343 324.343C290.843 325.843 290 327.878 290 330" fill="white"/>
|
||||
<path d="M306 338H290V354H306V338Z" fill="white"/>
|
||||
<path d="M306 354H290V370H306V354Z" fill="white"/>
|
||||
<path d="M290 450H306V442C306 439.878 305.157 437.843 303.657 436.343C302.157 434.843 300.122 434 298 434C295.878 434 293.843 434.843 292.343 436.343C290.843 437.843 290 439.878 290 442" fill="white"/>
|
||||
<path d="M306 450H290V466H306V450Z" fill="white"/>
|
||||
<path d="M306 466H290V482H306V466Z" fill="white"/>
|
||||
<path d="M314 34C318.418 34 322 30.4183 322 26C322 21.5817 318.418 18 314 18C309.582 18 306 21.5817 306 26C306 30.4183 309.582 34 314 34Z" fill="white"/>
|
||||
<path d="M306 82V98H322V90C322 87.8783 321.157 85.8434 319.657 84.3431C318.157 82.8429 316.122 82 314 82" fill="white"/>
|
||||
<path d="M322 98H306V114H322V98Z" fill="white"/>
|
||||
<path d="M322 114H306V122C306 124.122 306.843 126.157 308.343 127.657C309.843 129.157 311.878 130 314 130C316.122 130 318.157 129.157 319.657 127.657C321.157 126.157 322 124.122 322 122" fill="white"/>
|
||||
<path d="M306 162V178H314C316.122 178 318.157 177.157 319.657 175.657C321.157 174.157 322 172.122 322 170C322 167.878 321.157 165.843 319.657 164.343C318.157 162.843 316.122 162 314 162" fill="white"/>
|
||||
<path d="M306 210V226H322V218C322 215.878 321.157 213.843 319.657 212.343C318.157 210.843 316.122 210 314 210" fill="white"/>
|
||||
<path d="M322 226H306V234C306 236.122 306.843 238.157 308.343 239.657C309.843 241.157 311.878 242 314 242C316.122 242 318.157 241.157 319.657 239.657C321.157 238.157 322 236.122 322 234" fill="white"/>
|
||||
<path d="M306 322H322V306H314C311.878 306 309.843 306.843 308.343 308.343C306.843 309.843 306 311.878 306 314" fill="white"/>
|
||||
<path d="M322 322H306V338H322V322Z" fill="white"/>
|
||||
<path d="M322 338H306V354H322V338Z" fill="white"/>
|
||||
<path d="M322 354H306V370H314C316.122 370 318.157 369.157 319.657 367.657C321.157 366.157 322 364.122 322 362" fill="white"/>
|
||||
<path d="M314 418C318.418 418 322 414.418 322 410C322 405.582 318.418 402 314 402C309.582 402 306 405.582 306 410C306 414.418 309.582 418 314 418Z" fill="white"/>
|
||||
<path d="M322 450H306V466H322V450Z" fill="white"/>
|
||||
<path d="M322 466H306V482H322V466Z" fill="white"/>
|
||||
<path d="M322 50H338V42C338 39.8783 337.157 37.8434 335.657 36.3431C334.157 34.8428 332.122 34 330 34C327.878 34 325.843 34.8428 324.343 36.3431C322.843 37.8434 322 39.8783 322 42" fill="white"/>
|
||||
<path d="M338 50H322V58C322 60.1217 322.843 62.1566 324.343 63.6569C325.843 65.1572 327.878 66 330 66C332.122 66 334.157 65.1572 335.657 63.6569C337.157 62.1566 338 60.1217 338 58" fill="white"/>
|
||||
<path d="M338 98H322V114H338V98Z" fill="white"/>
|
||||
<path d="M330 146C334.418 146 338 142.418 338 138C338 133.582 334.418 130 330 130C325.582 130 322 133.582 322 138C322 142.418 325.582 146 330 146Z" fill="white"/>
|
||||
<path d="M330 210C334.418 210 338 206.418 338 202C338 197.582 334.418 194 330 194C325.582 194 322 197.582 322 202C322 206.418 325.582 210 330 210Z" fill="white"/>
|
||||
<path d="M330 274C334.418 274 338 270.418 338 266C338 261.582 334.418 258 330 258C325.582 258 322 261.582 322 266C322 270.418 325.582 274 330 274Z" fill="white"/>
|
||||
<path d="M322 306H338V290H330C327.878 290 325.843 290.843 324.343 292.343C322.843 293.843 322 295.878 322 298" fill="white"/>
|
||||
<path d="M338 306H322V322H330C332.122 322 334.157 321.157 335.657 319.657C337.157 318.157 338 316.122 338 314" fill="white"/>
|
||||
<path d="M338 338H322V354H338V338Z" fill="white"/>
|
||||
<path d="M322 386H338V370H330C327.878 370 325.843 370.843 324.343 372.343C322.843 373.843 322 375.878 322 378" fill="white"/>
|
||||
<path d="M338 402V386H322V394C322 396.122 322.843 398.157 324.343 399.657C325.843 401.157 327.878 402 330 402" fill="white"/>
|
||||
<path d="M338 450H322V466H338V450Z" fill="white"/>
|
||||
<path d="M338 466H322V482H338V466Z" fill="white"/>
|
||||
<path d="M346 34C350.418 34 354 30.4183 354 26C354 21.5817 350.418 18 346 18C341.582 18 338 21.5817 338 26C338 30.4183 341.582 34 346 34Z" fill="white"/>
|
||||
<path d="M338 82H354V74C354 71.8783 353.157 69.8434 351.657 68.3431C350.157 66.8428 348.122 66 346 66C343.878 66 341.843 66.8428 340.343 68.3431C338.843 69.8434 338 71.8783 338 74" fill="white"/>
|
||||
<path d="M354 82H338V98H354V82Z" fill="white"/>
|
||||
<path d="M354 98H338V114H354V98Z" fill="white"/>
|
||||
<path d="M354 114H338V122C338 124.122 338.843 126.157 340.343 127.657C341.843 129.157 343.878 130 346 130C348.122 130 350.157 129.157 351.657 127.657C353.157 126.157 354 124.122 354 122" fill="white"/>
|
||||
<path d="M354 162V146H346C343.878 146 341.843 146.843 340.343 148.343C338.843 149.843 338 151.878 338 154C338 156.122 338.843 158.157 340.343 159.657C341.843 161.157 343.878 162 346 162" fill="white"/>
|
||||
<path d="M346 226C350.418 226 354 222.418 354 218C354 213.582 350.418 210 346 210C341.582 210 338 213.582 338 218C338 222.418 341.582 226 346 226Z" fill="white"/>
|
||||
<path d="M338 290H354V274H346C343.878 274 341.843 274.843 340.343 276.343C338.843 277.843 338 279.878 338 282" fill="white"/>
|
||||
<path d="M354 290H338V306H354V290Z" fill="white"/>
|
||||
<path d="M338 338H354V322H346C343.878 322 341.843 322.843 340.343 324.343C338.843 325.843 338 327.878 338 330" fill="white"/>
|
||||
<path d="M354 338H338V354H354V338Z" fill="white"/>
|
||||
<path d="M354 354H338V370H354V354Z" fill="white"/>
|
||||
<path d="M354 370H338V386H354V370Z" fill="white"/>
|
||||
<path d="M354 386H338V402H354V386Z" fill="white"/>
|
||||
<path d="M354 418V402H338V410C338 412.122 338.843 414.157 340.343 415.657C341.843 417.157 343.878 418 346 418" fill="white"/>
|
||||
<path d="M354 450H338V466H354V450Z" fill="white"/>
|
||||
<path d="M354 466H338V482H354V466Z" fill="white"/>
|
||||
<path d="M370 146H354V162H370V146Z" fill="white"/>
|
||||
<path d="M370 162H354V178H370V162Z" fill="white"/>
|
||||
<path d="M370 178H354V194H370V178Z" fill="white"/>
|
||||
<path d="M370 194H354V202C354 204.122 354.843 206.157 356.343 207.657C357.843 209.157 359.878 210 362 210C364.122 210 366.157 209.157 367.657 207.657C369.157 206.157 370 204.122 370 202" fill="white"/>
|
||||
<path d="M354 242H370V226H362C359.878 226 357.843 226.843 356.343 228.343C354.843 229.843 354 231.878 354 234" fill="white"/>
|
||||
<path d="M370 242H354V250C354 252.122 354.843 254.157 356.343 255.657C357.843 257.157 359.878 258 362 258C364.122 258 366.157 257.157 367.657 255.657C369.157 254.157 370 252.122 370 250" fill="white"/>
|
||||
<path d="M354 274V290H370V282C370 279.878 369.157 277.843 367.657 276.343C366.157 274.843 364.122 274 362 274" fill="white"/>
|
||||
<path d="M370 290H354V306H362C364.122 306 366.157 305.157 367.657 303.657C369.157 302.157 370 300.122 370 298" fill="white"/>
|
||||
<path d="M370 322H354V338H370V322Z" fill="white"/>
|
||||
<path d="M370 338H354V354H370V338Z" fill="white"/>
|
||||
<path d="M370 402H354V418H370V402Z" fill="white"/>
|
||||
<path d="M370 450H354V466H370V450Z" fill="white"/>
|
||||
<path d="M370 466H354V482H370V466Z" fill="white"/>
|
||||
<path d="M370 146V162H378C380.122 162 382.157 161.157 383.657 159.657C385.157 158.157 386 156.122 386 154C386 151.878 385.157 149.843 383.657 148.343C382.157 146.843 380.122 146 378 146" fill="white"/>
|
||||
<path d="M370 226H386V210H378C375.878 210 373.843 210.843 372.343 212.343C370.843 213.843 370 215.878 370 218" fill="white"/>
|
||||
<path d="M386 226H370V242H386V226Z" fill="white"/>
|
||||
<path d="M370 322H386V306H378C375.878 306 373.843 306.843 372.343 308.343C370.843 309.843 370 311.878 370 314" fill="white"/>
|
||||
<path d="M386 322H370V338H386V322Z" fill="white"/>
|
||||
<path d="M386 338H370V354H386V338Z" fill="white"/>
|
||||
<path d="M378 386C382.418 386 386 382.418 386 378C386 373.582 382.418 370 378 370C373.582 370 370 373.582 370 378C370 382.418 373.582 386 378 386Z" fill="white"/>
|
||||
<path d="M386 402H370V418H386V402Z" fill="white"/>
|
||||
<path d="M370 450H386V442C386 439.878 385.157 437.843 383.657 436.343C382.157 434.843 380.122 434 378 434C375.878 434 373.843 434.843 372.343 436.343C370.843 437.843 370 439.878 370 442" fill="white"/>
|
||||
<path d="M386 450H370V466H386V450Z" fill="white"/>
|
||||
<path d="M386 466H370V482H378C380.122 482 382.157 481.157 383.657 479.657C385.157 478.157 386 476.122 386 474" fill="white"/>
|
||||
<path d="M394 194C398.418 194 402 190.418 402 186C402 181.582 398.418 178 394 178C389.582 178 386 181.582 386 186C386 190.418 389.582 194 394 194Z" fill="white"/>
|
||||
<path d="M386 210V226H402V218C402 215.878 401.157 213.843 399.657 212.343C398.157 210.843 396.122 210 394 210" fill="white"/>
|
||||
<path d="M402 226H386V242H402V226Z" fill="white"/>
|
||||
<path d="M402 242H386V258H402V242Z" fill="white"/>
|
||||
<path d="M402 258H386V274H402V258Z" fill="white"/>
|
||||
<path d="M402 274H386V290H402V274Z" fill="white"/>
|
||||
<path d="M402 290H386V306H402V290Z" fill="white"/>
|
||||
<path d="M402 306H386V322H402V306Z" fill="white"/>
|
||||
<path d="M402 338H386V354H402V338Z" fill="white"/>
|
||||
<path d="M402 402H386V418H402V402Z" fill="white"/>
|
||||
<path d="M410 162C414.418 162 418 158.418 418 154C418 149.582 414.418 146 410 146C405.582 146 402 149.582 402 154C402 158.418 405.582 162 410 162Z" fill="white"/>
|
||||
<path d="M402 226V242H410C412.122 242 414.157 241.157 415.657 239.657C417.157 238.157 418 236.122 418 234C418 231.878 417.157 229.843 415.657 228.343C414.157 226.843 412.122 226 410 226" fill="white"/>
|
||||
<path d="M418 258H402V274H418V258Z" fill="white"/>
|
||||
<path d="M418 274H402V290H418V274Z" fill="white"/>
|
||||
<path d="M418 306H402V322H418V306Z" fill="white"/>
|
||||
<path d="M418 338H402V354H418V338Z" fill="white"/>
|
||||
<path d="M418 354H402V370H418V354Z" fill="white"/>
|
||||
<path d="M418 370H402V386H418V370Z" fill="white"/>
|
||||
<path d="M418 386H402V402H418V386Z" fill="white"/>
|
||||
<path d="M418 402H402V418H418V402Z" fill="white"/>
|
||||
<path d="M418 434V418H402V426C402 428.122 402.843 430.157 404.343 431.657C405.843 433.157 407.878 434 410 434" fill="white"/>
|
||||
<path d="M418 178H434V162H426C423.878 162 421.843 162.843 420.343 164.343C418.843 165.843 418 167.878 418 170" fill="white"/>
|
||||
<path d="M434 178H418V186C418 188.122 418.843 190.157 420.343 191.657C421.843 193.157 423.878 194 426 194C428.122 194 430.157 193.157 431.657 191.657C433.157 190.157 434 188.122 434 186" fill="white"/>
|
||||
<path d="M426 226C430.418 226 434 222.418 434 218C434 213.582 430.418 210 426 210C421.582 210 418 213.582 418 218C418 222.418 421.582 226 426 226Z" fill="white"/>
|
||||
<path d="M418 258H434V242H426C423.878 242 421.843 242.843 420.343 244.343C418.843 245.843 418 247.878 418 250" fill="white"/>
|
||||
<path d="M434 258H418V274H434V258Z" fill="white"/>
|
||||
<path d="M434 274H418V290H434V274Z" fill="white"/>
|
||||
<path d="M418 306V322H426C428.122 322 430.157 321.157 431.657 319.657C433.157 318.157 434 316.122 434 314C434 311.878 433.157 309.843 431.657 308.343C430.157 306.843 428.122 306 426 306" fill="white"/>
|
||||
<path d="M418 338V354H434V346C434 343.878 433.157 341.843 431.657 340.343C430.157 338.843 428.122 338 426 338" fill="white"/>
|
||||
<path d="M434 354H418V370H426C428.122 370 430.157 369.157 431.657 367.657C433.157 366.157 434 364.122 434 362" fill="white"/>
|
||||
<path d="M434 402H418V418H434V402Z" fill="white"/>
|
||||
<path d="M434 418H418V434H434V418Z" fill="white"/>
|
||||
<path d="M434 162H450V146H442C439.878 146 437.843 146.843 436.343 148.343C434.843 149.843 434 151.878 434 154" fill="white"/>
|
||||
<path d="M450 162H434V178H450V162Z" fill="white"/>
|
||||
<path d="M450 210V194H442C439.878 194 437.843 194.843 436.343 196.343C434.843 197.843 434 199.878 434 202C434 204.122 434.843 206.157 436.343 207.657C437.843 209.157 439.878 210 442 210" fill="white"/>
|
||||
<path d="M434 242H450V234C450 231.878 449.157 229.843 447.657 228.343C446.157 226.843 444.122 226 442 226C439.878 226 437.843 226.843 436.343 228.343C434.843 229.843 434 231.878 434 234" fill="white"/>
|
||||
<path d="M450 242H434V258H450V242Z" fill="white"/>
|
||||
<path d="M450 258H434V274H450V258Z" fill="white"/>
|
||||
<path d="M450 274H434V290H450V274Z" fill="white"/>
|
||||
<path d="M442 338C446.418 338 450 334.418 450 330C450 325.582 446.418 322 442 322C437.582 322 434 325.582 434 330C434 334.418 437.582 338 442 338Z" fill="white"/>
|
||||
<path d="M434 402H450V386H442C439.878 386 437.843 386.843 436.343 388.343C434.843 389.843 434 391.878 434 394" fill="white"/>
|
||||
<path d="M450 402H434V418H450V402Z" fill="white"/>
|
||||
<path d="M450 418H434V434H450V418Z" fill="white"/>
|
||||
<path d="M450 434H434V442C434 444.122 434.843 446.157 436.343 447.657C437.843 449.157 439.878 450 442 450C444.122 450 446.157 449.157 447.657 447.657C449.157 446.157 450 444.122 450 442" fill="white"/>
|
||||
<path d="M442 482C446.418 482 450 478.418 450 474C450 469.582 446.418 466 442 466C437.582 466 434 469.582 434 474C434 478.418 437.582 482 442 482Z" fill="white"/>
|
||||
<path d="M450 146V162H466V154C466 151.878 465.157 149.843 463.657 148.343C462.157 146.843 460.122 146 458 146" fill="white"/>
|
||||
<path d="M466 162H450V178H466V162Z" fill="white"/>
|
||||
<path d="M466 178H450V194H466V178Z" fill="white"/>
|
||||
<path d="M466 194H450V210H466V194Z" fill="white"/>
|
||||
<path d="M466 226V210H450V218C450 220.122 450.843 222.157 452.343 223.657C453.843 225.157 455.878 226 458 226" fill="white"/>
|
||||
<path d="M466 274H450V290H466V274Z" fill="white"/>
|
||||
<path d="M466 290H450V306H466V290Z" fill="white"/>
|
||||
<path d="M466 306H450V314C450 316.122 450.843 318.157 452.343 319.657C453.843 321.157 455.878 322 458 322C460.122 322 462.157 321.157 463.657 319.657C465.157 318.157 466 316.122 466 314" fill="white"/>
|
||||
<path d="M466 370V354H458C455.878 354 453.843 354.843 452.343 356.343C450.843 357.843 450 359.878 450 362C450 364.122 450.843 366.157 452.343 367.657C453.843 369.157 455.878 370 458 370" fill="white"/>
|
||||
<path d="M450 386V402H458C460.122 402 462.157 401.157 463.657 399.657C465.157 398.157 466 396.122 466 394C466 391.878 465.157 389.843 463.657 388.343C462.157 386.843 460.122 386 458 386" fill="white"/>
|
||||
<path d="M466 466V450H458C455.878 450 453.843 450.843 452.343 452.343C450.843 453.843 450 455.878 450 458C450 460.122 450.843 462.157 452.343 463.657C453.843 465.157 455.878 466 458 466" fill="white"/>
|
||||
<path d="M466 210V226H474C476.122 226 478.157 225.157 479.657 223.657C481.157 222.157 482 220.122 482 218C482 215.878 481.157 213.843 479.657 212.343C478.157 210.843 476.122 210 474 210" fill="white"/>
|
||||
<path d="M466 274H482V266C482 263.878 481.157 261.843 479.657 260.343C478.157 258.843 476.122 258 474 258C471.878 258 469.843 258.843 468.343 260.343C466.843 261.843 466 263.878 466 266" fill="white"/>
|
||||
<path d="M482 274H466V290H482V274Z" fill="white"/>
|
||||
<path d="M482 290H466V306H474C476.122 306 478.157 305.157 479.657 303.657C481.157 302.157 482 300.122 482 298" fill="white"/>
|
||||
<path d="M466 354H482V346C482 343.878 481.157 341.843 479.657 340.343C478.157 338.843 476.122 338 474 338C471.878 338 469.843 338.843 468.343 340.343C466.843 341.843 466 343.878 466 346" fill="white"/>
|
||||
<path d="M482 354H466V370H482V354Z" fill="white"/>
|
||||
<path d="M482 370H466V378C466 380.122 466.843 382.157 468.343 383.657C469.843 385.157 471.878 386 474 386C476.122 386 478.157 385.157 479.657 383.657C481.157 382.157 482 380.122 482 378" fill="white"/>
|
||||
<path d="M466 418H482V410C482 407.878 481.157 405.843 479.657 404.343C478.157 402.843 476.122 402 474 402C471.878 402 469.843 402.843 468.343 404.343C466.843 405.843 466 407.878 466 410" fill="white"/>
|
||||
<path d="M482 418H466V426C466 428.122 466.843 430.157 468.343 431.657C469.843 433.157 471.878 434 474 434C476.122 434 478.157 433.157 479.657 431.657C481.157 430.157 482 428.122 482 426" fill="white"/>
|
||||
<path d="M466 450V466H482V458C482 455.878 481.157 453.843 479.657 452.343C478.157 450.843 476.122 450 474 450" fill="white"/>
|
||||
<path d="M482 466H466V474C466 476.122 466.843 478.157 468.343 479.657C469.843 481.157 471.878 482 474 482C476.122 482 478.157 481.157 479.657 479.657C481.157 478.157 482 476.122 482 474" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1160_310)">
|
||||
<path d="M500 0H0V500H500V0Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
<mask id="mask1_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="18" y="18" width="112" height="112">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18 58V90C18 100.609 22.2143 110.783 29.7157 118.284C33.4301 121.999 37.8396 124.945 42.6927 126.955C47.5457 128.965 52.7471 130 58 130H90C100.609 130 110.783 125.786 118.284 118.284C125.786 110.783 130 100.609 130 90V58C130 52.7471 128.965 47.5457 126.955 42.6927C124.945 37.8396 121.999 33.4301 118.284 29.7157C114.57 26.0014 110.16 23.055 105.307 21.0448C100.454 19.0346 95.2529 18 90 18H58C52.7471 18 47.5457 19.0346 42.6927 21.0448C37.8396 23.055 33.4301 26.0014 29.7157 29.7157C22.2143 37.2172 18 47.3913 18 58ZM58 34H90C96.3652 34 102.47 36.5286 106.971 41.0294C111.471 45.5303 114 51.6348 114 58V90C114 96.3652 111.471 102.47 106.971 106.971C102.47 111.471 96.3652 114 90 114H58C51.6348 114 45.5303 111.471 41.0294 106.971C36.5286 102.47 34 96.3652 34 90V58C34 51.6348 36.5286 45.5303 41.0294 41.0294C45.5303 36.5286 51.6348 34 58 34Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask1_1160_310)">
|
||||
<path d="M130 18H18V130H130V18Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
<mask id="mask2_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="50" y="50" width="48" height="48">
|
||||
<path d="M74 98C87.2548 98 98 87.2548 98 74C98 60.7452 87.2548 50 74 50C60.7452 50 50 60.7452 50 74C50 87.2548 60.7452 98 74 98Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask2_1160_310)">
|
||||
<path d="M98 50H50V98H98V50Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
<mask id="mask3_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="370" y="18" width="112" height="112">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M442 18H410C399.391 18 389.217 22.2143 381.716 29.7157C374.214 37.2172 370 47.3913 370 58V90C370 100.609 374.214 110.783 381.716 118.284C389.217 125.786 399.391 130 410 130H442C447.253 130 452.454 128.965 457.307 126.955C462.16 124.945 466.57 121.999 470.284 118.284C473.999 114.57 476.945 110.16 478.955 105.307C480.965 100.454 482 95.2529 482 90V58C482 47.3913 477.786 37.2172 470.284 29.7157C462.783 22.2143 452.609 18 442 18ZM466 58V90C466 96.3652 463.471 102.47 458.971 106.971C454.47 111.471 448.365 114 442 114H410C403.635 114 397.53 111.471 393.029 106.971C388.529 102.47 386 96.3652 386 90V58C386 51.6348 388.529 45.5303 393.029 41.0294C397.53 36.5286 403.635 34 410 34H442C448.365 34 454.47 36.5286 458.971 41.0294C463.471 45.5303 466 51.6348 466 58Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask3_1160_310)">
|
||||
<path d="M482 18H370V130H482V18Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
<mask id="mask4_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="402" y="50" width="48" height="48">
|
||||
<path d="M402 74C402 87.2548 412.745 98 426 98C439.255 98 450 87.2548 450 74C450 60.7452 439.255 50 426 50C412.745 50 402 60.7452 402 74Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask4_1160_310)">
|
||||
<path d="M450 50H402V98H450V50Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
<mask id="mask5_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="18" y="370" width="112" height="112">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58 482H90C100.609 482 110.783 477.786 118.284 470.284C121.999 466.57 124.945 462.16 126.955 457.307C128.965 452.454 130 447.253 130 442V410C130 399.391 125.786 389.217 118.284 381.716C110.783 374.214 100.609 370 90 370H58C47.3913 370 37.2172 374.214 29.7157 381.716C22.2143 389.217 18 399.391 18 410V442C18 447.253 19.0346 452.454 21.0448 457.307C23.055 462.16 26.0014 466.57 29.7157 470.284C37.2172 477.786 47.3913 482 58 482ZM34 442V410C34 403.635 36.5286 397.53 41.0294 393.029C45.5303 388.529 51.6348 386 58 386H90C96.3652 386 102.47 388.529 106.971 393.029C111.471 397.53 114 403.635 114 410V442C114 448.365 111.471 454.47 106.971 458.971C102.47 463.471 96.3652 466 90 466H58C51.6348 466 45.5303 463.471 41.0294 458.971C36.5286 454.47 34 448.365 34 442Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask5_1160_310)">
|
||||
<path d="M130 370H18V482H130V370Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
<mask id="mask6_1160_310" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="50" y="402" width="48" height="48">
|
||||
<path d="M98 426C98 412.745 87.2548 402 74 402C60.7452 402 50 412.745 50 426C50 439.255 60.7452 450 74 450C87.2548 450 98 439.255 98 426Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask6_1160_310)">
|
||||
<path d="M98 402H50V450H98V402Z" fill="#E3E7FF"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1160_310">
|
||||
<rect width="500" height="500" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 41 KiB |
2
docs/static/img/app-qr-code-light.svg
vendored
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
docs/static/img/feature-panel.png
vendored
Normal file
|
After Width: | Height: | Size: 758 KiB |
BIN
docs/static/img/immich-screenshots.png
vendored
|
Before Width: | Height: | Size: 1.8 MiB |
BIN
docs/static/img/immich-screenshots.webp
vendored
|
Before Width: | Height: | Size: 196 KiB |
9
docs/static/img/logomark-dark.svg
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="96" height="96" viewBox="0 0 96 96" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0.5" y="0.5" width="95" height="95" rx="47.5" fill="#070915"/>
|
||||
<rect x="0.5" y="0.5" width="95" height="95" rx="47.5" stroke="#222326"/>
|
||||
<path d="M45.4161 33.5746C50.122 37.7636 53.9145 42.2527 56.3552 46.4834C60.5471 38.9453 63.3483 29.988 63.3836 24.283C63.3836 24.2426 63.3836 24.2059 63.3836 24.1716C63.3836 15.7298 55.0082 12.4445 47.7934 12.4445C40.5786 12.4445 32.2032 15.7298 32.2032 24.1716C32.2032 24.2867 32.2032 24.441 32.2032 24.6271C36.2247 26.4247 40.9915 29.6366 45.4161 33.5746Z" fill="#E93832"/>
|
||||
<path d="M19.7453 56.5954C22.6865 53.3052 27.1988 49.7394 32.2908 46.7247C37.708 43.5189 43.1264 41.2793 47.8822 40.2543C42.0473 33.9163 34.4404 28.4697 29.0536 26.6733C29.0159 26.6611 28.9806 26.6501 28.9489 26.639C20.9632 24.0308 15.2671 31.024 13.0384 37.9229C10.8096 44.8218 11.3285 53.8464 19.3142 56.4546C19.4226 56.4901 19.5687 56.5379 19.7453 56.5954Z" fill="#ED79B5"/>
|
||||
<path d="M82.6335 37.8066C80.4047 30.9077 74.7086 23.9145 66.7229 26.5227C66.6133 26.5582 66.4672 26.606 66.2918 26.6635C65.8351 31.0632 64.2701 36.6151 61.9123 42.063C59.4046 47.8573 56.3295 52.8717 53.0814 56.5122C61.5067 58.1922 70.8455 58.1016 76.2529 56.3726C76.2907 56.3603 76.326 56.3481 76.3577 56.3383C84.3434 53.7289 84.8622 44.7042 82.6335 37.8066Z" fill="#E8AB17"/>
|
||||
<path d="M40.6736 63.34C39.3157 57.1697 38.8712 51.2958 39.3705 46.432C31.5723 50.0529 24.0701 55.644 20.7051 60.2396C20.682 60.2714 20.6601 60.302 20.6406 60.329C15.7057 67.1593 20.5602 74.7672 26.3975 79.0297C32.2337 83.2934 40.9306 85.5857 45.8667 78.7554C45.9349 78.6623 46.0251 78.5374 46.1334 78.3868C43.9303 74.5578 41.95 69.1405 40.6736 63.34Z" fill="#2383F2"/>
|
||||
<path d="M74.8999 59.888C70.5971 60.8113 64.862 61.0305 58.9796 60.4587C52.7233 59.8513 47.0309 58.4603 42.5832 56.479C43.5977 65.0542 46.5693 73.9564 49.8759 78.5936C49.8991 78.6255 49.921 78.6561 49.9405 78.683C54.8754 85.5133 63.5723 83.2211 69.4096 78.9573C75.2458 74.6936 80.1015 67.0857 75.1666 60.2566C75.0984 60.1636 75.0083 60.0387 74.8999 59.888Z" fill="#1FBB4C"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
9
docs/static/img/logomark-light.svg
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="96" height="96" viewBox="0 0 96 96" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0.417391" y="0.417391" width="95.1652" height="95.1652" rx="47.5826" fill="white"/>
|
||||
<rect x="0.417391" y="0.417391" width="95.1652" height="95.1652" rx="47.5826" stroke="#E9EAEC" stroke-width="0.834783"/>
|
||||
<path d="M45.416 33.5745C50.1219 37.7635 53.9144 42.2526 56.3551 46.4832C60.5471 38.9452 63.3482 29.9879 63.3835 24.2829C63.3835 24.2425 63.3835 24.2057 63.3835 24.1715C63.3835 15.7297 55.0081 12.4443 47.7933 12.4443C40.5786 12.4443 32.2031 15.7297 32.2031 24.1715C32.2031 24.2866 32.2031 24.4409 32.2031 24.627C36.2246 26.4246 40.9914 29.6364 45.416 33.5745Z" fill="#FA2921"/>
|
||||
<path d="M19.7443 56.5951C22.6855 53.3048 27.1978 49.739 32.2898 46.7243C37.707 43.5185 43.1254 41.2789 47.8812 40.254C42.0463 33.9159 34.4394 28.4693 29.0527 26.673C29.0149 26.6607 28.9796 26.6497 28.9479 26.6387C20.9622 24.0305 15.2661 31.0236 13.0374 37.9225C10.8087 44.8214 11.3275 53.846 19.3132 56.4542C19.4216 56.4897 19.5677 56.5375 19.7443 56.5951Z" fill="#ED79B5"/>
|
||||
<path d="M82.6341 37.8063C80.4054 30.9074 74.7093 23.9143 66.7236 26.5225C66.614 26.558 66.4679 26.6057 66.2925 26.6633C65.8358 31.0629 64.2708 36.6149 61.9129 42.0627C59.4053 47.8571 56.3301 52.8715 53.082 56.5119C61.5074 58.1919 70.8462 58.1013 76.2536 56.3723C76.2914 56.3601 76.3267 56.3478 76.3583 56.338C84.344 53.7286 84.8629 44.704 82.6341 37.8063Z" fill="#FFB400"/>
|
||||
<path d="M40.6729 63.3397C39.315 57.1694 38.8704 51.2954 39.3698 46.4316C31.5716 50.0525 24.0694 55.6436 20.7044 60.2392C20.6812 60.271 20.6593 60.3017 20.6398 60.3286C15.7049 67.1589 20.5595 74.7668 26.3968 79.0293C32.2329 83.293 40.9299 85.5853 45.866 78.755C45.9342 78.6619 46.0243 78.537 46.1327 78.3864C43.9295 74.5574 41.9493 69.1402 40.6729 63.3397Z" fill="#1E83F7"/>
|
||||
<path d="M74.9007 59.8885C70.5979 60.8118 64.8628 61.031 58.9804 60.4591C52.7241 59.8518 47.0317 58.4607 42.584 56.4795C43.5985 65.0547 46.5701 73.9569 49.8767 78.5941C49.8998 78.626 49.9218 78.6566 49.9413 78.6835C54.8761 85.5138 63.5731 83.2215 69.4104 78.9578C75.2466 74.6941 80.1023 67.0862 75.1674 60.2571C75.0992 60.164 75.0091 60.0391 74.9007 59.8885Z" fill="#18C249"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
BIN
docs/static/img/screenshot-dark.webp
vendored
Normal file
|
After Width: | Height: | Size: 254 KiB |
BIN
docs/static/img/screenshot-light.webp
vendored
Normal file
|
After Width: | Height: | Size: 250 KiB |
@@ -11,13 +11,13 @@ module.exports = {
|
||||
colors: {
|
||||
// Light Theme
|
||||
'immich-primary': '#4250af',
|
||||
'immich-bg': 'white',
|
||||
'immich-bg': '#f9f8fb',
|
||||
'immich-fg': 'black',
|
||||
'immich-gray': '#F6F6F4',
|
||||
|
||||
// Dark Theme
|
||||
'immich-dark-primary': '#adcbfa',
|
||||
'immich-dark-bg': 'black',
|
||||
'immich-dark-bg': '#070a14',
|
||||
'immich-dark-fg': '#e5e7eb',
|
||||
'immich-dark-gray': '#212121',
|
||||
},
|
||||
|
||||
@@ -1 +1 @@
|
||||
20.17.0
|
||||
22.11.0
|
||||
|
||||
@@ -19,8 +19,10 @@ services:
|
||||
- DB_PASSWORD=postgres
|
||||
- DB_DATABASE_NAME=immich
|
||||
- IMMICH_MACHINE_LEARNING_ENABLED=false
|
||||
- IMMICH_METRICS=true
|
||||
- IMMICH_TELEMETRY_INCLUDE=all
|
||||
- IMMICH_ENV=testing
|
||||
- IMMICH_PORT=2285
|
||||
- IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true
|
||||
volumes:
|
||||
- ./test-assets:/test-assets
|
||||
extra_hosts:
|
||||
@@ -29,10 +31,10 @@ services:
|
||||
- redis
|
||||
- database
|
||||
ports:
|
||||
- 2285:3001
|
||||
- 2285:2285
|
||||
|
||||
redis:
|
||||
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
||||
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||
|
||||
database:
|
||||
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
|
||||
|
||||
687
e2e/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "immich-e2e",
|
||||
"version": "1.116.0",
|
||||
"version": "1.119.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
@@ -25,7 +25,7 @@
|
||||
"@immich/sdk": "file:../open-api/typescript-sdk",
|
||||
"@playwright/test": "^1.44.1",
|
||||
"@types/luxon": "^3.4.2",
|
||||
"@types/node": "^20.16.5",
|
||||
"@types/node": "^22.8.1",
|
||||
"@types/oidc-provider": "^8.5.1",
|
||||
"@types/pg": "^8.11.0",
|
||||
"@types/pngjs": "^6.0.4",
|
||||
@@ -37,7 +37,7 @@
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-unicorn": "^55.0.0",
|
||||
"exiftool-vendored": "^28.0.0",
|
||||
"exiftool-vendored": "^28.3.1",
|
||||
"globals": "^15.9.0",
|
||||
"jose": "^5.6.3",
|
||||
"luxon": "^3.4.4",
|
||||
@@ -53,6 +53,6 @@
|
||||
"vitest": "^2.0.5"
|
||||
},
|
||||
"volta": {
|
||||
"node": "20.17.0"
|
||||
"node": "22.11.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,6 @@ describe('/asset', () => {
|
||||
let user2Assets: AssetMediaResponseDto[];
|
||||
let locationAsset: AssetMediaResponseDto;
|
||||
let ratingAsset: AssetMediaResponseDto;
|
||||
let facesAsset: AssetMediaResponseDto;
|
||||
|
||||
const setupTests = async () => {
|
||||
await utils.resetDatabase();
|
||||
@@ -236,7 +235,7 @@ describe('/asset', () => {
|
||||
await updateConfig({ systemConfigDto: config }, { headers: asBearerAuth(admin.accessToken) });
|
||||
|
||||
// asset faces
|
||||
facesAsset = await utils.createAsset(admin.accessToken, {
|
||||
const facesAsset = await utils.createAsset(admin.accessToken, {
|
||||
assetData: {
|
||||
filename: 'portrait.jpg',
|
||||
bytes: await readFile(facesAssetFilepath),
|
||||
@@ -1061,7 +1060,7 @@ describe('/asset', () => {
|
||||
expected: {
|
||||
type: AssetTypeEnum.Image,
|
||||
originalFileName: 'philadelphia.nef',
|
||||
fileCreatedAt: '2016-09-22T22:10:29.060Z',
|
||||
fileCreatedAt: '2016-09-22T21:10:29.060Z',
|
||||
exifInfo: {
|
||||
make: 'NIKON CORPORATION',
|
||||
model: 'NIKON D700',
|
||||
@@ -1070,11 +1069,11 @@ describe('/asset', () => {
|
||||
focalLength: 85,
|
||||
iso: 200,
|
||||
fileSizeInByte: 15_856_335,
|
||||
dateTimeOriginal: '2016-09-22T22:10:29.060Z',
|
||||
dateTimeOriginal: '2016-09-22T21:10:29.060Z',
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
orientation: '1',
|
||||
timeZone: 'UTC-5',
|
||||
timeZone: 'UTC-4',
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1149,6 +1148,78 @@ describe('/asset', () => {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
input: 'formats/raw/Canon/PowerShot_G12.CR2',
|
||||
expected: {
|
||||
type: AssetTypeEnum.Image,
|
||||
originalFileName: 'PowerShot_G12.CR2',
|
||||
fileCreatedAt: '2015-12-27T09:55:40.000Z',
|
||||
exifInfo: {
|
||||
make: 'Canon',
|
||||
model: 'Canon PowerShot G12',
|
||||
exifImageHeight: 2736,
|
||||
exifImageWidth: 3648,
|
||||
exposureTime: '1/1000',
|
||||
fNumber: 4,
|
||||
focalLength: 18.098,
|
||||
iso: 80,
|
||||
lensModel: null,
|
||||
fileSizeInByte: 11_113_617,
|
||||
dateTimeOriginal: '2015-12-27T09:55:40.000Z',
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
orientation: '1',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
input: 'formats/raw/Fujifilm/X100V_compressed.RAF',
|
||||
expected: {
|
||||
type: AssetTypeEnum.Image,
|
||||
originalFileName: 'X100V_compressed.RAF',
|
||||
fileCreatedAt: '2024-10-12T21:01:01.000Z',
|
||||
exifInfo: {
|
||||
make: 'FUJIFILM',
|
||||
model: 'X100V',
|
||||
exifImageHeight: 4160,
|
||||
exifImageWidth: 6240,
|
||||
exposureTime: '1/4000',
|
||||
fNumber: 16,
|
||||
focalLength: 23,
|
||||
iso: 160,
|
||||
lensModel: null,
|
||||
fileSizeInByte: 13_551_312,
|
||||
dateTimeOriginal: '2024-10-12T21:01:01.000Z',
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
orientation: '6',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
input: 'formats/raw/Ricoh/GR3/Ricoh_GR3-450.DNG',
|
||||
expected: {
|
||||
type: AssetTypeEnum.Image,
|
||||
originalFileName: 'Ricoh_GR3-450.DNG',
|
||||
fileCreatedAt: '2024-06-08T13:48:39.000Z',
|
||||
exifInfo: {
|
||||
dateTimeOriginal: '2024-06-08T13:48:39.000Z',
|
||||
exifImageHeight: 4064,
|
||||
exifImageWidth: 6112,
|
||||
exposureTime: '1/400',
|
||||
fNumber: 5,
|
||||
fileSizeInByte: 31_175_472,
|
||||
focalLength: 18.3,
|
||||
iso: 100,
|
||||
latitude: 36.613_24,
|
||||
lensModel: 'GR LENS 18.3mm F2.8',
|
||||
longitude: -121.897_85,
|
||||
make: 'RICOH IMAGING COMPANY, LTD.',
|
||||
model: 'RICOH GR III',
|
||||
orientation: '1',
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
it(`should upload and generate a thumbnail for different file types`, async () => {
|
||||
|
||||
@@ -347,6 +347,62 @@ describe('/libraries', () => {
|
||||
expect(assets.items.find((asset) => asset.originalPath.includes('directoryB'))).toBeDefined();
|
||||
});
|
||||
|
||||
it('should scan multiple import paths with commas', async () => {
|
||||
// https://github.com/immich-app/immich/issues/10699
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp/folder, a`, `${testAssetDirInternal}/temp/folder, b`],
|
||||
});
|
||||
|
||||
utils.createImageFile(`${testAssetDir}/temp/folder, a/assetA.png`);
|
||||
utils.createImageFile(`${testAssetDir}/temp/folder, b/assetB.png`);
|
||||
|
||||
const { status } = await request(app)
|
||||
.post(`/libraries/${library.id}/scan`)
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`)
|
||||
.send();
|
||||
expect(status).toBe(204);
|
||||
|
||||
await utils.waitForQueueFinish(admin.accessToken, 'library');
|
||||
|
||||
const { assets } = await utils.metadataSearch(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(2);
|
||||
expect(assets.items.find((asset) => asset.originalPath.includes('folder, a'))).toBeDefined();
|
||||
expect(assets.items.find((asset) => asset.originalPath.includes('folder, b'))).toBeDefined();
|
||||
|
||||
utils.removeImageFile(`${testAssetDir}/temp/folder, a/assetA.png`);
|
||||
utils.removeImageFile(`${testAssetDir}/temp/folder, b/assetB.png`);
|
||||
});
|
||||
|
||||
it('should scan multiple import paths with braces', async () => {
|
||||
// https://github.com/immich-app/immich/issues/10699
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp/folder{ a`, `${testAssetDirInternal}/temp/folder} b`],
|
||||
});
|
||||
|
||||
utils.createImageFile(`${testAssetDir}/temp/folder{ a/assetA.png`);
|
||||
utils.createImageFile(`${testAssetDir}/temp/folder} b/assetB.png`);
|
||||
|
||||
const { status } = await request(app)
|
||||
.post(`/libraries/${library.id}/scan`)
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`)
|
||||
.send();
|
||||
expect(status).toBe(204);
|
||||
|
||||
await utils.waitForQueueFinish(admin.accessToken, 'library');
|
||||
|
||||
const { assets } = await utils.metadataSearch(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(2);
|
||||
expect(assets.items.find((asset) => asset.originalPath.includes('folder{ a'))).toBeDefined();
|
||||
expect(assets.items.find((asset) => asset.originalPath.includes('folder} b'))).toBeDefined();
|
||||
|
||||
utils.removeImageFile(`${testAssetDir}/temp/folder{ a/assetA.png`);
|
||||
utils.removeImageFile(`${testAssetDir}/temp/folder} b/assetB.png`);
|
||||
});
|
||||
|
||||
it('should reimport a modified file', async () => {
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
@@ -444,13 +500,13 @@ describe('/libraries', () => {
|
||||
});
|
||||
|
||||
it('should set an asset offline its file is not in any import path', async () => {
|
||||
utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`);
|
||||
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp/offline`],
|
||||
});
|
||||
|
||||
utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`);
|
||||
|
||||
await scan(admin.accessToken, library.id);
|
||||
await utils.waitForQueueFinish(admin.accessToken, 'library');
|
||||
|
||||
@@ -577,6 +633,29 @@ describe('/libraries', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("should fail if path isn't absolute", async () => {
|
||||
const pathToTest = `relative/path`;
|
||||
|
||||
const cwd = process.cwd();
|
||||
// Create directory in cwd
|
||||
utils.createDirectory(`${cwd}/${pathToTest}`);
|
||||
|
||||
const response = await utils.validateLibrary(admin.accessToken, library.id, {
|
||||
importPaths: [pathToTest],
|
||||
});
|
||||
|
||||
utils.removeDirectory(`${cwd}/${pathToTest}`);
|
||||
|
||||
expect(response.importPaths?.length).toEqual(1);
|
||||
const pathResponse = response?.importPaths?.at(0);
|
||||
|
||||
expect(pathResponse).toEqual({
|
||||
importPath: pathToTest,
|
||||
isValid: false,
|
||||
message: expect.stringMatching('Import path must be absolute, try /usr/src/app/relative/path'),
|
||||
});
|
||||
});
|
||||
|
||||
it('should fail if path is a file', async () => {
|
||||
const pathToTest = `${testAssetDirInternal}/albums/nature/el_torcal_rocks.jpg`;
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ const authServer = {
|
||||
external: 'http://127.0.0.1:3000',
|
||||
};
|
||||
|
||||
const mobileOverrideRedirectUri = 'https://photos.immich.app/oauth/mobile-redirect';
|
||||
|
||||
const redirect = async (url: string, cookies?: string[]) => {
|
||||
const { headers } = await request(url)
|
||||
.get('/')
|
||||
@@ -24,8 +26,8 @@ const redirect = async (url: string, cookies?: string[]) => {
|
||||
return { cookies: (headers['set-cookie'] as unknown as string[]) || [], location: headers.location };
|
||||
};
|
||||
|
||||
const loginWithOAuth = async (sub: OAuthUser | string) => {
|
||||
const { url } = await startOAuth({ oAuthConfigDto: { redirectUri: `${baseUrl}/auth/login` } });
|
||||
const loginWithOAuth = async (sub: OAuthUser | string, redirectUri?: string) => {
|
||||
const { url } = await startOAuth({ oAuthConfigDto: { redirectUri: redirectUri ?? `${baseUrl}/auth/login` } });
|
||||
|
||||
// login
|
||||
const response1 = await redirect(url.replace(authServer.internal, authServer.external));
|
||||
@@ -255,4 +257,50 @@ describe(`/oauth`, () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('mobile redirect override', () => {
|
||||
beforeAll(async () => {
|
||||
await setupOAuth(admin.accessToken, {
|
||||
enabled: true,
|
||||
clientId: OAuthClient.DEFAULT,
|
||||
clientSecret: OAuthClient.DEFAULT,
|
||||
buttonText: 'Login with Immich',
|
||||
storageLabelClaim: 'immich_username',
|
||||
mobileOverrideEnabled: true,
|
||||
mobileRedirectUri: mobileOverrideRedirectUri,
|
||||
});
|
||||
});
|
||||
|
||||
it('should return the mobile redirect uri', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.post('/oauth/authorize')
|
||||
.send({ redirectUri: 'app.immich:///oauth-callback' });
|
||||
expect(status).toBe(201);
|
||||
expect(body).toEqual({ url: expect.stringContaining(`${authServer.internal}/auth?`) });
|
||||
|
||||
const params = new URL(body.url).searchParams;
|
||||
expect(params.get('client_id')).toBe('client-default');
|
||||
expect(params.get('response_type')).toBe('code');
|
||||
expect(params.get('redirect_uri')).toBe(mobileOverrideRedirectUri);
|
||||
expect(params.get('state')).toBeDefined();
|
||||
});
|
||||
|
||||
it('should auto register the user by default', async () => {
|
||||
const url = await loginWithOAuth('oauth-mobile-override', 'app.immich:///oauth-callback');
|
||||
expect(url).toEqual(expect.stringContaining(mobileOverrideRedirectUri));
|
||||
|
||||
// simulate redirecting back to mobile app
|
||||
const redirectUri = url.replace(mobileOverrideRedirectUri, 'app.immich:///oauth-callback');
|
||||
|
||||
const { status, body } = await request(app).post('/oauth/callback').send({ url: redirectUri });
|
||||
expect(status).toBe(201);
|
||||
expect(body).toMatchObject({
|
||||
accessToken: expect.any(String),
|
||||
isAdmin: false,
|
||||
name: 'OAuth User',
|
||||
userEmail: 'oauth-mobile-override@immich.app',
|
||||
userId: expect.any(String),
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,204 +0,0 @@
|
||||
import { LoginResponseDto } from '@immich/sdk';
|
||||
import { createUserDto } from 'src/fixtures';
|
||||
import { errorDto } from 'src/responses';
|
||||
import { app, utils } from 'src/utils';
|
||||
import request from 'supertest';
|
||||
import { beforeAll, describe, expect, it } from 'vitest';
|
||||
|
||||
describe('/server-info', () => {
|
||||
let admin: LoginResponseDto;
|
||||
let nonAdmin: LoginResponseDto;
|
||||
|
||||
beforeAll(async () => {
|
||||
await utils.resetDatabase();
|
||||
admin = await utils.adminSetup({ onboarding: false });
|
||||
nonAdmin = await utils.userSetup(admin.accessToken, createUserDto.user1);
|
||||
});
|
||||
|
||||
describe('GET /server-info/about', () => {
|
||||
it('should require authentication', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/about');
|
||||
expect(status).toBe(401);
|
||||
expect(body).toEqual(errorDto.unauthorized);
|
||||
});
|
||||
|
||||
it('should return about information', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/server-info/about')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
version: expect.any(String),
|
||||
versionUrl: expect.any(String),
|
||||
repository: 'immich-app/immich',
|
||||
repositoryUrl: 'https://github.com/immich-app/immich',
|
||||
build: '1234567890',
|
||||
buildUrl: 'https://github.com/immich-app/immich/actions/runs/1234567890',
|
||||
buildImage: 'e2e',
|
||||
buildImageUrl: 'https://github.com/immich-app/immich/pkgs/container/immich-server',
|
||||
sourceRef: 'e2e',
|
||||
sourceCommit: 'e2eeeeeeeeeeeeeeeeee',
|
||||
sourceUrl: 'https://github.com/immich-app/immich/commit/e2eeeeeeeeeeeeeeeeee',
|
||||
nodejs: expect.any(String),
|
||||
ffmpeg: expect.any(String),
|
||||
imagemagick: expect.any(String),
|
||||
libvips: expect.any(String),
|
||||
exiftool: expect.any(String),
|
||||
licensed: false,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/storage', () => {
|
||||
it('should require authentication', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/storage');
|
||||
expect(status).toBe(401);
|
||||
expect(body).toEqual(errorDto.unauthorized);
|
||||
});
|
||||
|
||||
it('should return the disk information', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/server-info/storage')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
diskAvailable: expect.any(String),
|
||||
diskAvailableRaw: expect.any(Number),
|
||||
diskSize: expect.any(String),
|
||||
diskSizeRaw: expect.any(Number),
|
||||
diskUsagePercentage: expect.any(Number),
|
||||
diskUse: expect.any(String),
|
||||
diskUseRaw: expect.any(Number),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/ping', () => {
|
||||
it('should respond with pong', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/ping');
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({ res: 'pong' });
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/version', () => {
|
||||
it('should respond with the server version', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/version');
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
major: expect.any(Number),
|
||||
minor: expect.any(Number),
|
||||
patch: expect.any(Number),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/features', () => {
|
||||
it('should respond with the server features', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/features');
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
smartSearch: false,
|
||||
configFile: false,
|
||||
duplicateDetection: false,
|
||||
facialRecognition: false,
|
||||
importFaces: false,
|
||||
map: true,
|
||||
reverseGeocoding: true,
|
||||
oauth: false,
|
||||
oauthAutoLaunch: false,
|
||||
passwordLogin: true,
|
||||
search: true,
|
||||
sidecar: true,
|
||||
trash: true,
|
||||
email: false,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/config', () => {
|
||||
it('should respond with the server configuration', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/config');
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
loginPageMessage: '',
|
||||
oauthButtonText: 'Login with OAuth',
|
||||
trashDays: 30,
|
||||
userDeleteDelay: 7,
|
||||
isInitialized: true,
|
||||
externalDomain: '',
|
||||
isOnboarded: false,
|
||||
mapDarkStyleUrl: 'https://tiles.immich.cloud/v1/style/dark.json',
|
||||
mapLightStyleUrl: 'https://tiles.immich.cloud/v1/style/light.json',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/statistics', () => {
|
||||
it('should require authentication', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/statistics');
|
||||
expect(status).toBe(401);
|
||||
expect(body).toEqual(errorDto.unauthorized);
|
||||
});
|
||||
|
||||
it('should only work for admins', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/server-info/statistics')
|
||||
.set('Authorization', `Bearer ${nonAdmin.accessToken}`);
|
||||
expect(status).toBe(403);
|
||||
expect(body).toEqual(errorDto.forbidden);
|
||||
});
|
||||
|
||||
it('should return the server stats', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/server-info/statistics')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
photos: 0,
|
||||
usage: 0,
|
||||
usageByUser: [
|
||||
{
|
||||
quotaSizeInBytes: null,
|
||||
photos: 0,
|
||||
usage: 0,
|
||||
userName: 'Immich Admin',
|
||||
userId: admin.userId,
|
||||
videos: 0,
|
||||
},
|
||||
{
|
||||
quotaSizeInBytes: null,
|
||||
photos: 0,
|
||||
usage: 0,
|
||||
userName: 'User 1',
|
||||
userId: nonAdmin.userId,
|
||||
videos: 0,
|
||||
},
|
||||
],
|
||||
videos: 0,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/media-types', () => {
|
||||
it('should return accepted media types', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/media-types');
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
sidecar: ['.xmp'],
|
||||
image: expect.any(Array),
|
||||
video: expect.any(Array),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /server-info/theme', () => {
|
||||
it('should respond with the server theme', async () => {
|
||||
const { status, body } = await request(app).get('/server-info/theme');
|
||||
expect(status).toBe(200);
|
||||
expect(body).toEqual({
|
||||
customCss: '',
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,9 +1,90 @@
|
||||
import { LoginResponseDto, getAllAlbums, getAssetStatistics } from '@immich/sdk';
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { cpSync, readFileSync } from 'node:fs';
|
||||
import { mkdir, readdir, rm, symlink } from 'node:fs/promises';
|
||||
import { asKeyAuth, immichCli, testAssetDir, utils } from 'src/utils';
|
||||
import { asKeyAuth, immichCli, specialCharStrings, testAssetDir, utils } from 'src/utils';
|
||||
import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
|
||||
|
||||
interface Test {
|
||||
test: string;
|
||||
paths: string[];
|
||||
files: Record<string, boolean>;
|
||||
}
|
||||
|
||||
const tests: Test[] = [
|
||||
{
|
||||
test: 'should support globbing with *',
|
||||
paths: [`/photos*`],
|
||||
files: {
|
||||
'/photos1/image1.jpg': true,
|
||||
'/photos2/image2.jpg': true,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with an asterisk',
|
||||
paths: [`/photos\*/image1.jpg`],
|
||||
files: {
|
||||
'/photos*/image1.jpg': true,
|
||||
'/photos*/image2.jpg': false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a space',
|
||||
paths: [`/my photos/image1.jpg`],
|
||||
files: {
|
||||
'/my photos/image1.jpg': true,
|
||||
'/my photos/image2.jpg': false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a single quote',
|
||||
paths: [`/photos\'/image1.jpg`],
|
||||
files: {
|
||||
"/photos'/image1.jpg": true,
|
||||
"/photos'/image2.jpg": false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a double quote',
|
||||
paths: [`/photos\"/image1.jpg`],
|
||||
files: {
|
||||
'/photos"/image1.jpg': true,
|
||||
'/photos"/image2.jpg': false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a comma',
|
||||
paths: [`/photos, eh/image1.jpg`],
|
||||
files: {
|
||||
'/photos, eh/image1.jpg': true,
|
||||
'/photos, eh/image2.jpg': false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with an opening brace',
|
||||
paths: [`/photos\{/image1.jpg`],
|
||||
files: {
|
||||
'/photos{/image1.jpg': true,
|
||||
'/photos{/image2.jpg': false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a closing brace',
|
||||
paths: [`/photos\}/image1.jpg`],
|
||||
files: {
|
||||
'/photos}/image1.jpg': true,
|
||||
'/photos}/image2.jpg': false,
|
||||
'/images/image3.jpg': false,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
describe(`immich upload`, () => {
|
||||
let admin: LoginResponseDto;
|
||||
let key: string;
|
||||
@@ -32,6 +113,60 @@ describe(`immich upload`, () => {
|
||||
expect(assets.total).toBe(1);
|
||||
});
|
||||
|
||||
describe(`should accept special cases`, () => {
|
||||
for (const { test, paths, files } of tests) {
|
||||
it(test, async () => {
|
||||
const baseDir = `/tmp/upload/`;
|
||||
|
||||
const testPaths = Object.keys(files).map((filePath) => `${baseDir}/${filePath}`);
|
||||
testPaths.map((filePath) => utils.createImageFile(filePath));
|
||||
|
||||
const commandLine = paths.map((argument) => `${baseDir}/${argument}`);
|
||||
|
||||
const expectedCount = Object.entries(files).filter((entry) => entry[1]).length;
|
||||
|
||||
const { stderr, stdout, exitCode } = await immichCli(['upload', ...commandLine]);
|
||||
expect(stderr).toBe('');
|
||||
expect(stdout.split('\n')).toEqual(
|
||||
expect.arrayContaining([expect.stringContaining(`Successfully uploaded ${expectedCount} new asset`)]),
|
||||
);
|
||||
expect(exitCode).toBe(0);
|
||||
|
||||
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
|
||||
expect(assets.total).toBe(expectedCount);
|
||||
|
||||
testPaths.map((filePath) => utils.removeImageFile(filePath));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
it.each(specialCharStrings)(`should upload a multiple files from paths containing %s`, async (testString) => {
|
||||
// https://github.com/immich-app/immich/issues/12078
|
||||
|
||||
// NOTE: this test must contain more than one path since a related bug is only triggered with multiple paths
|
||||
|
||||
const testPaths = [
|
||||
`${testAssetDir}/temp/dir1${testString}name/asset.jpg`,
|
||||
`${testAssetDir}/temp/dir2${testString}name/asset.jpg`,
|
||||
];
|
||||
|
||||
cpSync(`${testAssetDir}/albums/nature/tanners_ridge.jpg`, testPaths[0]);
|
||||
cpSync(`${testAssetDir}/albums/nature/silver_fir.jpg`, testPaths[1]);
|
||||
|
||||
const { stderr, stdout, exitCode } = await immichCli(['upload', ...testPaths]);
|
||||
expect(stderr).toBe('');
|
||||
expect(stdout.split('\n')).toEqual(
|
||||
expect.arrayContaining([expect.stringContaining('Successfully uploaded 2 new assets')]),
|
||||
);
|
||||
expect(exitCode).toBe(0);
|
||||
|
||||
utils.removeImageFile(testPaths[0]);
|
||||
utils.removeImageFile(testPaths[1]);
|
||||
|
||||
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
|
||||
expect(assets.total).toBe(2);
|
||||
});
|
||||
|
||||
it('should skip a duplicate file', async () => {
|
||||
const first = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
||||
expect(first.stderr).toBe('');
|
||||
|
||||
@@ -50,6 +50,7 @@ const getClaims = (sub: string) => claims.find((user) => user.sub === sub) || wi
|
||||
const setup = async () => {
|
||||
const { privateKey, publicKey } = await generateKeyPair('RS256');
|
||||
|
||||
const redirectUris = ['http://127.0.0.1:2285/auth/login', 'https://photos.immich.app/oauth/mobile-redirect'];
|
||||
const port = 3000;
|
||||
const host = '0.0.0.0';
|
||||
const oidc = new Provider(`http://${host}:${port}`, {
|
||||
@@ -86,14 +87,14 @@ const setup = async () => {
|
||||
{
|
||||
client_id: OAuthClient.DEFAULT,
|
||||
client_secret: OAuthClient.DEFAULT,
|
||||
redirect_uris: ['http://127.0.0.1:2285/auth/login'],
|
||||
redirect_uris: redirectUris,
|
||||
grant_types: ['authorization_code'],
|
||||
response_types: ['code'],
|
||||
},
|
||||
{
|
||||
client_id: OAuthClient.RS256_TOKENS,
|
||||
client_secret: OAuthClient.RS256_TOKENS,
|
||||
redirect_uris: ['http://127.0.0.1:2285/auth/login'],
|
||||
redirect_uris: redirectUris,
|
||||
grant_types: ['authorization_code'],
|
||||
id_token_signed_response_alg: 'RS256',
|
||||
jwks: { keys: [await exportJWK(publicKey)] },
|
||||
@@ -101,7 +102,7 @@ const setup = async () => {
|
||||
{
|
||||
client_id: OAuthClient.RS256_PROFILE,
|
||||
client_secret: OAuthClient.RS256_PROFILE,
|
||||
redirect_uris: ['http://127.0.0.1:2285/auth/login'],
|
||||
redirect_uris: redirectUris,
|
||||
grant_types: ['authorization_code'],
|
||||
userinfo_signed_response_alg: 'RS256',
|
||||
jwks: { keys: [await exportJWK(publicKey)] },
|
||||
|
||||
@@ -68,6 +68,7 @@ export const immichCli = (args: string[]) =>
|
||||
executeCommand('node', ['node_modules/.bin/immich', '-d', `/${tempDir}/immich/`, ...args]).promise;
|
||||
export const immichAdmin = (args: string[]) =>
|
||||
executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', `immich-admin ${args.join(' ')}`]);
|
||||
export const specialCharStrings = ["'", '"', ',', '{', '}', '*'];
|
||||
|
||||
const executeCommand = (command: string, args: string[]) => {
|
||||
let _resolve: (value: CommandResponse) => void;
|
||||
@@ -373,8 +374,8 @@ export const utils = {
|
||||
},
|
||||
|
||||
createDirectory: (path: string) => {
|
||||
if (!existsSync(dirname(path))) {
|
||||
mkdirSync(dirname(path), { recursive: true });
|
||||
if (!existsSync(path)) {
|
||||
mkdirSync(path, { recursive: true });
|
||||
}
|
||||
},
|
||||
|
||||
@@ -391,7 +392,7 @@ export const utils = {
|
||||
return;
|
||||
}
|
||||
|
||||
rmSync(path);
|
||||
rmSync(path, { recursive: true });
|
||||
},
|
||||
|
||||
getAssetInfo: (accessToken: string, id: string) => getAssetInfo({ id }, { headers: asBearerAuth(accessToken) }),
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "تم إضافة {count, number} إلى المفضلات",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "إضافة أنماط الاستبعاد. يدعم التمويه باستخدام *، **، و؟. لتجاهل جميع الملفات في أي دليل يسمى \"Raw\"، استخدم \"**/Raw/**\". لتجاهل جميع الملفات التي تنتهي بـ \".tif\"، استخدم \"**/*.tif\". لتجاهل مسار مطلق، استخدم \"/path/to/ignore/**\".",
|
||||
"asset_offline_description": "لم يعد هذا الأصل الخاص بالمكتبة الخارجية موجودًا على القرص وتم نقله إلى سلة المهملات. إذا تم نقل الملف داخل المكتبة، فتحقق من الجدول الزمني الخاص بك لمعرفة الأصل الجديد المقابل. لاستعادة هذا الأصل، يرجى التأكد من إمكانية الوصول إلى مسار الملف أدناه بواسطة Immich ومن ثم قم بمسح المكتبة.",
|
||||
"authentication_settings": "إعدادات المصادقة",
|
||||
"authentication_settings_description": "إدارة كلمة المرور وOAuth وإعدادات المصادقة الأُخرى",
|
||||
"authentication_settings_disable_all": "هل أنت متأكد أنك تريد تعطيل جميع وسائل تسجيل الدخول؟ سيتم تعطيل تسجيل الدخول بالكامل.",
|
||||
@@ -41,6 +42,7 @@
|
||||
"confirm_email_below": "للتأكيد، اكتب \"{email}\" بالأسفل",
|
||||
"confirm_reprocess_all_faces": "هل أنت متأكد أنك تريد إعادة معالجة جميع الوجوه؟ سيخلي هذا كل الأشخاص الذين سَميتَهم.",
|
||||
"confirm_user_password_reset": "هل أنت متأكد أنك تريد إعادة تعيين كلمة مرور {user}؟",
|
||||
"create_job": "إنشاء وظيفة",
|
||||
"crontab_guru": "",
|
||||
"disable_login": "تعطيل تسجيل الدخول",
|
||||
"disabled": "",
|
||||
@@ -49,27 +51,37 @@
|
||||
"external_library_created_at": "مكتبة خارجية (أُنشئت في {date})",
|
||||
"external_library_management": "إدارة المكتبة الخارجية",
|
||||
"face_detection": "إكتشاف الوجوه",
|
||||
"face_detection_description": "اكتشف الوجوه في المحتويات باستخدام التعلم الآلي. بالنسبة للفيديوهات، سيتم فقط استخدام الصورة المصغرة. خيار \"الكل\" يعيد معالجة كل المحتويات. خيار \"مفقود\" يضع في قائمة الإنتظار المحتويات التي لم تعالج بعد. سيتم وضع الوجوه المكتشفة في قائمة إنتظار التعرف على الوجه بعد اكتمال اكتشاف الوجه، مما يجمعها بأشخاص موجودين أو جدد.",
|
||||
"facial_recognition_job_description": "تجميع الوجوه المكتشفة كأشخاص. يتم تنفيذ هذه الخطوة بعد اكتمال اكتشاف الوجه. خيار \"الكل\" يعيد تجميع جميع الوجوه. خيار \"المفقود\" يضع في قائمة الانتظار الوجوه التي لم يتم تعيين شخص لها.",
|
||||
"face_detection_description": "اكتشف الوجوه في الأصول باستخدام التعلم الآلي. بالنسبة لمقاطع الفيديو، يتم اعتبار الصورة المصغرة فقط. \"تحديث\" (إعادة) معالجة جميع الأصول. \"إعادة تعيين\" تمسح أيضًا جميع بيانات الوجوه الحالية. \"مفقود\" يضع الأصول التي لم تتم معالجتها بعد في قائمة الانتظار. سيتم وضع الوجوه المكتشفة في قائمة الانتظار للتعرف على الوجه بعد اكتمال اكتشاف الوجه، وتجميعها في أشخاص موجودين أو جدد.",
|
||||
"facial_recognition_job_description": "تجميع الوجوه المكتشفة كأشخاص. يتم تنفيذ هذه الخطوة بعد اكتمال اكتشاف الوجه. خيار \"إعادة التعيين\" يعيد تجميع جميع الوجوه. خيار \"المفقود\" يضع في قائمة الانتظار الوجوه التي لم يتم تعيين شخص لها.",
|
||||
"failed_job_command": "فشل الأمر {command} للمهمة: {job}",
|
||||
"force_delete_user_warning": "تحذير: سيؤدي ذلك إلى إزالة المستخدم وجميع محتوياته على الفور. لا يمكن التراجع عن هذا الإجراء ولا يمكن استرداد الملفات.",
|
||||
"forcing_refresh_library_files": "إجبار التحديث لجميع ملفات المكتبة",
|
||||
"image_format": "التنسيق",
|
||||
"image_format_description": "يُنتج WebP ملفات أصغر حجمًا من ملفات JPEG، ولكنه أبطأ في عملية الترميز.",
|
||||
"image_prefer_embedded_preview": "تفضيل المعاينة المدمجة",
|
||||
"image_prefer_embedded_preview_setting_description": "استخدم المعاينات المضمنة في صور RAW كمدخل لمعالجة الصور عندما تكون متاحة. يؤدي لإنتاج ألوان أكثر دقة لبعض الصور، لكن جودة المعاينة تعتمد على الكاميرا وقد تحتوي الصورة على شوائب ضغطٍ أكثر.",
|
||||
"image_prefer_wide_gamut": "تفضيل نطاق الألوان الواسع",
|
||||
"image_prefer_wide_gamut_setting_description": "استخدم Display P3 للصور المصغرة. يحافظ هذا على حيوية الصور ذات مساحات الألوان الواسعة بشكل أفضل، ولكن قد تظهر الصور بشكل مختلف على الأجهزة القديمة ذات إصدار متصفح قديم. يتم الاحتفاظ بصور sRGB بتنسيق sRGB لتجنب تغيرات اللون.",
|
||||
"image_preview_description": "صورة متوسطة الحجم مع بيانات وصفية مجردة، تُستخدم عند عرض أصل واحد وللتعلم الآلي",
|
||||
"image_preview_format": "تنسيق المعاينة",
|
||||
"image_preview_quality_description": "جودة المعاينة من 1 إلى 100. كلما كانت القيمة أعلى كان ذلك أفضل، ولكنها تنتج ملفات أكبر وقد تقلل من استجابة التطبيق. قد يؤثر ضبط قيمة منخفضة على جودة التعلم الآلي.",
|
||||
"image_preview_resolution": "معاينة الدقّة",
|
||||
"image_preview_resolution_description": "يُستخدم عند عرض صورة واحدة وللتعلم الآلي. ستحافظ الدقاتُ العالية على المزيد من التفاصيل ولكنها ستستغرق وقتًا أطول للترميز، ولها أحجام ملفات أكبر، ويمكن أن تقلل من استجابة التطبيق.",
|
||||
"image_preview_title": "إعدادات المعاينة",
|
||||
"image_quality": "الجودة",
|
||||
"image_quality_description": "جودة الصورة من 1-100. الأعلى هو الأفضل من حيث الجودة ولكنه ينتج ملفات أكبر، ويؤثر هذا الخيار على صور المعاينة والصور المصغرة.",
|
||||
"image_resolution": "الدقة",
|
||||
"image_resolution_description": "يمكن للدقة العالية الحفاظ على مزيد من التفاصيل ولكنها تستغرق وقتًا أطول للترميز، وتحتوي على أحجام ملفات أكبر ويمكن أن تقلل من استجابة التطبيق.",
|
||||
"image_settings": "إعدادات الصور",
|
||||
"image_settings_description": "إدارة جودة ودقة الصور التي تم إنشاؤها",
|
||||
"image_thumbnail_description": "صورة مصغرة صغيرة مع بيانات وصفية مجردة، تُستخدم عند عرض مجموعات من الصور مثل الجدول الزمني الرئيسي",
|
||||
"image_thumbnail_format": "تنسيق الصور المصغّرة",
|
||||
"image_thumbnail_quality_description": "تتراوح جودة الصورة المصغرة من 1 إلى 100. كلما كانت الجودة أعلى كان ذلك أفضل، ولكنها تنتج ملفات أكبر وقد تقلل من استجابة التطبيق.",
|
||||
"image_thumbnail_resolution": "دقة الصور المصغّرة",
|
||||
"image_thumbnail_resolution_description": "يُستخدم عند عرض مجموعات من الصور (المخطط الزمني الرئيسي، عرض الألبوم، وما إلى ذلك). ستحافظ الدقاتُ العالية على المزيد من التفاصيل ولكنها ستستغرق وقتًا أطول للترميز، ولها أحجام ملفات أكبر، ويمكن أن تقلل من استجابة التطبيق.",
|
||||
"image_thumbnail_title": "إعدادات الصورة المصغرة",
|
||||
"job_concurrency": "تزامن {job}",
|
||||
"job_created": "تم إنشاء الوظيفة",
|
||||
"job_not_concurrency_safe": "هذه الوظيفة غير آمنة للتشغيل المتزامن.",
|
||||
"job_settings": "إعدادات الوظائف",
|
||||
"job_settings_description": "إدارة تزامن الوظائف",
|
||||
@@ -139,7 +151,11 @@
|
||||
"map_settings_description": "إدارة إعدادات الخريطة",
|
||||
"map_style_description": "عنوان URL لسمة الخريطة style.json",
|
||||
"metadata_extraction_job": "استخراج البيانات الوصفية",
|
||||
"metadata_extraction_job_description": "استخراج معلومات البيانات الوصفية من كل أصل، مثل إحداثيات الموقع والدقة",
|
||||
"metadata_extraction_job_description": "استخراج معلومات البيانات الوصفية من كل أصل، مثل إحداثيات الموقع, الوجوه والدقة",
|
||||
"metadata_faces_import_setting": "تمكين استيراد الوجه",
|
||||
"metadata_faces_import_setting_description": "استيراد الوجوه من بيانات EXIF للصور وملفات Sidecar",
|
||||
"metadata_settings": "إعدادات البيانات الوصفية",
|
||||
"metadata_settings_description": "إدارة إعدادات البيانات الوصفية",
|
||||
"migration_job": "ترحيل",
|
||||
"migration_job_description": "ترحيل الصور المصغرة للمحتويات والوجوه إلى أحدث هيكل مجلدات",
|
||||
"no_paths_added": "لم يتم إضافة أي مسارات",
|
||||
@@ -194,6 +210,7 @@
|
||||
"password_settings": "تسجيل الدخول بكلمة المرور",
|
||||
"password_settings_description": "إدارة تسجيل الدخول بكلمة المرور",
|
||||
"paths_validated_successfully": "تم التحقق من صحة كافة المسارات بنجاح",
|
||||
"person_cleanup_job": "تنظيف الشخص",
|
||||
"quota_size_gib": "حجم الحصة (جيجابايت)",
|
||||
"refreshing_all_libraries": "تحديث كافة المكتبات",
|
||||
"registration": "تسجيل المدير",
|
||||
@@ -205,8 +222,10 @@
|
||||
"require_password_change_on_login": "الطلب من المستخدم تغيير كلمة المرور عند تسجيل الدخول الأول",
|
||||
"reset_settings_to_default": "إعادة ضبط الإعدادات إلى الوضع الافتراضي",
|
||||
"reset_settings_to_recent_saved": "إعادة ضبط الإعدادات إلى الإعدادات المحفوظة مؤخرًا",
|
||||
"scanning_library": "مسح المكتبة",
|
||||
"scanning_library_for_changed_files": "فحص المكتبة لاكتشاف الملفات التي تم تغييرها",
|
||||
"scanning_library_for_new_files": "فحص المكتبة للبحث عن ملفات جديدة",
|
||||
"search_jobs": "البحث عن وظائف...",
|
||||
"send_welcome_email": "إرسال بريد ترحيبي",
|
||||
"server_external_domain_settings": "إسم النطاق الخارجي",
|
||||
"server_external_domain_settings_description": "إسم النطاق لروابط المشاركة العامة، بما في ذلك http(s)://",
|
||||
@@ -234,6 +253,7 @@
|
||||
"storage_template_settings_description": "إدارة هيكل المجلد واسم الملف للأصول المرفوعة",
|
||||
"storage_template_user_label": "<code>{label}</code> هو تسمية التخزين الخاصة بالمستخدم",
|
||||
"system_settings": "إعدادات النظام",
|
||||
"tag_cleanup_job": "تنظيف العلامة",
|
||||
"theme_custom_css_settings": "CSS مخصص",
|
||||
"theme_custom_css_settings_description": "أوراق الأنماط المتتالية تسمح بتخصيص تصميم Immich.",
|
||||
"theme_settings": "إعدادات السمة",
|
||||
@@ -308,6 +328,7 @@
|
||||
"trash_settings_description": "إدارة إعدادات سلة المهملات",
|
||||
"untracked_files": "الملفات التي لم يتم تعقبها",
|
||||
"untracked_files_description": "لا يتم تعقب هذه الملفات بواسطة التطبيق. يمكن أن تكون نتيجة لعمليات نقل فاشلة، أو عمليات تحميل متقطعة، أو يتم تركها في الخلف بسبب خطأ ما",
|
||||
"user_cleanup_job": "تنظيف المستخدم",
|
||||
"user_delete_delay": "سيتم جدولة حساب <b>{user}</b> ومحتوياته للحذف النهائي في غضون {delay, plural, one {# يوم} other {# أيام}}.",
|
||||
"user_delete_delay_settings": "فترة التأخير قبل الحذف",
|
||||
"user_delete_delay_settings_description": "عدد الأيام بعد الإزالة لحذف حساب المستخدم ومحتوياته بشكل دائم. تقوم وظيفة حذف المستخدم بالتشغيل في منتصف الليل للتحقق من المستخدمين الجاهزين للحذف. سيتم تقييم التغييرات على هذا الإعداد في التنفيذ القادم.",
|
||||
@@ -384,9 +405,10 @@
|
||||
"asset_filename_is_offline": "الأصل {filename} غير متصل",
|
||||
"asset_has_unassigned_faces": "يحتوي الأصل على وجوه غير مخصصة",
|
||||
"asset_hashing": "التجزئة...",
|
||||
"asset_offline": "المحتوى دون اتصال",
|
||||
"asset_offline_description": "هذا الأصل غير متصل. لا يستطيع Immic الوصول إلى موقع الملف الخاص به. يرجى التأكد من توفر الأصل ثم إعادة فحص المكتبة.",
|
||||
"asset_offline": "المحتوى غير اتصال",
|
||||
"asset_offline_description": "لم يعد هذا الأصل الخارجي موجودًا على القرص. يرجى الاتصال بمسؤول Immich للحصول على المساعدة.",
|
||||
"asset_skipped": "تم تخطيه",
|
||||
"asset_skipped_in_trash": "في سلة المهملات",
|
||||
"asset_uploaded": "تم الرفع",
|
||||
"asset_uploading": "جارٍ الرفع...",
|
||||
"assets": "المحتويات",
|
||||
@@ -397,7 +419,7 @@
|
||||
"assets_moved_to_trash_count": "تم نقل {count, plural, one {# محتوى} other {# محتويات}} إلى سلة المهملات",
|
||||
"assets_permanently_deleted_count": "تم حذف {count, plural, one {# هذا المحتوى} other {# هذه المحتويات}} بشكل دائم",
|
||||
"assets_removed_count": "تمت إزالة {count, plural, one {# محتوى} other {# محتويات}}",
|
||||
"assets_restore_confirmation": "هل أنت متأكد أنك تريد استعادة كافة المحتويات المحذوفة؟ لا يمكنك التراجع عن هذا الإجراء!",
|
||||
"assets_restore_confirmation": "هل أنت متأكد من أنك تريد استعادة جميع الأصول المحذوفة؟ لا يمكنك التراجع عن هذا الإجراء! لاحظ أنه لا يمكن استعادة أي أصول غير متصلة بهذه الطريقة.",
|
||||
"assets_restored_count": "تمت استعادة {count, plural, one {# محتوى} other {# محتويات}}",
|
||||
"assets_trashed_count": "تم إرسال {count, plural, one {# محتوى} other {# محتويات}} إلى سلة المهملات",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {هذا المحتوى} other {هذه المحتويات}} في الألبوم بالفعل",
|
||||
@@ -408,6 +430,7 @@
|
||||
"birthdate_saved": "تم حفظ تاريخ الميلاد بنجاح",
|
||||
"birthdate_set_description": "يتم استخدام تاريخ الميلاد لحساب عمر هذا الشخص وقت التقاط الصورة.",
|
||||
"blurred_background": "خلفية مشوشة",
|
||||
"bugs_and_feature_requests": "الأخطاء وطلبات الميزات",
|
||||
"build": "يبني",
|
||||
"build_image": "بناء الصورة",
|
||||
"bulk_delete_duplicates_confirmation": "هل أنت متأكد من أنك تريد حذف {count, plural, one {# محتوى مكرر} other {# محتويات مكررة}} بالجملة؟ سيحتفظ هذا بأكبر محتوى من كل مجموعة ويحذف جميع النسخ المكررة الأخرى بشكل دائم. لا يمكنك التراجع عن هذا الإجراء!",
|
||||
@@ -511,11 +534,13 @@
|
||||
"delete_tag_confirmation_prompt": "هل أنت متأكد أنك تريد حذف العلامة {tagName}؟",
|
||||
"delete_user": "حذف المستخدم",
|
||||
"deleted_shared_link": "تم حذف الرابط المشارك",
|
||||
"deletes_missing_assets": "حذف الأصول المفقودة من القرص",
|
||||
"description": "وصف",
|
||||
"details": "تفاصيل",
|
||||
"direction": "الإتجاه",
|
||||
"disabled": "معطل",
|
||||
"disallow_edits": "منع التعديلات",
|
||||
"discord": "Discord",
|
||||
"discover": "اكتشف",
|
||||
"dismiss_all_errors": "تجاهل كافة الأخطاء",
|
||||
"dismiss_error": "تجاهل الخطأ",
|
||||
@@ -524,6 +549,7 @@
|
||||
"display_original_photos": "عرض الصور الأصلية",
|
||||
"display_original_photos_setting_description": "فضل عرض الصورة الأصلية عند عرض المحتويات بدلاً من الصور المصغرة عندما يكون المحتوى الأصلي متوافقًا مع الويب. قد يؤدي ذلك إلى بطءٍ في سرعات عرض الصور.",
|
||||
"do_not_show_again": "لا تُظهر هذه الرسالة مرة آخرى",
|
||||
"documentation": "الوثائق",
|
||||
"done": "تم",
|
||||
"download": "تنزيل",
|
||||
"download_include_embedded_motion_videos": "مقاطع الفيديو المدمجة",
|
||||
@@ -655,6 +681,7 @@
|
||||
"unable_to_get_comments_number": "غير قادر على الحصول على عدد التعليقات",
|
||||
"unable_to_get_shared_link": "فشل الحصول على الرابط المشترك",
|
||||
"unable_to_hide_person": "غير قادر على إخفاء الشخص",
|
||||
"unable_to_link_motion_video": "غير قادر على ربط فيديو الحركة",
|
||||
"unable_to_link_oauth_account": "غير قادر على ربط حساب OAuth",
|
||||
"unable_to_load_album": "غير قادر على تحميل الألبوم",
|
||||
"unable_to_load_asset_activity": "غير قادر على تحميل نشاط المحتويات",
|
||||
@@ -695,6 +722,7 @@
|
||||
"unable_to_submit_job": "غير قادر على تقديم الوظيفة",
|
||||
"unable_to_trash_asset": "غير قادر على نقل المحتويات إلى سلة المهملات",
|
||||
"unable_to_unlink_account": "غير قادر على إلغاء ربط الحساب",
|
||||
"unable_to_unlink_motion_video": "غير قادر على إلغاء ربط فيديو الحركة",
|
||||
"unable_to_update_album_cover": "غير قادر على تحديث غلاف الألبوم",
|
||||
"unable_to_update_album_info": "غير قادر على تحديث معلومات الألبوم",
|
||||
"unable_to_update_library": "غير قادر على تحديث المكتبة",
|
||||
@@ -840,6 +868,7 @@
|
||||
"license_trial_info_4": "يُرجى التفكير في شراء رخصة لدعم التطوير المستمر للخدمة",
|
||||
"light": "المضيئ",
|
||||
"like_deleted": "تم حذف الإعجاب",
|
||||
"link_motion_video": "رابط فيديو الحركة",
|
||||
"link_options": "خيارات الرابط",
|
||||
"link_to_oauth": "الربط مع OAuth",
|
||||
"linked_oauth_account": "حساب مرتبط بـ OAuth",
|
||||
@@ -927,6 +956,7 @@
|
||||
"notifications": "إشعارات",
|
||||
"notifications_setting_description": "إدارة الإشعارات",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "الموارد الرسمية لشركة Immich",
|
||||
"offline": "غير متصل",
|
||||
"offline_paths": "مسارات غير متصلة",
|
||||
"offline_paths_description": "قد تكون هذه النتائج بسبب الحذف اليدوي للملفات التي لا تشكل جزءًا من مكتبة خارجية.",
|
||||
@@ -1060,11 +1090,13 @@
|
||||
"recent_searches": "عمليات البحث الأخيرة",
|
||||
"refresh": "تحديث",
|
||||
"refresh_encoded_videos": "تحديث مقاطع الفيديو المشفرة",
|
||||
"refresh_faces": "تحديث الوجوه",
|
||||
"refresh_metadata": "تحديث البيانات الوصفية",
|
||||
"refresh_thumbnails": "تحديث الصور المصغرة",
|
||||
"refreshed": "تم التحديث",
|
||||
"refreshes_every_file": "تحديث جميع الملفات",
|
||||
"refreshes_every_file": "إعادة قراءة كافة الملفات الموجودة والجديدة",
|
||||
"refreshing_encoded_video": "جارٍ تحديث الفيديو المرمز",
|
||||
"refreshing_faces": "جاري تحديث الوجوه",
|
||||
"refreshing_metadata": "جارٍ تحديث البيانات الوصفية",
|
||||
"regenerating_thumbnails": "جارٍ تجديد الصور المصغرة",
|
||||
"remove": "إزالة",
|
||||
@@ -1113,6 +1145,7 @@
|
||||
"say_something": "قل شيئًا",
|
||||
"scan_all_libraries": "فحص كل المكتبات",
|
||||
"scan_all_library_files": "إعادة فحص كافة ملفات المكتبة",
|
||||
"scan_library": "مسح",
|
||||
"scan_new_library_files": "فحص ملفات المكتبة الجديدة",
|
||||
"scan_settings": "إعدادات الفحص",
|
||||
"scanning_for_album": "جارٍ الفحص عن ألبوم...",
|
||||
@@ -1128,8 +1161,10 @@
|
||||
"search_for_existing_person": "البحث عن شخص موجود",
|
||||
"search_no_people": "لا يوجد أشخاص",
|
||||
"search_no_people_named": "لا يوجد أشخاص بالاسم \"{name}\"",
|
||||
"search_options": "خيارات البحث",
|
||||
"search_people": "البحث عن الأشخاص",
|
||||
"search_places": "البحث عن الأماكن",
|
||||
"search_settings": "إعدادات البحث",
|
||||
"search_state": "البحث حسب الولاية...",
|
||||
"search_tags": "البحث عن العلامات...",
|
||||
"search_timezone": "البحث حسب المنطقة الزمنية...",
|
||||
@@ -1173,6 +1208,7 @@
|
||||
"shared_by_user": "تمت المشاركة بواسطة {user}",
|
||||
"shared_by_you": "تمت مشاركته من قِبلك",
|
||||
"shared_from_partner": "صور من {partner}",
|
||||
"shared_link_options": "خيارات الرابط المشترك",
|
||||
"shared_links": "روابط مشتركة",
|
||||
"shared_photos_and_videos_count": "{assetCount, plural, other {# الصور ومقاطع الفيديو المُشارَكة.}}",
|
||||
"shared_with_partner": "تمت المشاركة مع {partner}",
|
||||
@@ -1196,13 +1232,18 @@
|
||||
"show_person_options": "إظهار خيارات الشخص",
|
||||
"show_progress_bar": "إظهار شريط التقدم",
|
||||
"show_search_options": "إظهار خيارات البحث",
|
||||
"show_slideshow_transition": "إظهار انتقال عرض الشرائح",
|
||||
"show_supporter_badge": "شارة المؤيد",
|
||||
"show_supporter_badge_description": "إظهار شارة المؤيد",
|
||||
"shuffle": "خلط",
|
||||
"sidebar": "الشريط الجانبي",
|
||||
"sidebar_display_description": "عرض رابط للعرض في الشريط الجانبي",
|
||||
"sign_out": "خروج",
|
||||
"sign_up": "تسجيل",
|
||||
"size": "الحجم",
|
||||
"skip_to_content": "تخطي إلى المحتوى",
|
||||
"skip_to_folders": "تخطي إلى المجلدات",
|
||||
"skip_to_tags": "تخطي إلى العلامات",
|
||||
"slideshow": "عرض الشرائح",
|
||||
"slideshow_settings": "إعدادات عرض الشرائح",
|
||||
"sort_albums_by": "رتب الألبومات حسب...",
|
||||
@@ -1233,22 +1274,35 @@
|
||||
"submit": "إرسال",
|
||||
"suggestions": "اقتراحات",
|
||||
"sunrise_on_the_beach": "شروق الشمس على الشاطئ",
|
||||
"support": "الدعم",
|
||||
"support_and_feedback": "الدعم والتعليقات",
|
||||
"support_third_party_description": "تم حزم تثبيت immich الخاص بك بواسطة جهة خارجية. قد تكون المشكلات التي تواجهها ناجمة عن هذه الحزمة، لذا يرجى طرح المشكلات معهم في المقام الأول باستخدام الروابط أدناه.",
|
||||
"swap_merge_direction": "تبديل اتجاه الدمج",
|
||||
"sync": "مزامنة",
|
||||
"tag": "العلامة",
|
||||
"tag_assets": "أصول العلامة",
|
||||
"tag_created": "تم إنشاء العلامة: {tag}",
|
||||
"tag_feature_description": "تصفح الصور ومقاطع الفيديو المجمعة حسب مواضيع العلامات المنطقية",
|
||||
"tag_not_found_question": "لا يمكن العثور على علامة؟ <link>قم بإنشاء علامة جديدة.</link>",
|
||||
"tag_updated": "تم تحديث العلامة: {tag}",
|
||||
"tagged_assets": "تم وضع علامة {count, plural, one {# asset} other {# assets}}",
|
||||
"tags": "العلامات",
|
||||
"template": "النموذج",
|
||||
"theme": "مظهر",
|
||||
"theme_selection": "اختيار السمة",
|
||||
"theme_selection_description": "قم بتعيين السمة تلقائيًا على اللون الفاتح أو الداكن بناءً على تفضيلات نظام المتصفح الخاص بك",
|
||||
"they_will_be_merged_together": "سيتم دمجهم معًا",
|
||||
"third_party_resources": "موارد الطرف الثالث",
|
||||
"time_based_memories": "ذكريات استنادًا للوقت",
|
||||
"timezone": "المنطقة الزمنية",
|
||||
"to_archive": "أرشفة",
|
||||
"to_change_password": "تغيير كلمة المرور",
|
||||
"to_favorite": "تفضيل",
|
||||
"to_login": "تسجيل الدخول",
|
||||
"to_parent": "انتقل إلى الوالد",
|
||||
"to_trash": "حذف",
|
||||
"toggle_settings": "الإعدادات",
|
||||
"toggle_theme": "تبديل السمة",
|
||||
"toggle_theme": "تبديل المظهر الداكن",
|
||||
"toggle_visibility": "تبديل الرؤية",
|
||||
"total_usage": "الاستخدام الإجمالي",
|
||||
"trash": "المهملات",
|
||||
@@ -1267,6 +1321,7 @@
|
||||
"unknown_album": "",
|
||||
"unknown_year": "سنة غير معروفة",
|
||||
"unlimited": "غير محدود",
|
||||
"unlink_motion_video": "إلغاء ربط فيديو الحركة",
|
||||
"unlink_oauth": "إلغاء ربط OAuth",
|
||||
"unlinked_oauth_account": "تم إلغاء ربط حساب OAuth",
|
||||
"unnamed_album": "ألبوم بلا إسم",
|
||||
@@ -1310,6 +1365,8 @@
|
||||
"version": "الإصدار",
|
||||
"version_announcement_closing": "صديقك، أليكس",
|
||||
"version_announcement_message": "مرحباً يا صديقي، هنالك نسخة جديدة من التطبيق. خذ وقتك لزيارة <link>ملاحظات الإصدار</link> والتأكد من أن ملف <code>docker-compose.yml</code> وإعداد <code>.env</code> مُحدّثين لتجنب أي إعدادات خاطئة، خاصةً إذا كنت تستخدم WatchTower أو أي آلية تقوم بتحديث التطبيق تلقائياً.",
|
||||
"version_history": "تاريخ الإصدار",
|
||||
"version_history_item": "تم تثبيت {version} في {date}",
|
||||
"video": "فيديو",
|
||||
"video_hover_setting": "تشغيل الصورة المصغرة للفيديو عند التمرير",
|
||||
"video_hover_setting_description": "تشغيل الصورة المصغرة للفيديو عند تحريك الماوس فوق العنصر. حتى عند التعطيل، يمكن بدء التشغيل عن طريق التمرير فوق رمز التشغيل.",
|
||||
@@ -1319,6 +1376,7 @@
|
||||
"view_album": "عرض الألبوم",
|
||||
"view_all": "عرض الكل",
|
||||
"view_all_users": "عرض كافة المستخدمين",
|
||||
"view_in_timeline": "عرض في الجدول الزمني",
|
||||
"view_links": "عرض الروابط",
|
||||
"view_next_asset": "عرض المحتوى التالي",
|
||||
"view_previous_asset": "عرض المحتوى السابق",
|
||||
86
i18n/az.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"about": "Haqqında",
|
||||
"account": "Hesab",
|
||||
"account_settings": "Hesab parametrləri",
|
||||
"acknowledge": "Təsdiq et",
|
||||
"active": "Aktiv",
|
||||
"activity": "Fəaliyyət",
|
||||
"add": "Əlavə et",
|
||||
"add_a_description": "Təsviri əlavə et",
|
||||
"add_a_location": "Məkan əlavə et",
|
||||
"add_a_name": "Ad əlavə et",
|
||||
"add_a_title": "Başlıq əlavə et",
|
||||
"add_location": "Məkanı əlavə et",
|
||||
"add_more_users": "Daha çox istifadəçi əlavə et",
|
||||
"add_partner": "Partnyor əlavə et",
|
||||
"add_photos": "Şəkilləri əlavə et",
|
||||
"add_to": "... əlavə et",
|
||||
"add_to_album": "Albom əlavə et",
|
||||
"add_to_shared_album": "Paylaşılan alboma əlavə et",
|
||||
"added_to_archive": "Arxivə əlavə edildi",
|
||||
"added_to_favorites": "Sevimlilələrə əlavə edildi",
|
||||
"added_to_favorites_count": "{count, number} şəkil sevimlilələrə əlavə edildi",
|
||||
"admin": {
|
||||
"authentication_settings": "Səlahiyyətləndirmə parametrləri",
|
||||
"authentication_settings_description": "Şifrə, OAuth və digər səlahiyyətləndirmə parametrləri",
|
||||
"authentication_settings_disable_all": "Bütün giriş etmə metodlarını söndürmək istədiyinizdən əminsinizmi? Giriş etmə funksiyası tamamilə söndürüləcəkdir.",
|
||||
"authentication_settings_reenable": "Yenidən aktiv etmək üçün <link> Server Əmri</link> -ni istifadə edin.",
|
||||
"background_task_job": "Arxa plan tapşırıqları",
|
||||
"check_all": "Hamısını yoxla",
|
||||
"confirm_delete_library": "{library} kitabxanasını silmək istədiyinizdən əminmisiniz?",
|
||||
"confirm_email_below": "Təsdiqləmək üçün aşağıya {email} yazın",
|
||||
"confirm_user_password_reset": "{user} adlı istifadəçinin şifrəsini sıfırlamaq istədiyinizdən əminmisiniz?",
|
||||
"disable_login": "Giriş etməni söndür",
|
||||
"duplicate_detection_job_description": "Bənzər şəkilləri tapmaq üçün maşın öyrənməsini işə salın. Bu prosses Smart Search funksiyasına əsaslanır",
|
||||
"external_library_created_at": "Xarici kitabxana ({date} (tarixində yaradıldı)",
|
||||
"external_library_management": "Xarici kitabxana idarəetməsi",
|
||||
"face_detection": "Üz tanıma",
|
||||
"force_delete_user_warning": "XƏBƏRDARLIQ: Bu əməliyyat istifadəçi və bütün məlumatları siləcəkdir. Bu prossesi və silinən faylları geri qaytarmaq olmaz.",
|
||||
"forcing_refresh_library_files": "Bütün kitabxana fayllarını məcburi yeniləmə",
|
||||
"image_format_description": "WebP, JPEG faylına görə daha kiçik həcmə sahibdir, lakin onu kodlaşdırmaq daha çox vaxt alır.",
|
||||
"image_preview_title": "Önizləmə parametrləri",
|
||||
"image_quality": "Keyfiyyət",
|
||||
"image_resolution": "Çözümlülük",
|
||||
"image_resolution_description": "Yüksək çözümlülükdə daha çox detallar vardır, lakin onları kodlaşdırmaq da daha çox vaxt alır, daha böyük həcmə sahib olurlar və tətbiqin işləmə sürətini yavaşladır.",
|
||||
"image_settings": "Şəklin parametrləri",
|
||||
"image_settings_description": "Hazırlanan şəkillərin keyfiyyətini və çözümlülüyünü idarə et",
|
||||
"image_thumbnail_title": "Önizləmə parametrləri",
|
||||
"job_concurrency": "{job}paralellik",
|
||||
"job_created": "Tapşırıq yaradıldı",
|
||||
"job_not_concurrency_safe": "Bu tapşırıq parallel fəaliyyət üçün uyğun deyil",
|
||||
"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_status": "Tapşırıq statusu",
|
||||
"jobs_delayed": "{jobCount, plural, other {# gecikməli}}",
|
||||
"jobs_failed": "{jobCount, plural, other {# uğursuz}}",
|
||||
"library_created": "{library} kitabxanası yaradıldı",
|
||||
"library_cron_expression": "Kron zamanlaması",
|
||||
"library_cron_expression_description": "Kron zamanlama formatından istifadə edərək skan intervalının təyin edin. Daha çox məlumat üçün <link>Crontab Guru</link>",
|
||||
"library_cron_expression_presets": "Kron zamanlamasının ilkin parametrləri",
|
||||
"library_deleted": "Kitabxana silindi",
|
||||
"library_import_path_description": "İdxal olunacaq qovluöu seçin. Bu qovluq, alt qovluqlar daxil olmaqla şəkil və videolar üçün skan ediləcəkdir.",
|
||||
"library_scanning": "Periodik skan",
|
||||
"library_scanning_description": "Periodik kitabxana skanını confiqurasiya et",
|
||||
"library_scanning_enable_description": "Periodik kitabxana skanını aktivləşdir",
|
||||
"library_settings": "Xarici kitabxana",
|
||||
"library_settings_description": "Xarici kitabxana parametrlərini idarə et",
|
||||
"library_tasks_description": "Kitabxana tapşırıqlarını yerinə yetir",
|
||||
"library_watching_enable_description": "Fayl dəyişiklikləri üçün xarici kitabxanalara baxış keçirin",
|
||||
"library_watching_settings": "Kitabxana nəzarəti (EKSPERİMENTAL)",
|
||||
"library_watching_settings_description": "Dəyişdirilən faylları avtomatik olaraq yoxla",
|
||||
"logging_enable_description": "Jurnalı aktivləşdir",
|
||||
"logging_level_description": "Aktiv edildikdə hansı jurnal səviyyəsi istifadə olunur.",
|
||||
"logging_settings": "",
|
||||
"machine_learning_clip_model": "CLIP modeli",
|
||||
"machine_learning_clip_model_description": "<link>Burada</link>qeyd olunan CLIP modelinin adı. Modeli dəyişdirdikdən sonra bütün şəkillər üçün 'Ağıllı Axtarış' funksiyasını yenidən işə salmalısınız.",
|
||||
"machine_learning_duplicate_detection": "Dublikat Aşkarlama",
|
||||
"machine_learning_duplicate_detection_enabled": "Dublikat aşkarlamanı aktiv etmək",
|
||||
"machine_learning_duplicate_detection_enabled_description": "Əgər deaktiv edilibsə, birə-bir eyni fayllar yenədə silinəcək.",
|
||||
"machine_learning_duplicate_detection_setting_description": "Bir-birinin dublikatı olan faylları tapmaq üçün CLIP-dən istifadə edin",
|
||||
"machine_learning_enabled": "Maşın öyrənməsini aktiv edin",
|
||||
"machine_learning_enabled_description": "Əgər deaktiv edilərsə, aşağıdakı parametrlərdən asılı olmayaq, bütün Maşın Öyrənmə funksiyaları deaktiv ediləcək.",
|
||||
"machine_learning_facial_recognition": "Üz Tanıma",
|
||||
"machine_learning_facial_recognition_description": "Şəkillərdəki üzləri aşkarla, tanı və qruplaşdır",
|
||||
"machine_learning_facial_recognition_model": "Üz tanıma modeli"
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "Добавени {count, number} към любими",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Добави модели за изключване. Поддържа се \"globbing\" с помощта на *, ** и ?. За да игнорирате всички файлове в директория с име \"Raw\", използвайте \"**/Raw/**\". За да игнорирате всички файлове, завършващи на \".tif\", използвайте \"**/*.tif\". За да игнорирате абсолютен път, използвайте \"/path/to/ignore/**\".",
|
||||
"asset_offline_description": "Този външен библиотечен елемент не може да бъде открит на диска и е преместен в кошчето за боклук. Ако файлът е преместен в библиотеката, проверете вашата история за нов съответстващ елемент. За да възстановите елемента, моля проверете дали файловият път отдолу може да бъде достъпен от Immich и сканирайте библиотеката.",
|
||||
"authentication_settings": "Настройки за удостоверяване",
|
||||
"authentication_settings_description": "Управление на парола, OAuth и други настройки за удостоверяване",
|
||||
"authentication_settings_disable_all": "Сигурни ли сте, че искате да деактивирате всички методи за вписване? Вписването ще бъде напълно деактивирано.",
|
||||
@@ -41,6 +42,7 @@
|
||||
"confirm_email_below": "За потвърждение, моля въведете \"{email}\" отдолу",
|
||||
"confirm_reprocess_all_faces": "Сигурни ли сте, че искате да се обработят лицата отново? Това ще изчисти всички именувани хора.",
|
||||
"confirm_user_password_reset": "Сигурни ли сте, че искате да нулирате паролата на {user}?",
|
||||
"create_job": "Създайте задача",
|
||||
"disable_login": "Изключете вписването",
|
||||
"duplicate_detection_job_description": "Стартиране машинно обучение на ресурси, за откриване на подобни изображения. Разчита на Интелигентно Търсене",
|
||||
"exclusion_pattern_description": "Модели за изключване позволяват да игнорирате файлове и папки, когато сканирате вашата библиотека. Това е потребно, ако имате папки, които съдържат файлове, които не искате да импортирате. Примерно - RAW файлове.",
|
||||
@@ -68,6 +70,7 @@
|
||||
"image_thumbnail_resolution": "Резолюция на миниатюрните изображения",
|
||||
"image_thumbnail_resolution_description": "Използва се при разглеждане на групи от снимки (основна времева линия, изглед на албум и др.). По-високите резолюции могат да запазят повече детайли, но отнемат повече време за кодиране, имат по-големи размери на файловете и могат да намалят отзивчивостта на приложението.",
|
||||
"job_concurrency": "Паралелност на {job}",
|
||||
"job_created": "Задачата е създадена",
|
||||
"job_not_concurrency_safe": "Тази задача не е безопасна за паралелно изпълнение.",
|
||||
"job_settings": "Настройки за задачите",
|
||||
"job_settings_description": "Управление на паралелността на задачите",
|
||||
@@ -207,8 +210,10 @@
|
||||
"require_password_change_on_login": "Изискване за промяна паролата при първо влизане",
|
||||
"reset_settings_to_default": "Възстановяване на настройките по подразбиране",
|
||||
"reset_settings_to_recent_saved": "Възстановяване на настройките до последните запазени настройки",
|
||||
"scanning_library": "Сканиране на библиотеката",
|
||||
"scanning_library_for_changed_files": "Сканиране на библиотеката за променени файлове",
|
||||
"scanning_library_for_new_files": "Сканиране на библиотеката за нови файлове",
|
||||
"search_jobs": "Търсене на задачи...",
|
||||
"send_welcome_email": "Изпращане на имейл за добре дошли",
|
||||
"server_external_domain_settings": "Външен домейн",
|
||||
"server_external_domain_settings_description": "Домейн за публични споделени връзки, включително http(s)://",
|
||||
@@ -230,7 +235,7 @@
|
||||
"storage_template_migration_info": "Промените в шаблоните ще се прилагат само за нови ресурси. За да приложите шаблона със задна дата към предварително качени активи, изпълнете <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Задача за миграция на шаблона за съхранение",
|
||||
"storage_template_more_details": "За повече подробности относно тази функция се обърнете към шаблона <template-link>Storage Template</template-link> и неговите <implications-link> последствия </implications-link>",
|
||||
"storage_template_onboarding_description": "Когато е активирана, тази функция ще организира автоматично файлове въз основа на дефиниран от потребителя шаблон. Поради проблеми със стабилността функцията е изключена по подразбиране. За повече информация, моля, вижте <link>документацията</link>.",
|
||||
"storage_template_onboarding_description": "Когато е активирана, тази функция ще организира автоматично файлове въз основа на дефиниран от потребителя шаблон. Поради проблеми със стабилността, функцията е изключена по подразбиране. За повече информация, моля, вижте <link>документацията</link>.",
|
||||
"storage_template_path_length": "Ограничение на дължината на пътя: <b>{length, number}</b>/{limit, number}",
|
||||
"storage_template_settings": "Шаблон за съхранение",
|
||||
"storage_template_settings_description": "Управление на структурата на папките и името на файла за качване",
|
||||
@@ -1120,7 +1125,7 @@
|
||||
"video_hover_setting": "Възпроизвеждане на видеоклип при посочване с мишката",
|
||||
"video_hover_setting_description": "Възпроизвеждане на видеоклипа, когато мишката се движи над елемента. Дори когато е деактивирано, възпроизвеждането може да бъде стартирано чрез задържане на курсора на мишката върху иконата за възпроизвеждане.",
|
||||
"videos": "Видеоклипове",
|
||||
"videos_count": "",
|
||||
"videos_count": "{count, plural, one {# Видео} other {# Видеа}}",
|
||||
"view": "Преглед",
|
||||
"view_album": "Разгледай албума",
|
||||
"view_all": "Преглед на всички",
|
||||
@@ -1131,6 +1136,7 @@
|
||||
"view_previous_asset": "Преглед на предишния файл",
|
||||
"view_stack": "Покажи в стек",
|
||||
"viewer": "",
|
||||
"visibility_changed": "Видимостта е променена за {count, plural, one {# person} other {# people}}",
|
||||
"waiting": "в изчакване",
|
||||
"warning": "Внимание",
|
||||
"week": "Седмица",
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "{count, number} afegits als preferits",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Afegeix patrons d'eclusió. És permès de l'ús de *, **, i ? (globbing). Per a ignorar els fitxers de qualsevol directori anomenat \"Raw\" introduïu \"**/Raw/**\". Per a ignorar els fitxers acabats en \".tif\" introduïu \"**/*.tif\". Per a ignorar un camí absolut, utilitzeu \"/camí/a/ignorar/**\".",
|
||||
"asset_offline_description": "Aquest recurs de la biblioteca externa ja no es troba al disc i s'ha mogut a la paperera. Si el fitxer s'ha mogut dins de la biblioteca, comproveu la vostra línia de temps per trobar el nou recurs corresponent. Per restaurar aquest recurs, assegureu-vos que Immich pugui accedir a la ruta del fitxer següent i escanegeu la biblioteca.",
|
||||
"authentication_settings": "Configuració de l'autenticació",
|
||||
"authentication_settings_description": "Gestiona la contrasenya, OAuth i altres configuracions de l'autenticació",
|
||||
"authentication_settings_disable_all": "Estàs segur que vols desactivar tots els mètodes d'inici de sessió? L'inici de sessió quedarà completament desactivat.",
|
||||
@@ -50,26 +51,35 @@
|
||||
"external_library_created_at": "Llibreria externa (creada el {date})",
|
||||
"external_library_management": "Gestió de llibreries externes",
|
||||
"face_detection": "Detecció de cares",
|
||||
"face_detection_description": "Detecta les cares fent servir aprenentatge automàtic. Per a videos només és té en compte la miniatura. \"Tot\" reprocessa tots els elements. \"Pendent\" encua els elements que encar no han estat processats. Les cares detectades s'encuaran per al Reconeixement Facial després de completar la Detecció Facial, tot agrupant-les entre noves persones o les ja existents.",
|
||||
"facial_recognition_job_description": "Agrupa les cares detectades per persona. Aquest pas s'executa després de completar la detecció de cares. \"Tot\" reagrupa totes les cares. \"Pendent\" encua les cares que no tenen cap persona assignada.",
|
||||
"face_detection_description": "Detecta les cares fent servir aprenentatge automàtic. Per a videos només és té en compte la miniatura. \"Actualitzar\" reprocessa tots els elements. \"Resetejar\" esborra tota la informació de cares actuals. \"Pendent\" afegeix a la cua els elements que encara no han estat processats. Les cares detectades s'afegiran a la cua per al Reconeixement Facial després de completar la Detecció Facial, tot agrupant-les entre noves persones o les ja existents.",
|
||||
"facial_recognition_job_description": "Agrupa les cares detectades per persona. Aquest pas s'executa després de completar la detecció de cares. \"Resetejar\" reagrupa totes les cares. \"Pendent\" afegeix a la cua les cares que no tenen cap persona assignada.",
|
||||
"failed_job_command": "La comanda {command} ha fallat per la tasca: {job}",
|
||||
"force_delete_user_warning": "COMPTE: Aquesta acció eliminara immediatament l'usuari i els seus elements. Aquesta acció és irreversible i els fitxers no es poden recuperar.",
|
||||
"forcing_refresh_library_files": "Força l'actualització de tots els fitxers de les biblioteques",
|
||||
"image_format": "Format",
|
||||
"image_format_description": "WebP genera fitxers més petits que JPEG, però codifica més lentament.",
|
||||
"image_prefer_embedded_preview": "Prefereix vista prèvia incrustada",
|
||||
"image_prefer_embedded_preview_setting_description": "Empra vista prèvia incrustada en les fotografies RAW com a entrada per al processament d'imatge, quan sigui possible. Aquesta acció pot produir colors més acurats en algunes imatges, però la qualitat de la vista prèvia depèn de la càmera i la imatge pot tenir més artefactes de compressió.",
|
||||
"image_prefer_wide_gamut": "Prefereix àmplia gamma",
|
||||
"image_prefer_wide_gamut_setting_description": "Uitlitza Display P3 per a les miniatures. Això preserva més bé la vitalitat de les imatges amb espais de color àmplis, però les imatges es poden veure diferent en aparells antics amb una versió antiga del navegador. Les imatges sRGB romandran com a sRGB per a evitar canvis de color.",
|
||||
"image_preview_description": "Imatge de mida mitjana amb metadades eliminades, que s'utilitza quan es visualitza un sol recurs i per a l'aprenentatge automàtic",
|
||||
"image_preview_format": "Format de previsualització",
|
||||
"image_preview_quality_description": "Vista prèvia de la qualitat de l'1 al 100. Més alt és millor, però produeix fitxers més grans i pot reduir la capacitat de resposta de l'aplicació. Establir un valor baix pot afectar la qualitat de l'aprenentatge automàtic.",
|
||||
"image_preview_resolution": "Resolució de previsualització",
|
||||
"image_preview_resolution_description": "S'empra al visualitzar una única fotografia i per a l'Aprenentatge Automàtic. L'alta resolució por preservar més detalls però es triga més a codificar, té fitxers més pesats i pot reduir la resposta de l'aplicació.",
|
||||
"image_preview_title": "Paràmetres de previsualització",
|
||||
"image_quality": "Qualitat",
|
||||
"image_quality_description": "Qualitat d'imatge de 1 a 100. Un valor més alt millora la qualitat però genera fitxers més pesats.",
|
||||
"image_resolution": "Resolució",
|
||||
"image_resolution_description": "Les resolucions més altes poden conservar més detalls però triguen més a codificar-se, tenen mides de fitxer més grans i poden reduir la capacitat de resposta de l'aplicació.",
|
||||
"image_settings": "Configuració d'imatges",
|
||||
"image_settings_description": "Gestiona la qualitat i resolució de les imatges generades",
|
||||
"image_thumbnail_description": "Miniatura petita amb metadades eliminades, que s'utilitza quan es visualitzen grups de fotos com la línia de temps principal",
|
||||
"image_thumbnail_format": "Format de la miniatura",
|
||||
"image_thumbnail_quality_description": "Qualitat de miniatura d'1 a 100. Més alt és millor, però produeix fitxers més grans i pot reduir la capacitat de resposta de l'aplicació.",
|
||||
"image_thumbnail_resolution": "Resolució de la miniatura",
|
||||
"image_thumbnail_resolution_description": "S'empra per a veure grups de fotos (cronologia, vista d'àlbum, etc.). L'alta resolució pot preservar més detalls però triguen més en codificar-se, tenen fitxers més pesats i poden reduir la reactivitat de l'aplicació.",
|
||||
"image_thumbnail_title": "Configuració de miniatures",
|
||||
"job_concurrency": "{job} concurrència",
|
||||
"job_created": "Tasca creada",
|
||||
"job_not_concurrency_safe": "Aquesta tasca no és segura per a la conconcurrència.",
|
||||
@@ -212,6 +222,7 @@
|
||||
"require_password_change_on_login": "Requerir que l'usuari canviï la contrasenya en el primer inici de sessió",
|
||||
"reset_settings_to_default": "Restablir configuracions per defecte",
|
||||
"reset_settings_to_recent_saved": "Restablir la configuració guardada més recent",
|
||||
"scanning_library": "Escanejant biblioteca",
|
||||
"scanning_library_for_changed_files": "Escanejant llibreria per trobar fitxers modificats",
|
||||
"scanning_library_for_new_files": "Escanejant llibreria per trobar fitxers nous",
|
||||
"search_jobs": "Tasques de cerca...",
|
||||
@@ -276,7 +287,7 @@
|
||||
"transcoding_hardware_acceleration": "Acceleració de maquinari",
|
||||
"transcoding_hardware_acceleration_description": "Experimental. Molt més ràpid, però tindrà una qualitat més baixa amb la mateixa taxa de bits",
|
||||
"transcoding_hardware_decoding": "Descodificació de maquinari",
|
||||
"transcoding_hardware_decoding_setting_description": "S'aplica només a NVENC, QSV i RKMPP. Permet l'acceleració d'extrem a extrem en lloc d'accelerar només la codificació. És possible que no funcioni en tots els vídeos.",
|
||||
"transcoding_hardware_decoding_setting_description": "Habilita l'acceleració d'extrem a extrem en lloc d'accelerar només la codificació. És possible que no funcioni en tots els vídeos.",
|
||||
"transcoding_hevc_codec": "Còdec HEVC",
|
||||
"transcoding_max_b_frames": "Nombre màxim de B-frames",
|
||||
"transcoding_max_b_frames_description": "Els valors més alts milloren l'eficiència de la compressió, però alenteixen la codificació. És possible que no sigui compatible amb l'acceleració de maquinari en dispositius antics. 0 desactiva els B-frames, mentre que -1 estableix aquest valor automàticament.",
|
||||
@@ -395,7 +406,7 @@
|
||||
"asset_has_unassigned_faces": "L'element té cares no assignades",
|
||||
"asset_hashing": "Hashing...",
|
||||
"asset_offline": "Element fora de línia",
|
||||
"asset_offline_description": "Aquest element està fora de línia. L'Immich no pot accedir a la seva ubicació. Si us plau, assegureu-vos que l'actiu està disponible i després torneu la llibreria.",
|
||||
"asset_offline_description": "Aquest recurs extern ja no es troba al disc. Poseu-vos en contacte amb el vostre administrador d'Immich per obtenir ajuda.",
|
||||
"asset_skipped": "Saltat",
|
||||
"asset_skipped_in_trash": "A la paperera",
|
||||
"asset_uploaded": "Carregat",
|
||||
@@ -408,7 +419,7 @@
|
||||
"assets_moved_to_trash_count": "{count, plural, one {# recurs mogut} other {# recursos moguts}} a la paperera",
|
||||
"assets_permanently_deleted_count": "{count, plural, one {# recurs esborrat} other {# recursos esborrats}} permanentment",
|
||||
"assets_removed_count": "{count, plural, one {# element eliminat} other {# elements eliminats}}",
|
||||
"assets_restore_confirmation": "Esteu segurs que voleu restaurar tots els teus actius? Aquesta acció no es pot desfer!",
|
||||
"assets_restore_confirmation": "Esteu segurs que voleu restaurar tots els teus actius? Aquesta acció no es pot desfer! Tingueu en compte que els recursos fora de línia no es poden restaurar d'aquesta manera.",
|
||||
"assets_restored_count": "{count, plural, one {# element restaurat} other {# elements restaurats}}",
|
||||
"assets_trashed_count": "{count, plural, one {# element enviat} other {# elements enviats}} a la paperera",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {L'element ja és} other {Els elements ja són}} part de l'àlbum",
|
||||
@@ -419,6 +430,7 @@
|
||||
"birthdate_saved": "Data de naixement guardada amb èxit",
|
||||
"birthdate_set_description": "La data de naixement s'utilitza per calcular l'edat d'aquesta persona en el moment d'una foto.",
|
||||
"blurred_background": "Fons difuminat",
|
||||
"bugs_and_feature_requests": "Errors i sol·licituds de funcions",
|
||||
"build": "Construeix",
|
||||
"build_image": "Construeix la imatge",
|
||||
"bulk_delete_duplicates_confirmation": "Esteu segur que voleu suprimir de manera massiva {count, plural, one {# recurs duplicat} other {# recursos duplicats}}? Això mantindrà el recurs més gran de cada grup i esborrarà permanentment tots els altres duplicats. No podeu desfer aquesta acció!",
|
||||
@@ -515,18 +527,20 @@
|
||||
"delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?",
|
||||
"delete_duplicates_confirmation": "Esteu segurs que voleu eliminar aquests duplicats permanentment?",
|
||||
"delete_key": "Suprimeix la clau",
|
||||
"delete_library": "Suprimeix la llibreria",
|
||||
"delete_library": "Suprimeix la Llibreria",
|
||||
"delete_link": "Esborra l'enllaç",
|
||||
"delete_shared_link": "Odstranit sdílený odkaz",
|
||||
"delete_tag": "Eliminar etiqueta",
|
||||
"delete_tag_confirmation_prompt": "Estàs segur que vols eliminar l'etiqueta {tagName}?",
|
||||
"delete_user": "Suprimeix l'usuari",
|
||||
"deleted_shared_link": "Suprimeix l'enllaç compartit",
|
||||
"deletes_missing_assets": "Elimina els actius que falten del disc",
|
||||
"description": "Descripció",
|
||||
"details": "Detalls",
|
||||
"direction": "Direcció",
|
||||
"disabled": "Desactivat",
|
||||
"disallow_edits": "No permetre les edicions",
|
||||
"discord": "Discord",
|
||||
"discover": "Descobreix",
|
||||
"dismiss_all_errors": "Descarta tots els errors",
|
||||
"dismiss_error": "Descarta l'error",
|
||||
@@ -535,6 +549,7 @@
|
||||
"display_original_photos": "Mostra les fotografies originals",
|
||||
"display_original_photos_setting_description": "Preferiu mostrar la foto original quan visualitzeu un recurs en lloc de miniatures quan el recurs original és compatible amb el web. Això pot provocar una velocitat de visualització de fotos més lenta.",
|
||||
"do_not_show_again": "No tornis a mostrar aquest missatge",
|
||||
"documentation": "Documentació",
|
||||
"done": "Fet",
|
||||
"download": "Descarregar",
|
||||
"download_include_embedded_motion_videos": "Vídeos incrustats",
|
||||
@@ -857,8 +872,9 @@
|
||||
"look": "Aspecte",
|
||||
"loop_videos": "Vídeos en bucle",
|
||||
"loop_videos_description": "Habilita la reproducció en bucle del vídeo en els detalls.",
|
||||
"main_branch_warning": "Esteu usant una versió de desenvolupaent. Recomanem fer servir una versió publicada!",
|
||||
"make": "Fabricant",
|
||||
"manage_shared_links": "Spravovat sdílené odkazy",
|
||||
"manage_shared_links": "Administrar enllaços compartits",
|
||||
"manage_sharing_with_partners": "Gestiona la compartició amb els companys",
|
||||
"manage_the_app_settings": "Gestioneu la configuració de l'aplicació",
|
||||
"manage_your_account": "Gestiona el teu compte",
|
||||
@@ -926,6 +942,7 @@
|
||||
"notifications": "Notificacions",
|
||||
"notifications_setting_description": "Gestiona les notificacions",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Recursos oficials d'Immich",
|
||||
"offline": "Fora de línia",
|
||||
"offline_paths": "Rutes fora de línia",
|
||||
"offline_paths_description": "Aquests resultats poden ser deguts a la supressió manual de fitxers que no formen part d'una biblioteca externa.",
|
||||
@@ -1059,11 +1076,13 @@
|
||||
"recent_searches": "Cerques recents",
|
||||
"refresh": "Actualitzar",
|
||||
"refresh_encoded_videos": "Actualitza vídeos codificats",
|
||||
"refresh_faces": "Actualitzar cares",
|
||||
"refresh_metadata": "Actualitzar les metadades",
|
||||
"refresh_thumbnails": "Actualitzar la miniatura",
|
||||
"refreshed": "Actualitzat",
|
||||
"refreshes_every_file": "Actualitza tots els fitxers",
|
||||
"refreshes_every_file": "Torna a llegir tots els fitxers existents i nous",
|
||||
"refreshing_encoded_video": "S'està actualitzant el vídeo codificat",
|
||||
"refreshing_faces": "Refrescant cares",
|
||||
"refreshing_metadata": "Actualitzant les metadades",
|
||||
"regenerating_thumbnails": "Regenerant les miniatures",
|
||||
"remove": "Eliminar",
|
||||
@@ -1112,6 +1131,7 @@
|
||||
"say_something": "Digues quelcom",
|
||||
"scan_all_libraries": "Escanejar totes les llibreries",
|
||||
"scan_all_library_files": "Re-escanejar tots els fitxers de la llibreria",
|
||||
"scan_library": "Escaneja",
|
||||
"scan_new_library_files": "Escanejar nous fitxers de la llibreria",
|
||||
"scan_settings": "Configuració d'escaneig",
|
||||
"scanning_for_album": "S'està buscant l'àlbum...",
|
||||
@@ -1198,6 +1218,7 @@
|
||||
"show_person_options": "Mostra opcions de la persona",
|
||||
"show_progress_bar": "Mostra barra de progrés",
|
||||
"show_search_options": "Mostra opcions de cerca",
|
||||
"show_slideshow_transition": "Mostra la transició de la presentació de diapositives",
|
||||
"show_supporter_badge": "Insígnia de contribuent",
|
||||
"show_supporter_badge_description": "Mostra una insígnia de contributor",
|
||||
"shuffle": "Mescla",
|
||||
@@ -1239,13 +1260,16 @@
|
||||
"submit": "Envia",
|
||||
"suggestions": "Suggeriments",
|
||||
"sunrise_on_the_beach": "Albada a la platja",
|
||||
"support": "Suport",
|
||||
"support_and_feedback": "Suport i comentaris",
|
||||
"support_third_party_description": "La vostra instal·lació immich la va empaquetar un tercer. Els problemes que experimenteu poden ser causats per aquest paquet així que, si us plau, plantegeu els poblemes amb ells en primer lloc mitjançant els enllaços següents.",
|
||||
"swap_merge_direction": "Canvia la direcció d'unió",
|
||||
"sync": "Sincronitza",
|
||||
"tag": "Etiqueta",
|
||||
"tag_assets": "Etiquetar actius",
|
||||
"tag_created": "Etiqueta creada: {tag}",
|
||||
"tag_feature_description": "Exploreu fotos i vídeos agrupats per temes d'etiquetes lògiques",
|
||||
"tag_not_found_question": "No trobeu una etiqueta? Creeu-ne una <link>aquí</link>",
|
||||
"tag_not_found_question": "No trobeu una etiqueta? <link>Crear una nova etiqueta</link>",
|
||||
"tag_updated": "Etiqueta actualizada: {tag}",
|
||||
"tagged_assets": "{count, plural, one {#Etiquetat} other {#Etiquetats}} {count, plural, one {# actiu} other {# actius}}",
|
||||
"tags": "Etiquetes",
|
||||
@@ -1254,6 +1278,7 @@
|
||||
"theme_selection": "Selecció de tema",
|
||||
"theme_selection_description": "Activa automàticament el tema fosc o clar en funció de les preferències del sistema del navegador",
|
||||
"they_will_be_merged_together": "Es combinaran",
|
||||
"third_party_resources": "Recursos de tercers",
|
||||
"time_based_memories": "Records basats en el temps",
|
||||
"timezone": "Fus horari",
|
||||
"to_archive": "Arxivar",
|
||||
@@ -1325,6 +1350,8 @@
|
||||
"version": "Versió",
|
||||
"version_announcement_closing": "El teu amic Alex",
|
||||
"version_announcement_message": "Hola amic, hi ha una nova versió de l'aplicació, si us plau, preneu-vos el temps per visitar les <link>release notes</link> i assegureu-vos que el vostre <code>docker-compose.yml</code> i <code>.env</code> estàn actualitzats per evitar qualsevol configuració incorrecta, especialment si utilitzeu WatchTower o qualsevol mecanisme que gestioni l'actualització automàtica de la vostra aplicació.",
|
||||
"version_history": "Historial de versions",
|
||||
"version_history_item": "Instal·lat {version} el {date}",
|
||||
"video": "Vídeo",
|
||||
"video_hover_setting": "Reprodueix la miniatura en passar el ratolí",
|
||||
"video_hover_setting_description": "Reprodueix la miniatura quan el ratolí plana sobre l'element. Fins i tot quan estigui deshabilitat, la reproducció s'iniciarà planant sobre el botó de reproducció.",
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "Přidáno {count, number} do oblíbených",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Přidání vzorů vyloučení. Podporováno je globování pomocí *, ** a ?. Chcete-li ignorovat všechny soubory v jakémkoli adresáři s názvem \"Raw\", použijte \"**/Raw/**\". Chcete-li ignorovat všechny soubory končící na \".tif\", použijte \"**/*.tif\". Chcete-li ignorovat absolutní cestu, použijte příkaz \"/path/to/ignore/**\".",
|
||||
"asset_offline_description": "Tato položka externí knihovny se již na disku nenachází a byla přesunuta do koše. Pokud byl soubor přesunut v rámci knihovny, zkontrolujte časovou osu a vyhledejte nové odpovídající položku. Chcete-li tuto položku obnovit, ujistěte se, že je cesta k níže uvedenému souboru přístupná pomocí aplikace Immich a prohledejte knihovnu.",
|
||||
"authentication_settings": "Přihlašování",
|
||||
"authentication_settings_description": "Správa hesel, OAuth a dalších nastavení ověření",
|
||||
"authentication_settings_disable_all": "Opravdu chcete zakázat všechny metody přihlášení? Přihlašování bude úplně zakázáno.",
|
||||
@@ -50,27 +51,36 @@
|
||||
"external_library_created_at": "Externí knihovna (vytvořena {date})",
|
||||
"external_library_management": "Správa externích knihoven",
|
||||
"face_detection": "Detekce obličejů",
|
||||
"face_detection_description": "Detekce obličejů v obrázcích pomocí strojového učení. U videí se bere v úvahu pouze miniatura. \"Vše\" znovu zpracovává všechny položky. \"Chybějící\" zařadí do fronty položky, které ještě nebyly zpracovány. Zjištěné obličeje budou po dokončení funkce Rozpoznávání obličejů zařazeny do fronty a seskupeny do stávajících nebo nových osob.",
|
||||
"facial_recognition_job_description": "Seskupí nalezené obličeje do osob. Tento krok se spustí po dokončení detekce obličejů. \"Vše\" znovu seskupí všechny obličeje. \"Chybějící\" zpracuje obličeje, které nemají přiřazenou osobu.",
|
||||
"face_detection_description": "Detekce obličejů v obrázcích pomocí strojového učení. U videí se bere v úvahu pouze miniatura. „Obnovit“ znovu zpracuje všechny položky. „Resetovat“ navíc vymaže všechna aktuální data obličejů. „Chybějící“ zařadí do fronty položky, které ještě nebyly zpracovány. Zjištěné obličeje budou po dokončení funkce Rozpoznávání obličejů zařazeny do fronty a seskupeny do stávajících nebo nových osob.",
|
||||
"facial_recognition_job_description": "Seskupí nalezené obličeje do osob. Tento krok se spustí po dokončení detekce obličejů. „Resetovat“ znovu seskupí všechny obličeje. „Chybějící“ zpracuje obličeje, které nemají přiřazenou osobu.",
|
||||
"failed_job_command": "Příkaz {command} se nezdařil pro úlohu: {job}",
|
||||
"force_delete_user_warning": "UPOZORNĚNÍ: Tímto okamžitě odstraníte uživatele a všechny jeho položky. Tento krok nelze vrátit zpět a soubory nelze obnovit.",
|
||||
"forcing_refresh_library_files": "Vynucení obnovy všech souborů knihovny",
|
||||
"image_format": "Formát",
|
||||
"image_format_description": "WebP vytváří menší soubory než JPEG, ale je pomalejší při kódování.",
|
||||
"image_prefer_embedded_preview": "Preferovat vložený náhled",
|
||||
"image_prefer_embedded_preview_setting_description": "Použít vložené náhledy z RAW fotografií jako vstup pro zpracování snímků, pokud jsou k dispozici. U některých snímků tak lze dosáhnout přesnějších barev, ale kvalita náhledu závisí na fotoaparátu a snímek může obsahovat více kompresních artefaktů.",
|
||||
"image_prefer_wide_gamut": "Preferovat široký gamut",
|
||||
"image_prefer_wide_gamut_setting_description": "Použít Display P3 pro miniatury. To lépe zachovává živost obrázků s širokým barevným prostorem, ale obrázky se mohou na starých zařízeních se starou verzí prohlížeče zobrazovat jinak. sRGB obrázky jsou ponechány jako sRGB, aby se zabránilo posunům barev.",
|
||||
"image_preview_description": "Středně velký obrázek se zbavenými metadaty, který se používá při prohlížení jedné položky a pro strojové učení",
|
||||
"image_preview_format": "Formát náhledů",
|
||||
"image_preview_quality_description": "Kvalita náhledu od 1 do 100. Vyšší je lepší, ale vytváří větší soubory a může snížit responzivitu aplikace. Nastavení nízké hodnoty může ovlivnit kvalitu strojového učení.",
|
||||
"image_preview_resolution": "Rozlišení náhledů",
|
||||
"image_preview_resolution_description": "Používá se při prohlížení jedné fotografie a pro strojové učení. Vyšší rozlišení mohou zachovat více detailů, ale jejich kódování trvá déle, mají větší velikost souboru a mohou snížit odezvu aplikace.",
|
||||
"image_preview_title": "Náhledy",
|
||||
"image_quality": "Kvalita",
|
||||
"image_quality_description": "Kvalita obrazu od 1 do 100. Vyšší kvalita je lepší, ale vytváří větší soubory, tato volba ovlivňuje náhled a miniatury obrázků.",
|
||||
"image_resolution": "Rozlišení",
|
||||
"image_resolution_description": "Vyšší rozlišení mohou zachovat více detailů, ale jejich kódování trvá déle, mají větší velikost souboru a mohou snížit odezvu aplikace.",
|
||||
"image_settings": "Obrázky",
|
||||
"image_settings_description": "Správa kvality a rozlišení generovaných obrázků",
|
||||
"image_thumbnail_description": "Malá miniatura s odstraněnými metadaty, který se používá při prohlížení skupin fotografií, jako je hlavní časová osa",
|
||||
"image_thumbnail_format": "Formát miniatur",
|
||||
"image_thumbnail_quality_description": "Kvalita miniatur od 1 do 100. Vyšší je lepší, ale vytváří větší soubory a může snížit odezvu aplikace.",
|
||||
"image_thumbnail_resolution": "Rozlišení miniatur",
|
||||
"image_thumbnail_resolution_description": "Používá se při prohlížení skupin fotografií (hlavní časová osa, zobrazení alba atd.). Vyšší rozlišení může zachovat více detailů, ale trvá déle, než se zakóduje, má větší velikost souboru a může snížit odezvu aplikace.",
|
||||
"job_concurrency": "Souběžnost {job}",
|
||||
"image_thumbnail_title": "Miniatury",
|
||||
"job_concurrency": "Souběžnost úlohy {job}",
|
||||
"job_created": "Úloha vytvořena",
|
||||
"job_not_concurrency_safe": "Tato úloha není bezpečená pro souběh.",
|
||||
"job_settings": "Úlohy",
|
||||
@@ -100,7 +110,7 @@
|
||||
"machine_learning_clip_model_description": "Název CLIP modelu je uvedený <link>zde</link>. Pamatujte, že při změně modelu je nutné znovu spustit úlohu 'Chytré vyhledávání' pro všechny obrázky.",
|
||||
"machine_learning_duplicate_detection": "Kontrola duplicit",
|
||||
"machine_learning_duplicate_detection_enabled": "Povolit kontrolu duplicit",
|
||||
"machine_learning_duplicate_detection_enabled_description": "Pokud je tato funkce vypnuta, budou identické položky stále duplikovány.",
|
||||
"machine_learning_duplicate_detection_enabled_description": "Pokud je tato funkce vypnuta, budou identické položky stále deduplikovány.",
|
||||
"machine_learning_duplicate_detection_setting_description": "Použít CLIP embeddings k nalezení pravděpodobných duplicit",
|
||||
"machine_learning_enabled": "Povolit strojové učení",
|
||||
"machine_learning_enabled_description": "Pokud je vypnuto, budou všechny funkce strojového učení vypnuty bez ohledu na níže uvedená nastavení.",
|
||||
@@ -212,6 +222,7 @@
|
||||
"require_password_change_on_login": "Požadovat, aby si uživatel při prvním přihlášení změnil heslo",
|
||||
"reset_settings_to_default": "Obnovení výchozího nastavení",
|
||||
"reset_settings_to_recent_saved": "Obnovit poslední uložené nastavení",
|
||||
"scanning_library": "Prohledat knihovnu",
|
||||
"scanning_library_for_changed_files": "Hledání změněných souborů v knihovně",
|
||||
"scanning_library_for_new_files": "Hledání nových souborů v knihovně",
|
||||
"search_jobs": "Hledat úlohy...",
|
||||
@@ -249,7 +260,7 @@
|
||||
"theme_settings_description": "Správa přizpůsobení webového rozhraní Immich",
|
||||
"these_files_matched_by_checksum": "Tyto soubory jsou porovnávány podle jejich kontrolních součtů",
|
||||
"thumbnail_generation_job": "Generování miniatur",
|
||||
"thumbnail_generation_job_description": "Generování velkých, malých a rozmazaných náhledů pro každý obrázek a náhledů pro každou osobu",
|
||||
"thumbnail_generation_job_description": "Generování velkých, malých a rozmazaných miniatur pro každý obrázek a miniatur pro každou osobu",
|
||||
"transcode_policy_description": "Zásady, kdy má být video překódováno. Videa HDR budou překódována vždy (kromě případů, kdy je překódování zakázáno).",
|
||||
"transcoding_acceleration_api": "API pro akceleraci",
|
||||
"transcoding_acceleration_api_description": "Rozhraní, které bude komunikovat se zařízením a urychlovat překódování. Toto nastavení je 'best effort': při selhání se vrátí k softwarovému překódování. VP9 může, ale nemusí fungovat v závislosti na vašem hardwaru.",
|
||||
@@ -276,7 +287,7 @@
|
||||
"transcoding_hardware_acceleration": "Hardwarová akcelerace",
|
||||
"transcoding_hardware_acceleration_description": "Experimentální; mnohem rychlejší, ale při stejném datovém toku bude mít nižší kvalitu",
|
||||
"transcoding_hardware_decoding": "Hardwarové dekódování",
|
||||
"transcoding_hardware_decoding_setting_description": "Platí pouze pro NVENC, QSV a RKMPP. Povoluje kompletní akceleraci namísto akcelerace pouze kódování. Nemusí fungovat u všech videí.",
|
||||
"transcoding_hardware_decoding_setting_description": "Povoluje kompletní akceleraci namísto akcelerace pouze kódování. Nemusí fungovat u všech videí.",
|
||||
"transcoding_hevc_codec": "Kodek HEVC",
|
||||
"transcoding_max_b_frames": "Maximální počet B-snímků",
|
||||
"transcoding_max_b_frames_description": "Vyšší hodnoty zvyšují účinnost komprese, ale zpomalují kódování. Nemusí být kompatibilní s hardwarovou akcelerací na starších zařízeních. Hodnota 0 zakáže B-snímky, zatímco -1 tuto hodnotu nastaví automaticky.",
|
||||
@@ -371,7 +382,7 @@
|
||||
"all_videos": "Všechna videa",
|
||||
"allow_dark_mode": "Povolit tmavý režim",
|
||||
"allow_edits": "Povolit úpravy",
|
||||
"allow_public_user_to_download": "Povolit veřejnosti stahování",
|
||||
"allow_public_user_to_download": "Povolit veřejnosti stahovat",
|
||||
"allow_public_user_to_upload": "Povolit veřejnosti nahrávat",
|
||||
"anti_clockwise": "Proti směru hodinových ručiček",
|
||||
"api_key": "API klíč",
|
||||
@@ -395,7 +406,7 @@
|
||||
"asset_has_unassigned_faces": "Položka má nepřiřazené obličeje",
|
||||
"asset_hashing": "Hashování...",
|
||||
"asset_offline": "Offline položka",
|
||||
"asset_offline_description": "Tato položka je offline. Immich nemá přístup k jejímu umístění. Zkontrolujte, zda je položka dostupná, a poté knihovnu znovu prohledejte.",
|
||||
"asset_offline_description": "Toto externí položka se již na disku nenachází. Obraťte se na Immich správce a požádejte o pomoc.",
|
||||
"asset_skipped": "Přeskočeno",
|
||||
"asset_skipped_in_trash": "V koši",
|
||||
"asset_uploaded": "Nahráno",
|
||||
@@ -409,7 +420,7 @@
|
||||
"assets_moved_to_trash_count": "Do koše {count, plural, one {přesunuta # položka} few {přesunuty # položky} other {přesunuto # položek}}",
|
||||
"assets_permanently_deleted_count": "Trvale {count, plural, one {smazána # položka} few {smazány # položky} other {smazáno # položek}}",
|
||||
"assets_removed_count": "{count, plural, one {Odstraněna # položka} few {Odstraněny # položky} other {Odstraněno # položek}}",
|
||||
"assets_restore_confirmation": "Opravdu chcete obnovit všechny vyhozené položky? Tuto akci nelze vrátit zpět!",
|
||||
"assets_restore_confirmation": "Opravdu chcete obnovit všechny vyhozené položky? Tuto akci nelze vrátit zpět! Upozorňujeme, že tímto způsobem nelze obnovit žádné offline položky.",
|
||||
"assets_restored_count": "{count, plural, one {Obnovena # položka} few {Obnoveny # položky} other {Obnoveno # položek}}",
|
||||
"assets_trashed_count": "{count, plural, one {Vyhozena # položka} few {Vyhozeny # položky} other {Vyhozeno # položek}}",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {Položka byla} other {Položky byly}} součástí alba",
|
||||
@@ -420,6 +431,7 @@
|
||||
"birthdate_saved": "Datum narození úspěšně uloženo",
|
||||
"birthdate_set_description": "Datum narození se používá k výpočtu věku osoby v době pořízení fotografie.",
|
||||
"blurred_background": "Rozmazané pozadí",
|
||||
"bugs_and_feature_requests": "Chyby a návrhy na funkce",
|
||||
"build": "Sestavení",
|
||||
"build_image": "Sestavení obrazu",
|
||||
"bulk_delete_duplicates_confirmation": "Opravdu chcete hromadně odstranit {count, plural, one {# duplicitní položku} few {# duplicitní položky} other {# duplicitních položek}}? Tím se zachová největší položka z každé skupiny a všechny ostatní duplicity se trvale odstraní. Tuto akci nelze vrátit zpět!",
|
||||
@@ -523,11 +535,13 @@
|
||||
"delete_tag_confirmation_prompt": "Opravdu chcete odstranit značku {tagName}?",
|
||||
"delete_user": "Odstranit uživatele",
|
||||
"deleted_shared_link": "Smazat sdílený odkaz",
|
||||
"deletes_missing_assets": "Odstraní položky chybějící na disku",
|
||||
"description": "Popis",
|
||||
"details": "Podrobnosti",
|
||||
"direction": "Směr",
|
||||
"disabled": "Zakázáno",
|
||||
"disallow_edits": "Zakázat úpravy",
|
||||
"discord": "Discord",
|
||||
"discover": "Objevit",
|
||||
"dismiss_all_errors": "Zrušit všechny chyby",
|
||||
"dismiss_error": "Zrušit chybu",
|
||||
@@ -536,6 +550,7 @@
|
||||
"display_original_photos": "Zobrazit originální fotky",
|
||||
"display_original_photos_setting_description": "Preferovat zobrazení původních fotek při prohlížení položek namísto miniatur, pokud je originální položka kompatibilní s webem. To může mít za následek nižší rychlost zobrazení fotek.",
|
||||
"do_not_show_again": "Tuto zprávu již nezobrazovat",
|
||||
"documentation": "Dokumentace",
|
||||
"done": "Hotovo",
|
||||
"download": "Stáhnout",
|
||||
"download_include_embedded_motion_videos": "Vložená videa",
|
||||
@@ -873,6 +888,7 @@
|
||||
"look": "Zobrazení",
|
||||
"loop_videos": "Videa ve smyčce",
|
||||
"loop_videos_description": "Povolit automatickou smyčku videa v prohlížeči.",
|
||||
"main_branch_warning": "Používáte vývojovou verzi; důrazně doporučujeme používat verzi z vydání!",
|
||||
"make": "Výrobce",
|
||||
"manage_shared_links": "Spravovat sdílené odkazy",
|
||||
"manage_sharing_with_partners": "Správa sdílení s partnery",
|
||||
@@ -942,6 +958,7 @@
|
||||
"notifications": "Oznámení",
|
||||
"notifications_setting_description": "Správa oznámení",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Oficiální zdroje Immich",
|
||||
"offline": "Offline",
|
||||
"offline_paths": "Offline cesty",
|
||||
"offline_paths_description": "Tyto výsledky mohou být způsobeny ručním odstraněním souborů, které nejsou součástí externí knihovny.",
|
||||
@@ -1077,13 +1094,15 @@
|
||||
"recent_searches": "Nedávná vyhledávání",
|
||||
"refresh": "Obnovit",
|
||||
"refresh_encoded_videos": "Obnovit kódovaná videa",
|
||||
"refresh_faces": "Obnovit obličeje",
|
||||
"refresh_metadata": "Obnovit metadata",
|
||||
"refresh_thumbnails": "Obnovit náhledy",
|
||||
"refresh_thumbnails": "Obnovit miniatury",
|
||||
"refreshed": "Obnoveno",
|
||||
"refreshes_every_file": "Obnoví každý soubor",
|
||||
"refreshes_every_file": "Znovu načte všechny stávající a nové soubory",
|
||||
"refreshing_encoded_video": "Obnovování kódovaného videa",
|
||||
"refreshing_faces": "Obnovování obličejů",
|
||||
"refreshing_metadata": "Obnovování metadat",
|
||||
"regenerating_thumbnails": "Regenerace náhledů",
|
||||
"regenerating_thumbnails": "Regenerace miniatur",
|
||||
"remove": "Odstranit",
|
||||
"remove_assets_album_confirmation": "Opravdu chcete z alba odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
|
||||
"remove_assets_shared_link_confirmation": "Opravdu chcete ze sdíleného odkazu odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
|
||||
@@ -1130,6 +1149,7 @@
|
||||
"say_something": "Řekněte něco",
|
||||
"scan_all_libraries": "Prohledat všechny knihovny",
|
||||
"scan_all_library_files": "Prohledání všech souborů knihovny",
|
||||
"scan_library": "Prohledat",
|
||||
"scan_new_library_files": "Hledat nové soubory v knihovně",
|
||||
"scan_settings": "Nastavení prohledávání",
|
||||
"scanning_for_album": "Prohledávání alba...",
|
||||
@@ -1174,8 +1194,8 @@
|
||||
"send_message": "Odeslat zprávu",
|
||||
"send_welcome_email": "Poslat uvítací e-mail",
|
||||
"server": "Server",
|
||||
"server_offline": "Server Offline",
|
||||
"server_online": "Server Online",
|
||||
"server_offline": "Server offline",
|
||||
"server_online": "Server online",
|
||||
"server_stats": "Statistiky serveru",
|
||||
"server_version": "Verze serveru",
|
||||
"set": "Nastavit",
|
||||
@@ -1188,8 +1208,8 @@
|
||||
"settings_saved": "Nastavení uloženo",
|
||||
"share": "Sdílet",
|
||||
"shared": "Sdílené",
|
||||
"shared_by": "Sdílel",
|
||||
"shared_by_user": "Sdíleno uživatelem {user}",
|
||||
"shared_by": "Sdílel(a)",
|
||||
"shared_by_user": "Sdílel(a) {user}",
|
||||
"shared_by_you": "Sdíleli jste",
|
||||
"shared_from_partner": "Fotky od {partner}",
|
||||
"shared_link_options": "Možnosti sdíleného odkazu",
|
||||
@@ -1216,6 +1236,7 @@
|
||||
"show_person_options": "Zobrazit možnosti osoby",
|
||||
"show_progress_bar": "Zobrazit ukazatel průběhu",
|
||||
"show_search_options": "Zobrazit možnosti vyhledávání",
|
||||
"show_slideshow_transition": "Zobrazit přechod prezentace",
|
||||
"show_supporter_badge": "Odznak podporovatele",
|
||||
"show_supporter_badge_description": "Zobrazit odznak podporovatele",
|
||||
"shuffle": "Náhodný výběr",
|
||||
@@ -1257,13 +1278,16 @@
|
||||
"submit": "Odeslat",
|
||||
"suggestions": "Návrhy",
|
||||
"sunrise_on_the_beach": "Východ slunce na pláži",
|
||||
"support": "Podpora",
|
||||
"support_and_feedback": "Podpora a zpětná vazba",
|
||||
"support_third_party_description": "Vaše Immich instalace byla připravena třetí stranou. Problémy, které se u vás vyskytly, mohou být způsobeny tímto balíčkem, proto se na ně obraťte v první řadě pomocí níže uvedených odkazů.",
|
||||
"swap_merge_direction": "Obrátit směr sloučení",
|
||||
"sync": "Synchronizovat",
|
||||
"tag": "Značka",
|
||||
"tag_assets": "Přiřadit značku",
|
||||
"tag_created": "Vytvořena značka: {tag}",
|
||||
"tag_feature_description": "Procházení fotografií a videí seskupených podle témat logických značek",
|
||||
"tag_not_found_question": "Nemůžete najít značku? Vytvořte ji <link>zde</link>",
|
||||
"tag_not_found_question": "Nemůžete najít značku? <link>Vytvořte novou.</link>",
|
||||
"tag_updated": "Aktualizována značka: {tag}",
|
||||
"tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}",
|
||||
"tags": "Značky",
|
||||
@@ -1272,6 +1296,7 @@
|
||||
"theme_selection": "Výběr motivu",
|
||||
"theme_selection_description": "Automatické nastavení světlého nebo tmavého motivu podle systémových preferencí prohlížeče",
|
||||
"they_will_be_merged_together": "Budou sloučeny dohromady",
|
||||
"third_party_resources": "Zdroje třetích stran",
|
||||
"time_based_memories": "Časové vzpomínky",
|
||||
"timezone": "Časové pásmo",
|
||||
"to_archive": "Archivovat",
|
||||
@@ -1345,6 +1370,8 @@
|
||||
"version": "Verze",
|
||||
"version_announcement_closing": "Váš přítel Alex",
|
||||
"version_announcement_message": "Ahoj příteli, je tu nová verze aplikace, věnuj prosím čas přečtení <link>poznámek k vydání</link> a zajisti si, aby <code>docker-compose.yml</code> a nastavení <code>.env</code> bylo aktuální, a aby nedošlo k chybné konfiguraci, zejména pokud používáš WatchTower nebo jiný mechanismus, který se stará o automatickou aktualizaci aplikace.",
|
||||
"version_history": "Historie verzí",
|
||||
"version_history_item": "Nainstalováno {version} dne {date}",
|
||||
"video": "Video",
|
||||
"video_hover_setting": "Přehrávat miniaturu videa po najetí myší",
|
||||
"video_hover_setting_description": "Přehrát miniaturu videa při najetí myší na položku. I když je přehrávání vypnuto, lze jej spustit najetím na ikonu přehrávání.",
|
||||
49
i18n/cv.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"about": "Ҫинчен",
|
||||
"account": "Шута ҫырни",
|
||||
"account_settings": "Шута ҫырни ӗнерленӳ",
|
||||
"acknowledge": "Çирӗплет",
|
||||
"action": "Ӗçлени",
|
||||
"actions": "Ӗҫсем",
|
||||
"active": "Хастар",
|
||||
"activity": "Хастарлӑх",
|
||||
"activity_changed": "Хастарлӑха {enabled, select, true {кӗртнӗ} other {сӳнтернӗ}}",
|
||||
"add": "Хуш",
|
||||
"add_a_description": "Ҫырса кӑтартни хуш",
|
||||
"add_a_location": "Вырӑн хуш",
|
||||
"add_a_name": "Ятне хуш",
|
||||
"add_a_title": "Ят хуш",
|
||||
"add_exclusion_pattern": "Кӑларса пӑрахмалли йӗрке хуш",
|
||||
"add_import_path": "Импорт ҫулне хуш",
|
||||
"add_location": "Вырӑн хуш",
|
||||
"add_more_users": "Усӑҫсем ытларах хуш",
|
||||
"add_partner": "Мӑшӑр хуш",
|
||||
"add_path": "Ҫулне хуш",
|
||||
"add_photos": "Сӑнӳкерчӗксем хуш",
|
||||
"add_to": "Мӗн те пулин хуш...",
|
||||
"add_to_album": "Альбома хуш",
|
||||
"add_to_shared_album": "Пӗрлехи альбома хуш",
|
||||
"added_to_archive": "Архива хушнӑ",
|
||||
"added_to_favorites": "Суйласа илнине хушнӑ",
|
||||
"added_to_favorites_count": "Суйласа илнине {count, number} хушнӑ",
|
||||
"admin": {
|
||||
"asset_offline_description": "Библиотекӑн ҫак тулаш файлне дискра урӑх тупайман, карҫинккана куҫарнӑ. Енчен те файла вулавӑш ӑшне куҫарнӑ пулсан, тивӗҫлӗ ҫӗнӗ ресурс тупас тесен хӑвӑрӑн вӑхӑтлӑх шкалӑна тӗрӗслӗр. Ҫак файла ҫӗнӗрен чӗртес тесен файл патне каймалли ҫула Immich валли аяларах ҫитернине курса ӗненӗр, библиотекӑна сканерланине пурнӑҫлӑр.",
|
||||
"authentication_settings_disable_all": "Эсир кӗмелли пур меслетсене те чарса лартасшӑн тесе шутлатӑр-и? Кӗмелли шӑтӑка пӗтӗмпех уҫаҫҫӗ.",
|
||||
"background_task_job": "Курăнман ӗҫсем",
|
||||
"check_all": "Пурне те тӗрӗслӗр",
|
||||
"cleared_jobs": "Ӗҫсене тасатнӑ:{job}",
|
||||
"confirm_email_below": "Ҫирӗплетес тесен, аяларах «{email}» кӗртӗр",
|
||||
"confirm_reprocess_all_faces": "Пӗтӗм сӑнӗсене тепӗр хут палӑртас килет тесе шанатӑр-и? Ҫавӑн пекех ятсене пур ҫынран та хуратӗҫ.",
|
||||
"create_job": "Ӗҫе ту",
|
||||
"disable_login": "Кӗме чарӑр",
|
||||
"duplicate_detection_job_description": "Пӗр пек ӳкерчӗксене тупма машинӑллӑ вӗренӗве ӗҫлеттерӗр. Ӑслӑ шыравпа усӑ кураҫҫӗ",
|
||||
"face_detection": "Пит-куҫа тупасси",
|
||||
"force_delete_user_warning": "ПУЛТАРУЛӐХ: Ку усӑ куракана тата мӗнпур ресурса ҫийӗнчех кӑларса пӑрахасси патне илсе ҫитерӗ. Кӑна пӑрахӑҫлама май ҫук, файлсене те юсаса пӗтереймеҫҫӗ.",
|
||||
"image_format": "Тулашлăх",
|
||||
"image_preview_description": "Вӑтам пысӑкӑш ӳкерчӗк, уйрӑм метаданнӑйсем, пӗр объекта пӑхнӑ чухне тата машинӑллӑ вӗренӳре усӑ кураҫҫӗ",
|
||||
"image_preview_quality_description": "1-100 таран малтанхи пахалӑх. Ҫӳллӗреххи лайӑхрах, анчах та пысӑкрах файлсем туса кӑларать тата приложенисен хуравлӑхне чакарма пултарать. Пӗчӗк хак лартни машинӑллӑ вӗренӳ пахалӑхне витӗм кӳме пултарать.",
|
||||
"image_preview_title": "Малтанлӑха пӑхмалли ӗнерлевсем",
|
||||
"image_quality": "Пахалӑх",
|
||||
"image_resolution": "Виҫе"
|
||||
}
|
||||
}
|
||||
@@ -384,35 +384,46 @@
|
||||
"back": "Tilbage",
|
||||
"backward": "Baglæns",
|
||||
"blurred_background": "Sløret baggrund",
|
||||
"bugs_and_feature_requests": "Fejl & forbedringsønsker",
|
||||
"build": "Byg",
|
||||
"build_image": "Byggefil",
|
||||
"bulk_delete_duplicates_confirmation": "Er du sikker på, at du vil slette alle {count, plural, one {# duplicate asset} other {# duplicate assets}}? Dette vil beholde den største fil i hver gruppe og slette alle dubletter. Denne handling kan ikke fortrydes!",
|
||||
"bulk_keep_duplicates_confirmation": "Er du sikker på, at du vil beholde {count, plural, one {# duplicate asset} other {# duplicate assets}}? Dette vil løse alle dubletgrupper uden at slette noget.",
|
||||
"camera": "Kamera",
|
||||
"camera_brand": "Kameramærke",
|
||||
"camera_model": "Kameramodel",
|
||||
"cancel": "Annuller",
|
||||
"cancel": "Annullér",
|
||||
"cancel_search": "Annullér søgning",
|
||||
"cannot_merge_people": "Kan ikke sammenflette personer",
|
||||
"cannot_undo_this_action": "Du kan ikke fortryde denne handling!",
|
||||
"cannot_update_the_description": "Kan ikke opdatere beskrivelsen",
|
||||
"cant_apply_changes": "Kan ikke anvende ændringer",
|
||||
"cant_get_faces": "Kan ikke hente ansigter",
|
||||
"cant_search_people": "Kan ikke søge i personer",
|
||||
"cant_search_places": "Kan ikke søge i steder",
|
||||
"change_date": "Ændr dato",
|
||||
"change_expiration_time": "Ændrer udløbstidspunkt",
|
||||
"change_expiration_time": "Ændr udløbstidspunkt",
|
||||
"change_location": "Ændr sted",
|
||||
"change_name": "Ændr navn",
|
||||
"change_name_successfully": "Navn ændret med succes",
|
||||
"change_password": "Skift Kodeord",
|
||||
"change_your_password": "Skift din adgangskode",
|
||||
"changed_visibility_successfully": "Ændrede synlighed med succes",
|
||||
"check_all": "Tjek alle",
|
||||
"check_logs": "Tjek logs",
|
||||
"choose_matching_people_to_merge": "Vælg personer der matcher til sammenfletning",
|
||||
"change_name_successfully": "Navn er ændret",
|
||||
"change_password": "Skift kodeord",
|
||||
"change_password_description": "Dette er enten første gang du tilmelder dig, eller en ændring af kodeordet blev bestilt. Indtast dit nye kodeord herunder.",
|
||||
"change_your_password": "Skift dit kodeord",
|
||||
"changed_visibility_successfully": "Synlighed blev ændret",
|
||||
"check_all": "Markér alle",
|
||||
"check_logs": "Tjek logfiler",
|
||||
"choose_matching_people_to_merge": "Vælg matchende personer til sammenfletning",
|
||||
"city": "By",
|
||||
"clear": "Ryd",
|
||||
"clear_all": "Ryd alle",
|
||||
"clear_all_recent_searches": "Ryd alle seneste søgninger",
|
||||
"clear_message": "Ryd bedsked",
|
||||
"clear_value": "Ryd værdi",
|
||||
"clockwise": "Med uret",
|
||||
"close": "Luk",
|
||||
"collapse_all": "Kollaps alle",
|
||||
"collapse": "Klap sammen",
|
||||
"collapse_all": "Klap alle sammen",
|
||||
"color": "Farve",
|
||||
"color_theme": "Farvetema",
|
||||
"comment_options": "Kommentarindstillinger",
|
||||
"comments_are_disabled": "Kommentarer er slået fra",
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "{count, number} zu Favoriten hinzugefügt",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Ausschlussmuster hinzufügen. Platzhalter, wie *, **, und ? werden unterstützt. Um alle Dateien in einem Verzeichnis namens „Raw\" zu ignorieren, „**/Raw/**“ verwenden. Um alle Dateien zu ignorieren, die auf „.tif“ enden, „**/*.tif“ verwenden. Um einen absoluten Pfad zu ignorieren, „/pfad/zum/ignorieren/**“ verwenden.",
|
||||
"asset_offline_description": "Diese Datei einer externen Bibliothek befindet sich nicht mehr auf der Festplatte und wurde in den Papierkorb verschoben. Falls die Datei innerhalb der Bibliothek verschoben wurde, überprüfe deine Zeitleiste auf die neue entsprechende Datei. Um diese Datei wiederherzustellen, stelle bitte sicher, dass Immich auf den unten stehenden Dateipfad zugreifen kann und scanne die Bibliothek.",
|
||||
"authentication_settings": "Authentifizierungseinstellungen",
|
||||
"authentication_settings_description": "Passwort-, OAuth- und sonstigen Authentifizierungseinstellungen verwalten",
|
||||
"authentication_settings_disable_all": "Bist du sicher, dass du alle Anmeldemethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.",
|
||||
@@ -37,54 +38,63 @@
|
||||
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
|
||||
"config_set_by_file": "Ist derzeit in einer Konfigurationsdatei festgelegt",
|
||||
"confirm_delete_library": "Bist du sicher, dass du die Bibliothek {library} löschen willst?",
|
||||
"confirm_delete_library_assets": "Bist du sicher, dass du diese Bibliothek löschen willst? Dies löscht alle {count, plural, one {# enthaltenes Objekt} other {alle # enthaltenen Objekte}} aus Immich und kann nicht rückgängig gemacht werden. Die Dateien bleiben auf der Festplatte erhalten.",
|
||||
"confirm_email_below": "Bestätige, indem du \"{email}\" unten eingibst",
|
||||
"confirm_delete_library_assets": "Bist du sicher, dass du diese Bibliothek löschen willst? Dies löscht {count, plural, one {# enthaltenes Objekt} other {alle # enthaltenen Objekte}} aus Immich und kann nicht rückgängig gemacht werden. Die Dateien bleiben auf der Festplatte erhalten.",
|
||||
"confirm_email_below": "Bestätige, indem du unten \"{email}\" eingibst",
|
||||
"confirm_reprocess_all_faces": "Bist du sicher, dass du alle Gesichter erneut verarbeiten möchtest? Dies löscht auch alle bereits benannten Personen.",
|
||||
"confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?",
|
||||
"create_job": "Job erstellen",
|
||||
"create_job": "Aufgabe erstellen",
|
||||
"crontab_guru": "Crontab Guru",
|
||||
"disable_login": "Login deaktvieren",
|
||||
"disabled": "Deaktiviert",
|
||||
"duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der Smart Search Technologie",
|
||||
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn Sie Ordner haben, die Dateien enthalten, die Sie nicht importieren möchten, wie z. B. RAW-Dateien.",
|
||||
"duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der intelligenten Suche",
|
||||
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.",
|
||||
"external_library_created_at": "Externe Bibliothek (erstellt am {date})",
|
||||
"external_library_management": "Externe Bibliotheksverwaltung",
|
||||
"external_library_management": "Verwaltung externer Bibliotheken",
|
||||
"face_detection": "Gesichtserkennung",
|
||||
"face_detection_description": "Diese Aufgabe erkennt Gesichter in Dateien mittels maschinellen Lernens. Bei Videos wird nur die Miniaturansicht verwendet. „Alle“ verarbeitet alle Dateien neu, während „Fehlende“ nur nicht verarbeitete Dateien in die Warteschlange stellt. Erkannte Gesichter werden zur Gruppierung in bestehende oder neue Personen in die Warteschlange gestellt.",
|
||||
"facial_recognition_job_description": "Diese Aufgabe gruppiert erkannte Gesichter zu Personen nach der Gesichtserkennung. „Alle“ clustert alle Gesichter neu, während „Fehlende“ Gesichter ohne Zuordnung in die Warteschlange stellt.",
|
||||
"face_detection_description": "Diese Aufgabe erkennt Gesichter in Dateien mittels maschinellen Lernens. Bei Videos wird nur die Miniaturansicht verwendet. „Aktualisieren“ verarbeitet alle Dateien neu. „Zurücksetzen“ setzt zusätzlich alle Gesichter zurück. „Fehlende“ stellt nur nicht verarbeitete Dateien in die Warteschlange. Erkannte Gesichter werden zur Gruppierung in bestehende oder neue Personen in die Warteschlange gestellt.",
|
||||
"facial_recognition_job_description": "Diese Aufgabe gruppiert im Anschluss an die Gesichtserkennung die erkannten Gesichter zu Personen. „Zurücksetzen“ gruppiert alle Gesichter neu, während „Fehlende“ Gesichter ohne Zuordnung in die Warteschlange stellt.",
|
||||
"failed_job_command": "Befehl {command} ist für Aufgabe {job} fehlgeschlagen",
|
||||
"force_delete_user_warning": "WARNUNG: Diese Aktion löscht sofort den Benutzer und all seine Dateien. Dies kann nicht rückgängig gemacht werden und die Dateien können nicht wiederhergestellt werden.",
|
||||
"forcing_refresh_library_files": "Erneutes Laden aller Bibliotheksdateien erzwingen",
|
||||
"image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist dafür aber etwas langsamer in der Verarbeitung.",
|
||||
"image_format": "Format",
|
||||
"image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist aber etwas langsamer in der Erstellung.",
|
||||
"image_prefer_embedded_preview": "Eingebettete Vorschau bevorzugen",
|
||||
"image_prefer_embedded_preview_setting_description": "Verwende eingebettete Vorschaubilder in RAW-Fotos als Grundlage für die Bildverarbeitung, sofern diese zur Verfügung stehen. Dies kann bei einigen Bildern genauere Farben erzeugen, allerdings ist die Qualität der Vorschau kameraabhängig und das Bild kann mehr Kompressionsartefakte aufweisen.",
|
||||
"image_prefer_wide_gamut": "Breites Spektrum bevorzugen",
|
||||
"image_prefer_wide_gamut_setting_description": "Verwendung von Display P3 (DCI-P3) für Miniaturansichten. Dadurch bleibt die Lebendigkeit von Bildern mit breiten Farbräumen besser erhalten, aber die Bilder können auf älteren Geräten mit einer älteren Browserversion etwas anders aussehen. sRGB-Bilder werden im sRGB-Format belassen, um Farbverschiebungen zu vermeiden.",
|
||||
"image_preview_description": "Mittelgroßes Bild mit entfernten Metadaten, das bei der Betrachtung einer einzelnen Datei und für maschinelles Lernen verwendet wird",
|
||||
"image_preview_format": "Vorschauformat",
|
||||
"image_preview_quality_description": "Vorschauqualität von 1-100. Ein höherer Wert ist besser, erzeugt dadurch aber größere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen. Die Einstellung eines niedrigen Wertes kann dafür aber die Qualität des maschinellen Lernens beeinträchtigen.",
|
||||
"image_preview_resolution": "Vorschau-Auflösung",
|
||||
"image_preview_resolution_description": "Dies wird beim Anzeigen eines einzelnen Fotos und für das maschinelle Lernen verwendet. Höhere Auflösungen können mehr Details beibehalten, benötigen aber mehr Zeit für die Kodierung, haben größere Dateigrößen und können die Reaktionsfähigkeit der App beeinträchtigen.",
|
||||
"image_preview_title": "Vorschaueinstellungen",
|
||||
"image_quality": "Qualität",
|
||||
"image_quality_description": "Bildqualität von 1-100. Höher bedeutet bessere Qualität, erzeugt aber größere Dateien. Diese Option betrifft die Vorschaubilder und Miniaturansichten.",
|
||||
"image_resolution": "Auflösung",
|
||||
"image_resolution_description": "Höhere Auflösungen können mehr Details erhalten, benötigen aber mehr Zeit für die Kodierung, haben größere Dateigrößen und können die Reaktionsfähigkeit von Anwendungen beeinträchtigen.",
|
||||
"image_settings": "Bildeinstellungen",
|
||||
"image_settings_description": "Qualität und Auflösung von generierten Bildern verwalten",
|
||||
"image_thumbnail_description": "Kleine Miniaturansicht mit entfernten Metadaten, die bei der Anzeige von Sammlungen von Fotos wie der Zeitleiste verwendet wird",
|
||||
"image_thumbnail_format": "Miniaturansichts-Format",
|
||||
"image_thumbnail_quality_description": "Qualität der Miniaturansicht von 1-100. Höher ist besser, erzeugt aber größere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen.",
|
||||
"image_thumbnail_resolution": "Miniaturansichts-Auflösung",
|
||||
"image_thumbnail_resolution_description": "Dies wird bei der Anzeige von Bildergruppen („Zeitleiste“, „Albumansicht“ usw.) verwendet. Höhere Auflösungen können mehr Details beibehalten, benötigen aber mehr Zeit für die Kodierung, haben größere Dateigrößen und können die Reaktionsfähigkeit der App beeinträchtigen.",
|
||||
"job_concurrency": "{job} - (Anzahl gleichzeitiger Prozesse)",
|
||||
"job_created": "Job erstellt",
|
||||
"job_not_concurrency_safe": "Dieser Job ist nicht parallelisierungssicher.",
|
||||
"job_settings": "Job-Einstellungen",
|
||||
"job_settings_description": "Gleichzeitige Job-Prozessen verwalten",
|
||||
"job_status": "Job-Status",
|
||||
"image_thumbnail_title": "Miniaturansicht-Einstellungen",
|
||||
"job_concurrency": "{job} (Anzahl gleichzeitiger Prozesse)",
|
||||
"job_created": "Aufgabe erstellt",
|
||||
"job_not_concurrency_safe": "Diese Aufgabe ist nicht parallelisierungssicher.",
|
||||
"job_settings": "Aufgaben-Einstellungen",
|
||||
"job_settings_description": "Gleichzeitige Aufgaben-Prozesse verwalten",
|
||||
"job_status": "Aufgaben-Status",
|
||||
"jobs_delayed": "{jobCount, plural, other {# verzögert}}",
|
||||
"jobs_failed": "{jobCount, plural, other {# fehlgeschlagen}}",
|
||||
"library_created": "Bibliothek erstellt: {library}",
|
||||
"library_cron_expression": "Cron-Ausdruck",
|
||||
"library_cron_expression_description": "Legen Sie das Überprüfungsintervall mit Hilfe des cron-Formats fest. Für weitere Informationen siehe z.B. <link>Crontab Guru</link>",
|
||||
"library_cron_expression_description": "Lege das Überprüfungsintervall mit Hilfe des cron-Formats fest. Für weitere Informationen siehe z.B. <link>Crontab Guru</link>",
|
||||
"library_cron_expression_presets": "Cron-Expression Voreinstellungen",
|
||||
"library_deleted": "Bibliothek gelöscht",
|
||||
"library_import_path_description": "Gib einen Ordner für den Import an. Dieser Ordner, einschließlich der Unterordner, wird nach Bildern und Videos durchsucht.",
|
||||
"library_scanning": "Periodisches scannen",
|
||||
"library_scanning": "Periodisches Scannen",
|
||||
"library_scanning_description": "Regelmäßiges Durchsuchen der Bibliothek einstellen",
|
||||
"library_scanning_enable_description": "Regelmäßiges Scannen der Bibliothek aktivieren",
|
||||
"library_settings": "Externe Bibliothek",
|
||||
@@ -94,12 +104,12 @@
|
||||
"library_watching_settings": "Bibliotheksüberwachung (EXPERIMENTELL)",
|
||||
"library_watching_settings_description": "Automatisch auf geänderte Dateien prüfen",
|
||||
"logging_enable_description": "Aktiviere Logging",
|
||||
"logging_level_description": "Wenn aktiviert, welches Log Level genutzt wird.",
|
||||
"logging_level_description": "Wenn aktiviert, welches Log-Level genutzt wird.",
|
||||
"logging_settings": "Protokollierung",
|
||||
"machine_learning_clip_model": "CLIP-Modell",
|
||||
"machine_learning_clip_model_description": "Der Name eines CLIP-Modells, welches <link>\"hier\"</link> aufgeführt ist. Beachte, dass du den Job \"Intelligente Suche\" für alle Bilder erneut ausführen musst, wenn du das Modell wechselst.",
|
||||
"machine_learning_duplicate_detection": "Duplikats-Erkennung",
|
||||
"machine_learning_duplicate_detection_enabled": "Duplikat-Erkennung aktivieren",
|
||||
"machine_learning_clip_model_description": "Der Name eines CLIP-Modells, welches <link>hier</link> aufgeführt ist. Beachte, dass du die Aufgabe \"Intelligente Suche\" für alle Bilder erneut ausführen musst, wenn du das Modell wechselst.",
|
||||
"machine_learning_duplicate_detection": "Duplikaterkennung",
|
||||
"machine_learning_duplicate_detection_enabled": "Duplikaterkennung aktivieren",
|
||||
"machine_learning_duplicate_detection_enabled_description": "Falls diese Option deaktiviert ist, werden exakt identische Dateien dennoch de-dupliziert.",
|
||||
"machine_learning_duplicate_detection_setting_description": "Verwendung von CLIP-Embeddings zum Erkennen möglicher Duplikate",
|
||||
"machine_learning_enabled": "Maschinelles Lernen aktivieren",
|
||||
@@ -107,21 +117,21 @@
|
||||
"machine_learning_facial_recognition": "Gesichtsidentifikation",
|
||||
"machine_learning_facial_recognition_description": "Erkenne, identifiziere und gruppiere Gesichter in Bildern",
|
||||
"machine_learning_facial_recognition_model": "Gesichtserkennungs-Modell",
|
||||
"machine_learning_facial_recognition_model_description": "Die Modelle sind in absteigender Reihenfolge ihrer Größe aufgeführt. Größere Modelle sind langsamer und verbrauchen mehr Speicher, liefern aber bessere Ergebnisse. Bitte beachte dabei, dass du den Gesichtserkennungsjob für alle Bilder neu starten musst, wenn du ein Modell änderst.",
|
||||
"machine_learning_facial_recognition_model_description": "Die Modelle sind in absteigender Reihenfolge ihrer Größe aufgeführt. Größere Modelle sind langsamer und verbrauchen mehr Speicher, liefern aber bessere Ergebnisse. Bitte beachte dabei, dass du die Gesichtserkennungsaufgabe für alle Bilder neu starten musst, wenn du ein Modell änderst.",
|
||||
"machine_learning_facial_recognition_setting": "Gesichtserkennung aktivieren",
|
||||
"machine_learning_facial_recognition_setting_description": "Wenn diese Option deaktiviert ist, werden die Bilder nicht für die Gesichtserkennung kodiert und der Abschnitt „Personen“ auf der Seite „Erkunden“ wird nicht dargestellt.",
|
||||
"machine_learning_max_detection_distance": "Maximaler Erkennungsabstand",
|
||||
"machine_learning_max_detection_distance_description": "Maximaler Unterschied zwischen zwei Bildern, um sie als Duplikate zu betrachten, im Bereich von 0,001-0,1. Bei höheren Werten werden mehr Duplikate erkannt, aber es kann zu falsch positiven Ergebnissen kommen.",
|
||||
"machine_learning_max_detection_distance_description": "Maximaler Unterschied zwischen zwei Bildern, um sie als Duplikate zu betrachten, im Bereich von 0,001-0,1. Bei höheren Werten werden mehr Duplikate erkannt, aber es kann zu falsch-positiven Ergebnissen kommen.",
|
||||
"machine_learning_max_recognition_distance": "Maximaler Erkennungsabstand",
|
||||
"machine_learning_max_recognition_distance_description": "Maximaler Abstand zwischen zwei Gesichtern, die als dieselbe Person angesehen werden, von 0-2. Ein niedrigerer Wert kann verhindern, dass zwei Personen als dieselbe Person eingestuft werden, während ein höherer Wert verhindern kann, dass ein und dieselbe Person als zwei verschiedene Personen eingestuft wird. Bitte beachte dabei, dass es einfacher ist, zwei Personen zu verschmelzen, als eine Person in zwei zu teilen, also wähle nach Möglichkeit einen niedrigeren Schwellenwert.",
|
||||
"machine_learning_min_detection_score": "Minimale Erkennungsrate",
|
||||
"machine_learning_min_detection_score_description": "Minimale Konfidenzrate für die Erkennung eines Gesichts von 0-1. Bei niedrigeren Werten werden mehr Gesichter erkannt, aber es kann zu falsch-positiven Ergebnissen kommen.",
|
||||
"machine_learning_min_recognized_faces": "Mindestens erkannte Gesichter",
|
||||
"machine_learning_min_recognized_faces_description": "Die Mindestanzahl von erkannten Gesichtern, damit eine Person erstellt werden kann. Eine Erhöhung dieses Wertes macht die Gesichtserkennung präziser, erhöht aber die Wahrscheinlichkeit, dass ein Gesicht nicht zu einer Person zugeordnet werden kann.",
|
||||
"machine_learning_min_recognized_faces_description": "Die Mindestanzahl von erkannten Gesichtern, damit eine Person erstellt werden kann. Eine Erhöhung dieses Wertes macht die Gesichtserkennung präziser, erhöht aber die Wahrscheinlichkeit, dass ein Gesicht nicht zu einer Person zugeordnet wird.",
|
||||
"machine_learning_settings": "Einstellungen für maschinelles Lernen",
|
||||
"machine_learning_settings_description": "Funktionen und Einstellungen für das maschinelle Lernen verwalten",
|
||||
"machine_learning_settings_description": "Funktionen und Einstellungen des maschinellen Lernens verwalten",
|
||||
"machine_learning_smart_search": "Intelligente Suche",
|
||||
"machine_learning_smart_search_description": "Semantische Bildsuche mit CLIP-Einbettungen",
|
||||
"machine_learning_smart_search_description": "Semantische Bildsuche mittels CLIP-Einbettungen",
|
||||
"machine_learning_smart_search_enabled": "Intelligente Suche aktivieren",
|
||||
"machine_learning_smart_search_enabled_description": "Ist diese Option deaktiviert, werden die Bilder nicht für die intelligente Suche verwendet.",
|
||||
"machine_learning_url_description": "Server-URL für maschinelles Lernen",
|
||||
@@ -129,31 +139,31 @@
|
||||
"manage_log_settings": "Log-Einstellungen verwalten",
|
||||
"map_dark_style": "Dunkler Stil",
|
||||
"map_enable_description": "Kartenfunktionen aktivieren",
|
||||
"map_gps_settings": "Karten & GPS Einstellungen",
|
||||
"map_gps_settings_description": "Karten & GPS Einstellungen verwalten",
|
||||
"map_gps_settings": "Karten- & GPS-Einstellungen",
|
||||
"map_gps_settings_description": "Karten- & GPS-Einstellungen verwalten",
|
||||
"map_implications": "Die Kartenfunktion verwendet einen externen Tile-Service (tiles.immich.cloud)",
|
||||
"map_light_style": "Heller Stil",
|
||||
"map_manage_reverse_geocoding_settings": "Einstellungen für die <link>Umgekehrte Geokodierung</link> verwalten",
|
||||
"map_manage_reverse_geocoding_settings": "Einstellungen für die <link>umgekehrte Geokodierung</link> verwalten",
|
||||
"map_reverse_geocoding": "Umgekehrte Geokodierung",
|
||||
"map_reverse_geocoding_enable_description": "Umgekehrte Geokodierung aktivieren",
|
||||
"map_reverse_geocoding_settings": "Einstellungen für Umgekehrte Geokodierung",
|
||||
"map_settings": "Karten",
|
||||
"map_settings_description": "Karten- und GPS Einstellungen verwalten",
|
||||
"map_reverse_geocoding_settings": "Einstellungen für umgekehrte Geokodierung",
|
||||
"map_settings": "Karte",
|
||||
"map_settings_description": "Karten- und GPS-Einstellungen verwalten",
|
||||
"map_style_description": "URL zu einem style.json Karten-Theme",
|
||||
"metadata_extraction_job": "Metadaten extrahieren",
|
||||
"metadata_extraction_job_description": "Extrahieren von Metadaten, wie zum Beispiel GPS, Gesichtern und Auflösung aus jeder Datei",
|
||||
"metadata_faces_import_setting": "Import von Gesichtern aktivieren",
|
||||
"metadata_faces_import_setting_description": "Gesichter aus EXIF Daten des Bildes und Sidecar Dateien importieren",
|
||||
"metadata_settings": "Metadaten Einstellungen",
|
||||
"metadata_settings_description": "Metadaten Einstellungen verwalten",
|
||||
"metadata_faces_import_setting_description": "Gesichter aus EXIF-Daten des Bildes und Sidecar-Dateien importieren",
|
||||
"metadata_settings": "Metadaten-Einstellungen",
|
||||
"metadata_settings_description": "Metadaten-Einstellungen verwalten",
|
||||
"migration_job": "Migration",
|
||||
"migration_job_description": "Diese Aufgabe migriert Miniaturansichten für Dateien und Gesichter in die neueste Ordnerstruktur",
|
||||
"no_paths_added": "Keine Pfade hinzugefügt",
|
||||
"no_pattern_added": "Kein Pattern hinzugefügt",
|
||||
"note_apply_storage_label_previous_assets": "Hinweis: Um das Storage Label auf die vorher hochgeladenen Dateien anzuwenden, starte den",
|
||||
"no_pattern_added": "Kein Ausschlussmuster hinzugefügt",
|
||||
"note_apply_storage_label_previous_assets": "Hinweis: Um den Speicherpfad auf die vorher hochgeladenen Dateien anzuwenden, starte den",
|
||||
"note_cannot_be_changed_later": "HINWEIS: Dies kann später nicht mehr geändert werden!",
|
||||
"note_unlimited_quota": "Hinweis: 0 eingeben für unlimitiertes Kontingent",
|
||||
"notification_email_from_address": "Von",
|
||||
"notification_email_from_address": "Absenderadresse",
|
||||
"notification_email_from_address_description": "E-Mail-Adresse des Senders, zum Beispiel: \"Immich Photo Server <noreply@example.com>\"",
|
||||
"notification_email_host_description": "Host des E-Mail-Servers (z.B. smtp.immich.app)",
|
||||
"notification_email_ignore_certificate_errors": "Ignoriere Zertifikats-Fehler",
|
||||
@@ -168,13 +178,13 @@
|
||||
"notification_email_username_description": "Benutzername, der bei der Anmeldung am E-Mail-Server verwendet wird",
|
||||
"notification_enable_email_notifications": "E-Mail-Benachrichtigungen aktivieren",
|
||||
"notification_settings": "Benachrichtigungseinstellungen",
|
||||
"notification_settings_description": "Eenachrichtigungseinstellungen (inkl. E-Mail) verwalten",
|
||||
"notification_settings_description": "Benachrichtigungseinstellungen (inkl. E-Mail) verwalten",
|
||||
"oauth_auto_launch": "Auto-Start",
|
||||
"oauth_auto_launch_description": "Automatischer Start des OAuth-Anmeldevorgangs beim Aufrufen der Anmeldeseite",
|
||||
"oauth_auto_register": "Automatische Registrierung",
|
||||
"oauth_auto_register_description": "Automatische Registrierung neuer Benutzer nach der OAuth-Anmeldung",
|
||||
"oauth_button_text": "Button Text",
|
||||
"oauth_client_id": "Client ID",
|
||||
"oauth_button_text": "Button-Text",
|
||||
"oauth_client_id": "Client-ID",
|
||||
"oauth_client_secret": "Client-Geheimnis",
|
||||
"oauth_enable_description": "Anmeldung mit OAuth",
|
||||
"oauth_issuer_url": "Aussteller-URL",
|
||||
@@ -182,7 +192,7 @@
|
||||
"oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben",
|
||||
"oauth_mobile_redirect_uri_override_description": "Einschalten, wenn der OAuth-Provider keine mobile URI wie '{callback}' erlaubt",
|
||||
"oauth_profile_signing_algorithm": "Algorithmus zur Profilsignierung",
|
||||
"oauth_profile_signing_algorithm_description": "Dieser Algorithmus wird für die für die Signatur des Benutzerprofils verwendet.",
|
||||
"oauth_profile_signing_algorithm_description": "Dieser Algorithmus wird für die Signatur des Benutzerprofils verwendet.",
|
||||
"oauth_scope": "Umfang",
|
||||
"oauth_settings": "OAuth",
|
||||
"oauth_settings_description": "OAuth-Anmeldeeinstellungen verwalten",
|
||||
@@ -193,11 +203,11 @@
|
||||
"oauth_storage_quota_claim": "Speicherkontingentangabe",
|
||||
"oauth_storage_quota_claim_description": "Setzen Sie das Speicherkontingent des Benutzers automatisch auf den angegebenen Wert.",
|
||||
"oauth_storage_quota_default": "Standard-Speicherplatzkontingent (GiB)",
|
||||
"oauth_storage_quota_default_description": "Kontingent in GiB, welcher verwendet werden kann, wenn kein Anspruch erhoben wurde (Gib 0 für einen unbegrenzten Speicherkontingent ein).",
|
||||
"oauth_storage_quota_default_description": "Kontingent in GiB, das verwendet werden soll, wenn keines übermittelt wird (gib 0 für ein unbegrenztes Kontingent ein).",
|
||||
"offline_paths": "Offline-Pfade",
|
||||
"offline_paths_description": "Die Ergebnisse könnten durch manuelles Löschen von Dateien, die nicht Teil einer externen Bibliothek sind, verursacht sein.",
|
||||
"password_enable_description": "Login mit E-Mail und Passwort",
|
||||
"password_settings": "Passwort Login",
|
||||
"password_settings": "Passwort-Login",
|
||||
"password_settings_description": "Passwort-Anmeldeeinstellungen verwalten",
|
||||
"paths_validated_successfully": "Alle Pfade wurden erfolgreich validiert",
|
||||
"person_cleanup_job": "Personen aufräumen",
|
||||
@@ -212,9 +222,10 @@
|
||||
"require_password_change_on_login": "Benutzer muss das Passwort beim ersten Login ändern",
|
||||
"reset_settings_to_default": "Einstellungen auf Standard zurücksetzen",
|
||||
"reset_settings_to_recent_saved": "Einstellungen auf die zuletzt gespeicherten Einstellungen zurücksetzen",
|
||||
"scanning_library": "Bibliothek scannen",
|
||||
"scanning_library_for_changed_files": "Untersuche Bibliothek auf geänderte Dateien",
|
||||
"scanning_library_for_new_files": "Untersuche Bibliothek auf neue Dateien",
|
||||
"search_jobs": "Jobs suchen...",
|
||||
"search_jobs": "Aufgaben suchen...",
|
||||
"send_welcome_email": "Begrüssungsmail senden",
|
||||
"server_external_domain_settings": "Externe Domain",
|
||||
"server_external_domain_settings_description": "Domäne für öffentlich freigegebene Links, einschließlich http(s)://",
|
||||
@@ -225,7 +236,7 @@
|
||||
"sidecar_job": "Filialdatei-Metadaten",
|
||||
"sidecar_job_description": "Durch diese Aufgabe werden Filialdatei-Metadaten im Dateisystem entdeckt oder synchronisiert",
|
||||
"slideshow_duration_description": "Dauer der Anzeige jedes Bildes in Sekunden",
|
||||
"smart_search_job_description": "Diese Aufgabe wendet das maschinelles Lernen auf Dateien an, um die intelligente Suche zu ermöglichen",
|
||||
"smart_search_job_description": "Diese Aufgabe wendet das maschinelle Lernen auf Dateien an, um die intelligente Suche zu ermöglichen",
|
||||
"storage_template_date_time_description": "Der Erstellungszeitstempel der Datei wird für die Datums- und Uhrzeitinformation verwendet",
|
||||
"storage_template_date_time_sample": "Beispielzeitpunkt {date}",
|
||||
"storage_template_enable_description": "Speichervorlagen-Engine aktivieren",
|
||||
@@ -234,13 +245,13 @@
|
||||
"storage_template_migration": "Migration von Speichervorlagen",
|
||||
"storage_template_migration_description": "Diese Aufgabe wendet die aktuelle <link>{template}</link> auf zuvor hochgeladene Dateien an",
|
||||
"storage_template_migration_info": "Vorlagenänderungen gelten nur für neue Dateien. Um die Vorlage rückwirkend auf bereits hochgeladene Assets anzuwenden, führe den <link>{job}</link> aus.",
|
||||
"storage_template_migration_job": "Speichervorlagenmigrations-Job",
|
||||
"storage_template_more_details": "Weitere Details zu dieser Funktion finden Sie unter <template-link>Speichervorlage</template-link> und dessen <implications-link>Implikationen</implications-link>",
|
||||
"storage_template_migration_job": "Speichervorlagenmigrations-Aufgabe",
|
||||
"storage_template_more_details": "Weitere Details zu dieser Funktion findest du unter <template-link>Speichervorlage</template-link> und dessen <implications-link>Implikationen</implications-link>",
|
||||
"storage_template_onboarding_description": "Wenn aktiviert, sortiert diese Funktion Dateien automatisch basierend auf einer benutzerdefinierten Vorlage. Aufgrund von Stabilitätsproblemen ist die Funktion standardmäßig deaktiviert. Weitere Informationen findest du in der <link>Dokumentation</link>.",
|
||||
"storage_template_path_length": "Ungefähres Pfad Längen Limit: <b>{length, number}</b>/{limit, number}",
|
||||
"storage_template_path_length": "Ungefähres Pfadlängen-Limit: <b>{length, number}</b>/{limit, number}",
|
||||
"storage_template_settings": "Speichervorlage",
|
||||
"storage_template_settings_description": "Die Ordnerstruktur und den Dateinamen der hochgeladenen Datei verwalten",
|
||||
"storage_template_user_label": "<code>{label}</code> is das Speicher-Label des Benutzers",
|
||||
"storage_template_user_label": "<code>{label}</code> is die Speicherpfadbezeichnung des Benutzers",
|
||||
"system_settings": "Systemeinstellungen",
|
||||
"tag_cleanup_job": "Tags aufräumen",
|
||||
"theme_custom_css_settings": "Benutzerdefiniertes CSS",
|
||||
@@ -276,7 +287,7 @@
|
||||
"transcoding_hardware_acceleration": "Hardware-Beschleunigung",
|
||||
"transcoding_hardware_acceleration_description": "Experimentell; viel schneller, aber bei gleicher Bitrate mit geringerer Qualität",
|
||||
"transcoding_hardware_decoding": "Hardware-Dekodierung",
|
||||
"transcoding_hardware_decoding_setting_description": "Nur gültig für NVENC, QSV und RKMPP. Ermöglicht eine Ende-zu-Ende-Beschleunigung, anstatt nur die Codierung zu beschleunigen. Dies funktioniert möglicherweise nicht bei allen Videos.",
|
||||
"transcoding_hardware_decoding_setting_description": "Ermöglicht eine Ende-zu-Ende-Beschleunigung, anstatt nur die Codierung zu beschleunigen. Dies funktioniert möglicherweise nicht bei allen Videos.",
|
||||
"transcoding_hevc_codec": "HEVC-Codec",
|
||||
"transcoding_max_b_frames": "Maximale B-Frames",
|
||||
"transcoding_max_b_frames_description": "Höhere Werte verbessern die Komprimierungseffizienz, verlangsamen aber die Kodierung. Ist möglicherweise nicht mit der Hardware-Beschleunigung älterer Geräte kompatibel. 0 deaktiviert die B-Frames, während -1 diesen Wert automatisch setzt.",
|
||||
@@ -316,7 +327,7 @@
|
||||
"trash_settings": "Papierkorb-Einstellungen",
|
||||
"trash_settings_description": "Papierkorb-Einstellungen verwalten",
|
||||
"untracked_files": "Unverfolgte Dateien",
|
||||
"untracked_files_description": "Diese Dateien werden nicht von der Application getrackt. Sie können das Ergebnis fehlgeschlagener Verschiebungen, unterbrochener Uploads oder aufgrund eines Fehlers sein",
|
||||
"untracked_files_description": "Diese Dateien werden nicht von der Anwendung getrackt. Sie können das Ergebnis fehlgeschlagener Verschiebungen, unterbrochener Uploads oder aufgrund eines Fehlers sein",
|
||||
"user_cleanup_job": "Benutzer aufräumen",
|
||||
"user_delete_delay": "Das Konto und die Dateien von <b>{user}</b> werden in {delay, plural, one {einem Tag} other {# Tagen}} für eine permanente Löschung geplant.",
|
||||
"user_delete_delay_settings": "Verzögerung für das Löschen von Benutzern",
|
||||
@@ -349,12 +360,12 @@
|
||||
"album_added_notification_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn du zu einem freigegebenen Album hinzugefügt wurdest",
|
||||
"album_cover_updated": "Album-Cover aktualisiert",
|
||||
"album_delete_confirmation": "Bist du sicher, dass du das Album {album} löschen willst?",
|
||||
"album_delete_confirmation_description": "Wenn dieses Album geteilt wurde, können andere Benutzer nicht mehr darauf zugreifen.",
|
||||
"album_delete_confirmation_description": "Falls dieses Album geteilt wurde, können andere Benutzer nicht mehr darauf zugreifen.",
|
||||
"album_info_updated": "Album-Infos aktualisiert",
|
||||
"album_leave": "Album verlassen?",
|
||||
"album_leave_confirmation": "Bist du sicher, dass du das Album {album} verlassen willst?",
|
||||
"album_name": "Album Name",
|
||||
"album_options": "Album Optionen",
|
||||
"album_name": "Albumname",
|
||||
"album_options": "Albumoptionen",
|
||||
"album_remove_user": "Nutzer entfernen?",
|
||||
"album_remove_user_confirmation": "Bist du sicher, dass du {user} entfernen willst?",
|
||||
"album_share_no_users": "Es sieht so aus, als hättest du dieses Album mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.",
|
||||
@@ -362,7 +373,7 @@
|
||||
"album_updated_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn ein freigegebenes Album neue Dateien enthält",
|
||||
"album_user_left": "{album} verlassen",
|
||||
"album_user_removed": "{user} entfernt",
|
||||
"album_with_link_access": "Lass jeden mit dem Link Fotos und Personen in diesem Album sehen.",
|
||||
"album_with_link_access": "Lass jeden mit dem Link die Fotos und Personen in diesem Album sehen.",
|
||||
"albums": "Alben",
|
||||
"albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Alben}}",
|
||||
"all": "Alle",
|
||||
@@ -385,7 +396,7 @@
|
||||
"archive_size": "Archivgröße",
|
||||
"archive_size_description": "Archivgröße für Downloads konfigurieren (in GiB)",
|
||||
"archived": "Archiviert",
|
||||
"archived_count": "{count, plural, other {# Archiviert}}",
|
||||
"archived_count": "{count, plural, other {# archiviert}}",
|
||||
"are_these_the_same_person": "Ist das dieselbe Person?",
|
||||
"are_you_sure_to_do_this": "Bist du sicher, dass du das tun willst?",
|
||||
"asset_added_to_album": "Zum Album hinzugefügt",
|
||||
@@ -395,7 +406,7 @@
|
||||
"asset_has_unassigned_faces": "Datei hat nicht zugewiesene Gesichter",
|
||||
"asset_hashing": "Berechnung des Hashwerts...",
|
||||
"asset_offline": "Datei offline",
|
||||
"asset_offline_description": "Diese Datei ist nicht erreichbar. Immich kann nicht auf ihren Speicherort zugreifen. Bitte stelle sicher, dass die Datei verfügbar ist und scanne die Bibliothek erneut.",
|
||||
"asset_offline_description": "Diese externe Datei ist nicht mehr auf dem Datenträger vorhanden. Bitte wende dich an deinen Immich-Administrator, um Hilfe zu erhalten.",
|
||||
"asset_skipped": "Übersprungen",
|
||||
"asset_skipped_in_trash": "Im Papierkorb",
|
||||
"asset_uploaded": "Hochgeladen",
|
||||
@@ -403,28 +414,29 @@
|
||||
"assets": "Dateien",
|
||||
"assets_added_count": "{count, plural, one {# Datei} other {# Dateien}} hinzugefügt",
|
||||
"assets_added_to_album_count": "{count, plural, one {# Datei} other {# Dateien}} zum Album hinzugefügt",
|
||||
"assets_added_to_name_count": "{count, plural, one {# Element} other {# Elemente}} zu {hasName, select, true {<b>{name}</b>} other {neuen Album}} hinzugefügt",
|
||||
"assets_added_to_name_count": "{count, plural, one {# Element} other {# Elemente}} zu {hasName, select, true {<b>{name}</b>} other {neuem Album}} hinzugefügt",
|
||||
"assets_count": "{count, plural, one {# Datei} other {# Dateien}}",
|
||||
"assets_moved_to_trash": "{count, plural, one {# Datei} other {# Dateien}} in den Papierkorb verschoben",
|
||||
"assets_moved_to_trash_count": "{count, plural, one {# Datei} other {# Dateien}} in den Papierkorb verschoben",
|
||||
"assets_permanently_deleted_count": "{count, plural, one {# Datei} other {# Dateien}} dauerhaft gelöscht",
|
||||
"assets_removed_count": "{count, plural, one {# Datei} other {# Dateien}} entfernt",
|
||||
"assets_restore_confirmation": "Bist du sicher, dass du alle Dateien aus dem Papierkorb wiederherstellen willst? Diese Aktion kann nicht rückgängig gemacht werden!",
|
||||
"assets_restore_confirmation": "Bist du sicher, dass du alle Dateien aus dem Papierkorb wiederherstellen willst? Diese Aktion kann nicht rückgängig gemacht werden! Beachte, dass Offline-Dateien auf diese Weise nicht wiederhergestellt werden können.",
|
||||
"assets_restored_count": "{count, plural, one {# Datei} other {# Dateien}} wiederhergestellt",
|
||||
"assets_trashed_count": "{count, plural, one {# Datei} other {# Dateien}} in den Papierkorb verschoben",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {# Datei ist} other {# Dateien sind}} bereits im Album vorhanden",
|
||||
"authorized_devices": "Verwendete Geräte",
|
||||
"back": "Zurück",
|
||||
"back_close_deselect": "Zurück, Schließen oder Abwählen",
|
||||
"backward": "Zurück",
|
||||
"backward": "Rückwärts",
|
||||
"birthdate_saved": "Geburtsdatum erfolgreich gespeichert",
|
||||
"birthdate_set_description": "Das Geburtsdatum wird verwendet, um das Alter dieser Person zum Zeitpunkt eines Fotos zu berechnen.",
|
||||
"blurred_background": "Unscharfer Hintergrund",
|
||||
"bugs_and_feature_requests": "Fehler & Verbesserungsvorschläge",
|
||||
"build": "Build",
|
||||
"build_image": "Build Abbild",
|
||||
"bulk_delete_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien}} gemeinsam löschen möchtest? Dabei wird die größte Datei jeder Gruppe behalten und alle anderen Duplikate dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden!",
|
||||
"bulk_delete_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien gemeinsam}} löschen möchtest? Dabei wird die größte Datei jeder Gruppe behalten und alle anderen Duplikate dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden!",
|
||||
"bulk_keep_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien}} behalten möchtest? Dies wird alle Duplikat-Gruppen auflösen ohne etwas zu löschen.",
|
||||
"bulk_trash_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien}} gemeinsam in den Papierkorb verschieben möchtest? Dies wird die größte Datei jeder Gruppe behalten und alle anderen Duplikate in den Papierkorb verschieben.",
|
||||
"bulk_trash_duplicates_confirmation": "Bist du sicher, dass du {count, plural, one {# duplizierte Datei} other {# duplizierte Dateien gemeinsam}} in den Papierkorb verschieben möchtest? Dies wird die größte Datei jeder Gruppe behalten und alle anderen Duplikate in den Papierkorb verschieben.",
|
||||
"buy": "Immich erwerben",
|
||||
"camera": "Kamera",
|
||||
"camera_brand": "Kamera-Marke",
|
||||
@@ -443,7 +455,7 @@
|
||||
"change_location": "Ort ändern",
|
||||
"change_name": "Name ändern",
|
||||
"change_name_successfully": "Name wurde erfolgreich geändert",
|
||||
"change_password": "Passwort Ändern",
|
||||
"change_password": "Passwort ändern",
|
||||
"change_password_description": "Dies ist entweder das erste Mal, dass du dich im System anmeldest, oder es wurde eine Anfrage zur Änderung deines Passworts gestellt. Bitte gib unten dein neues Passwort ein.",
|
||||
"change_your_password": "Ändere dein Passwort",
|
||||
"changed_visibility_successfully": "Die Sichtbarkeit wurde erfolgreich geändert",
|
||||
@@ -459,11 +471,11 @@
|
||||
"clockwise": "Im Uhrzeigersinn",
|
||||
"close": "Schließen",
|
||||
"collapse": "Zusammenklappen",
|
||||
"collapse_all": "Alles aufklappen",
|
||||
"collapse_all": "Alle zusammenklappen",
|
||||
"color": "Farbe",
|
||||
"color_theme": "Farb-Theme",
|
||||
"comment_deleted": "Kommentar gelöscht",
|
||||
"comment_options": "Kommentar-Optionen",
|
||||
"comment_options": "Kommentaroptionen",
|
||||
"comments_and_likes": "Kommentare & Likes",
|
||||
"comments_are_disabled": "Kommentare sind deaktiviert",
|
||||
"confirm": "Bestätigen",
|
||||
@@ -474,7 +486,7 @@
|
||||
"context": "Kontext",
|
||||
"continue": "Fortsetzen",
|
||||
"copied_image_to_clipboard": "Das Bild wurde in die Zwischenablage kopiert.",
|
||||
"copied_to_clipboard": "In Zwischenablage kopiert!",
|
||||
"copied_to_clipboard": "In die Zwischenablage kopiert!",
|
||||
"copy_error": "Kopier-Fehler",
|
||||
"copy_file_path": "Dateipfad kopieren",
|
||||
"copy_image": "Bild kopieren",
|
||||
@@ -495,7 +507,7 @@
|
||||
"create_new_person_hint": "Ausgewählte Dateien einer neuen Person zuweisen",
|
||||
"create_new_user": "Neuen Nutzer erstellen",
|
||||
"create_tag": "Tag erstellen",
|
||||
"create_tag_description": "Erstelle einen neuen Tag. Für verschachtelte Tags, gib den gesamten Pfad inklusive Slash an.",
|
||||
"create_tag_description": "Erstelle einen neuen Tag. Für verschachtelte Tags, gib den gesamten Pfad inklusive Schrägstrich an.",
|
||||
"create_user": "Nutzer erstellen",
|
||||
"created": "Erstellt",
|
||||
"current_device": "Aktuelles Gerät",
|
||||
@@ -523,26 +535,29 @@
|
||||
"delete_tag_confirmation_prompt": "Bist du sicher, dass der Tag {tagName} gelöscht werden soll?",
|
||||
"delete_user": "Nutzer löschen",
|
||||
"deleted_shared_link": "Geteilten Link gelöscht",
|
||||
"deletes_missing_assets": "Löscht Dateien, die auf der Festplatte fehlen",
|
||||
"description": "Beschreibung",
|
||||
"details": "Details",
|
||||
"direction": "Richtung",
|
||||
"disabled": "Deaktiviert",
|
||||
"disallow_edits": "Bearbeitungen verbieten",
|
||||
"discord": "Discord",
|
||||
"discover": "Entdecken",
|
||||
"dismiss_all_errors": "Alle Fehler ignorieren",
|
||||
"dismiss_error": "Fehler ignorieren",
|
||||
"display_options": "Anzeigeoptionen",
|
||||
"display_order": "Anzeigereihenfolge",
|
||||
"display_original_photos": "Originale Fotos anzeigen",
|
||||
"display_original_photos_setting_description": "Bei der Anzeige eines Bildes wird bevorzugt das Originalfoto statt der Miniaturansicht angezeigt, sofern das Original webkompatibel ist. Dies kann zu einer langsameren Ladezeit der Fotos führen.",
|
||||
"display_original_photos_setting_description": "Bei der Anzeige eines Bildes wird bevorzugt das Originalfoto statt der Miniaturansicht angezeigt, sofern das Original webkompatibel ist. Dies kann zu einer längeren Ladezeit der Fotos führen.",
|
||||
"do_not_show_again": "Diese Nachricht nicht erneut anzeigen",
|
||||
"done": "Erledigt",
|
||||
"download": "Download",
|
||||
"documentation": "Dokumentation",
|
||||
"done": "Fertig",
|
||||
"download": "Herunterladen",
|
||||
"download_include_embedded_motion_videos": "Eingebettete Videos",
|
||||
"download_include_embedded_motion_videos_description": "Videos, die in Bewegungsfotos eingebettet sind, als separate Datei einfügen",
|
||||
"download_settings": "Download",
|
||||
"download_settings_description": "Einstellungen für den Dateidownload verwalten",
|
||||
"downloading": "Downloaden",
|
||||
"download_settings_description": "Einstellungen für das Herunterladen von Dateien verwalten",
|
||||
"downloading": "Herunterladen",
|
||||
"downloading_asset_filename": "Datei {filename} wird heruntergeladen",
|
||||
"drop_files_to_upload": "Lade Dateien hoch, indem du sie hierhin ziehst",
|
||||
"duplicates": "Duplikate",
|
||||
@@ -574,10 +589,10 @@
|
||||
"edit_user": "Nutzer bearbeiten",
|
||||
"edited": "Bearbeitet",
|
||||
"editor": "Bearbeiter",
|
||||
"editor_close_without_save_prompt": "Diese Änderungen werden nicht gespeichert",
|
||||
"editor_close_without_save_prompt": "Die Änderungen werden nicht gespeichert",
|
||||
"editor_close_without_save_title": "Editor schließen?",
|
||||
"editor_crop_tool_h2_aspect_ratios": "Seitenverhältnisse",
|
||||
"editor_crop_tool_h2_rotation": "Rotation",
|
||||
"editor_crop_tool_h2_rotation": "Drehung",
|
||||
"email": "E-Mail",
|
||||
"empty": "Leer",
|
||||
"empty_album": "Leeres Album",
|
||||
@@ -624,7 +639,7 @@
|
||||
"incorrect_email_or_password": "Ungültige E-Mail oder Passwort",
|
||||
"paths_validation_failed": "{paths, plural, one {# Pfad konnte} other {# Pfade konnten}} nicht validiert werden",
|
||||
"profile_picture_transparent_pixels": "Profilbilder dürfen keine transparenten Pixel haben. Bitte zoome heran und/oder verschiebe das Bild.",
|
||||
"quota_higher_than_disk_size": "Dein festgelegtes Kontingent ist grösser als der verfügbare Speicher",
|
||||
"quota_higher_than_disk_size": "Dein festgelegtes Kontingent ist größer als der verfügbare Speicher",
|
||||
"repair_unable_to_check_items": "{count, select, one {Eintrag konnte} other {Einträge konnten}} nicht überprüft werden",
|
||||
"unable_to_add_album_users": "Benutzer konnten nicht zum Album hinzugefügt werden",
|
||||
"unable_to_add_assets_to_shared_link": "Datei konnte nicht zum geteilten Link hinzugefügt werden",
|
||||
@@ -646,7 +661,7 @@
|
||||
"unable_to_complete_oauth_login": "OAuth-Anmeldung konnte nicht abgeschlossen werden",
|
||||
"unable_to_connect": "Verbindung konnte nicht hergestellt werden",
|
||||
"unable_to_connect_to_server": "Verbindung zum Server konnte nicht hergestellt werden",
|
||||
"unable_to_copy_to_clipboard": "Konnte nicht in die Zwischenablage kopieren, stelle sicher, dass du per https auf die Seite zugreiffst",
|
||||
"unable_to_copy_to_clipboard": "Konnte nicht in die Zwischenablage kopieren, stelle sicher, dass du per https auf die Seite zugreifst",
|
||||
"unable_to_create_admin_account": "Administratorkonto konnte nicht erstellt werden",
|
||||
"unable_to_create_api_key": "Es konnte kein API-Schlüssel erstellt werden",
|
||||
"unable_to_create_library": "Bibliothek konnte nicht erstellt werden",
|
||||
@@ -667,7 +682,7 @@
|
||||
"unable_to_get_comments_number": "Anzahl der Kommentare konnte nicht abgerufen werden",
|
||||
"unable_to_get_shared_link": "Fehler beim Abrufen des Freigabelinks",
|
||||
"unable_to_hide_person": "Person kann nicht versteckt werden",
|
||||
"unable_to_link_motion_video": "Bewegungsvideo kann nicht verlinkt werden",
|
||||
"unable_to_link_motion_video": "Bewegungsvideo kann nicht verknüpft werden",
|
||||
"unable_to_link_oauth_account": "OAuth-Konto kann nicht verknüpft werden",
|
||||
"unable_to_load_album": "Album kann nicht geladen werden",
|
||||
"unable_to_load_asset_activity": "Foto-Aktivität konnte nicht geladen werden",
|
||||
@@ -705,10 +720,10 @@
|
||||
"unable_to_scan_library": "Bibliothek konnte nicht gescannt werden",
|
||||
"unable_to_set_feature_photo": "Hauptfoto konnte nicht festgelegt werden",
|
||||
"unable_to_set_profile_picture": "Profilbild konnte nicht gesetzt werden",
|
||||
"unable_to_submit_job": "Auftrag konnte nicht übermittelt werden",
|
||||
"unable_to_submit_job": "Aufgabe konnte nicht eingereicht werden",
|
||||
"unable_to_trash_asset": "Objekte konnten nicht gelöscht werden",
|
||||
"unable_to_unlink_account": "Die Verknüpfung des Kontos kann nicht aufgehoben werden",
|
||||
"unable_to_unlink_motion_video": "Verlinkung zum Bewegungsvideo kann nicht aufgehoben werden",
|
||||
"unable_to_unlink_motion_video": "Verknüpfung zum Bewegungsvideo kann nicht aufgehoben werden",
|
||||
"unable_to_update_album_cover": "Album-Cover konnte nicht aktualisiert werden",
|
||||
"unable_to_update_album_info": "Album-Info konnte nicht aktualisiert werden",
|
||||
"unable_to_update_library": "Die Bibliothek konnte nicht aktualisiert werden",
|
||||
@@ -724,7 +739,7 @@
|
||||
"every_six_hours": "Alle 6 Stunden",
|
||||
"exif": "EXIF",
|
||||
"exit_slideshow": "Diashow beenden",
|
||||
"expand_all": "Alle erweitern",
|
||||
"expand_all": "Alle aufklappen",
|
||||
"expire_after": "Verfällt nach",
|
||||
"expired": "Verfallen",
|
||||
"expires_date": "Läuft am {date} ab",
|
||||
@@ -756,9 +771,9 @@
|
||||
"folders": "Ordner",
|
||||
"folders_feature_description": "Durchsuchen der Ordneransicht für Fotos und Videos im Dateisystem",
|
||||
"force_re-scan_library_files": "Erzwingen des erneuten Scannens aller Bibliotheksdateien",
|
||||
"forward": "Weiterleiten",
|
||||
"forward": "Vorwärts",
|
||||
"general": "Allgemein",
|
||||
"get_help": "Erhalte Hilfe",
|
||||
"get_help": "Hilfe erhalten",
|
||||
"getting_started": "Erste Schritte",
|
||||
"go_back": "Zurück",
|
||||
"go_to_search": "Zur Suche gehen",
|
||||
@@ -793,7 +808,7 @@
|
||||
"image_taken": "{isVideo, select, true {Video aufgenommen} other {Bild aufgenommen}}",
|
||||
"img": "Img",
|
||||
"immich_logo": "Immich-Logo",
|
||||
"immich_web_interface": "Immich Webschnittstelle",
|
||||
"immich_web_interface": "Immich-Web-Oberfläche",
|
||||
"import_from_json": "Aus JSON importieren",
|
||||
"import_path": "Importpfad",
|
||||
"in_albums": "In {count, plural, one {# Album} other {# Alben}}",
|
||||
@@ -804,10 +819,10 @@
|
||||
"individual_share": "Individuelle Freigabe",
|
||||
"info": "Info",
|
||||
"interval": {
|
||||
"day_at_onepm": "Täglich 13.00 Uhr",
|
||||
"day_at_onepm": "Täglich um 13:00 Uhr",
|
||||
"hours": "{hours, plural, one {Jede Stunde} other {Alle {hours, number} Stunden}}",
|
||||
"night_at_midnight": "Täglich um Mitternacht",
|
||||
"night_at_twoam": "Täglich Nachts um 2.00 Uhr"
|
||||
"night_at_twoam": "Täglich nachts um 2:00 Uhr"
|
||||
},
|
||||
"invite_people": "Personen einladen",
|
||||
"invite_to_album": "Zum Album einladen",
|
||||
@@ -854,7 +869,7 @@
|
||||
"license_trial_info_4": "Bitte erwäge den Kauf einer Lizenz, um die kontinuierliche Weiterentwicklung des Dienstes zu unterstützen",
|
||||
"light": "Hell",
|
||||
"like_deleted": "Like gelöscht",
|
||||
"link_motion_video": "Link Bewegungsvideo",
|
||||
"link_motion_video": "Bewegungsvideo verknüpfen",
|
||||
"link_options": "Link-Optionen",
|
||||
"link_to_oauth": "Link zu OAuth",
|
||||
"linked_oauth_account": "Verknüpftes OAuth-Konto",
|
||||
@@ -873,6 +888,7 @@
|
||||
"look": "Erscheinungsbild",
|
||||
"loop_videos": "Loop-Videos",
|
||||
"loop_videos_description": "Aktiviere diese Option, um eine automatische Videoschleife in der Detailansicht zu erstellen.",
|
||||
"main_branch_warning": "Du benutzt eine Entwicklungsversion. Wir empfehlen dringend, eine Release-Version zu verwenden!",
|
||||
"make": "Marke",
|
||||
"manage_shared_links": "Freigegebene Links verwalten",
|
||||
"manage_sharing_with_partners": "Gemeinsame Nutzung mit Partnern verwalten",
|
||||
@@ -882,8 +898,8 @@
|
||||
"manage_your_devices": "Deine eingeloggten Geräte verwalten",
|
||||
"manage_your_oauth_connection": "Deine OAuth-Verbindung verwalten",
|
||||
"map": "Karte",
|
||||
"map_marker_for_images": "Kartemarkierung für Bilder, die in {city}, {country} aufgenommen wurden",
|
||||
"map_marker_with_image": "Kartenmarker mit Bild",
|
||||
"map_marker_for_images": "Kartenmarkierung für Bilder, die in {city}, {country} aufgenommen wurden",
|
||||
"map_marker_with_image": "Kartenmarkierung mit Bild",
|
||||
"map_settings": "Karteneinstellungen",
|
||||
"matches": "Treffer",
|
||||
"media_type": "Medientyp",
|
||||
@@ -924,9 +940,9 @@
|
||||
"no_albums_yet": "Es sieht so aus, als hättest du noch keine Alben.",
|
||||
"no_archived_assets_message": "Archiviere Fotos und Videos, um sie aus deiner Fotoansicht zu entfernen",
|
||||
"no_assets_message": "KLICKE, UM DEIN ERSTES FOTO HOCHZULADEN",
|
||||
"no_duplicates_found": "Keine Duplikate wurden gefunden.",
|
||||
"no_exif_info_available": "Keine Exif-Informationen vorhanden",
|
||||
"no_explore_results_message": "Lade weitere Fotos hoch, um deine Sammlung zu vergrößern.",
|
||||
"no_duplicates_found": "Es wurden keine Duplikate gefunden.",
|
||||
"no_exif_info_available": "Keine EXIF-Informationen vorhanden",
|
||||
"no_explore_results_message": "Lade weitere Fotos hoch, um deine Sammlung zu erkunden.",
|
||||
"no_favorites_message": "Füge Favoriten hinzu, um deine besten Bilder und Videos schnell zu finden",
|
||||
"no_libraries_message": "Eine externe Bibliothek erstellen, um deine Fotos und Videos anzusehen",
|
||||
"no_name": "Kein Name",
|
||||
@@ -935,13 +951,14 @@
|
||||
"no_results_description": "Versuche es mit einem Synonym oder einem allgemeineren Stichwort",
|
||||
"no_shared_albums_message": "Erstelle ein Album, um Fotos und Videos mit Personen in deinem Netzwerk zu teilen",
|
||||
"not_in_any_album": "In keinem Album",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um ein Storage-Label zu verwenden, starte den",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um eine Speicherpfadbezeichnung anzuwenden, starte den",
|
||||
"note_unlimited_quota": "Hinweis: Verwende 0 für ein unlimitiertes Kontingent",
|
||||
"notes": "Notizen",
|
||||
"notification_toggle_setting_description": "E-Mail-Benachrichtigungen aktivieren",
|
||||
"notifications": "Benachrichtigungen",
|
||||
"notifications_setting_description": "Benachrichtigungen verwalten",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Offizielle Immich Quellen",
|
||||
"offline": "Offline",
|
||||
"offline_paths": "Offline-Pfade",
|
||||
"offline_paths_description": "Diese Ergebnisse können auf das manuelle Löschen von Dateien zurückzuführen sein, die nicht Teil einer externen Bibliothek sind.",
|
||||
@@ -963,7 +980,7 @@
|
||||
"organize_your_library": "Organisiere deine Bibliothek",
|
||||
"original": "Original",
|
||||
"other": "Sonstiges",
|
||||
"other_devices": "Sonstige Geräte",
|
||||
"other_devices": "Andere Geräte",
|
||||
"other_variables": "Sonstige Variablen",
|
||||
"owned": "Eigenes",
|
||||
"owner": "Besitzer",
|
||||
@@ -990,14 +1007,14 @@
|
||||
"pending": "Ausstehend",
|
||||
"people": "Personen",
|
||||
"people_edits_count": "{count, plural, one {# Person} other {# Personen}} bearbeitet",
|
||||
"people_feature_description": "Durchsuchen von Fotos und Videos nach Personen gruppiert",
|
||||
"people_feature_description": "Fotos und Videos nach Personen gruppiert durchsuchen",
|
||||
"people_sidebar_description": "Eine Verknüpfung zu Personen in der Seitenleiste anzeigen",
|
||||
"perform_library_tasks": "",
|
||||
"permanent_deletion_warning": "Warnung vor endgültiger Löschung",
|
||||
"permanent_deletion_warning_setting_description": "Anzeige einer Warnung beim permanenten Löschen von Objekten",
|
||||
"permanently_delete": "Dauerhaft löschen",
|
||||
"permanently_delete_assets_count": "{count, plural, one {Datei} other {Dateien}} dauerhaft gelöscht",
|
||||
"permanently_delete_assets_prompt": "Bist du sicher, dass {count, plural, one {diese Datei} other {diese <b>#</b> Dateien}} dauerhaft gelöscht werden soll? Dadurch werden diese auch aus deinen Alben entfernt.",
|
||||
"permanently_delete_assets_prompt": "Bist du sicher, dass {count, plural, one {diese Datei} other {diese <b>#</b> Dateien}} dauerhaft gelöscht werden soll? Dadurch {count, plural, one {wird} other {werden}} diese auch aus deinen Alben entfernt.",
|
||||
"permanently_deleted_asset": "Dauerhaft gelöschtes Objekt",
|
||||
"permanently_deleted_assets": "{count, plural, one {# Objekt} other {# Objekte}} dauerhaft gelöscht",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# Datei} other {# Dateien}} dauerhaft gelöscht",
|
||||
@@ -1008,13 +1025,13 @@
|
||||
"photos_and_videos": "Fotos & Videos",
|
||||
"photos_count": "{count, plural, one {{count, number} Foto} other {{count, number} Fotos}}",
|
||||
"photos_from_previous_years": "Fotos von vorherigen Jahren",
|
||||
"pick_a_location": "Wählen einen Ort",
|
||||
"pick_a_location": "Wähle einen Ort",
|
||||
"place": "Ort",
|
||||
"places": "Orte",
|
||||
"play": "Abspielen",
|
||||
"play_memories": "Erinnerungen abspielen",
|
||||
"play_motion_photo": "Bewegte Bilder abspielen",
|
||||
"play_or_pause_video": "Video Abspielen oder Pausieren",
|
||||
"play_or_pause_video": "Video abspielen oder pausieren",
|
||||
"point": "Hinweis",
|
||||
"port": "Port",
|
||||
"preset": "Voreinstellung",
|
||||
@@ -1027,7 +1044,7 @@
|
||||
"profile_image_of_user": "Profilbild von {user}",
|
||||
"profile_picture_set": "Profilbild gesetzt.",
|
||||
"public_album": "Öffentliches Album",
|
||||
"public_share": "Öffentliche Teilung",
|
||||
"public_share": "Öffentliche Freigabe",
|
||||
"purchase_account_info": "Unterstützer",
|
||||
"purchase_activated_subtitle": "Danke für die Unterstützung von Immich und Open-Source Software",
|
||||
"purchase_activated_time": "Aktiviert am {date, date}",
|
||||
@@ -1044,22 +1061,22 @@
|
||||
"purchase_individual_description_2": "Unterstützerstatus",
|
||||
"purchase_individual_title": "Einzelperson",
|
||||
"purchase_input_suggestion": "Besitzen Sie bereits einen Produktschlüssel? Bitte geben Sie diesen unten ein",
|
||||
"purchase_license_subtitle": "Kaufe Immich um eine fortlaufende Entwicklung zu unterstützen",
|
||||
"purchase_license_subtitle": "Kaufe Immich, um die fortlaufende Entwicklung zu unterstützen",
|
||||
"purchase_lifetime_description": "Lebenslange Gültigkeit",
|
||||
"purchase_option_title": "KAUF OPTIONEN",
|
||||
"purchase_panel_info_1": "Die Entwicklung von Immich erfordert viel Zeit und Mühe, und wir haben Vollzeit- Entwickler, die so gut wie möglich daran arbeiten. Unser Ziel ist es, dass Open-Source-Software und moralische Geschäftsmethoden zu einer nachhaltigen Einkommensquelle für Entwickler werden und ein datenschutzfreundliches Ökosystem mit echten Alternativen zu ausbeuterischen Cloud-Diensten geschaffen wird.",
|
||||
"purchase_panel_info_2": "Weil wir davon überzeugt sind keine Paywalls zu haben, wird dieser Kauf keine zusätzlichen Funktionen in Immich freischalten. Wir verlassen uns auf Nutzende wie dich, um Entwicklung von Immich zu unterstützen.",
|
||||
"purchase_option_title": "KAUFOPTIONEN",
|
||||
"purchase_panel_info_1": "Die Entwicklung von Immich erfordert viel Zeit und Mühe, und wir haben Vollzeit-Entwickler, die daran arbeiten es möglichst perfekt zu machen. Unser Ziel ist es, dass Open-Source-Software und moralische Geschäftsmethoden zu einer nachhaltigen Einkommensquelle für Entwickler werden und ein datenschutzfreundliches Ökosystem mit echten Alternativen zu ausbeuterischen Cloud-Diensten geschaffen wird.",
|
||||
"purchase_panel_info_2": "Weil wir davon überzeugt sind keine Paywalls zu haben, wird dieser Kauf keine zusätzlichen Funktionen in Immich freischalten. Wir verlassen uns auf Nutzende wie dich, um die Entwicklung von Immich zu unterstützen.",
|
||||
"purchase_panel_title": "Das Projekt unterstützen",
|
||||
"purchase_per_server": "Pro Server",
|
||||
"purchase_per_user": "Pro Benutzer",
|
||||
"purchase_remove_product_key": "Produktschlüssel entfernen",
|
||||
"purchase_remove_product_key_prompt": "Sicher, dass der Produktschlüssel entfernt werden soll?",
|
||||
"purchase_remove_server_product_key": "Server Produktschlüssel entfernen",
|
||||
"purchase_remove_server_product_key_prompt": "Sicher, dass der Server Produktschlüssel entfernt werden soll?",
|
||||
"purchase_remove_server_product_key": "Server-Produktschlüssel entfernen",
|
||||
"purchase_remove_server_product_key_prompt": "Sicher, dass der Server-Produktschlüssel entfernt werden soll?",
|
||||
"purchase_server_description_1": "Für den gesamten Server",
|
||||
"purchase_server_description_2": "Unterstützerstatus",
|
||||
"purchase_server_title": "Server",
|
||||
"purchase_settings_server_activated": "Der Server Produktschlüssel wird durch den Administrator verwaltet",
|
||||
"purchase_settings_server_activated": "Der Server-Produktschlüssel wird durch den Administrator verwaltet",
|
||||
"range": "Reichweite",
|
||||
"rating": "Bewertung",
|
||||
"rating_clear": "Bewertung löschen",
|
||||
@@ -1069,18 +1086,20 @@
|
||||
"reaction_options": "Reaktionsmöglichkeiten",
|
||||
"read_changelog": "Changelog lesen",
|
||||
"reassign": "Neu zuweisen",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# Datei} other {# Dateien}} wurden {name, select, null {einer vorhandenen Person} other {{name}}} zugewiesen",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# Datei} other {# Dateien}} wurden einer neuen Person zugewiesen",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# Datei wurde} other {# Dateien wurden}} {name, select, null {einer vorhandenen Person} other {{name}}} zugewiesen",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# Datei wurde} other {# Dateien wurden}} einer neuen Person zugewiesen",
|
||||
"reassing_hint": "Markierte Dateien einer vorhandenen Person zuweisen",
|
||||
"recent": "Neuste",
|
||||
"recent_searches": "Letzte Suchen",
|
||||
"refresh": "Aktualisieren",
|
||||
"refresh_encoded_videos": "Codierte Videos aktualisieren",
|
||||
"refresh_encoded_videos": "Kodierte Videos aktualisieren",
|
||||
"refresh_faces": "Gesichter aktualisieren",
|
||||
"refresh_metadata": "Metadaten aktualisieren",
|
||||
"refresh_thumbnails": "Miniaturansichten aktualisieren",
|
||||
"refreshed": "Aktualisiert",
|
||||
"refreshes_every_file": "Jede Datei aktualisieren",
|
||||
"refreshing_encoded_video": "Codierte Videos werden aktualisiert",
|
||||
"refreshes_every_file": "Alle bestehenden und neuen Dateien erneut einlesen",
|
||||
"refreshing_encoded_video": "Kodierte Videos werden aktualisiert",
|
||||
"refreshing_faces": "Gesichter werden aktualisiert",
|
||||
"refreshing_metadata": "Metadaten werden aktualisiert",
|
||||
"regenerating_thumbnails": "Miniaturansichten werden neu erstellt",
|
||||
"remove": "Entfernen",
|
||||
@@ -1091,12 +1110,12 @@
|
||||
"remove_deleted_assets": "Offline-Dateien entfernen",
|
||||
"remove_from_album": "Aus Album entfernen",
|
||||
"remove_from_favorites": "Aus Favoriten entfernen",
|
||||
"remove_from_shared_link": "Aus geteilten Link entfernen",
|
||||
"remove_from_shared_link": "Aus geteiltem Link entfernen",
|
||||
"remove_user": "Nutzer entfernen",
|
||||
"removed_api_key": "API-Schlüssel {name} wurde entfernt",
|
||||
"removed_from_archive": "Aus dem Archiv entfernt",
|
||||
"removed_from_favorites": "Von Favoriten entfernt",
|
||||
"removed_from_favorites_count": "{count, plural, other {#}} von Favoriten entfernt",
|
||||
"removed_from_favorites": "Aus den Favoriten entfernt",
|
||||
"removed_from_favorites_count": "{count, plural, other {#}} aus den Favoriten entfernt",
|
||||
"removed_tagged_assets": "Tag von {count, plural, one {# Datei} other {# Dateien}} entfernt",
|
||||
"rename": "Umbenennen",
|
||||
"repair": "Reparatur",
|
||||
@@ -1129,6 +1148,7 @@
|
||||
"say_something": "Etwas sagen",
|
||||
"scan_all_libraries": "Alle Bibliotheken scannen",
|
||||
"scan_all_library_files": "Alle Bibliotheksdateien erneut scannen",
|
||||
"scan_library": "Scannen",
|
||||
"scan_new_library_files": "Neue Bibliotheksdateien scannen",
|
||||
"scan_settings": "Scan-Einstellungen",
|
||||
"scanning_for_album": "Nach Alben scannen...",
|
||||
@@ -1167,14 +1187,14 @@
|
||||
"select_library_owner": "Bibliotheksbesitzer auswählen",
|
||||
"select_new_face": "Neues Gesicht auswählen",
|
||||
"select_photos": "Fotos auswählen",
|
||||
"select_trash_all": "Alle Löschen",
|
||||
"select_trash_all": "Alle löschen",
|
||||
"selected": "Ausgewählt",
|
||||
"selected_count": "{count, plural, other {# ausgewählt}}",
|
||||
"send_message": "Nachricht senden",
|
||||
"send_welcome_email": "Begrüssungsmail senden",
|
||||
"server": "Server",
|
||||
"server_offline": "Server Offline",
|
||||
"server_online": "Server Online",
|
||||
"server_offline": "Server offline",
|
||||
"server_online": "Server online",
|
||||
"server_stats": "Server-Statistiken",
|
||||
"server_version": "Server-Version",
|
||||
"set": "Speichern",
|
||||
@@ -1189,7 +1209,7 @@
|
||||
"shared": "Geteilt",
|
||||
"shared_by": "Geteilt von",
|
||||
"shared_by_user": "Von {user} geteilt",
|
||||
"shared_by_you": "Geteilt von dir",
|
||||
"shared_by_you": "Von dir geteilt",
|
||||
"shared_from_partner": "Fotos von {partner}",
|
||||
"shared_link_options": "Optionen für geteilten Link",
|
||||
"shared_links": "Geteilte Links",
|
||||
@@ -1207,7 +1227,7 @@
|
||||
"show_gallery": "Galerie anzeigen",
|
||||
"show_hidden_people": "Ausgeblendete Personen anzeigen",
|
||||
"show_in_timeline": "In Zeitleiste anzeigen",
|
||||
"show_in_timeline_setting_description": "Fotos und Videos dieses Benutzers in deiner Timeline anzeigen",
|
||||
"show_in_timeline_setting_description": "Fotos und Videos dieses Benutzers in deiner Zeitleiste anzeigen",
|
||||
"show_keyboard_shortcuts": "Tastaturkürzel anzeigen",
|
||||
"show_metadata": "Metadaten anzeigen",
|
||||
"show_or_hide_info": "Informationen ein- oder ausblenden",
|
||||
@@ -1215,11 +1235,12 @@
|
||||
"show_person_options": "Personen-Optionen anzeigen",
|
||||
"show_progress_bar": "Fortschrittsbalken anzeigen",
|
||||
"show_search_options": "Suchoptionen anzeigen",
|
||||
"show_slideshow_transition": "Slideshow-Übergang anzeigen",
|
||||
"show_supporter_badge": "Unterstützerabzeichen",
|
||||
"show_supporter_badge_description": "Zeige Unterstützerabzeichen",
|
||||
"shuffle": "Durchmischen",
|
||||
"sidebar": "Seitenleiste",
|
||||
"sidebar_display_description": "Zeigt einen Link zu der Ansicht in der Seitenleiste an",
|
||||
"sidebar_display_description": "Zeige einen Link zu der Ansicht in der Seitenleiste an",
|
||||
"sign_out": "Abmelden",
|
||||
"sign_up": "Registrieren",
|
||||
"size": "Größe",
|
||||
@@ -1227,7 +1248,7 @@
|
||||
"skip_to_folders": "Springe zu Ordnern",
|
||||
"skip_to_tags": "Springe zu Tags",
|
||||
"slideshow": "Diashow",
|
||||
"slideshow_settings": "Diashow Einstellungen",
|
||||
"slideshow_settings": "Diashow-Einstellungen",
|
||||
"sort_albums_by": "Alben sortieren nach...",
|
||||
"sort_created": "Erstellungsdatum",
|
||||
"sort_items": "Anzahl der Einträge",
|
||||
@@ -1235,7 +1256,7 @@
|
||||
"sort_oldest": "Ältestes Foto",
|
||||
"sort_recent": "Neustes Foto",
|
||||
"sort_title": "Titel",
|
||||
"source": "Quelle",
|
||||
"source": "Quellcode",
|
||||
"stack": "Stapel",
|
||||
"stack_duplicates": "Duplikate stapeln",
|
||||
"stack_select_one_photo": "Hauptfoto für den Stapel auswählen",
|
||||
@@ -1250,19 +1271,22 @@
|
||||
"stop_photo_sharing": "Deine Fotos nicht mehr teilen?",
|
||||
"stop_photo_sharing_description": "{partner} wird keinen Zugriff mehr auf deine Fotos haben.",
|
||||
"stop_sharing_photos_with_user": "Aufhören Fotos mit diesem Benutzer zu teilen",
|
||||
"storage": "Speicher",
|
||||
"storage": "Speicherplatz",
|
||||
"storage_label": "Speicherpfad",
|
||||
"storage_usage": "{used} von {available} verwendet",
|
||||
"submit": "Bestätigen",
|
||||
"suggestions": "Vorschläge",
|
||||
"sunrise_on_the_beach": "Sonnenaufgang am Strand",
|
||||
"support": "Unterstützung",
|
||||
"support_and_feedback": "Unterstützung & Feedback",
|
||||
"support_third_party_description": "Deine Immich-Installation wurde von einem Drittanbieter zusammengestellt. Probleme, die bei dir auftreten, können durch dieses Paket verursacht werden. Bitte wende dich daher in erster Linie an diesen Anbieter, indem du die unten stehenden Links verwendest.",
|
||||
"swap_merge_direction": "Vertauschen der Zusammenführungsrichtung",
|
||||
"sync": "Synchronisieren",
|
||||
"tag": "Tag",
|
||||
"tag_assets": "Dateien taggen",
|
||||
"tag_created": "Tag erstellt: {tag}",
|
||||
"tag_feature_description": "Durchsuchen von Fotos und Videos, gruppiert nach logischen Tag-Themen",
|
||||
"tag_not_found_question": "Kein Tag zu finden? Erstelle einen <link>hier</link>",
|
||||
"tag_not_found_question": "Kein Tag zu finden? <link>Erstelle einen neuen Tag.</link>",
|
||||
"tag_updated": "Tag aktualisiert: {tag}",
|
||||
"tagged_assets": "{count, plural, one {# Datei} other {# Dateien}} getagged",
|
||||
"tags": "Tags",
|
||||
@@ -1271,6 +1295,7 @@
|
||||
"theme_selection": "Themenauswahl",
|
||||
"theme_selection_description": "Automatische Einstellung des Themes auf Hell oder Dunkel, je nach Systemeinstellung des Browsers",
|
||||
"they_will_be_merged_together": "Sie werden zusammengeführt",
|
||||
"third_party_resources": "Drittanbieter-Quellen",
|
||||
"time_based_memories": "Zeitbasierte Erinnerungen",
|
||||
"timezone": "Zeitzone",
|
||||
"to_archive": "Archivieren",
|
||||
@@ -1279,33 +1304,33 @@
|
||||
"to_login": "Anmelden",
|
||||
"to_parent": "Gehe zum Übergeordneten",
|
||||
"to_root": "Zur Wurzel",
|
||||
"to_trash": "Zum Papierkorb verschieben",
|
||||
"to_trash": "In den Papierkorb verschieben",
|
||||
"toggle_settings": "Einstellungen umschalten",
|
||||
"toggle_theme": "Dunkles Theme umschalten",
|
||||
"toggle_visibility": "Sichtbarkeit umschalten",
|
||||
"total_usage": "Gesamtnutzung",
|
||||
"trash": "Papierkorb",
|
||||
"trash_all": "Alles im Papierkorb",
|
||||
"trash_all": "Alle löschen",
|
||||
"trash_count": "Papierkorb {count, number}",
|
||||
"trash_delete_asset": "Datei löschen/in den Papierkorb verschieben",
|
||||
"trash_no_results_message": "Gelöschte Fotos und Videos werden hier angezeigt.",
|
||||
"trashed_items_will_be_permanently_deleted_after": "Gelöschte Objekte werden nach {days, plural, one {# Tag} other {# Tagen}} endgültig gelöscht.",
|
||||
"type": "Typ",
|
||||
"unarchive": "Unarchivieren",
|
||||
"unarchive": "Entarchivieren",
|
||||
"unarchived": "Unarchiviert",
|
||||
"unarchived_count": "{count, plural, other {# Entarchiviert}}",
|
||||
"unarchived_count": "{count, plural, other {# entarchiviert}}",
|
||||
"unfavorite": "Entfavorisieren",
|
||||
"unhide_person": "Person einblenden",
|
||||
"unknown": "Unbekannt",
|
||||
"unknown_album": "Unbekanntes Album",
|
||||
"unknown_year": "Unbekanntes Jahr",
|
||||
"unlimited": "Unlimitiert",
|
||||
"unlink_motion_video": "Verlinkung zum Bewegungsvideo aufheben",
|
||||
"unlink_motion_video": "Verknüpfung zum Bewegungsvideo aufheben",
|
||||
"unlink_oauth": "OAuth entfernen",
|
||||
"unlinked_oauth_account": "Nicht verknüpftes OAuth-Konto",
|
||||
"unnamed_album": "Unbenanntes Album",
|
||||
"unnamed_album_delete_confirmation": "Bist du sicher, dass du dieses Album löschen willst?",
|
||||
"unnamed_share": "Unbenannte Teilung",
|
||||
"unnamed_share": "Unbenannte Freigabe",
|
||||
"unsaved_change": "Ungespeicherte Änderung",
|
||||
"unselect_all": "Alles abwählen",
|
||||
"unselect_all_duplicates": "Alle Duplikate abwählen",
|
||||
@@ -1317,7 +1342,7 @@
|
||||
"updated_password": "Passwort aktualisiert",
|
||||
"upload": "Hochladen",
|
||||
"upload_concurrency": "Parallelität beim Hochladen",
|
||||
"upload_errors": "Hochladen abgeschlossen mit {count, plural, one {# Fehler} other {# Fehlern}}, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.",
|
||||
"upload_errors": "Hochladen mit {count, plural, one {# Fehler} other {# Fehlern}} abgeschlossen, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.",
|
||||
"upload_progress": "{remaining, number} verbleibend - {processed, number}/{total, number} verarbeitet",
|
||||
"upload_skipped_duplicates": "{count, plural, one {# doppelte Datei} other {# doppelte Dateien}} ausgelassen",
|
||||
"upload_status_duplicates": "Duplikate",
|
||||
@@ -1344,6 +1369,8 @@
|
||||
"version": "Version",
|
||||
"version_announcement_closing": "Dein Freund, Alex",
|
||||
"version_announcement_message": "Hallo Freund, es gibt eine neue Version dieser Anwendung. Bitte nimm dir Zeit, die <link>Versionshinweise</link> zu lesen und stelle sicher, dass deine <code>docker-compose.yml</code>- und <code>.env</code>-Konfiguration auf dem neuesten Stand ist, um Fehlkonfigurationen zu vermeiden, insbesondere wenn du WatchTower oder ein anderes Verfahren verwendest, das deine Anwendung automatisch aktualisiert.",
|
||||
"version_history": "Versionshistorie",
|
||||
"version_history_item": "{version} am {date} installiert",
|
||||
"video": "Video",
|
||||
"video_hover_setting": "Videovorschau beim Hovern abspielen",
|
||||
"video_hover_setting_description": "Video-Miniaturansicht wiedergeben, wenn der Mauszeiger über dem Element verweilt. Auch wenn diese Funktion deaktiviert ist, kann die Wiedergabe gestartet werden, indem der Mauszeiger auf das Wiedergabesymbol bewegt wird.",
|
||||
@@ -1360,7 +1387,7 @@
|
||||
"view_stack": "Stapel anzeigen",
|
||||
"viewer": "Zuschauer",
|
||||
"visibility_changed": "Sichtbarkeit für {count, plural, one {# Person} other {# Personen}} geändert",
|
||||
"waiting": "Warte",
|
||||
"waiting": "Wartend",
|
||||
"warning": "Warnung",
|
||||
"week": "Woche",
|
||||
"welcome": "Willkommen",
|
||||
@@ -7,10 +7,11 @@
|
||||
"actions": "Ενέργειες",
|
||||
"active": "Ενεργά",
|
||||
"activity": "Δραστηριότητα",
|
||||
"activity_changed": "Η δραστηριότητα είναι {enabled, select, true {ενεργοποιημένη} other {απενεργοποιημένη}}",
|
||||
"add": "Προσθήκη",
|
||||
"add_a_description": "Προσθήκη περιγραφής",
|
||||
"add_a_location": "Προσθήκη μιας τοποθεσίας",
|
||||
"add_a_name": "Προσθήκη Ονόματος",
|
||||
"add_a_name": "Προσθήκη ονόματος",
|
||||
"add_a_title": "Προσθήκη τίτλου",
|
||||
"add_exclusion_pattern": "Προσθήκη προτύπου αποκλεισμού",
|
||||
"add_import_path": "Προσθήκη διαδρομής εισαγωγής",
|
||||
@@ -27,6 +28,7 @@
|
||||
"added_to_favorites_count": "Προστέθηκαν {count, number} στα αγαπημένα",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Προσθέστε πρότυπα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί μία απόλυτη διαδρομή, χρησιμοποιήστε \"/path/to/ignore/**\".",
|
||||
"asset_offline_description": "Αυτό το στοιχείο εξωτερικής βιβλιοθήκης δε βρίσκεται πλέον στο δίσκο και έχει μεταφερθεί στα σκουπίδια. Εάν το αρχείο έχει μετακινηθεί εντός της βιβλιοθήκης, ελέγξτε το χρονοδιάγραμμα σας για το νέο αντίστοιχο στοιχείο. Για να επαναφέρετε αυτό το στοιχείο, βεβαιωθείτε ότι το παρακάτω μονοπάτι αρχείου είναι προσβάσιμο από το Immich και ότι μπορεί να σαρώσει τη βιβλιοθήκη.",
|
||||
"authentication_settings": "Ρυθμίσεις ελέγχου ταυτότητας",
|
||||
"authentication_settings_description": "Διαχείριση κωδικού πρόσβασης, OAuth και άλλες ρυθμίσεις ελέγχου ταυτότητας",
|
||||
"authentication_settings_disable_all": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε όλες τις μεθόδους σύνδεσης; Η σύνδεση θα απενεργοποιηθεί πλήρως.",
|
||||
@@ -40,39 +42,50 @@
|
||||
"confirm_email_below": "Για επιβεβαίωση, πληκτρολογήστε \"{email}\" παρακάτω",
|
||||
"confirm_reprocess_all_faces": "Είστε βέβαιοι ότι θέλετε να επεξεργαστείτε ξανά όλα τα πρόσωπα; Αυτό θα διαγράψει επίσης άτομα με όνομα.",
|
||||
"confirm_user_password_reset": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη {user};",
|
||||
"create_job": "Δημιουργία εργασίας",
|
||||
"disable_login": "Απενεργοποίηση σύνδεσης κατά την είσοδο",
|
||||
"duplicate_detection_job_description": "Εκτελέστε τη εκμάθηση μηχανής σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση",
|
||||
"exclusion_pattern_description": "Τα πρότυπα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία κκαι φακέλους όσο σαρώνεται η βιβλιοθήκη. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισαγάγετε, όπως αρχεία RAW.",
|
||||
"external_library_created_at": "Εξωτερική βιβλιοθήκη (δημιουργήθηκε {date})",
|
||||
"external_library_management": "Διαχείριση Εξωτερικών Βιβλιοθηκών",
|
||||
"face_detection": "Αναγνώριση προσώπου",
|
||||
"face_detection_description": "Εντοπίστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική εκμάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Όλα\" επεξεργάζεται εκ νέου όλα τα στοιχεία. Η επιλογή \"Όσα Λείπουν\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.",
|
||||
"facial_recognition_job_description": "Ομαδοποιήστε εντοπισμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση προσώπου. Η επιλογή \"Όλα\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Όσα Λείπουν\" ομαδοποιεί πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.",
|
||||
"face_detection_description": "Εντοπίστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική εκμάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Ανανέωση\" επεξεργάζεται εκ νέου όλα τα στοιχεία και η επιλογή \"Επαναφορά\", επιπλέον επαναφέρει ολα τα δεδομένα προσώπου. Η επιλογή \"Όσα Λείπουν\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.",
|
||||
"facial_recognition_job_description": "Ομαδοποιήστε εντοπισμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση προσώπου. Η επιλογή \"Επαναφορά\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Όσα Λείπουν\" ομαδοποιεί πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.",
|
||||
"failed_job_command": "Η Εντολή {command} απέτυχε για την εργασία: {job}",
|
||||
"force_delete_user_warning": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό θα αφαιρέσει άμεσα το χρήστη και όλα τα στοιχεία. Αυτό δεν μπορεί να αναιρεθεί και τα αρχεία δεν μπορούν να ανακτηθούν.",
|
||||
"forcing_refresh_library_files": "Επιβολή ανανέωσης όλων των αρχείων της βιβλιοθήκης",
|
||||
"image_format": "Μορφή",
|
||||
"image_format_description": "Η μορφή WebP παράγει μικρότερα αρχεία από τη μορφή JPEG, αλλά είναι πιο αργή στην κωδικοποίηση.",
|
||||
"image_prefer_embedded_preview": "Προτίμηση ενσωματωμένης προεπισκόπησης",
|
||||
"image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως εισαγωγή στην επεξεργασία εικόνας όταν είναι διαθέσιμο. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρωματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερα μπιμπίκια λόγω συμπίεσης.",
|
||||
"image_prefer_wide_gamut": "Προτίμηση ευρείας γκάμας",
|
||||
"image_prefer_wide_gamut_setting_description": "Χρησιμοποιήστε Display P3 για τις μικρογραφίες. Αυτό διατηρεί την ζωντάνια των χρωμάτων σε εικόνες μεγάλου χρωματικού εύρους, αλλά ενδέχεται να εμφανίζονται αλλιώς σε παλαιότερες συσκευές με παλαιότερες εκδόσεις περιηγητών. Οι εικόνες sRGB μένουν ως έχουν για να αποφευχθούν χρωματικές αλλαγές.",
|
||||
"image_preview_description": "Μεσαίου μεγέθους εικόνες, χωρίς μεταδεδομένα, οι οποίες χρησιμοποιύνται όταν γίνεται θέαση ενός αντικειμένου και για μηχανική μάθηση",
|
||||
"image_preview_format": "Μορφή προεπισκόπησης",
|
||||
"image_preview_quality_description": "Ποιότητα προεπισκόπησης, απο 1-100. Μεγαλύτερες τιμές είναι καλύτερες, αλλά παράγουν μεγαλύτερα αρχεία που μπορεί να μειώσουν την ταχύτητα της εφαρμογής. Χαμηλές τιμές μπορεί να επηρεάσουν τη ποιότητα του machine learning.",
|
||||
"image_preview_resolution": "Ανάλυση προεπισκόπησης",
|
||||
"image_preview_resolution_description": "Χρησιμοποιείται κατά την προβολή μιας φωτογραφίας και για μηχανική εκμάθηση. Οι υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
||||
"image_preview_title": "Ρυθμίσεις προεπισκόπισης",
|
||||
"image_quality": "Ποιότητα",
|
||||
"image_quality_description": "Ποιότητα εικόνας από 1-100. Μεγαλύτερη τιμή σημαίνει καλύτερη ποιότητα, αλλά παράγει μεγαλύτερα αρχεία. Αυτή η επιλογή επηρεάζει τις εικόνες προεπισκόπησης και μικρογραφιών.",
|
||||
"image_resolution": "Ανάλυση",
|
||||
"image_resolution_description": "Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
||||
"image_settings": "Ρυθμίσεις Εικόνας",
|
||||
"image_settings_description": "Διαχείριση της ποιότητας και της ανάλυσης των εικόνων που δημιουργούνται",
|
||||
"image_thumbnail_description": "Μικρό εικονίδιο χωρίς μεταδεδομένα, χρησιμοποιείται όταν γίνεται θέαση ομάδας φωτογραφιών, όπως η κύρια χρονογραμμή",
|
||||
"image_thumbnail_format": "Μορφή μικρογραφίας",
|
||||
"image_thumbnail_quality_description": "Ποιότητα μικρογραφίας, απο 1-100. Μεγαλύτερες τιμές είναι καλύτερες, αλλά παράγουν μεγαλύτερα αρχεία που μπορεί να μειώσουν την ταχύτητα της εφαρμογής.",
|
||||
"image_thumbnail_resolution": "Ανάλυση μικρογραφίας",
|
||||
"image_thumbnail_resolution_description": "Χρησιμοποιείται κατά την προβολή ομάδων φωτογραφιών (κύριο χρονολόγιο, προβολή άλμπουμ κλπ.). Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
||||
"image_thumbnail_title": "Ρυθμίσεις μικρογραφίας",
|
||||
"job_concurrency": "{job} συγχρονισμός",
|
||||
"job_created": "Εργασία δημιουργήθηκε",
|
||||
"job_not_concurrency_safe": "Αυτή η εργασία δεν είναι ασφαλής για ταυτόχρονη εκτέλεση.",
|
||||
"job_settings": "Ρυθμίσεις Εργασιών",
|
||||
"job_settings_description": "Διαχείρηση ταυτόχρονων εργασιών",
|
||||
"job_settings_description": "Διαχείριση ταυτόχρονων εργασιών",
|
||||
"job_status": "Κατάσταση Εργασιών",
|
||||
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
|
||||
"jobs_failed": "{jobCount, plural, other {# failed}}",
|
||||
"jobs_delayed": "{jobCount, plural, one {# καθυστέρησε} other {# καθυστέρησαν}}",
|
||||
"jobs_failed": "{jobCount, plural, one {# απέτυχε} other {# απέτυχαν}}",
|
||||
"library_created": "Δημιουργήθηκε η βιβλιοθήκη: {library}",
|
||||
"library_cron_expression": "Εκφράσεις Cron",
|
||||
"library_cron_expression_description": "Ορισμός των διαστημάτων μεταξύ των σαρώσεων με χρήση cron μορφής. Για περισσότερες πληροφορίες παρακαλώ επισκεφθείτε το π.χ. <link>Crontab Guru</link>",
|
||||
@@ -92,8 +105,11 @@
|
||||
"logging_level_description": "Όταν είναι ενεργοποιημένο, τι επίπεδο καταγραφής να εφαρμοστεί.",
|
||||
"logging_settings": "Καταγραφή",
|
||||
"machine_learning_clip_model": "Μοντέλο CLIP",
|
||||
"machine_learning_clip_model_description": "The name of a CLIP model listed <link>here</link>. Note that you must re-run the 'Smart Search' job for all images upon changing a model.",
|
||||
"machine_learning_duplicate_detection": "Εντοπισμός Διπλότυπων",
|
||||
"machine_learning_duplicate_detection_enabled": "Ενεργοποίηση εντοπισμού διπλότυπων",
|
||||
"machine_learning_duplicate_detection_enabled_description": "Εάν απενεργοποιηθεί, θα υπάρξει και πάλι εκκαθάριση των ταυτόσημων στοιχείων.",
|
||||
"machine_learning_duplicate_detection_setting_description": "Use CLIP embeddings to find likely duplicates",
|
||||
"machine_learning_enabled": "Ενεργοποίηση μηχανικής εκμάθησης",
|
||||
"machine_learning_enabled_description": "Εάν απενεργοποιηθεί, όλες οι λειτουργίες μηχανικής εκμάθησης θα απενεργοποιηθούν, ανεξάρτητα από τις παρακάτω ρυθμίσεις.",
|
||||
"machine_learning_facial_recognition": "Αναγνώριση προσώπου",
|
||||
@@ -117,16 +133,68 @@
|
||||
"machine_learning_smart_search_enabled": "Ενεργοποίηση έξυπνης αναζήτησης",
|
||||
"machine_learning_smart_search_enabled_description": "Αν απενεργοποιηθεί, οι εικόνες δεν θα κωδικοποιούνται για έξυπνη αναζήτηση.",
|
||||
"machine_learning_url_description": "URL του διακομιστή μηχανικής εκμάθησης",
|
||||
"manage_concurrency": "Διαχείριση ταυτόχρονη εκτέλεσης",
|
||||
"manage_log_settings": "Διαχείριση ρυθμίσεων αρχείου καταγραφής",
|
||||
"map_dark_style": "Σκούρο Θέμα",
|
||||
"map_enable_description": "Ενεργοποίηση λειτουργιών χάρτη",
|
||||
"map_gps_settings": "Ρυθμίσεις Χάρτη & GPS",
|
||||
"map_gps_settings_description": "Διαχείριση Ρυθμίσεων Χάρτη & GPS (Αντίστροφη γεωκωδικοποίηση)",
|
||||
"map_implications": "Η λειτουργία χάρτη βασίζεται σε εξωτερικές υπηρεσίες για τα πλακίδια (tiles.immich.cloud)",
|
||||
"map_light_style": "Φωτεινό Θέμα",
|
||||
"map_manage_reverse_geocoding_settings": "Διαχείριση ρυθμίσεων <link>Αντίστροφης Γεωκωδικοποίησης</link>",
|
||||
"map_reverse_geocoding": "Αντίστροφη Γεωκωδικοποίηση",
|
||||
"map_reverse_geocoding_enable_description": "Ενεργοποίηση Αντίστροφης Γεωκωδικοποίησης",
|
||||
"map_reverse_geocoding_settings": "Ρυθμίσεις Αντίστροφης Γεωκωδικοποίησης",
|
||||
"map_settings": "Χάρτης",
|
||||
"map_settings_description": "Διαχείριση ρυθμίσεων χάρτη",
|
||||
"map_style_description": "URL προς αρχείο θέματος του χάρτη style.json",
|
||||
"metadata_extraction_job": "Εξαγωγή μεταδεδομένων",
|
||||
"metadata_extraction_job_description": "Εξαγωγή μεταδεδομένων από κάθε αρχείο, όπως τοποθεσία, πρόσωπα και ανάλυση",
|
||||
"metadata_faces_import_setting": "Ενεργοποίηση εισαγωγής προσώπων",
|
||||
"metadata_faces_import_setting_description": "Εισαγωγή προσώπων από EXIF εικόνων και παρόμοια αρχεία ( sidecar files)",
|
||||
"metadata_settings": "Ρυθμίσεις μεταδεδομένων",
|
||||
"metadata_settings_description": "Διαχείρηση ρυθμίσεων μεταδεδομένων",
|
||||
"migration_job": "Μεταφορά δεδομένων (Migration)",
|
||||
"migration_job_description": "Μεταφορά των εικονιδίων για αρχεία και πρόσωπα στην πιο πρόσφατη δομή αρχείων",
|
||||
"no_paths_added": "Δεν προστέθηκαν διαδρομές",
|
||||
"no_pattern_added": "Δεν προστέθηκε μοτίβο",
|
||||
"note_apply_storage_label_previous_assets": "Σημείωση: Για να εφαρμοστεί η Ετικέτα Αποθήκευσης σε στοιχεία που είχαν αναρτηθεί παλαιότερα, εκτέλεσε το",
|
||||
"note_cannot_be_changed_later": "ΣΗΜΕΊΩΣΗ: Αυτό δεν μπορεί να τροποποιηθεί αργότερα!",
|
||||
"note_unlimited_quota": "Σημείωση: Εισαγάγετε 0 για απεριόριστο όριο",
|
||||
"notification_email_from_address": "Διεύθυνση αποστολέα"
|
||||
"notification_email_from_address": "Διεύθυνση αποστολέα",
|
||||
"notification_email_from_address_description": "Διεύθυνση αποστολέα, πχ: \"Immich Photo Server <noreply@example.com>\"",
|
||||
"notification_email_host_description": "Πάροχος του email server (πχ smtp.immich.app)",
|
||||
"notification_email_ignore_certificate_errors": "Παράβλεψη των σφαλμάτων πιστοποίησης",
|
||||
"notification_email_ignore_certificate_errors_description": "Παράβλεψη σφαλμάτων επικύρωσης της πιστοποίησης TLS (δεν προτείνεται)",
|
||||
"notification_email_password_description": "Κωδικός για την αυθεντικοποίηση με τον server του email",
|
||||
"notification_email_port_description": "Θύρα του email server (πχ 25, 465, ή 587)",
|
||||
"notification_email_sent_test_email_button": "Αποστολή test email και αποθήκευση",
|
||||
"notification_email_setting_description": "Ρυθμίσεις για την αποστολή ειδοποιήσεων μέσω email",
|
||||
"notification_email_test_email": "Αποστολή test email",
|
||||
"notification_email_test_email_failed": "Αποτυχία αποστολής test email, ελέγξτε τις ρυθμίσεις",
|
||||
"notification_email_test_email_sent": "Ένα test email στάλθηκε στην διεύθυνση {email}. Παρακαλώ ελέγξτε τα εισερχόμενα σας.",
|
||||
"notification_email_username_description": "Όνομα χρήστη για την αυθεντικοποίηση με τον server του email",
|
||||
"notification_enable_email_notifications": "Ενεργοποίηση ειδοποιήσεων μέσω email",
|
||||
"notification_settings": "Ρυθμίσεις ειδοποιήσεων",
|
||||
"notification_settings_description": "Διαχείρηση ρυθμίσεων ειδοποιήσεων, συμπεριλαμβανομένου του email",
|
||||
"oauth_auto_launch": "Αυτόματη εκκίνηση",
|
||||
"oauth_auto_launch_description": "Αυτόματη εκκίνιση της υπηρεσίας OAuth με την πλοήγηση στην σελίδα σύνδεσης",
|
||||
"oauth_auto_register": "Αυτόματη καταχώρηση",
|
||||
"oauth_auto_register_description": "Αυτόματη καταχώρηση νέου χρήστη αφού συνδεθεί με OAuth",
|
||||
"oauth_button_text": "Κείμενο κουμπιού",
|
||||
"oauth_client_id": "Ταυτότητα πελάτη (Client)",
|
||||
"oauth_client_secret": "Client Secret",
|
||||
"oauth_enable_description": "Σύνδεση με OAuth",
|
||||
"oauth_issuer_url": "Issuer URL",
|
||||
"oauth_mobile_redirect_uri": "Mobile redirect URI",
|
||||
"oauth_mobile_redirect_uri_override": "Mobile redirect URI override",
|
||||
"oauth_mobile_redirect_uri_override_description": "Enable when OAuth provider does not allow a mobile URI, like '{callback}'",
|
||||
"oauth_profile_signing_algorithm": "Αλγόριθμος σύνδεσης προφίλ",
|
||||
"oauth_profile_signing_algorithm_description": "Αλγόριθμος που χρησιμοποιείται για την σύνδεση των χρηστών.",
|
||||
"oauth_scope": "Scope",
|
||||
"oauth_settings": "OAuth"
|
||||
},
|
||||
"assets_restore_confirmation": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε όλα τα στοιχεία που βρίσκονται στον κάδο απορριμμάτων; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί!",
|
||||
"assets_restore_confirmation": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε όλα τα στοιχεία που βρίσκονται στον κάδο απορριμμάτων; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί! Λάβετε υπόψη ότι δεν θα είναι δυνατή η επαναφορά στοιχείων εκτός σύνδεσης.",
|
||||
"assets_restored_count": "Έγινε επαναφορά {count, plural, one {# στοιχείου} other {# στοιχείων}}",
|
||||
"assets_trashed_count": "Μετακιν. στον κάδο απορριμάτων {count, plural, one {# στοιχείο} other {# στοιχεία}}",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {Το στοιχείο ανήκει} other {Τα στοιχεία ανήκουν}} ήδη στο άλμπουμ",
|
||||
@@ -370,6 +438,8 @@
|
||||
"purchase_settings_server_activated": "Η διαχείριση του κλειδιού προϊόντος του διακομιστή γίνεται από τον διαχειριστή",
|
||||
"reaction_options": "Επιλογές αντίδρασης",
|
||||
"read_changelog": "Διαβάστε το Αρχείο Καταγραφής Αλλαγών",
|
||||
"refresh_faces": "Ανανέωση προσώπων",
|
||||
"refreshing_faces": "Ανανεώνονται πρόσωπα",
|
||||
"restore_user": "Επαναφορά χρήστη",
|
||||
"retry_upload": "Επανάληψη ανεβάσματος",
|
||||
"review_duplicates": "Προβολή διπλότυπων",
|
||||
@@ -471,9 +541,11 @@
|
||||
"sort_recent": "Η πιο πρόσφατη φωτογραφία",
|
||||
"sort_title": "Τίτλος",
|
||||
"source": "Πηγή",
|
||||
"start": "Έναρξη",
|
||||
"start_date": "Από",
|
||||
"state": "Νομός",
|
||||
"status": "Κατάσταση",
|
||||
"stop_motion_photo": "Διέκοψε την Φωτογραφία Κίνησης",
|
||||
"stop_photo_sharing": "Διακοπή κοινής χρήσης των φωτογραφιών σας;",
|
||||
"stop_photo_sharing_description": "Ο χρήστης {partner} δεν θα έχει πλέον πρόσβαση στις φωτογραφίες σας.",
|
||||
"stop_sharing_photos_with_user": "Διακοπή κοινής χρήσης των φωτογραφιών σας με αυτό το χρήστη",
|
||||
@@ -483,8 +555,13 @@
|
||||
"submit": "Υποβολή",
|
||||
"suggestions": "Προτάσεις",
|
||||
"sunrise_on_the_beach": "Ηλιοβασίλεμα στην παραλία",
|
||||
"support": "Υποστήριξη",
|
||||
"support_and_feedback": "Υποστήριξη & Σχόλια",
|
||||
"swap_merge_direction": "Εναλλαγή κατεύθυνσης συγχώνευσης",
|
||||
"sync": "Συγχρονισμός",
|
||||
"tag": "Ετικέτα",
|
||||
"tag_created": "Δημιουργήθηκε ετικέτα: {tag}",
|
||||
"tag_updated": "Ενημερώθηκε η ετικέτα: {tag}",
|
||||
"template": "Πρότυπο",
|
||||
"theme": "Θέμα",
|
||||
"theme_selection": "Επιλογή θέματος",
|
||||
@@ -548,6 +625,7 @@
|
||||
"version": "Έκδοση",
|
||||
"version_announcement_closing": "Ο φίλος σου, Alex",
|
||||
"version_announcement_message": "Γεια σου φίλε, υπάρχει μια νέα έκδοση της εφαρμογής, αφιέρωσε λίγο χρόνο για να επισκεφθείς την τοποθεσία <link>release notes</link> και να βεβαιωθείς ότι τα <code>docker-compose.yml</code>, και <code>.env</code> είναι ενημερωμένα για την αποτροπή τυχόν εσφαλμένων διαμορφώσεων, ειδικά εάν χρησιμοποιείτε το WatchTower ή οποιονδήποτε μηχανισμό που χειρίζεται την αυτόματη ενημέρωση της εφαρμογής σας.",
|
||||
"version_history_item": "Εγκαταστάθηκε {version} στις {date}",
|
||||
"video": "Βίντεο",
|
||||
"video_hover_setting": "Προεπισκόπηση βίντεο με το δείκτη του ποντικιού",
|
||||
"video_hover_setting_description": "Προεπισκόπηση βίντεο όταν το ποντίκι βρίσκεται πάνω από το στοιχείο. Ακόμη και όταν είναι απενεργοποιημένη, η αναπαραγωγή μπορεί να ξεκινήσει τοποθετώντας το δείκτη του ποντικιού πάνω από το εικονίδιο αναπαραγωγής.",
|
||||
@@ -557,6 +635,7 @@
|
||||
"view_album": "Προβολή Άλμπουμ",
|
||||
"view_all": "Προβολή Όλων",
|
||||
"view_all_users": "Προβολή όλων των χρηστών",
|
||||
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
|
||||
"view_links": "Προβολή συνδέσμων",
|
||||
"view_next_asset": "Προβολή επόμενου στοιχείου",
|
||||
"view_previous_asset": "Προβολή προηγούμενου στοιχείου",
|
||||
@@ -34,6 +34,11 @@
|
||||
"authentication_settings_disable_all": "Are you sure you want to disable all login methods? Login will be completely disabled.",
|
||||
"authentication_settings_reenable": "To re-enable, use a <link>Server Command</link>.",
|
||||
"background_task_job": "Background Tasks",
|
||||
"backup_database": "Backup Database",
|
||||
"backup_database_enable_description": "Enable database backups",
|
||||
"backup_keep_last_amount": "Amount of previous backups to keep",
|
||||
"backup_settings": "Backup Settings",
|
||||
"backup_settings_description": "Manage database backup settings",
|
||||
"check_all": "Check All",
|
||||
"cleared_jobs": "Cleared jobs for: {job}",
|
||||
"config_set_by_file": "Config is currently set by a config file",
|
||||
@@ -43,32 +48,37 @@
|
||||
"confirm_reprocess_all_faces": "Are you sure you want to reprocess all faces? This will also clear named people.",
|
||||
"confirm_user_password_reset": "Are you sure you want to reset {user}'s password?",
|
||||
"create_job": "Create job",
|
||||
"cron_expression": "Cron expression",
|
||||
"cron_expression_description": "Set the scanning interval using the cron format. For more information please refer to e.g. <link>Crontab Guru</link>",
|
||||
"cron_expression_presets": "Cron expression presets",
|
||||
"disable_login": "Disable login",
|
||||
"duplicate_detection_job_description": "Run machine learning on assets to detect similar images. Relies on Smart Search",
|
||||
"exclusion_pattern_description": "Exclusion patterns lets you ignore files and folders when scanning your library. This is useful if you have folders that contain files you don't want to import, such as RAW files.",
|
||||
"external_library_created_at": "External library (created on {date})",
|
||||
"external_library_management": "External Library Management",
|
||||
"face_detection": "Face detection",
|
||||
"face_detection_description": "Detect the faces in assets using machine learning. For videos, only the thumbnail is considered. \"All\" (re-)processes all assets. \"Missing\" queues assets that haven't been processed yet. Detected faces will be queued for Facial Recognition after Face Detection is complete, grouping them into existing or new people.",
|
||||
"facial_recognition_job_description": "Group detected faces into people. This step runs after Face Detection is complete. \"All\" (re-)clusters all faces. \"Missing\" queues faces that don't have a person assigned.",
|
||||
"face_detection_description": "Detect the faces in assets using machine learning. For videos, only the thumbnail is considered. \"Refresh\" (re-)processes all assets. \"Reset\" additionally clears all current face data. \"Missing\" queues assets that haven't been processed yet. Detected faces will be queued for Facial Recognition after Face Detection is complete, grouping them into existing or new people.",
|
||||
"facial_recognition_job_description": "Group detected faces into people. This step runs after Face Detection is complete. \"Reset\" (re-)clusters all faces. \"Missing\" queues faces that don't have a person assigned.",
|
||||
"failed_job_command": "Command {command} failed for job: {job}",
|
||||
"force_delete_user_warning": "WARNING: This will immediately remove the user and all assets. This cannot be undone and the files cannot be recovered.",
|
||||
"forcing_refresh_library_files": "Forcing refresh of all library files",
|
||||
"image_format": "Format",
|
||||
"image_format_description": "WebP produces smaller files than JPEG, but is slower to encode.",
|
||||
"image_prefer_embedded_preview": "Prefer embedded preview",
|
||||
"image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.",
|
||||
"image_prefer_wide_gamut": "Prefer wide gamut",
|
||||
"image_prefer_wide_gamut_setting_description": "Use Display P3 for thumbnails. This better preserves the vibrance of images with wide colorspaces, but images may appear differently on old devices with an old browser version. sRGB images are kept as sRGB to avoid color shifts.",
|
||||
"image_preview_format": "Preview format",
|
||||
"image_preview_resolution": "Preview resolution",
|
||||
"image_preview_resolution_description": "Used when viewing a single photo and for machine learning. Higher resolutions can preserve more detail but take longer to encode, have larger file sizes, and can reduce app responsiveness.",
|
||||
"image_preview_description": "Medium-size image with stripped metadata, used when viewing a single asset and for machine learning",
|
||||
"image_preview_quality_description": "Preview quality from 1-100. Higher is better, but produces larger files and can reduce app responsiveness. Setting a low value may affect machine learning quality.",
|
||||
"image_preview_title": "Preview Settings",
|
||||
"image_quality": "Quality",
|
||||
"image_quality_description": "Image quality from 1-100. Higher is better for quality but produces larger files, this option affects the Preview and Thumbnail images.",
|
||||
"image_resolution": "Resolution",
|
||||
"image_resolution_description": "Higher resolutions can preserve more detail but take longer to encode, have larger file sizes and can reduce app responsiveness.",
|
||||
"image_settings": "Image Settings",
|
||||
"image_settings_description": "Manage the quality and resolution of generated images",
|
||||
"image_thumbnail_format": "Thumbnail format",
|
||||
"image_thumbnail_resolution": "Thumbnail resolution",
|
||||
"image_thumbnail_resolution_description": "Used when viewing groups of photos (main timeline, album view, etc.). Higher resolutions can preserve more detail but take longer to encode, have larger file sizes, and can reduce app responsiveness.",
|
||||
"image_thumbnail_description": "Small thumbnail with stripped metadata, used when viewing groups of photos like the main timeline",
|
||||
"image_thumbnail_quality_description": "Thumbnail quality from 1-100. Higher is better, but produces larger files and can reduce app responsiveness.",
|
||||
"image_thumbnail_title": "Thumbnail Settings",
|
||||
"job_concurrency": "{job} concurrency",
|
||||
"job_created": "Job created",
|
||||
"job_not_concurrency_safe": "This job is not concurrency-safe.",
|
||||
@@ -78,9 +88,6 @@
|
||||
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
|
||||
"jobs_failed": "{jobCount, plural, other {# failed}}",
|
||||
"library_created": "Created library: {library}",
|
||||
"library_cron_expression": "Cron expression",
|
||||
"library_cron_expression_description": "Set the scanning interval using the cron format. For more information please refer to e.g. <link>Crontab Guru</link>",
|
||||
"library_cron_expression_presets": "Cron expression presets",
|
||||
"library_deleted": "Library deleted",
|
||||
"library_import_path_description": "Specify a folder to import. This folder, including subfolders, will be scanned for images and videos.",
|
||||
"library_scanning": "Periodic Scanning",
|
||||
@@ -272,7 +279,7 @@
|
||||
"transcoding_hardware_acceleration": "Hardware Acceleration",
|
||||
"transcoding_hardware_acceleration_description": "Experimental; much faster, but will have lower quality at the same bitrate",
|
||||
"transcoding_hardware_decoding": "Hardware decoding",
|
||||
"transcoding_hardware_decoding_setting_description": "Applies only to NVENC, QSV and RKMPP. Enables end-to-end acceleration instead of only accelerating encoding. May not work on all videos.",
|
||||
"transcoding_hardware_decoding_setting_description": "Enables end-to-end acceleration instead of only accelerating encoding. May not work on all videos.",
|
||||
"transcoding_hevc_codec": "HEVC codec",
|
||||
"transcoding_max_b_frames": "Maximum B-frames",
|
||||
"transcoding_max_b_frames_description": "Higher values improve compression efficiency, but slow down encoding. May not be compatible with hardware acceleration on older devices. 0 disables B-frames, while -1 sets this value automatically.",
|
||||
@@ -298,8 +305,6 @@
|
||||
"transcoding_threads_description": "Higher values lead to faster encoding, but leave less room for the server to process other tasks while active. This value should not be more than the number of CPU cores. Maximizes utilization if set to 0.",
|
||||
"transcoding_tone_mapping": "Tone-mapping",
|
||||
"transcoding_tone_mapping_description": "Attempts to preserve the appearance of HDR videos when converted to SDR. Each algorithm makes different tradeoffs for color, detail and brightness. Hable preserves detail, Mobius preserves color, and Reinhard preserves brightness.",
|
||||
"transcoding_tone_mapping_npl": "Tone-mapping NPL",
|
||||
"transcoding_tone_mapping_npl_description": "Colors will be adjusted to look normal for a display of this brightness. Counter-intuitively, lower values increase the brightness of the video and vice versa since it compensates for the brightness of the display. 0 sets this value automatically.",
|
||||
"transcoding_transcode_policy": "Transcode policy",
|
||||
"transcoding_transcode_policy_description": "Policy for when a video should be transcoded. HDR videos will always be transcoded (except if transcoding is disabled).",
|
||||
"transcoding_two_pass_encoding": "Two-pass encoding",
|
||||
@@ -414,6 +419,7 @@
|
||||
"birthdate_saved": "Date of birth saved successfully",
|
||||
"birthdate_set_description": "Date of birth is used to calculate the age of this person at the time of a photo.",
|
||||
"blurred_background": "Blurred background",
|
||||
"bugs_and_feature_requests": "Bugs & Feature Requests",
|
||||
"build": "Build",
|
||||
"build_image": "Build Image",
|
||||
"bulk_delete_duplicates_confirmation": "Are you sure you want to bulk delete {count, plural, one {# duplicate asset} other {# duplicate assets}}? This will keep the largest asset of each group and permanently delete all other duplicates. You cannot undo this action!",
|
||||
@@ -519,6 +525,7 @@
|
||||
"direction": "Direction",
|
||||
"disabled": "Disabled",
|
||||
"disallow_edits": "Disallow edits",
|
||||
"discord": "Discord",
|
||||
"discover": "Discover",
|
||||
"dismiss_all_errors": "Dismiss all errors",
|
||||
"dismiss_error": "Dismiss error",
|
||||
@@ -527,6 +534,7 @@
|
||||
"display_original_photos": "Display original photos",
|
||||
"display_original_photos_setting_description": "Prefer to display the original photo when viewing an asset rather than thumbnails when the original asset is web-compatible. This may result in slower photo display speeds.",
|
||||
"do_not_show_again": "Do not show this message again",
|
||||
"documentation": "Documentation",
|
||||
"done": "Done",
|
||||
"download": "Download",
|
||||
"download_include_embedded_motion_videos": "Embedded videos",
|
||||
@@ -811,6 +819,7 @@
|
||||
"look": "Look",
|
||||
"loop_videos": "Loop videos",
|
||||
"loop_videos_description": "Enable to automatically loop a video in the detail viewer.",
|
||||
"main_branch_warning": "You’re using a development version; we strongly recommend using a release version!",
|
||||
"make": "Make",
|
||||
"manage_shared_links": "Manage shared links",
|
||||
"manage_sharing_with_partners": "Manage sharing with partners",
|
||||
@@ -880,6 +889,7 @@
|
||||
"notifications": "Notifications",
|
||||
"notifications_setting_description": "Manage notifications",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Official Immich Resources",
|
||||
"offline": "Offline",
|
||||
"offline_paths": "Offline paths",
|
||||
"offline_paths_description": "These results may be due to manual deletion of files that are not part of an external library.",
|
||||
@@ -1008,11 +1018,13 @@
|
||||
"recent_searches": "Recent searches",
|
||||
"refresh": "Refresh",
|
||||
"refresh_encoded_videos": "Refresh encoded videos",
|
||||
"refresh_faces": "Refresh faces",
|
||||
"refresh_metadata": "Refresh metadata",
|
||||
"refresh_thumbnails": "Refresh thumbnails",
|
||||
"refreshed": "Refreshed",
|
||||
"refreshes_every_file": "Re-reads all existing and new files",
|
||||
"refreshing_encoded_video": "Refreshing encoded video",
|
||||
"refreshing_faces": "Refreshing faces",
|
||||
"refreshing_metadata": "Refreshing metadata",
|
||||
"regenerating_thumbnails": "Regenerating thumbnails",
|
||||
"remove": "Remove",
|
||||
@@ -1144,6 +1156,7 @@
|
||||
"show_person_options": "Show person options",
|
||||
"show_progress_bar": "Show Progress Bar",
|
||||
"show_search_options": "Show search options",
|
||||
"show_slideshow_transition": "Show slideshow transition",
|
||||
"show_supporter_badge": "Supporter badge",
|
||||
"show_supporter_badge_description": "Show a supporter badge",
|
||||
"shuffle": "Shuffle",
|
||||
@@ -1185,6 +1198,9 @@
|
||||
"submit": "Submit",
|
||||
"suggestions": "Suggestions",
|
||||
"sunrise_on_the_beach": "Sunrise on the beach",
|
||||
"support": "Support",
|
||||
"support_and_feedback": "Support & Feedback",
|
||||
"support_third_party_description": "Your Immich installation was packaged by a third-party. Issues you experience may be caused by that package, so please raise issues with them in the first instance using the links below.",
|
||||
"swap_merge_direction": "Swap merge direction",
|
||||
"sync": "Sync",
|
||||
"tag": "Tag",
|
||||
@@ -1200,6 +1216,7 @@
|
||||
"theme_selection": "Theme selection",
|
||||
"theme_selection_description": "Automatically set the theme to light or dark based on your browser's system preference",
|
||||
"they_will_be_merged_together": "They will be merged together",
|
||||
"third_party_resources": "Third-Party Resources",
|
||||
"time_based_memories": "Time-based memories",
|
||||
"timezone": "Timezone",
|
||||
"to_archive": "Archive",
|
||||
@@ -1267,6 +1284,8 @@
|
||||
"version": "Version",
|
||||
"version_announcement_closing": "Your friend, Alex",
|
||||
"version_announcement_message": "Hi friend, there is a new version of the application please take your time to visit the <link>release notes</link> and ensure your <code>docker-compose.yml</code>, and <code>.env</code> setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your application automatically.",
|
||||
"version_history": "Version History",
|
||||
"version_history_item": "Installed {version} on {date}",
|
||||
"video": "Video",
|
||||
"video_hover_setting": "Play video thumbnail on hover",
|
||||
"video_hover_setting_description": "Play video thumbnail when mouse is hovering over item. Even when disabled, playback can be started by hovering over the play icon.",
|
||||
@@ -1286,7 +1305,7 @@
|
||||
"warning": "Warning",
|
||||
"week": "Week",
|
||||
"welcome": "Welcome",
|
||||
"welcome_to_immich": "Welcome to immich",
|
||||
"welcome_to_immich": "Welcome to Immich",
|
||||
"year": "Year",
|
||||
"years_ago": "{years, plural, one {# year} other {# years}} ago",
|
||||
"yes": "Yes",
|
||||
@@ -7,69 +7,79 @@
|
||||
"actions": "Acciones",
|
||||
"active": "Activo",
|
||||
"activity": "Actividad",
|
||||
"activity_changed": "La actividad {enabled, select, true {activada} other {desactivada}}",
|
||||
"add": "Añadir",
|
||||
"add_a_description": "Añadir una descripción",
|
||||
"add_a_location": "Añadir una ubicación",
|
||||
"add_a_name": "Añadir un nombre",
|
||||
"add_a_title": "Añadir un título",
|
||||
"add_exclusion_pattern": "Añadir patrón de exclusión",
|
||||
"add_import_path": "Añadir ruta de importación",
|
||||
"add_location": "Añadir ubicación",
|
||||
"add_more_users": "Añadir más usuarios",
|
||||
"add_partner": "Añadir invitado",
|
||||
"add_path": "Añadir ruta",
|
||||
"add_photos": "Añadir fotos",
|
||||
"add_to": "Añadir a...",
|
||||
"add_to_album": "Añadir a un álbum",
|
||||
"add_to_shared_album": "Añadir a un álbum compartido",
|
||||
"added_to_archive": "Archivar",
|
||||
"added_to_favorites": "Añadido a favoritos",
|
||||
"added_to_favorites_count": "Añadido {count, number} a favoritos",
|
||||
"activity_changed": "La actividad está {enabled, select, true {activada} other {desactivada}}",
|
||||
"add": "Agregar",
|
||||
"add_a_description": "Agregar descripción",
|
||||
"add_a_location": "Agregar ubicación",
|
||||
"add_a_name": "Agregar nombre",
|
||||
"add_a_title": "Agregar título",
|
||||
"add_exclusion_pattern": "Agregar patrón de exclusión",
|
||||
"add_import_path": "Agregar ruta de importación",
|
||||
"add_location": "Agregar ubicación",
|
||||
"add_more_users": "Agregar más usuarios",
|
||||
"add_partner": "Agregar invitado",
|
||||
"add_path": "Agregar ruta",
|
||||
"add_photos": "Agregar fotos",
|
||||
"add_to": "Agregar a...",
|
||||
"add_to_album": "Agregar a un álbum",
|
||||
"add_to_shared_album": "Agregar a un álbum compartido",
|
||||
"added_to_archive": "Archivado",
|
||||
"added_to_favorites": "Agregado a favoritos",
|
||||
"added_to_favorites_count": "Agregado {count, number} a favoritos",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Añade patrones de exclusión. Puedes utilizar los caracteres *, ** y ? (globbing). Para ignorar los archivos en cualquier ruta llamada \"Raw\", utiliza \"**/Raw/**\". Para ignorar todos los archivos que terminan en \".tif\", utiliza \"**/*.tif\". Para ignorar una ruta desde la raíz, utiliza \"/carpeta/a/ignorar/**\".",
|
||||
"authentication_settings": "Configuración de autenticación",
|
||||
"authentication_settings_description": "Gestionar clave, Oauth y otros configuraciones de autenticación",
|
||||
"authentication_settings_disable_all": "¿Estás seguro de que deseas desactivar todos los métodos de inicio de sesión? Se desactivará el inicio de sesión.",
|
||||
"authentication_settings_reenable": "Para volver a habilitar, utilice un <link> Comando del servidor </link> .",
|
||||
"add_exclusion_pattern_description": "Agrega patrones de exclusión. Puedes utilizar los caracteres *, ** y ? (globbing). Para ignorar todos los archivos en cualquier directorio llamado \"Raw\", utiliza \"**/Raw/**\". Para ignorar todos los archivos que terminan en \".tif\", utiliza \"**/*.tif\". Para ignorar una ruta absoluta, utiliza \"/carpeta/a/ignorar/**\".",
|
||||
"asset_offline_description": "Este recurso externo de la biblioteca ya no se encuentra en el disco y se ha movido a la papelera. Si el archivo se movió dentro de la biblioteca, comprueba la línea de tiempo para el nuevo recurso correspondiente. Para restaurar este recurso, asegúrate de que Immich puede acceder a la siguiente ruta de archivo y escanear la biblioteca.",
|
||||
"authentication_settings": "Parámetros de autenticación",
|
||||
"authentication_settings_description": "Gestionar contraseñas, OAuth y otros parámetros de autenticación",
|
||||
"authentication_settings_disable_all": "¿Está seguro de que deseas desactivar todos los métodos de inicio de sesión? El inicio de sesión se desactivará por completo.",
|
||||
"authentication_settings_reenable": "Para volver a activarlo, utiliza un <link> Comando del servidor </link>.",
|
||||
"background_task_job": "Tareas en segundo plano",
|
||||
"check_all": "Comprobar todo",
|
||||
"cleared_jobs": "Trabajos realizados para: {job}",
|
||||
"config_set_by_file": "La configuración está fijada actualmente en base a un archivo",
|
||||
"check_all": "Verificar todo",
|
||||
"cleared_jobs": "Trabajos borrados para: {job}",
|
||||
"config_set_by_file": "La configuración está definida por un archivo de configuración",
|
||||
"confirm_delete_library": "¿Estás seguro de que quieres eliminar la biblioteca {library}?",
|
||||
"confirm_delete_library_assets": "¿Estás seguro de que quieras eliminar esta biblioteca? Esto eliminará los {count, plural, one {# contained asset} other {all # contained assets}} elementos en Immich y no puede deshacerse. Los archivos permanecerán en tu almacenamiento.",
|
||||
"confirm_email_below": "Para confirmar, escribe \"{email}\" debajo",
|
||||
"confirm_reprocess_all_faces": "¿Estás seguro de que quieres volver a procesar todas las caras? Esto también eliminará las personas a las que le hayas asignado nombre.",
|
||||
"confirm_user_password_reset": "¿Estás seguro de que quieres resetear la contraseña de {user}?",
|
||||
"confirm_email_below": "Para confirmar, escribe \"{email}\" a continuación",
|
||||
"confirm_reprocess_all_faces": "¿Estás seguro de que deseas reprocesar todas las caras? Esto borrará a todas las personas que nombraste.",
|
||||
"confirm_user_password_reset": "¿Estás seguro de que quieres restablecer la contraseña de {user}?",
|
||||
"create_job": "Crear trabajo",
|
||||
"crontab_guru": "Crontab Guru",
|
||||
"disable_login": "Deshabilitar inicio de sesión",
|
||||
"disabled": "Deshabilitado",
|
||||
"duplicate_detection_job_description": "Lanza el aprendizaje automático para detectar imágenes similares. Necesita que esté activa la Búsqueda Inteligente",
|
||||
"exclusion_pattern_description": "Los patrones de exclusión te permiten ignorar archivos y carpetas al escanear tu biblioteca. Esto es útil hay carpetas que contienen archivos que no quieres importar (por ejemplo los ficheros RAW).",
|
||||
"external_library_created_at": "Biblioteca externa (creado el {date})",
|
||||
"duplicate_detection_job_description": "Ejecuta aprendizaje automático sobre los activos para detectar imágenes similares. Se basa en la búsqueda inteligente",
|
||||
"exclusion_pattern_description": "Los patrones de exclusión te permiten ignorar archivos y carpetas al escanear tu biblioteca. Esto es útil si tienes carpetas que contienen archivos que no deseas importar, como archivos RAW.",
|
||||
"external_library_created_at": "Biblioteca externa (creada el {date})",
|
||||
"external_library_management": "Gestión de bibliotecas externas",
|
||||
"face_detection": "Detección de caras",
|
||||
"face_detection_description": "Detecta las caras usando aprendizaje automático. Para los vídeos sólo se tiene en cuenta la imagen de previsualización. \"Todo\" implica volver a procesar todos los elementos. \"Missing\" pone en la cola los elementos que aún no han sido procesados. Las caras detectadas serán añadidas a la cola para ser procesadas posteriormente mediante Reconocimiento Facial y agrupadas en las personas que ya existan o en nuevas personas detectadas.",
|
||||
"facial_recognition_job_description": "Agrupa las caras detectadas en las personas. Este paso se lanza tras las Detección de Caras. \"All\" reagrupa todas las caras. \"Pendiente\" añade a la colas aquellas caras que no fueron asignadas a ninguna persona.",
|
||||
"face_detection": "Detección de rostros",
|
||||
"face_detection_description": "Detectar las caras en los activos mediante aprendizaje automático. En el caso de los vídeos, solo se tiene en cuenta la miniatura. \"Actualizar\" (re)procesar todos los activos. \"Restablecer\" borra además todos los datos de caras actuales. \"Falta\" pone en cola los activos que aún no se han procesado. Los rostros detectados se pondrán en cola para el reconocimiento facial una vez finalizada la detección facial, agrupándolos en personas existentes o nuevas.",
|
||||
"facial_recognition_job_description": "Agrupa los rostros detectados en personas. Este paso se ejecuta una vez finalizada la detección de caras. \"Restablecer\" (re)agrupa todas las caras. \"Falta\" pone en cola los rostros que no tienen asignada una persona.",
|
||||
"failed_job_command": "El comando {command} ha fallado para la tarea: {job}",
|
||||
"force_delete_user_warning": "CUIDADO: Esta acción eliminará inmediatamente el usuario y los elementos. Esta accion no se puede deshacer y los archivos no pueden ser recuperados.",
|
||||
"forcing_refresh_library_files": "Forzar la recarga de todos los archivos de la biblioteca",
|
||||
"image_format": "Formato",
|
||||
"image_format_description": "WebP genera archivos más pequeños que JPEG, pero es más lento al codificar.",
|
||||
"image_prefer_embedded_preview": "Preferir vista previa incrustada",
|
||||
"image_prefer_embedded_preview_setting_description": "Usar vistas previas incrustadas en fotos RAW como entrada para el procesamiento de imágenes cuando estén disponibles. Esto puede producir colores más precisos en algunas imágenes, pero la calidad de la vista previa depende de la cámara y la imagen puede tener más artefactos de compresión.",
|
||||
"image_prefer_wide_gamut": "Preferir gama amplia",
|
||||
"image_prefer_wide_gamut_setting_description": "Usar \"Display P3\" para las miniaturas. Esto preserva mejor la vivacidad de las imágenes con espacios de color amplios, pero las imágenes pueden aparecer de manera diferente en dispositivos antiguos con una versión antigua del navegador. Las imágenes sRGB se mantienen como sRGB para evitar cambios de color.",
|
||||
"image_preview_description": "Imagen de tamaño mediano con metadatos eliminados, utilizada al visualizar un solo activo y para aprendizaje automático",
|
||||
"image_preview_format": "Formato de previsualización",
|
||||
"image_preview_quality_description": "Calidad de vista previa de 1 a 100. Cuanto más alta sea la calidad, mejor, pero genera archivos más grandes y puede reducir la capacidad de respuesta de la aplicación. Establecer un valor bajo puede afectar la calidad del aprendizaje automático.",
|
||||
"image_preview_resolution": "Resolución de previsualización",
|
||||
"image_preview_resolution_description": "Se utiliza al ver una sola foto y para el aprendizaje automático. Las resoluciones más altas pueden preservar más detalles, pero tardan más en codificarse, tienen tamaños de archivo más grandes y pueden reducir la capacidad de respuesta de la aplicación.",
|
||||
"image_preview_title": "Ajustes de la vista previa",
|
||||
"image_quality": "Calidad",
|
||||
"image_quality_description": "Calidad de imagen de 1 a 100. Un valor más alto mejora la calidad pero genera archivos más grandes.",
|
||||
"image_resolution": "Resolución",
|
||||
"image_resolution_description": "Las resoluciones más altas pueden conservar más detalles, pero requieren más tiempo para codificar, tienen tamaños de archivo más grandes y pueden afectar la capacidad de respuesta de la aplicación.",
|
||||
"image_settings": "Ajustes de imagen",
|
||||
"image_settings_description": "Administrar la calidad y resolución de las imágenes generadas",
|
||||
"image_thumbnail_description": "Miniatura pequeña con metadatos eliminados, que se utiliza al visualizar grupos de fotos como la línea de tiempo principal",
|
||||
"image_thumbnail_format": "Formato de las miniaturas",
|
||||
"image_thumbnail_quality_description": "Calidad de miniatura de 1 a 100. Cuanto más alta, mejor, pero genera archivos más grandes y puede reducir la capacidad de respuesta de la aplicación.",
|
||||
"image_thumbnail_resolution": "Resolución de las miniaturas",
|
||||
"image_thumbnail_resolution_description": "Se utiliza para ver grupos de fotos (cronología, vista de álbum, etc.). Las resoluciones más altas pueden conservar más detalles, pero tardan más en codificarse, tienen archivos de mayor tamaño y pueden reducir la reactividad de la aplicación.",
|
||||
"image_thumbnail_title": "Ajustes de las miniaturas",
|
||||
"job_concurrency": "{job}: Procesos simultáneos",
|
||||
"job_created": "Trabajo creado",
|
||||
"job_not_concurrency_safe": "Esta tarea no es segura para la simultaneidad.",
|
||||
@@ -212,6 +222,7 @@
|
||||
"require_password_change_on_login": "Requerir que el usuario cambie la contraseña en el primer inicio de sesión",
|
||||
"reset_settings_to_default": "Restablecer la configuración predeterminada",
|
||||
"reset_settings_to_recent_saved": "Restablecer la configuración a la configuración guardada recientemente",
|
||||
"scanning_library": "Escaneando la biblioteca",
|
||||
"scanning_library_for_changed_files": "Escanear archivos modificados en biblioteca",
|
||||
"scanning_library_for_new_files": "Escanear nuevos archivos en biblioteca",
|
||||
"search_jobs": "Buscar trabajo...",
|
||||
@@ -267,7 +278,7 @@
|
||||
"transcoding_audio_codec": "Codec de audio",
|
||||
"transcoding_audio_codec_description": "Opus es la opción de mayor calidad, pero tiene menor compatibilidad con dispositivos o software antiguos.",
|
||||
"transcoding_bitrate_description": "Vídeos con una tasa de bits superior a la máxima o que no están en un formato aceptado",
|
||||
"transcoding_codecs_learn_more": "Para obtener más información sobre la terminología utilizada aquí, consulte la documentación de FFmpeg para <h264-link>H.264 codec</h264-link>, <hevc-link>HEVC codec</hevc-link> y <vp9-link>VP9 codec</vp9-link>.",
|
||||
"transcoding_codecs_learn_more": "Para obtener más información sobre la terminología utilizada aquí, consulte la documentación de FFmpeg sobre los codecs <h264-link>H.264</h264-link>, <hevc-link>HEVC</hevc-link> y <vp9-link>VP9</vp9-link>.",
|
||||
"transcoding_constant_quality_mode": "Modo de calidad constante",
|
||||
"transcoding_constant_quality_mode_description": "ICQ es mejor que CQP, pero algunos dispositivos de aceleración de hardware no admiten este modo. Al configurar esta opción, se preferirá el modo especificado cuando se utilice codificación basada en calidad. NVENC lo ignora porque no es compatible con ICQ.",
|
||||
"transcoding_constant_rate_factor": "Factor de tasa constante (-crf)",
|
||||
@@ -276,7 +287,7 @@
|
||||
"transcoding_hardware_acceleration": "Aceleración por Hardware",
|
||||
"transcoding_hardware_acceleration_description": "Experimental; mucho más rápido, pero tendrá menor calidad con la misma tasa de bits",
|
||||
"transcoding_hardware_decoding": "Decodificación por hardware",
|
||||
"transcoding_hardware_decoding_setting_description": "Se aplica únicamente a NVENC, QSV y RKMPP. Habilita la aceleración de un extremo a otro en lugar de solo acelerar la codificación. Puede que no funcione en todos los vídeos.",
|
||||
"transcoding_hardware_decoding_setting_description": "Permite la aceleración de extremo a extremo en lugar de acelerar únicamente la codificación. Puede que no funcione en todos los vídeos.",
|
||||
"transcoding_hevc_codec": "Codec HEVC",
|
||||
"transcoding_max_b_frames": "Maximos B-frames",
|
||||
"transcoding_max_b_frames_description": "Los valores más altos mejoran la eficiencia de la compresión, pero ralentizan la codificación. Puede que no sea compatible con la aceleración de hardware en dispositivos más antiguos. 0 desactiva los fotogramas B, mientras que -1 establece este valor automáticamente.",
|
||||
@@ -394,8 +405,8 @@
|
||||
"asset_filename_is_offline": "El archivo {filename} está offline",
|
||||
"asset_has_unassigned_faces": "El archivo no tiene rostros asignados",
|
||||
"asset_hashing": "Hashing...",
|
||||
"asset_offline": "Archivos fuera de linea",
|
||||
"asset_offline_description": "Este archivo está offline. Immich no puede acceder a la ubicación de su archivo. Asegúrese de que el archivo esté disponible y luego vuelva a escanear la biblioteca.",
|
||||
"asset_offline": "Archivos sin conexión",
|
||||
"asset_offline_description": "Este activo externo ya no se encuentra en el disco. Por favor, póngase en contacto con su administrador de Immich para obtener ayuda.",
|
||||
"asset_skipped": "Omitido",
|
||||
"asset_skipped_in_trash": "En la papelera",
|
||||
"asset_uploaded": "Subido",
|
||||
@@ -406,10 +417,10 @@
|
||||
"assets_added_to_name_count": "Añadido {count, plural, one {# asset} other {# assets}} a {hasName, select, true {<b>{name}</b>} other {new album}}",
|
||||
"assets_count": "{count, plural, one {# activo} other {# activos}}",
|
||||
"assets_moved_to_trash": "Se movió {count, plural, one {# activo} other {# activos}} a la papelera",
|
||||
"assets_moved_to_trash_count": "Movido {count, plural, one {# elemento} other {# elementos}} a la papelera",
|
||||
"assets_moved_to_trash_count": "{count, plural, one {# elemento movido} other {# elementos movidos}} a la papelera",
|
||||
"assets_permanently_deleted_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}",
|
||||
"assets_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}",
|
||||
"assets_restore_confirmation": "¿Está seguro de que desea restaurar todos sus archivos eliminados? ¡No puedes deshacer esta acción!",
|
||||
"assets_restore_confirmation": "¿Estás seguro de que quieres restaurar todos tus activos eliminados? ¡No puede deshacer esta acción! Tenga en cuenta que los archivos sin conexión no se pueden restaurar de esta manera.",
|
||||
"assets_restored_count": "Restaurado {count, plural, one {# elemento} other {# elementos}}",
|
||||
"assets_trashed_count": "Borrado {count, plural, one {# elemento} other {# elementos}}",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {Asset was} other {Assets were}} ya forma parte del álbum",
|
||||
@@ -420,8 +431,9 @@
|
||||
"birthdate_saved": "Fecha de nacimiento guardada con éxito",
|
||||
"birthdate_set_description": "La fecha de nacimiento se utiliza para calcular la edad de esta persona en el momento de la fotografía.",
|
||||
"blurred_background": "Fondo borroso",
|
||||
"bugs_and_feature_requests": "Errores y solicitudes de funciones",
|
||||
"build": "Compilación",
|
||||
"build_image": "Construir Imagen",
|
||||
"build_image": "Imagen",
|
||||
"bulk_delete_duplicates_confirmation": "¿Estás seguro de que deseas eliminar de forma masiva {count, plural, one {# elemento duplicado} other {# elementos duplicados}}? Esto mantendrá el activo más grande de cada grupo y eliminará permanentemente todos los demás duplicados. ¡Esta acción no se puede deshacer!",
|
||||
"bulk_keep_duplicates_confirmation": "¿Estas seguro de que desea mantener {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto resolverá todos los grupos duplicados sin borrar nada.",
|
||||
"bulk_trash_duplicates_confirmation": "¿Estas seguro de que desea eliminar masivamente {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto mantendrá el archivo más grande de cada grupo y eliminará todos los demás duplicados.",
|
||||
@@ -440,7 +452,7 @@
|
||||
"cant_search_places": "No se pueden buscar lugares",
|
||||
"change_date": "Cambiar fecha",
|
||||
"change_expiration_time": "Cambiar fecha de caducidad",
|
||||
"change_location": "Cambiar localización",
|
||||
"change_location": "Cambiar ubicación",
|
||||
"change_name": "Cambiar nombre",
|
||||
"change_name_successfully": "Nombre cambiado correctamente",
|
||||
"change_password": "Cambiar Contraseña",
|
||||
@@ -523,11 +535,13 @@
|
||||
"delete_tag_confirmation_prompt": "¿Estás seguro de que deseas eliminar la etiqueta {tagName} ?",
|
||||
"delete_user": "Eliminar usuario",
|
||||
"deleted_shared_link": "Enlace compartido eliminado",
|
||||
"deletes_missing_assets": "Elimina archivos que faltan en el disco duro",
|
||||
"description": "Descripción",
|
||||
"details": "DETALLES",
|
||||
"direction": "Dirección",
|
||||
"disabled": "Deshabilitado",
|
||||
"disallow_edits": "Bloquear edición",
|
||||
"discord": "Discord",
|
||||
"discover": "Descubrir",
|
||||
"dismiss_all_errors": "Descartar todos los errores",
|
||||
"dismiss_error": "Descartar error",
|
||||
@@ -536,6 +550,7 @@
|
||||
"display_original_photos": "Mostrar fotos originales",
|
||||
"display_original_photos_setting_description": "Preferir mostrar la foto original al ver un archivo en lugar de miniaturas cuando el archivo original es compatible con la web. Esto puede resultar en velocidades de visualización de fotografías más lentas.",
|
||||
"do_not_show_again": "No volver a mostrar este mensaje otra vez",
|
||||
"documentation": "Documentación",
|
||||
"done": "Hecho",
|
||||
"download": "Descargar",
|
||||
"download_include_embedded_motion_videos": "Vídeos incrustados",
|
||||
@@ -873,6 +888,7 @@
|
||||
"look": "Mirar",
|
||||
"loop_videos": "Vídeos en bucle",
|
||||
"loop_videos_description": "Habilite la reproducción automática de un video en el visor de detalles.",
|
||||
"main_branch_warning": "Estás ejecutando una compilación desde la rama principal. ¡Recomendamos encarecidamente usar una versión de lanzamiento!",
|
||||
"make": "Marca",
|
||||
"manage_shared_links": "Administrar enlaces compartidos",
|
||||
"manage_sharing_with_partners": "Administrar el uso compartido con invitados",
|
||||
@@ -934,7 +950,7 @@
|
||||
"no_results": "Sin resultados",
|
||||
"no_results_description": "Pruebe con un sinónimo o una palabra clave más general",
|
||||
"no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red",
|
||||
"not_in_any_album": "Nada en ningún álbum",
|
||||
"not_in_any_album": "Sin álbum",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Nota: Para aplicar la etiqueta de almacenamiento a los archivos cargados previamente, ejecute el",
|
||||
"note_unlimited_quota": "Nota: Ingrese 0 para cuota ilimitada",
|
||||
"notes": "Notas",
|
||||
@@ -942,6 +958,7 @@
|
||||
"notifications": "Notificaciones",
|
||||
"notifications_setting_description": "Administrar notificaciones",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Recursos oficiales de Immich",
|
||||
"offline": "Desconectado",
|
||||
"offline_paths": "Rutas sin conexión",
|
||||
"offline_paths_description": "Estos resultados pueden deberse a la eliminación manual de archivos que no forman parte de una biblioteca externa.",
|
||||
@@ -1006,7 +1023,7 @@
|
||||
"photo_shared_all_users": "Parece que compartiste tus fotos con todos los usuarios o no tienes ningún usuario con quien compartirlas.",
|
||||
"photos": "Fotos",
|
||||
"photos_and_videos": "Fotos y Videos",
|
||||
"photos_count": "{count, plural, one {{count, number} foto} other {{count, number} fotos}}",
|
||||
"photos_count": "{count, plural, one {{count, number} Foto} other {{count, number} Fotos}}",
|
||||
"photos_from_previous_years": "Fotos de años anteriores",
|
||||
"pick_a_location": "Elige una ubicación",
|
||||
"place": "Lugar",
|
||||
@@ -1028,7 +1045,7 @@
|
||||
"profile_picture_set": "Conjunto de imágenes de perfil.",
|
||||
"public_album": "Álbum público",
|
||||
"public_share": "Compartir públicamente",
|
||||
"purchase_account_info": "Soporte",
|
||||
"purchase_account_info": "Seguidor",
|
||||
"purchase_activated_subtitle": "Gracias por apoyar a Immich y al software de código abierto",
|
||||
"purchase_activated_time": "Activado el {date, date}",
|
||||
"purchase_activated_title": "Su clave ha sido activada correctamente",
|
||||
@@ -1076,11 +1093,13 @@
|
||||
"recent_searches": "Búsquedas recientes",
|
||||
"refresh": "Actualizar",
|
||||
"refresh_encoded_videos": "Recargar los vídeos codificados",
|
||||
"refresh_metadata": "Recargar los metadatos",
|
||||
"refresh_faces": "Actualizar caras",
|
||||
"refresh_metadata": "Recargar metadatos",
|
||||
"refresh_thumbnails": "Recargar miniaturas",
|
||||
"refreshed": "Recargado",
|
||||
"refreshes_every_file": "Recargar cada archivo",
|
||||
"refreshes_every_file": "Recargar todos los archivos nuevos y existentes",
|
||||
"refreshing_encoded_video": "Recargando los videos codificados",
|
||||
"refreshing_faces": "Recargando caras",
|
||||
"refreshing_metadata": "Recargando metadatos",
|
||||
"regenerating_thumbnails": "Recargando miniaturas",
|
||||
"remove": "Eliminar",
|
||||
@@ -1129,6 +1148,7 @@
|
||||
"say_something": "Comenta algo",
|
||||
"scan_all_libraries": "Escanear todas las bibliotecas",
|
||||
"scan_all_library_files": "Vuelva a escanear todos los archivos de la biblioteca",
|
||||
"scan_library": "Escanear",
|
||||
"scan_new_library_files": "Escanear nuevos archivos de biblioteca",
|
||||
"scan_settings": "Configuración de escaneo",
|
||||
"scanning_for_album": "Buscando álbum...",
|
||||
@@ -1163,11 +1183,11 @@
|
||||
"select_face": "Seleccionar cara",
|
||||
"select_featured_photo": "Seleccionar foto principal",
|
||||
"select_from_computer": "Seleccionar desde el PC",
|
||||
"select_keep_all": "Mantener toda la selección",
|
||||
"select_keep_all": "Conservar todo",
|
||||
"select_library_owner": "Seleccionar propietario de la biblioteca",
|
||||
"select_new_face": "Seleccionar nueva cara",
|
||||
"select_photos": "Seleccionar Fotos",
|
||||
"select_trash_all": "Enviar la selección a la papelera",
|
||||
"select_trash_all": "Descartar todo",
|
||||
"selected": "Seleccionado",
|
||||
"selected_count": "{count, plural, one {# seleccionado} other {# seleccionados}}",
|
||||
"send_message": "Enviar mensaje",
|
||||
@@ -1175,7 +1195,7 @@
|
||||
"server": "Servidor",
|
||||
"server_offline": "Servidor desconectado",
|
||||
"server_online": "Servidor en línea",
|
||||
"server_stats": "Estadísticas Servidor",
|
||||
"server_stats": "Estadísticas del servidor",
|
||||
"server_version": "Versión del servidor",
|
||||
"set": "Establecer",
|
||||
"set_as_album_cover": "Establecer portada del álbum",
|
||||
@@ -1215,6 +1235,7 @@
|
||||
"show_person_options": "Mostrar opciones de la persona",
|
||||
"show_progress_bar": "Mostrar barra de progreso",
|
||||
"show_search_options": "Mostrar opciones de búsqueda",
|
||||
"show_slideshow_transition": "Mostrar la transición de las diapositivas",
|
||||
"show_supporter_badge": "Insignia de colaborador",
|
||||
"show_supporter_badge_description": "Mostrar una insignia de colaborador",
|
||||
"shuffle": "Modo aleatorio",
|
||||
@@ -1235,7 +1256,7 @@
|
||||
"sort_oldest": "Foto más antigua",
|
||||
"sort_recent": "Foto más reciente",
|
||||
"sort_title": "Título",
|
||||
"source": "Fuente",
|
||||
"source": "Origen",
|
||||
"stack": "Apilar",
|
||||
"stack_duplicates": "Apilar duplicados",
|
||||
"stack_select_one_photo": "Selecciona una imagen principal para la pila",
|
||||
@@ -1256,13 +1277,16 @@
|
||||
"submit": "Enviar",
|
||||
"suggestions": "Sugerencias",
|
||||
"sunrise_on_the_beach": "Amanecer en la playa",
|
||||
"support": "Soporte",
|
||||
"support_and_feedback": "Soporte y comentarios",
|
||||
"support_third_party_description": "Su instalación de immich fue empaquetada por un tercero. Los problemas que experimenta pueden ser causados por ese paquete, así que por favor plantee problemas con ellos en primer lugar usando los enlaces inferiores.",
|
||||
"swap_merge_direction": "Alternar dirección de mezcla",
|
||||
"sync": "Sincronizar",
|
||||
"tag": "Etiqueta",
|
||||
"tag_assets": "Etiquetar activos",
|
||||
"tag_created": "Etiqueta creada: {tag}",
|
||||
"tag_feature_description": "Explore fotos y videos agrupados por temas de etiquetas lógicas",
|
||||
"tag_not_found_question": "¿No encuentras una etiqueta? Crea una <link>aquí</link>",
|
||||
"tag_not_found_question": "¿No encuentra una etiqueta? <link>Crea una nueva etiqueta.</link>",
|
||||
"tag_updated": "Etiqueta actualizada: {tag}",
|
||||
"tagged_assets": "Etiquetado(s) {count, plural, one {# activo} other {# activos}}",
|
||||
"tags": "Etiquetas",
|
||||
@@ -1271,6 +1295,7 @@
|
||||
"theme_selection": "Selección de tema",
|
||||
"theme_selection_description": "Establece el tema automáticamente como \"claro\" u \"oscuro\" según las preferencias del sistema/navegador",
|
||||
"they_will_be_merged_together": "Se fusionarán entre sí",
|
||||
"third_party_resources": "Recursos de terceros",
|
||||
"time_based_memories": "Recuerdos basados en tiempo",
|
||||
"timezone": "Zona horaria",
|
||||
"to_archive": "Archivar",
|
||||
@@ -1279,14 +1304,14 @@
|
||||
"to_login": "Iniciar Sesión",
|
||||
"to_parent": "Ir a los padres",
|
||||
"to_root": "Para root",
|
||||
"to_trash": "Papelera",
|
||||
"to_trash": "Descartar",
|
||||
"toggle_settings": "Alternar ajustes",
|
||||
"toggle_theme": "Alternar tema oscuro",
|
||||
"toggle_visibility": "Alternar visibilidad",
|
||||
"total_usage": "Uso total",
|
||||
"trash": "Papelera",
|
||||
"trash_all": "Enviar todo a la papelera",
|
||||
"trash_count": "Papelera {count, number}",
|
||||
"trash_all": "Descartar todo",
|
||||
"trash_count": "Descartar {count, number}",
|
||||
"trash_delete_asset": "Borrar/Eliminar archivo",
|
||||
"trash_no_results_message": "Las fotos y videos que se envíen a la papelera aparecerán aquí.",
|
||||
"trashed_items_will_be_permanently_deleted_after": "Los elementos en la papelera serán eliminados permanentemente tras {days, plural, one {# día} other {# días}}.",
|
||||
@@ -1343,7 +1368,9 @@
|
||||
"variables": "Variables",
|
||||
"version": "Versión",
|
||||
"version_announcement_closing": "Tu amigo, Alex",
|
||||
"version_announcement_message": "Hola amigo, hay una nueva versión de la aplicación, por favor tómete tu tiempo para visitar las notas de la <link>versión</link> y asegúrate de que tu <code>docker-compose.yml</code>, y la configuración <code>.env</code> esté actualizada para evitar cualquier configuración incorrecta, especialmente si usas WatchTower o cualquier mecanismo que maneje la actualización automática de tu aplicación.",
|
||||
"version_announcement_message": "Hola Amigo: Hay una nueva versión de la aplicación, por favor, tómate tu tiempo para visitar las notas de la <link>versión</link> y asegúrate de que tu <code>docker-compose.yml</code> y la configuración <code>.env</code> estén actualizadas para evitar cualquier configuración incorrecta, especialmente si usas WatchTower o cualquier mecanismo que maneje la actualización automática de tu aplicación.",
|
||||
"version_history": "Historial de versiones",
|
||||
"version_history_item": "Instalada la {version} el {date}",
|
||||
"video": "Vídeo",
|
||||
"video_hover_setting": "Iniciar vídeo al pasar por encima",
|
||||
"video_hover_setting_description": "Reproducir el vídeo cuando el ratón está encima de un vídeo. Aunque esté desactivado, se iniciará cuando el cursor del ratón esté sobre el icono de \"reproducir\".",
|
||||
@@ -1364,7 +1391,7 @@
|
||||
"warning": "Advertencia",
|
||||
"week": "Semana",
|
||||
"welcome": "Bienvenido",
|
||||
"welcome_to_immich": "Bienvenido a immich",
|
||||
"welcome_to_immich": "Bienvenido a Immich",
|
||||
"year": "Año",
|
||||
"years_ago": "Hace {years, plural, one {# año} other {# años}}",
|
||||
"yes": "Sí",
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "{count, number} pilti lisatud lemmikutesse",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Lisa välistamismustreid. Toetatud on metamärgid *, ** ja ?. Kõikide kataloogis nimega \"Raw\" olevate failide ignoreerimiseks kasuta \"**/Raw/**\". Kõikide .tif failide ignoreerimiseks kasuta \"**/*.tif\". Absouutse tee ignoreerimiseks kasuta \"/path/to/ignore/**\".",
|
||||
"asset_offline_description": "Seda välise kogu üksust ei leitud kettalt ning see liigutati prügikasti. Kui faili asukoht kogu siseselt muutus, leiad vastava uue üksuse oma ajajoonelt. Üksuse taastamiseks veendu, et allpool toodud failitee on Immich'ile kättesaadav ning skaneeri kogu uuesti.",
|
||||
"authentication_settings": "Autentimise seaded",
|
||||
"authentication_settings_description": "Halda parooli, OAuth ja muid autentimise seadeid",
|
||||
"authentication_settings_disable_all": "Kas oled kindel, et soovid kõik sisselogimismeetodid välja lülitada? Sisselogimine lülitatakse täielikult välja.",
|
||||
@@ -48,26 +49,35 @@
|
||||
"external_library_created_at": "Väline kogu (lisatud {date})",
|
||||
"external_library_management": "Väliste kogude haldus",
|
||||
"face_detection": "Näoavastus",
|
||||
"face_detection_description": "Avasta üksustest nägusid masinõppe abil. Videote puhul kasutatakse ainult pisipilti. \"Kõik\" töötleb kõik üksused uuesti. \"Puuduvad\" võtab ette üksused, mida pole veel töödeldud. Avastatud näod suunatakse näotuvastusse, et grupeerida nad olemasolevateks või uuteks isikuteks.",
|
||||
"facial_recognition_job_description": "Grupeeri avastatud näod inimesteks. See samm käivitub siis, kui näoavastus on lõppenud. \"Kõik\" grupeerib kõik näod uuesti. \"Puuduvad\" võtab ette näod, mida pole isikuga seostatud.",
|
||||
"face_detection_description": "Avasta üksustest nägusid masinõppe abil. Videote puhul kasutatakse ainult pisipilti. \"Värskenda\" töötleb kõik üksused uuesti. \"Lähtesta\" kustutab lisaks kõik seni leitud näed. \"Puuduvad\" võtab ette üksused, mida pole veel töödeldud. Avastatud näod suunatakse näotuvastusse, et grupeerida nad olemasolevateks või uuteks isikuteks.",
|
||||
"facial_recognition_job_description": "Grupeeri avastatud näod inimesteks. See samm käivitub siis, kui näoavastus on lõppenud. \"Lähtesta\" grupeerib kõik näod uuesti. \"Puuduvad\" võtab ette näod, mida pole isikuga seostatud.",
|
||||
"failed_job_command": "Käsk {command} ebaõnnestus töötes: {job}",
|
||||
"force_delete_user_warning": "HOIATUS: See kustutab koheselt kasutaja ja kõik üksused. Seda ei saa tagasi võtta ja faile ei saa taastada.",
|
||||
"forcing_refresh_library_files": "Kogu kõigi failide sundvärskendamine",
|
||||
"image_format": "Formaat",
|
||||
"image_format_description": "WebP failid on väiksemad kui JPEG, aga kodeerimine on aeglasem.",
|
||||
"image_prefer_embedded_preview": "Eelista manustatud eelvaadet",
|
||||
"image_prefer_embedded_preview_setting_description": "Kasuta pilditöötluse sisendina võimalusel RAW fotodesse manustatud eelvaateid. See võib mõnede piltide puhul anda tulemuseks täpsemad värvid, aga eelvaate kvaliteet sõltub konkreetsest kaamerast ning pildis võib olla rohkem tihendusmüra.",
|
||||
"image_prefer_wide_gamut": "Eelista laia värvigammat",
|
||||
"image_prefer_wide_gamut_setting_description": "Kasuta pisipiltide jaoks Display P3. See säilitab paremini laia värviruumiga piltide erksuse, aga vanematel seadmetel ja vanemate brauseritega võivad pildid teistsugused välja näha. sRGB pildid säilitatakse värvinihete vältimiseks.",
|
||||
"image_preview_description": "Keskmise suurusega pilt ilma metaandmeteta, kasutusel üksiku üksuse vaatamise ja masinõppe jaoks",
|
||||
"image_preview_format": "Eelvaate formaat",
|
||||
"image_preview_quality_description": "Eelvaate kvaliteet vahemikus 1-100. Kõrgem väärtus on parem, aga tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust. Madala väärtuse seadmine võib mõjutada masinõppe kvaliteeti.",
|
||||
"image_preview_resolution": "Eelvaate resolutsioon",
|
||||
"image_preview_resolution_description": "Kasutusel üksiku foto vaatamisel ja masinõppe jaoks. Kõrgem resolutsioon säilitab rohkem detaile, aga kodeerimine võtab rohkem aega, tekitab suurema faili ning võib mõjutada rakenduse töökiirust.",
|
||||
"image_preview_title": "Eelvaate seaded",
|
||||
"image_quality": "Kvaliteet",
|
||||
"image_quality_description": "Pildikvaliteet vahemikus 1-100. Kõrgem väärtus tähendab paremat kvaliteeti ja suuremaid faile. See valik mõjutab eelvaateid ja pisipilte.",
|
||||
"image_resolution": "Resolutsioon",
|
||||
"image_resolution_description": "Kõrgemad resolutsioonid säilitavad rohkem detaile, aga kodeerimine võtab kauem aega, tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust.",
|
||||
"image_settings": "Pildi seaded",
|
||||
"image_settings_description": "Halda genereeritud piltide kvaliteeti ja resolutsiooni",
|
||||
"image_thumbnail_description": "Väike pisipilt ilma metaandmeteta, kasutusel fotode grupikaupa vaatamisel, näiteks ajajoonel",
|
||||
"image_thumbnail_format": "Pisipildi formaat",
|
||||
"image_thumbnail_quality_description": "Pisipildi kvaliteet vahemikus 1-100. Kõrgem väärtus on parem, aga tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust.",
|
||||
"image_thumbnail_resolution": "Pisipildi resolutsioon",
|
||||
"image_thumbnail_resolution_description": "Kasutusel fotode mitmekaupa vaatamisel (ajajoon, albumi vaade, jne). Kõrgem resolutsioon säilitab rohkem detaile, aga kodeerimine võtab rohkem aega, tekitab suurema faili ning võib mõjutada rakenduse töökiirust.",
|
||||
"image_thumbnail_title": "Pisipildi seaded",
|
||||
"job_concurrency": "{job} samaaegsus",
|
||||
"job_created": "Tööde lisatud",
|
||||
"job_not_concurrency_safe": "Seda töödet pole ohutu samaaegselt käivitada.",
|
||||
@@ -141,10 +151,14 @@
|
||||
"metadata_extraction_job": "Metaandmete eraldamine",
|
||||
"metadata_extraction_job_description": "Eralda igast üksusest metaandmed, nagu GPS-koordinaadid, näod ja resolutsioon",
|
||||
"metadata_faces_import_setting": "Luba nägude import",
|
||||
"metadata_faces_import_setting_description": "Impordi näod piltide EXIF andmetest ja välistest failidest",
|
||||
"metadata_settings": "Metaandmete seaded",
|
||||
"metadata_settings_description": "Halda metaandmete seadeid",
|
||||
"migration_job": "Migratsioon",
|
||||
"migration_job_description": "Migreeri üksuste ja nägude pisipildid uusimale kaustastruktuurile",
|
||||
"no_paths_added": "Ühtegi teed pole",
|
||||
"no_pattern_added": "Mustreid ei ole",
|
||||
"note_apply_storage_label_previous_assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
|
||||
"note_cannot_be_changed_later": "MÄRKUS: Seda ei saa hiljem muuta!",
|
||||
"note_unlimited_quota": "Märkus: Piiramatu kvoodi jaoks sisesta 0",
|
||||
"notification_email_from_address": "Saatja aadress",
|
||||
@@ -173,12 +187,23 @@
|
||||
"oauth_enable_description": "Sisene OAuth abil",
|
||||
"oauth_issuer_url": "Väljastaja URL",
|
||||
"oauth_mobile_redirect_uri": "Mobiilne ümbersuunamise URI",
|
||||
"oauth_mobile_redirect_uri_override": "Mobiilse ümbersuunamise URI ülekirjutamine",
|
||||
"oauth_mobile_redirect_uri_override_description": "Lülita sisse, kui OAuth pakkuja ei luba mobiilset URI-d, näiteks '{callback}'",
|
||||
"oauth_profile_signing_algorithm": "Profiili allkirjastamise algoritm",
|
||||
"oauth_profile_signing_algorithm_description": "Algoritm, mida kasutatakse kasutajaprofiili allkirjastamiseks.",
|
||||
"oauth_scope": "Skoop",
|
||||
"oauth_settings": "OAuth",
|
||||
"oauth_settings_description": "Halda OAuth sisselogimise seadeid",
|
||||
"oauth_settings_more_details": "Selle funktsiooni kohta rohkem teada saamiseks loe <link>dokumentatsiooni</link>.",
|
||||
"oauth_signing_algorithm": "Allkirjastamise algoritm",
|
||||
"oauth_storage_label_claim": "Talletussildi väide",
|
||||
"oauth_storage_label_claim_description": "Sea kasutaja talletussildiks automaatselt selle väite väärtus.",
|
||||
"oauth_storage_quota_claim": "Talletuskvoodi väide",
|
||||
"oauth_storage_quota_claim_description": "Sea kasutaja talletuskvoodiks automaatselt selle väite väärtus.",
|
||||
"oauth_storage_quota_default": "Vaikimisi talletuskvoot (GiB)",
|
||||
"oauth_storage_quota_default_description": "Kvoot (GiB), mida kasutada, kui ühtegi väidet pole esitatud (piiramatu kvoodi jaoks sisesta 0).",
|
||||
"offline_paths": "Ühenduseta failiteed",
|
||||
"offline_paths_description": "Need tulemused võivad olla põhjustatud manuaalselt kustutatud failidest, mis ei ole osa välisest kogust.",
|
||||
"password_enable_description": "Logi sisse e-posti aadressi ja parooliga",
|
||||
"password_settings": "Parooliga sisselogimine",
|
||||
"password_settings_description": "Halda parooliga sisselogimise seadeid",
|
||||
@@ -186,12 +211,18 @@
|
||||
"person_cleanup_job": "Isikute korrastamine",
|
||||
"quota_size_gib": "Kvoot (GiB)",
|
||||
"refreshing_all_libraries": "Kõikide kogude värskendamine",
|
||||
"registration": "Administraatori registreerimine",
|
||||
"registration_description": "Kuna sa oled süsteemis esimene kasutaja, määratakse sind administraatoriks, ning sa saad lisada täiendavaid kasutajaid.",
|
||||
"repair_all": "Paranda kõik",
|
||||
"repair_matched_items": "{count, plural, one {# üksus} other {# üksust}} leitud",
|
||||
"repaired_items": "{count, plural, one {# üksus} other {# üksust}} parandatud",
|
||||
"require_password_change_on_login": "Nõua kasutajalt esmakordsel sisenemisel parooli muutmist",
|
||||
"reset_settings_to_default": "Lähtesta seaded",
|
||||
"reset_settings_to_recent_saved": "Taasta hiljuti salvestatud seaded",
|
||||
"scanning_library": "Kogu skaneerimine",
|
||||
"scanning_library_for_changed_files": "Kogu muutunud failide skaneerimine",
|
||||
"scanning_library_for_new_files": "Kogu uute failide skaneerimine",
|
||||
"search_jobs": "Otsi töödet...",
|
||||
"send_welcome_email": "Saada tervituskiri",
|
||||
"server_external_domain_settings": "Väline domeen",
|
||||
"server_external_domain_settings_description": "Domeen avalikult jagatud linkide jaoks, k.a. http(s)://",
|
||||
@@ -199,18 +230,35 @@
|
||||
"server_settings_description": "Halda serveri seadeid",
|
||||
"server_welcome_message": "Tervitusteade",
|
||||
"server_welcome_message_description": "Teade, mida kuvatakse sisselogimise lehel.",
|
||||
"sidecar_job": "Väliste failide metaandmed",
|
||||
"sidecar_job_description": "Avasta või sünkroniseeri väliste failide metaandmed failisüsteemist",
|
||||
"slideshow_duration_description": "Mitu sekundit igat pilti kuvada",
|
||||
"smart_search_job_description": "Käivita üksuste peal masinõpe, et toetada nutiotsingut",
|
||||
"storage_template_migration_info": "Malli muudatused rakenduvad ainult uutele üksustele. Et rakendada malli tagasiulatuvalt olemasolevatele üksustele, käivita <link>{job}</link>.",
|
||||
"storage_template_date_time_description": "Kuupäeva ja kellaaja informatsiooniks kasutatakse üksuse loomise aega",
|
||||
"storage_template_date_time_sample": "Näidisaeg {date}",
|
||||
"storage_template_enable_description": "Lülita sisse talletusmallimootor",
|
||||
"storage_template_hash_verification_enabled": "Räsi kontroll sisse lülitatud",
|
||||
"storage_template_hash_verification_enabled_description": "Lülitab sisse räsi kontrolli; ära lülita seda välja, kui sa ei ole tagajärgedest teadlik",
|
||||
"storage_template_migration": "Talletusmalli migreerimine",
|
||||
"storage_template_migration_description": "Rakenda praegune <link>{template}</link> varem üleslaaditud üksustele",
|
||||
"storage_template_migration_info": "Malli muudatused rakenduvad ainult uutele üksustele. Et rakendada malli tagasiulatuvalt varem üleslaaditud üksustele, käivita <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Talletusmallide migreerimise tööde",
|
||||
"storage_template_more_details": "Et selle funktsiooni kohta rohkem teada saada, loe <template-link>talletusmallide</template-link> ja nende <implications-link>tagajärgede</implications-link> kohta",
|
||||
"storage_template_onboarding_description": "Kui sisse lülitatud, võimaldab see faile kasutaja määratud malli alusel automaatselt organiseerida. Stabiilsusprobleemide tõttu on see funktsioon vaikimisi välja lülitatud. Rohkem infot leiad <link>dokumentatsioonist</link>.",
|
||||
"storage_template_path_length": "Tee pikkuse umbkaudne limiit: <b>{length, number}</b>/{limit, number}",
|
||||
"storage_template_settings": "Talletusmall",
|
||||
"storage_template_settings_description": "Halda üleslaaditud üksuse kaustastruktuuri ja failinime",
|
||||
"storage_template_user_label": "<code>{label}</code> on kasutaja talletussilt",
|
||||
"system_settings": "Süsteemi seaded",
|
||||
"tag_cleanup_job": "Siltide korrastamine",
|
||||
"theme_custom_css_settings": "Kohandatud CSS",
|
||||
"theme_custom_css_settings_description": "Cascading Style Sheets lubab Immich'i kujunduse kohandamist.",
|
||||
"theme_settings": "Teema seaded",
|
||||
"theme_settings_description": "Halda Immich'i veebiliidese kohandamist",
|
||||
"thumbnail_generation_job": "Genereeri pisipildid",
|
||||
"these_files_matched_by_checksum": "Need failid ühtivad kontrollsumma alusel",
|
||||
"thumbnail_generation_job": "Pisipiltide genereerimine",
|
||||
"thumbnail_generation_job_description": "Genereeri iga üksuse kohta suur, väike ja udustatud pisipilt ning iga isiku kohta pisipilt",
|
||||
"transcoding_acceleration_api": "Kiirenduse API",
|
||||
"transcoding_acceleration_api_description": "API, mis suhtleb su seadmega transkodeerimise kiirendamiseks. See seadistus on 'anname parima': ebaõnnestumisel kasutatakse tarkvaralist transkodeerimist. VP9 ei pruugi töötada, sõltuvalt riistvarast.",
|
||||
"transcoding_acceleration_nvenc": "NVENC (vajab NVIDIA GPU-d)",
|
||||
"transcoding_acceleration_qsv": "Quick Sync (vajab Inteli 7. põlvkonna või uuemat CPU-d)",
|
||||
@@ -229,13 +277,16 @@
|
||||
"transcoding_codecs_learn_more": "Siin kasutatud terminoloogia kohta rohkem teada saamiseks loe FFmpeg-i dokumentatsiooni <h264-link>H.264</h264-link>, <hevc-link>HEVC</hevc-link> ja <vp9-link>VP9</vp9-link> koodekite kohta.",
|
||||
"transcoding_constant_quality_mode": "Püsiva kvaliteedi režiim",
|
||||
"transcoding_constant_quality_mode_description": "ICQ on parem kui CQP, aga mõned riistvaralise kiirenduse seadmed ei toeta seda režiimi. Selle valiku seadmisel eelistatakse kvaliteedipõhise kodeerimise puhul valitud režiimi. NVENC puhul valikut ignoreeritakse, kuna see ei toeta ICQ-d.",
|
||||
"transcoding_constant_rate_factor": "Püsiv kiirusefaktor (-crf)",
|
||||
"transcoding_constant_rate_factor_description": "Video kvaliteeditase. Tüüpilised väärtused on 23 (H.264), 28 (HEVC), 31 (VP9) ning 35 (AV1). Madal on parem, aga tulemuseks on suuremad failid.",
|
||||
"transcoding_disabled_description": "Ära transkodeeri videosid. Võib takistada taasesitamist mõnedes seadmetes",
|
||||
"transcoding_hardware_acceleration": "Riistvaraline kiirendus",
|
||||
"transcoding_hardware_acceleration_description": "Eksperimentaalne; palju kiirem, aga sama bitisageduse juures madalam kvaliteet",
|
||||
"transcoding_hardware_decoding": "Riistvaraline dekodeerimine",
|
||||
"transcoding_hardware_decoding_setting_description": "Rakendub ainult NVENC, QSV ja RKMPP puhul. Võimaldab protsessi läbivalt kiirendada, mitte ainult kodeerimist. Ei pruugi kõigi videote puhul töötada.",
|
||||
"transcoding_hardware_decoding_setting_description": "Võimaldab protsessi läbivalt kiirendada, mitte ainult kodeerimist. Ei pruugi kõigi videote puhul töötada.",
|
||||
"transcoding_hevc_codec": "HEVC koodek",
|
||||
"transcoding_max_b_frames": "Maksimaalne B-kaadrite arv",
|
||||
"transcoding_max_b_frames_description": "Kõrgemad väärtused parandavad pakkimise efektiivsust, aga aeglustavad kodeerimist. See valik ei pruugi olla ühilduv riistvaralise kiirendusega vanematel seadmetel. 0 lülitab B-kaadrid välja, -1 määrab väärtuse automaatselt.",
|
||||
"transcoding_max_bitrate": "Maksimaalne bitisagedus",
|
||||
"transcoding_max_bitrate_description": "Maksimaalse bitisageduse määramine teeb failisuurused ennustatavamaks, väikese kvaliteedikao hinnaga. 720p resolutsiooni puhul on tüüpilised väärtused 2600k (VP9 ja HEVC) või 4500k (H.264). Väärtus 0 eemaldab piirangu.",
|
||||
"transcoding_max_keyframe_interval": "Maksimaalne võtmekaadri intervall",
|
||||
@@ -245,6 +296,8 @@
|
||||
"transcoding_preferred_hardware_device_description": "Rakendub ainult VAAPI ja QSV puhul. Määrab dri seadme, mida kasutatakse riistvaraliseks transkodeerimiseks.",
|
||||
"transcoding_preset_preset": "Eelseadistus (-preset)",
|
||||
"transcoding_preset_preset_description": "Pakkimiskiirus. Aeglasemad eelseadistused tekitavad väiksemaid faile ja annavad sama bitisageduse juures parema kvaliteedi. VP9 ignoreerib kiiruseid üle 'faster' taseme.",
|
||||
"transcoding_reference_frames": "Viitekaadrid",
|
||||
"transcoding_reference_frames_description": "Kaadrite arv, millele viidata jooksva kaadri pakkimisel. Suuremad väärtused parandavad pakkimise tõhusust, aga muudavad kodeerimise aeglasemaks. 0 määrab väärtuse automaatselt.",
|
||||
"transcoding_required_description": "Ainult mittelubatud formaadis videod",
|
||||
"transcoding_settings": "Video transkodeerimise seaded",
|
||||
"transcoding_settings_description": "Halda videofailide resolutsiooni ja kodeerimist",
|
||||
@@ -264,10 +317,16 @@
|
||||
"transcoding_two_pass_encoding_setting_description": "Transkodeeri kahes osas, et parandada kodeeritud videote kvaliteeti. Maksimaalse bitisageduse puhul (mis on vajalik H.264 ja HEVC jaoks) kasutab see režiim bitisageduse vahemikku ja ignoreerib CRF-i. VP9 puhul saab kasutada CRF-i, kui maksimaalset bitisagedust pole määratud.",
|
||||
"transcoding_video_codec": "Videokoodek",
|
||||
"transcoding_video_codec_description": "VP9 on võimekas ja veebiga ühilduv, aga transkodeerimine võtab kauem aega. HEVC on sarnase jõudluse, aga mitte nii hea veebiga ühilduvusega. H.264 on laialt ühilduv ja transkodeerimine on kiire, aga tulemuseks on suuremad failid. AV1 on kõige võimekam koodek, aga pole vanematel seadmetel toetatud.",
|
||||
"trash_enabled_description": "Luba prügikast",
|
||||
"trash_number_of_days": "Päevade arv",
|
||||
"trash_number_of_days_description": "Päevade arv, kui kaua hoida üksusi prügikastis enne nende lõplikku kustutamist",
|
||||
"trash_settings": "Prügikasti seaded",
|
||||
"trash_settings_description": "Halda prügikasti seadeid",
|
||||
"untracked_files": "Mittejälgitavad failid",
|
||||
"untracked_files_description": "Rakendus ei jälgi neid faile. Need võivad olla põhjustatud ebaõnnestunud liigutamisest, katkestatud üleslaadimisest või rakenduse veast",
|
||||
"user_cleanup_job": "Kasutajate korrastamine",
|
||||
"user_delete_delay": "Kasutaja <b>{user}</b> konto ja üksuste lõplik kustutamine on planeeritud {delay, plural, one {# päeva} other {# päeva}} pärast.",
|
||||
"user_delete_delay_settings": "Kustutamise viivitus",
|
||||
"user_delete_delay_settings_description": "Päevade arv, pärast mida kustutatakse eemaldatud kasutaja konto ja üksused jäädavalt. Kasutajate kustutamise tööde käivitub keskööl, et otsida kustutamiseks valmis kasutajaid. Selle seadistuse muudatused rakenduvad järgmisel käivitumisel.",
|
||||
"user_delete_immediately": "Kasutaja <b>{user}</b> konto ja üksused suunatakse <b>koheselt</b> jäädavale kustutamisele.",
|
||||
"user_delete_immediately_checkbox": "Suuna kasutaja ja üksused jäädavale kustutamisele",
|
||||
@@ -283,11 +342,13 @@
|
||||
"version_check_implications": "Versioonikontroll vajab perioodilist ühendumist github.com-iga",
|
||||
"version_check_settings": "Versioonikontroll",
|
||||
"version_check_settings_description": "Luba/keela uue versiooni teavitus",
|
||||
"video_conversion_job": "Transkodeeri videod",
|
||||
"video_conversion_job_description": "Transkodeeri videod suurema brauserite ja seadmetega ühilduvuse nimel"
|
||||
"video_conversion_job": "Videote transkodeerimine",
|
||||
"video_conversion_job_description": "Transkodeeri videod laiema brauserite ja seadmetega ühilduvuse nimel"
|
||||
},
|
||||
"admin_email": "Administraatori e-post",
|
||||
"admin_password": "Administraatori parool",
|
||||
"administration": "Administratsioon",
|
||||
"advanced": "Täpsemad valikud",
|
||||
"age_months": "Vanus {months, plural, one {# kuu} other {# kuud}}",
|
||||
"age_year_months": "Vanus 1 aasta, {months, plural, one {# kuu} other {# kuud}}",
|
||||
"age_years": "{years, plural, other {Vanus #}}",
|
||||
@@ -303,8 +364,11 @@
|
||||
"album_options": "Albumi valikud",
|
||||
"album_remove_user": "Eemalda kasutaja?",
|
||||
"album_remove_user_confirmation": "Kas oled kindel, et soovid kasutaja {user} eemaldada?",
|
||||
"album_share_no_users": "Paistab, et oled seda albumit kõikide kasutajatega jaganud, või pole ühtegi kasutajat, kellega jagada.",
|
||||
"album_updated": "Album muudetud",
|
||||
"album_updated_setting_description": "Saa teavitus e-posti teel, kui jagatud albumis on uusi üksuseid",
|
||||
"album_user_left": "Lahkutud albumist {album}",
|
||||
"album_user_removed": "Kasutaja {user} eemaldatud",
|
||||
"album_with_link_access": "Luba kõigil, kellel on link, näha selle albumi fotosid ja isikuid.",
|
||||
"albums": "Albumid",
|
||||
"albums_count": "{count, plural, one {{count, number} album} other {{count, number} albumit}}",
|
||||
@@ -312,16 +376,22 @@
|
||||
"all_albums": "Kõik albumid",
|
||||
"all_people": "Kõik isikud",
|
||||
"all_videos": "Kõik videod",
|
||||
"allow_dark_mode": "Luba tume teema",
|
||||
"allow_edits": "Luba muutmine",
|
||||
"allow_public_user_to_download": "Luba avalikul kasutajal alla laadida",
|
||||
"allow_public_user_to_upload": "Luba avalikul kasutajal üles laadida",
|
||||
"anti_clockwise": "Vastupäeva",
|
||||
"api_key": "API võti",
|
||||
"api_key_description": "Seda väärtust kuvatakse ainult üks kord. Kopeeri see enne akna sulgemist.",
|
||||
"api_key_empty": "Su API võtme nimi ei tohiks olla tühi",
|
||||
"api_keys": "API võtmed",
|
||||
"app_settings": "Rakenduse seaded",
|
||||
"appears_in": "Kuvatud",
|
||||
"archive": "Arhiiv",
|
||||
"archive_or_unarchive_photo": "Arhiveeri või taasta foto",
|
||||
"archive_size": "Arhiivi suurus",
|
||||
"archive_size_description": "Seadista arhiivi suurus allalaadimiseks (GiB)",
|
||||
"archived_count": "{count, plural, other {# arhiveeritud}}",
|
||||
"are_these_the_same_person": "Kas need on sama isik?",
|
||||
"are_you_sure_to_do_this": "Kas oled kindel, et soovid seda teha?",
|
||||
"asset_added_to_album": "Lisatud albumisse",
|
||||
@@ -331,8 +401,9 @@
|
||||
"asset_has_unassigned_faces": "Üksusel on seostamata nägusid",
|
||||
"asset_hashing": "Räsimine...",
|
||||
"asset_offline": "Üksus pole kättesaadav",
|
||||
"asset_offline_description": "See üksus pole kättesaadav. Immich ei saa selle asukohale ligi. Palun tee üksus kättesaadavaks ja siis skaneeri kogu uuesti.",
|
||||
"asset_offline_description": "Seda välise kogu üksust ei leitud kettalt. Abi saamiseks palun võta ühendust oma Immich'i administraatoriga.",
|
||||
"asset_skipped": "Vahele jäetud",
|
||||
"asset_skipped_in_trash": "Prügikastis",
|
||||
"asset_uploaded": "Üleslaaditud",
|
||||
"asset_uploading": "Üleslaadimine...",
|
||||
"assets": "Üksused",
|
||||
@@ -343,15 +414,20 @@
|
||||
"assets_moved_to_trash_count": "{count, plural, one {# üksus} other {# üksust}} liigutatud prügikasti",
|
||||
"assets_permanently_deleted_count": "{count, plural, one {# üksus} other {# üksust}} jäädavalt kustutatud",
|
||||
"assets_removed_count": "{count, plural, one {# üksus} other {# üksust}} eemaldatud",
|
||||
"assets_restore_confirmation": "Kas oled kindel, et soovid oma kustutatud üksused taastada? Seda ei saa tagasi võtta!",
|
||||
"assets_restore_confirmation": "Kas oled kindel, et soovid oma prügikasti liigutatud üksused taastada? Seda ei saa tagasi võtta! Pane tähele, et sel meetodil ei saa taastada ühenduseta üksuseid.",
|
||||
"assets_restored_count": "{count, plural, one {# üksus} other {# üksust}} taastatud",
|
||||
"assets_trashed_count": "{count, plural, one {# üksus} other {# üksust}} kustutatud",
|
||||
"assets_trashed_count": "{count, plural, one {# üksus} other {# üksust}} liigutatud prügikasti",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {Üksus oli} other {Üksused olid}} juba osa albumist",
|
||||
"authorized_devices": "Autoriseeritud seadmed",
|
||||
"back": "Tagasi",
|
||||
"back_close_deselect": "Tagasi, sulge, või tühista valik",
|
||||
"backward": "Tagasi",
|
||||
"birthdate_saved": "Sünnikuupäev salvestatud",
|
||||
"birthdate_set_description": "Sünnikuupäeva kasutatakse isiku vanuse arvutamiseks foto tegemise hetkel.",
|
||||
"blurred_background": "Udustatud taust",
|
||||
"bugs_and_feature_requests": "Vearaportid ja täiendussoovid",
|
||||
"build": "Kooste",
|
||||
"build_image": "Koostetõmmis",
|
||||
"bulk_delete_duplicates_confirmation": "Kas oled kindel, et soovid {count, plural, one {# dubleeritud üksuse} other {# dubleeritud üksust}} masskustutada? Sellega jäetakse alles iga grupi suurim üksus ning duplikaadid kustutatakse jäädavalt. Seda tegevust ei saa tagasi võtta!",
|
||||
"bulk_keep_duplicates_confirmation": "Kas oled kindel, et soovid {count, plural, one {# dubleeritud üksuse} other {# dubleeritud üksust}} alles jätta? Sellega märgitakse kõik duplikaadigrupid lahendatuks ilma midagi kustutamata.",
|
||||
"bulk_trash_duplicates_confirmation": "Kas oled kindel, et soovid {count, plural, one {# dubleeritud üksuse} other {# dubleeritud üksust}} masskustutada? Sellega jäetakse alles iga grupi suurim üksus ning duplikaadid liigutatakse prügikasti.",
|
||||
@@ -368,6 +444,7 @@
|
||||
"change_expiration_time": "Muuda aegumisaega",
|
||||
"change_location": "Muuda asukohta",
|
||||
"change_name": "Muuda nime",
|
||||
"change_name_successfully": "Nimi edukalt muudetud",
|
||||
"change_password": "Parooli muutmine",
|
||||
"change_password_description": "See on su esimene kord süsteemi siseneda, või on tehtud taotlus parooli muutmiseks. Palun sisesta allpool uus parool.",
|
||||
"change_your_password": "Muuda oma parooli",
|
||||
@@ -379,9 +456,12 @@
|
||||
"clear": "Tühjenda",
|
||||
"clear_all": "Tühjenda kõik",
|
||||
"clear_all_recent_searches": "Tühjenda hiljutised otsingud",
|
||||
"clear_message": "Tühjenda sõnum",
|
||||
"clear_value": "Tühjenda väärtus",
|
||||
"clockwise": "Päripäeva",
|
||||
"close": "Sulge",
|
||||
"collapse": "Peida",
|
||||
"collapse_all": "Peida kõik",
|
||||
"color": "Värv",
|
||||
"color_theme": "Värviteema",
|
||||
"comment_deleted": "Kommentaar kustutatud",
|
||||
@@ -392,6 +472,7 @@
|
||||
"confirm_admin_password": "Kinnita administraatori parool",
|
||||
"confirm_delete_shared_link": "Kas oled kindel, et soovid selle jagatud lingi kustutada?",
|
||||
"confirm_password": "Kinnita parool",
|
||||
"contain": "Mahuta ära",
|
||||
"context": "Kontekst",
|
||||
"continue": "Jätka",
|
||||
"copied_image_to_clipboard": "Pilt kopeeritud lõikelauale.",
|
||||
@@ -404,12 +485,14 @@
|
||||
"copy_password": "Kopeeri parool",
|
||||
"copy_to_clipboard": "Kopeeri lõikelauale",
|
||||
"country": "Riik",
|
||||
"cover": "Kata kogu ala",
|
||||
"covers": "Kaanepildid",
|
||||
"create": "Lisa",
|
||||
"create_album": "Lisa album",
|
||||
"create_library": "Lisa kogu",
|
||||
"create_link": "Lisa link",
|
||||
"create_link_to_share": "Lisa jagamiseks link",
|
||||
"create_link_to_share_description": "Luba kõigil, kellel on link, valitud pilte näha",
|
||||
"create_new_person": "Lisa uus isik",
|
||||
"create_new_person_hint": "Seosta valitud üksused uue isikuga",
|
||||
"create_new_user": "Lisa uus kasutaja",
|
||||
@@ -427,6 +510,7 @@
|
||||
"date_of_birth_saved": "Sünnikuupäev salvestatud",
|
||||
"date_range": "Kuupäevavahemik",
|
||||
"day": "Päev",
|
||||
"deduplicate_all": "Dedubleeri kõik",
|
||||
"default_locale": "Vaikimisi lokaat",
|
||||
"default_locale_description": "Vorminda kuupäevad ja numbrid vastavalt brauseri lokaadile",
|
||||
"delete": "Kustuta",
|
||||
@@ -441,16 +525,26 @@
|
||||
"delete_tag_confirmation_prompt": "Kas oled kindel, et soovid sildi {tagName} kustutada?",
|
||||
"delete_user": "Kustuta kasutaja",
|
||||
"deleted_shared_link": "Jagatud link kustutatud",
|
||||
"deletes_missing_assets": "Kustutab üksused, mis on kettalt puudu",
|
||||
"description": "Kirjeldus",
|
||||
"details": "Üksikasjad",
|
||||
"direction": "Suund",
|
||||
"disabled": "Välja lülitatud",
|
||||
"disallow_edits": "Keela muutmine",
|
||||
"discord": "Discord",
|
||||
"discover": "Avasta",
|
||||
"dismiss_all_errors": "Peida kõik veateated",
|
||||
"dismiss_error": "Peida veateade",
|
||||
"display_options": "Kuva valikud",
|
||||
"display_order": "Kuvamise järjekord",
|
||||
"display_original_photos": "Kuva originaalpildid",
|
||||
"display_original_photos_setting_description": "Eelista üksuse vaatamisel pisipildile algset fotot, kui see on veebiga ühilduv. See võib mõjutada fotode kuvamise kiirust.",
|
||||
"do_not_show_again": "Ära näita enam seda teadet",
|
||||
"documentation": "Dokumentatsioon",
|
||||
"done": "Tehtud",
|
||||
"download": "Laadi alla",
|
||||
"download_include_embedded_motion_videos": "Manustatud videod",
|
||||
"download_include_embedded_motion_videos_description": "Lisa liikuvatesse fotodesse manustatud videod eraldi failidena",
|
||||
"download_settings": "Allalaadimine",
|
||||
"download_settings_description": "Halda üksuste allalaadimise seadeid",
|
||||
"downloading": "Allalaadimine",
|
||||
@@ -467,6 +561,7 @@
|
||||
"edit_exclusion_pattern": "Muuda välistamismustrit",
|
||||
"edit_faces": "Muuda nägusid",
|
||||
"edit_import_path": "Muuda imporditeed",
|
||||
"edit_import_paths": "Muuda imporditeid",
|
||||
"edit_key": "Muuda võtit",
|
||||
"edit_link": "Muuda linki",
|
||||
"edit_location": "Muuda asukohta",
|
||||
@@ -476,10 +571,16 @@
|
||||
"edit_title": "Muuda pealkirja",
|
||||
"edit_user": "Muuda kasutajat",
|
||||
"edited": "Muudetud",
|
||||
"editor": "Muutja",
|
||||
"editor_close_without_save_prompt": "Muudatusi ei salvestata",
|
||||
"editor_close_without_save_title": "Sulge muutja?",
|
||||
"editor_crop_tool_h2_aspect_ratios": "Kuvasuhted",
|
||||
"editor_crop_tool_h2_rotation": "Pööre",
|
||||
"email": "E-post",
|
||||
"empty_trash": "Tühjenda prügikast",
|
||||
"empty_trash_confirmation": "Kas oled kindel, et soovid prügikasti tühjendada? See eemaldab kõik seal olevad üksused Immich'ist jäädavalt.\nSeda tegevust ei saa tagasi võtta!",
|
||||
"enable": "Luba",
|
||||
"enabled": "Lubatud",
|
||||
"end_date": "Lõppkuupäev",
|
||||
"error": "Viga",
|
||||
"error_loading_image": "Viga pildi laadimisel",
|
||||
@@ -488,12 +589,14 @@
|
||||
"cannot_navigate_next_asset": "Järgmise üksuse juurde liikumine ebaõnnestus",
|
||||
"cannot_navigate_previous_asset": "Eelmise üksuse juurde liikumine ebaõnnestus",
|
||||
"cant_apply_changes": "Muudatusi ei õnnestunud rakendada",
|
||||
"cant_change_activity": "Aktiivsuse {enabled, select, true {keelamine} other {lubamine}} ebaõnnestus",
|
||||
"cant_change_asset_favorite": "Üksuse lemmiku staatust ei õnnestunud muuta",
|
||||
"cant_change_metadata_assets_count": "{count, plural, one {# üksuse} other {# üksuse}} metaandmeid ei õnnestunud muuta",
|
||||
"cant_get_faces": "Nägusid ei õnnestunud kätte saada",
|
||||
"cant_get_number_of_comments": "Kommentaare ei õnnestunud leida",
|
||||
"cant_search_people": "Isikuid ei õnnestunud otsida",
|
||||
"cant_search_places": "Kohti ei õnnestunud otsida",
|
||||
"cleared_jobs": "Tööted eemaldatud: {job}",
|
||||
"error_adding_assets_to_album": "Viga üksuste albumisse lisamisel",
|
||||
"error_adding_users_to_album": "Viga kasutajate albumisse lisamisel",
|
||||
"error_deleting_shared_user": "Viga jagatud kasutaja kustutamisel",
|
||||
@@ -512,10 +615,13 @@
|
||||
"failed_to_load_people": "Isikute laadimine ebaõnnestus",
|
||||
"failed_to_remove_product_key": "Tootevõtme eemaldamine ebaõnnestus",
|
||||
"failed_to_stack_assets": "Üksuste virnastamine ebaõnnestus",
|
||||
"failed_to_unstack_assets": "Üksuste eraldamine ebaõnnestus",
|
||||
"import_path_already_exists": "See imporditee on juba olemas.",
|
||||
"incorrect_email_or_password": "Vale e-posti aadress või parool",
|
||||
"paths_validation_failed": "{paths, plural, one {# tee} other {# teed}} ei valideerunud",
|
||||
"profile_picture_transparent_pixels": "Profiilipildis ei tohi olla läbipaistvaid piksleid. Palun suumi sisse ja/või liiguta pilti.",
|
||||
"quota_higher_than_disk_size": "Määratud kvoot on suurem kui kettamaht",
|
||||
"repair_unable_to_check_items": "{count, select, one {Üksuse} other {Üksuste}} kontrollimine ebaõnnestus",
|
||||
"unable_to_add_album_users": "Kasutajate lisamine albumisse ebaõnnestus",
|
||||
"unable_to_add_assets_to_shared_link": "Üksuste jagatud lingile lisamine ebaõnnestus",
|
||||
"unable_to_add_comment": "Kommentaari lisamine ebaõnnestus",
|
||||
@@ -553,10 +659,14 @@
|
||||
"unable_to_enter_fullscreen": "Täisekraanile lülitamine ebaõnnestus",
|
||||
"unable_to_exit_fullscreen": "Täisekraanilt väljumine ebaõnnestus",
|
||||
"unable_to_get_comments_number": "Kommentaaride arvu leidmine ebaõnnestus",
|
||||
"unable_to_get_shared_link": "Jagamise lingi loomine ebaõnnestus",
|
||||
"unable_to_hide_person": "Isiku peitmine ebaõnnestus",
|
||||
"unable_to_link_motion_video": "Liikuva video linkimine ebaõnnestus",
|
||||
"unable_to_link_oauth_account": "OAuth konto ühendamine ebaõnnestus",
|
||||
"unable_to_load_album": "Albumi laadimine ebaõnnestus",
|
||||
"unable_to_load_asset_activity": "Üksuse aktiivsuse laadimine ebaõnnestus",
|
||||
"unable_to_load_items": "Üksuste laadimine ebaõnnestus",
|
||||
"unable_to_load_liked_status": "Meeldimise staatuse laadimine ebaõnnestus",
|
||||
"unable_to_log_out_all_devices": "Kõigist seadmetest väljalogimine ebaõnnestus",
|
||||
"unable_to_log_out_device": "Seadmest väljalogimine ebaõnnestus",
|
||||
"unable_to_login_with_oauth": "OAuth abil sisselogimine ebaõnnestus",
|
||||
@@ -567,9 +677,11 @@
|
||||
"unable_to_remove_album_users": "Kasutajate albumist eemaldamine ebaõnnestus",
|
||||
"unable_to_remove_api_key": "API võtme eemaldamine ebaõnnestus",
|
||||
"unable_to_remove_assets_from_shared_link": "Üksuste jagatud lingilt eemaldamine ebaõnnestus",
|
||||
"unable_to_remove_deleted_assets": "Ühenduseta failide eemaldamine ebaõnnestus",
|
||||
"unable_to_remove_library": "Kogu eemaldamine ebaõnnestus",
|
||||
"unable_to_remove_partner": "Partneri eemaldamine ebaõnnestus",
|
||||
"unable_to_remove_reaction": "Reaktsiooni eemaldamine ebaõnnestus",
|
||||
"unable_to_repair_items": "Üksuste parandamine ebaõnnestus",
|
||||
"unable_to_reset_password": "Parooli lähtestamine ebaõnnestus",
|
||||
"unable_to_resolve_duplicate": "Duplikaadi lahendamine ebaõnnestus",
|
||||
"unable_to_restore_assets": "Üksuste taastamine ebaõnnestus",
|
||||
@@ -585,17 +697,22 @@
|
||||
"unable_to_scan_library": "Kogu skaneerimine ebaõnnestus",
|
||||
"unable_to_set_feature_photo": "Esiletõstetud foto seadmine ebaõnnestus",
|
||||
"unable_to_set_profile_picture": "Profiilipildi seadmine ebaõnnestus",
|
||||
"unable_to_trash_asset": "Üksuse kustutamine ebaõnnestus",
|
||||
"unable_to_submit_job": "Tööte edastamine ebaõnnestus",
|
||||
"unable_to_trash_asset": "Üksuse prügikasti liigutamine ebaõnnestus",
|
||||
"unable_to_unlink_account": "Konto lahtiühendamine ebaõnnestus",
|
||||
"unable_to_update_album_cover": "Albumi kaanepildi muutmine ebaõnnestus",
|
||||
"unable_to_update_album_info": "Albumi info muutmine ebaõnnestus",
|
||||
"unable_to_update_library": "Kogu uuendamine ebaõnnestus",
|
||||
"unable_to_update_location": "Asukoha muutmine ebaõnnestus",
|
||||
"unable_to_update_settings": "Seadete muutmine ebaõnnestus",
|
||||
"unable_to_update_timeline_display_status": "Ajajoonel kuvamise uuendamine ebaõnnestus",
|
||||
"unable_to_update_user": "Kasutaja muutmine ebaõnnestus",
|
||||
"unable_to_upload_file": "Faili üleslaadimine ebaõnnestus"
|
||||
},
|
||||
"exif": "Exif",
|
||||
"expire_after": "Aegub pärast",
|
||||
"exit_slideshow": "Sulge slaidiesitlus",
|
||||
"expand_all": "Näita kõik",
|
||||
"expire_after": "Aegub",
|
||||
"expired": "Aegunud",
|
||||
"expires_date": "Aegub {date}",
|
||||
"explore": "Avasta",
|
||||
@@ -629,6 +746,7 @@
|
||||
"group_no": "Ära grupeeri",
|
||||
"group_owner": "Grupeeri omaniku kaupa",
|
||||
"group_year": "Grupeeri aasta kaupa",
|
||||
"has_quota": "On kvoot",
|
||||
"hi_user": "Tere {name} ({email})",
|
||||
"hide_all_people": "Peida kõik isikud",
|
||||
"hide_gallery": "Peida galerii",
|
||||
@@ -644,11 +762,21 @@
|
||||
"image_alt_text_date_2_people": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} koos isikutega {person1} ja {person2}",
|
||||
"image_alt_text_date_3_people": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} koos isikutega {person1}, {person2} ja {person3}",
|
||||
"image_alt_text_date_4_or_more_people": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} koos {person1}, {person2} ja veel {additionalCount, number} isikuga",
|
||||
"image_alt_text_date_place": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} kohas {city}, {country}",
|
||||
"image_alt_text_date_place_1_person": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} kohas {city}, {country} koos isikuga {person1}",
|
||||
"image_alt_text_date_place_2_people": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} kohas {city}, {country} koos isikutega {person1} ja {person2}",
|
||||
"image_alt_text_date_place_3_people": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} kohas {city}, {country} koos isikutega {person1}, {person2} ja {person3}",
|
||||
"image_alt_text_date_place_4_or_more_people": "{isVideo, select, true {Video} other {Pilt}} tehtud {date} kohas {city}, {country} koos {person1}, {person2} ja veel {additionalCount, number} isikuga",
|
||||
"immich_logo": "Immich'i logo",
|
||||
"immich_web_interface": "Immich'i veebiliides",
|
||||
"import_from_json": "Impordi JSON-formaadist",
|
||||
"import_path": "Imporditee",
|
||||
"in_albums": "{count, plural, one {# albumis} other {# albumis}}",
|
||||
"in_archive": "Arhiivis",
|
||||
"include_archived": "Kaasa arhiveeritud",
|
||||
"include_shared_albums": "Kaasa jagatud albumid",
|
||||
"include_shared_partner_assets": "Kaasa partneri jagatud üksused",
|
||||
"individual_share": "Jagatud üksus",
|
||||
"info": "Info",
|
||||
"interval": {
|
||||
"day_at_onepm": "Iga päev kell 13",
|
||||
@@ -658,6 +786,7 @@
|
||||
},
|
||||
"invite_people": "Kutsu inimesi",
|
||||
"invite_to_album": "Kutsu albumisse",
|
||||
"items_count": "{count, plural, one {# üksus} other {# üksust}}",
|
||||
"jobs": "Tööted",
|
||||
"keep": "Jäta alles",
|
||||
"keep_all": "Jäta kõik alles",
|
||||
@@ -669,10 +798,14 @@
|
||||
"latitude": "Laiuskraad",
|
||||
"leave": "Lahku",
|
||||
"let_others_respond": "Luba teistel vastata",
|
||||
"level": "Tase",
|
||||
"library": "Kogu",
|
||||
"library_options": "Kogu seaded",
|
||||
"light": "Hele",
|
||||
"like_deleted": "Meeldimine kustutatud",
|
||||
"link_options": "Lingi valikud",
|
||||
"link_to_oauth": "Ühenda OAuth",
|
||||
"linked_oauth_account": "OAuth konto ühendatud",
|
||||
"list": "Loend",
|
||||
"loading": "Laadimine",
|
||||
"loading_search_results_failed": "Otsitulemuste laadimine ebaõnnestus",
|
||||
@@ -680,11 +813,15 @@
|
||||
"log_out_all_devices": "Logi kõigist seadmetest välja",
|
||||
"logged_out_all_devices": "Kõigist seadmetest välja logitud",
|
||||
"logged_out_device": "Seadmest välja logitud",
|
||||
"login": "Logi sisse",
|
||||
"login_has_been_disabled": "Sisselogimine on keelatud.",
|
||||
"logout_all_device_confirmation": "Kas oled kindel, et soovid kõigist seadmetest välja logida?",
|
||||
"logout_this_device_confirmation": "Kas oled kindel, et soovid sellest seadmest välja logida?",
|
||||
"longitude": "Pikkuskraad",
|
||||
"look": "Välimus",
|
||||
"loop_videos": "Taasesita videod",
|
||||
"loop_videos_description": "Lülita sisse, et detailvaates videot automaatselt taasesitada.",
|
||||
"main_branch_warning": "Sa kasutad arendusversiooni; soovitame tungivalt kasutada väljalaskeversiooni!",
|
||||
"make": "Mark",
|
||||
"manage_shared_links": "Halda jagatud linke",
|
||||
"manage_sharing_with_partners": "Halda partneritega jagamist",
|
||||
@@ -692,8 +829,12 @@
|
||||
"manage_your_account": "Halda oma kontot",
|
||||
"manage_your_api_keys": "Halda oma API võtmeid",
|
||||
"manage_your_devices": "Halda oma autenditud seadmeid",
|
||||
"manage_your_oauth_connection": "Halda oma OAuth ühendust",
|
||||
"map": "Kaart",
|
||||
"map_marker_for_images": "Kaardimarker kohas {city}, {country} tehtud piltide jaoks",
|
||||
"map_marker_with_image": "Kaardimarker pildiga",
|
||||
"map_settings": "Kaardi seaded",
|
||||
"matches": "Ühtivad failid",
|
||||
"media_type": "Meedia tüüp",
|
||||
"memories": "Mälestused",
|
||||
"memories_setting_description": "Halda, mida sa oma mälestustes näed",
|
||||
@@ -705,13 +846,17 @@
|
||||
"merge_people_prompt": "Kas soovid need isikud ühendada? Seda tegevust ei saa tagasi võtta.",
|
||||
"merge_people_successfully": "Isikud ühendatud",
|
||||
"merged_people_count": "Ühendatud {count, plural, one {# isik} other {# isikut}}",
|
||||
"minimize": "Minimeeri",
|
||||
"minute": "Minut",
|
||||
"missing": "Puuduvad",
|
||||
"model": "Mudel",
|
||||
"month": "Kuu",
|
||||
"more": "Rohkem",
|
||||
"moved_to_trash": "Liigutatud prügikasti",
|
||||
"my_albums": "Minu albumid",
|
||||
"name": "Nimi",
|
||||
"name_or_nickname": "Nimi või hüüdnimi",
|
||||
"never": "Mitte kunagi",
|
||||
"new_album": "Uus album",
|
||||
"new_api_key": "Uus API võti",
|
||||
"new_password": "Uus parool",
|
||||
@@ -732,18 +877,31 @@
|
||||
"no_explore_results_message": "Oma kogu avastamiseks laadi üles rohkem fotosid.",
|
||||
"no_favorites_message": "Lisa lemmikud, et oma parimaid fotosid ja videosid kiiresti leida",
|
||||
"no_libraries_message": "Lisa väline kogu oma fotode ja videote vaatamiseks",
|
||||
"no_name": "Nimetu",
|
||||
"no_places": "Kohti ei ole",
|
||||
"no_results": "Vasteid pole",
|
||||
"no_results_description": "Proovi sünonüümi või üldisemat märksõna",
|
||||
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
|
||||
"not_in_any_album": "Pole üheski albumis",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
|
||||
"note_unlimited_quota": "Märkus: Piiramatu kvoodi jaoks sisesta 0",
|
||||
"notes": "Märkused",
|
||||
"notification_toggle_setting_description": "Luba e-posti teel teavitused",
|
||||
"notifications": "Teavitused",
|
||||
"notifications_setting_description": "Halda teavitusi",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Ametlikud Immich'i ressursid",
|
||||
"offline": "Ühendus puudub",
|
||||
"offline_paths": "Ühenduseta failiteed",
|
||||
"offline_paths_description": "Need tulemused võivad olla põhjustatud manuaalselt kustutatud failidest, mis ei ole osa välisest kogust.",
|
||||
"ok": "Ok",
|
||||
"oldest_first": "Vanemad eespool",
|
||||
"onboarding": "Kasutuselevõtt",
|
||||
"onboarding_privacy_description": "Järgnevad (valikulised) funktsioonid sõltuvad välistest teenustest ning neid saab igal ajal administraatori seadetes välja lülitada.",
|
||||
"onboarding_theme_description": "Vali oma serverile värviteema. Saad seda hiljem seadetes muuta.",
|
||||
"onboarding_welcome_description": "Algväärtustame mõned levinumad seaded.",
|
||||
"onboarding_welcome_user": "Tere tulemast, {user}",
|
||||
"online": "Ühendatud",
|
||||
"only_favorites": "Ainult lemmikud",
|
||||
"only_refreshes_modified_files": "Värskendab ainult muudetud failid",
|
||||
"open_in_map_view": "Ava kaardi vaates",
|
||||
@@ -753,6 +911,7 @@
|
||||
"or": "või",
|
||||
"organize_your_library": "Korrasta oma kogu",
|
||||
"original": "originaal",
|
||||
"other": "Muud",
|
||||
"other_devices": "Muud seadmed",
|
||||
"other_variables": "Muud muutujad",
|
||||
"owned": "Minu omad",
|
||||
@@ -774,6 +933,7 @@
|
||||
},
|
||||
"path": "Tee",
|
||||
"pattern": "Muster",
|
||||
"pause": "Peata",
|
||||
"pause_memories": "Peata mälestused",
|
||||
"paused": "Peatatud",
|
||||
"pending": "Ootel",
|
||||
@@ -798,7 +958,9 @@
|
||||
"pick_a_location": "Vali asukoht",
|
||||
"place": "Asukoht",
|
||||
"places": "Kohad",
|
||||
"play": "Esita",
|
||||
"play_memories": "Esita mälestused",
|
||||
"play_motion_photo": "Esita liikuv foto",
|
||||
"play_or_pause_video": "Esita või peata video",
|
||||
"port": "Port",
|
||||
"preset": "Eelseadistus",
|
||||
@@ -806,6 +968,7 @@
|
||||
"previous": "Eelmine",
|
||||
"previous_memory": "Eelmine mälestus",
|
||||
"previous_or_next_photo": "Eelmine või järgmine foto",
|
||||
"primary": "Peamine",
|
||||
"privacy": "Privaatsus",
|
||||
"profile_image_of_user": "Kasutaja {user} profiilipilt",
|
||||
"profile_picture_set": "Profiilipilt määratud.",
|
||||
@@ -824,6 +987,7 @@
|
||||
"purchase_failed_activation": "Aktiveerimine ebaõnnestus! Kontrolli oma kirjakastist õiget tootevõtit!",
|
||||
"purchase_individual_description_1": "Üksikisikule",
|
||||
"purchase_individual_description_2": "Toetaja staatus",
|
||||
"purchase_individual_title": "Individuaalne",
|
||||
"purchase_input_suggestion": "Sul on juba tootevõti? Sisesta see allpool",
|
||||
"purchase_license_subtitle": "Osta Immich, et toetada selle jätkuvat arendust",
|
||||
"purchase_lifetime_description": "Eluaegne ost",
|
||||
@@ -841,6 +1005,10 @@
|
||||
"purchase_server_description_2": "Toetaja staatus",
|
||||
"purchase_server_title": "Server",
|
||||
"purchase_settings_server_activated": "Serveri tootevõtit haldab administraator",
|
||||
"rating": "Hinnang",
|
||||
"rating_clear": "Tühjenda hinnang",
|
||||
"rating_count": "{count, plural, one {# tärn} other {# tärni}}",
|
||||
"rating_description": "Kuva infopaneelis EXIF hinnangut",
|
||||
"reaction_options": "Reaktsiooni valikud",
|
||||
"read_changelog": "Vaata muudatuste ülevaadet",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# üksus} other {# üksust}} seostatud {name, select, null {olemasoleva isikuga} other {isikuga {name}}}",
|
||||
@@ -849,17 +1017,21 @@
|
||||
"recent_searches": "Hiljutised otsingud",
|
||||
"refresh": "Värskenda",
|
||||
"refresh_encoded_videos": "Värskenda kodeeritud videod",
|
||||
"refresh_faces": "Värskenda näod",
|
||||
"refresh_metadata": "Värskenda metaandmed",
|
||||
"refresh_thumbnails": "Värskenda pisipildid",
|
||||
"refreshed": "Värskendatud",
|
||||
"refreshes_every_file": "Värskendab kõik failid",
|
||||
"refreshes_every_file": "Loeb kõik olemasolevad ja uued failid uuesti",
|
||||
"refreshing_encoded_video": "Kodeeritud videote värskendamine",
|
||||
"refreshing_faces": "Nägude värskendamine",
|
||||
"refreshing_metadata": "Metaandmete värskendamine",
|
||||
"regenerating_thumbnails": "Pisipiltide uuesti genereerimine",
|
||||
"remove": "Eemalda",
|
||||
"remove_assets_album_confirmation": "Kas oled kindel, et soovid {count, plural, one {# üksuse} other {# üksust}} albumist eemaldada?",
|
||||
"remove_assets_shared_link_confirmation": "Kas oled kindel, et soovid eemaldada {count, plural, one {# üksuse} other {# üksust}} sellelt jagatud lingilt?",
|
||||
"remove_assets_title": "Eemalda üksused?",
|
||||
"remove_custom_date_range": "Eemalda kohandatud kuupäevavahemik",
|
||||
"remove_deleted_assets": "Eemalda kustutatud üksused",
|
||||
"remove_from_album": "Eemalda albumist",
|
||||
"remove_from_favorites": "Eemalda lemmikutest",
|
||||
"remove_from_shared_link": "Eemalda jagatud lingist",
|
||||
@@ -870,6 +1042,9 @@
|
||||
"removed_from_favorites_count": "{count, plural, other {# eemaldatud}} lemmikutest",
|
||||
"removed_tagged_assets": "Silt eemaldatud {count, plural, one {# üksuselt} other {# üksuselt}}",
|
||||
"rename": "Nimeta ümber",
|
||||
"repair_no_results_message": "Mittejälgitavad ja puuduvad failid kuvatakse siin",
|
||||
"replace_with_upload": "Asenda üleslaadimisega",
|
||||
"repository": "Koodihoidla",
|
||||
"require_password": "Nõua parooli",
|
||||
"require_user_to_change_password_on_first_login": "Nõua kasutajalt esmakordsel sisenemisel parooli muutmist",
|
||||
"reset": "Lähtesta",
|
||||
@@ -883,7 +1058,11 @@
|
||||
"restore_user": "Taasta kasutaja",
|
||||
"restored_asset": "Üksus taastatud",
|
||||
"resume": "Jätka",
|
||||
"retry_upload": "Proovi üleslaadimist uuesti",
|
||||
"review_duplicates": "Vaata duplikaadid läbi",
|
||||
"role": "Roll",
|
||||
"role_editor": "Muutja",
|
||||
"role_viewer": "Vaataja",
|
||||
"save": "Salvesta",
|
||||
"saved_api_key": "API võti salvestatud",
|
||||
"saved_profile": "Profiil salvestatud",
|
||||
@@ -891,8 +1070,10 @@
|
||||
"say_something": "Ütle midagi",
|
||||
"scan_all_libraries": "Skaneeri kõik kogud",
|
||||
"scan_all_library_files": "Skaneeri kogu kõik failid uuesti",
|
||||
"scan_library": "Skaneeri",
|
||||
"scan_new_library_files": "Skaneeri kogu uued failid",
|
||||
"scan_settings": "Skaneerimise seaded",
|
||||
"scanning_for_album": "Albumi skaneerimine...",
|
||||
"search": "Otsi",
|
||||
"search_albums": "Otsi albumeid",
|
||||
"search_by_context": "Otsi konteksti alusel",
|
||||
@@ -908,12 +1089,13 @@
|
||||
"search_options": "Otsingu valikud",
|
||||
"search_people": "Otsi inimesi",
|
||||
"search_places": "Otsi kohti",
|
||||
"search_settings": "Otsingu seaded",
|
||||
"search_settings": "Otsi seadeid",
|
||||
"search_state": "Otsi osariiki...",
|
||||
"search_tags": "Otsi silte...",
|
||||
"search_timezone": "Otsi ajavööndit...",
|
||||
"search_type": "Otsingu tüüp",
|
||||
"search_your_photos": "Otsi oma fotosid",
|
||||
"searching_locales": "Lokaatide otsimine...",
|
||||
"second": "Sekund",
|
||||
"see_all_people": "Vaata kõiki isikuid",
|
||||
"select_album_cover": "Vali albumi kaanepilt",
|
||||
@@ -930,10 +1112,15 @@
|
||||
"selected_count": "{count, plural, other {# valitud}}",
|
||||
"send_message": "Saada sõnum",
|
||||
"send_welcome_email": "Saada tervituskiri",
|
||||
"server_offline": "Serveriga ühendus puudub",
|
||||
"server_online": "Server ühendatud",
|
||||
"server_stats": "Serveri statistika",
|
||||
"server_version": "Serveri versioon",
|
||||
"set_as_album_cover": "Sea albumi kaanepildiks",
|
||||
"set_as_profile_picture": "Sea profiilipildiks",
|
||||
"set_date_of_birth": "Määra sünnikuupäev",
|
||||
"set_profile_picture": "Sea profiilipilt",
|
||||
"set_slideshow_to_fullscreen": "Kuva slaidiesitlus täisekraanil",
|
||||
"settings": "Seaded",
|
||||
"settings_saved": "Seaded salvestatud",
|
||||
"share": "Jaga",
|
||||
@@ -963,10 +1150,13 @@
|
||||
"show_metadata": "Kuva metaandmed",
|
||||
"show_or_hide_info": "Kuva või peida info",
|
||||
"show_password": "Kuva parooli",
|
||||
"show_person_options": "Näita isiku valikuid",
|
||||
"show_progress_bar": "Kuva edenemisriba",
|
||||
"show_search_options": "Kuva otsingu valikud",
|
||||
"show_slideshow_transition": "Kuva slaidiesitluse üleminekud",
|
||||
"show_supporter_badge": "Toetaja märk",
|
||||
"show_supporter_badge_description": "Kuva toetaja märki",
|
||||
"shuffle": "Juhuslik",
|
||||
"sidebar": "Külgmenüü",
|
||||
"sidebar_display_description": "Kuva külgmenüüs linki vaatele",
|
||||
"sign_out": "Logi välja",
|
||||
@@ -982,62 +1172,100 @@
|
||||
"sort_items": "Üksuste arv",
|
||||
"sort_modified": "Muutmise aeg",
|
||||
"sort_oldest": "Vanim foto",
|
||||
"sort_recent": "Kõige hiljutisem foto",
|
||||
"sort_recent": "Uusim foto",
|
||||
"sort_title": "Pealkiri",
|
||||
"stack": "Virn",
|
||||
"source": "Lähtekood",
|
||||
"stack": "Virnasta",
|
||||
"stack_duplicates": "Virnasta duplikaadid",
|
||||
"stack_select_one_photo": "Vali virnale kaanefoto",
|
||||
"stack_selected_photos": "Virnasta valitud fotod",
|
||||
"stacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} virnastatud",
|
||||
"stacktrace": "Pinujälg",
|
||||
"start": "Alusta",
|
||||
"start_date": "Alguskuupäev",
|
||||
"state": "Osariik",
|
||||
"status": "Staatus",
|
||||
"stop_motion_photo": "Peata liikuv pilt",
|
||||
"stop_photo_sharing": "Lõpeta oma fotode jagamine?",
|
||||
"stop_photo_sharing_description": "{partner} ei pääse rohkem su fotodele ligi.",
|
||||
"stop_sharing_photos_with_user": "Lõpeta oma fotode selle kasutajaga jagamine",
|
||||
"storage": "Talletusruum",
|
||||
"storage_label": "Talletussilt",
|
||||
"storage_usage": "{used}/{available} kasutatud",
|
||||
"suggestions": "Soovitused",
|
||||
"sunrise_on_the_beach": "Päikesetõus rannal",
|
||||
"support": "Tugi",
|
||||
"support_and_feedback": "Tugi ja tagasiside",
|
||||
"support_third_party_description": "Sinu Immich'i install on kolmanda osapoole pakendatud. Probleemid, mida täheldad, võivad olla põhjustatud selle pakendamise poolt, seega võta esmajärjekorras nendega ühendust, kasutades allolevaid linke.",
|
||||
"swap_merge_direction": "Muuda ühendamise suunda",
|
||||
"sync": "Sünkrooni",
|
||||
"tag": "Silt",
|
||||
"tag_assets": "Sildista üksuseid",
|
||||
"tag_created": "Lisatud silt: {tag}",
|
||||
"tag_feature_description": "Fotode ja videote lehitsemine siltide kaupa grupeeritult",
|
||||
"tag_not_found_question": "Ei leia silti? Lisa uus <link>siin</link>",
|
||||
"tag_not_found_question": "Ei leia silti? <link>Lisa uus silt.</link>",
|
||||
"tag_updated": "Muudetud silt: {tag}",
|
||||
"tagged_assets": "{count, plural, one {# üksus} other {# üksust}} sildistatud",
|
||||
"tags": "Sildid",
|
||||
"template": "Mall",
|
||||
"theme": "Teema",
|
||||
"theme_selection": "Teema valik",
|
||||
"theme_selection_description": "Sea automaatselt hele või tume teema vastavalt veebilehitseja eelistustele",
|
||||
"they_will_be_merged_together": "Nad ühendatakse kokku",
|
||||
"third_party_resources": "Kolmanda osapoole ressursid",
|
||||
"time_based_memories": "Ajapõhised mälestused",
|
||||
"timezone": "Ajavöönd",
|
||||
"to_archive": "Arhiivi",
|
||||
"to_change_password": "Muuda parool",
|
||||
"to_favorite": "Lemmik",
|
||||
"to_trash": "Prügi",
|
||||
"to_trash": "Prügikasti",
|
||||
"toggle_settings": "Kuva/peida seaded",
|
||||
"toggle_theme": "Lülita tume teema",
|
||||
"total_usage": "Kogukasutus",
|
||||
"trash": "Prügikast",
|
||||
"trash_all": "Kõik prügikasti",
|
||||
"trash_count": "Liiguta {count, number} prügikasti",
|
||||
"trash_delete_asset": "Kustuta üksus",
|
||||
"trash_no_results_message": "Siia ilmuvad prügikasti liigutatud fotod ja videod.",
|
||||
"trashed_items_will_be_permanently_deleted_after": "Prügikasti tõstetud üksused kustutatakse jäädavalt {days, plural, one {# päeva} other {# päeva}} pärast.",
|
||||
"type": "Tüüp",
|
||||
"unarchive": "Taasta arhiivist",
|
||||
"unarchived_count": "{count, plural, other {# arhiivist taastatud}}",
|
||||
"unfavorite": "Eemalda lemmikutest",
|
||||
"unhide_person": "Ära peida isikut",
|
||||
"unknown": "Teadmata",
|
||||
"unknown_year": "Teadmata aasta",
|
||||
"unlimited": "Piiramatu",
|
||||
"unlink_oauth": "Eemalda OAuth ühendus",
|
||||
"unlinked_oauth_account": "OAuth ühendus eemaldatud",
|
||||
"unnamed_album": "Nimetu album",
|
||||
"unnamed_album_delete_confirmation": "Kas oled kindel, et soovid selle albumi kustutada?",
|
||||
"unsaved_change": "Salvestamata muudatus",
|
||||
"unstack": "Eralda",
|
||||
"unstacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} eraldatud",
|
||||
"untracked_files": "Mittejälgitavad failid",
|
||||
"untracked_files_decription": "Rakendus ei jälgi neid faile. Need võivad olla põhjustatud ebaõnnestunud liigutamisest, katkestatud üleslaadimisest või rakenduse veast",
|
||||
"up_next": "Järgmine",
|
||||
"updated_password": "Parool muudetud",
|
||||
"upload": "Laadi üles",
|
||||
"upload_concurrency": "Üleslaadimise samaaegsus",
|
||||
"upload_errors": "Üleslaadimine lõpetatud {count, plural, one {# veaga} other {# veaga}}, uute üksuste nägemiseks värskenda lehte.",
|
||||
"upload_progress": "Ootel {remaining, number} - Töödeldud {processed, number}/{total, number}",
|
||||
"upload_skipped_duplicates": "{count, plural, one {# dubleeritud üksus} other {# dubleeritud üksust}} vahele jäetud",
|
||||
"upload_status_duplicates": "Duplikaadid",
|
||||
"upload_status_errors": "Vead",
|
||||
"upload_status_uploaded": "Üleslaaditud",
|
||||
"upload_success": "Üleslaadimine õnnestus, uute üksuste nägemiseks värskenda lehte.",
|
||||
"url": "URL",
|
||||
"usage": "Kasutus",
|
||||
"use_custom_date_range": "Kasuta kohandatud kuupäevavahemikku",
|
||||
"user": "Kasutaja",
|
||||
"user_id": "Kasutaja ID",
|
||||
"user_liked": "Kasutajale {user} meeldis {type, select, photo {see foto} video {see video} asset {see üksus} other {see}}",
|
||||
"user_purchase_settings": "Osta",
|
||||
"user_purchase_settings": "Ost",
|
||||
"user_purchase_settings_description": "Halda oma ostu",
|
||||
"user_role_set": "Määra kasutajale {user} roll {role}",
|
||||
"user_usage_detail": "Kasutajate kasutusandmed",
|
||||
"username": "Kasutajanimi",
|
||||
"users": "Kasutajad",
|
||||
"utilities": "Tööriistad",
|
||||
@@ -1046,11 +1274,14 @@
|
||||
"version": "Versioon",
|
||||
"version_announcement_closing": "Sinu sõber, Alex",
|
||||
"version_announcement_message": "Hei sõber, saadaval on rakenduse uus versioon. Palun võta aega, et lugeda <link>väljalasketeadet</link> ning veendu, et su <code>docker-compose.yml</code> ja <code>.env</code> failid on ajakohased, et vältida konfiguratsiooniprobleeme, eriti kui kasutad WatchTower'it või muud mehhanismi, mis rakendust automaatselt uuendab.",
|
||||
"version_history": "Versiooniajalugu",
|
||||
"version_history_item": "Versioon {version} paigaldatud {date}",
|
||||
"video": "Video",
|
||||
"video_hover_setting": "Esita hõljutamisel video eelvaade",
|
||||
"video_hover_setting_description": "Esita video eelvaade, kui hiirt selle kohal hõljutada. Isegi kui keelatud, saab taasesituse alustada taasesitusnupu kohal hõljutades.",
|
||||
"videos": "Videod",
|
||||
"videos_count": "{count, plural, one {# video} other {# videot}}",
|
||||
"view": "Vaade",
|
||||
"view_album": "Vaata albumit",
|
||||
"view_all": "Vaata kõiki",
|
||||
"view_all_users": "Vaata kõiki kasutajaid",
|
||||
@@ -17,7 +17,7 @@
|
||||
"add_import_path": "Lisää tuontipolku",
|
||||
"add_location": "Lisää sijainti",
|
||||
"add_more_users": "Lisää käyttäjiä",
|
||||
"add_partner": "Lisää kaveri",
|
||||
"add_partner": "Lisää kumppani",
|
||||
"add_path": "Lisää polku",
|
||||
"add_photos": "Lisää kuvia",
|
||||
"add_to": "Lisää...",
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "{count, number} lisätty suosikkeihin",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Lisää mallit, jonka mukaan jätetään tiedostoja pois. Jokerimerkit *, ** ja ? ovat tuettuna. Jättääksesi pois kaikki tiedostot mistä tahansa löytyvästä kansiosta \"Raw\" käytä \"**/Raw/**\". Jättääksesi pois kaikki \". tif\" päätteiset tiedot, käytä \"**/*.tif\". Jättääksesi pois tarkan tiedostopolun, käytä \"/path/to/ignore/**\".",
|
||||
"asset_offline_description": "Ulkoista kirjaston resurssia ei enää löydy levyltä, ja se on siirretty roskakoriin. Jos tiedosto siirrettiin kirjaston sisällä, tarkista aikajanaltasi uusi vastaava resurssi. Palautaaksesi tämän resurssin, varmista, että alla oleva tiedostopolku on Immichin käytettävissä ja skannaa kirjasto uudelleen.",
|
||||
"authentication_settings": "Autentikointiasetukset",
|
||||
"authentication_settings_description": "Hallitse salasana-, OAuth- ja muut autentikoinnin asetukset",
|
||||
"authentication_settings_disable_all": "Haluatko varmasti poistaa kaikki kirjautumistavat käytöstä? Kirjautuminen on tämän jälkeen mahdotonta.",
|
||||
@@ -46,31 +47,40 @@
|
||||
"disable_login": "Poista kirjautuminen käytöstä",
|
||||
"disabled": "Ei käytössä",
|
||||
"duplicate_detection_job_description": "Tunnista samankaltaiset kuvat käyttäen koneoppimista. Tukeutuu Smart Search:iin",
|
||||
"exclusion_pattern_description": "Poissulkevat määritteet mahdollistavat tiettyjen tiedostojen ja kansioiden jättämisen pois kirjastoasi skannatessa. Tästä on hyötyä jos kansiot sisältävät tiedostoja mitä et halua tuoda, kuten RAW-tiedostot.",
|
||||
"exclusion_pattern_description": "Poissulkemismallit mahdollistavat tiettyjen tiedostojen ja kansioiden jättämisen pois kirjastoasi skannatessa. Tästä on hyötyä jos kansiot sisältävät tiedostoja mitä et halua tuoda, kuten RAW-tiedostot.",
|
||||
"external_library_created_at": "Ulkoinen kirjasto (luotu {date})",
|
||||
"external_library_management": "Ulkoisen kirjaston hallinta",
|
||||
"face_detection": "Kasvojen haitseminen",
|
||||
"face_detection_description": "Tunnista sisällön kasvoja käyttäen koneoppimista. Videojen osalta vain pikkukuva tunnistetaan. \"Kaikki\" (uudelleen)prosessoi koko sisällön. \"Puuttuvat\" prosessoi sisällön, jota ei vielä ole käyty läpi. Havaitut kasvot ryhmitellään jo tunnistettujen kanssa, tai lisätään uusina henkilöinä.",
|
||||
"facial_recognition_job_description": "Ryhmitä havaitut kasvot henkilöihin. Tämä vaihe suoritetaan kun kasvot on ensin havaittu. \"Kaikki\" ryhmittelee kaikki kasvot. \"Puuttuvat\" vain ne, joille ei ole määritetty henkilöä.",
|
||||
"face_detection": "Kasvojen havaitseminen",
|
||||
"face_detection_description": "Tunnista sisällön kasvoja käyttäen koneoppimista. Videoiden osalta vain pikkukuva tunnistetaan. \"Päivitä\" (uudelleen)prosessoi koko sisällön.\"Nollaa\" lisäksi puhdistaa kaiken kasvo-datan. \"Puuttuvat\" prosessoi sisällön, jota ei vielä ole käyty läpi. Havaitut kasvot ryhmitellään jo tunnistettujen kanssa, tai lisätään uusina henkilöinä.",
|
||||
"facial_recognition_job_description": "Ryhmitä havaitut kasvot henkilöihin. Tämä vaihe suoritetaan, kun kasvot on ensin havaittu. \"Nollaus\" (uudelleen-)ryhmittelee kaikki kasvot. \"Puuttuvat\" vain ne, joille ei ole määritetty henkilöä.",
|
||||
"failed_job_command": "Komento {command} epäonnistui työlle {job}",
|
||||
"force_delete_user_warning": "VAROITUS: Tämä poistaa käyttäjän ja kaikki mediat. Tätä ei voi perua, eikä tiedostoja voi palauttaa.",
|
||||
"forcing_refresh_library_files": "Pakotetaan virkistämään kaikkien kirjastojen tiedostot",
|
||||
"image_format": "Tiedostomuoto",
|
||||
"image_format_description": "WebP tuottaa pienempiä tiedostoja kuin JPEG, mutta on hitaampi pakata.",
|
||||
"image_prefer_embedded_preview": "Suosi upotettua esikatselua",
|
||||
"image_prefer_embedded_preview_setting_description": "Käytä RAW-kuvissa upotettuja esikatselukuvia aina kun mahdollista. Tämä voi joissain kuvissa tuottaa tarkemmat värit, mutta esikatselun laatu on riippuvainen kamerasta ja kuvassa voi olla enemmän pakkauksesta aiheutuvia häiriöitä.",
|
||||
"image_prefer_wide_gamut": "Suosi laajaa väriskaalaa",
|
||||
"image_prefer_wide_gamut_setting_description": "Käytä Display P3 -nimiavaruutta pikkukuville. Tämä säilöö värien vivahteet paremmin, mutta kuvat saattavat näyttää erilaisilta vanhemmissa laitteissa. sRGB-kuvat pidetään muuttumattomina, jottei värit muuttuisi.",
|
||||
"image_preview_description": "Keskikokoinen kuva, josta metatiedot on poistettu, käytetään yksittäisen resurssin katseluun ja koneoppimiseen",
|
||||
"image_preview_format": "Esikatselun muoto",
|
||||
"image_preview_quality_description": "Esikatselulaatu 1-100. Korkeampi arvo on parempi, mutta tuottaa suurempia tiedostoja ja voi heikentää sovelluksen reagointikykyä. Matalan arvon asettaminen voi vaikuttaa koneoppimisen laatuun.",
|
||||
"image_preview_resolution": "Esikatselun resoluutio",
|
||||
"image_preview_resolution_description": "Käytetään kun katsellaan yksittäisiä kuvia, tai koneoppimiseen. Suurempi resoluutio voi säilyttää paremmin yksityiskohtia. Tosin koodaus kestää kauemmin, tiedostokoko kasvaa, ja se saattaa hidastaa sovelluksen responsiivisuutta.",
|
||||
"image_preview_title": "Esikatselun asetukset",
|
||||
"image_quality": "Laatu",
|
||||
"image_quality_description": "Kuvan laatu välillä 1-100. Suurempi arvo on paremman laatuinen, mutta tuottaa kookkaampia tiedostoja. Tämä asetus vaikuttaa esikatselu- ja pikkukuviin.",
|
||||
"image_resolution": "Resoluutio",
|
||||
"image_resolution_description": "Korkeammat resoluutiot voivat säilyttää enemmän yksityiskohtia, mutta niiden koodaus kestää kauemmin, tiedostokoot ovat suurempia ja ne voivat heikentää sovelluksen reagointikykyä.",
|
||||
"image_settings": "Kuva-asetukset",
|
||||
"image_settings_description": "Hallitse luotujen kuvien laatua ja resolutiota",
|
||||
"image_settings_description": "Hallitse luotujen kuvien laatua ja resoluutiota",
|
||||
"image_thumbnail_description": "Pieni pikkukuva, josta metatiedot on poistettu, käytetään valokuvaryhmien katseluun, kuten pääaikajanalla",
|
||||
"image_thumbnail_format": "Pikkukuvien muoto",
|
||||
"image_thumbnail_quality_description": "Pikkukuvan laatu 1-100. Korkeampi arvo on parempi, mutta tuottaa suurempia tiedostoja ja voi heikentää sovelluksen reagointikykyä.",
|
||||
"image_thumbnail_resolution": "Pikkukuvien resoluutio",
|
||||
"image_thumbnail_resolution_description": "Käytetään katsottaessa useita kuvia kerralla (aikajana, albuminäkymä, jne.) Korkeampi resoluutio antaa enemmän yksityiskohtia, mutta niiden luonti kestää kauemmin, tiedostokoot ovat isompia ja voivat heikentää sovelluksen responsiivisuutta.",
|
||||
"job_concurrency": "{job} yhtäaikaisuus",
|
||||
"image_thumbnail_title": "Pikkukuva-asetukset",
|
||||
"job_concurrency": "Tehtävän \"{job}\" samanaikaisuus",
|
||||
"job_created": "Tehtävä luotu",
|
||||
"job_not_concurrency_safe": "Tätä tehtävää ei ole turvallista ajaa yhtäaikaisesti.",
|
||||
"job_settings": "Tehtävän asetukset",
|
||||
@@ -101,7 +111,7 @@
|
||||
"machine_learning_duplicate_detection": "Kaksoiskappaleiden tunnistus",
|
||||
"machine_learning_duplicate_detection_enabled": "Ota käyttöön kaksoiskappaleiden tunnistus",
|
||||
"machine_learning_duplicate_detection_enabled_description": "Jos ei käytössä, täsmälleen samojen aineistojen kaksoiskappaleet tullaan silti poistamaan.",
|
||||
"machine_learning_duplicate_detection_setting_description": "Etsi todennäköisiä kaksoiskappaleita CLIP upotuksien avulla",
|
||||
"machine_learning_duplicate_detection_setting_description": "Etsi todennäköisiä kaksoiskappaleita CLIP-upotuksien avulla",
|
||||
"machine_learning_enabled": "Ota käyttöön koneoppiminen",
|
||||
"machine_learning_enabled_description": "Jos poistettu käytöstä, kaikki koneoppimistoiminnot ovat pois käytöstä riippumatta alla olevista asetuksista.",
|
||||
"machine_learning_facial_recognition": "Kasvojen tunnistus",
|
||||
@@ -121,7 +131,7 @@
|
||||
"machine_learning_settings": "Koneoppimisen asetukset",
|
||||
"machine_learning_settings_description": "Koneoppimisen ominaisuudet ja asetukset",
|
||||
"machine_learning_smart_search": "Älykäs etsintä",
|
||||
"machine_learning_smart_search_description": "Etsi kuvia merkityksellisemmin käyttäen CLIP upotuksia",
|
||||
"machine_learning_smart_search_description": "Etsi kuvia merkityksellisemmin käyttäen CLIP-upotuksia",
|
||||
"machine_learning_smart_search_enabled": "Ota käyttöön älykäs haku",
|
||||
"machine_learning_smart_search_enabled_description": "Jos ei käytössä, kuvia ei koodata älykkäälle etsinnälle.",
|
||||
"machine_learning_url_description": "Koneoppimispalvelimen URL",
|
||||
@@ -129,17 +139,17 @@
|
||||
"manage_log_settings": "Hallitse lokien asetuksia",
|
||||
"map_dark_style": "Tumma teema",
|
||||
"map_enable_description": "Ota käyttöön karttatoiminnot",
|
||||
"map_gps_settings": "Kartta & GPS- asetukset",
|
||||
"map_gps_settings_description": "Hallitse Kartan & GPS (Käänteinen Geokoodaus) Asetuksia",
|
||||
"map_implications": "Kartta -ominaisuus käyttää ulkoista karttapalvelua",
|
||||
"map_gps_settings": "Kartta- ja GPS-asetukset",
|
||||
"map_gps_settings_description": "Hallitse kartan ja GPS:n (käänteisen geokoodauksen) asetuksia",
|
||||
"map_implications": "Karttaominaisuus käyttää ulkoista karttapalvelua (tiles.immich.cloud)",
|
||||
"map_light_style": "Vaalea teema",
|
||||
"map_manage_reverse_geocoding_settings": "Hallitse <link>käänteisen geokoodauksen</link> asetuksia",
|
||||
"map_reverse_geocoding": "Käänteinen Geokoodaus",
|
||||
"map_reverse_geocoding_enable_description": "Ota käyttöön osoitteiden poiminta karttakoordinaateista",
|
||||
"map_reverse_geocoding_settings": "Käänteisen Geokoodauksen asetukset",
|
||||
"map_reverse_geocoding_settings": "Käänteisen geokoodauksen asetukset",
|
||||
"map_settings": "Kartta",
|
||||
"map_settings_description": "Hallitse kartan asetuksia",
|
||||
"map_style_description": "style.json -karttateeman URL",
|
||||
"map_style_description": "style.json-karttateeman URL",
|
||||
"metadata_extraction_job": "Kerää metadata",
|
||||
"metadata_extraction_job_description": "Poimi metatiedot aineistoista, kuten GPS, kasvot ja resoluutio",
|
||||
"metadata_faces_import_setting": "Ota käyttöön kasvojen tuonti",
|
||||
@@ -154,10 +164,10 @@
|
||||
"note_cannot_be_changed_later": "Huom: Tätä ei voi enää myöhemmin vaihtaa!",
|
||||
"note_unlimited_quota": "Huom: Määritä 0 rajoittamattomaksi kiintiöksi",
|
||||
"notification_email_from_address": "Lähettäjän osoite",
|
||||
"notification_email_from_address_description": "Lähettäjän sähköpostiosoite. Esimerkiksi \"Immich Kuvapalvelin <noreply@example.com>\"",
|
||||
"notification_email_from_address_description": "Lähettäjän sähköpostiosoite. Esimerkiksi \"Immich-kuvapalvelin <noreply@example.com>\"",
|
||||
"notification_email_host_description": "Sähköpostipalvelin (esim. smtp.immich.app)",
|
||||
"notification_email_ignore_certificate_errors": "Älä huomioi sertifikaattivirheitä",
|
||||
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS sertifikaattien validointivirheitä (ei suositeltu)",
|
||||
"notification_email_ignore_certificate_errors": "Älä huomioi varmennevirheitä",
|
||||
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS-varmenteiden validointivirheitä (ei suositeltu)",
|
||||
"notification_email_password_description": "Sähköpostipalvelimen salasana",
|
||||
"notification_email_port_description": "Sähköpostipalvelimen portti (esim. 25, 465, tai 587)",
|
||||
"notification_email_sent_test_email_button": "Lähetä testaussähköposti ja tallenna",
|
||||
@@ -170,13 +180,13 @@
|
||||
"notification_settings": "Ilmoitusasetukset",
|
||||
"notification_settings_description": "Hallitse ilmoitusasetuksia, myös sähköpostin",
|
||||
"oauth_auto_launch": "Automaattinen käynnistys",
|
||||
"oauth_auto_launch_description": "Aloita OAuth kirjautuminen heti kun saavutaan kirjautumissivulle",
|
||||
"oauth_auto_launch_description": "Aloita OAuth-kirjautumisvuo heti kun saavutaan kirjautumissivulle",
|
||||
"oauth_auto_register": "Automaattinen rekisteröinti",
|
||||
"oauth_auto_register_description": "Rekisteröi uudet OAuth:lla kirjautuvat käyttäjät automaattisesti",
|
||||
"oauth_button_text": "Painikkeen teksti",
|
||||
"oauth_client_id": "Client ID",
|
||||
"oauth_client_secret": "Client Secret",
|
||||
"oauth_enable_description": "Kirjaudu käyttäen OAuth:ia",
|
||||
"oauth_enable_description": "Kirjaudu käyttäen OAuthia",
|
||||
"oauth_issuer_url": "Toimitsijan URL",
|
||||
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI",
|
||||
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
|
||||
@@ -185,7 +195,7 @@
|
||||
"oauth_profile_signing_algorithm_description": "Algoritmi, jota käytetään käyttäjäprofiilin allekirjoittamiseen.",
|
||||
"oauth_scope": "Skooppi (Scope)",
|
||||
"oauth_settings": "OAuth",
|
||||
"oauth_settings_description": "Hallitse OAuth kirjautumisen asetuksia",
|
||||
"oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia",
|
||||
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
|
||||
"oauth_signing_algorithm": "Allekirjoitusalgoritmi",
|
||||
"oauth_storage_label_claim": "Tallennustilan nimikkeen valtuutusväittämä (claim)",
|
||||
@@ -212,6 +222,7 @@
|
||||
"require_password_change_on_login": "Vaadi käyttäjää vaihtamaan salasana ensimmäisellä kirjautumiskerralla",
|
||||
"reset_settings_to_default": "Nollaa asetukset oletuksille",
|
||||
"reset_settings_to_recent_saved": "Palauta aiemmin tallennetut asetukset",
|
||||
"scanning_library": "Kirjastoa skannataan",
|
||||
"scanning_library_for_changed_files": "Etsitään kirjaston muuttuneita tiedostoja",
|
||||
"scanning_library_for_new_files": "Etsitään uusia tiedostoja",
|
||||
"search_jobs": "Etsi tehtäviä...",
|
||||
@@ -230,9 +241,9 @@
|
||||
"storage_template_date_time_sample": "Esimerkki päivämäärä {date}",
|
||||
"storage_template_enable_description": "Ota käyttöön tallennustilan mallit",
|
||||
"storage_template_hash_verification_enabled": "Tarkistussumman varmennus käytössä",
|
||||
"storage_template_hash_verification_enabled_description": "Ottaa käyttöön varmistussummien laskennan. Älä poista käytöstä jollet ole aivan varma seurauksista",
|
||||
"storage_template_hash_verification_enabled_description": "Ottaa käyttöön tarkistussummien laskennan. Älä poista käytöstä, ellet ole aivan varma seurauksista",
|
||||
"storage_template_migration": "Tallennustilan mallien migraatio",
|
||||
"storage_template_migration_description": "Käytä nykyistä <link>{template}:a</link> aikaisemmin lähetettyihin kohteisiin",
|
||||
"storage_template_migration_description": "Käytä nykyistä <link>{template}a</link> aikaisemmin lähetettyihin kohteisiin",
|
||||
"storage_template_migration_info": "Malli vaikuttaa vain uusiin kohteisiin. Käyttääksesi mallia jo olemassa oleviin kohteisiin, aja <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Tallennustilan mallin muutostyö",
|
||||
"storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>",
|
||||
@@ -244,7 +255,7 @@
|
||||
"system_settings": "Järjestelmäasetukset",
|
||||
"tag_cleanup_job": "Merkintäpuhdistus",
|
||||
"theme_custom_css_settings": "Mukautettu CSS",
|
||||
"theme_custom_css_settings_description": "Kustomoi Immichin ulkoasua Cascading Style Sheets:llä.",
|
||||
"theme_custom_css_settings_description": "Mukauta Immichin ulkoasua CSS:llä.",
|
||||
"theme_settings": "Teeman asetukset",
|
||||
"theme_settings_description": "Kustomoi Immichin web-käyttöliittymää",
|
||||
"these_files_matched_by_checksum": "Näillä tiedostoilla on yhteinen tarkistussumma",
|
||||
@@ -267,7 +278,7 @@
|
||||
"transcoding_audio_codec": "Äänikoodekki",
|
||||
"transcoding_audio_codec_description": "Opus on paras laadultaan, mutta ei välttämättä ole yhteensopiva vanhempien laitteiden tai sovellusten kanssa.",
|
||||
"transcoding_bitrate_description": "Videot, jotka ylittävät enimmäisbittinopeuden tai eivät ole hyväksytyssä muodossa",
|
||||
"transcoding_codecs_learn_more": "Oppiaksesi lisää tässä käytetystä terminologiasta, tutustu FFmpeg- dokumentaatioon <h264-link>H.264 koodaaja</h264-link>, <hevc-link>HEVC koodaaja</hevc-link> sekä <vp9-link>VP9 koodaaja</vp9-link>.",
|
||||
"transcoding_codecs_learn_more": "Oppiaksesi lisää käytetystä terminologiasta, tutustu FFmpeg-dokumentaatioon: <h264-link>H.264-koodaaja</h264-link>, <hevc-link>HEVC-koodaaja</hevc-link> ja <vp9-link>VP9-koodaaja</vp9-link>.",
|
||||
"transcoding_constant_quality_mode": "Tasaisen laadun tyyppi",
|
||||
"transcoding_constant_quality_mode_description": "ICQ on parempi kuin CQP, mutta jotkut laitteistokiihdyttimet eivät tue sitä. Tätä asetusta käytetään oletuksena laatuun pohjautuvissa muunnoksissa, paitsi NVENC mikä ei tue ICQ:ta.",
|
||||
"transcoding_constant_rate_factor": "Vakionopeustekijä",
|
||||
@@ -276,7 +287,7 @@
|
||||
"transcoding_hardware_acceleration": "Laitteistokiihdytys",
|
||||
"transcoding_hardware_acceleration_description": "Kokeellinen. Paljon nopeampi, mutta huonompaa laatua samalla bittinopeudella",
|
||||
"transcoding_hardware_decoding": "Laitteiston dekoodaus",
|
||||
"transcoding_hardware_decoding_setting_description": "Vaikuttaa vain NVENC ja RKMPP -moottoreihin. Ottaa käyttöön end-to-end kiihdytyksen pelkän muuntamisen sijasta. Ei välttämättä toimi kaikissa videoissa.",
|
||||
"transcoding_hardware_decoding_setting_description": "Ottaa käyttöön end-to-end kiihdytyksen pelkän muuntamisen sijasta. Ei välttämättä toimi kaikissa videoissa.",
|
||||
"transcoding_hevc_codec": "HEVC koodekki",
|
||||
"transcoding_max_b_frames": "B-kehysten enimmäismäärä",
|
||||
"transcoding_max_b_frames_description": "Korkeampi arvo parantaa pakkausta, mutta hidastaa enkoodausta. Ei välttämättä ole yhteensopiva vanhempien laitteiden kanssa. 0 poistaa B-kehykset käytöstä, -1 määrittää arvon automaattisesti.",
|
||||
@@ -312,7 +323,7 @@
|
||||
"transcoding_video_codec_description": "VP9 on tehokkain ja web-yhteensopiva, mutta muuntaminen kestää kauemmin. HEVC suoriutuu yhtäläisesti, mutta ei ole ihan yhtä yhteensopiva. H.264 on hyvin yhteensopiva ja nopea muuntaa, mutta tuottaa paljon suurempia tiedostoja. AV1 on kaikkein tehokkain koodekki, mutta vanhemmat laitteet eivät sitä tue.",
|
||||
"trash_enabled_description": "Ota käyttöön roskakori",
|
||||
"trash_number_of_days": "Päivien lukumäärä",
|
||||
"trash_number_of_days_description": "Montako päivää aineistoja pidetään roskakorissa ennen pysyvää poistamista",
|
||||
"trash_number_of_days_description": "Kuinka monta päivää aineistoja pidetään roskakorissa ennen pysyvää poistamista",
|
||||
"trash_settings": "Roskakorin asetukset",
|
||||
"trash_settings_description": "Hallitse roskakoriasetuksia",
|
||||
"untracked_files": "Tiedostot joita ei seurata",
|
||||
@@ -320,7 +331,7 @@
|
||||
"user_cleanup_job": "Käyttäjien puhdistus",
|
||||
"user_delete_delay": "Käyttäjän <b>{user}</b> tili ja aineistot aikataulutetaan poistettavaksi ajan kuluttua: {delay, plural, one {# day} other {# days}}.",
|
||||
"user_delete_delay_settings": "Poiston viive",
|
||||
"user_delete_delay_settings_description": "Montako päivää poistamisen jälkeen käyttäjä ja hänen aineistonsa poistetaan pysyvästi. Joka keskiyö käydään läpi poistetuiksi merkityt käyttäjät. Tämä muutos astuu voimaan seuraavalla ajokerralla.",
|
||||
"user_delete_delay_settings_description": "Kuinka monta päivää poistamisen jälkeen käyttäjä ja hänen aineistonsa poistetaan pysyvästi. Joka keskiyö käydään läpi poistettavaksi merkityt käyttäjät. Tämä muutos astuu voimaan seuraavalla ajokerralla.",
|
||||
"user_delete_immediately": "<b>{user}</b>:n tili ja sen kohteet on ajastettu poistettavaksi <b>heti</b>.",
|
||||
"user_delete_immediately_checkbox": "Aseta tili ja sen kohteet jonoon välitöntä poistoa varten",
|
||||
"user_management": "Käyttäjien hallinta",
|
||||
@@ -332,7 +343,7 @@
|
||||
"user_settings_description": "Hallitse käyttäjäasetuksia",
|
||||
"user_successfully_removed": "Käyttäjä {email} on poistettu.",
|
||||
"version_check_enabled_description": "Ota käyttöön versiotarkastus",
|
||||
"version_check_implications": "Versiontarkistus vaatii säännöllisen yhteyden github.com:iin",
|
||||
"version_check_implications": "Versiotarkistus vaatii säännöllisen yhteyden github.comiin",
|
||||
"version_check_settings": "Versiotarkistus",
|
||||
"version_check_settings_description": "Ota käyttöön ilmoitukset, kun uusi versio on saatavilla",
|
||||
"video_conversion_job": "Transkoodaa videot",
|
||||
@@ -395,7 +406,7 @@
|
||||
"asset_has_unassigned_faces": "Kohteella on määrittämättömiä kasvoja",
|
||||
"asset_hashing": "Hajautetaan...",
|
||||
"asset_offline": "Aineisto offline-tilassa",
|
||||
"asset_offline_description": "Tämä kohde on offline-tilassa. Immich ei pääse tiedoston sijaintiin. Varmista, että kohde on saatavilla, ja skannaa sitten kirjasto uudelleen.",
|
||||
"asset_offline_description": "Tätä ulkoista resurssia ei enää löydy levyltä. Ole hyvä ja ota yhteyttä Immich-järjestelmänvalvojaan saadaksesi apua.",
|
||||
"asset_skipped": "Ohitettu",
|
||||
"asset_skipped_in_trash": "Roskakorissa",
|
||||
"asset_uploaded": "Lähetetty",
|
||||
@@ -409,19 +420,20 @@
|
||||
"assets_moved_to_trash_count": "Siirretty {count, plural, one {# media} other {# mediaa}} roskakoriin",
|
||||
"assets_permanently_deleted_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
|
||||
"assets_removed_count": "{count, plural, one {# media} other {# mediaa}} poistettu",
|
||||
"assets_restore_confirmation": "Haluatko varmasti palauttaa kaikki roskakoriin siirretyt mediat? Et voi perua tätä toimintoa!",
|
||||
"assets_restore_confirmation": "Haluatko varmasti palauttaa kaikki roskakoriisi siirretyt resurssit? Tätä toimintoa ei voi peruuttaa! Huomaa, että offline-resursseja ei voida palauttaa tällä tavalla.",
|
||||
"assets_restored_count": "{count, plural, one {# media} other {# mediaa}} palautettu",
|
||||
"assets_trashed_count": "{count, plural, one {# media} other {# mediaa}} siirretty roskakoriin",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {Media oli} other {Mediat olivat}} jo albumissa",
|
||||
"authorized_devices": "Auktorisoidut laitteet",
|
||||
"authorized_devices": "Valtuutetut laitteet",
|
||||
"back": "Takaisin",
|
||||
"back_close_deselect": "Palaa, sulje tai poista valinnat",
|
||||
"backward": "Taaksepäin",
|
||||
"birthdate_saved": "Syntymäaika tallennettu",
|
||||
"birthdate_set_description": "Syntymäaikaa käytetään laskemaan henkilön ikä kuvanottohetkellä.",
|
||||
"blurred_background": "Sumennettu tausta",
|
||||
"build": "Rakenna",
|
||||
"build_image": "Rakenna kuva",
|
||||
"bugs_and_feature_requests": "Bugit ja ominaisuuspyynnöt",
|
||||
"build": "Koontiversio",
|
||||
"build_image": "Koontiversion kuva",
|
||||
"bulk_delete_duplicates_confirmation": "Haluatko varmasti poistaa {count, plural, one {# kaksoiskappaleen} other {# kaksoiskappaleet}} kerralla? Tämä säilyttää kustakin mediasta kookkaimman ja poistaa loput pysyvästi. Et voi perua tätä!",
|
||||
"bulk_keep_duplicates_confirmation": "Haluatko varmasti säilyttää {count, plural, one {# kaksoiskappaleen} other {# kaksoiskappaleet}}? Tämä merkitsee kaikki kaksoiskappaleet ratkaistuiksi, eikä poista mitään.",
|
||||
"bulk_trash_duplicates_confirmation": "Haluatko varmasti siirtää {count, plural, one {# kaksoiskappaleen} other {# kaksoiskappaleet}} roskakoriin? Tämä säilyttää kustakin mediasta kookkaimman ja siirtää loput roskakoriin.",
|
||||
@@ -495,7 +507,7 @@
|
||||
"create_new_person_hint": "Määritä valitut mediat uudelle henkilölle",
|
||||
"create_new_user": "Luo uusi käyttäjä",
|
||||
"create_tag": "Luo tunniste",
|
||||
"create_tag_description": "Luo uusi tunniste. Sisäkkäisiä tunnisteita varten, syötä tunnisteen täydellinen polku kauttaviiva mukaanluettuna.",
|
||||
"create_tag_description": "Luo uusi tunniste. Sisäkkäisiä tunnisteita varten syötä tunnisteen täydellinen polku kauttaviivat mukaan luettuna.",
|
||||
"create_user": "Luo käyttäjä",
|
||||
"created": "Luotu",
|
||||
"current_device": "Nykyinen laite",
|
||||
@@ -520,14 +532,16 @@
|
||||
"delete_link": "Poista linkki",
|
||||
"delete_shared_link": "Poista jaettu linkki",
|
||||
"delete_tag": "Poista tunniste",
|
||||
"delete_tag_confirmation_prompt": "Haluatko varmasti poistaa {tagName}-tunnisteen?",
|
||||
"delete_tag_confirmation_prompt": "Haluatko varmasti poistaa tunnisteen {tagName}?",
|
||||
"delete_user": "Poista käyttäjä",
|
||||
"deleted_shared_link": "Jaettu linkki poistettu",
|
||||
"deletes_missing_assets": "Poistaa levyltä puuttuvat resurssit",
|
||||
"description": "Kuvaus",
|
||||
"details": "TIEDOT",
|
||||
"direction": "Suunta",
|
||||
"disabled": "Poistettu käytöstä",
|
||||
"disallow_edits": "Älä salli muokkauksia",
|
||||
"discord": "Discord",
|
||||
"discover": "Tutki",
|
||||
"dismiss_all_errors": "Sivuuta kaikki virheet",
|
||||
"dismiss_error": "Sivuuta virhe",
|
||||
@@ -536,6 +550,7 @@
|
||||
"display_original_photos": "Näytä alkuperäiset kuvat",
|
||||
"display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva peukalokuvan sijasta kun alkuperäinen aineisto on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.",
|
||||
"do_not_show_again": "Älä näytä tätä enää",
|
||||
"documentation": "Dokumentaatio",
|
||||
"done": "Valmis",
|
||||
"download": "Lataa",
|
||||
"download_include_embedded_motion_videos": "Upotetut videot",
|
||||
@@ -629,7 +644,7 @@
|
||||
"unable_to_add_album_users": "Käyttäjiä ei voi lisätä albumiin",
|
||||
"unable_to_add_assets_to_shared_link": "Medioiden lisääminen jaettuun linkkiin epäonnistui",
|
||||
"unable_to_add_comment": "Kommentin lisääminen epäonnistui",
|
||||
"unable_to_add_exclusion_pattern": "Ei voida lisätä poissulkuohjetta",
|
||||
"unable_to_add_exclusion_pattern": "Ei voida lisätä poissulkemismallia",
|
||||
"unable_to_add_import_path": "Tuontipolkua ei voitu lisätä",
|
||||
"unable_to_add_partners": "Kumppaneita ei voitu lisätä",
|
||||
"unable_to_add_remove_archive": "Ei voida {archived, select, true {poistaa kohdetta arkistosta} other {lisätä kohdetta arkistoon}}",
|
||||
@@ -654,12 +669,12 @@
|
||||
"unable_to_delete_album": "Albumin poistaminen epäonnistui",
|
||||
"unable_to_delete_asset": "Kohteen poistaminen epäonnistui",
|
||||
"unable_to_delete_assets": "Virhe kohteen poistamisessa",
|
||||
"unable_to_delete_exclusion_pattern": "Ei voida poistaa poissulkuohjetta",
|
||||
"unable_to_delete_exclusion_pattern": "Ei voida poistaa poissulkemismallia",
|
||||
"unable_to_delete_import_path": "Tuontipolkua ei voitu poistaa",
|
||||
"unable_to_delete_shared_link": "Jaetun linkin poistaminen epäonnistui",
|
||||
"unable_to_delete_user": "Käyttäjän poistaminen epäonnistui",
|
||||
"unable_to_download_files": "Tiedostojen lataaminen epäonnistui",
|
||||
"unable_to_edit_exclusion_pattern": "Ei voida muokata poissulkuohjetta",
|
||||
"unable_to_edit_exclusion_pattern": "Ei voida muokata poissulkemismallia",
|
||||
"unable_to_edit_import_path": "Tuontipolkua ei voitu muokata",
|
||||
"unable_to_empty_trash": "Roskakorin tyhjentäminen epäonnistui",
|
||||
"unable_to_enter_fullscreen": "Koko ruudun tilaan siirtyminen epäonnistui",
|
||||
@@ -684,6 +699,7 @@
|
||||
"unable_to_remove_api_key": "API-avaimen poistaminen epäonnistui",
|
||||
"unable_to_remove_assets_from_shared_link": "kohteiden poistaminen jaetusta linkistä epäonnistui",
|
||||
"unable_to_remove_comment": "",
|
||||
"unable_to_remove_deleted_assets": "Offline-tiedostoja ei voitu poistaa",
|
||||
"unable_to_remove_library": "Kirjaston poistaminen epäonnistui",
|
||||
"unable_to_remove_offline_files": "Offline-tiedostojen poistaminen epäonnistui",
|
||||
"unable_to_remove_partner": "Kumppanin poistaminen epäonnistui",
|
||||
@@ -729,7 +745,7 @@
|
||||
"expired": "Voimassaolo päättynyt",
|
||||
"expires_date": "Vanhenee {date}",
|
||||
"explore": "Tutki",
|
||||
"explorer": "Tutkija",
|
||||
"explorer": "Selain",
|
||||
"export": "Vie",
|
||||
"export_as_json": "Vie JSON-muodossa",
|
||||
"extension": "Tiedostopääte",
|
||||
@@ -789,8 +805,8 @@
|
||||
"image_alt_text_date_place_3_people": "{isVideo, select, true {Video} other {Kuva}} otettu {city}ssä, {country}ssä {person1}n, {person2}n ja {person3}n kanssa {date}",
|
||||
"image_alt_text_date_place_4_or_more_people": "{isVideo, select, true {Video} other {Kuva}} otettu {city}ssä, {country}ssä {person1}n, {person2}n ja {additionalCount, number} muun kanssa {date}",
|
||||
"img": "",
|
||||
"immich_logo": "Immich Logo",
|
||||
"immich_web_interface": "Immich verkkoliittymä",
|
||||
"immich_logo": "Immich-logo",
|
||||
"immich_web_interface": "Immich-verkkokäyttöliittymä",
|
||||
"import_from_json": "Tuo JSON-tiedostosta",
|
||||
"import_path": "Tuontipolku",
|
||||
"in_albums": "{count, plural, one {# Albumissa} other {# albumissa}}",
|
||||
@@ -847,6 +863,7 @@
|
||||
"look": "Tyyli",
|
||||
"loop_videos": "Toista videot uudelleen",
|
||||
"loop_videos_description": "Ota käyttöön videon automaattinen toisto tarkemmassa näkymässä.",
|
||||
"main_branch_warning": "Käytät kehitysversiota; suosittelemme vahvasti käyttämään julkaisuversiota!",
|
||||
"make": "Valmistaja",
|
||||
"manage_shared_links": "Hallitse jaettuja linkkejä",
|
||||
"manage_sharing_with_partners": "Hallitse jakamista kumppaneille",
|
||||
@@ -856,7 +873,7 @@
|
||||
"manage_your_devices": "Hallitse sisäänkirjautuneita laitteitasi",
|
||||
"manage_your_oauth_connection": "Hallitse OAuth-yhteyttäsi",
|
||||
"map": "Kartta",
|
||||
"map_marker_for_images": "Karttamarkerointi kuville, jotka on otettu {city}ssä, {country}ssä",
|
||||
"map_marker_for_images": "Karttamarkerointi kuville, jotka on otettu kaupungissa {city}, maassa {country}",
|
||||
"map_marker_with_image": "Karttamarkerointi kuvalla",
|
||||
"map_settings": "Kartta-asetukset",
|
||||
"matches": "Osumia",
|
||||
@@ -884,7 +901,7 @@
|
||||
"name_or_nickname": "Nimi tai lempinimi",
|
||||
"never": "ei koskaan",
|
||||
"new_album": "Uusi Albumi",
|
||||
"new_api_key": "Uusi API Key",
|
||||
"new_api_key": "Uusi API-avain",
|
||||
"new_password": "Uusi salasana",
|
||||
"new_person": "Uusi henkilö",
|
||||
"new_user_created": "Uusi käyttäjä lisätty",
|
||||
@@ -912,10 +929,11 @@
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Huom: Jotta voit soveltaa tallennustunnistetta aiemmin ladattuihin kohteisiin, suorita",
|
||||
"note_unlimited_quota": "Huomio: Syötä 0 rajoittamatonta kiintiötä varten",
|
||||
"notes": "Muistiinpanot",
|
||||
"notification_toggle_setting_description": "Ota sähköpostilmoitukset käyttöön",
|
||||
"notification_toggle_setting_description": "Ota sähköposti-ilmoitukset käyttöön",
|
||||
"notifications": "Ilmoitukset",
|
||||
"notifications_setting_description": "Hallitse ilmoituksia",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Viralliset Immich-resurssit",
|
||||
"offline": "Offline",
|
||||
"offline_paths": "Offline-polut",
|
||||
"offline_paths_description": "Nämä tulokset voivat johtua tiedostojen manuaalisesta poistamisesta, jotka eivät ole osa ulkoista kirjastoa.",
|
||||
@@ -1023,7 +1041,7 @@
|
||||
"purchase_panel_info_1": "Immichin rakentaminen vie paljon aikaa ja vaivannäköä, ja meillä on kokopäiväisiä insinöörejä työskentelemässä sen parissa, jotta voimme tehdä siitä mahdollisimman hyvän. Missiomme on, että avoimen lähdekoodin ohjelmistosta ja eettisistä liiketoimintakäytännöistä tulee kestävä tulonlähde kehittäjille, sekä luoda yksityisyyttä kunnioittava ekosysteemi, jossa on todellisia vaihtoehtoja hyväksikäyttöön perustuville pilvipalveluille.",
|
||||
"purchase_panel_info_2": "Koska olemme sitoutuneet siihen, ettemme lisää maksumuuria, tämä osto ei anna sinulle mitään lisäominaisuuksia Immichissa. Luotamme kaltaisiisi käyttäjiin tukeaksemme Immichin jatkuvaa kehittämistä.",
|
||||
"purchase_panel_title": "Tue projektia",
|
||||
"purchase_per_server": "Per serveri",
|
||||
"purchase_per_server": "Per palvelin",
|
||||
"purchase_per_user": "Per käyttäjä",
|
||||
"purchase_remove_product_key": "Poista Tuoteavain",
|
||||
"purchase_remove_product_key_prompt": "Haluatko varmasti poistaa tuoteavaimen?",
|
||||
@@ -1031,13 +1049,13 @@
|
||||
"purchase_remove_server_product_key_prompt": "Haluatko varmasti poistaa palvelimen tuoteavaimen?",
|
||||
"purchase_server_description_1": "Koko palvelimelle",
|
||||
"purchase_server_description_2": "Tukijan tila",
|
||||
"purchase_server_title": "Serveri",
|
||||
"purchase_server_title": "Palvelin",
|
||||
"purchase_settings_server_activated": "Palvelimen tuoteavainta hallinnoi ylläpitäjä",
|
||||
"range": "",
|
||||
"rating": "Tähtiarvostelu",
|
||||
"rating_clear": "Tyhjennä arvostelu",
|
||||
"rating_count": "{count, plural, one {# tähti} other {# tähteä}}",
|
||||
"rating_description": "Näytä EXIF-arvosana tiedot-paneelissa",
|
||||
"rating_description": "Näytä EXIF-arvosana lisätietopaneelissa",
|
||||
"raw": "",
|
||||
"reaction_options": "Reaktioasetukset",
|
||||
"read_changelog": "Lue muutosloki",
|
||||
@@ -1049,11 +1067,13 @@
|
||||
"recent_searches": "Edelliset haut",
|
||||
"refresh": "Päivitä",
|
||||
"refresh_encoded_videos": "Päivitä enkoodatut videot",
|
||||
"refresh_faces": "Päivitä kasvot",
|
||||
"refresh_metadata": "Päivitä metadata",
|
||||
"refresh_thumbnails": "Päivitä pikkukuvat",
|
||||
"refreshed": "Päivitetty",
|
||||
"refreshes_every_file": "Päivittää jokaisen tiedoston",
|
||||
"refreshes_every_file": "Lukee uudelleen kaikki olemassa olevat ja uudet tiedostot",
|
||||
"refreshing_encoded_video": "Päivitetään enkoodattu video",
|
||||
"refreshing_faces": "Päivitetään kasvoja",
|
||||
"refreshing_metadata": "Päivitetään metadata",
|
||||
"regenerating_thumbnails": "Regeneroidaan pikkukuvia",
|
||||
"remove": "Poista",
|
||||
@@ -1066,7 +1086,7 @@
|
||||
"remove_from_favorites": "Poista suosikeista",
|
||||
"remove_from_shared_link": "Poista jakolinkistä",
|
||||
"remove_user": "Poista käyttäjä",
|
||||
"removed_api_key": "API Key {name} poistettu",
|
||||
"removed_api_key": "API-avain {name} poistettu",
|
||||
"removed_from_archive": "Poistettu arkistosta",
|
||||
"removed_from_favorites": "Poistettu suosikeista",
|
||||
"removed_from_favorites_count": "{count, plural, other {Poistettu #}} suosikeista",
|
||||
@@ -1096,12 +1116,13 @@
|
||||
"role_editor": "Editori",
|
||||
"role_viewer": "Toistin",
|
||||
"save": "Tallenna",
|
||||
"saved_api_key": "API Key tallennettu",
|
||||
"saved_api_key": "API-avain tallennettu",
|
||||
"saved_profile": "Profiili tallennettu",
|
||||
"saved_settings": "Asetukset tallennettu",
|
||||
"say_something": "Sano jotain",
|
||||
"scan_all_libraries": "Skannaa kaikki kirjastot",
|
||||
"scan_all_library_files": "Skannaa uudelleen kaikki kirjastotiedostot",
|
||||
"scan_library": "Skannaa",
|
||||
"scan_new_library_files": "Skannaa uusia kirjastotiedostoja",
|
||||
"scan_settings": "Skannausasetukset",
|
||||
"scanning_for_album": "Etsitään albumia...",
|
||||
@@ -1122,7 +1143,7 @@
|
||||
"search_places": "Etsi paikkoja",
|
||||
"search_settings": "Hakuasetukset",
|
||||
"search_state": "Etsi tilaa...",
|
||||
"search_tags": "Haku tageja...",
|
||||
"search_tags": "Etsi tunnisteita...",
|
||||
"search_timezone": "Etsi aikavyöhyke...",
|
||||
"search_type": "Etsinnän tyyppi",
|
||||
"search_your_photos": "Etsi kuvia",
|
||||
@@ -1146,8 +1167,8 @@
|
||||
"send_message": "Lähetä viesti",
|
||||
"send_welcome_email": "Lähetä tervetuloviesti",
|
||||
"server": "Palvelin",
|
||||
"server_offline": "Serveri Offline-tilassa",
|
||||
"server_online": "Palvelin on linjalla",
|
||||
"server_offline": "Palvelin Offline-tilassa",
|
||||
"server_online": "Palvelin Online-tilassa",
|
||||
"server_stats": "Palvelimen tilastot",
|
||||
"server_version": "Palvelimen versio",
|
||||
"set": "Aseta",
|
||||
@@ -1163,11 +1184,11 @@
|
||||
"shared_by": "Jakanut",
|
||||
"shared_by_user": "Käyttäjän {user} jakama",
|
||||
"shared_by_you": "Sinun jakamasi",
|
||||
"shared_from_partner": "{partner}n kuvia",
|
||||
"shared_from_partner": "Kumppanin {partner} kuvia",
|
||||
"shared_link_options": "Jaetun linkin vaihtoehdot",
|
||||
"shared_links": "Jaetut linkit",
|
||||
"shared_photos_and_videos_count": "{assetCount, plural, other {# jaettua kuvaa ja videota.}}",
|
||||
"shared_with_partner": "Jaa {partner} kanssa",
|
||||
"shared_with_partner": "Jaa kumppanin {partner} kanssa",
|
||||
"sharing": "Jakaminen",
|
||||
"sharing_enter_password": "Nähdäksesi sivun sinun tulee antaa salasana.",
|
||||
"sharing_sidebar_description": "Näytä jakamislinkki sivupalkissa",
|
||||
@@ -1188,6 +1209,7 @@
|
||||
"show_person_options": "Näytä henkilöasetukset",
|
||||
"show_progress_bar": "Näytä eteneminen",
|
||||
"show_search_options": "Näytä hakuvaihtoehdot",
|
||||
"show_slideshow_transition": "Näytä diaesitys siirtymä",
|
||||
"show_supporter_badge": "Kannattajan merkki",
|
||||
"show_supporter_badge_description": "Näytä kannattajan merkki",
|
||||
"shuffle": "Sekoita",
|
||||
@@ -1198,7 +1220,7 @@
|
||||
"size": "Koko",
|
||||
"skip_to_content": "Siirry sisältöön",
|
||||
"skip_to_folders": "Siirry kansioihin",
|
||||
"skip_to_tags": "Siirry tageihin",
|
||||
"skip_to_tags": "Siirry tunnisteisiin",
|
||||
"slideshow": "Diaesitys",
|
||||
"slideshow_settings": "Diaesityksen asetukset",
|
||||
"sort_albums_by": "Järjestä albumit...",
|
||||
@@ -1208,7 +1230,7 @@
|
||||
"sort_oldest": "Vanhin kuva",
|
||||
"sort_recent": "Tuorein kuva",
|
||||
"sort_title": "Otsikko",
|
||||
"source": "Lähde",
|
||||
"source": "Lähdekoodi",
|
||||
"stack": "Pinoa",
|
||||
"stack_duplicates": "Pinoa kaksoiskappaleet",
|
||||
"stack_select_one_photo": "Valitse yksi pääkuva pinolle",
|
||||
@@ -1216,7 +1238,7 @@
|
||||
"stacked_assets_count": "Pinottu {count, plural, one {# media} other {# mediaa}}",
|
||||
"stacktrace": "Vianetsintätiedot",
|
||||
"start": "Aloita",
|
||||
"start_date": "Alkupäivämäärä",
|
||||
"start_date": "Alkupäivä",
|
||||
"state": "Maakunta/osavaltio",
|
||||
"status": "Tila",
|
||||
"stop_motion_photo": "Pysäytä liikkuva kuva",
|
||||
@@ -1229,21 +1251,25 @@
|
||||
"submit": "Lähetä",
|
||||
"suggestions": "Ehdotukset",
|
||||
"sunrise_on_the_beach": "Auringonnousu rannalla",
|
||||
"support": "Tuki",
|
||||
"support_and_feedback": "Tuki ja palaute",
|
||||
"support_third_party_description": "Immich-asennuksesi on pakattu kolmannen osapuolen toimesta. Kohtaamasi ongelmat saattavat johtua tästä paketista, joten ilmoita niistä ensisijaisesti heille alla olevien linkkien kautta.",
|
||||
"swap_merge_direction": "Käännä yhdistämissuunta",
|
||||
"sync": "Synkronoi",
|
||||
"tag": "Tagi",
|
||||
"tag_assets": "Merkitse kohde",
|
||||
"tag": "Lisää tunniste",
|
||||
"tag_assets": "Lisää tunnisteita",
|
||||
"tag_created": "Luotu tunniste: {tag}",
|
||||
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tagiotsikoiden mukaan",
|
||||
"tag_not_found_question": "Etkö löydä tunnistetta? Luo yksi <link>tästä</link>",
|
||||
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan",
|
||||
"tag_not_found_question": "Etkö löydä tunnistetta? <link> Luo uusi tunniste </link>",
|
||||
"tag_updated": "Päivitetty tunniste: {tag}",
|
||||
"tagged_assets": "Tunnistettu {count, plural, one {# kohde} other {# kohdetta}}",
|
||||
"tags": "Tagit",
|
||||
"tags": "Tunnisteet",
|
||||
"template": "Template",
|
||||
"theme": "Teema",
|
||||
"theme_selection": "Teeman valinta",
|
||||
"theme_selection_description": "Aseta vaalea tai tumma tila automaattisesti perustuen selaimesi asetuksiin",
|
||||
"they_will_be_merged_together": "Nämä tullaan yhdistämään",
|
||||
"third_party_resources": "Kolmannen osapuolen resurssit",
|
||||
"time_based_memories": "Aikaan perustuvat muistot",
|
||||
"timezone": "Aikavyöhyke",
|
||||
"to_archive": "Arkistoi",
|
||||
@@ -1314,6 +1340,8 @@
|
||||
"version": "Versio",
|
||||
"version_announcement_closing": "Ystäväsi Alex",
|
||||
"version_announcement_message": "Hei! Sovelluksen uusi versio on saatavilla. Käythän vilkaisemassa <link>julkaisun tiedot</link> ja varmistathan, että <code>docker-compose.yml</code> ja <code>.env</code> määritykset ovat ajan tasalla. Näin varmistat järjestelmän toimivuuden, varsinkin jos käytät WatchToweria tai muuta automaattista päivitysjärjestelmää.",
|
||||
"version_history": "Versiohistoria",
|
||||
"version_history_item": "Asennettu {version} päivänä {date}",
|
||||
"video": "Video",
|
||||
"video_hover_setting": "Toista esikatselun video kun kursori viedään sen päälle",
|
||||
"video_hover_setting_description": "Toista videon esikatselukuva kun kursori on kuvan päällä. Vaikka toiminto on pois käytöstä, toiston voi aloittaa viemällä kursori toistokuvakkeen päälle.",
|
||||
@@ -14,7 +14,7 @@
|
||||
"add_a_name": "Ajouter un nom",
|
||||
"add_a_title": "Ajouter un titre",
|
||||
"add_exclusion_pattern": "Ajouter un schéma d'exclusion",
|
||||
"add_import_path": "Ajouter un chemin d'importation",
|
||||
"add_import_path": "Ajouter un chemin à importer",
|
||||
"add_location": "Ajouter un lieu",
|
||||
"add_more_users": "Ajouter plus d'utilisateurs",
|
||||
"add_partner": "Ajouter un partenaire",
|
||||
@@ -28,6 +28,7 @@
|
||||
"added_to_favorites_count": "{count, number} ajouté(s) aux favoris",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Ajouter des schémas d'exclusion. Les caractères génériques *, ** et ? sont pris en charge. Pour ignorer tous les fichiers dans un répertoire nommé « Raw », utilisez « **/Raw/** ». Pour ignorer tous les fichiers se terminant par « .tif », utilisez « **/*.tif ». Pour ignorer un chemin absolu, utilisez « /chemin/à/ignorer/** ».",
|
||||
"asset_offline_description": "Ce média de la bibliothèque externe n'est plus présent sur le disque et a été déplacé vers la corbeille. Si le fichier a été déplacé dans la bibliothèque, vérifiez votre chronologie pour le nouveau média correspondant. Pour restaurer ce média, veuillez vous assurer que le chemin du fichier ci-dessous peut être accédé par Immich et lancez l'analyse de la bibliothèque.",
|
||||
"authentication_settings": "Paramètres d'authentification",
|
||||
"authentication_settings_description": "Gérer le mot de passe, la délégation d'authentification OAuth et d'autres paramètres d'authentification",
|
||||
"authentication_settings_disable_all": "Êtes-vous sûr de vouloir désactiver toutes les méthodes de connexion ? La connexion sera complètement désactivée.",
|
||||
@@ -50,26 +51,35 @@
|
||||
"external_library_created_at": "Bibliothèque externe (créée le {date})",
|
||||
"external_library_management": "Gestion de la bibliothèque externe",
|
||||
"face_detection": "Détection des visages",
|
||||
"face_detection_description": "Détection des visages dans les médias à l'aide de l'apprentissage automatique. Pour les vidéos, seule la miniature est prise en compte. « Tout » (re)traite tous les médias. « Manquant » met en file d'attente les médias qui n'ont pas encore été traités. Les visages détectés seront mis en file d'attente pour la reconnaissance faciale une fois la détection des visages terminée, les regroupant en personnes existantes ou nouvelles.",
|
||||
"facial_recognition_job_description": "Regrouper les visages détectés en personnes. Cette étape est exécutée une fois la détection des visages terminée. « Tout » (re)regroupe tous les visages. « Manquant » met en file d'attente les visages auxquels aucune personne n'a été attribuée.",
|
||||
"face_detection_description": "Détection des visages dans les médias à l'aide de l'apprentissage automatique. Pour les vidéos, seule la miniature est prise en compte. « Rafraichir» (re)traite tous les médias. « Réinitialise» met en file d'attente les médias qui n'ont pas encore été traités. Les visages détectés seront mis en file d'attente pour la reconnaissance faciale une fois la détection des visages terminée, les regroupant en personnes existantes ou nouvelles.",
|
||||
"facial_recognition_job_description": "Regrouper les visages détectés en personnes. Cette étape est exécutée une fois la détection des visages terminée. « Rafraichir» (re)regroupe tous les visages. « Manquant» met en file d'attente les visages auxquels aucune personne n'a été attribuée.",
|
||||
"failed_job_command": "La commande {command} a échoué pour la tâche : {job}",
|
||||
"force_delete_user_warning": "ATTENTION : Cette opération entraîne la suppression immédiate de l'utilisateur et de tous ses médias. Cette opération ne peut être annulée et les fichiers ne peuvent être récupérés.",
|
||||
"forcing_refresh_library_files": "Forcer le rafraîchissement de tous les fichiers de la bibliothèque",
|
||||
"image_format": "Format",
|
||||
"image_format_description": "WebP produit des fichiers plus petits que JPEG, mais son encodage est plus lent.",
|
||||
"image_prefer_embedded_preview": "Préférer l'aperçu intégré",
|
||||
"image_prefer_embedded_preview_setting_description": "Utiliser les miniatures intégrées dans les photos au format RAW comme entrées pour le traitement d'image quand elles sont disponibles. Cela peut donner des couleurs plus justes pour certaines images, mais la qualité des miniatures est dépendant de l'appareil photo et l'image peut avoir des artéfacts de compression.",
|
||||
"image_prefer_wide_gamut": "Préférer une gamme de couleurs étendue",
|
||||
"image_prefer_wide_gamut_setting_description": "Utiliser Display P3 pour les miniatures. Cela préserve mieux la vibrance des images avec des espaces colorimétriques étendus, mais les images peuvent apparaître différemment sur les anciens appareils avec une ancienne version du navigateur. Conserver les images sRGB en sRGB pour éviter les décalages de couleur.",
|
||||
"image_prefer_wide_gamut_setting_description": "Utiliser Display P3 pour les miniatures. Cela préserve mieux la vivacité des images avec des espaces colorimétriques étendus, mais les images peuvent apparaître différemment sur les anciens appareils avec une ancienne version du navigateur. Conserver les images sRGB en sRGB pour éviter les décalages de couleur.",
|
||||
"image_preview_description": "Image de taille moyenne avec métadonnées retirées, utilisée lors de la visualisation d'un seul média et pour l'apprentissage automatique",
|
||||
"image_preview_format": "Format des aperçus",
|
||||
"image_preview_quality_description": "Qualité de l'aperçu : de 1 à 100. Une valeur plus élevée produit de meilleurs résultats, mais elle produit des fichiers plus volumineux et peut réduire la réactivité de l'application. Une valeur trop basse peut affecter la qualité de l'apprentissage automatique.",
|
||||
"image_preview_resolution": "Résolution des aperçus",
|
||||
"image_preview_resolution_description": "Utilisé lors de l'affichage d'une seule photo et pour l'apprentissage automatique. Des résolutions plus élevées peuvent préserver plus de détails mais prennent plus de temps à encoder, ont des tailles de fichiers plus importantes et peuvent réduire la réactivité de l'application.",
|
||||
"image_preview_title": "Paramètres de prévisualisation",
|
||||
"image_quality": "Qualité",
|
||||
"image_quality_description": "Qualité d'image de 1 à 100. Une valeur plus élevée offre une meilleure qualité mais produit des fichiers plus volumineux. Cette option affecte les images d'aperçu et de miniature.",
|
||||
"image_resolution": "Résolution",
|
||||
"image_resolution_description": "Les résolutions plus élevées permettent de préserver davantage de détails, mais l'encodage est plus long, les fichiers sont plus volumineux et la réactivité de l'application peut s'en trouver réduite.",
|
||||
"image_settings": "Paramètres d'image",
|
||||
"image_settings_description": "Gérer la qualité et la résolution des images générées",
|
||||
"image_settings_description": "Gestion de la qualité et résolution des images générées",
|
||||
"image_thumbnail_description": "Petite vignette avec métadonnées retirées, utilisée lors de la visualisation de groupes de photos comme sur la vue chronologique principale",
|
||||
"image_thumbnail_format": "Format des miniatures",
|
||||
"image_thumbnail_quality_description": "Qualité des vignettes : de 1 à 100. Une valeur élevée produit de meilleurs résultats, mais elle produit des fichiers plus volumineux et peut réduire la réactivité de l'application.",
|
||||
"image_thumbnail_resolution": "Résolution des miniatures",
|
||||
"image_thumbnail_resolution_description": "Utilisée lors du visionnage de groupes de photos (vue principale, albums, etc.). Une résolution plus élevée préserve davantage de détails, mais est plus longue à encoder, produit des fichiers plus lourds, et peut réduire la réactivité de l'application.",
|
||||
"image_thumbnail_resolution_description": "Utilisée lors du visionnage de groupes de photos (vue chronologique principale, albums, etc.). Une résolution plus élevée préserve davantage de détails, mais est plus longue à encoder, produit des fichiers plus lourds, et peut réduire la réactivité de l'application.",
|
||||
"image_thumbnail_title": "Paramètres des vignettes",
|
||||
"job_concurrency": "{job} : nombre de tâches simultanées",
|
||||
"job_created": "Tâche créée",
|
||||
"job_not_concurrency_safe": "Cette tâche ne peut pas être exécutée en multitâche de façon sûre.",
|
||||
@@ -81,14 +91,14 @@
|
||||
"library_created": "Bibliothèque créée : {library}",
|
||||
"library_cron_expression": "Expression Cron",
|
||||
"library_cron_expression_description": "Réglez l'intervalle d'analyse en utilisant le format cron. Pour plus d'informations, veuillez consulter par exemple <link>Crontab Guru</link>",
|
||||
"library_cron_expression_presets": "Expressions Cron enregistrées",
|
||||
"library_cron_expression_presets": "Préréglages d'expressions Cron",
|
||||
"library_deleted": "Bibliothèque supprimée",
|
||||
"library_import_path_description": "Spécifier un dossier à importer. Ce dossier, y compris les sous-dossiers, sera analysé à la recherche d'images et de vidéos.",
|
||||
"library_scanning": "Analyse périodique",
|
||||
"library_scanning_description": "Configurer l'analyse périodique de la bibliothèque",
|
||||
"library_scanning_enable_description": "Activer l'analyse périodique de la bibliothèque",
|
||||
"library_settings": "Bibliothèque externe",
|
||||
"library_settings_description": "Gérer les paramètres de bibliothèque externe",
|
||||
"library_settings_description": "Gestion des paramètres des bibliothèques externes",
|
||||
"library_tasks_description": "Exécution d'actions sur la bibliothèque",
|
||||
"library_watching_enable_description": "Surveiller les modifications de fichiers dans les bibliothèques externes",
|
||||
"library_watching_settings": "Surveillance de bibliothèque (EXPÉRIMENTAL)",
|
||||
@@ -212,6 +222,7 @@
|
||||
"require_password_change_on_login": "Demander à l'utilisateur de changer son mot de passe lors de sa première connexion",
|
||||
"reset_settings_to_default": "Réinitialiser les paramètres par défaut",
|
||||
"reset_settings_to_recent_saved": "Paramètres réinitialisés avec les derniers paramètres enregistrés",
|
||||
"scanning_library": "Analyse de la bibliothèque",
|
||||
"scanning_library_for_changed_files": "Recherche de fichiers modifiés dans la bibliothèque",
|
||||
"scanning_library_for_new_files": "Recherche de nouveaux fichiers dans la bibliothèque",
|
||||
"search_jobs": "Recherche des tâches ...",
|
||||
@@ -276,7 +287,7 @@
|
||||
"transcoding_hardware_acceleration": "Accélération matérielle",
|
||||
"transcoding_hardware_acceleration_description": "Expérimental ; beaucoup plus rapide, mais aura une qualité inférieure pour un même débit binaire",
|
||||
"transcoding_hardware_decoding": "Décodage matériel",
|
||||
"transcoding_hardware_decoding_setting_description": "S'applique uniquement à NVENC, QSV et RKMPP. Active l'accélération de bout en bout au lieu d'accélérer uniquement l'encodage. Peut ne pas fonctionner sur toutes les vidéos.",
|
||||
"transcoding_hardware_decoding_setting_description": "Active l'accélération de bout en bout au lieu d'accélérer uniquement l'encodage. Peut ne pas fonctionner sur toutes les vidéos.",
|
||||
"transcoding_hevc_codec": "Codec HEVC",
|
||||
"transcoding_max_b_frames": "Nombre maximum de trames B",
|
||||
"transcoding_max_b_frames_description": "Des valeurs plus élevées améliorent l'efficacité de la compression, mais ralentissent l'encodage. Elles peuvent ne pas être compatibles avec l'accélération matérielle sur les anciens appareils. Une valeur de 0 désactive les trames B, tandis qu'une valeur de -1 définit automatiquement ce paramètre.",
|
||||
@@ -325,7 +336,7 @@
|
||||
"user_delete_immediately_checkbox": "Mise en file d'attente d'un utilisateur et de médias en vue d'une suppression immédiate",
|
||||
"user_management": "Gestion des utilisateurs",
|
||||
"user_password_has_been_reset": "Le mot de passe de l'utilisateur a été réinitialisé :",
|
||||
"user_password_reset_description": "Veuillez saisir un mot de passe temporaire à l'utilisateur et informez-le qu'il devra le changer à sa première connexion.",
|
||||
"user_password_reset_description": "Veuillez fournir le mot de passe temporaire à l'utilisateur et informez-le qu'il devra le changer à sa première connexion.",
|
||||
"user_restore_description": "Le compte de <b>{user}</b> sera restauré.",
|
||||
"user_restore_scheduled_removal": "Restaurer l'utilisateur - suppression programmée le {date, date, long}",
|
||||
"user_settings": "Paramètres utilisateur",
|
||||
@@ -349,7 +360,7 @@
|
||||
"album_added_notification_setting_description": "Recevoir une notification par courriel lorsque vous êtes ajouté(e) à un album partagé",
|
||||
"album_cover_updated": "Couverture de l'album mise à jour",
|
||||
"album_delete_confirmation": "Êtes-vous sûr de vouloir supprimer l'album {album} ?",
|
||||
"album_delete_confirmation_description": "Si cet album est partagé, d'autres utilisateurs ne pourront plus y accéder.",
|
||||
"album_delete_confirmation_description": "Si cet album est partagé, les autres utilisateurs ne pourront plus y accéder.",
|
||||
"album_info_updated": "Détails de l'album mis à jour",
|
||||
"album_leave": "Quitter l'album ?",
|
||||
"album_leave_confirmation": "Êtes-vous sûr de vouloir quitter l'album {album} ?",
|
||||
@@ -395,7 +406,7 @@
|
||||
"asset_has_unassigned_faces": "Le média a des visages non assignés",
|
||||
"asset_hashing": "Hachage...",
|
||||
"asset_offline": "Média hors ligne",
|
||||
"asset_offline_description": "Ce média est hors ligne. Immich ne peut pas accéder à son emplacement physique. Veuillez vous assurez que le média est disponible, puis relancez l'analyse de la bibliothèque.",
|
||||
"asset_offline_description": "Ce média externe n'est plus accessible sur le disque. Veuillez contacter votre administrateur Immich pour obtenir de l'aide.",
|
||||
"asset_skipped": "Sauté",
|
||||
"asset_skipped_in_trash": "À la corbeille",
|
||||
"asset_uploaded": "Envoyé",
|
||||
@@ -409,7 +420,7 @@
|
||||
"assets_moved_to_trash_count": "{count, plural, one {# média déplacé} other {# médias déplacés}} dans la corbeille",
|
||||
"assets_permanently_deleted_count": "{count, plural, one {# média supprimé} other {# médias supprimés}} définitivement",
|
||||
"assets_removed_count": "{count, plural, one {# média supprimé} other {# médias supprimés}}",
|
||||
"assets_restore_confirmation": "Êtes-vous sûr de vouloir restaurer tous vos médias de la corbeille ? Vous ne pouvez pas annuler cette action !",
|
||||
"assets_restore_confirmation": "Êtes-vous sûr de vouloir restaurer tous vos médias de la corbeille ? Vous ne pouvez pas annuler cette action ! Notez que les médias hors ligne ne peuvent être restaurés de cette façon.",
|
||||
"assets_restored_count": "{count, plural, one {# média restauré} other {# médias restaurés}}",
|
||||
"assets_trashed_count": "{count, plural, one {# média} other {# médias}} mis à la corbeille",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {Un média est} other {Des médias sont}} déjà dans l'album",
|
||||
@@ -420,6 +431,7 @@
|
||||
"birthdate_saved": "Date de naissance sauvée avec succès",
|
||||
"birthdate_set_description": "La date de naissance est utilisée pour calculer l'âge de cette personne au moment où la photo a été prise.",
|
||||
"blurred_background": "Arrière-plan flouté",
|
||||
"bugs_and_feature_requests": "Bugs & demandes d'évolutions",
|
||||
"build": "Version",
|
||||
"build_image": "Image de la version",
|
||||
"bulk_delete_duplicates_confirmation": "Êtes-vous sûr de vouloir supprimer {count, plural, one {# doublon} other {# doublons}} ? Cette opération conservera le plus grand média de chaque groupe et supprimera définitivement tous les autres doublons. Vous ne pouvez pas annuler cette action !",
|
||||
@@ -523,11 +535,13 @@
|
||||
"delete_tag_confirmation_prompt": "Êtes-vous sûr de vouloir supprimer l'étiquette {tagName} ?",
|
||||
"delete_user": "Supprimer l'utilisateur",
|
||||
"deleted_shared_link": "Lien partagé supprimé",
|
||||
"deletes_missing_assets": "Supprimer les médias manquants du disque",
|
||||
"description": "Description",
|
||||
"details": "Détails",
|
||||
"direction": "Direction",
|
||||
"disabled": "Désactivé",
|
||||
"disallow_edits": "Ne pas autoriser les modifications",
|
||||
"discord": "Discord",
|
||||
"discover": "Découvrir",
|
||||
"dismiss_all_errors": "Ignorer toutes les erreurs",
|
||||
"dismiss_error": "Ignorer l'erreur",
|
||||
@@ -536,6 +550,7 @@
|
||||
"display_original_photos": "Afficher les photos originales",
|
||||
"display_original_photos_setting_description": "Préférer afficher la photo originale lors de la visualisation d'un média plutôt que sa miniature lorsque cela est possible. Cela peut entraîner des vitesses d'affichage plus lentes.",
|
||||
"do_not_show_again": "Ne plus afficher ce message",
|
||||
"documentation": "Documentation",
|
||||
"done": "Terminé",
|
||||
"download": "Télécharger",
|
||||
"download_include_embedded_motion_videos": "Vidéos embarquées",
|
||||
@@ -714,7 +729,7 @@
|
||||
"unable_to_update_library": "Impossible de mettre à jour la bibliothèque",
|
||||
"unable_to_update_location": "Impossible de mettre à jour la localisation",
|
||||
"unable_to_update_settings": "Impossible de mettre à jour les paramètres",
|
||||
"unable_to_update_timeline_display_status": "Impossible de mettre à jour le statut d'affichage de la timeline",
|
||||
"unable_to_update_timeline_display_status": "Impossible de mettre à jour le statut d'affichage de la vue chronologique",
|
||||
"unable_to_update_user": "Impossible de mettre à jour l'utilisateur",
|
||||
"unable_to_upload_file": "Impossible d'envoyer le fichier"
|
||||
},
|
||||
@@ -734,7 +749,7 @@
|
||||
"export_as_json": "Exporter en JSON",
|
||||
"extension": "Extension",
|
||||
"external": "Externe",
|
||||
"external_libraries": "Bibliothèques externes",
|
||||
"external_libraries": "Bibliothèques ext.",
|
||||
"face_unassigned": "Non attribué",
|
||||
"failed_to_get_people": "Impossible d'obtenir les personnes",
|
||||
"favorite": "Favori",
|
||||
@@ -873,6 +888,7 @@
|
||||
"look": "Regarder",
|
||||
"loop_videos": "Vidéos en boucle",
|
||||
"loop_videos_description": "Activer pour voir la vidéo en boucle dans le lecteur détaillé.",
|
||||
"main_branch_warning": "Vous utilisez une version de développement. Nous vous recommandons fortement d'utiliser une version stable !",
|
||||
"make": "Marque",
|
||||
"manage_shared_links": "Gérer les liens partagés",
|
||||
"manage_sharing_with_partners": "Gérer le partage avec les partenaires",
|
||||
@@ -942,6 +958,7 @@
|
||||
"notifications": "Notifications",
|
||||
"notifications_setting_description": "Gérer les notifications",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Ressources Immich officielles",
|
||||
"offline": "Hors ligne",
|
||||
"offline_paths": "Chemins hors ligne",
|
||||
"offline_paths_description": "Ces résultats peuvent être causés par la suppression manuelle de fichiers qui n'étaient pas dans une bibliothèque externe.",
|
||||
@@ -1076,11 +1093,13 @@
|
||||
"recent_searches": "Recherches récentes",
|
||||
"refresh": "Actualiser",
|
||||
"refresh_encoded_videos": "Actualiser les vidéos encodées",
|
||||
"refresh_faces": "Mettre à jour les visages",
|
||||
"refresh_metadata": "Actualiser les métadonnées",
|
||||
"refresh_thumbnails": "Actualiser les vignettes",
|
||||
"refreshed": "Actualisé",
|
||||
"refreshes_every_file": "Actualise tous les fichiers",
|
||||
"refreshes_every_file": "Actualise tous les fichiers (existants et nouveaux)",
|
||||
"refreshing_encoded_video": "Actualisation de la vidéo encodée",
|
||||
"refreshing_faces": "Actualiser les visages",
|
||||
"refreshing_metadata": "Actualisation des métadonnées",
|
||||
"regenerating_thumbnails": "Régénération des vignettes",
|
||||
"remove": "Supprimer",
|
||||
@@ -1129,6 +1148,7 @@
|
||||
"say_something": "Réagir",
|
||||
"scan_all_libraries": "Analyser toutes les bibliothèques",
|
||||
"scan_all_library_files": "Analyser tous les fichiers",
|
||||
"scan_library": "Analyser",
|
||||
"scan_new_library_files": "Analyser les nouveaux fichiers",
|
||||
"scan_settings": "Paramètres d'analyse",
|
||||
"scanning_for_album": "Recherche d'albums en cours...",
|
||||
@@ -1206,8 +1226,8 @@
|
||||
"show_file_location": "Afficher l'emplacement du fichier",
|
||||
"show_gallery": "Afficher la gallerie",
|
||||
"show_hidden_people": "Afficher les personnes masquées",
|
||||
"show_in_timeline": "Afficher dans la chronologie",
|
||||
"show_in_timeline_setting_description": "Afficher les photos et vidéos de cet utilisateur dans votre timeline",
|
||||
"show_in_timeline": "Afficher dans la vue chronologique",
|
||||
"show_in_timeline_setting_description": "Afficher les photos et vidéos de cet utilisateur dans votre vue chronologique",
|
||||
"show_keyboard_shortcuts": "Afficher les raccourcis clavier",
|
||||
"show_metadata": "Afficher les métadonnées",
|
||||
"show_or_hide_info": "Afficher ou masquer les informations",
|
||||
@@ -1215,6 +1235,7 @@
|
||||
"show_person_options": "Afficher les options de personnes",
|
||||
"show_progress_bar": "Afficher la barre de progression",
|
||||
"show_search_options": "Afficher les options de recherche",
|
||||
"show_slideshow_transition": "Afficher la transition du diaporama",
|
||||
"show_supporter_badge": "Badge de contributeur",
|
||||
"show_supporter_badge_description": "Afficher le badge de contributeur",
|
||||
"shuffle": "Mélanger",
|
||||
@@ -1237,7 +1258,7 @@
|
||||
"sort_title": "Titre",
|
||||
"source": "Source",
|
||||
"stack": "Empiler",
|
||||
"stack_duplicates": "Empiler les duplications",
|
||||
"stack_duplicates": "Empiler les doublons",
|
||||
"stack_select_one_photo": "Sélectionnez une photo principale pour la pile",
|
||||
"stack_selected_photos": "Empiler les photos sélectionnées",
|
||||
"stacked_assets_count": "{count, plural, one {# média empilé} other {# médias empilés}}",
|
||||
@@ -1256,13 +1277,16 @@
|
||||
"submit": "Soumettre",
|
||||
"suggestions": "Suggestions",
|
||||
"sunrise_on_the_beach": "Aurore sur la plage",
|
||||
"support": "Support",
|
||||
"support_and_feedback": "Support & Retours",
|
||||
"support_third_party_description": "Votre installation d'Immich est packagée via une application tierce. Si vous rencontrez des anomalies, elles peuvent venir de ce packaging tiers, merci de créer les anomalies avec ces tiers en premier lieu en utilisant les liens ci-dessous.",
|
||||
"swap_merge_direction": "Inverser la direction de fusion",
|
||||
"sync": "Synchroniser",
|
||||
"tag": "Tag",
|
||||
"tag_assets": "Taguer les médias",
|
||||
"tag_created": "Étiquette créée : {tag}",
|
||||
"tag_feature_description": "Parcourir les photos et vidéos groupées par thèmes logiques",
|
||||
"tag_not_found_question": "Vous ne trouvez pas une étiquette ? Créez-en une <link>ici</link>",
|
||||
"tag_not_found_question": "Vous ne trouvez pas une étiquette ? <link>Créer une nouvelle étiquette.</link>",
|
||||
"tag_updated": "Étiquette mise à jour : {tag}",
|
||||
"tagged_assets": "Tag ajouté à {count, plural, one {# média} other {# médias}}",
|
||||
"tags": "Étiquettes",
|
||||
@@ -1271,6 +1295,7 @@
|
||||
"theme_selection": "Sélection du thème",
|
||||
"theme_selection_description": "Ajuster automatiquement le thème clair ou sombre via les préférences système",
|
||||
"they_will_be_merged_together": "Elles seront fusionnées ensemble",
|
||||
"third_party_resources": "Ressources tierces",
|
||||
"time_based_memories": "Souvenirs basés sur la date",
|
||||
"timezone": "Fuseau horaire",
|
||||
"to_archive": "Archiver",
|
||||
@@ -1344,6 +1369,8 @@
|
||||
"version": "Version",
|
||||
"version_announcement_closing": "Ton ami, Alex",
|
||||
"version_announcement_message": "Bonjour, il y a une nouvelle version de l'application. Prenez le temps de consulter les <link>notes de version</link> et assurez-vous que vos fichiers <code>docker-compose.yml</code> et <code>.env</code> sont à jour pour éviter toute erreur de configuration, surtout si vous utilisez WatchTower ou tout autre mécanisme qui gère la mise à jour de votre application automatiquement.",
|
||||
"version_history": "Historique de version",
|
||||
"version_history_item": "Version {version} installée le {date}",
|
||||
"video": "Vidéo",
|
||||
"video_hover_setting": "Lire la miniature des vidéos au survol",
|
||||
"video_hover_setting_description": "Jouer la prévisualisation vidéo au survol. Si désactivé, la lecture peut quand même être démarrée en survolant le bouton Play.",
|
||||
@@ -1353,7 +1380,7 @@
|
||||
"view_album": "Afficher l'album",
|
||||
"view_all": "Voir tout",
|
||||
"view_all_users": "Voir tous les utilisateurs",
|
||||
"view_in_timeline": "Voir dans la timeline",
|
||||
"view_in_timeline": "Voir dans la vue chronologique",
|
||||
"view_links": "Voir les liens",
|
||||
"view_next_asset": "Voir le média suivant",
|
||||
"view_previous_asset": "Voir le média précédent",
|
||||