Compare commits
242 Commits
v1.117.0
...
fix/server
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d846f7fc7f | ||
|
|
efb4394c7b | ||
|
|
e2188867a6 | ||
|
|
5e32cc7bd5 | ||
|
|
1d55b5bfc0 | ||
|
|
60afd7b400 | ||
|
|
3f99ef90ec | ||
|
|
380fc06979 | ||
|
|
d34d92dca3 | ||
|
|
10f8e11db1 | ||
|
|
18b93ddc73 | ||
|
|
88ca1f31ad | ||
|
|
3551407d95 | ||
|
|
6bfc20ef95 | ||
|
|
eadcbd52fb | ||
|
|
fed882a28a | ||
|
|
c30ef4dfd6 | ||
|
|
cdabd08139 | ||
|
|
b95bc32310 | ||
|
|
e851a9b099 | ||
|
|
e46db37e44 | ||
|
|
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 |
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:
|
labels:
|
||||||
- changelog:breaking-change
|
- changelog:breaking-change
|
||||||
|
|
||||||
|
- title: 🫥 Deprecated Changes
|
||||||
|
labels:
|
||||||
|
- changelog:deprecated
|
||||||
|
|
||||||
- title: 🔒 Security
|
- title: 🔒 Security
|
||||||
labels:
|
labels:
|
||||||
- changelog:security
|
- changelog:security
|
||||||
|
|||||||
2
.github/workflows/cli.yml
vendored
@@ -59,7 +59,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@v3.2.0
|
uses: docker/setup-qemu-action@v3.2.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- 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
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
|
|||||||
4
.github/workflows/docker-cleanup.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Clean temporary images
|
- name: Clean temporary images
|
||||||
if: "${{ env.TOKEN != '' }}"
|
if: "${{ env.TOKEN != '' }}"
|
||||||
uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0
|
uses: stumpylog/image-cleaner-action/ephemeral@v0.9.0
|
||||||
with:
|
with:
|
||||||
token: "${{ env.TOKEN }}"
|
token: "${{ env.TOKEN }}"
|
||||||
owner: "immich-app"
|
owner: "immich-app"
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Clean untagged images
|
- name: Clean untagged images
|
||||||
if: "${{ env.TOKEN != '' }}"
|
if: "${{ env.TOKEN != '' }}"
|
||||||
uses: stumpylog/image-cleaner-action/untagged@v0.8.0
|
uses: stumpylog/image-cleaner-action/untagged@v0.9.0
|
||||||
with:
|
with:
|
||||||
token: "${{ env.TOKEN }}"
|
token: "${{ env.TOKEN }}"
|
||||||
owner: "immich-app"
|
owner: "immich-app"
|
||||||
|
|||||||
5
.github/workflows/docker.yml
vendored
@@ -33,6 +33,7 @@ jobs:
|
|||||||
- 'server/**'
|
- 'server/**'
|
||||||
- 'openapi/**'
|
- 'openapi/**'
|
||||||
- 'web/**'
|
- 'web/**'
|
||||||
|
- 'i18n/**'
|
||||||
machine-learning:
|
machine-learning:
|
||||||
- 'machine-learning/**'
|
- 'machine-learning/**'
|
||||||
|
|
||||||
@@ -124,7 +125,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@v3.2.0
|
uses: docker/setup-qemu-action@v3.2.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- 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
|
- name: Login to Docker Hub
|
||||||
# Only push to Docker Hub when making a release
|
# Only push to Docker Hub when making a release
|
||||||
@@ -215,7 +216,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@v3.2.0
|
uses: docker/setup-qemu-action@v3.2.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- 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
|
- name: Login to Docker Hub
|
||||||
# Only push to Docker Hub when making a release
|
# Only push to Docker Hub when making a release
|
||||||
|
|||||||
2
.github/workflows/docs-build.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
|||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- name: Check if we should force jobs to run
|
- name: Check if we should force jobs to run
|
||||||
id: should_force
|
id: should_force
|
||||||
run: echo "should_force=${{ github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
|
run: echo "should_force=${{ github.event_name == 'release' || github.ref_name == 'main' }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: Docs Build
|
name: Docs Build
|
||||||
|
|||||||
2
.github/workflows/docs-destroy.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
|||||||
tg_version: "0.58.12"
|
tg_version: "0.58.12"
|
||||||
tofu_version: "1.7.1"
|
tofu_version: "1.7.1"
|
||||||
tg_dir: "deployment/modules/cloudflare/docs"
|
tg_dir: "deployment/modules/cloudflare/docs"
|
||||||
tg_command: "destroy"
|
tg_command: "destroy -refresh=false"
|
||||||
|
|
||||||
- name: Comment
|
- name: Comment
|
||||||
uses: actions-cool/maintain-one-comment@v3
|
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
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
pull-requests: read
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Require PR to have a changelog label
|
- name: Require PR to have a changelog label
|
||||||
uses: mheap/github-action-required-labels@v5
|
uses: mheap/github-action-required-labels@v5
|
||||||
|
|||||||
23
.github/workflows/test.yml
vendored
@@ -30,6 +30,7 @@ jobs:
|
|||||||
filters: |
|
filters: |
|
||||||
web:
|
web:
|
||||||
- 'web/**'
|
- 'web/**'
|
||||||
|
- 'i18n/**'
|
||||||
- 'open-api/typescript-sdk/**'
|
- 'open-api/typescript-sdk/**'
|
||||||
server:
|
server:
|
||||||
- 'server/**'
|
- 'server/**'
|
||||||
@@ -80,7 +81,7 @@ jobs:
|
|||||||
run: npm run check
|
run: npm run check
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run unit tests & coverage
|
- name: Run small tests & coverage
|
||||||
run: npm run test:cov
|
run: npm run test:cov
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
@@ -243,6 +244,26 @@ jobs:
|
|||||||
run: npm run check
|
run: npm run check
|
||||||
if: ${{ !cancelled() }}
|
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:
|
e2e-tests-server-cli:
|
||||||
name: End-to-End Tests (Server & CLI)
|
name: End-to-End Tests (Server & CLI)
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
|
|||||||
2
.gitignore
vendored
@@ -21,3 +21,5 @@ mobile/openapi/.openapi-generator/FILES
|
|||||||
open-api/typescript-sdk/build
|
open-api/typescript-sdk/build
|
||||||
mobile/android/fastlane/report.xml
|
mobile/android/fastlane/report.xml
|
||||||
mobile/ios/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
|
docker compose -f ./e2e/docker-compose.yml build
|
||||||
npm --prefix e2e run test
|
npm --prefix e2e run test
|
||||||
npm --prefix e2e run test:web
|
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) ;
|
build-all: $(foreach M,$(MODULES),build-$M) ;
|
||||||
install-all: $(foreach M,$(MODULES),install-$M) ;
|
install-all: $(foreach M,$(MODULES),install-$M) ;
|
||||||
|
|||||||
36
README.md
@@ -17,24 +17,24 @@
|
|||||||
<img src="design/immich-screenshots.png" title="Main Screenshot">
|
<img src="design/immich-screenshots.png" title="Main Screenshot">
|
||||||
</a>
|
</a>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
<a href="readme_i18n/README_ca_ES.md">Català</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_es_ES.md">Español</a>
|
<a href="readme_i18n/README_fr_FR.md">Français</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_it_IT.md">Italiano</a>
|
<a href="readme_i18n/README_ja_JP.md">日本語</a>
|
||||||
<a href="readme_i18n/README_ja_JP.md">日本語</a>
|
<a href="readme_i18n/README_ko_KR.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_de_DE.md">Deutsch</a>
|
<a href="readme_i18n/README_nl_NL.md">Nederlands</a>
|
||||||
<a href="readme_i18n/README_nl_NL.md">Nederlands</a>
|
<a href="readme_i18n/README_tr_TR.md">Türkçe</a>
|
||||||
<a href="readme_i18n/README_tr_TR.md">Türkçe</a>
|
<a href="readme_i18n/README_zh_CN.md">中文</a>
|
||||||
<a href="readme_i18n/README_zh_CN.md">中文</a>
|
<a href="readme_i18n/README_ru_RU.md">Русский</a>
|
||||||
<a href="readme_i18n/README_ru_RU.md">Русский</a>
|
<a href="readme_i18n/README_pt_BR.md">Português Brasileiro</a>
|
||||||
<a href="readme_i18n/README_pt_BR.md">Português Brasileiro</a>
|
<a href="readme_i18n/README_sv_SE.md">Svenska</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_ar_JO.md">العربية</a>
|
<a href="readme_i18n/README_vi_VN.md">Tiếng Việt</a>
|
||||||
<a href="readme_i18n/README_vi_VN.md">Tiếng Việt</a>
|
<a href="readme_i18n/README_th_TH.md">ภาษาไทย</a>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
@@ -102,6 +102,8 @@ For the mobile app, you can use `https://demo.immich.app/api` for the `Server En
|
|||||||
| Offline support | Yes | No |
|
| Offline support | Yes | No |
|
||||||
| Read-only gallery | Yes | Yes |
|
| Read-only gallery | Yes | Yes |
|
||||||
| Stacked Photos | Yes | Yes |
|
| Stacked Photos | Yes | Yes |
|
||||||
|
| Tags | No | Yes |
|
||||||
|
| Folder View | No | Yes |
|
||||||
|
|
||||||
## Translations
|
## 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.11.0-alpine3.20@sha256:f265794478aa0b1a23d85a492c8311ed795bc527c3fe7e43453b3c872dcd71a3 AS core
|
||||||
|
|
||||||
WORKDIR /usr/src/open-api/typescript-sdk
|
WORKDIR /usr/src/open-api/typescript-sdk
|
||||||
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
|
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
|
||||||
|
|||||||
417
cli/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.23",
|
"version": "2.2.28",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.23",
|
"version": "2.2.28",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"@types/cli-progress": "^3.11.0",
|
"@types/cli-progress": "^3.11.0",
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/mock-fs": "^4.13.1",
|
"@types/mock-fs": "^4.13.1",
|
||||||
"@types/node": "^20.16.9",
|
"@types/node": "^22.8.5",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
||||||
"@typescript-eslint/parser": "^8.0.0",
|
"@typescript-eslint/parser": "^8.0.0",
|
||||||
"@vitest/coverage-v8": "^2.0.5",
|
"@vitest/coverage-v8": "^2.0.5",
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
"vite": "^5.0.12",
|
"vite": "^5.0.12",
|
||||||
"vite-tsconfig-paths": "^5.0.0",
|
"vite-tsconfig-paths": "^5.0.0",
|
||||||
"vitest": "^2.0.5",
|
"vitest": "^2.0.5",
|
||||||
"vitest-fetch-mock": "^0.3.0",
|
"vitest-fetch-mock": "^0.4.0",
|
||||||
"yaml": "^2.3.1"
|
"yaml": "^2.3.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -52,14 +52,14 @@
|
|||||||
},
|
},
|
||||||
"../open-api/typescript-sdk": {
|
"../open-api/typescript-sdk": {
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.117.0",
|
"version": "1.119.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oazapfts/runtime": "^1.0.2"
|
"@oazapfts/runtime": "^1.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.16.9",
|
"@types/node": "^22.8.5",
|
||||||
"typescript": "^5.3.3"
|
"typescript": "^5.3.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -766,9 +766,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/core": {
|
"node_modules/@eslint/core": {
|
||||||
"version": "0.6.0",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
|
||||||
"integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==",
|
"integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -835,9 +835,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/js": {
|
"node_modules/@eslint/js": {
|
||||||
"version": "9.11.1",
|
"version": "9.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
|
||||||
"integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==",
|
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -867,6 +867,30 @@
|
|||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"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": {
|
"node_modules/@humanwhocodes/module-importer": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
||||||
@@ -881,9 +905,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@humanwhocodes/retry": {
|
"node_modules/@humanwhocodes/retry": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
|
||||||
"integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==",
|
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1354,13 +1378,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.16.10",
|
"version": "22.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
|
||||||
"integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==",
|
"integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~6.19.2"
|
"undici-types": "~6.19.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/normalize-package-data": {
|
"node_modules/@types/normalize-package-data": {
|
||||||
@@ -1370,17 +1394,17 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz",
|
||||||
"integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==",
|
"integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.10.0",
|
"@eslint-community/regexpp": "^4.10.0",
|
||||||
"@typescript-eslint/scope-manager": "8.7.0",
|
"@typescript-eslint/scope-manager": "8.11.0",
|
||||||
"@typescript-eslint/type-utils": "8.7.0",
|
"@typescript-eslint/type-utils": "8.11.0",
|
||||||
"@typescript-eslint/utils": "8.7.0",
|
"@typescript-eslint/utils": "8.11.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.7.0",
|
"@typescript-eslint/visitor-keys": "8.11.0",
|
||||||
"graphemer": "^1.4.0",
|
"graphemer": "^1.4.0",
|
||||||
"ignore": "^5.3.1",
|
"ignore": "^5.3.1",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
@@ -1404,16 +1428,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz",
|
||||||
"integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==",
|
"integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.7.0",
|
"@typescript-eslint/scope-manager": "8.11.0",
|
||||||
"@typescript-eslint/types": "8.7.0",
|
"@typescript-eslint/types": "8.11.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.7.0",
|
"@typescript-eslint/typescript-estree": "8.11.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.7.0",
|
"@typescript-eslint/visitor-keys": "8.11.0",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1433,14 +1457,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz",
|
||||||
"integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==",
|
"integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.7.0",
|
"@typescript-eslint/types": "8.11.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.7.0"
|
"@typescript-eslint/visitor-keys": "8.11.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -1451,14 +1475,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz",
|
||||||
"integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==",
|
"integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/typescript-estree": "8.7.0",
|
"@typescript-eslint/typescript-estree": "8.11.0",
|
||||||
"@typescript-eslint/utils": "8.7.0",
|
"@typescript-eslint/utils": "8.11.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"ts-api-utils": "^1.3.0"
|
"ts-api-utils": "^1.3.0"
|
||||||
},
|
},
|
||||||
@@ -1476,9 +1500,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz",
|
||||||
"integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==",
|
"integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1490,14 +1514,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz",
|
||||||
"integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==",
|
"integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.7.0",
|
"@typescript-eslint/types": "8.11.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.7.0",
|
"@typescript-eslint/visitor-keys": "8.11.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
@@ -1519,16 +1543,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz",
|
||||||
"integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==",
|
"integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.4.0",
|
"@eslint-community/eslint-utils": "^4.4.0",
|
||||||
"@typescript-eslint/scope-manager": "8.7.0",
|
"@typescript-eslint/scope-manager": "8.11.0",
|
||||||
"@typescript-eslint/types": "8.7.0",
|
"@typescript-eslint/types": "8.11.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.7.0"
|
"@typescript-eslint/typescript-estree": "8.11.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -1542,13 +1566,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "8.7.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz",
|
||||||
"integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==",
|
"integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.7.0",
|
"@typescript-eslint/types": "8.11.0",
|
||||||
"eslint-visitor-keys": "^3.4.3"
|
"eslint-visitor-keys": "^3.4.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1560,9 +1584,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/coverage-v8": {
|
"node_modules/@vitest/coverage-v8": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz",
|
||||||
"integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==",
|
"integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1583,8 +1607,8 @@
|
|||||||
"url": "https://opencollective.com/vitest"
|
"url": "https://opencollective.com/vitest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@vitest/browser": "2.1.1",
|
"@vitest/browser": "2.1.3",
|
||||||
"vitest": "2.1.1"
|
"vitest": "2.1.3"
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
"@vitest/browser": {
|
"@vitest/browser": {
|
||||||
@@ -1593,14 +1617,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/expect": {
|
"node_modules/@vitest/expect": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz",
|
||||||
"integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==",
|
"integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/spy": "2.1.1",
|
"@vitest/spy": "2.1.3",
|
||||||
"@vitest/utils": "2.1.1",
|
"@vitest/utils": "2.1.3",
|
||||||
"chai": "^5.1.1",
|
"chai": "^5.1.1",
|
||||||
"tinyrainbow": "^1.2.0"
|
"tinyrainbow": "^1.2.0"
|
||||||
},
|
},
|
||||||
@@ -1609,13 +1633,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/mocker": {
|
"node_modules/@vitest/mocker": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz",
|
||||||
"integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==",
|
"integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/spy": "^2.1.0-beta.1",
|
"@vitest/spy": "2.1.3",
|
||||||
"estree-walker": "^3.0.3",
|
"estree-walker": "^3.0.3",
|
||||||
"magic-string": "^0.30.11"
|
"magic-string": "^0.30.11"
|
||||||
},
|
},
|
||||||
@@ -1623,7 +1647,7 @@
|
|||||||
"url": "https://opencollective.com/vitest"
|
"url": "https://opencollective.com/vitest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@vitest/spy": "2.1.1",
|
"@vitest/spy": "2.1.3",
|
||||||
"msw": "^2.3.5",
|
"msw": "^2.3.5",
|
||||||
"vite": "^5.0.0"
|
"vite": "^5.0.0"
|
||||||
},
|
},
|
||||||
@@ -1637,9 +1661,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/pretty-format": {
|
"node_modules/@vitest/pretty-format": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz",
|
||||||
"integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==",
|
"integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1650,13 +1674,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/runner": {
|
"node_modules/@vitest/runner": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz",
|
||||||
"integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==",
|
"integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/utils": "2.1.1",
|
"@vitest/utils": "2.1.3",
|
||||||
"pathe": "^1.1.2"
|
"pathe": "^1.1.2"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
@@ -1664,13 +1688,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/snapshot": {
|
"node_modules/@vitest/snapshot": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz",
|
||||||
"integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==",
|
"integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/pretty-format": "2.1.1",
|
"@vitest/pretty-format": "2.1.3",
|
||||||
"magic-string": "^0.30.11",
|
"magic-string": "^0.30.11",
|
||||||
"pathe": "^1.1.2"
|
"pathe": "^1.1.2"
|
||||||
},
|
},
|
||||||
@@ -1679,9 +1703,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/spy": {
|
"node_modules/@vitest/spy": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz",
|
||||||
"integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==",
|
"integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1692,13 +1716,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitest/utils": {
|
"node_modules/@vitest/utils": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz",
|
||||||
"integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==",
|
"integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/pretty-format": "2.1.1",
|
"@vitest/pretty-format": "2.1.3",
|
||||||
"loupe": "^3.1.1",
|
"loupe": "^3.1.1",
|
||||||
"tinyrainbow": "^1.2.0"
|
"tinyrainbow": "^1.2.0"
|
||||||
},
|
},
|
||||||
@@ -2043,15 +2067,6 @@
|
|||||||
"url": "https://opencollective.com/core-js"
|
"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": {
|
"node_modules/cross-spawn": {
|
||||||
"version": "7.0.3",
|
"version": "7.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||||
@@ -2187,22 +2202,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint": {
|
"node_modules/eslint": {
|
||||||
"version": "9.11.1",
|
"version": "9.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
|
||||||
"integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==",
|
"integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@eslint-community/regexpp": "^4.11.0",
|
"@eslint-community/regexpp": "^4.11.0",
|
||||||
"@eslint/config-array": "^0.18.0",
|
"@eslint/config-array": "^0.18.0",
|
||||||
"@eslint/core": "^0.6.0",
|
"@eslint/core": "^0.7.0",
|
||||||
"@eslint/eslintrc": "^3.1.0",
|
"@eslint/eslintrc": "^3.1.0",
|
||||||
"@eslint/js": "9.11.1",
|
"@eslint/js": "9.13.0",
|
||||||
"@eslint/plugin-kit": "^0.2.0",
|
"@eslint/plugin-kit": "^0.2.0",
|
||||||
|
"@humanfs/node": "^0.16.5",
|
||||||
"@humanwhocodes/module-importer": "^1.0.1",
|
"@humanwhocodes/module-importer": "^1.0.1",
|
||||||
"@humanwhocodes/retry": "^0.3.0",
|
"@humanwhocodes/retry": "^0.3.1",
|
||||||
"@nodelib/fs.walk": "^1.2.8",
|
|
||||||
"@types/estree": "^1.0.6",
|
"@types/estree": "^1.0.6",
|
||||||
"@types/json-schema": "^7.0.15",
|
"@types/json-schema": "^7.0.15",
|
||||||
"ajv": "^6.12.4",
|
"ajv": "^6.12.4",
|
||||||
@@ -2210,9 +2225,9 @@
|
|||||||
"cross-spawn": "^7.0.2",
|
"cross-spawn": "^7.0.2",
|
||||||
"debug": "^4.3.2",
|
"debug": "^4.3.2",
|
||||||
"escape-string-regexp": "^4.0.0",
|
"escape-string-regexp": "^4.0.0",
|
||||||
"eslint-scope": "^8.0.2",
|
"eslint-scope": "^8.1.0",
|
||||||
"eslint-visitor-keys": "^4.0.0",
|
"eslint-visitor-keys": "^4.1.0",
|
||||||
"espree": "^10.1.0",
|
"espree": "^10.2.0",
|
||||||
"esquery": "^1.5.0",
|
"esquery": "^1.5.0",
|
||||||
"esutils": "^2.0.2",
|
"esutils": "^2.0.2",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
@@ -2222,13 +2237,11 @@
|
|||||||
"ignore": "^5.2.0",
|
"ignore": "^5.2.0",
|
||||||
"imurmurhash": "^0.1.4",
|
"imurmurhash": "^0.1.4",
|
||||||
"is-glob": "^4.0.0",
|
"is-glob": "^4.0.0",
|
||||||
"is-path-inside": "^3.0.3",
|
|
||||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||||
"lodash.merge": "^4.6.2",
|
"lodash.merge": "^4.6.2",
|
||||||
"minimatch": "^3.1.2",
|
"minimatch": "^3.1.2",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
"optionator": "^0.9.3",
|
"optionator": "^0.9.3",
|
||||||
"strip-ansi": "^6.0.1",
|
|
||||||
"text-table": "^0.2.0"
|
"text-table": "^0.2.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -2327,9 +2340,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-scope": {
|
"node_modules/eslint-scope": {
|
||||||
"version": "8.0.2",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
|
||||||
"integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
|
"integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2374,9 +2387,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint/node_modules/eslint-visitor-keys": {
|
"node_modules/eslint/node_modules/eslint-visitor-keys": {
|
||||||
"version": "4.1.0",
|
"version": "4.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
|
||||||
"integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
|
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -2400,15 +2413,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/espree": {
|
"node_modules/espree": {
|
||||||
"version": "10.1.0",
|
"version": "10.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
|
||||||
"integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
|
"integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"acorn": "^8.12.0",
|
"acorn": "^8.12.0",
|
||||||
"acorn-jsx": "^5.3.2",
|
"acorn-jsx": "^5.3.2",
|
||||||
"eslint-visitor-keys": "^4.0.0"
|
"eslint-visitor-keys": "^4.1.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -2418,9 +2431,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/espree/node_modules/eslint-visitor-keys": {
|
"node_modules/espree/node_modules/eslint-visitor-keys": {
|
||||||
"version": "4.0.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
|
||||||
"integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
|
"integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -2447,6 +2460,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"estraverse": "^5.2.0"
|
"estraverse": "^5.2.0"
|
||||||
},
|
},
|
||||||
@@ -2498,6 +2512,7 @@
|
|||||||
"version": "3.3.2",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
||||||
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nodelib/fs.stat": "^2.0.2",
|
"@nodelib/fs.stat": "^2.0.2",
|
||||||
"@nodelib/fs.walk": "^1.2.3",
|
"@nodelib/fs.walk": "^1.2.3",
|
||||||
@@ -2640,16 +2655,6 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"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": {
|
"node_modules/glob": {
|
||||||
"version": "10.4.5",
|
"version": "10.4.5",
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||||
@@ -2683,9 +2688,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/globals": {
|
"node_modules/globals": {
|
||||||
"version": "15.9.0",
|
"version": "15.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz",
|
||||||
"integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
|
"integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -2852,15 +2857,6 @@
|
|||||||
"node": ">=0.12.0"
|
"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": {
|
"node_modules/isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
@@ -3043,14 +3039,11 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/loupe": {
|
"node_modules/loupe": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz",
|
||||||
"integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==",
|
"integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT"
|
||||||
"dependencies": {
|
|
||||||
"get-func-name": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/lru-cache": {
|
"node_modules/lru-cache": {
|
||||||
"version": "10.4.3",
|
"version": "10.4.3",
|
||||||
@@ -3148,9 +3141,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mock-fs": {
|
"node_modules/mock-fs": {
|
||||||
"version": "5.3.0",
|
"version": "5.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.0.tgz",
|
||||||
"integrity": "sha512-IMvz1X+RF7vf+ur7qUenXMR7/FSKSIqS3HqFHXcyNI7G0FbpFO8L5lfsUJhl+bhK1AiulVHWKUSxebWauPA+xQ==",
|
"integrity": "sha512-3ROPnEMgBOkusBMYQUW2rnT3wZwsgfOKzJDLvx/TZ7FL1WmWvwSwn3j4aDR5fLDGtgcc1WF0Z1y0di7c9L4FKw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -3187,26 +3180,6 @@
|
|||||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||||
"dev": true
|
"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": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.14",
|
"version": "2.0.14",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||||
@@ -4052,12 +4025,6 @@
|
|||||||
"node": ">=8.0"
|
"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": {
|
"node_modules/ts-api-utils": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
|
||||||
@@ -4109,9 +4076,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "5.6.2",
|
"version": "5.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||||
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
|
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -4179,9 +4146,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "5.4.8",
|
"version": "5.4.10",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
|
||||||
"integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==",
|
"integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -4239,9 +4206,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite-node": {
|
"node_modules/vite-node": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz",
|
||||||
"integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==",
|
"integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -4281,19 +4248,19 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vitest": {
|
"node_modules/vitest": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz",
|
||||||
"integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==",
|
"integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vitest/expect": "2.1.1",
|
"@vitest/expect": "2.1.3",
|
||||||
"@vitest/mocker": "2.1.1",
|
"@vitest/mocker": "2.1.3",
|
||||||
"@vitest/pretty-format": "^2.1.1",
|
"@vitest/pretty-format": "^2.1.3",
|
||||||
"@vitest/runner": "2.1.1",
|
"@vitest/runner": "2.1.3",
|
||||||
"@vitest/snapshot": "2.1.1",
|
"@vitest/snapshot": "2.1.3",
|
||||||
"@vitest/spy": "2.1.1",
|
"@vitest/spy": "2.1.3",
|
||||||
"@vitest/utils": "2.1.1",
|
"@vitest/utils": "2.1.3",
|
||||||
"chai": "^5.1.1",
|
"chai": "^5.1.1",
|
||||||
"debug": "^4.3.6",
|
"debug": "^4.3.6",
|
||||||
"magic-string": "^0.30.11",
|
"magic-string": "^0.30.11",
|
||||||
@@ -4304,7 +4271,7 @@
|
|||||||
"tinypool": "^1.0.0",
|
"tinypool": "^1.0.0",
|
||||||
"tinyrainbow": "^1.2.0",
|
"tinyrainbow": "^1.2.0",
|
||||||
"vite": "^5.0.0",
|
"vite": "^5.0.0",
|
||||||
"vite-node": "2.1.1",
|
"vite-node": "2.1.3",
|
||||||
"why-is-node-running": "^2.3.0"
|
"why-is-node-running": "^2.3.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -4319,8 +4286,8 @@
|
|||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@edge-runtime/vm": "*",
|
"@edge-runtime/vm": "*",
|
||||||
"@types/node": "^18.0.0 || >=20.0.0",
|
"@types/node": "^18.0.0 || >=20.0.0",
|
||||||
"@vitest/browser": "2.1.1",
|
"@vitest/browser": "2.1.3",
|
||||||
"@vitest/ui": "2.1.1",
|
"@vitest/ui": "2.1.3",
|
||||||
"happy-dom": "*",
|
"happy-dom": "*",
|
||||||
"jsdom": "*"
|
"jsdom": "*"
|
||||||
},
|
},
|
||||||
@@ -4346,36 +4313,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vitest-fetch-mock": {
|
"node_modules/vitest-fetch-mock": {
|
||||||
"version": "0.3.0",
|
"version": "0.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.4.1.tgz",
|
||||||
"integrity": "sha512-g6upWcL8/32fXL43/5f4VHcocuwQIi9Fj5othcK9gPO8XqSEGtnIZdenr2IaipDr61ReRFt+vaOEgo8jiUUX5w==",
|
"integrity": "sha512-Y6VEV2AgJps1t9NUdhID/vUwarAuhOkPHShfoEruIlQr5+O31hgJ4YmZpU8kVWD3KQjEyZqPeMibWehd7rMq+A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"license": "MIT",
|
||||||
"cross-fetch": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.14.0"
|
"node": ">=18.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vitest": ">=2.0.0"
|
"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": {
|
"node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
@@ -4505,9 +4454,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/yaml": {
|
"node_modules/yaml": {
|
||||||
"version": "2.5.1",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
|
||||||
"integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
|
"integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.23",
|
"version": "2.2.28",
|
||||||
"description": "Command Line Interface (CLI) for Immich",
|
"description": "Command Line Interface (CLI) for Immich",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": "./dist/index.js",
|
"exports": "./dist/index.js",
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
"@types/cli-progress": "^3.11.0",
|
"@types/cli-progress": "^3.11.0",
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/mock-fs": "^4.13.1",
|
"@types/mock-fs": "^4.13.1",
|
||||||
"@types/node": "^20.16.9",
|
"@types/node": "^22.8.5",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
||||||
"@typescript-eslint/parser": "^8.0.0",
|
"@typescript-eslint/parser": "^8.0.0",
|
||||||
"@vitest/coverage-v8": "^2.0.5",
|
"@vitest/coverage-v8": "^2.0.5",
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
"vite": "^5.0.12",
|
"vite": "^5.0.12",
|
||||||
"vite-tsconfig-paths": "^5.0.0",
|
"vite-tsconfig-paths": "^5.0.0",
|
||||||
"vitest": "^2.0.5",
|
"vitest": "^2.0.5",
|
||||||
"vitest-fetch-mock": "^0.3.0",
|
"vitest-fetch-mock": "^0.4.0",
|
||||||
"yaml": "^2.3.1"
|
"yaml": "^2.3.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -67,6 +67,6 @@
|
|||||||
"lodash-es": "^4.17.21"
|
"lodash-es": "^4.17.21"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "20.17.0"
|
"node": "22.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,17 +115,7 @@ const tests: Test[] = [
|
|||||||
'/albums/image3.jpg': true,
|
'/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',
|
test: 'should crawl a single path without trailing slash',
|
||||||
options: {
|
options: {
|
||||||
|
|||||||
@@ -141,25 +141,21 @@ export const crawl = async (options: CrawlOptions): Promise<string[]> => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let searchPattern: string;
|
if (patterns.length === 0) {
|
||||||
if (patterns.length === 1) {
|
|
||||||
searchPattern = patterns[0];
|
|
||||||
} else if (patterns.length === 0) {
|
|
||||||
return crawledFiles;
|
return crawledFiles;
|
||||||
} else {
|
|
||||||
searchPattern = '{' + patterns.join(',') + '}';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (recursive) {
|
const searchPatterns = patterns.map((pattern) => {
|
||||||
searchPattern = searchPattern + '/**/';
|
let escapedPattern = pattern;
|
||||||
}
|
if (recursive) {
|
||||||
|
escapedPattern = escapedPattern + '/**';
|
||||||
|
}
|
||||||
|
return `${escapedPattern}/*.{${extensions.join(',')}}`;
|
||||||
|
});
|
||||||
|
|
||||||
searchPattern = `${searchPattern}/*.{${extensions.join(',')}}`;
|
const globbedFiles = await glob(searchPatterns, {
|
||||||
|
|
||||||
const globbedFiles = await glob(searchPattern, {
|
|
||||||
absolute: true,
|
absolute: true,
|
||||||
caseSensitiveMatch: false,
|
caseSensitiveMatch: false,
|
||||||
onlyFiles: true,
|
|
||||||
dot: includeHidden,
|
dot: includeHidden,
|
||||||
ignore: [`**/${exclusionPattern}`],
|
ignore: [`**/${exclusionPattern}`],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
||||||
version = "4.43.0"
|
version = "4.45.0"
|
||||||
constraints = "4.43.0"
|
constraints = "4.45.0"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:2kDVLD36BOVgBzI9p0WIQ+xjFfMmjaItA0l8SyZWEPo=",
|
"h1:/CGpnYMkLRDmqn4iAsh/jg7ELZ6QExUw03VdjKZyK5M=",
|
||||||
"h1:2sGJDAwFEgO8+3y+2suYO+yrjNOzSsihad0hbM3+jPg=",
|
"h1:82C/ryqwQvxhBINYOOyF5ZzPW/k4zJ/RYT13eCdPgEc=",
|
||||||
"h1:A1WPQFcdD+7FrFBFrKcx4CiSr75xSmsO93C0e5NBAeQ=",
|
"h1:8Wu1D7ZwbLGdHakLRAzoAJ5VqZ8I14qzkPv1OGNfIlg=",
|
||||||
"h1:BuXs/1ohmF4fWyOErY6vNbm7DaEIfbLSepSiZ2ol9I8=",
|
"h1:CVq0CAibeueOuiNk0UQtwZvMLMof33n1BgskFPOymrk=",
|
||||||
"h1:QPh+X19oyo808sqdeJaVqahZcQgcG1jCi3DA5zpjz6U=",
|
"h1:FSS5Kq+L+CX1zARy8PhaF8edBFNgsLtds4Uo8MwJiK8=",
|
||||||
"h1:RI7c7dhSJoIkfou5b8ITRpM5MqsQD3FULj1h/rI4rJk=",
|
"h1:L4qsorLII7f8xSFmv6JOoWfLWDunWQEpK964Bxk7mtM=",
|
||||||
"h1:gdI5JTCPjewdGq1bhGAs+V5qCcmJ73N2gtMfuFybJp4=",
|
"h1:StO3PV5PDskSCnhoHhWHOPxu6hbzJUQggfLgOSkvhwg=",
|
||||||
"h1:h4lnJpCIYZ7dsN9IO2mmwNdWNiQYEPoAEUjLF2sZ5kc=",
|
"h1:Tjo+Er9ets5YrTRIdP9LBmi4p89nL/W+A7r8a1MM9nI=",
|
||||||
"h1:jTaExrX/eR7vGT5wayGqH8ZtXS2zyk0WmD3zbAKFIQU=",
|
"h1:XIwT+AWvks1LTytePM9zls+O8ItxoqCfPOgHwuH9ivQ=",
|
||||||
"h1:l5NKJUOQJ1mHl1eekeXaxUZ+g+8Yv4aGcIN9vuK6GL4=",
|
"h1:aOXn/zuM1+5GGy/SSRx8q4EYCSTFE9Tr0twHPIf5/KE=",
|
||||||
"h1:sNbvm66/2vc8B/khyioOO8eNaU8nb89x693AN7fQheU=",
|
"h1:lb+YcuZ4guYd8zE51vgSnDsRAD9IV00Z15l1i1X52s8=",
|
||||||
"h1:tXS4g1yE420AU4mvZ7RrYI+yYTutkRID3l+W0gBH4BM=",
|
"h1:pYwNXGjfXA2rUEmotGMLWgmavT9D2rdHnV3TpuIK3ko=",
|
||||||
"h1:vA+kES7uqmKA9K0U45IXR94jaTQZCHZLCHqMUeGxKMI=",
|
"h1:q1qrnPq6KkljwBrugCwzb7f0SVP4Lzkfh+EOLARY9V8=",
|
||||||
"h1:zV131k79+ob9p4jrLDgztDNvZvt8fvrrzpn0nPikBw8=",
|
"h1:v9sL4cZLTV5Gu2004DDyy7209gT0JmudBCAD0WCr/JE=",
|
||||||
"zh:006d111d6eafe6eeb5df2f91bd0ca320f979bd71f8cd8c475f10b2bd94acba55",
|
"zh:00be2a6adc76615a368491c7a026098103b6286deb31e3cfb037365dd39f095f",
|
||||||
"zh:031fbb5cac23a841dc18e270cbfcd3ce9f4ba504edbd3c78931f7ed9827220a8",
|
"zh:05bd072e6119f7a5abff05c6064001f745473119a956586cf77ae843cf55d666",
|
||||||
"zh:07a72fe8b55afee99529bf4169ab6abfac5eabcd10968c29101925bcd358b09f",
|
"zh:228bbe61345c4e8e0bc6b698b4b9652abff65662ee72ede2aecb4c3efb91b243",
|
||||||
"zh:0d14727d011c2d9df4c3058f527d2409223449ab48b46cbc86922eb553ef77c1",
|
"zh:2948aeefe71ba041c94082cf931ecc95510d93af0a61d0a287880f5b9d24b11a",
|
||||||
"zh:155ce1333672d26cd18a5866b0761489d91682beffee58e45c3a1b68e8491d3d",
|
"zh:5dfc2c5e95843ca54957212ee3ecb7ff06f2cf60bfd6ca278b5249fd70ac18f5",
|
||||||
"zh:35a2a1939a965335b29ebdbfd759d93a97c0f589d9cd218f537dee6f600e3fb9",
|
"zh:69922cb45559b0b0544b9c2d31ed2d0fac9121faa75bc2f523484785b45d8e2b",
|
||||||
"zh:52912fe421e7d911431f77788db2ea13836efd65a2e82385adb52c6a84d4ee90",
|
|
||||||
"zh:57374318d9194ea1db08884b0541a9055823d5970ad48f9a57547ac231163007",
|
|
||||||
"zh:5fb942b9e2553c058fe09fe12fb39dd175cd6715bb41c059c1a70df2bfc64dc1",
|
|
||||||
"zh:63cabd2bda201b09b35a3279d1f813ab71394b9b90fc5cf8962a5eba207803bc",
|
|
||||||
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
||||||
"zh:978ee67d3d53970a5c474ab40b00adee97f4153b16804a2b6b7ee205ae69d18a",
|
"zh:9d83a0cbf72327286f7dbd63cd4af89059c648163fe6ed21b1df768e0518d445",
|
||||||
"zh:bbafdbef631b5c80570087817b42b16b1a76d556d692853a71c47fb48663cf00",
|
"zh:a8e1982945822c7d7aaa6ba8602c7247d1a3fad15d612f30eb323491a637bf8d",
|
||||||
"zh:be91b3f2a697cbbb41f65aad2600972d0ede1e962a7d8a00bb3177cb77d86666",
|
"zh:c6d41ebd69ddb23e3dad49a0ebf1da5a9c7d8706a4f55d953115d371f407928b",
|
||||||
"zh:efe168ad4aaa6156ce5a31d4e50e9d54d38ee5a5888412f9e690c0de5d619683",
|
"zh:d03e5442b12846c2737f099d30cd23d9f85a0c6d65437ccb44819f9a6c4e1d7f",
|
||||||
|
"zh:d446f2e1186b35037aea03b0e27d8b032d2f069f194f84b3f0e2907b3a79a955",
|
||||||
|
"zh:e4d7549a4c856524e01f3dd4d69f57119ea205f7a0fa38dcfe154475b4ae9258",
|
||||||
|
"zh:e64b8915cb9686f85e77115bd674f2faf4f29880688067d7d0f1376566fdb3b0",
|
||||||
|
"zh:f046efdc55e6385cdd69baaa06a929bef9fe6809d373b0d2d6c7df8f8c23eddc",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ terraform {
|
|||||||
required_providers {
|
required_providers {
|
||||||
cloudflare = {
|
cloudflare = {
|
||||||
source = "cloudflare/cloudflare"
|
source = "cloudflare/cloudflare"
|
||||||
version = "4.43.0"
|
version = "4.45.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
||||||
version = "4.43.0"
|
version = "4.45.0"
|
||||||
constraints = "4.43.0"
|
constraints = "4.45.0"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:2kDVLD36BOVgBzI9p0WIQ+xjFfMmjaItA0l8SyZWEPo=",
|
"h1:/CGpnYMkLRDmqn4iAsh/jg7ELZ6QExUw03VdjKZyK5M=",
|
||||||
"h1:2sGJDAwFEgO8+3y+2suYO+yrjNOzSsihad0hbM3+jPg=",
|
"h1:82C/ryqwQvxhBINYOOyF5ZzPW/k4zJ/RYT13eCdPgEc=",
|
||||||
"h1:A1WPQFcdD+7FrFBFrKcx4CiSr75xSmsO93C0e5NBAeQ=",
|
"h1:8Wu1D7ZwbLGdHakLRAzoAJ5VqZ8I14qzkPv1OGNfIlg=",
|
||||||
"h1:BuXs/1ohmF4fWyOErY6vNbm7DaEIfbLSepSiZ2ol9I8=",
|
"h1:CVq0CAibeueOuiNk0UQtwZvMLMof33n1BgskFPOymrk=",
|
||||||
"h1:QPh+X19oyo808sqdeJaVqahZcQgcG1jCi3DA5zpjz6U=",
|
"h1:FSS5Kq+L+CX1zARy8PhaF8edBFNgsLtds4Uo8MwJiK8=",
|
||||||
"h1:RI7c7dhSJoIkfou5b8ITRpM5MqsQD3FULj1h/rI4rJk=",
|
"h1:L4qsorLII7f8xSFmv6JOoWfLWDunWQEpK964Bxk7mtM=",
|
||||||
"h1:gdI5JTCPjewdGq1bhGAs+V5qCcmJ73N2gtMfuFybJp4=",
|
"h1:StO3PV5PDskSCnhoHhWHOPxu6hbzJUQggfLgOSkvhwg=",
|
||||||
"h1:h4lnJpCIYZ7dsN9IO2mmwNdWNiQYEPoAEUjLF2sZ5kc=",
|
"h1:Tjo+Er9ets5YrTRIdP9LBmi4p89nL/W+A7r8a1MM9nI=",
|
||||||
"h1:jTaExrX/eR7vGT5wayGqH8ZtXS2zyk0WmD3zbAKFIQU=",
|
"h1:XIwT+AWvks1LTytePM9zls+O8ItxoqCfPOgHwuH9ivQ=",
|
||||||
"h1:l5NKJUOQJ1mHl1eekeXaxUZ+g+8Yv4aGcIN9vuK6GL4=",
|
"h1:aOXn/zuM1+5GGy/SSRx8q4EYCSTFE9Tr0twHPIf5/KE=",
|
||||||
"h1:sNbvm66/2vc8B/khyioOO8eNaU8nb89x693AN7fQheU=",
|
"h1:lb+YcuZ4guYd8zE51vgSnDsRAD9IV00Z15l1i1X52s8=",
|
||||||
"h1:tXS4g1yE420AU4mvZ7RrYI+yYTutkRID3l+W0gBH4BM=",
|
"h1:pYwNXGjfXA2rUEmotGMLWgmavT9D2rdHnV3TpuIK3ko=",
|
||||||
"h1:vA+kES7uqmKA9K0U45IXR94jaTQZCHZLCHqMUeGxKMI=",
|
"h1:q1qrnPq6KkljwBrugCwzb7f0SVP4Lzkfh+EOLARY9V8=",
|
||||||
"h1:zV131k79+ob9p4jrLDgztDNvZvt8fvrrzpn0nPikBw8=",
|
"h1:v9sL4cZLTV5Gu2004DDyy7209gT0JmudBCAD0WCr/JE=",
|
||||||
"zh:006d111d6eafe6eeb5df2f91bd0ca320f979bd71f8cd8c475f10b2bd94acba55",
|
"zh:00be2a6adc76615a368491c7a026098103b6286deb31e3cfb037365dd39f095f",
|
||||||
"zh:031fbb5cac23a841dc18e270cbfcd3ce9f4ba504edbd3c78931f7ed9827220a8",
|
"zh:05bd072e6119f7a5abff05c6064001f745473119a956586cf77ae843cf55d666",
|
||||||
"zh:07a72fe8b55afee99529bf4169ab6abfac5eabcd10968c29101925bcd358b09f",
|
"zh:228bbe61345c4e8e0bc6b698b4b9652abff65662ee72ede2aecb4c3efb91b243",
|
||||||
"zh:0d14727d011c2d9df4c3058f527d2409223449ab48b46cbc86922eb553ef77c1",
|
"zh:2948aeefe71ba041c94082cf931ecc95510d93af0a61d0a287880f5b9d24b11a",
|
||||||
"zh:155ce1333672d26cd18a5866b0761489d91682beffee58e45c3a1b68e8491d3d",
|
"zh:5dfc2c5e95843ca54957212ee3ecb7ff06f2cf60bfd6ca278b5249fd70ac18f5",
|
||||||
"zh:35a2a1939a965335b29ebdbfd759d93a97c0f589d9cd218f537dee6f600e3fb9",
|
"zh:69922cb45559b0b0544b9c2d31ed2d0fac9121faa75bc2f523484785b45d8e2b",
|
||||||
"zh:52912fe421e7d911431f77788db2ea13836efd65a2e82385adb52c6a84d4ee90",
|
|
||||||
"zh:57374318d9194ea1db08884b0541a9055823d5970ad48f9a57547ac231163007",
|
|
||||||
"zh:5fb942b9e2553c058fe09fe12fb39dd175cd6715bb41c059c1a70df2bfc64dc1",
|
|
||||||
"zh:63cabd2bda201b09b35a3279d1f813ab71394b9b90fc5cf8962a5eba207803bc",
|
|
||||||
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
||||||
"zh:978ee67d3d53970a5c474ab40b00adee97f4153b16804a2b6b7ee205ae69d18a",
|
"zh:9d83a0cbf72327286f7dbd63cd4af89059c648163fe6ed21b1df768e0518d445",
|
||||||
"zh:bbafdbef631b5c80570087817b42b16b1a76d556d692853a71c47fb48663cf00",
|
"zh:a8e1982945822c7d7aaa6ba8602c7247d1a3fad15d612f30eb323491a637bf8d",
|
||||||
"zh:be91b3f2a697cbbb41f65aad2600972d0ede1e962a7d8a00bb3177cb77d86666",
|
"zh:c6d41ebd69ddb23e3dad49a0ebf1da5a9c7d8706a4f55d953115d371f407928b",
|
||||||
"zh:efe168ad4aaa6156ce5a31d4e50e9d54d38ee5a5888412f9e690c0de5d619683",
|
"zh:d03e5442b12846c2737f099d30cd23d9f85a0c6d65437ccb44819f9a6c4e1d7f",
|
||||||
|
"zh:d446f2e1186b35037aea03b0e27d8b032d2f069f194f84b3f0e2907b3a79a955",
|
||||||
|
"zh:e4d7549a4c856524e01f3dd4d69f57119ea205f7a0fa38dcfe154475b4ae9258",
|
||||||
|
"zh:e64b8915cb9686f85e77115bd674f2faf4f29880688067d7d0f1376566fdb3b0",
|
||||||
|
"zh:f046efdc55e6385cdd69baaa06a929bef9fe6809d373b0d2d6c7df8f8c23eddc",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ terraform {
|
|||||||
required_providers {
|
required_providers {
|
||||||
cloudflare = {
|
cloudflare = {
|
||||||
source = "cloudflare/cloudflare"
|
source = "cloudflare/cloudflare"
|
||||||
version = "4.43.0"
|
version = "4.45.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ services:
|
|||||||
soft: 1048576
|
soft: 1048576
|
||||||
hard: 1048576
|
hard: 1048576
|
||||||
ports:
|
ports:
|
||||||
- 3001:3001
|
|
||||||
- 9230:9230
|
- 9230:9230
|
||||||
- 9231:9231
|
- 9231:9231
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -67,6 +66,7 @@ services:
|
|||||||
- 24678:24678
|
- 24678:24678
|
||||||
volumes:
|
volumes:
|
||||||
- ../web:/usr/src/app
|
- ../web:/usr/src/app
|
||||||
|
- ../i18n:/usr/src/i18n
|
||||||
- ../open-api/:/usr/src/open-api/
|
- ../open-api/:/usr/src/open-api/
|
||||||
- /usr/src/app/node_modules
|
- /usr/src/app/node_modules
|
||||||
ulimits:
|
ulimits:
|
||||||
@@ -103,7 +103,7 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ services:
|
|||||||
'wal_compression=on',
|
'wal_compression=on',
|
||||||
]
|
]
|
||||||
|
|
||||||
# set IMMICH_METRICS=true in .env to enable metrics
|
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
|
||||||
# immich-prometheus:
|
# immich-prometheus:
|
||||||
# container_name: immich_prometheus
|
# container_name: immich_prometheus
|
||||||
# ports:
|
# ports:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
ports:
|
ports:
|
||||||
- 2283:3001
|
- 2283:2283
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- database
|
- database
|
||||||
@@ -47,7 +47,7 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
restart: always
|
restart: always
|
||||||
@@ -71,15 +71,30 @@ services:
|
|||||||
interval: 5m
|
interval: 5m
|
||||||
start_interval: 30s
|
start_interval: 30s
|
||||||
start_period: 5m
|
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
|
restart: always
|
||||||
|
|
||||||
# set IMMICH_METRICS=true in .env to enable metrics
|
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
|
||||||
immich-prometheus:
|
immich-prometheus:
|
||||||
container_name: immich_prometheus
|
container_name: immich_prometheus
|
||||||
ports:
|
ports:
|
||||||
- 9090:9090
|
- 9090:9090
|
||||||
image: prom/prometheus@sha256:f6639335d34a77d9d9db382b92eeb7fc00934be8eae81dbc03b31cfe90411a94
|
image: prom/prometheus@sha256:378f4e03703557d1c6419e6caccf922f96e6d88a530f7431d66a4c4f4b1000fe
|
||||||
volumes:
|
volumes:
|
||||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||||||
- prometheus-data:/prometheus
|
- prometheus-data:/prometheus
|
||||||
@@ -91,7 +106,7 @@ services:
|
|||||||
command: ['./run.sh', '-disable-reporting']
|
command: ['./run.sh', '-disable-reporting']
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
image: grafana/grafana:11.2.1-ubuntu@sha256:b90c0fdc482913de7a55fe96539bf9e3c4fbcee835d0c2dffc59152bc3964ff7
|
image: grafana/grafana:11.3.0-ubuntu@sha256:51587e148ac0214d7938e7f3fe8512182e4eb6141892a3ffb88bba1901b49285
|
||||||
volumes:
|
volumes:
|
||||||
- grafana-data:/var/lib/grafana
|
- grafana-data:/var/lib/grafana
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
ports:
|
ports:
|
||||||
- 2283:3001
|
- '2283:2283'
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- database
|
- database
|
||||||
@@ -48,7 +48,7 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
restart: always
|
restart: always
|
||||||
@@ -69,7 +69,22 @@ services:
|
|||||||
interval: 5m
|
interval: 5m
|
||||||
start_interval: 30s
|
start_interval: 30s
|
||||||
start_period: 5m
|
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
|
restart: always
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
20.17.0
|
22.11.0
|
||||||
|
|||||||
@@ -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.
|
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
|
### Manual Backup and Restore
|
||||||
|
|
||||||
<Tabs>
|
<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
|
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
|
## 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
|
# 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 pull # Update to latest version of Immich (if desired)
|
||||||
docker compose create # Create Docker containers for Immich apps without running them
|
docker compose create # Create Docker containers for Immich apps without running them
|
||||||
docker start immich_postgres # Start Postgres server
|
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" \
|
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" \
|
| 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 exec -i immich_postgres psql --username=postgres # Restore Backup
|
||||||
docker compose up -d # Start remainder of Immich apps
|
docker compose up -d # Start remainder of Immich apps
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
</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
|
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
|
## 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
|
# 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 pull # Update to latest version of Immich (if desired)
|
||||||
docker compose create # Create Docker containers for Immich apps without running them
|
docker compose create # Create Docker containers for Immich apps without running them
|
||||||
docker start immich_postgres # Start Postgres server
|
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
|
||||||
gc "C:\path\to\backup\dump.sql" | docker exec -i immich_postgres psql --username=postgres # Restore Backup
|
# Check the database user if you deviated from the default
|
||||||
docker compose up -d # Start remainder of Immich apps
|
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>
|
</TabItem>
|
||||||
@@ -103,6 +116,7 @@ services:
|
|||||||
Then you can restore with the same command but pointed at the latest dump.
|
Then you can restore with the same command but pointed at the latest dump.
|
||||||
|
|
||||||
```bash title='Automated Restore'
|
```bash title='Automated Restore'
|
||||||
|
# Be sure to check the username if you changed it from default
|
||||||
gunzip < db_dumps/last/immich-latest.sql.gz \
|
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" \
|
| 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
|
| 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>`.
|
- Stored in `UPLOAD_LOCATION/profile/<userID>`.
|
||||||
- **Thumbs Images:**
|
- **Thumbs Images:**
|
||||||
- Preview images (blurred, small, large) for each asset and thumbnails for recognized faces.
|
- 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:**
|
- **Encoded Assets:**
|
||||||
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
|
- Videos that have been re-encoded from the original for wider compatibility. The original is not removed.
|
||||||
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
|
- Stored in `UPLOAD_LOCATION/encoded-video/<userID>`.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Copy the entire `immich-server` block as a new service and make the following ch
|
|||||||
- container_name: immich_server
|
- container_name: immich_server
|
||||||
...
|
...
|
||||||
- ports:
|
- ports:
|
||||||
- - 2283:3001
|
- - 2283:2283
|
||||||
+ immich-microservices:
|
+ immich-microservices:
|
||||||
+ container_name: 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:
|
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)
|
- [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/)
|
- [Okta](https://www.okta.com/openid-connect/)
|
||||||
- [Google](https://developers.google.com/identity/openid-connect/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'`.
|
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
|
:::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
|
## Specifying the connection URL
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
# Repair Page
|
# 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.
|
The repair page is designed to give information to the system administrator about files that are not tracked, or offline paths.
|
||||||
|
|
||||||
## Natural State
|
## 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
|
### 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.
|
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
|
# increase readingTimeouts for the entrypoint used here
|
||||||
traefik.http.routers.immich.entrypoints: websecure
|
traefik.http.routers.immich.entrypoints: websecure
|
||||||
traefik.http.routers.immich.rule: Host(`immich.your-domain.com`)
|
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
|
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
|
:::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" />
|
<img src={require('./img/server-stats.png').default} title="server statistic" />
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Our [GitHub Repository](https://github.com/immich-app/immich) is a [monorepo](ht
|
|||||||
| `design/` | Screenshots and logos for the README |
|
| `design/` | Screenshots and logos for the README |
|
||||||
| `docs/` | Source code for the [https://immich.app](https://immich.app) website |
|
| `docs/` | Source code for the [https://immich.app](https://immich.app) website |
|
||||||
| `machine-learning/` | Source code for the `immich-machine-learning` docker image |
|
| `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 |
|
| `mobile/` | Source code for the mobile app, both Android and iOS |
|
||||||
| `server/` | Source code for the `immich-server` docker image |
|
| `server/` | Source code for the `immich-server` docker image |
|
||||||
| `web/` | Source code for the `web` |
|
| `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.
|
- Raspberry Pi is currently not supported.
|
||||||
- Two-pass mode is only supported for NVENC. Other APIs will ignore this setting.
|
- 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.
|
- 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
|
- Hardware dependent
|
||||||
- Codec support varies, but H.264 and HEVC are usually supported.
|
- Codec support varies, but H.264 and HEVC are usually supported.
|
||||||
- Notably, NVIDIA and AMD GPUs do not support VP9 encoding.
|
- 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.
|
- You must have a supported Rockchip ARM SoC.
|
||||||
- Only RK3588 supports hardware tonemapping, other SoCs use slower software tonemapping while still using hardware encoding.
|
- 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
|
- under `rkmpp` uncomment the 3 lines required for OpenCL tonemapping by removing the `#` symbol at the beginning of each line
|
||||||
- `- /dev/mali0:/dev/mali0`
|
- `- /dev/mali0:/dev/mali0`
|
||||||
- `- /etc/OpenCL:/etc/OpenCL:ro`
|
- `- /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`.
|
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.
|
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.
|
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.
|
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
|
#### Single Compose File
|
||||||
|
|
||||||
@@ -89,16 +92,7 @@ immich-server:
|
|||||||
devices:
|
devices:
|
||||||
- /dev/dri:/dev/dri
|
- /dev/dri:/dev/dri
|
||||||
volumes:
|
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".
|
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.
|
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
|
### Set Custom Scan Interval
|
||||||
|
|
||||||
:::note
|
:::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.
|
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.
|
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
|
#### 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.
|
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.
|
Once this is done, you can redeploy the `immich-machine-learning` container.
|
||||||
|
|
||||||
:::info
|
#### Multi-GPU
|
||||||
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.
|
|
||||||
:::
|
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
|
[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
|
[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
|
:::info
|
||||||
You can enable automatic backup on supported devices. For more information see [Automatic Backup](/docs/features/automatic-backup.md).
|
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
|
### 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
|
:::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.
|
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
|
### 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).
|
- 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 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.
|
To initialize the borg repository, run the following commands once.
|
||||||
|
|||||||
@@ -19,14 +19,13 @@ The default configuration looks like this:
|
|||||||
"targetVideoCodec": "h264",
|
"targetVideoCodec": "h264",
|
||||||
"acceptedVideoCodecs": ["h264"],
|
"acceptedVideoCodecs": ["h264"],
|
||||||
"targetAudioCodec": "aac",
|
"targetAudioCodec": "aac",
|
||||||
"acceptedAudioCodecs": ["aac", "mp3", "libopus"],
|
"acceptedAudioCodecs": ["aac", "mp3", "libopus", "pcm_s16le"],
|
||||||
"acceptedContainers": ["mov", "ogg", "webm"],
|
"acceptedContainers": ["mov", "ogg", "webm"],
|
||||||
"targetResolution": "720",
|
"targetResolution": "720",
|
||||||
"maxBitrate": "0",
|
"maxBitrate": "0",
|
||||||
"bframes": -1,
|
"bframes": -1,
|
||||||
"refs": 0,
|
"refs": 0,
|
||||||
"gopSize": 0,
|
"gopSize": 0,
|
||||||
"npl": 0,
|
|
||||||
"temporalAQ": false,
|
"temporalAQ": false,
|
||||||
"cqMode": "auto",
|
"cqMode": "auto",
|
||||||
"twoPass": false,
|
"twoPass": false,
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ Information on the current workers can be found [here](/docs/administration/jobs
|
|||||||
| Variable | Description | Default |
|
| Variable | Description | Default |
|
||||||
| :------------ | :------------- | :----------------------------------------: |
|
| :------------ | :------------- | :----------------------------------------: |
|
||||||
| `IMMICH_HOST` | Listening host | `0.0.0.0` |
|
| `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
|
## Database
|
||||||
|
|
||||||
@@ -148,22 +148,24 @@ Redis (Sentinel) URL example JSON before encoding:
|
|||||||
|
|
||||||
## Machine Learning
|
## Machine Learning
|
||||||
|
|
||||||
| Variable | Description | Default | Containers |
|
| 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` | 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_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_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_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_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_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_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_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_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__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_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` | 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_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_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.
|
\*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.
|
||||||
|
|
||||||
@@ -171,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
|
\*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
|
:::info
|
||||||
|
|
||||||
Other machine learning parameters can be tuned from the admin UI.
|
Other machine learning parameters can be tuned from the admin UI.
|
||||||
@@ -179,15 +183,10 @@ Other machine learning parameters can be tuned from the admin UI.
|
|||||||
|
|
||||||
## Prometheus
|
## Prometheus
|
||||||
|
|
||||||
| Variable | Description | Default | Containers | Workers |
|
| Variable | Description | Default | Containers | Workers |
|
||||||
| :----------------------------- | :-------------------------------------------------------------------------------------------- | :-----: | :--------- | :----------------- |
|
| :------------------------- | :-------------------------------------------------------------------------------------------------------------------- | :-----: | :--------- | :----------------- |
|
||||||
| `IMMICH_METRICS`<sup>\*1</sup> | Toggle all metrics (one of [`true`, `false`]) | | server | api, microservices |
|
| `IMMICH_TELEMETRY_INCLUDE` | Collect these telemetries. List of `host`, `api`, `io`, `repo`, `job`. Note: You can also specify `all` to enable all | | server | api, microservices |
|
||||||
| `IMMICH_API_METRICS` | Toggle metrics for endpoints and response times (one of [`true`, `false`]) | | server | api, microservices |
|
| `IMMICH_TELEMETRY_EXCLUDE` | Do not collect these telemetries. List of `host`, `api`, `io`, `repo`, `job` | | 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.
|
|
||||||
|
|
||||||
## Docker Secrets
|
## Docker Secrets
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following:
|
||||||
|
|
||||||
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
|
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
|
||||||
|
- `DB_DATA_LOCATION`: Change this to use an Unraid share (preferably a cache pool, e.g. `/mnt/user/appdata`). 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
|
<img
|
||||||
src={require('./img/unraid05.webp').default}
|
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.
|
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-issue]: https://github.com/immich-app/immich/issues/new/choose
|
||||||
[github-langs]: https://github.com/immich-app/immich/tree/main/mobile/assets/i18n
|
[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:
|
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:
|
themeConfig:
|
||||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||||
({
|
({
|
||||||
colorMode: {
|
|
||||||
defaultMode: 'dark',
|
|
||||||
},
|
|
||||||
announcementBar: {
|
announcementBar: {
|
||||||
id: 'site_announcement_immich',
|
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!`,
|
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,
|
isCloseable: false,
|
||||||
},
|
},
|
||||||
docs: {
|
docs: {
|
||||||
|
|||||||
19
docs/package-lock.json
generated
@@ -3006,9 +3006,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mdx-js/react": {
|
"node_modules/@mdx-js/react": {
|
||||||
"version": "3.0.1",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz",
|
||||||
"integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==",
|
"integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/mdx": "^2.0.0"
|
"@types/mdx": "^2.0.0"
|
||||||
},
|
},
|
||||||
@@ -16092,9 +16093,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "3.4.13",
|
"version": "3.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
|
||||||
"integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
|
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alloc/quick-lru": "^5.2.0",
|
"@alloc/quick-lru": "^5.2.0",
|
||||||
@@ -16454,9 +16455,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "5.6.2",
|
"version": "5.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||||
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
|
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
|
|||||||
@@ -56,6 +56,6 @@
|
|||||||
"node": ">=20"
|
"node": ">=20"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "20.17.0"
|
"node": "22.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,20 +52,20 @@ const guides: CommunityGuidesProps[] = [
|
|||||||
|
|
||||||
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {
|
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {
|
||||||
return (
|
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">
|
<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>
|
<span>{title}</span>
|
||||||
</p>
|
</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">{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>
|
<a href={url}>{url}</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<Link
|
<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}
|
to={url}
|
||||||
>
|
>
|
||||||
View Guide
|
View Guide
|
||||||
|
|||||||
@@ -83,27 +83,33 @@ const projects: CommunityProjectProps[] = [
|
|||||||
description: 'Power tools for organizing your immich library.',
|
description: 'Power tools for organizing your immich library.',
|
||||||
url: 'https://github.com/varun-raj/immich-power-tools',
|
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 {
|
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
|
||||||
return (
|
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">
|
<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>
|
<span>{title}</span>
|
||||||
</p>
|
</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">{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>
|
<a href={url}>{url}</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<Link
|
<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}
|
to={url}
|
||||||
>
|
>
|
||||||
View Project
|
View Link
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</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 components;
|
||||||
@tailwind utilities;
|
@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,
|
html,
|
||||||
button {
|
button {
|
||||||
font-family: 'Overpass', sans-serif;
|
font-family: 'Be Vietnam Pro', sans-serif;
|
||||||
|
font-optical-sizing: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
@@ -27,7 +28,6 @@ img {
|
|||||||
--ifm-color-primary-light: #4250af;
|
--ifm-color-primary-light: #4250af;
|
||||||
--ifm-color-primary-lighter: #4250af;
|
--ifm-color-primary-lighter: #4250af;
|
||||||
--ifm-color-primary-lightest: #4250af;
|
--ifm-color-primary-lightest: #4250af;
|
||||||
--ifm-code-font-size: 95%;
|
|
||||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,10 +40,28 @@ img {
|
|||||||
--ifm-color-primary-light: #d5e4fc;
|
--ifm-color-primary-light: #d5e4fc;
|
||||||
--ifm-color-primary-lighter: #e9f1fe;
|
--ifm-color-primary-lighter: #e9f1fe;
|
||||||
--ifm-color-primary-lightest: #ffffff;
|
--ifm-color-primary-lightest: #ffffff;
|
||||||
--ifm-background-color: #000000;
|
|
||||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||||
|
--ifm-background-color: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[class^='announcementBar_'] {
|
div[class^='announcementBar_'] {
|
||||||
min-height: 2rem;
|
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 Link from '@docusaurus/Link';
|
||||||
import Layout from '@theme/Layout';
|
import Layout from '@theme/Layout';
|
||||||
import { useColorMode } from '@docusaurus/theme-common';
|
import { useColorMode } from '@docusaurus/theme-common';
|
||||||
|
import { discordPath } from '@site/src/components/svg-paths';
|
||||||
|
import Icon from '@mdi/react';
|
||||||
function HomepageHeader() {
|
function HomepageHeader() {
|
||||||
const { isDarkTheme } = useColorMode();
|
const { isDarkTheme } = useColorMode();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header>
|
<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
|
<img
|
||||||
src={isDarkTheme ? 'img/immich-logo-stacked-dark.svg' : 'img/immich-logo-stacked-light.svg'}
|
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'}
|
||||||
className="md:h-60 h-44 mb-2 antialiased rounded-none"
|
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
|
||||||
alt="Immich logo"
|
alt="Immich logo"
|
||||||
/>
|
/>
|
||||||
<div className="sm:text-2xl text-lg md:text-4xl mb-12 sm:leading-tight">
|
<div className="mt-8">
|
||||||
<p className="mb-1 font-medium text-immich-primary dark:text-immich-dark-primary">
|
<p className="text-3xl md:text-5xl sm:leading-tight mb-1 font-extrabold text-black/90 dark:text-white px-4">
|
||||||
Self-hosted photo and <span className="block"></span>
|
Self-hosted{' '}
|
||||||
video management solution<span className="block"></span>
|
<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>
|
</p>
|
||||||
</div>
|
</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
|
<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"
|
to="docs/overview/introduction"
|
||||||
>
|
>
|
||||||
Get started
|
Get started
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<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/"
|
to="https://demo.immich.app/"
|
||||||
>
|
>
|
||||||
Demo portal
|
Demo
|
||||||
</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
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</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="flex flex-col sm:flex-row place-items-center place-content-center mt-4 gap-1">
|
||||||
<div className="h-24">
|
<div className="h-24">
|
||||||
<a href="https://play.google.com/store/apps/details?id=app.alextran.immich">
|
<a href="https://play.google.com/store/apps/details?id=app.alextran.immich">
|
||||||
@@ -54,6 +90,13 @@ function HomepageHeader() {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</section>
|
||||||
</header>
|
</header>
|
||||||
);
|
);
|
||||||
@@ -61,13 +104,9 @@ function HomepageHeader() {
|
|||||||
|
|
||||||
export default function Home(): JSX.Element {
|
export default function Home(): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<Layout
|
<Layout title="Home" description="Self-hosted photo and video management solution" noFooter={true}>
|
||||||
title="Home"
|
|
||||||
description="immich Self-hosted photo and video backup solution directly from your mobile phone "
|
|
||||||
noFooter={true}
|
|
||||||
>
|
|
||||||
<HomepageHeader />
|
<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>This project is available under GNU AGPL v3 license.</p>
|
||||||
<p className="text-xs">Privacy should not be a luxury</p>
|
<p className="text-xs">Privacy should not be a luxury</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ import {
|
|||||||
mdiThemeLightDark,
|
mdiThemeLightDark,
|
||||||
mdiTrashCanOutline,
|
mdiTrashCanOutline,
|
||||||
mdiVectorCombine,
|
mdiVectorCombine,
|
||||||
|
mdiFolderSync,
|
||||||
|
mdiFaceRecognition,
|
||||||
mdiVideo,
|
mdiVideo,
|
||||||
mdiWeb,
|
mdiWeb,
|
||||||
} from '@mdi/js';
|
} from '@mdi/js';
|
||||||
@@ -78,6 +80,7 @@ import React from 'react';
|
|||||||
import { Item, Timeline } from '../components/timeline';
|
import { Item, Timeline } from '../components/timeline';
|
||||||
|
|
||||||
const releases = {
|
const releases = {
|
||||||
|
'v1.114.0': new Date(2024, 8, 6),
|
||||||
'v1.113.0': new Date(2024, 7, 30),
|
'v1.113.0': new Date(2024, 7, 30),
|
||||||
'v1.112.0': new Date(2024, 7, 14),
|
'v1.112.0': new Date(2024, 7, 14),
|
||||||
'v1.111.0': new Date(2024, 6, 26),
|
'v1.111.0': new Date(2024, 6, 26),
|
||||||
@@ -231,6 +234,12 @@ const roadmap: Item[] = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const milestones: 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({
|
withRelease({
|
||||||
icon: mdiTagMultiple,
|
icon: mdiTagMultiple,
|
||||||
iconColor: 'orange',
|
iconColor: 'orange',
|
||||||
@@ -238,11 +247,18 @@ const milestones: Item[] = [
|
|||||||
description: 'Tag your photos and videos',
|
description: 'Tag your photos and videos',
|
||||||
release: 'v1.113.0',
|
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({
|
withRelease({
|
||||||
icon: mdiFolderMultiple,
|
icon: mdiFolderMultiple,
|
||||||
iconColor: 'brown',
|
iconColor: 'brown',
|
||||||
title: 'Folders',
|
title: 'Folders',
|
||||||
description: 'View your photos and videos in folders',
|
description: 'Browse your photos and videos in their folder structure',
|
||||||
release: 'v1.113.0',
|
release: 'v1.113.0',
|
||||||
}),
|
}),
|
||||||
withRelease({
|
withRelease({
|
||||||
|
|||||||
20
docs/static/archived-versions.json
vendored
@@ -1,4 +1,24 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"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",
|
"label": "v1.117.0",
|
||||||
"url": "https://v1.117.0.archive.immich.app"
|
"url": "https://v1.117.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/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: {
|
colors: {
|
||||||
// Light Theme
|
// Light Theme
|
||||||
'immich-primary': '#4250af',
|
'immich-primary': '#4250af',
|
||||||
'immich-bg': 'white',
|
'immich-bg': '#f9f8fb',
|
||||||
'immich-fg': 'black',
|
'immich-fg': 'black',
|
||||||
'immich-gray': '#F6F6F4',
|
'immich-gray': '#F6F6F4',
|
||||||
|
|
||||||
// Dark Theme
|
// Dark Theme
|
||||||
'immich-dark-primary': '#adcbfa',
|
'immich-dark-primary': '#adcbfa',
|
||||||
'immich-dark-bg': 'black',
|
'immich-dark-bg': '#070a14',
|
||||||
'immich-dark-fg': '#e5e7eb',
|
'immich-dark-fg': '#e5e7eb',
|
||||||
'immich-dark-gray': '#212121',
|
'immich-dark-gray': '#212121',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
20.17.0
|
22.11.0
|
||||||
|
|||||||
@@ -19,8 +19,10 @@ services:
|
|||||||
- DB_PASSWORD=postgres
|
- DB_PASSWORD=postgres
|
||||||
- DB_DATABASE_NAME=immich
|
- DB_DATABASE_NAME=immich
|
||||||
- IMMICH_MACHINE_LEARNING_ENABLED=false
|
- IMMICH_MACHINE_LEARNING_ENABLED=false
|
||||||
- IMMICH_METRICS=true
|
- IMMICH_TELEMETRY_INCLUDE=all
|
||||||
- IMMICH_ENV=testing
|
- IMMICH_ENV=testing
|
||||||
|
- IMMICH_PORT=2285
|
||||||
|
- IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true
|
||||||
volumes:
|
volumes:
|
||||||
- ./test-assets:/test-assets
|
- ./test-assets:/test-assets
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
@@ -29,10 +31,10 @@ services:
|
|||||||
- redis
|
- redis
|
||||||
- database
|
- database
|
||||||
ports:
|
ports:
|
||||||
- 2285:3001
|
- 2285:2285
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
|
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
|
||||||
|
|
||||||
database:
|
database:
|
||||||
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
|
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
|
||||||
|
|||||||
626
e2e/package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "1.117.0",
|
"version": "1.119.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"@immich/sdk": "file:../open-api/typescript-sdk",
|
"@immich/sdk": "file:../open-api/typescript-sdk",
|
||||||
"@playwright/test": "^1.44.1",
|
"@playwright/test": "^1.44.1",
|
||||||
"@types/luxon": "^3.4.2",
|
"@types/luxon": "^3.4.2",
|
||||||
"@types/node": "^20.16.9",
|
"@types/node": "^22.8.5",
|
||||||
"@types/oidc-provider": "^8.5.1",
|
"@types/oidc-provider": "^8.5.1",
|
||||||
"@types/pg": "^8.11.0",
|
"@types/pg": "^8.11.0",
|
||||||
"@types/pngjs": "^6.0.4",
|
"@types/pngjs": "^6.0.4",
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-prettier": "^5.1.3",
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
"eslint-plugin-unicorn": "^55.0.0",
|
"eslint-plugin-unicorn": "^55.0.0",
|
||||||
"exiftool-vendored": "^28.0.0",
|
"exiftool-vendored": "^28.3.1",
|
||||||
"globals": "^15.9.0",
|
"globals": "^15.9.0",
|
||||||
"jose": "^5.6.3",
|
"jose": "^5.6.3",
|
||||||
"luxon": "^3.4.4",
|
"luxon": "^3.4.4",
|
||||||
@@ -53,6 +53,6 @@
|
|||||||
"vitest": "^2.0.5"
|
"vitest": "^2.0.5"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "20.17.0"
|
"node": "22.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1060,7 +1060,7 @@ describe('/asset', () => {
|
|||||||
expected: {
|
expected: {
|
||||||
type: AssetTypeEnum.Image,
|
type: AssetTypeEnum.Image,
|
||||||
originalFileName: 'philadelphia.nef',
|
originalFileName: 'philadelphia.nef',
|
||||||
fileCreatedAt: '2016-09-22T22:10:29.060Z',
|
fileCreatedAt: '2016-09-22T21:10:29.060Z',
|
||||||
exifInfo: {
|
exifInfo: {
|
||||||
make: 'NIKON CORPORATION',
|
make: 'NIKON CORPORATION',
|
||||||
model: 'NIKON D700',
|
model: 'NIKON D700',
|
||||||
@@ -1069,11 +1069,11 @@ describe('/asset', () => {
|
|||||||
focalLength: 85,
|
focalLength: 85,
|
||||||
iso: 200,
|
iso: 200,
|
||||||
fileSizeInByte: 15_856_335,
|
fileSizeInByte: 15_856_335,
|
||||||
dateTimeOriginal: '2016-09-22T22:10:29.060Z',
|
dateTimeOriginal: '2016-09-22T21:10:29.060Z',
|
||||||
latitude: null,
|
latitude: null,
|
||||||
longitude: null,
|
longitude: null,
|
||||||
orientation: '1',
|
orientation: '1',
|
||||||
timeZone: 'UTC-5',
|
timeZone: 'UTC-4',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -1148,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 () => {
|
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();
|
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 () => {
|
it('should reimport a modified file', async () => {
|
||||||
const library = await utils.createLibrary(admin.accessToken, {
|
const library = await utils.createLibrary(admin.accessToken, {
|
||||||
ownerId: admin.userId,
|
ownerId: admin.userId,
|
||||||
@@ -444,13 +500,13 @@ describe('/libraries', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should set an asset offline its file is not in any import path', async () => {
|
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, {
|
const library = await utils.createLibrary(admin.accessToken, {
|
||||||
ownerId: admin.userId,
|
ownerId: admin.userId,
|
||||||
importPaths: [`${testAssetDirInternal}/temp/offline`],
|
importPaths: [`${testAssetDirInternal}/temp/offline`],
|
||||||
});
|
});
|
||||||
|
|
||||||
utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`);
|
|
||||||
|
|
||||||
await scan(admin.accessToken, library.id);
|
await scan(admin.accessToken, library.id);
|
||||||
await utils.waitForQueueFinish(admin.accessToken, 'library');
|
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 () => {
|
it('should fail if path is a file', async () => {
|
||||||
const pathToTest = `${testAssetDirInternal}/albums/nature/el_torcal_rocks.jpg`;
|
const pathToTest = `${testAssetDirInternal}/albums/nature/el_torcal_rocks.jpg`;
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ const authServer = {
|
|||||||
external: 'http://127.0.0.1:3000',
|
external: 'http://127.0.0.1:3000',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const mobileOverrideRedirectUri = 'https://photos.immich.app/oauth/mobile-redirect';
|
||||||
|
|
||||||
const redirect = async (url: string, cookies?: string[]) => {
|
const redirect = async (url: string, cookies?: string[]) => {
|
||||||
const { headers } = await request(url)
|
const { headers } = await request(url)
|
||||||
.get('/')
|
.get('/')
|
||||||
@@ -24,8 +26,8 @@ const redirect = async (url: string, cookies?: string[]) => {
|
|||||||
return { cookies: (headers['set-cookie'] as unknown as string[]) || [], location: headers.location };
|
return { cookies: (headers['set-cookie'] as unknown as string[]) || [], location: headers.location };
|
||||||
};
|
};
|
||||||
|
|
||||||
const loginWithOAuth = async (sub: OAuthUser | string) => {
|
const loginWithOAuth = async (sub: OAuthUser | string, redirectUri?: string) => {
|
||||||
const { url } = await startOAuth({ oAuthConfigDto: { redirectUri: `${baseUrl}/auth/login` } });
|
const { url } = await startOAuth({ oAuthConfigDto: { redirectUri: redirectUri ?? `${baseUrl}/auth/login` } });
|
||||||
|
|
||||||
// login
|
// login
|
||||||
const response1 = await redirect(url.replace(authServer.internal, authServer.external));
|
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 { 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 { 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';
|
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`, () => {
|
describe(`immich upload`, () => {
|
||||||
let admin: LoginResponseDto;
|
let admin: LoginResponseDto;
|
||||||
let key: string;
|
let key: string;
|
||||||
@@ -32,6 +113,60 @@ describe(`immich upload`, () => {
|
|||||||
expect(assets.total).toBe(1);
|
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 () => {
|
it('should skip a duplicate file', async () => {
|
||||||
const first = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
const first = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
||||||
expect(first.stderr).toBe('');
|
expect(first.stderr).toBe('');
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ const getClaims = (sub: string) => claims.find((user) => user.sub === sub) || wi
|
|||||||
const setup = async () => {
|
const setup = async () => {
|
||||||
const { privateKey, publicKey } = await generateKeyPair('RS256');
|
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 port = 3000;
|
||||||
const host = '0.0.0.0';
|
const host = '0.0.0.0';
|
||||||
const oidc = new Provider(`http://${host}:${port}`, {
|
const oidc = new Provider(`http://${host}:${port}`, {
|
||||||
@@ -86,14 +87,14 @@ const setup = async () => {
|
|||||||
{
|
{
|
||||||
client_id: OAuthClient.DEFAULT,
|
client_id: OAuthClient.DEFAULT,
|
||||||
client_secret: OAuthClient.DEFAULT,
|
client_secret: OAuthClient.DEFAULT,
|
||||||
redirect_uris: ['http://127.0.0.1:2285/auth/login'],
|
redirect_uris: redirectUris,
|
||||||
grant_types: ['authorization_code'],
|
grant_types: ['authorization_code'],
|
||||||
response_types: ['code'],
|
response_types: ['code'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
client_id: OAuthClient.RS256_TOKENS,
|
client_id: OAuthClient.RS256_TOKENS,
|
||||||
client_secret: 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'],
|
grant_types: ['authorization_code'],
|
||||||
id_token_signed_response_alg: 'RS256',
|
id_token_signed_response_alg: 'RS256',
|
||||||
jwks: { keys: [await exportJWK(publicKey)] },
|
jwks: { keys: [await exportJWK(publicKey)] },
|
||||||
@@ -101,7 +102,7 @@ const setup = async () => {
|
|||||||
{
|
{
|
||||||
client_id: OAuthClient.RS256_PROFILE,
|
client_id: OAuthClient.RS256_PROFILE,
|
||||||
client_secret: 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'],
|
grant_types: ['authorization_code'],
|
||||||
userinfo_signed_response_alg: 'RS256',
|
userinfo_signed_response_alg: 'RS256',
|
||||||
jwks: { keys: [await exportJWK(publicKey)] },
|
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;
|
executeCommand('node', ['node_modules/.bin/immich', '-d', `/${tempDir}/immich/`, ...args]).promise;
|
||||||
export const immichAdmin = (args: string[]) =>
|
export const immichAdmin = (args: string[]) =>
|
||||||
executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', `immich-admin ${args.join(' ')}`]);
|
executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', `immich-admin ${args.join(' ')}`]);
|
||||||
|
export const specialCharStrings = ["'", '"', ',', '{', '}', '*'];
|
||||||
|
|
||||||
const executeCommand = (command: string, args: string[]) => {
|
const executeCommand = (command: string, args: string[]) => {
|
||||||
let _resolve: (value: CommandResponse) => void;
|
let _resolve: (value: CommandResponse) => void;
|
||||||
@@ -373,8 +374,8 @@ export const utils = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
createDirectory: (path: string) => {
|
createDirectory: (path: string) => {
|
||||||
if (!existsSync(dirname(path))) {
|
if (!existsSync(path)) {
|
||||||
mkdirSync(dirname(path), { recursive: true });
|
mkdirSync(path, { recursive: true });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -391,7 +392,7 @@ export const utils = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rmSync(path);
|
rmSync(path, { recursive: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
getAssetInfo: (accessToken: string, id: string) => getAssetInfo({ id }, { headers: asBearerAuth(accessToken) }),
|
getAssetInfo: (accessToken: string, id: string) => getAssetInfo({ id }, { headers: asBearerAuth(accessToken) }),
|
||||||
|
|||||||
@@ -51,8 +51,8 @@
|
|||||||
"external_library_created_at": "مكتبة خارجية (أُنشئت في {date})",
|
"external_library_created_at": "مكتبة خارجية (أُنشئت في {date})",
|
||||||
"external_library_management": "إدارة المكتبة الخارجية",
|
"external_library_management": "إدارة المكتبة الخارجية",
|
||||||
"face_detection": "إكتشاف الوجوه",
|
"face_detection": "إكتشاف الوجوه",
|
||||||
"face_detection_description": "اكتشف الوجوه في المحتويات باستخدام التعلم الآلي. بالنسبة للفيديوهات، سيتم فقط استخدام الصورة المصغرة. خيار \"الكل\" يعيد معالجة كل المحتويات. خيار \"مفقود\" يضع في قائمة الإنتظار المحتويات التي لم تعالج بعد. سيتم وضع الوجوه المكتشفة في قائمة إنتظار التعرف على الوجه بعد اكتمال اكتشاف الوجه، مما يجمعها بأشخاص موجودين أو جدد.",
|
"face_detection_description": "اكتشف الوجوه في الأصول باستخدام التعلم الآلي. بالنسبة لمقاطع الفيديو، يتم اعتبار الصورة المصغرة فقط. \"تحديث\" (إعادة) معالجة جميع الأصول. \"إعادة تعيين\" تمسح أيضًا جميع بيانات الوجوه الحالية. \"مفقود\" يضع الأصول التي لم تتم معالجتها بعد في قائمة الانتظار. سيتم وضع الوجوه المكتشفة في قائمة الانتظار للتعرف على الوجه بعد اكتمال اكتشاف الوجه، وتجميعها في أشخاص موجودين أو جدد.",
|
||||||
"facial_recognition_job_description": "تجميع الوجوه المكتشفة كأشخاص. يتم تنفيذ هذه الخطوة بعد اكتمال اكتشاف الوجه. خيار \"الكل\" يعيد تجميع جميع الوجوه. خيار \"المفقود\" يضع في قائمة الانتظار الوجوه التي لم يتم تعيين شخص لها.",
|
"facial_recognition_job_description": "تجميع الوجوه المكتشفة كأشخاص. يتم تنفيذ هذه الخطوة بعد اكتمال اكتشاف الوجه. خيار \"إعادة التعيين\" يعيد تجميع جميع الوجوه. خيار \"المفقود\" يضع في قائمة الانتظار الوجوه التي لم يتم تعيين شخص لها.",
|
||||||
"failed_job_command": "فشل الأمر {command} للمهمة: {job}",
|
"failed_job_command": "فشل الأمر {command} للمهمة: {job}",
|
||||||
"force_delete_user_warning": "تحذير: سيؤدي ذلك إلى إزالة المستخدم وجميع محتوياته على الفور. لا يمكن التراجع عن هذا الإجراء ولا يمكن استرداد الملفات.",
|
"force_delete_user_warning": "تحذير: سيؤدي ذلك إلى إزالة المستخدم وجميع محتوياته على الفور. لا يمكن التراجع عن هذا الإجراء ولا يمكن استرداد الملفات.",
|
||||||
"forcing_refresh_library_files": "إجبار التحديث لجميع ملفات المكتبة",
|
"forcing_refresh_library_files": "إجبار التحديث لجميع ملفات المكتبة",
|
||||||
@@ -1090,11 +1090,13 @@
|
|||||||
"recent_searches": "عمليات البحث الأخيرة",
|
"recent_searches": "عمليات البحث الأخيرة",
|
||||||
"refresh": "تحديث",
|
"refresh": "تحديث",
|
||||||
"refresh_encoded_videos": "تحديث مقاطع الفيديو المشفرة",
|
"refresh_encoded_videos": "تحديث مقاطع الفيديو المشفرة",
|
||||||
|
"refresh_faces": "تحديث الوجوه",
|
||||||
"refresh_metadata": "تحديث البيانات الوصفية",
|
"refresh_metadata": "تحديث البيانات الوصفية",
|
||||||
"refresh_thumbnails": "تحديث الصور المصغرة",
|
"refresh_thumbnails": "تحديث الصور المصغرة",
|
||||||
"refreshed": "تم التحديث",
|
"refreshed": "تم التحديث",
|
||||||
"refreshes_every_file": "إعادة قراءة كافة الملفات الموجودة والجديدة",
|
"refreshes_every_file": "إعادة قراءة كافة الملفات الموجودة والجديدة",
|
||||||
"refreshing_encoded_video": "جارٍ تحديث الفيديو المرمز",
|
"refreshing_encoded_video": "جارٍ تحديث الفيديو المرمز",
|
||||||
|
"refreshing_faces": "جاري تحديث الوجوه",
|
||||||
"refreshing_metadata": "جارٍ تحديث البيانات الوصفية",
|
"refreshing_metadata": "جارٍ تحديث البيانات الوصفية",
|
||||||
"regenerating_thumbnails": "جارٍ تجديد الصور المصغرة",
|
"regenerating_thumbnails": "جارٍ تجديد الصور المصغرة",
|
||||||
"remove": "إزالة",
|
"remove": "إزالة",
|
||||||
@@ -1363,6 +1365,8 @@
|
|||||||
"version": "الإصدار",
|
"version": "الإصدار",
|
||||||
"version_announcement_closing": "صديقك، أليكس",
|
"version_announcement_closing": "صديقك، أليكس",
|
||||||
"version_announcement_message": "مرحباً يا صديقي، هنالك نسخة جديدة من التطبيق. خذ وقتك لزيارة <link>ملاحظات الإصدار</link> والتأكد من أن ملف <code>docker-compose.yml</code> وإعداد <code>.env</code> مُحدّثين لتجنب أي إعدادات خاطئة، خاصةً إذا كنت تستخدم WatchTower أو أي آلية تقوم بتحديث التطبيق تلقائياً.",
|
"version_announcement_message": "مرحباً يا صديقي، هنالك نسخة جديدة من التطبيق. خذ وقتك لزيارة <link>ملاحظات الإصدار</link> والتأكد من أن ملف <code>docker-compose.yml</code> وإعداد <code>.env</code> مُحدّثين لتجنب أي إعدادات خاطئة، خاصةً إذا كنت تستخدم WatchTower أو أي آلية تقوم بتحديث التطبيق تلقائياً.",
|
||||||
|
"version_history": "تاريخ الإصدار",
|
||||||
|
"version_history_item": "تم تثبيت {version} في {date}",
|
||||||
"video": "فيديو",
|
"video": "فيديو",
|
||||||
"video_hover_setting": "تشغيل الصورة المصغرة للفيديو عند التمرير",
|
"video_hover_setting": "تشغيل الصورة المصغرة للفيديو عند التمرير",
|
||||||
"video_hover_setting_description": "تشغيل الصورة المصغرة للفيديو عند تحريك الماوس فوق العنصر. حتى عند التعطيل، يمكن بدء التشغيل عن طريق التمرير فوق رمز التشغيل.",
|
"video_hover_setting_description": "تشغيل الصورة المصغرة للفيديو عند تحريك الماوس فوق العنصر. حتى عند التعطيل، يمكن بدء التشغيل عن طريق التمرير فوق رمز التشغيل.",
|
||||||
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} afegits als preferits",
|
"added_to_favorites_count": "{count, number} afegits als preferits",
|
||||||
"admin": {
|
"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/**\".",
|
"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": "Configuració de l'autenticació",
|
||||||
"authentication_settings_description": "Gestiona la contrasenya, OAuth i altres configuracions 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.",
|
"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,8 +51,8 @@
|
|||||||
"external_library_created_at": "Llibreria externa (creada el {date})",
|
"external_library_created_at": "Llibreria externa (creada el {date})",
|
||||||
"external_library_management": "Gestió de llibreries externes",
|
"external_library_management": "Gestió de llibreries externes",
|
||||||
"face_detection": "Detecció de cares",
|
"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.",
|
"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. \"Tot\" reagrupa totes les cares. \"Pendent\" encua les cares que no tenen cap persona assignada.",
|
"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}",
|
"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.",
|
"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",
|
"forcing_refresh_library_files": "Força l'actualització de tots els fitxers de les biblioteques",
|
||||||
@@ -61,18 +62,24 @@
|
|||||||
"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_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": "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_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_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": "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_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_preview_title": "Paràmetres de previsualització",
|
||||||
"image_quality": "Qualitat",
|
"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_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": "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": "Configuració d'imatges",
|
||||||
"image_settings_description": "Gestiona la qualitat i resolució de les imatges generades",
|
"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_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": "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_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_concurrency": "{job} concurrència",
|
||||||
"job_created": "Tasca creada",
|
"job_created": "Tasca creada",
|
||||||
"job_not_concurrency_safe": "Aquesta tasca no és segura per a la conconcurrència.",
|
"job_not_concurrency_safe": "Aquesta tasca no és segura per a la conconcurrència.",
|
||||||
@@ -280,7 +287,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Acceleració de maquinari",
|
"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_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": "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_hevc_codec": "Còdec HEVC",
|
||||||
"transcoding_max_b_frames": "Nombre màxim de B-frames",
|
"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.",
|
"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.",
|
||||||
@@ -399,7 +406,7 @@
|
|||||||
"asset_has_unassigned_faces": "L'element té cares no assignades",
|
"asset_has_unassigned_faces": "L'element té cares no assignades",
|
||||||
"asset_hashing": "Hashing...",
|
"asset_hashing": "Hashing...",
|
||||||
"asset_offline": "Element fora de línia",
|
"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": "Saltat",
|
||||||
"asset_skipped_in_trash": "A la paperera",
|
"asset_skipped_in_trash": "A la paperera",
|
||||||
"asset_uploaded": "Carregat",
|
"asset_uploaded": "Carregat",
|
||||||
@@ -412,7 +419,7 @@
|
|||||||
"assets_moved_to_trash_count": "{count, plural, one {# recurs mogut} other {# recursos moguts}} a la paperera",
|
"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_permanently_deleted_count": "{count, plural, one {# recurs esborrat} other {# recursos esborrats}} permanentment",
|
||||||
"assets_removed_count": "{count, plural, one {# element eliminat} other {# elements eliminats}}",
|
"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_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_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",
|
"assets_were_part_of_album_count": "{count, plural, one {L'element ja és} other {Els elements ja són}} part de l'àlbum",
|
||||||
@@ -423,6 +430,7 @@
|
|||||||
"birthdate_saved": "Data de naixement guardada amb èxit",
|
"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.",
|
"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",
|
"blurred_background": "Fons difuminat",
|
||||||
|
"bugs_and_feature_requests": "Errors i sol·licituds de funcions",
|
||||||
"build": "Construeix",
|
"build": "Construeix",
|
||||||
"build_image": "Construeix la imatge",
|
"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ó!",
|
"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ó!",
|
||||||
@@ -519,18 +527,20 @@
|
|||||||
"delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?",
|
"delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?",
|
||||||
"delete_duplicates_confirmation": "Esteu segurs que voleu eliminar aquests duplicats permanentment?",
|
"delete_duplicates_confirmation": "Esteu segurs que voleu eliminar aquests duplicats permanentment?",
|
||||||
"delete_key": "Suprimeix la clau",
|
"delete_key": "Suprimeix la clau",
|
||||||
"delete_library": "Suprimeix la llibreria",
|
"delete_library": "Suprimeix la Llibreria",
|
||||||
"delete_link": "Esborra l'enllaç",
|
"delete_link": "Esborra l'enllaç",
|
||||||
"delete_shared_link": "Odstranit sdílený odkaz",
|
"delete_shared_link": "Odstranit sdílený odkaz",
|
||||||
"delete_tag": "Eliminar etiqueta",
|
"delete_tag": "Eliminar etiqueta",
|
||||||
"delete_tag_confirmation_prompt": "Estàs segur que vols eliminar l'etiqueta {tagName}?",
|
"delete_tag_confirmation_prompt": "Estàs segur que vols eliminar l'etiqueta {tagName}?",
|
||||||
"delete_user": "Suprimeix l'usuari",
|
"delete_user": "Suprimeix l'usuari",
|
||||||
"deleted_shared_link": "Suprimeix l'enllaç compartit",
|
"deleted_shared_link": "Suprimeix l'enllaç compartit",
|
||||||
|
"deletes_missing_assets": "Elimina els actius que falten del disc",
|
||||||
"description": "Descripció",
|
"description": "Descripció",
|
||||||
"details": "Detalls",
|
"details": "Detalls",
|
||||||
"direction": "Direcció",
|
"direction": "Direcció",
|
||||||
"disabled": "Desactivat",
|
"disabled": "Desactivat",
|
||||||
"disallow_edits": "No permetre les edicions",
|
"disallow_edits": "No permetre les edicions",
|
||||||
|
"discord": "Discord",
|
||||||
"discover": "Descobreix",
|
"discover": "Descobreix",
|
||||||
"dismiss_all_errors": "Descarta tots els errors",
|
"dismiss_all_errors": "Descarta tots els errors",
|
||||||
"dismiss_error": "Descarta l'error",
|
"dismiss_error": "Descarta l'error",
|
||||||
@@ -539,6 +549,7 @@
|
|||||||
"display_original_photos": "Mostra les fotografies originals",
|
"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.",
|
"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",
|
"do_not_show_again": "No tornis a mostrar aquest missatge",
|
||||||
|
"documentation": "Documentació",
|
||||||
"done": "Fet",
|
"done": "Fet",
|
||||||
"download": "Descarregar",
|
"download": "Descarregar",
|
||||||
"download_include_embedded_motion_videos": "Vídeos incrustats",
|
"download_include_embedded_motion_videos": "Vídeos incrustats",
|
||||||
@@ -861,8 +872,9 @@
|
|||||||
"look": "Aspecte",
|
"look": "Aspecte",
|
||||||
"loop_videos": "Vídeos en bucle",
|
"loop_videos": "Vídeos en bucle",
|
||||||
"loop_videos_description": "Habilita la reproducció en bucle del vídeo en els detalls.",
|
"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",
|
"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_sharing_with_partners": "Gestiona la compartició amb els companys",
|
||||||
"manage_the_app_settings": "Gestioneu la configuració de l'aplicació",
|
"manage_the_app_settings": "Gestioneu la configuració de l'aplicació",
|
||||||
"manage_your_account": "Gestiona el teu compte",
|
"manage_your_account": "Gestiona el teu compte",
|
||||||
@@ -930,6 +942,7 @@
|
|||||||
"notifications": "Notificacions",
|
"notifications": "Notificacions",
|
||||||
"notifications_setting_description": "Gestiona les notificacions",
|
"notifications_setting_description": "Gestiona les notificacions",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"official_immich_resources": "Recursos oficials d'Immich",
|
||||||
"offline": "Fora de línia",
|
"offline": "Fora de línia",
|
||||||
"offline_paths": "Rutes 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.",
|
"offline_paths_description": "Aquests resultats poden ser deguts a la supressió manual de fitxers que no formen part d'una biblioteca externa.",
|
||||||
@@ -1063,11 +1076,13 @@
|
|||||||
"recent_searches": "Cerques recents",
|
"recent_searches": "Cerques recents",
|
||||||
"refresh": "Actualitzar",
|
"refresh": "Actualitzar",
|
||||||
"refresh_encoded_videos": "Actualitza vídeos codificats",
|
"refresh_encoded_videos": "Actualitza vídeos codificats",
|
||||||
|
"refresh_faces": "Actualitzar cares",
|
||||||
"refresh_metadata": "Actualitzar les metadades",
|
"refresh_metadata": "Actualitzar les metadades",
|
||||||
"refresh_thumbnails": "Actualitzar la miniatura",
|
"refresh_thumbnails": "Actualitzar la miniatura",
|
||||||
"refreshed": "Actualitzat",
|
"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_encoded_video": "S'està actualitzant el vídeo codificat",
|
||||||
|
"refreshing_faces": "Refrescant cares",
|
||||||
"refreshing_metadata": "Actualitzant les metadades",
|
"refreshing_metadata": "Actualitzant les metadades",
|
||||||
"regenerating_thumbnails": "Regenerant les miniatures",
|
"regenerating_thumbnails": "Regenerant les miniatures",
|
||||||
"remove": "Eliminar",
|
"remove": "Eliminar",
|
||||||
@@ -1116,6 +1131,7 @@
|
|||||||
"say_something": "Digues quelcom",
|
"say_something": "Digues quelcom",
|
||||||
"scan_all_libraries": "Escanejar totes les llibreries",
|
"scan_all_libraries": "Escanejar totes les llibreries",
|
||||||
"scan_all_library_files": "Re-escanejar tots els fitxers de la llibreria",
|
"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_new_library_files": "Escanejar nous fitxers de la llibreria",
|
||||||
"scan_settings": "Configuració d'escaneig",
|
"scan_settings": "Configuració d'escaneig",
|
||||||
"scanning_for_album": "S'està buscant l'àlbum...",
|
"scanning_for_album": "S'està buscant l'àlbum...",
|
||||||
@@ -1202,6 +1218,7 @@
|
|||||||
"show_person_options": "Mostra opcions de la persona",
|
"show_person_options": "Mostra opcions de la persona",
|
||||||
"show_progress_bar": "Mostra barra de progrés",
|
"show_progress_bar": "Mostra barra de progrés",
|
||||||
"show_search_options": "Mostra opcions de cerca",
|
"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": "Insígnia de contribuent",
|
||||||
"show_supporter_badge_description": "Mostra una insígnia de contributor",
|
"show_supporter_badge_description": "Mostra una insígnia de contributor",
|
||||||
"shuffle": "Mescla",
|
"shuffle": "Mescla",
|
||||||
@@ -1243,13 +1260,16 @@
|
|||||||
"submit": "Envia",
|
"submit": "Envia",
|
||||||
"suggestions": "Suggeriments",
|
"suggestions": "Suggeriments",
|
||||||
"sunrise_on_the_beach": "Albada a la platja",
|
"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ó",
|
"swap_merge_direction": "Canvia la direcció d'unió",
|
||||||
"sync": "Sincronitza",
|
"sync": "Sincronitza",
|
||||||
"tag": "Etiqueta",
|
"tag": "Etiqueta",
|
||||||
"tag_assets": "Etiquetar actius",
|
"tag_assets": "Etiquetar actius",
|
||||||
"tag_created": "Etiqueta creada: {tag}",
|
"tag_created": "Etiqueta creada: {tag}",
|
||||||
"tag_feature_description": "Exploreu fotos i vídeos agrupats per temes d'etiquetes lògiques",
|
"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}",
|
"tag_updated": "Etiqueta actualizada: {tag}",
|
||||||
"tagged_assets": "{count, plural, one {#Etiquetat} other {#Etiquetats}} {count, plural, one {# actiu} other {# actius}}",
|
"tagged_assets": "{count, plural, one {#Etiquetat} other {#Etiquetats}} {count, plural, one {# actiu} other {# actius}}",
|
||||||
"tags": "Etiquetes",
|
"tags": "Etiquetes",
|
||||||
@@ -1258,6 +1278,7 @@
|
|||||||
"theme_selection": "Selecció de tema",
|
"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",
|
"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",
|
"they_will_be_merged_together": "Es combinaran",
|
||||||
|
"third_party_resources": "Recursos de tercers",
|
||||||
"time_based_memories": "Records basats en el temps",
|
"time_based_memories": "Records basats en el temps",
|
||||||
"timezone": "Fus horari",
|
"timezone": "Fus horari",
|
||||||
"to_archive": "Arxivar",
|
"to_archive": "Arxivar",
|
||||||
@@ -1329,6 +1350,8 @@
|
|||||||
"version": "Versió",
|
"version": "Versió",
|
||||||
"version_announcement_closing": "El teu amic Alex",
|
"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_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": "Vídeo",
|
||||||
"video_hover_setting": "Reprodueix la miniatura en passar el ratolí",
|
"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ó.",
|
"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ó.",
|
||||||
@@ -51,8 +51,8 @@
|
|||||||
"external_library_created_at": "Externí knihovna (vytvořena {date})",
|
"external_library_created_at": "Externí knihovna (vytvořena {date})",
|
||||||
"external_library_management": "Správa externích knihoven",
|
"external_library_management": "Správa externích knihoven",
|
||||||
"face_detection": "Detekce obličejů",
|
"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.",
|
"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ů. \"Vše\" znovu seskupí všechny obličeje. \"Chybějící\" zpracuje obličeje, které nemají přiřazenou osobu.",
|
"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}",
|
"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.",
|
"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",
|
"forcing_refresh_library_files": "Vynucení obnovy všech souborů knihovny",
|
||||||
@@ -110,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_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": "Kontrola duplicit",
|
||||||
"machine_learning_duplicate_detection_enabled": "Povolit kontrolu 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_duplicate_detection_setting_description": "Použít CLIP embeddings k nalezení pravděpodobných duplicit",
|
||||||
"machine_learning_enabled": "Povolit strojové učení",
|
"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í.",
|
"machine_learning_enabled_description": "Pokud je vypnuto, budou všechny funkce strojového učení vypnuty bez ohledu na níže uvedená nastavení.",
|
||||||
@@ -287,7 +287,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Hardwarová akcelerace",
|
"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_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": "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_hevc_codec": "Kodek HEVC",
|
||||||
"transcoding_max_b_frames": "Maximální počet B-snímků",
|
"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.",
|
"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.",
|
||||||
@@ -382,7 +382,7 @@
|
|||||||
"all_videos": "Všechna videa",
|
"all_videos": "Všechna videa",
|
||||||
"allow_dark_mode": "Povolit tmavý režim",
|
"allow_dark_mode": "Povolit tmavý režim",
|
||||||
"allow_edits": "Povolit úpravy",
|
"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",
|
"allow_public_user_to_upload": "Povolit veřejnosti nahrávat",
|
||||||
"anti_clockwise": "Proti směru hodinových ručiček",
|
"anti_clockwise": "Proti směru hodinových ručiček",
|
||||||
"api_key": "API klíč",
|
"api_key": "API klíč",
|
||||||
@@ -888,6 +888,7 @@
|
|||||||
"look": "Zobrazení",
|
"look": "Zobrazení",
|
||||||
"loop_videos": "Videa ve smyčce",
|
"loop_videos": "Videa ve smyčce",
|
||||||
"loop_videos_description": "Povolit automatickou smyčku videa v prohlížeči.",
|
"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",
|
"make": "Výrobce",
|
||||||
"manage_shared_links": "Spravovat sdílené odkazy",
|
"manage_shared_links": "Spravovat sdílené odkazy",
|
||||||
"manage_sharing_with_partners": "Správa sdílení s partnery",
|
"manage_sharing_with_partners": "Správa sdílení s partnery",
|
||||||
@@ -1093,11 +1094,13 @@
|
|||||||
"recent_searches": "Nedávná vyhledávání",
|
"recent_searches": "Nedávná vyhledávání",
|
||||||
"refresh": "Obnovit",
|
"refresh": "Obnovit",
|
||||||
"refresh_encoded_videos": "Obnovit kódovaná videa",
|
"refresh_encoded_videos": "Obnovit kódovaná videa",
|
||||||
|
"refresh_faces": "Obnovit obličeje",
|
||||||
"refresh_metadata": "Obnovit metadata",
|
"refresh_metadata": "Obnovit metadata",
|
||||||
"refresh_thumbnails": "Obnovit miniatury",
|
"refresh_thumbnails": "Obnovit miniatury",
|
||||||
"refreshed": "Obnoveno",
|
"refreshed": "Obnoveno",
|
||||||
"refreshes_every_file": "Znovu načte všechny stávající a nové soubory",
|
"refreshes_every_file": "Znovu načte všechny stávající a nové soubory",
|
||||||
"refreshing_encoded_video": "Obnovování kódovaného videa",
|
"refreshing_encoded_video": "Obnovování kódovaného videa",
|
||||||
|
"refreshing_faces": "Obnovování obličejů",
|
||||||
"refreshing_metadata": "Obnovování metadat",
|
"refreshing_metadata": "Obnovování metadat",
|
||||||
"regenerating_thumbnails": "Regenerace miniatur",
|
"regenerating_thumbnails": "Regenerace miniatur",
|
||||||
"remove": "Odstranit",
|
"remove": "Odstranit",
|
||||||
@@ -1191,8 +1194,8 @@
|
|||||||
"send_message": "Odeslat zprávu",
|
"send_message": "Odeslat zprávu",
|
||||||
"send_welcome_email": "Poslat uvítací e-mail",
|
"send_welcome_email": "Poslat uvítací e-mail",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
"server_offline": "Server Offline",
|
"server_offline": "Server offline",
|
||||||
"server_online": "Server Online",
|
"server_online": "Server online",
|
||||||
"server_stats": "Statistiky serveru",
|
"server_stats": "Statistiky serveru",
|
||||||
"server_version": "Verze serveru",
|
"server_version": "Verze serveru",
|
||||||
"set": "Nastavit",
|
"set": "Nastavit",
|
||||||
@@ -1205,8 +1208,8 @@
|
|||||||
"settings_saved": "Nastavení uloženo",
|
"settings_saved": "Nastavení uloženo",
|
||||||
"share": "Sdílet",
|
"share": "Sdílet",
|
||||||
"shared": "Sdílené",
|
"shared": "Sdílené",
|
||||||
"shared_by": "Sdílel",
|
"shared_by": "Sdílel(a)",
|
||||||
"shared_by_user": "Sdíleno uživatelem {user}",
|
"shared_by_user": "Sdílel(a) {user}",
|
||||||
"shared_by_you": "Sdíleli jste",
|
"shared_by_you": "Sdíleli jste",
|
||||||
"shared_from_partner": "Fotky od {partner}",
|
"shared_from_partner": "Fotky od {partner}",
|
||||||
"shared_link_options": "Možnosti sdíleného odkazu",
|
"shared_link_options": "Možnosti sdíleného odkazu",
|
||||||
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",
|
"back": "Tilbage",
|
||||||
"backward": "Baglæns",
|
"backward": "Baglæns",
|
||||||
"blurred_background": "Sløret baggrund",
|
"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": "Kamera",
|
||||||
"camera_brand": "Kameramærke",
|
"camera_brand": "Kameramærke",
|
||||||
"camera_model": "Kameramodel",
|
"camera_model": "Kameramodel",
|
||||||
"cancel": "Annuller",
|
"cancel": "Annullér",
|
||||||
"cancel_search": "Annullér søgning",
|
"cancel_search": "Annullér søgning",
|
||||||
"cannot_merge_people": "Kan ikke sammenflette personer",
|
"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",
|
"cannot_update_the_description": "Kan ikke opdatere beskrivelsen",
|
||||||
"cant_apply_changes": "Kan ikke anvende ændringer",
|
"cant_apply_changes": "Kan ikke anvende ændringer",
|
||||||
"cant_get_faces": "Kan ikke hente ansigter",
|
"cant_get_faces": "Kan ikke hente ansigter",
|
||||||
"cant_search_people": "Kan ikke søge i personer",
|
"cant_search_people": "Kan ikke søge i personer",
|
||||||
"cant_search_places": "Kan ikke søge i steder",
|
"cant_search_places": "Kan ikke søge i steder",
|
||||||
"change_date": "Ændr dato",
|
"change_date": "Ændr dato",
|
||||||
"change_expiration_time": "Ændrer udløbstidspunkt",
|
"change_expiration_time": "Ændr udløbstidspunkt",
|
||||||
"change_location": "Ændr sted",
|
"change_location": "Ændr sted",
|
||||||
"change_name": "Ændr navn",
|
"change_name": "Ændr navn",
|
||||||
"change_name_successfully": "Navn ændret med succes",
|
"change_name_successfully": "Navn er ændret",
|
||||||
"change_password": "Skift Kodeord",
|
"change_password": "Skift kodeord",
|
||||||
"change_your_password": "Skift din adgangskode",
|
"change_password_description": "Dette er enten første gang du tilmelder dig, eller en ændring af kodeordet blev bestilt. Indtast dit nye kodeord herunder.",
|
||||||
"changed_visibility_successfully": "Ændrede synlighed med succes",
|
"change_your_password": "Skift dit kodeord",
|
||||||
"check_all": "Tjek alle",
|
"changed_visibility_successfully": "Synlighed blev ændret",
|
||||||
"check_logs": "Tjek logs",
|
"check_all": "Markér alle",
|
||||||
"choose_matching_people_to_merge": "Vælg personer der matcher til sammenfletning",
|
"check_logs": "Tjek logfiler",
|
||||||
|
"choose_matching_people_to_merge": "Vælg matchende personer til sammenfletning",
|
||||||
"city": "By",
|
"city": "By",
|
||||||
"clear": "Ryd",
|
"clear": "Ryd",
|
||||||
"clear_all": "Ryd alle",
|
"clear_all": "Ryd alle",
|
||||||
|
"clear_all_recent_searches": "Ryd alle seneste søgninger",
|
||||||
"clear_message": "Ryd bedsked",
|
"clear_message": "Ryd bedsked",
|
||||||
"clear_value": "Ryd værdi",
|
"clear_value": "Ryd værdi",
|
||||||
|
"clockwise": "Med uret",
|
||||||
"close": "Luk",
|
"close": "Luk",
|
||||||
"collapse_all": "Kollaps alle",
|
"collapse": "Klap sammen",
|
||||||
|
"collapse_all": "Klap alle sammen",
|
||||||
|
"color": "Farve",
|
||||||
"color_theme": "Farvetema",
|
"color_theme": "Farvetema",
|
||||||
"comment_options": "Kommentarindstillinger",
|
"comment_options": "Kommentarindstillinger",
|
||||||
"comments_are_disabled": "Kommentarer er slået fra",
|
"comments_are_disabled": "Kommentarer er slået fra",
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
"added_to_favorites_count": "{count, number} zu Favoriten hinzugefügt",
|
"added_to_favorites_count": "{count, number} zu Favoriten hinzugefügt",
|
||||||
"admin": {
|
"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.",
|
"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 Bibliotheks befindet sich nicht mehr auf der Festplatte und wurde in den Papierkorb verschoben. Wenn 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 und die Bibliothek scannen kann.",
|
"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": "Authentifizierungseinstellungen",
|
||||||
"authentication_settings_description": "Passwort-, OAuth- und sonstigen Authentifizierungseinstellungen verwalten",
|
"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.",
|
"authentication_settings_disable_all": "Bist du sicher, dass du alle Anmeldemethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.",
|
||||||
@@ -38,33 +38,33 @@
|
|||||||
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
|
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
|
||||||
"config_set_by_file": "Ist derzeit in einer Konfigurationsdatei festgelegt",
|
"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": "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_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 \"{email}\" unten eingibst",
|
"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_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?",
|
"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",
|
"crontab_guru": "Crontab Guru",
|
||||||
"disable_login": "Login deaktvieren",
|
"disable_login": "Login deaktvieren",
|
||||||
"disabled": "Deaktiviert",
|
"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",
|
"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 Sie Ordner haben, die Dateien enthalten, die Sie nicht importieren möchten, wie z. B. RAW-Dateien.",
|
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.",
|
||||||
"external_library_created_at": "Externe Bibliothek (erstellt am {date})",
|
"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": "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.",
|
"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 erkannte Gesichter zu Personen nach der Gesichtserkennung. „Alle“ clustert alle Gesichter neu, während „Fehlende“ Gesichter ohne Zuordnung in die Warteschlange stellt.",
|
"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",
|
"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.",
|
"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",
|
"forcing_refresh_library_files": "Erneutes Laden aller Bibliotheksdateien erzwingen",
|
||||||
"image_format": "Format",
|
"image_format": "Format",
|
||||||
"image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist dafür aber etwas langsamer in der Verarbeitung.",
|
"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": "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_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": "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_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_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_format": "Vorschauformat",
|
||||||
"image_preview_quality_description": "Vorschauqualität von 1-100. Ein höherer Wert ist besser, erzeugt aber größere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen. Die Einstellung eines niedrigen Wertes kann die Qualität des maschinellen Lernens beeinträchtigen.",
|
"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": "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_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_preview_title": "Vorschaueinstellungen",
|
||||||
@@ -80,21 +80,21 @@
|
|||||||
"image_thumbnail_resolution": "Miniaturansichts-Auflösung",
|
"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.",
|
"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.",
|
||||||
"image_thumbnail_title": "Miniaturansicht-Einstellungen",
|
"image_thumbnail_title": "Miniaturansicht-Einstellungen",
|
||||||
"job_concurrency": "{job} - (Anzahl gleichzeitiger Prozesse)",
|
"job_concurrency": "{job} (Anzahl gleichzeitiger Prozesse)",
|
||||||
"job_created": "Job erstellt",
|
"job_created": "Aufgabe erstellt",
|
||||||
"job_not_concurrency_safe": "Dieser Job ist nicht parallelisierungssicher.",
|
"job_not_concurrency_safe": "Diese Aufgabe ist nicht parallelisierungssicher.",
|
||||||
"job_settings": "Job-Einstellungen",
|
"job_settings": "Aufgaben-Einstellungen",
|
||||||
"job_settings_description": "Gleichzeitige Job-Prozessen verwalten",
|
"job_settings_description": "Gleichzeitige Aufgaben-Prozesse verwalten",
|
||||||
"job_status": "Job-Status",
|
"job_status": "Aufgaben-Status",
|
||||||
"jobs_delayed": "{jobCount, plural, other {# verzögert}}",
|
"jobs_delayed": "{jobCount, plural, other {# verzögert}}",
|
||||||
"jobs_failed": "{jobCount, plural, other {# fehlgeschlagen}}",
|
"jobs_failed": "{jobCount, plural, other {# fehlgeschlagen}}",
|
||||||
"library_created": "Bibliothek erstellt: {library}",
|
"library_created": "Bibliothek erstellt: {library}",
|
||||||
"library_cron_expression": "Cron-Ausdruck",
|
"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_cron_expression_presets": "Cron-Expression Voreinstellungen",
|
||||||
"library_deleted": "Bibliothek gelöscht",
|
"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_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_description": "Regelmäßiges Durchsuchen der Bibliothek einstellen",
|
||||||
"library_scanning_enable_description": "Regelmäßiges Scannen der Bibliothek aktivieren",
|
"library_scanning_enable_description": "Regelmäßiges Scannen der Bibliothek aktivieren",
|
||||||
"library_settings": "Externe Bibliothek",
|
"library_settings": "Externe Bibliothek",
|
||||||
@@ -104,12 +104,12 @@
|
|||||||
"library_watching_settings": "Bibliotheksüberwachung (EXPERIMENTELL)",
|
"library_watching_settings": "Bibliotheksüberwachung (EXPERIMENTELL)",
|
||||||
"library_watching_settings_description": "Automatisch auf geänderte Dateien prüfen",
|
"library_watching_settings_description": "Automatisch auf geänderte Dateien prüfen",
|
||||||
"logging_enable_description": "Aktiviere Logging",
|
"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",
|
"logging_settings": "Protokollierung",
|
||||||
"machine_learning_clip_model": "CLIP-Modell",
|
"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_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": "Duplikats-Erkennung",
|
"machine_learning_duplicate_detection": "Duplikaterkennung",
|
||||||
"machine_learning_duplicate_detection_enabled": "Duplikat-Erkennung aktivieren",
|
"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_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_duplicate_detection_setting_description": "Verwendung von CLIP-Embeddings zum Erkennen möglicher Duplikate",
|
||||||
"machine_learning_enabled": "Maschinelles Lernen aktivieren",
|
"machine_learning_enabled": "Maschinelles Lernen aktivieren",
|
||||||
@@ -117,21 +117,21 @@
|
|||||||
"machine_learning_facial_recognition": "Gesichtsidentifikation",
|
"machine_learning_facial_recognition": "Gesichtsidentifikation",
|
||||||
"machine_learning_facial_recognition_description": "Erkenne, identifiziere und gruppiere Gesichter in Bildern",
|
"machine_learning_facial_recognition_description": "Erkenne, identifiziere und gruppiere Gesichter in Bildern",
|
||||||
"machine_learning_facial_recognition_model": "Gesichtserkennungs-Modell",
|
"machine_learning_facial_recognition_model": "Gesichtserkennungs-Modell",
|
||||||
"machine_learning_facial_recognition_model_description": "Die Modelle sind in absteigender Reihenfolge ihrer Größe aufgeführt. Größere Modelle sind langsamer und verbrauchen mehr Speicher, liefern aber bessere Ergebnisse. Bitte beachte dabei, dass du 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": "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_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": "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": "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_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": "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_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": "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": "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": "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": "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_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",
|
"machine_learning_url_description": "Server-URL für maschinelles Lernen",
|
||||||
@@ -139,31 +139,31 @@
|
|||||||
"manage_log_settings": "Log-Einstellungen verwalten",
|
"manage_log_settings": "Log-Einstellungen verwalten",
|
||||||
"map_dark_style": "Dunkler Stil",
|
"map_dark_style": "Dunkler Stil",
|
||||||
"map_enable_description": "Kartenfunktionen aktivieren",
|
"map_enable_description": "Kartenfunktionen aktivieren",
|
||||||
"map_gps_settings": "Karten & GPS Einstellungen",
|
"map_gps_settings": "Karten- & GPS-Einstellungen",
|
||||||
"map_gps_settings_description": "Karten & GPS Einstellungen verwalten",
|
"map_gps_settings_description": "Karten- & GPS-Einstellungen verwalten",
|
||||||
"map_implications": "Die Kartenfunktion verwendet einen externen Tile-Service (tiles.immich.cloud)",
|
"map_implications": "Die Kartenfunktion verwendet einen externen Tile-Service (tiles.immich.cloud)",
|
||||||
"map_light_style": "Heller Stil",
|
"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": "Umgekehrte Geokodierung",
|
||||||
"map_reverse_geocoding_enable_description": "Umgekehrte Geokodierung aktivieren",
|
"map_reverse_geocoding_enable_description": "Umgekehrte Geokodierung aktivieren",
|
||||||
"map_reverse_geocoding_settings": "Einstellungen für Umgekehrte Geokodierung",
|
"map_reverse_geocoding_settings": "Einstellungen für umgekehrte Geokodierung",
|
||||||
"map_settings": "Karten",
|
"map_settings": "Karte",
|
||||||
"map_settings_description": "Karten- und GPS Einstellungen verwalten",
|
"map_settings_description": "Karten- und GPS-Einstellungen verwalten",
|
||||||
"map_style_description": "URL zu einem style.json Karten-Theme",
|
"map_style_description": "URL zu einem style.json Karten-Theme",
|
||||||
"metadata_extraction_job": "Metadaten extrahieren",
|
"metadata_extraction_job": "Metadaten extrahieren",
|
||||||
"metadata_extraction_job_description": "Extrahieren von Metadaten, wie zum Beispiel GPS, Gesichtern und Auflösung aus jeder Datei",
|
"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": "Import von Gesichtern aktivieren",
|
||||||
"metadata_faces_import_setting_description": "Gesichter aus EXIF Daten des Bildes und Sidecar Dateien importieren",
|
"metadata_faces_import_setting_description": "Gesichter aus EXIF-Daten des Bildes und Sidecar-Dateien importieren",
|
||||||
"metadata_settings": "Metadaten Einstellungen",
|
"metadata_settings": "Metadaten-Einstellungen",
|
||||||
"metadata_settings_description": "Metadaten Einstellungen verwalten",
|
"metadata_settings_description": "Metadaten-Einstellungen verwalten",
|
||||||
"migration_job": "Migration",
|
"migration_job": "Migration",
|
||||||
"migration_job_description": "Diese Aufgabe migriert Miniaturansichten für Dateien und Gesichter in die neueste Ordnerstruktur",
|
"migration_job_description": "Diese Aufgabe migriert Miniaturansichten für Dateien und Gesichter in die neueste Ordnerstruktur",
|
||||||
"no_paths_added": "Keine Pfade hinzugefügt",
|
"no_paths_added": "Keine Pfade hinzugefügt",
|
||||||
"no_pattern_added": "Kein Pattern hinzugefügt",
|
"no_pattern_added": "Kein Ausschlussmuster hinzugefügt",
|
||||||
"note_apply_storage_label_previous_assets": "Hinweis: Um das Storage Label auf die vorher hochgeladenen Dateien anzuwenden, starte den",
|
"note_apply_storage_label_previous_assets": "Hinweis: Um den Speicherpfad auf die vorher hochgeladenen Dateien anzuwenden, starte den",
|
||||||
"note_cannot_be_changed_later": "HINWEIS: Dies kann später nicht mehr geändert werden!",
|
"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",
|
"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_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_host_description": "Host des E-Mail-Servers (z.B. smtp.immich.app)",
|
||||||
"notification_email_ignore_certificate_errors": "Ignoriere Zertifikats-Fehler",
|
"notification_email_ignore_certificate_errors": "Ignoriere Zertifikats-Fehler",
|
||||||
@@ -178,13 +178,13 @@
|
|||||||
"notification_email_username_description": "Benutzername, der bei der Anmeldung am E-Mail-Server verwendet wird",
|
"notification_email_username_description": "Benutzername, der bei der Anmeldung am E-Mail-Server verwendet wird",
|
||||||
"notification_enable_email_notifications": "E-Mail-Benachrichtigungen aktivieren",
|
"notification_enable_email_notifications": "E-Mail-Benachrichtigungen aktivieren",
|
||||||
"notification_settings": "Benachrichtigungseinstellungen",
|
"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": "Auto-Start",
|
||||||
"oauth_auto_launch_description": "Automatischer Start des OAuth-Anmeldevorgangs beim Aufrufen der Anmeldeseite",
|
"oauth_auto_launch_description": "Automatischer Start des OAuth-Anmeldevorgangs beim Aufrufen der Anmeldeseite",
|
||||||
"oauth_auto_register": "Automatische Registrierung",
|
"oauth_auto_register": "Automatische Registrierung",
|
||||||
"oauth_auto_register_description": "Automatische Registrierung neuer Benutzer nach der OAuth-Anmeldung",
|
"oauth_auto_register_description": "Automatische Registrierung neuer Benutzer nach der OAuth-Anmeldung",
|
||||||
"oauth_button_text": "Button Text",
|
"oauth_button_text": "Button-Text",
|
||||||
"oauth_client_id": "Client ID",
|
"oauth_client_id": "Client-ID",
|
||||||
"oauth_client_secret": "Client-Geheimnis",
|
"oauth_client_secret": "Client-Geheimnis",
|
||||||
"oauth_enable_description": "Anmeldung mit OAuth",
|
"oauth_enable_description": "Anmeldung mit OAuth",
|
||||||
"oauth_issuer_url": "Aussteller-URL",
|
"oauth_issuer_url": "Aussteller-URL",
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
"oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben",
|
"oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben",
|
||||||
"oauth_mobile_redirect_uri_override_description": "Einschalten, wenn der OAuth-Provider keine mobile URI wie '{callback}' erlaubt",
|
"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": "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_scope": "Umfang",
|
||||||
"oauth_settings": "OAuth",
|
"oauth_settings": "OAuth",
|
||||||
"oauth_settings_description": "OAuth-Anmeldeeinstellungen verwalten",
|
"oauth_settings_description": "OAuth-Anmeldeeinstellungen verwalten",
|
||||||
@@ -203,11 +203,11 @@
|
|||||||
"oauth_storage_quota_claim": "Speicherkontingentangabe",
|
"oauth_storage_quota_claim": "Speicherkontingentangabe",
|
||||||
"oauth_storage_quota_claim_description": "Setzen Sie das Speicherkontingent des Benutzers automatisch auf den angegebenen Wert.",
|
"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": "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": "Offline-Pfade",
|
||||||
"offline_paths_description": "Die Ergebnisse könnten durch manuelles Löschen von Dateien, die nicht Teil einer externen Bibliothek sind, verursacht sein.",
|
"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_enable_description": "Login mit E-Mail und Passwort",
|
||||||
"password_settings": "Passwort Login",
|
"password_settings": "Passwort-Login",
|
||||||
"password_settings_description": "Passwort-Anmeldeeinstellungen verwalten",
|
"password_settings_description": "Passwort-Anmeldeeinstellungen verwalten",
|
||||||
"paths_validated_successfully": "Alle Pfade wurden erfolgreich validiert",
|
"paths_validated_successfully": "Alle Pfade wurden erfolgreich validiert",
|
||||||
"person_cleanup_job": "Personen aufräumen",
|
"person_cleanup_job": "Personen aufräumen",
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
"scanning_library": "Bibliothek scannen",
|
"scanning_library": "Bibliothek scannen",
|
||||||
"scanning_library_for_changed_files": "Untersuche Bibliothek auf geänderte Dateien",
|
"scanning_library_for_changed_files": "Untersuche Bibliothek auf geänderte Dateien",
|
||||||
"scanning_library_for_new_files": "Untersuche Bibliothek auf neue 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",
|
"send_welcome_email": "Begrüssungsmail senden",
|
||||||
"server_external_domain_settings": "Externe Domain",
|
"server_external_domain_settings": "Externe Domain",
|
||||||
"server_external_domain_settings_description": "Domäne für öffentlich freigegebene Links, einschließlich http(s)://",
|
"server_external_domain_settings_description": "Domäne für öffentlich freigegebene Links, einschließlich http(s)://",
|
||||||
@@ -236,7 +236,7 @@
|
|||||||
"sidecar_job": "Filialdatei-Metadaten",
|
"sidecar_job": "Filialdatei-Metadaten",
|
||||||
"sidecar_job_description": "Durch diese Aufgabe werden Filialdatei-Metadaten im Dateisystem entdeckt oder synchronisiert",
|
"sidecar_job_description": "Durch diese Aufgabe werden Filialdatei-Metadaten im Dateisystem entdeckt oder synchronisiert",
|
||||||
"slideshow_duration_description": "Dauer der Anzeige jedes Bildes in Sekunden",
|
"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_description": "Der Erstellungszeitstempel der Datei wird für die Datums- und Uhrzeitinformation verwendet",
|
||||||
"storage_template_date_time_sample": "Beispielzeitpunkt {date}",
|
"storage_template_date_time_sample": "Beispielzeitpunkt {date}",
|
||||||
"storage_template_enable_description": "Speichervorlagen-Engine aktivieren",
|
"storage_template_enable_description": "Speichervorlagen-Engine aktivieren",
|
||||||
@@ -245,13 +245,13 @@
|
|||||||
"storage_template_migration": "Migration von Speichervorlagen",
|
"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_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_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_migration_job": "Speichervorlagenmigrations-Aufgabe",
|
||||||
"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_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_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": "Speichervorlage",
|
||||||
"storage_template_settings_description": "Die Ordnerstruktur und den Dateinamen der hochgeladenen Datei verwalten",
|
"storage_template_settings_description": "Die Ordnerstruktur und den Dateinamen der hochgeladenen Datei verwalten",
|
||||||
"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",
|
"system_settings": "Systemeinstellungen",
|
||||||
"tag_cleanup_job": "Tags aufräumen",
|
"tag_cleanup_job": "Tags aufräumen",
|
||||||
"theme_custom_css_settings": "Benutzerdefiniertes CSS",
|
"theme_custom_css_settings": "Benutzerdefiniertes CSS",
|
||||||
@@ -287,7 +287,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Hardware-Beschleunigung",
|
"transcoding_hardware_acceleration": "Hardware-Beschleunigung",
|
||||||
"transcoding_hardware_acceleration_description": "Experimentell; viel schneller, aber bei gleicher Bitrate mit geringerer Qualität",
|
"transcoding_hardware_acceleration_description": "Experimentell; viel schneller, aber bei gleicher Bitrate mit geringerer Qualität",
|
||||||
"transcoding_hardware_decoding": "Hardware-Dekodierung",
|
"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_hevc_codec": "HEVC-Codec",
|
||||||
"transcoding_max_b_frames": "Maximale B-Frames",
|
"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.",
|
"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.",
|
||||||
@@ -327,7 +327,7 @@
|
|||||||
"trash_settings": "Papierkorb-Einstellungen",
|
"trash_settings": "Papierkorb-Einstellungen",
|
||||||
"trash_settings_description": "Papierkorb-Einstellungen verwalten",
|
"trash_settings_description": "Papierkorb-Einstellungen verwalten",
|
||||||
"untracked_files": "Unverfolgte Dateien",
|
"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_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": "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",
|
"user_delete_delay_settings": "Verzögerung für das Löschen von Benutzern",
|
||||||
@@ -360,12 +360,12 @@
|
|||||||
"album_added_notification_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn du zu einem freigegebenen Album hinzugefügt wurdest",
|
"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_cover_updated": "Album-Cover aktualisiert",
|
||||||
"album_delete_confirmation": "Bist du sicher, dass du das Album {album} löschen willst?",
|
"album_delete_confirmation": "Bist du sicher, dass du das Album {album} löschen willst?",
|
||||||
"album_delete_confirmation_description": "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_info_updated": "Album-Infos aktualisiert",
|
||||||
"album_leave": "Album verlassen?",
|
"album_leave": "Album verlassen?",
|
||||||
"album_leave_confirmation": "Bist du sicher, dass du das Album {album} verlassen willst?",
|
"album_leave_confirmation": "Bist du sicher, dass du das Album {album} verlassen willst?",
|
||||||
"album_name": "Album Name",
|
"album_name": "Albumname",
|
||||||
"album_options": "Album Optionen",
|
"album_options": "Albumoptionen",
|
||||||
"album_remove_user": "Nutzer entfernen?",
|
"album_remove_user": "Nutzer entfernen?",
|
||||||
"album_remove_user_confirmation": "Bist du sicher, dass du {user} entfernen willst?",
|
"album_remove_user_confirmation": "Bist du sicher, dass du {user} entfernen willst?",
|
||||||
"album_share_no_users": "Es sieht so aus, als hättest du dieses Album mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.",
|
"album_share_no_users": "Es sieht so aus, als hättest du dieses Album mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.",
|
||||||
@@ -373,7 +373,7 @@
|
|||||||
"album_updated_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn ein freigegebenes Album neue Dateien enthält",
|
"album_updated_setting_description": "Erhalte eine E-Mail-Benachrichtigung, wenn ein freigegebenes Album neue Dateien enthält",
|
||||||
"album_user_left": "{album} verlassen",
|
"album_user_left": "{album} verlassen",
|
||||||
"album_user_removed": "{user} entfernt",
|
"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": "Alben",
|
||||||
"albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Alben}}",
|
"albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Alben}}",
|
||||||
"all": "Alle",
|
"all": "Alle",
|
||||||
@@ -396,7 +396,7 @@
|
|||||||
"archive_size": "Archivgröße",
|
"archive_size": "Archivgröße",
|
||||||
"archive_size_description": "Archivgröße für Downloads konfigurieren (in GiB)",
|
"archive_size_description": "Archivgröße für Downloads konfigurieren (in GiB)",
|
||||||
"archived": "Archiviert",
|
"archived": "Archiviert",
|
||||||
"archived_count": "{count, plural, other {# Archiviert}}",
|
"archived_count": "{count, plural, other {# archiviert}}",
|
||||||
"are_these_the_same_person": "Ist das dieselbe Person?",
|
"are_these_the_same_person": "Ist das dieselbe Person?",
|
||||||
"are_you_sure_to_do_this": "Bist du sicher, dass du das tun willst?",
|
"are_you_sure_to_do_this": "Bist du sicher, dass du das tun willst?",
|
||||||
"asset_added_to_album": "Zum Album hinzugefügt",
|
"asset_added_to_album": "Zum Album hinzugefügt",
|
||||||
@@ -414,7 +414,7 @@
|
|||||||
"assets": "Dateien",
|
"assets": "Dateien",
|
||||||
"assets_added_count": "{count, plural, one {# Datei} other {# Dateien}} hinzugefügt",
|
"assets_added_count": "{count, plural, one {# Datei} other {# Dateien}} hinzugefügt",
|
||||||
"assets_added_to_album_count": "{count, plural, one {# Datei} other {# Dateien}} zum Album hinzugefügt",
|
"assets_added_to_album_count": "{count, plural, one {# Datei} other {# Dateien}} zum Album hinzugefügt",
|
||||||
"assets_added_to_name_count": "{count, plural, one {# Element} other {# Elemente}} zu {hasName, select, true {<b>{name}</b>} other {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_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, 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_moved_to_trash_count": "{count, plural, one {# Datei} other {# Dateien}} in den Papierkorb verschoben",
|
||||||
@@ -427,16 +427,16 @@
|
|||||||
"authorized_devices": "Verwendete Geräte",
|
"authorized_devices": "Verwendete Geräte",
|
||||||
"back": "Zurück",
|
"back": "Zurück",
|
||||||
"back_close_deselect": "Zurück, Schließen oder Abwählen",
|
"back_close_deselect": "Zurück, Schließen oder Abwählen",
|
||||||
"backward": "Zurück",
|
"backward": "Rückwärts",
|
||||||
"birthdate_saved": "Geburtsdatum erfolgreich gespeichert",
|
"birthdate_saved": "Geburtsdatum erfolgreich gespeichert",
|
||||||
"birthdate_set_description": "Das Geburtsdatum wird verwendet, um das Alter dieser Person zum Zeitpunkt eines Fotos zu berechnen.",
|
"birthdate_set_description": "Das Geburtsdatum wird verwendet, um das Alter dieser Person zum Zeitpunkt eines Fotos zu berechnen.",
|
||||||
"blurred_background": "Unscharfer Hintergrund",
|
"blurred_background": "Unscharfer Hintergrund",
|
||||||
"bugs_and_feature_requests": "Fehler & Verbesserungsvorschläge",
|
"bugs_and_feature_requests": "Fehler & Verbesserungsvorschläge",
|
||||||
"build": "Build",
|
"build": "Build",
|
||||||
"build_image": "Build Abbild",
|
"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_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",
|
"buy": "Immich erwerben",
|
||||||
"camera": "Kamera",
|
"camera": "Kamera",
|
||||||
"camera_brand": "Kamera-Marke",
|
"camera_brand": "Kamera-Marke",
|
||||||
@@ -455,7 +455,7 @@
|
|||||||
"change_location": "Ort ändern",
|
"change_location": "Ort ändern",
|
||||||
"change_name": "Name ändern",
|
"change_name": "Name ändern",
|
||||||
"change_name_successfully": "Name wurde erfolgreich geändert",
|
"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_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",
|
"change_your_password": "Ändere dein Passwort",
|
||||||
"changed_visibility_successfully": "Die Sichtbarkeit wurde erfolgreich geändert",
|
"changed_visibility_successfully": "Die Sichtbarkeit wurde erfolgreich geändert",
|
||||||
@@ -471,11 +471,11 @@
|
|||||||
"clockwise": "Im Uhrzeigersinn",
|
"clockwise": "Im Uhrzeigersinn",
|
||||||
"close": "Schließen",
|
"close": "Schließen",
|
||||||
"collapse": "Zusammenklappen",
|
"collapse": "Zusammenklappen",
|
||||||
"collapse_all": "Alles aufklappen",
|
"collapse_all": "Alle zusammenklappen",
|
||||||
"color": "Farbe",
|
"color": "Farbe",
|
||||||
"color_theme": "Farb-Theme",
|
"color_theme": "Farb-Theme",
|
||||||
"comment_deleted": "Kommentar gelöscht",
|
"comment_deleted": "Kommentar gelöscht",
|
||||||
"comment_options": "Kommentar-Optionen",
|
"comment_options": "Kommentaroptionen",
|
||||||
"comments_and_likes": "Kommentare & Likes",
|
"comments_and_likes": "Kommentare & Likes",
|
||||||
"comments_are_disabled": "Kommentare sind deaktiviert",
|
"comments_are_disabled": "Kommentare sind deaktiviert",
|
||||||
"confirm": "Bestätigen",
|
"confirm": "Bestätigen",
|
||||||
@@ -486,7 +486,7 @@
|
|||||||
"context": "Kontext",
|
"context": "Kontext",
|
||||||
"continue": "Fortsetzen",
|
"continue": "Fortsetzen",
|
||||||
"copied_image_to_clipboard": "Das Bild wurde in die Zwischenablage kopiert.",
|
"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_error": "Kopier-Fehler",
|
||||||
"copy_file_path": "Dateipfad kopieren",
|
"copy_file_path": "Dateipfad kopieren",
|
||||||
"copy_image": "Bild kopieren",
|
"copy_image": "Bild kopieren",
|
||||||
@@ -507,7 +507,7 @@
|
|||||||
"create_new_person_hint": "Ausgewählte Dateien einer neuen Person zuweisen",
|
"create_new_person_hint": "Ausgewählte Dateien einer neuen Person zuweisen",
|
||||||
"create_new_user": "Neuen Nutzer erstellen",
|
"create_new_user": "Neuen Nutzer erstellen",
|
||||||
"create_tag": "Tag 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",
|
"create_user": "Nutzer erstellen",
|
||||||
"created": "Erstellt",
|
"created": "Erstellt",
|
||||||
"current_device": "Aktuelles Gerät",
|
"current_device": "Aktuelles Gerät",
|
||||||
@@ -548,16 +548,16 @@
|
|||||||
"display_options": "Anzeigeoptionen",
|
"display_options": "Anzeigeoptionen",
|
||||||
"display_order": "Anzeigereihenfolge",
|
"display_order": "Anzeigereihenfolge",
|
||||||
"display_original_photos": "Originale Fotos anzeigen",
|
"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",
|
"do_not_show_again": "Diese Nachricht nicht erneut anzeigen",
|
||||||
"documentation": "Dokumentation",
|
"documentation": "Dokumentation",
|
||||||
"done": "Fertig",
|
"done": "Fertig",
|
||||||
"download": "Download",
|
"download": "Herunterladen",
|
||||||
"download_include_embedded_motion_videos": "Eingebettete Videos",
|
"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_include_embedded_motion_videos_description": "Videos, die in Bewegungsfotos eingebettet sind, als separate Datei einfügen",
|
||||||
"download_settings": "Download",
|
"download_settings": "Download",
|
||||||
"download_settings_description": "Einstellungen für den Dateidownload verwalten",
|
"download_settings_description": "Einstellungen für das Herunterladen von Dateien verwalten",
|
||||||
"downloading": "Downloaden",
|
"downloading": "Herunterladen",
|
||||||
"downloading_asset_filename": "Datei {filename} wird heruntergeladen",
|
"downloading_asset_filename": "Datei {filename} wird heruntergeladen",
|
||||||
"drop_files_to_upload": "Lade Dateien hoch, indem du sie hierhin ziehst",
|
"drop_files_to_upload": "Lade Dateien hoch, indem du sie hierhin ziehst",
|
||||||
"duplicates": "Duplikate",
|
"duplicates": "Duplikate",
|
||||||
@@ -589,10 +589,10 @@
|
|||||||
"edit_user": "Nutzer bearbeiten",
|
"edit_user": "Nutzer bearbeiten",
|
||||||
"edited": "Bearbeitet",
|
"edited": "Bearbeitet",
|
||||||
"editor": "Bearbeiter",
|
"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_close_without_save_title": "Editor schließen?",
|
||||||
"editor_crop_tool_h2_aspect_ratios": "Seitenverhältnisse",
|
"editor_crop_tool_h2_aspect_ratios": "Seitenverhältnisse",
|
||||||
"editor_crop_tool_h2_rotation": "Rotation",
|
"editor_crop_tool_h2_rotation": "Drehung",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
"empty": "Leer",
|
"empty": "Leer",
|
||||||
"empty_album": "Leeres Album",
|
"empty_album": "Leeres Album",
|
||||||
@@ -639,7 +639,7 @@
|
|||||||
"incorrect_email_or_password": "Ungültige E-Mail oder Passwort",
|
"incorrect_email_or_password": "Ungültige E-Mail oder Passwort",
|
||||||
"paths_validation_failed": "{paths, plural, one {# Pfad konnte} other {# Pfade konnten}} nicht validiert werden",
|
"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.",
|
"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",
|
"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_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",
|
"unable_to_add_assets_to_shared_link": "Datei konnte nicht zum geteilten Link hinzugefügt werden",
|
||||||
@@ -661,7 +661,7 @@
|
|||||||
"unable_to_complete_oauth_login": "OAuth-Anmeldung konnte nicht abgeschlossen werden",
|
"unable_to_complete_oauth_login": "OAuth-Anmeldung konnte nicht abgeschlossen werden",
|
||||||
"unable_to_connect": "Verbindung konnte nicht hergestellt werden",
|
"unable_to_connect": "Verbindung konnte nicht hergestellt werden",
|
||||||
"unable_to_connect_to_server": "Verbindung zum Server 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_admin_account": "Administratorkonto konnte nicht erstellt werden",
|
||||||
"unable_to_create_api_key": "Es konnte kein API-Schlüssel erstellt werden",
|
"unable_to_create_api_key": "Es konnte kein API-Schlüssel erstellt werden",
|
||||||
"unable_to_create_library": "Bibliothek konnte nicht erstellt werden",
|
"unable_to_create_library": "Bibliothek konnte nicht erstellt werden",
|
||||||
@@ -682,7 +682,7 @@
|
|||||||
"unable_to_get_comments_number": "Anzahl der Kommentare konnte nicht abgerufen werden",
|
"unable_to_get_comments_number": "Anzahl der Kommentare konnte nicht abgerufen werden",
|
||||||
"unable_to_get_shared_link": "Fehler beim Abrufen des Freigabelinks",
|
"unable_to_get_shared_link": "Fehler beim Abrufen des Freigabelinks",
|
||||||
"unable_to_hide_person": "Person kann nicht versteckt werden",
|
"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_link_oauth_account": "OAuth-Konto kann nicht verknüpft werden",
|
||||||
"unable_to_load_album": "Album kann nicht geladen werden",
|
"unable_to_load_album": "Album kann nicht geladen werden",
|
||||||
"unable_to_load_asset_activity": "Foto-Aktivität konnte nicht geladen werden",
|
"unable_to_load_asset_activity": "Foto-Aktivität konnte nicht geladen werden",
|
||||||
@@ -720,10 +720,10 @@
|
|||||||
"unable_to_scan_library": "Bibliothek konnte nicht gescannt werden",
|
"unable_to_scan_library": "Bibliothek konnte nicht gescannt werden",
|
||||||
"unable_to_set_feature_photo": "Hauptfoto konnte nicht festgelegt werden",
|
"unable_to_set_feature_photo": "Hauptfoto konnte nicht festgelegt werden",
|
||||||
"unable_to_set_profile_picture": "Profilbild konnte nicht gesetzt 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_trash_asset": "Objekte konnten nicht gelöscht werden",
|
||||||
"unable_to_unlink_account": "Die Verknüpfung des Kontos kann nicht aufgehoben 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_cover": "Album-Cover konnte nicht aktualisiert werden",
|
||||||
"unable_to_update_album_info": "Album-Info 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",
|
"unable_to_update_library": "Die Bibliothek konnte nicht aktualisiert werden",
|
||||||
@@ -739,7 +739,7 @@
|
|||||||
"every_six_hours": "Alle 6 Stunden",
|
"every_six_hours": "Alle 6 Stunden",
|
||||||
"exif": "EXIF",
|
"exif": "EXIF",
|
||||||
"exit_slideshow": "Diashow beenden",
|
"exit_slideshow": "Diashow beenden",
|
||||||
"expand_all": "Alle erweitern",
|
"expand_all": "Alle aufklappen",
|
||||||
"expire_after": "Verfällt nach",
|
"expire_after": "Verfällt nach",
|
||||||
"expired": "Verfallen",
|
"expired": "Verfallen",
|
||||||
"expires_date": "Läuft am {date} ab",
|
"expires_date": "Läuft am {date} ab",
|
||||||
@@ -771,9 +771,9 @@
|
|||||||
"folders": "Ordner",
|
"folders": "Ordner",
|
||||||
"folders_feature_description": "Durchsuchen der Ordneransicht für Fotos und Videos im Dateisystem",
|
"folders_feature_description": "Durchsuchen der Ordneransicht für Fotos und Videos im Dateisystem",
|
||||||
"force_re-scan_library_files": "Erzwingen des erneuten Scannens aller Bibliotheksdateien",
|
"force_re-scan_library_files": "Erzwingen des erneuten Scannens aller Bibliotheksdateien",
|
||||||
"forward": "Weiterleiten",
|
"forward": "Vorwärts",
|
||||||
"general": "Allgemein",
|
"general": "Allgemein",
|
||||||
"get_help": "Erhalte Hilfe",
|
"get_help": "Hilfe erhalten",
|
||||||
"getting_started": "Erste Schritte",
|
"getting_started": "Erste Schritte",
|
||||||
"go_back": "Zurück",
|
"go_back": "Zurück",
|
||||||
"go_to_search": "Zur Suche gehen",
|
"go_to_search": "Zur Suche gehen",
|
||||||
@@ -808,7 +808,7 @@
|
|||||||
"image_taken": "{isVideo, select, true {Video aufgenommen} other {Bild aufgenommen}}",
|
"image_taken": "{isVideo, select, true {Video aufgenommen} other {Bild aufgenommen}}",
|
||||||
"img": "Img",
|
"img": "Img",
|
||||||
"immich_logo": "Immich-Logo",
|
"immich_logo": "Immich-Logo",
|
||||||
"immich_web_interface": "Immich Webschnittstelle",
|
"immich_web_interface": "Immich-Web-Oberfläche",
|
||||||
"import_from_json": "Aus JSON importieren",
|
"import_from_json": "Aus JSON importieren",
|
||||||
"import_path": "Importpfad",
|
"import_path": "Importpfad",
|
||||||
"in_albums": "In {count, plural, one {# Album} other {# Alben}}",
|
"in_albums": "In {count, plural, one {# Album} other {# Alben}}",
|
||||||
@@ -819,10 +819,10 @@
|
|||||||
"individual_share": "Individuelle Freigabe",
|
"individual_share": "Individuelle Freigabe",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"interval": {
|
"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}}",
|
"hours": "{hours, plural, one {Jede Stunde} other {Alle {hours, number} Stunden}}",
|
||||||
"night_at_midnight": "Täglich um Mitternacht",
|
"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_people": "Personen einladen",
|
||||||
"invite_to_album": "Zum Album einladen",
|
"invite_to_album": "Zum Album einladen",
|
||||||
@@ -869,7 +869,7 @@
|
|||||||
"license_trial_info_4": "Bitte erwäge den Kauf einer Lizenz, um die kontinuierliche Weiterentwicklung des Dienstes zu unterstützen",
|
"license_trial_info_4": "Bitte erwäge den Kauf einer Lizenz, um die kontinuierliche Weiterentwicklung des Dienstes zu unterstützen",
|
||||||
"light": "Hell",
|
"light": "Hell",
|
||||||
"like_deleted": "Like gelöscht",
|
"like_deleted": "Like gelöscht",
|
||||||
"link_motion_video": "Link Bewegungsvideo",
|
"link_motion_video": "Bewegungsvideo verknüpfen",
|
||||||
"link_options": "Link-Optionen",
|
"link_options": "Link-Optionen",
|
||||||
"link_to_oauth": "Link zu OAuth",
|
"link_to_oauth": "Link zu OAuth",
|
||||||
"linked_oauth_account": "Verknüpftes OAuth-Konto",
|
"linked_oauth_account": "Verknüpftes OAuth-Konto",
|
||||||
@@ -888,6 +888,7 @@
|
|||||||
"look": "Erscheinungsbild",
|
"look": "Erscheinungsbild",
|
||||||
"loop_videos": "Loop-Videos",
|
"loop_videos": "Loop-Videos",
|
||||||
"loop_videos_description": "Aktiviere diese Option, um eine automatische Videoschleife in der Detailansicht zu erstellen.",
|
"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",
|
"make": "Marke",
|
||||||
"manage_shared_links": "Freigegebene Links verwalten",
|
"manage_shared_links": "Freigegebene Links verwalten",
|
||||||
"manage_sharing_with_partners": "Gemeinsame Nutzung mit Partnern verwalten",
|
"manage_sharing_with_partners": "Gemeinsame Nutzung mit Partnern verwalten",
|
||||||
@@ -897,8 +898,8 @@
|
|||||||
"manage_your_devices": "Deine eingeloggten Geräte verwalten",
|
"manage_your_devices": "Deine eingeloggten Geräte verwalten",
|
||||||
"manage_your_oauth_connection": "Deine OAuth-Verbindung verwalten",
|
"manage_your_oauth_connection": "Deine OAuth-Verbindung verwalten",
|
||||||
"map": "Karte",
|
"map": "Karte",
|
||||||
"map_marker_for_images": "Kartemarkierung für Bilder, die in {city}, {country} aufgenommen wurden",
|
"map_marker_for_images": "Kartenmarkierung für Bilder, die in {city}, {country} aufgenommen wurden",
|
||||||
"map_marker_with_image": "Kartenmarker mit Bild",
|
"map_marker_with_image": "Kartenmarkierung mit Bild",
|
||||||
"map_settings": "Karteneinstellungen",
|
"map_settings": "Karteneinstellungen",
|
||||||
"matches": "Treffer",
|
"matches": "Treffer",
|
||||||
"media_type": "Medientyp",
|
"media_type": "Medientyp",
|
||||||
@@ -939,9 +940,9 @@
|
|||||||
"no_albums_yet": "Es sieht so aus, als hättest du noch keine Alben.",
|
"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_archived_assets_message": "Archiviere Fotos und Videos, um sie aus deiner Fotoansicht zu entfernen",
|
||||||
"no_assets_message": "KLICKE, UM DEIN ERSTES FOTO HOCHZULADEN",
|
"no_assets_message": "KLICKE, UM DEIN ERSTES FOTO HOCHZULADEN",
|
||||||
"no_duplicates_found": "Keine Duplikate wurden gefunden.",
|
"no_duplicates_found": "Es wurden keine Duplikate gefunden.",
|
||||||
"no_exif_info_available": "Keine Exif-Informationen vorhanden",
|
"no_exif_info_available": "Keine EXIF-Informationen vorhanden",
|
||||||
"no_explore_results_message": "Lade weitere Fotos hoch, um deine Sammlung zu vergrößern.",
|
"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_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_libraries_message": "Eine externe Bibliothek erstellen, um deine Fotos und Videos anzusehen",
|
||||||
"no_name": "Kein Name",
|
"no_name": "Kein Name",
|
||||||
@@ -950,7 +951,7 @@
|
|||||||
"no_results_description": "Versuche es mit einem Synonym oder einem allgemeineren Stichwort",
|
"no_results_description": "Versuche es mit einem Synonym oder einem allgemeineren Stichwort",
|
||||||
"no_shared_albums_message": "Erstelle ein Album, um Fotos und Videos mit Personen in deinem Netzwerk zu teilen",
|
"no_shared_albums_message": "Erstelle ein Album, um Fotos und Videos mit Personen in deinem Netzwerk zu teilen",
|
||||||
"not_in_any_album": "In keinem Album",
|
"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",
|
"note_unlimited_quota": "Hinweis: Verwende 0 für ein unlimitiertes Kontingent",
|
||||||
"notes": "Notizen",
|
"notes": "Notizen",
|
||||||
"notification_toggle_setting_description": "E-Mail-Benachrichtigungen aktivieren",
|
"notification_toggle_setting_description": "E-Mail-Benachrichtigungen aktivieren",
|
||||||
@@ -979,7 +980,7 @@
|
|||||||
"organize_your_library": "Organisiere deine Bibliothek",
|
"organize_your_library": "Organisiere deine Bibliothek",
|
||||||
"original": "Original",
|
"original": "Original",
|
||||||
"other": "Sonstiges",
|
"other": "Sonstiges",
|
||||||
"other_devices": "Sonstige Geräte",
|
"other_devices": "Andere Geräte",
|
||||||
"other_variables": "Sonstige Variablen",
|
"other_variables": "Sonstige Variablen",
|
||||||
"owned": "Eigenes",
|
"owned": "Eigenes",
|
||||||
"owner": "Besitzer",
|
"owner": "Besitzer",
|
||||||
@@ -1006,14 +1007,14 @@
|
|||||||
"pending": "Ausstehend",
|
"pending": "Ausstehend",
|
||||||
"people": "Personen",
|
"people": "Personen",
|
||||||
"people_edits_count": "{count, plural, one {# Person} other {# Personen}} bearbeitet",
|
"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",
|
"people_sidebar_description": "Eine Verknüpfung zu Personen in der Seitenleiste anzeigen",
|
||||||
"perform_library_tasks": "",
|
"perform_library_tasks": "",
|
||||||
"permanent_deletion_warning": "Warnung vor endgültiger Löschung",
|
"permanent_deletion_warning": "Warnung vor endgültiger Löschung",
|
||||||
"permanent_deletion_warning_setting_description": "Anzeige einer Warnung beim permanenten Löschen von Objekten",
|
"permanent_deletion_warning_setting_description": "Anzeige einer Warnung beim permanenten Löschen von Objekten",
|
||||||
"permanently_delete": "Dauerhaft löschen",
|
"permanently_delete": "Dauerhaft löschen",
|
||||||
"permanently_delete_assets_count": "{count, plural, one {Datei} other {Dateien}} dauerhaft gelöscht",
|
"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_asset": "Dauerhaft gelöschtes Objekt",
|
||||||
"permanently_deleted_assets": "{count, plural, one {# Objekt} other {# Objekte}} dauerhaft gelöscht",
|
"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",
|
"permanently_deleted_assets_count": "{count, plural, one {# Datei} other {# Dateien}} dauerhaft gelöscht",
|
||||||
@@ -1024,13 +1025,13 @@
|
|||||||
"photos_and_videos": "Fotos & Videos",
|
"photos_and_videos": "Fotos & 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 von vorherigen Jahren",
|
"photos_from_previous_years": "Fotos von vorherigen Jahren",
|
||||||
"pick_a_location": "Wählen einen Ort",
|
"pick_a_location": "Wähle einen Ort",
|
||||||
"place": "Ort",
|
"place": "Ort",
|
||||||
"places": "Orte",
|
"places": "Orte",
|
||||||
"play": "Abspielen",
|
"play": "Abspielen",
|
||||||
"play_memories": "Erinnerungen abspielen",
|
"play_memories": "Erinnerungen abspielen",
|
||||||
"play_motion_photo": "Bewegte Bilder 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",
|
"point": "Hinweis",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preset": "Voreinstellung",
|
"preset": "Voreinstellung",
|
||||||
@@ -1043,7 +1044,7 @@
|
|||||||
"profile_image_of_user": "Profilbild von {user}",
|
"profile_image_of_user": "Profilbild von {user}",
|
||||||
"profile_picture_set": "Profilbild gesetzt.",
|
"profile_picture_set": "Profilbild gesetzt.",
|
||||||
"public_album": "Öffentliches Album",
|
"public_album": "Öffentliches Album",
|
||||||
"public_share": "Öffentliche Teilung",
|
"public_share": "Öffentliche Freigabe",
|
||||||
"purchase_account_info": "Unterstützer",
|
"purchase_account_info": "Unterstützer",
|
||||||
"purchase_activated_subtitle": "Danke für die Unterstützung von Immich und Open-Source Software",
|
"purchase_activated_subtitle": "Danke für die Unterstützung von Immich und Open-Source Software",
|
||||||
"purchase_activated_time": "Aktiviert am {date, date}",
|
"purchase_activated_time": "Aktiviert am {date, date}",
|
||||||
@@ -1060,22 +1061,22 @@
|
|||||||
"purchase_individual_description_2": "Unterstützerstatus",
|
"purchase_individual_description_2": "Unterstützerstatus",
|
||||||
"purchase_individual_title": "Einzelperson",
|
"purchase_individual_title": "Einzelperson",
|
||||||
"purchase_input_suggestion": "Besitzen Sie bereits einen Produktschlüssel? Bitte geben Sie diesen unten ein",
|
"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_lifetime_description": "Lebenslange Gültigkeit",
|
||||||
"purchase_option_title": "KAUF OPTIONEN",
|
"purchase_option_title": "KAUFOPTIONEN",
|
||||||
"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_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 Entwicklung von Immich zu unterstützen.",
|
"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_panel_title": "Das Projekt unterstützen",
|
||||||
"purchase_per_server": "Pro Server",
|
"purchase_per_server": "Pro Server",
|
||||||
"purchase_per_user": "Pro Benutzer",
|
"purchase_per_user": "Pro Benutzer",
|
||||||
"purchase_remove_product_key": "Produktschlüssel entfernen",
|
"purchase_remove_product_key": "Produktschlüssel entfernen",
|
||||||
"purchase_remove_product_key_prompt": "Sicher, dass der Produktschlüssel entfernt werden soll?",
|
"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": "Server-Produktschlüssel entfernen",
|
||||||
"purchase_remove_server_product_key_prompt": "Sicher, dass der Server Produktschlüssel entfernt werden soll?",
|
"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_1": "Für den gesamten Server",
|
||||||
"purchase_server_description_2": "Unterstützerstatus",
|
"purchase_server_description_2": "Unterstützerstatus",
|
||||||
"purchase_server_title": "Server",
|
"purchase_server_title": "Server",
|
||||||
"purchase_settings_server_activated": "Der Server Produktschlüssel wird durch den Administrator verwaltet",
|
"purchase_settings_server_activated": "Der Server-Produktschlüssel wird durch den Administrator verwaltet",
|
||||||
"range": "Reichweite",
|
"range": "Reichweite",
|
||||||
"rating": "Bewertung",
|
"rating": "Bewertung",
|
||||||
"rating_clear": "Bewertung löschen",
|
"rating_clear": "Bewertung löschen",
|
||||||
@@ -1085,18 +1086,20 @@
|
|||||||
"reaction_options": "Reaktionsmöglichkeiten",
|
"reaction_options": "Reaktionsmöglichkeiten",
|
||||||
"read_changelog": "Changelog lesen",
|
"read_changelog": "Changelog lesen",
|
||||||
"reassign": "Neu zuweisen",
|
"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_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} other {# Dateien}} wurden einer neuen Person 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",
|
"reassing_hint": "Markierte Dateien einer vorhandenen Person zuweisen",
|
||||||
"recent": "Neuste",
|
"recent": "Neuste",
|
||||||
"recent_searches": "Letzte Suchen",
|
"recent_searches": "Letzte Suchen",
|
||||||
"refresh": "Aktualisieren",
|
"refresh": "Aktualisieren",
|
||||||
"refresh_encoded_videos": "Codierte Videos aktualisieren",
|
"refresh_encoded_videos": "Kodierte Videos aktualisieren",
|
||||||
|
"refresh_faces": "Gesichter aktualisieren",
|
||||||
"refresh_metadata": "Metadaten aktualisieren",
|
"refresh_metadata": "Metadaten aktualisieren",
|
||||||
"refresh_thumbnails": "Miniaturansichten aktualisieren",
|
"refresh_thumbnails": "Miniaturansichten aktualisieren",
|
||||||
"refreshed": "Aktualisiert",
|
"refreshed": "Aktualisiert",
|
||||||
"refreshes_every_file": "Alle bestehenden und neuen Dateien erneut einlesen",
|
"refreshes_every_file": "Alle bestehenden und neuen Dateien erneut einlesen",
|
||||||
"refreshing_encoded_video": "Codierte Videos werden aktualisiert",
|
"refreshing_encoded_video": "Kodierte Videos werden aktualisiert",
|
||||||
|
"refreshing_faces": "Gesichter werden aktualisiert",
|
||||||
"refreshing_metadata": "Metadaten werden aktualisiert",
|
"refreshing_metadata": "Metadaten werden aktualisiert",
|
||||||
"regenerating_thumbnails": "Miniaturansichten werden neu erstellt",
|
"regenerating_thumbnails": "Miniaturansichten werden neu erstellt",
|
||||||
"remove": "Entfernen",
|
"remove": "Entfernen",
|
||||||
@@ -1107,12 +1110,12 @@
|
|||||||
"remove_deleted_assets": "Offline-Dateien entfernen",
|
"remove_deleted_assets": "Offline-Dateien entfernen",
|
||||||
"remove_from_album": "Aus Album entfernen",
|
"remove_from_album": "Aus Album entfernen",
|
||||||
"remove_from_favorites": "Aus Favoriten 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",
|
"remove_user": "Nutzer entfernen",
|
||||||
"removed_api_key": "API-Schlüssel {name} wurde entfernt",
|
"removed_api_key": "API-Schlüssel {name} wurde entfernt",
|
||||||
"removed_from_archive": "Aus dem Archiv entfernt",
|
"removed_from_archive": "Aus dem Archiv entfernt",
|
||||||
"removed_from_favorites": "Von Favoriten entfernt",
|
"removed_from_favorites": "Aus den Favoriten entfernt",
|
||||||
"removed_from_favorites_count": "{count, plural, other {#}} von 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",
|
"removed_tagged_assets": "Tag von {count, plural, one {# Datei} other {# Dateien}} entfernt",
|
||||||
"rename": "Umbenennen",
|
"rename": "Umbenennen",
|
||||||
"repair": "Reparatur",
|
"repair": "Reparatur",
|
||||||
@@ -1184,14 +1187,14 @@
|
|||||||
"select_library_owner": "Bibliotheksbesitzer auswählen",
|
"select_library_owner": "Bibliotheksbesitzer auswählen",
|
||||||
"select_new_face": "Neues Gesicht auswählen",
|
"select_new_face": "Neues Gesicht auswählen",
|
||||||
"select_photos": "Fotos auswählen",
|
"select_photos": "Fotos auswählen",
|
||||||
"select_trash_all": "Alle Löschen",
|
"select_trash_all": "Alle löschen",
|
||||||
"selected": "Ausgewählt",
|
"selected": "Ausgewählt",
|
||||||
"selected_count": "{count, plural, other {# ausgewählt}}",
|
"selected_count": "{count, plural, other {# ausgewählt}}",
|
||||||
"send_message": "Nachricht senden",
|
"send_message": "Nachricht senden",
|
||||||
"send_welcome_email": "Begrüssungsmail senden",
|
"send_welcome_email": "Begrüssungsmail senden",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
"server_offline": "Server Offline",
|
"server_offline": "Server offline",
|
||||||
"server_online": "Server Online",
|
"server_online": "Server online",
|
||||||
"server_stats": "Server-Statistiken",
|
"server_stats": "Server-Statistiken",
|
||||||
"server_version": "Server-Version",
|
"server_version": "Server-Version",
|
||||||
"set": "Speichern",
|
"set": "Speichern",
|
||||||
@@ -1206,7 +1209,7 @@
|
|||||||
"shared": "Geteilt",
|
"shared": "Geteilt",
|
||||||
"shared_by": "Geteilt von",
|
"shared_by": "Geteilt von",
|
||||||
"shared_by_user": "Von {user} geteilt",
|
"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_from_partner": "Fotos von {partner}",
|
||||||
"shared_link_options": "Optionen für geteilten Link",
|
"shared_link_options": "Optionen für geteilten Link",
|
||||||
"shared_links": "Geteilte Links",
|
"shared_links": "Geteilte Links",
|
||||||
@@ -1224,7 +1227,7 @@
|
|||||||
"show_gallery": "Galerie anzeigen",
|
"show_gallery": "Galerie anzeigen",
|
||||||
"show_hidden_people": "Ausgeblendete Personen anzeigen",
|
"show_hidden_people": "Ausgeblendete Personen anzeigen",
|
||||||
"show_in_timeline": "In Zeitleiste 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_keyboard_shortcuts": "Tastaturkürzel anzeigen",
|
||||||
"show_metadata": "Metadaten anzeigen",
|
"show_metadata": "Metadaten anzeigen",
|
||||||
"show_or_hide_info": "Informationen ein- oder ausblenden",
|
"show_or_hide_info": "Informationen ein- oder ausblenden",
|
||||||
@@ -1237,7 +1240,7 @@
|
|||||||
"show_supporter_badge_description": "Zeige Unterstützerabzeichen",
|
"show_supporter_badge_description": "Zeige Unterstützerabzeichen",
|
||||||
"shuffle": "Durchmischen",
|
"shuffle": "Durchmischen",
|
||||||
"sidebar": "Seitenleiste",
|
"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_out": "Abmelden",
|
||||||
"sign_up": "Registrieren",
|
"sign_up": "Registrieren",
|
||||||
"size": "Größe",
|
"size": "Größe",
|
||||||
@@ -1245,7 +1248,7 @@
|
|||||||
"skip_to_folders": "Springe zu Ordnern",
|
"skip_to_folders": "Springe zu Ordnern",
|
||||||
"skip_to_tags": "Springe zu Tags",
|
"skip_to_tags": "Springe zu Tags",
|
||||||
"slideshow": "Diashow",
|
"slideshow": "Diashow",
|
||||||
"slideshow_settings": "Diashow Einstellungen",
|
"slideshow_settings": "Diashow-Einstellungen",
|
||||||
"sort_albums_by": "Alben sortieren nach...",
|
"sort_albums_by": "Alben sortieren nach...",
|
||||||
"sort_created": "Erstellungsdatum",
|
"sort_created": "Erstellungsdatum",
|
||||||
"sort_items": "Anzahl der Einträge",
|
"sort_items": "Anzahl der Einträge",
|
||||||
@@ -1253,7 +1256,7 @@
|
|||||||
"sort_oldest": "Ältestes Foto",
|
"sort_oldest": "Ältestes Foto",
|
||||||
"sort_recent": "Neustes Foto",
|
"sort_recent": "Neustes Foto",
|
||||||
"sort_title": "Titel",
|
"sort_title": "Titel",
|
||||||
"source": "Quelle",
|
"source": "Quellcode",
|
||||||
"stack": "Stapel",
|
"stack": "Stapel",
|
||||||
"stack_duplicates": "Duplikate stapeln",
|
"stack_duplicates": "Duplikate stapeln",
|
||||||
"stack_select_one_photo": "Hauptfoto für den Stapel auswählen",
|
"stack_select_one_photo": "Hauptfoto für den Stapel auswählen",
|
||||||
@@ -1268,7 +1271,7 @@
|
|||||||
"stop_photo_sharing": "Deine Fotos nicht mehr teilen?",
|
"stop_photo_sharing": "Deine Fotos nicht mehr teilen?",
|
||||||
"stop_photo_sharing_description": "{partner} wird keinen Zugriff mehr auf deine Fotos haben.",
|
"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",
|
"stop_sharing_photos_with_user": "Aufhören Fotos mit diesem Benutzer zu teilen",
|
||||||
"storage": "Speicher",
|
"storage": "Speicherplatz",
|
||||||
"storage_label": "Speicherpfad",
|
"storage_label": "Speicherpfad",
|
||||||
"storage_usage": "{used} von {available} verwendet",
|
"storage_usage": "{used} von {available} verwendet",
|
||||||
"submit": "Bestätigen",
|
"submit": "Bestätigen",
|
||||||
@@ -1276,7 +1279,7 @@
|
|||||||
"sunrise_on_the_beach": "Sonnenaufgang am Strand",
|
"sunrise_on_the_beach": "Sonnenaufgang am Strand",
|
||||||
"support": "Unterstützung",
|
"support": "Unterstützung",
|
||||||
"support_and_feedback": "Unterstützung & Feedback",
|
"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.",
|
"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",
|
"swap_merge_direction": "Vertauschen der Zusammenführungsrichtung",
|
||||||
"sync": "Synchronisieren",
|
"sync": "Synchronisieren",
|
||||||
"tag": "Tag",
|
"tag": "Tag",
|
||||||
@@ -1301,33 +1304,33 @@
|
|||||||
"to_login": "Anmelden",
|
"to_login": "Anmelden",
|
||||||
"to_parent": "Gehe zum Übergeordneten",
|
"to_parent": "Gehe zum Übergeordneten",
|
||||||
"to_root": "Zur Wurzel",
|
"to_root": "Zur Wurzel",
|
||||||
"to_trash": "Zum Papierkorb verschieben",
|
"to_trash": "In den Papierkorb verschieben",
|
||||||
"toggle_settings": "Einstellungen umschalten",
|
"toggle_settings": "Einstellungen umschalten",
|
||||||
"toggle_theme": "Dunkles Theme umschalten",
|
"toggle_theme": "Dunkles Theme umschalten",
|
||||||
"toggle_visibility": "Sichtbarkeit umschalten",
|
"toggle_visibility": "Sichtbarkeit umschalten",
|
||||||
"total_usage": "Gesamtnutzung",
|
"total_usage": "Gesamtnutzung",
|
||||||
"trash": "Papierkorb",
|
"trash": "Papierkorb",
|
||||||
"trash_all": "Alles im Papierkorb",
|
"trash_all": "Alle löschen",
|
||||||
"trash_count": "Papierkorb {count, number}",
|
"trash_count": "Papierkorb {count, number}",
|
||||||
"trash_delete_asset": "Datei löschen/in den Papierkorb verschieben",
|
"trash_delete_asset": "Datei löschen/in den Papierkorb verschieben",
|
||||||
"trash_no_results_message": "Gelöschte Fotos und Videos werden hier angezeigt.",
|
"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.",
|
"trashed_items_will_be_permanently_deleted_after": "Gelöschte Objekte werden nach {days, plural, one {# Tag} other {# Tagen}} endgültig gelöscht.",
|
||||||
"type": "Typ",
|
"type": "Typ",
|
||||||
"unarchive": "Unarchivieren",
|
"unarchive": "Entarchivieren",
|
||||||
"unarchived": "Unarchiviert",
|
"unarchived": "Unarchiviert",
|
||||||
"unarchived_count": "{count, plural, other {# Entarchiviert}}",
|
"unarchived_count": "{count, plural, other {# entarchiviert}}",
|
||||||
"unfavorite": "Entfavorisieren",
|
"unfavorite": "Entfavorisieren",
|
||||||
"unhide_person": "Person einblenden",
|
"unhide_person": "Person einblenden",
|
||||||
"unknown": "Unbekannt",
|
"unknown": "Unbekannt",
|
||||||
"unknown_album": "Unbekanntes Album",
|
"unknown_album": "Unbekanntes Album",
|
||||||
"unknown_year": "Unbekanntes Jahr",
|
"unknown_year": "Unbekanntes Jahr",
|
||||||
"unlimited": "Unlimitiert",
|
"unlimited": "Unlimitiert",
|
||||||
"unlink_motion_video": "Verlinkung zum Bewegungsvideo aufheben",
|
"unlink_motion_video": "Verknüpfung zum Bewegungsvideo aufheben",
|
||||||
"unlink_oauth": "OAuth entfernen",
|
"unlink_oauth": "OAuth entfernen",
|
||||||
"unlinked_oauth_account": "Nicht verknüpftes OAuth-Konto",
|
"unlinked_oauth_account": "Nicht verknüpftes OAuth-Konto",
|
||||||
"unnamed_album": "Unbenanntes Album",
|
"unnamed_album": "Unbenanntes Album",
|
||||||
"unnamed_album_delete_confirmation": "Bist du sicher, dass du dieses Album löschen willst?",
|
"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",
|
"unsaved_change": "Ungespeicherte Änderung",
|
||||||
"unselect_all": "Alles abwählen",
|
"unselect_all": "Alles abwählen",
|
||||||
"unselect_all_duplicates": "Alle Duplikate abwählen",
|
"unselect_all_duplicates": "Alle Duplikate abwählen",
|
||||||
@@ -1339,7 +1342,7 @@
|
|||||||
"updated_password": "Passwort aktualisiert",
|
"updated_password": "Passwort aktualisiert",
|
||||||
"upload": "Hochladen",
|
"upload": "Hochladen",
|
||||||
"upload_concurrency": "Parallelität beim 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_progress": "{remaining, number} verbleibend - {processed, number}/{total, number} verarbeitet",
|
||||||
"upload_skipped_duplicates": "{count, plural, one {# doppelte Datei} other {# doppelte Dateien}} ausgelassen",
|
"upload_skipped_duplicates": "{count, plural, one {# doppelte Datei} other {# doppelte Dateien}} ausgelassen",
|
||||||
"upload_status_duplicates": "Duplikate",
|
"upload_status_duplicates": "Duplikate",
|
||||||
@@ -1384,7 +1387,7 @@
|
|||||||
"view_stack": "Stapel anzeigen",
|
"view_stack": "Stapel anzeigen",
|
||||||
"viewer": "Zuschauer",
|
"viewer": "Zuschauer",
|
||||||
"visibility_changed": "Sichtbarkeit für {count, plural, one {# Person} other {# Personen}} geändert",
|
"visibility_changed": "Sichtbarkeit für {count, plural, one {# Person} other {# Personen}} geändert",
|
||||||
"waiting": "Warte",
|
"waiting": "Wartend",
|
||||||
"warning": "Warnung",
|
"warning": "Warnung",
|
||||||
"week": "Woche",
|
"week": "Woche",
|
||||||
"welcome": "Willkommen",
|
"welcome": "Willkommen",
|
||||||
@@ -7,10 +7,11 @@
|
|||||||
"actions": "Ενέργειες",
|
"actions": "Ενέργειες",
|
||||||
"active": "Ενεργά",
|
"active": "Ενεργά",
|
||||||
"activity": "Δραστηριότητα",
|
"activity": "Δραστηριότητα",
|
||||||
|
"activity_changed": "Η δραστηριότητα είναι {enabled, select, true {ενεργοποιημένη} other {απενεργοποιημένη}}",
|
||||||
"add": "Προσθήκη",
|
"add": "Προσθήκη",
|
||||||
"add_a_description": "Προσθήκη περιγραφής",
|
"add_a_description": "Προσθήκη περιγραφής",
|
||||||
"add_a_location": "Προσθήκη μιας τοποθεσίας",
|
"add_a_location": "Προσθήκη μιας τοποθεσίας",
|
||||||
"add_a_name": "Προσθήκη Ονόματος",
|
"add_a_name": "Προσθήκη ονόματος",
|
||||||
"add_a_title": "Προσθήκη τίτλου",
|
"add_a_title": "Προσθήκη τίτλου",
|
||||||
"add_exclusion_pattern": "Προσθήκη προτύπου αποκλεισμού",
|
"add_exclusion_pattern": "Προσθήκη προτύπου αποκλεισμού",
|
||||||
"add_import_path": "Προσθήκη διαδρομής εισαγωγής",
|
"add_import_path": "Προσθήκη διαδρομής εισαγωγής",
|
||||||
@@ -27,6 +28,7 @@
|
|||||||
"added_to_favorites_count": "Προστέθηκαν {count, number} στα αγαπημένα",
|
"added_to_favorites_count": "Προστέθηκαν {count, number} στα αγαπημένα",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "Προσθέστε πρότυπα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί μία απόλυτη διαδρομή, χρησιμοποιήστε \"/path/to/ignore/**\".",
|
"add_exclusion_pattern_description": "Προσθέστε πρότυπα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί μία απόλυτη διαδρομή, χρησιμοποιήστε \"/path/to/ignore/**\".",
|
||||||
|
"asset_offline_description": "Αυτό το στοιχείο εξωτερικής βιβλιοθήκης δε βρίσκεται πλέον στο δίσκο και έχει μεταφερθεί στα σκουπίδια. Εάν το αρχείο έχει μετακινηθεί εντός της βιβλιοθήκης, ελέγξτε το χρονοδιάγραμμα σας για το νέο αντίστοιχο στοιχείο. Για να επαναφέρετε αυτό το στοιχείο, βεβαιωθείτε ότι το παρακάτω μονοπάτι αρχείου είναι προσβάσιμο από το Immich και ότι μπορεί να σαρώσει τη βιβλιοθήκη.",
|
||||||
"authentication_settings": "Ρυθμίσεις ελέγχου ταυτότητας",
|
"authentication_settings": "Ρυθμίσεις ελέγχου ταυτότητας",
|
||||||
"authentication_settings_description": "Διαχείριση κωδικού πρόσβασης, OAuth και άλλες ρυθμίσεις ελέγχου ταυτότητας",
|
"authentication_settings_description": "Διαχείριση κωδικού πρόσβασης, OAuth και άλλες ρυθμίσεις ελέγχου ταυτότητας",
|
||||||
"authentication_settings_disable_all": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε όλες τις μεθόδους σύνδεσης; Η σύνδεση θα απενεργοποιηθεί πλήρως.",
|
"authentication_settings_disable_all": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε όλες τις μεθόδους σύνδεσης; Η σύνδεση θα απενεργοποιηθεί πλήρως.",
|
||||||
@@ -40,41 +42,50 @@
|
|||||||
"confirm_email_below": "Για επιβεβαίωση, πληκτρολογήστε \"{email}\" παρακάτω",
|
"confirm_email_below": "Για επιβεβαίωση, πληκτρολογήστε \"{email}\" παρακάτω",
|
||||||
"confirm_reprocess_all_faces": "Είστε βέβαιοι ότι θέλετε να επεξεργαστείτε ξανά όλα τα πρόσωπα; Αυτό θα διαγράψει επίσης άτομα με όνομα.",
|
"confirm_reprocess_all_faces": "Είστε βέβαιοι ότι θέλετε να επεξεργαστείτε ξανά όλα τα πρόσωπα; Αυτό θα διαγράψει επίσης άτομα με όνομα.",
|
||||||
"confirm_user_password_reset": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη {user};",
|
"confirm_user_password_reset": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη {user};",
|
||||||
|
"create_job": "Δημιουργία εργασίας",
|
||||||
"disable_login": "Απενεργοποίηση σύνδεσης κατά την είσοδο",
|
"disable_login": "Απενεργοποίηση σύνδεσης κατά την είσοδο",
|
||||||
"duplicate_detection_job_description": "Εκτελέστε τη εκμάθηση μηχανής σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση",
|
"duplicate_detection_job_description": "Εκτελέστε τη εκμάθηση μηχανής σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση",
|
||||||
"exclusion_pattern_description": "Τα πρότυπα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία κκαι φακέλους όσο σαρώνεται η βιβλιοθήκη. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισαγάγετε, όπως αρχεία RAW.",
|
"exclusion_pattern_description": "Τα πρότυπα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία κκαι φακέλους όσο σαρώνεται η βιβλιοθήκη. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισαγάγετε, όπως αρχεία RAW.",
|
||||||
"external_library_created_at": "Εξωτερική βιβλιοθήκη (δημιουργήθηκε {date})",
|
"external_library_created_at": "Εξωτερική βιβλιοθήκη (δημιουργήθηκε {date})",
|
||||||
"external_library_management": "Διαχείριση Εξωτερικών Βιβλιοθηκών",
|
"external_library_management": "Διαχείριση Εξωτερικών Βιβλιοθηκών",
|
||||||
"face_detection": "Αναγνώριση προσώπου",
|
"face_detection": "Αναγνώριση προσώπου",
|
||||||
"face_detection_description": "Εντοπίστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική εκμάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Όλα\" επεξεργάζεται εκ νέου όλα τα στοιχεία. Η επιλογή \"Όσα Λείπουν\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.",
|
"face_detection_description": "Εντοπίστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική εκμάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Ανανέωση\" επεξεργάζεται εκ νέου όλα τα στοιχεία και η επιλογή \"Επαναφορά\", επιπλέον επαναφέρει ολα τα δεδομένα προσώπου. Η επιλογή \"Όσα Λείπουν\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.",
|
||||||
"facial_recognition_job_description": "Ομαδοποιήστε εντοπισμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση προσώπου. Η επιλογή \"Όλα\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Όσα Λείπουν\" ομαδοποιεί πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.",
|
"facial_recognition_job_description": "Ομαδοποιήστε εντοπισμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση προσώπου. Η επιλογή \"Επαναφορά\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Όσα Λείπουν\" ομαδοποιεί πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.",
|
||||||
"failed_job_command": "Η Εντολή {command} απέτυχε για την εργασία: {job}",
|
"failed_job_command": "Η Εντολή {command} απέτυχε για την εργασία: {job}",
|
||||||
"force_delete_user_warning": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό θα αφαιρέσει άμεσα το χρήστη και όλα τα στοιχεία. Αυτό δεν μπορεί να αναιρεθεί και τα αρχεία δεν μπορούν να ανακτηθούν.",
|
"force_delete_user_warning": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό θα αφαιρέσει άμεσα το χρήστη και όλα τα στοιχεία. Αυτό δεν μπορεί να αναιρεθεί και τα αρχεία δεν μπορούν να ανακτηθούν.",
|
||||||
"forcing_refresh_library_files": "Επιβολή ανανέωσης όλων των αρχείων της βιβλιοθήκης",
|
"forcing_refresh_library_files": "Επιβολή ανανέωσης όλων των αρχείων της βιβλιοθήκης",
|
||||||
|
"image_format": "Μορφή",
|
||||||
"image_format_description": "Η μορφή WebP παράγει μικρότερα αρχεία από τη μορφή JPEG, αλλά είναι πιο αργή στην κωδικοποίηση.",
|
"image_format_description": "Η μορφή WebP παράγει μικρότερα αρχεία από τη μορφή JPEG, αλλά είναι πιο αργή στην κωδικοποίηση.",
|
||||||
"image_prefer_embedded_preview": "Προτίμηση ενσωματωμένης προεπισκόπησης",
|
"image_prefer_embedded_preview": "Προτίμηση ενσωματωμένης προεπισκόπησης",
|
||||||
"image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως εισαγωγή στην επεξεργασία εικόνας όταν είναι διαθέσιμο. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρωματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερα μπιμπίκια λόγω συμπίεσης.",
|
"image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως εισαγωγή στην επεξεργασία εικόνας όταν είναι διαθέσιμο. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρωματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερα μπιμπίκια λόγω συμπίεσης.",
|
||||||
"image_prefer_wide_gamut": "Προτίμηση ευρείας γκάμας",
|
"image_prefer_wide_gamut": "Προτίμηση ευρείας γκάμας",
|
||||||
"image_prefer_wide_gamut_setting_description": "Χρησιμοποιήστε Display P3 για τις μικρογραφίες. Αυτό διατηρεί την ζωντάνια των χρωμάτων σε εικόνες μεγάλου χρωματικού εύρους, αλλά ενδέχεται να εμφανίζονται αλλιώς σε παλαιότερες συσκευές με παλαιότερες εκδόσεις περιηγητών. Οι εικόνες sRGB μένουν ως έχουν για να αποφευχθούν χρωματικές αλλαγές.",
|
"image_prefer_wide_gamut_setting_description": "Χρησιμοποιήστε Display P3 για τις μικρογραφίες. Αυτό διατηρεί την ζωντάνια των χρωμάτων σε εικόνες μεγάλου χρωματικού εύρους, αλλά ενδέχεται να εμφανίζονται αλλιώς σε παλαιότερες συσκευές με παλαιότερες εκδόσεις περιηγητών. Οι εικόνες sRGB μένουν ως έχουν για να αποφευχθούν χρωματικές αλλαγές.",
|
||||||
|
"image_preview_description": "Μεσαίου μεγέθους εικόνες, χωρίς μεταδεδομένα, οι οποίες χρησιμοποιύνται όταν γίνεται θέαση ενός αντικειμένου και για μηχανική μάθηση",
|
||||||
"image_preview_format": "Μορφή προεπισκόπησης",
|
"image_preview_format": "Μορφή προεπισκόπησης",
|
||||||
|
"image_preview_quality_description": "Ποιότητα προεπισκόπησης, απο 1-100. Μεγαλύτερες τιμές είναι καλύτερες, αλλά παράγουν μεγαλύτερα αρχεία που μπορεί να μειώσουν την ταχύτητα της εφαρμογής. Χαμηλές τιμές μπορεί να επηρεάσουν τη ποιότητα του machine learning.",
|
||||||
"image_preview_resolution": "Ανάλυση προεπισκόπησης",
|
"image_preview_resolution": "Ανάλυση προεπισκόπησης",
|
||||||
"image_preview_resolution_description": "Χρησιμοποιείται κατά την προβολή μιας φωτογραφίας και για μηχανική εκμάθηση. Οι υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
"image_preview_resolution_description": "Χρησιμοποιείται κατά την προβολή μιας φωτογραφίας και για μηχανική εκμάθηση. Οι υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
||||||
|
"image_preview_title": "Ρυθμίσεις προεπισκόπισης",
|
||||||
"image_quality": "Ποιότητα",
|
"image_quality": "Ποιότητα",
|
||||||
"image_quality_description": "Ποιότητα εικόνας από 1-100. Μεγαλύτερη τιμή σημαίνει καλύτερη ποιότητα, αλλά παράγει μεγαλύτερα αρχεία. Αυτή η επιλογή επηρεάζει τις εικόνες προεπισκόπησης και μικρογραφιών.",
|
"image_quality_description": "Ποιότητα εικόνας από 1-100. Μεγαλύτερη τιμή σημαίνει καλύτερη ποιότητα, αλλά παράγει μεγαλύτερα αρχεία. Αυτή η επιλογή επηρεάζει τις εικόνες προεπισκόπησης και μικρογραφιών.",
|
||||||
"image_resolution": "Ανάλυση",
|
"image_resolution": "Ανάλυση",
|
||||||
"image_resolution_description": "Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
"image_resolution_description": "Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
||||||
"image_settings": "Ρυθμίσεις Εικόνας",
|
"image_settings": "Ρυθμίσεις Εικόνας",
|
||||||
"image_settings_description": "Διαχείριση της ποιότητας και της ανάλυσης των εικόνων που δημιουργούνται",
|
"image_settings_description": "Διαχείριση της ποιότητας και της ανάλυσης των εικόνων που δημιουργούνται",
|
||||||
|
"image_thumbnail_description": "Μικρό εικονίδιο χωρίς μεταδεδομένα, χρησιμοποιείται όταν γίνεται θέαση ομάδας φωτογραφιών, όπως η κύρια χρονογραμμή",
|
||||||
"image_thumbnail_format": "Μορφή μικρογραφίας",
|
"image_thumbnail_format": "Μορφή μικρογραφίας",
|
||||||
|
"image_thumbnail_quality_description": "Ποιότητα μικρογραφίας, απο 1-100. Μεγαλύτερες τιμές είναι καλύτερες, αλλά παράγουν μεγαλύτερα αρχεία που μπορεί να μειώσουν την ταχύτητα της εφαρμογής.",
|
||||||
"image_thumbnail_resolution": "Ανάλυση μικρογραφίας",
|
"image_thumbnail_resolution": "Ανάλυση μικρογραφίας",
|
||||||
"image_thumbnail_resolution_description": "Χρησιμοποιείται κατά την προβολή ομάδων φωτογραφιών (κύριο χρονολόγιο, προβολή άλμπουμ κλπ.). Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
"image_thumbnail_resolution_description": "Χρησιμοποιείται κατά την προβολή ομάδων φωτογραφιών (κύριο χρονολόγιο, προβολή άλμπουμ κλπ.). Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο για την κωδικοποίηση, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
|
||||||
|
"image_thumbnail_title": "Ρυθμίσεις μικρογραφίας",
|
||||||
"job_concurrency": "{job} συγχρονισμός",
|
"job_concurrency": "{job} συγχρονισμός",
|
||||||
|
"job_created": "Εργασία δημιουργήθηκε",
|
||||||
"job_not_concurrency_safe": "Αυτή η εργασία δεν είναι ασφαλής για ταυτόχρονη εκτέλεση.",
|
"job_not_concurrency_safe": "Αυτή η εργασία δεν είναι ασφαλής για ταυτόχρονη εκτέλεση.",
|
||||||
"job_settings": "Ρυθμίσεις Εργασιών",
|
"job_settings": "Ρυθμίσεις Εργασιών",
|
||||||
"job_settings_description": "Διαχείρηση ταυτόχρονων εργασιών",
|
"job_settings_description": "Διαχείριση ταυτόχρονων εργασιών",
|
||||||
"job_status": "Κατάσταση Εργασιών",
|
"job_status": "Κατάσταση Εργασιών",
|
||||||
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
|
"jobs_delayed": "{jobCount, plural, one {# καθυστέρησε} other {# καθυστέρησαν}}",
|
||||||
"jobs_failed": "{jobCount, plural, other {# failed}}",
|
"jobs_failed": "{jobCount, plural, one {# απέτυχε} other {# απέτυχαν}}",
|
||||||
"library_created": "Δημιουργήθηκε η βιβλιοθήκη: {library}",
|
"library_created": "Δημιουργήθηκε η βιβλιοθήκη: {library}",
|
||||||
"library_cron_expression": "Εκφράσεις Cron",
|
"library_cron_expression": "Εκφράσεις Cron",
|
||||||
"library_cron_expression_description": "Ορισμός των διαστημάτων μεταξύ των σαρώσεων με χρήση cron μορφής. Για περισσότερες πληροφορίες παρακαλώ επισκεφθείτε το π.χ. <link>Crontab Guru</link>",
|
"library_cron_expression_description": "Ορισμός των διαστημάτων μεταξύ των σαρώσεων με χρήση cron μορφής. Για περισσότερες πληροφορίες παρακαλώ επισκεφθείτε το π.χ. <link>Crontab Guru</link>",
|
||||||
@@ -94,8 +105,11 @@
|
|||||||
"logging_level_description": "Όταν είναι ενεργοποιημένο, τι επίπεδο καταγραφής να εφαρμοστεί.",
|
"logging_level_description": "Όταν είναι ενεργοποιημένο, τι επίπεδο καταγραφής να εφαρμοστεί.",
|
||||||
"logging_settings": "Καταγραφή",
|
"logging_settings": "Καταγραφή",
|
||||||
"machine_learning_clip_model": "Μοντέλο CLIP",
|
"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": "Εντοπισμός Διπλότυπων",
|
||||||
"machine_learning_duplicate_detection_enabled": "Ενεργοποίηση εντοπισμού διπλότυπων",
|
"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": "Ενεργοποίηση μηχανικής εκμάθησης",
|
||||||
"machine_learning_enabled_description": "Εάν απενεργοποιηθεί, όλες οι λειτουργίες μηχανικής εκμάθησης θα απενεργοποιηθούν, ανεξάρτητα από τις παρακάτω ρυθμίσεις.",
|
"machine_learning_enabled_description": "Εάν απενεργοποιηθεί, όλες οι λειτουργίες μηχανικής εκμάθησης θα απενεργοποιηθούν, ανεξάρτητα από τις παρακάτω ρυθμίσεις.",
|
||||||
"machine_learning_facial_recognition": "Αναγνώριση προσώπου",
|
"machine_learning_facial_recognition": "Αναγνώριση προσώπου",
|
||||||
@@ -119,16 +133,68 @@
|
|||||||
"machine_learning_smart_search_enabled": "Ενεργοποίηση έξυπνης αναζήτησης",
|
"machine_learning_smart_search_enabled": "Ενεργοποίηση έξυπνης αναζήτησης",
|
||||||
"machine_learning_smart_search_enabled_description": "Αν απενεργοποιηθεί, οι εικόνες δεν θα κωδικοποιούνται για έξυπνη αναζήτηση.",
|
"machine_learning_smart_search_enabled_description": "Αν απενεργοποιηθεί, οι εικόνες δεν θα κωδικοποιούνται για έξυπνη αναζήτηση.",
|
||||||
"machine_learning_url_description": "URL του διακομιστή μηχανικής εκμάθησης",
|
"machine_learning_url_description": "URL του διακομιστή μηχανικής εκμάθησης",
|
||||||
|
"manage_concurrency": "Διαχείριση ταυτόχρονη εκτέλεσης",
|
||||||
"manage_log_settings": "Διαχείριση ρυθμίσεων αρχείου καταγραφής",
|
"manage_log_settings": "Διαχείριση ρυθμίσεων αρχείου καταγραφής",
|
||||||
"map_dark_style": "Σκούρο Θέμα",
|
"map_dark_style": "Σκούρο Θέμα",
|
||||||
"map_enable_description": "Ενεργοποίηση λειτουργιών χάρτη",
|
"map_enable_description": "Ενεργοποίηση λειτουργιών χάρτη",
|
||||||
"map_gps_settings": "Ρυθμίσεις Χάρτη & GPS",
|
"map_gps_settings": "Ρυθμίσεις Χάρτη & GPS",
|
||||||
"map_gps_settings_description": "Διαχείριση Ρυθμίσεων Χάρτη & GPS (Αντίστροφη γεωκωδικοποίηση)",
|
"map_gps_settings_description": "Διαχείριση Ρυθμίσεων Χάρτη & GPS (Αντίστροφη γεωκωδικοποίηση)",
|
||||||
|
"map_implications": "Η λειτουργία χάρτη βασίζεται σε εξωτερικές υπηρεσίες για τα πλακίδια (tiles.immich.cloud)",
|
||||||
"map_light_style": "Φωτεινό Θέμα",
|
"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 για απεριόριστο όριο",
|
"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_restored_count": "Έγινε επαναφορά {count, plural, one {# στοιχείου} other {# στοιχείων}}",
|
||||||
"assets_trashed_count": "Μετακιν. στον κάδο απορριμάτων {count, plural, one {# στοιχείο} other {# στοιχεία}}",
|
"assets_trashed_count": "Μετακιν. στον κάδο απορριμάτων {count, plural, one {# στοιχείο} other {# στοιχεία}}",
|
||||||
"assets_were_part_of_album_count": "{count, plural, one {Το στοιχείο ανήκει} other {Τα στοιχεία ανήκουν}} ήδη στο άλμπουμ",
|
"assets_were_part_of_album_count": "{count, plural, one {Το στοιχείο ανήκει} other {Τα στοιχεία ανήκουν}} ήδη στο άλμπουμ",
|
||||||
@@ -372,6 +438,8 @@
|
|||||||
"purchase_settings_server_activated": "Η διαχείριση του κλειδιού προϊόντος του διακομιστή γίνεται από τον διαχειριστή",
|
"purchase_settings_server_activated": "Η διαχείριση του κλειδιού προϊόντος του διακομιστή γίνεται από τον διαχειριστή",
|
||||||
"reaction_options": "Επιλογές αντίδρασης",
|
"reaction_options": "Επιλογές αντίδρασης",
|
||||||
"read_changelog": "Διαβάστε το Αρχείο Καταγραφής Αλλαγών",
|
"read_changelog": "Διαβάστε το Αρχείο Καταγραφής Αλλαγών",
|
||||||
|
"refresh_faces": "Ανανέωση προσώπων",
|
||||||
|
"refreshing_faces": "Ανανεώνονται πρόσωπα",
|
||||||
"restore_user": "Επαναφορά χρήστη",
|
"restore_user": "Επαναφορά χρήστη",
|
||||||
"retry_upload": "Επανάληψη ανεβάσματος",
|
"retry_upload": "Επανάληψη ανεβάσματος",
|
||||||
"review_duplicates": "Προβολή διπλότυπων",
|
"review_duplicates": "Προβολή διπλότυπων",
|
||||||
@@ -473,9 +541,11 @@
|
|||||||
"sort_recent": "Η πιο πρόσφατη φωτογραφία",
|
"sort_recent": "Η πιο πρόσφατη φωτογραφία",
|
||||||
"sort_title": "Τίτλος",
|
"sort_title": "Τίτλος",
|
||||||
"source": "Πηγή",
|
"source": "Πηγή",
|
||||||
|
"start": "Έναρξη",
|
||||||
"start_date": "Από",
|
"start_date": "Από",
|
||||||
"state": "Νομός",
|
"state": "Νομός",
|
||||||
"status": "Κατάσταση",
|
"status": "Κατάσταση",
|
||||||
|
"stop_motion_photo": "Διέκοψε την Φωτογραφία Κίνησης",
|
||||||
"stop_photo_sharing": "Διακοπή κοινής χρήσης των φωτογραφιών σας;",
|
"stop_photo_sharing": "Διακοπή κοινής χρήσης των φωτογραφιών σας;",
|
||||||
"stop_photo_sharing_description": "Ο χρήστης {partner} δεν θα έχει πλέον πρόσβαση στις φωτογραφίες σας.",
|
"stop_photo_sharing_description": "Ο χρήστης {partner} δεν θα έχει πλέον πρόσβαση στις φωτογραφίες σας.",
|
||||||
"stop_sharing_photos_with_user": "Διακοπή κοινής χρήσης των φωτογραφιών σας με αυτό το χρήστη",
|
"stop_sharing_photos_with_user": "Διακοπή κοινής χρήσης των φωτογραφιών σας με αυτό το χρήστη",
|
||||||
@@ -485,8 +555,13 @@
|
|||||||
"submit": "Υποβολή",
|
"submit": "Υποβολή",
|
||||||
"suggestions": "Προτάσεις",
|
"suggestions": "Προτάσεις",
|
||||||
"sunrise_on_the_beach": "Ηλιοβασίλεμα στην παραλία",
|
"sunrise_on_the_beach": "Ηλιοβασίλεμα στην παραλία",
|
||||||
|
"support": "Υποστήριξη",
|
||||||
|
"support_and_feedback": "Υποστήριξη & Σχόλια",
|
||||||
"swap_merge_direction": "Εναλλαγή κατεύθυνσης συγχώνευσης",
|
"swap_merge_direction": "Εναλλαγή κατεύθυνσης συγχώνευσης",
|
||||||
"sync": "Συγχρονισμός",
|
"sync": "Συγχρονισμός",
|
||||||
|
"tag": "Ετικέτα",
|
||||||
|
"tag_created": "Δημιουργήθηκε ετικέτα: {tag}",
|
||||||
|
"tag_updated": "Ενημερώθηκε η ετικέτα: {tag}",
|
||||||
"template": "Πρότυπο",
|
"template": "Πρότυπο",
|
||||||
"theme": "Θέμα",
|
"theme": "Θέμα",
|
||||||
"theme_selection": "Επιλογή θέματος",
|
"theme_selection": "Επιλογή θέματος",
|
||||||
@@ -550,6 +625,7 @@
|
|||||||
"version": "Έκδοση",
|
"version": "Έκδοση",
|
||||||
"version_announcement_closing": "Ο φίλος σου, Alex",
|
"version_announcement_closing": "Ο φίλος σου, Alex",
|
||||||
"version_announcement_message": "Γεια σου φίλε, υπάρχει μια νέα έκδοση της εφαρμογής, αφιέρωσε λίγο χρόνο για να επισκεφθείς την τοποθεσία <link>release notes</link> και να βεβαιωθείς ότι τα <code>docker-compose.yml</code>, και <code>.env</code> είναι ενημερωμένα για την αποτροπή τυχόν εσφαλμένων διαμορφώσεων, ειδικά εάν χρησιμοποιείτε το WatchTower ή οποιονδήποτε μηχανισμό που χειρίζεται την αυτόματη ενημέρωση της εφαρμογής σας.",
|
"version_announcement_message": "Γεια σου φίλε, υπάρχει μια νέα έκδοση της εφαρμογής, αφιέρωσε λίγο χρόνο για να επισκεφθείς την τοποθεσία <link>release notes</link> και να βεβαιωθείς ότι τα <code>docker-compose.yml</code>, και <code>.env</code> είναι ενημερωμένα για την αποτροπή τυχόν εσφαλμένων διαμορφώσεων, ειδικά εάν χρησιμοποιείτε το WatchTower ή οποιονδήποτε μηχανισμό που χειρίζεται την αυτόματη ενημέρωση της εφαρμογής σας.",
|
||||||
|
"version_history_item": "Εγκαταστάθηκε {version} στις {date}",
|
||||||
"video": "Βίντεο",
|
"video": "Βίντεο",
|
||||||
"video_hover_setting": "Προεπισκόπηση βίντεο με το δείκτη του ποντικιού",
|
"video_hover_setting": "Προεπισκόπηση βίντεο με το δείκτη του ποντικιού",
|
||||||
"video_hover_setting_description": "Προεπισκόπηση βίντεο όταν το ποντίκι βρίσκεται πάνω από το στοιχείο. Ακόμη και όταν είναι απενεργοποιημένη, η αναπαραγωγή μπορεί να ξεκινήσει τοποθετώντας το δείκτη του ποντικιού πάνω από το εικονίδιο αναπαραγωγής.",
|
"video_hover_setting_description": "Προεπισκόπηση βίντεο όταν το ποντίκι βρίσκεται πάνω από το στοιχείο. Ακόμη και όταν είναι απενεργοποιημένη, η αναπαραγωγή μπορεί να ξεκινήσει τοποθετώντας το δείκτη του ποντικιού πάνω από το εικονίδιο αναπαραγωγής.",
|
||||||
@@ -559,6 +635,7 @@
|
|||||||
"view_album": "Προβολή Άλμπουμ",
|
"view_album": "Προβολή Άλμπουμ",
|
||||||
"view_all": "Προβολή Όλων",
|
"view_all": "Προβολή Όλων",
|
||||||
"view_all_users": "Προβολή όλων των χρηστών",
|
"view_all_users": "Προβολή όλων των χρηστών",
|
||||||
|
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
|
||||||
"view_links": "Προβολή συνδέσμων",
|
"view_links": "Προβολή συνδέσμων",
|
||||||
"view_next_asset": "Προβολή επόμενου στοιχείου",
|
"view_next_asset": "Προβολή επόμενου στοιχείου",
|
||||||
"view_previous_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_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>.",
|
"authentication_settings_reenable": "To re-enable, use a <link>Server Command</link>.",
|
||||||
"background_task_job": "Background Tasks",
|
"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",
|
"check_all": "Check All",
|
||||||
"cleared_jobs": "Cleared jobs for: {job}",
|
"cleared_jobs": "Cleared jobs for: {job}",
|
||||||
"config_set_by_file": "Config is currently set by a config file",
|
"config_set_by_file": "Config is currently set by a config file",
|
||||||
@@ -43,14 +48,17 @@
|
|||||||
"confirm_reprocess_all_faces": "Are you sure you want to reprocess all faces? This will also clear named people.",
|
"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?",
|
"confirm_user_password_reset": "Are you sure you want to reset {user}'s password?",
|
||||||
"create_job": "Create job",
|
"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",
|
"disable_login": "Disable login",
|
||||||
"duplicate_detection_job_description": "Run machine learning on assets to detect similar images. Relies on Smart Search",
|
"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.",
|
"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_created_at": "External library (created on {date})",
|
||||||
"external_library_management": "External Library Management",
|
"external_library_management": "External Library Management",
|
||||||
"face_detection": "Face detection",
|
"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.",
|
"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. \"All\" (re-)clusters all faces. \"Missing\" queues faces that don't have a person assigned.",
|
"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}",
|
"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.",
|
"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",
|
"forcing_refresh_library_files": "Forcing refresh of all library files",
|
||||||
@@ -80,9 +88,6 @@
|
|||||||
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
|
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
|
||||||
"jobs_failed": "{jobCount, plural, other {# failed}}",
|
"jobs_failed": "{jobCount, plural, other {# failed}}",
|
||||||
"library_created": "Created library: {library}",
|
"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_deleted": "Library deleted",
|
||||||
"library_import_path_description": "Specify a folder to import. This folder, including subfolders, will be scanned for images and videos.",
|
"library_import_path_description": "Specify a folder to import. This folder, including subfolders, will be scanned for images and videos.",
|
||||||
"library_scanning": "Periodic Scanning",
|
"library_scanning": "Periodic Scanning",
|
||||||
@@ -274,7 +279,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Hardware Acceleration",
|
"transcoding_hardware_acceleration": "Hardware Acceleration",
|
||||||
"transcoding_hardware_acceleration_description": "Experimental; much faster, but will have lower quality at the same bitrate",
|
"transcoding_hardware_acceleration_description": "Experimental; much faster, but will have lower quality at the same bitrate",
|
||||||
"transcoding_hardware_decoding": "Hardware decoding",
|
"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_hevc_codec": "HEVC codec",
|
||||||
"transcoding_max_b_frames": "Maximum B-frames",
|
"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.",
|
"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.",
|
||||||
@@ -300,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_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": "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_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": "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_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",
|
"transcoding_two_pass_encoding": "Two-pass encoding",
|
||||||
@@ -816,6 +819,7 @@
|
|||||||
"look": "Look",
|
"look": "Look",
|
||||||
"loop_videos": "Loop videos",
|
"loop_videos": "Loop videos",
|
||||||
"loop_videos_description": "Enable to automatically loop a video in the detail viewer.",
|
"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",
|
"make": "Make",
|
||||||
"manage_shared_links": "Manage shared links",
|
"manage_shared_links": "Manage shared links",
|
||||||
"manage_sharing_with_partners": "Manage sharing with partners",
|
"manage_sharing_with_partners": "Manage sharing with partners",
|
||||||
@@ -1014,11 +1018,13 @@
|
|||||||
"recent_searches": "Recent searches",
|
"recent_searches": "Recent searches",
|
||||||
"refresh": "Refresh",
|
"refresh": "Refresh",
|
||||||
"refresh_encoded_videos": "Refresh encoded videos",
|
"refresh_encoded_videos": "Refresh encoded videos",
|
||||||
|
"refresh_faces": "Refresh faces",
|
||||||
"refresh_metadata": "Refresh metadata",
|
"refresh_metadata": "Refresh metadata",
|
||||||
"refresh_thumbnails": "Refresh thumbnails",
|
"refresh_thumbnails": "Refresh thumbnails",
|
||||||
"refreshed": "Refreshed",
|
"refreshed": "Refreshed",
|
||||||
"refreshes_every_file": "Re-reads all existing and new files",
|
"refreshes_every_file": "Re-reads all existing and new files",
|
||||||
"refreshing_encoded_video": "Refreshing encoded video",
|
"refreshing_encoded_video": "Refreshing encoded video",
|
||||||
|
"refreshing_faces": "Refreshing faces",
|
||||||
"refreshing_metadata": "Refreshing metadata",
|
"refreshing_metadata": "Refreshing metadata",
|
||||||
"regenerating_thumbnails": "Regenerating thumbnails",
|
"regenerating_thumbnails": "Regenerating thumbnails",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
@@ -1194,7 +1200,7 @@
|
|||||||
"sunrise_on_the_beach": "Sunrise on the beach",
|
"sunrise_on_the_beach": "Sunrise on the beach",
|
||||||
"support": "Support",
|
"support": "Support",
|
||||||
"support_and_feedback": "Support & Feedback",
|
"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.",
|
"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",
|
"swap_merge_direction": "Swap merge direction",
|
||||||
"sync": "Sync",
|
"sync": "Sync",
|
||||||
"tag": "Tag",
|
"tag": "Tag",
|
||||||
@@ -1299,7 +1305,7 @@
|
|||||||
"warning": "Warning",
|
"warning": "Warning",
|
||||||
"week": "Week",
|
"week": "Week",
|
||||||
"welcome": "Welcome",
|
"welcome": "Welcome",
|
||||||
"welcome_to_immich": "Welcome to immich",
|
"welcome_to_immich": "Welcome to Immich",
|
||||||
"year": "Year",
|
"year": "Year",
|
||||||
"years_ago": "{years, plural, one {# year} other {# years}} ago",
|
"years_ago": "{years, plural, one {# year} other {# years}} ago",
|
||||||
"yes": "Yes",
|
"yes": "Yes",
|
||||||
@@ -7,52 +7,52 @@
|
|||||||
"actions": "Acciones",
|
"actions": "Acciones",
|
||||||
"active": "Activo",
|
"active": "Activo",
|
||||||
"activity": "Actividad",
|
"activity": "Actividad",
|
||||||
"activity_changed": "La actividad {enabled, select, true {activada} other {desactivada}}",
|
"activity_changed": "La actividad está {enabled, select, true {activada} other {desactivada}}",
|
||||||
"add": "Añadir",
|
"add": "Agregar",
|
||||||
"add_a_description": "Añadir una descripción",
|
"add_a_description": "Agregar descripción",
|
||||||
"add_a_location": "Añadir una ubicación",
|
"add_a_location": "Agregar ubicación",
|
||||||
"add_a_name": "Añadir un nombre",
|
"add_a_name": "Agregar nombre",
|
||||||
"add_a_title": "Añadir un título",
|
"add_a_title": "Agregar título",
|
||||||
"add_exclusion_pattern": "Añadir patrón de exclusión",
|
"add_exclusion_pattern": "Agregar patrón de exclusión",
|
||||||
"add_import_path": "Añadir ruta de importación",
|
"add_import_path": "Agregar ruta de importación",
|
||||||
"add_location": "Añadir ubicación",
|
"add_location": "Agregar ubicación",
|
||||||
"add_more_users": "Añadir más usuarios",
|
"add_more_users": "Agregar más usuarios",
|
||||||
"add_partner": "Añadir invitado",
|
"add_partner": "Agregar invitado",
|
||||||
"add_path": "Añadir ruta",
|
"add_path": "Agregar ruta",
|
||||||
"add_photos": "Añadir fotos",
|
"add_photos": "Agregar fotos",
|
||||||
"add_to": "Añadir a...",
|
"add_to": "Agregar a...",
|
||||||
"add_to_album": "Añadir a un álbum",
|
"add_to_album": "Agregar a un álbum",
|
||||||
"add_to_shared_album": "Añadir a un álbum compartido",
|
"add_to_shared_album": "Agregar a un álbum compartido",
|
||||||
"added_to_archive": "Archivar",
|
"added_to_archive": "Archivado",
|
||||||
"added_to_favorites": "Añadido a favoritos",
|
"added_to_favorites": "Agregado a favoritos",
|
||||||
"added_to_favorites_count": "Añadido {count, number} a favoritos",
|
"added_to_favorites_count": "Agregado {count, number} a favoritos",
|
||||||
"admin": {
|
"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/**\".",
|
"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 elemento de biblioteca externa ya no está en el disco y se ha movido a la papelera. Si el archivo se ha movido dentro de la biblioteca, consulte la línea de tiempo para encontrar un nuevo elemento coincidente. Para restaurar este elemento, asegúrese de que Immich pueda acceder a la ruta del archivo siguiente y busque en la biblioteca.",
|
"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": "Configuración de autenticación",
|
"authentication_settings": "Parámetros de autenticación",
|
||||||
"authentication_settings_description": "Gestionar clave, Oauth y otros configuraciones de autenticación",
|
"authentication_settings_description": "Gestionar contraseñas, OAuth y otros parámetros 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_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 habilitar, utilice un <link> Comando del servidor </link> .",
|
"authentication_settings_reenable": "Para volver a activarlo, utiliza un <link> Comando del servidor </link>.",
|
||||||
"background_task_job": "Tareas en segundo plano",
|
"background_task_job": "Tareas en segundo plano",
|
||||||
"check_all": "Comprobar todo",
|
"check_all": "Verificar todo",
|
||||||
"cleared_jobs": "Trabajos realizados para: {job}",
|
"cleared_jobs": "Trabajos borrados para: {job}",
|
||||||
"config_set_by_file": "La configuración está fijada actualmente en base a un archivo",
|
"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": "¿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_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_email_below": "Para confirmar, escribe \"{email}\" a continuación",
|
||||||
"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_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 resetear la contraseña de {user}?",
|
"confirm_user_password_reset": "¿Estás seguro de que quieres restablecer la contraseña de {user}?",
|
||||||
"create_job": "Crear trabajo",
|
"create_job": "Crear trabajo",
|
||||||
"crontab_guru": "Crontab Guru",
|
"crontab_guru": "Crontab Guru",
|
||||||
"disable_login": "Deshabilitar inicio de sesión",
|
"disable_login": "Deshabilitar inicio de sesión",
|
||||||
"disabled": "Deshabilitado",
|
"disabled": "Deshabilitado",
|
||||||
"duplicate_detection_job_description": "Lanza el aprendizaje automático para detectar imágenes similares. Necesita que esté activa la Búsqueda Inteligente",
|
"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 hay carpetas que contienen archivos que no quieres importar (por ejemplo los ficheros RAW).",
|
"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 (creado el {date})",
|
"external_library_created_at": "Biblioteca externa (creada el {date})",
|
||||||
"external_library_management": "Gestión de bibliotecas externas",
|
"external_library_management": "Gestión de bibliotecas externas",
|
||||||
"face_detection": "Detección de caras",
|
"face_detection": "Detección de rostros",
|
||||||
"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.",
|
"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 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.",
|
"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}",
|
"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.",
|
"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",
|
"forcing_refresh_library_files": "Forzar la recarga de todos los archivos de la biblioteca",
|
||||||
@@ -278,7 +278,7 @@
|
|||||||
"transcoding_audio_codec": "Codec de audio",
|
"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_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_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": "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_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)",
|
"transcoding_constant_rate_factor": "Factor de tasa constante (-crf)",
|
||||||
@@ -287,7 +287,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Aceleración por Hardware",
|
"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_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": "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_hevc_codec": "Codec HEVC",
|
||||||
"transcoding_max_b_frames": "Maximos B-frames",
|
"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.",
|
"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.",
|
||||||
@@ -417,7 +417,7 @@
|
|||||||
"assets_added_to_name_count": "Añadido {count, plural, one {# asset} other {# assets}} a {hasName, select, true {<b>{name}</b>} other {new album}}",
|
"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_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": "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_permanently_deleted_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}",
|
||||||
"assets_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}",
|
"assets_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}",
|
||||||
"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_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.",
|
||||||
@@ -433,7 +433,7 @@
|
|||||||
"blurred_background": "Fondo borroso",
|
"blurred_background": "Fondo borroso",
|
||||||
"bugs_and_feature_requests": "Errores y solicitudes de funciones",
|
"bugs_and_feature_requests": "Errores y solicitudes de funciones",
|
||||||
"build": "Compilación",
|
"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_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_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.",
|
"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.",
|
||||||
@@ -452,7 +452,7 @@
|
|||||||
"cant_search_places": "No se pueden buscar lugares",
|
"cant_search_places": "No se pueden buscar lugares",
|
||||||
"change_date": "Cambiar fecha",
|
"change_date": "Cambiar fecha",
|
||||||
"change_expiration_time": "Cambiar fecha de caducidad",
|
"change_expiration_time": "Cambiar fecha de caducidad",
|
||||||
"change_location": "Cambiar localización",
|
"change_location": "Cambiar ubicación",
|
||||||
"change_name": "Cambiar nombre",
|
"change_name": "Cambiar nombre",
|
||||||
"change_name_successfully": "Nombre cambiado correctamente",
|
"change_name_successfully": "Nombre cambiado correctamente",
|
||||||
"change_password": "Cambiar Contraseña",
|
"change_password": "Cambiar Contraseña",
|
||||||
@@ -888,6 +888,7 @@
|
|||||||
"look": "Mirar",
|
"look": "Mirar",
|
||||||
"loop_videos": "Vídeos en bucle",
|
"loop_videos": "Vídeos en bucle",
|
||||||
"loop_videos_description": "Habilite la reproducción automática de un video en el visor de detalles.",
|
"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",
|
"make": "Marca",
|
||||||
"manage_shared_links": "Administrar enlaces compartidos",
|
"manage_shared_links": "Administrar enlaces compartidos",
|
||||||
"manage_sharing_with_partners": "Administrar el uso compartido con invitados",
|
"manage_sharing_with_partners": "Administrar el uso compartido con invitados",
|
||||||
@@ -949,7 +950,7 @@
|
|||||||
"no_results": "Sin resultados",
|
"no_results": "Sin resultados",
|
||||||
"no_results_description": "Pruebe con un sinónimo o una palabra clave más general",
|
"no_results_description": "Pruebe con un sinónimo o una palabra clave más general",
|
||||||
"no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red",
|
"no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red",
|
||||||
"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_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",
|
"note_unlimited_quota": "Nota: Ingrese 0 para cuota ilimitada",
|
||||||
"notes": "Notas",
|
"notes": "Notas",
|
||||||
@@ -1022,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.",
|
"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": "Fotos",
|
||||||
"photos_and_videos": "Fotos y Videos",
|
"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",
|
"photos_from_previous_years": "Fotos de años anteriores",
|
||||||
"pick_a_location": "Elige una ubicación",
|
"pick_a_location": "Elige una ubicación",
|
||||||
"place": "Lugar",
|
"place": "Lugar",
|
||||||
@@ -1092,11 +1093,13 @@
|
|||||||
"recent_searches": "Búsquedas recientes",
|
"recent_searches": "Búsquedas recientes",
|
||||||
"refresh": "Actualizar",
|
"refresh": "Actualizar",
|
||||||
"refresh_encoded_videos": "Recargar los vídeos codificados",
|
"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",
|
"refresh_thumbnails": "Recargar miniaturas",
|
||||||
"refreshed": "Recargado",
|
"refreshed": "Recargado",
|
||||||
"refreshes_every_file": "Recargar todos los archivos nuevos y existentes",
|
"refreshes_every_file": "Recargar todos los archivos nuevos y existentes",
|
||||||
"refreshing_encoded_video": "Recargando los videos codificados",
|
"refreshing_encoded_video": "Recargando los videos codificados",
|
||||||
|
"refreshing_faces": "Recargando caras",
|
||||||
"refreshing_metadata": "Recargando metadatos",
|
"refreshing_metadata": "Recargando metadatos",
|
||||||
"regenerating_thumbnails": "Recargando miniaturas",
|
"regenerating_thumbnails": "Recargando miniaturas",
|
||||||
"remove": "Eliminar",
|
"remove": "Eliminar",
|
||||||
@@ -1180,11 +1183,11 @@
|
|||||||
"select_face": "Seleccionar cara",
|
"select_face": "Seleccionar cara",
|
||||||
"select_featured_photo": "Seleccionar foto principal",
|
"select_featured_photo": "Seleccionar foto principal",
|
||||||
"select_from_computer": "Seleccionar desde el PC",
|
"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_library_owner": "Seleccionar propietario de la biblioteca",
|
||||||
"select_new_face": "Seleccionar nueva cara",
|
"select_new_face": "Seleccionar nueva cara",
|
||||||
"select_photos": "Seleccionar Fotos",
|
"select_photos": "Seleccionar Fotos",
|
||||||
"select_trash_all": "Enviar la selección a la papelera",
|
"select_trash_all": "Descartar todo",
|
||||||
"selected": "Seleccionado",
|
"selected": "Seleccionado",
|
||||||
"selected_count": "{count, plural, one {# seleccionado} other {# seleccionados}}",
|
"selected_count": "{count, plural, one {# seleccionado} other {# seleccionados}}",
|
||||||
"send_message": "Enviar mensaje",
|
"send_message": "Enviar mensaje",
|
||||||
@@ -1192,7 +1195,7 @@
|
|||||||
"server": "Servidor",
|
"server": "Servidor",
|
||||||
"server_offline": "Servidor desconectado",
|
"server_offline": "Servidor desconectado",
|
||||||
"server_online": "Servidor en línea",
|
"server_online": "Servidor en línea",
|
||||||
"server_stats": "Estadísticas Servidor",
|
"server_stats": "Estadísticas del servidor",
|
||||||
"server_version": "Versión del servidor",
|
"server_version": "Versión del servidor",
|
||||||
"set": "Establecer",
|
"set": "Establecer",
|
||||||
"set_as_album_cover": "Establecer portada del álbum",
|
"set_as_album_cover": "Establecer portada del álbum",
|
||||||
@@ -1253,7 +1256,7 @@
|
|||||||
"sort_oldest": "Foto más antigua",
|
"sort_oldest": "Foto más antigua",
|
||||||
"sort_recent": "Foto más reciente",
|
"sort_recent": "Foto más reciente",
|
||||||
"sort_title": "Título",
|
"sort_title": "Título",
|
||||||
"source": "Fuente",
|
"source": "Origen",
|
||||||
"stack": "Apilar",
|
"stack": "Apilar",
|
||||||
"stack_duplicates": "Apilar duplicados",
|
"stack_duplicates": "Apilar duplicados",
|
||||||
"stack_select_one_photo": "Selecciona una imagen principal para la pila",
|
"stack_select_one_photo": "Selecciona una imagen principal para la pila",
|
||||||
@@ -1301,14 +1304,14 @@
|
|||||||
"to_login": "Iniciar Sesión",
|
"to_login": "Iniciar Sesión",
|
||||||
"to_parent": "Ir a los padres",
|
"to_parent": "Ir a los padres",
|
||||||
"to_root": "Para root",
|
"to_root": "Para root",
|
||||||
"to_trash": "Papelera",
|
"to_trash": "Descartar",
|
||||||
"toggle_settings": "Alternar ajustes",
|
"toggle_settings": "Alternar ajustes",
|
||||||
"toggle_theme": "Alternar tema oscuro",
|
"toggle_theme": "Alternar tema oscuro",
|
||||||
"toggle_visibility": "Alternar visibilidad",
|
"toggle_visibility": "Alternar visibilidad",
|
||||||
"total_usage": "Uso total",
|
"total_usage": "Uso total",
|
||||||
"trash": "Papelera",
|
"trash": "Papelera",
|
||||||
"trash_all": "Enviar todo a la papelera",
|
"trash_all": "Descartar todo",
|
||||||
"trash_count": "Papelera {count, number}",
|
"trash_count": "Descartar {count, number}",
|
||||||
"trash_delete_asset": "Borrar/Eliminar archivo",
|
"trash_delete_asset": "Borrar/Eliminar archivo",
|
||||||
"trash_no_results_message": "Las fotos y videos que se envíen a la papelera aparecerán aquí.",
|
"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}}.",
|
"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}}.",
|
||||||
@@ -1388,7 +1391,7 @@
|
|||||||
"warning": "Advertencia",
|
"warning": "Advertencia",
|
||||||
"week": "Semana",
|
"week": "Semana",
|
||||||
"welcome": "Bienvenido",
|
"welcome": "Bienvenido",
|
||||||
"welcome_to_immich": "Bienvenido a immich",
|
"welcome_to_immich": "Bienvenido a Immich",
|
||||||
"year": "Año",
|
"year": "Año",
|
||||||
"years_ago": "Hace {years, plural, one {# año} other {# años}}",
|
"years_ago": "Hace {years, plural, one {# año} other {# años}}",
|
||||||
"yes": "Sí",
|
"yes": "Sí",
|
||||||
@@ -49,8 +49,8 @@
|
|||||||
"external_library_created_at": "Väline kogu (lisatud {date})",
|
"external_library_created_at": "Väline kogu (lisatud {date})",
|
||||||
"external_library_management": "Väliste kogude haldus",
|
"external_library_management": "Väliste kogude haldus",
|
||||||
"face_detection": "Näoavastus",
|
"face_detection": "Näoavastus",
|
||||||
"face_detection_description": "Avasta üksustest nägusid masinõppe abil. Videote puhul kasutatakse ainult pisipilti. \"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.",
|
"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. \"Kõik\" grupeerib kõik näod uuesti. \"Puuduvad\" võtab ette näod, mida pole isikuga seostatud.",
|
"facial_recognition_job_description": "Grupeeri avastatud näod inimesteks. See samm käivitub siis, kui näoavastus on lõppenud. \"Lähtesta\" grupeerib kõik näod uuesti. \"Puuduvad\" võtab ette näod, mida pole isikuga seostatud.",
|
||||||
"failed_job_command": "Käsk {command} ebaõnnestus töötes: {job}",
|
"failed_job_command": "Käsk {command} ebaõnnestus töötes: {job}",
|
||||||
"force_delete_user_warning": "HOIATUS: See kustutab koheselt kasutaja ja kõik üksused. Seda ei saa tagasi võtta ja faile ei saa taastada.",
|
"force_delete_user_warning": "HOIATUS: See kustutab koheselt kasutaja ja kõik üksused. Seda ei saa tagasi võtta ja faile ei saa taastada.",
|
||||||
"forcing_refresh_library_files": "Kogu kõigi failide sundvärskendamine",
|
"forcing_refresh_library_files": "Kogu kõigi failide sundvärskendamine",
|
||||||
@@ -283,7 +283,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Riistvaraline kiirendus",
|
"transcoding_hardware_acceleration": "Riistvaraline kiirendus",
|
||||||
"transcoding_hardware_acceleration_description": "Eksperimentaalne; palju kiirem, aga sama bitisageduse juures madalam kvaliteet",
|
"transcoding_hardware_acceleration_description": "Eksperimentaalne; palju kiirem, aga sama bitisageduse juures madalam kvaliteet",
|
||||||
"transcoding_hardware_decoding": "Riistvaraline dekodeerimine",
|
"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_hevc_codec": "HEVC koodek",
|
||||||
"transcoding_max_b_frames": "Maksimaalne B-kaadrite arv",
|
"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_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.",
|
||||||
@@ -561,7 +561,7 @@
|
|||||||
"edit_exclusion_pattern": "Muuda välistamismustrit",
|
"edit_exclusion_pattern": "Muuda välistamismustrit",
|
||||||
"edit_faces": "Muuda nägusid",
|
"edit_faces": "Muuda nägusid",
|
||||||
"edit_import_path": "Muuda imporditeed",
|
"edit_import_path": "Muuda imporditeed",
|
||||||
"edit_import_paths": "Muud imporditeid",
|
"edit_import_paths": "Muuda imporditeid",
|
||||||
"edit_key": "Muuda võtit",
|
"edit_key": "Muuda võtit",
|
||||||
"edit_link": "Muuda linki",
|
"edit_link": "Muuda linki",
|
||||||
"edit_location": "Muuda asukohta",
|
"edit_location": "Muuda asukohta",
|
||||||
@@ -705,6 +705,7 @@
|
|||||||
"unable_to_update_library": "Kogu uuendamine ebaõnnestus",
|
"unable_to_update_library": "Kogu uuendamine ebaõnnestus",
|
||||||
"unable_to_update_location": "Asukoha muutmine ebaõnnestus",
|
"unable_to_update_location": "Asukoha muutmine ebaõnnestus",
|
||||||
"unable_to_update_settings": "Seadete 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_update_user": "Kasutaja muutmine ebaõnnestus",
|
||||||
"unable_to_upload_file": "Faili üleslaadimine ebaõnnestus"
|
"unable_to_upload_file": "Faili üleslaadimine ebaõnnestus"
|
||||||
},
|
},
|
||||||
@@ -820,6 +821,7 @@
|
|||||||
"look": "Välimus",
|
"look": "Välimus",
|
||||||
"loop_videos": "Taasesita videod",
|
"loop_videos": "Taasesita videod",
|
||||||
"loop_videos_description": "Lülita sisse, et detailvaates videot automaatselt taasesitada.",
|
"loop_videos_description": "Lülita sisse, et detailvaates videot automaatselt taasesitada.",
|
||||||
|
"main_branch_warning": "Sa kasutad arendusversiooni; soovitame tungivalt kasutada väljalaskeversiooni!",
|
||||||
"make": "Mark",
|
"make": "Mark",
|
||||||
"manage_shared_links": "Halda jagatud linke",
|
"manage_shared_links": "Halda jagatud linke",
|
||||||
"manage_sharing_with_partners": "Halda partneritega jagamist",
|
"manage_sharing_with_partners": "Halda partneritega jagamist",
|
||||||
@@ -832,6 +834,7 @@
|
|||||||
"map_marker_for_images": "Kaardimarker kohas {city}, {country} tehtud piltide jaoks",
|
"map_marker_for_images": "Kaardimarker kohas {city}, {country} tehtud piltide jaoks",
|
||||||
"map_marker_with_image": "Kaardimarker pildiga",
|
"map_marker_with_image": "Kaardimarker pildiga",
|
||||||
"map_settings": "Kaardi seaded",
|
"map_settings": "Kaardi seaded",
|
||||||
|
"matches": "Ühtivad failid",
|
||||||
"media_type": "Meedia tüüp",
|
"media_type": "Meedia tüüp",
|
||||||
"memories": "Mälestused",
|
"memories": "Mälestused",
|
||||||
"memories_setting_description": "Halda, mida sa oma mälestustes näed",
|
"memories_setting_description": "Halda, mida sa oma mälestustes näed",
|
||||||
@@ -874,6 +877,8 @@
|
|||||||
"no_explore_results_message": "Oma kogu avastamiseks laadi üles rohkem fotosid.",
|
"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_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_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": "Vasteid pole",
|
||||||
"no_results_description": "Proovi sünonüümi või üldisemat märksõna",
|
"no_results_description": "Proovi sünonüümi või üldisemat märksõna",
|
||||||
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
|
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
|
||||||
@@ -894,6 +899,7 @@
|
|||||||
"onboarding": "Kasutuselevõtt",
|
"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_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_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}",
|
"onboarding_welcome_user": "Tere tulemast, {user}",
|
||||||
"online": "Ühendatud",
|
"online": "Ühendatud",
|
||||||
"only_favorites": "Ainult lemmikud",
|
"only_favorites": "Ainult lemmikud",
|
||||||
@@ -962,6 +968,7 @@
|
|||||||
"previous": "Eelmine",
|
"previous": "Eelmine",
|
||||||
"previous_memory": "Eelmine mälestus",
|
"previous_memory": "Eelmine mälestus",
|
||||||
"previous_or_next_photo": "Eelmine või järgmine foto",
|
"previous_or_next_photo": "Eelmine või järgmine foto",
|
||||||
|
"primary": "Peamine",
|
||||||
"privacy": "Privaatsus",
|
"privacy": "Privaatsus",
|
||||||
"profile_image_of_user": "Kasutaja {user} profiilipilt",
|
"profile_image_of_user": "Kasutaja {user} profiilipilt",
|
||||||
"profile_picture_set": "Profiilipilt määratud.",
|
"profile_picture_set": "Profiilipilt määratud.",
|
||||||
@@ -1010,11 +1017,13 @@
|
|||||||
"recent_searches": "Hiljutised otsingud",
|
"recent_searches": "Hiljutised otsingud",
|
||||||
"refresh": "Värskenda",
|
"refresh": "Värskenda",
|
||||||
"refresh_encoded_videos": "Värskenda kodeeritud videod",
|
"refresh_encoded_videos": "Värskenda kodeeritud videod",
|
||||||
|
"refresh_faces": "Värskenda näod",
|
||||||
"refresh_metadata": "Värskenda metaandmed",
|
"refresh_metadata": "Värskenda metaandmed",
|
||||||
"refresh_thumbnails": "Värskenda pisipildid",
|
"refresh_thumbnails": "Värskenda pisipildid",
|
||||||
"refreshed": "Värskendatud",
|
"refreshed": "Värskendatud",
|
||||||
"refreshes_every_file": "Loeb kõik olemasolevad ja uued failid uuesti",
|
"refreshes_every_file": "Loeb kõik olemasolevad ja uued failid uuesti",
|
||||||
"refreshing_encoded_video": "Kodeeritud videote värskendamine",
|
"refreshing_encoded_video": "Kodeeritud videote värskendamine",
|
||||||
|
"refreshing_faces": "Nägude värskendamine",
|
||||||
"refreshing_metadata": "Metaandmete värskendamine",
|
"refreshing_metadata": "Metaandmete värskendamine",
|
||||||
"regenerating_thumbnails": "Pisipiltide uuesti genereerimine",
|
"regenerating_thumbnails": "Pisipiltide uuesti genereerimine",
|
||||||
"remove": "Eemalda",
|
"remove": "Eemalda",
|
||||||
@@ -1049,8 +1058,11 @@
|
|||||||
"restore_user": "Taasta kasutaja",
|
"restore_user": "Taasta kasutaja",
|
||||||
"restored_asset": "Üksus taastatud",
|
"restored_asset": "Üksus taastatud",
|
||||||
"resume": "Jätka",
|
"resume": "Jätka",
|
||||||
|
"retry_upload": "Proovi üleslaadimist uuesti",
|
||||||
"review_duplicates": "Vaata duplikaadid läbi",
|
"review_duplicates": "Vaata duplikaadid läbi",
|
||||||
"role": "Roll",
|
"role": "Roll",
|
||||||
|
"role_editor": "Muutja",
|
||||||
|
"role_viewer": "Vaataja",
|
||||||
"save": "Salvesta",
|
"save": "Salvesta",
|
||||||
"saved_api_key": "API võti salvestatud",
|
"saved_api_key": "API võti salvestatud",
|
||||||
"saved_profile": "Profiil salvestatud",
|
"saved_profile": "Profiil salvestatud",
|
||||||
@@ -1077,7 +1089,7 @@
|
|||||||
"search_options": "Otsingu valikud",
|
"search_options": "Otsingu valikud",
|
||||||
"search_people": "Otsi inimesi",
|
"search_people": "Otsi inimesi",
|
||||||
"search_places": "Otsi kohti",
|
"search_places": "Otsi kohti",
|
||||||
"search_settings": "Otsingu seaded",
|
"search_settings": "Otsi seadeid",
|
||||||
"search_state": "Otsi osariiki...",
|
"search_state": "Otsi osariiki...",
|
||||||
"search_tags": "Otsi silte...",
|
"search_tags": "Otsi silte...",
|
||||||
"search_timezone": "Otsi ajavööndit...",
|
"search_timezone": "Otsi ajavööndit...",
|
||||||
@@ -1169,6 +1181,7 @@
|
|||||||
"stack_selected_photos": "Virnasta valitud fotod",
|
"stack_selected_photos": "Virnasta valitud fotod",
|
||||||
"stacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} virnastatud",
|
"stacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} virnastatud",
|
||||||
"stacktrace": "Pinujälg",
|
"stacktrace": "Pinujälg",
|
||||||
|
"start": "Alusta",
|
||||||
"start_date": "Alguskuupäev",
|
"start_date": "Alguskuupäev",
|
||||||
"state": "Osariik",
|
"state": "Osariik",
|
||||||
"status": "Staatus",
|
"status": "Staatus",
|
||||||
@@ -1181,8 +1194,10 @@
|
|||||||
"storage_usage": "{used}/{available} kasutatud",
|
"storage_usage": "{used}/{available} kasutatud",
|
||||||
"suggestions": "Soovitused",
|
"suggestions": "Soovitused",
|
||||||
"sunrise_on_the_beach": "Päikesetõus rannal",
|
"sunrise_on_the_beach": "Päikesetõus rannal",
|
||||||
|
"support": "Tugi",
|
||||||
"support_and_feedback": "Tugi ja tagasiside",
|
"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.",
|
"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",
|
"sync": "Sünkrooni",
|
||||||
"tag": "Silt",
|
"tag": "Silt",
|
||||||
"tag_assets": "Sildista üksuseid",
|
"tag_assets": "Sildista üksuseid",
|
||||||
@@ -1196,6 +1211,7 @@
|
|||||||
"theme": "Teema",
|
"theme": "Teema",
|
||||||
"theme_selection": "Teema valik",
|
"theme_selection": "Teema valik",
|
||||||
"theme_selection_description": "Sea automaatselt hele või tume teema vastavalt veebilehitseja eelistustele",
|
"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",
|
"third_party_resources": "Kolmanda osapoole ressursid",
|
||||||
"time_based_memories": "Ajapõhised mälestused",
|
"time_based_memories": "Ajapõhised mälestused",
|
||||||
"timezone": "Ajavöönd",
|
"timezone": "Ajavöönd",
|
||||||
@@ -1207,6 +1223,7 @@
|
|||||||
"toggle_theme": "Lülita tume teema",
|
"toggle_theme": "Lülita tume teema",
|
||||||
"total_usage": "Kogukasutus",
|
"total_usage": "Kogukasutus",
|
||||||
"trash": "Prügikast",
|
"trash": "Prügikast",
|
||||||
|
"trash_all": "Kõik prügikasti",
|
||||||
"trash_count": "Liiguta {count, number} prügikasti",
|
"trash_count": "Liiguta {count, number} prügikasti",
|
||||||
"trash_delete_asset": "Kustuta üksus",
|
"trash_delete_asset": "Kustuta üksus",
|
||||||
"trash_no_results_message": "Siia ilmuvad prügikasti liigutatud fotod ja videod.",
|
"trash_no_results_message": "Siia ilmuvad prügikasti liigutatud fotod ja videod.",
|
||||||
@@ -1214,6 +1231,7 @@
|
|||||||
"type": "Tüüp",
|
"type": "Tüüp",
|
||||||
"unarchive": "Taasta arhiivist",
|
"unarchive": "Taasta arhiivist",
|
||||||
"unarchived_count": "{count, plural, other {# arhiivist taastatud}}",
|
"unarchived_count": "{count, plural, other {# arhiivist taastatud}}",
|
||||||
|
"unfavorite": "Eemalda lemmikutest",
|
||||||
"unhide_person": "Ära peida isikut",
|
"unhide_person": "Ära peida isikut",
|
||||||
"unknown": "Teadmata",
|
"unknown": "Teadmata",
|
||||||
"unknown_year": "Teadmata aasta",
|
"unknown_year": "Teadmata aasta",
|
||||||
@@ -1227,10 +1245,12 @@
|
|||||||
"unstacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} eraldatud",
|
"unstacked_assets_count": "{count, plural, one {# üksus} other {# üksust}} eraldatud",
|
||||||
"untracked_files": "Mittejälgitavad failid",
|
"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",
|
"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",
|
"updated_password": "Parool muudetud",
|
||||||
"upload": "Laadi üles",
|
"upload": "Laadi üles",
|
||||||
"upload_concurrency": "Üleslaadimise samaaegsus",
|
"upload_concurrency": "Üleslaadimise samaaegsus",
|
||||||
"upload_errors": "Üleslaadimine lõpetatud {count, plural, one {# veaga} other {# veaga}}, uute üksuste nägemiseks värskenda lehte.",
|
"upload_errors": "Üleslaadimine lõpetatud {count, plural, one {# veaga} other {# veaga}}, uute üksuste nägemiseks värskenda lehte.",
|
||||||
|
"upload_progress": "Ootel {remaining, number} - Töödeldud {processed, number}/{total, number}",
|
||||||
"upload_skipped_duplicates": "{count, plural, one {# dubleeritud üksus} other {# dubleeritud üksust}} vahele jäetud",
|
"upload_skipped_duplicates": "{count, plural, one {# dubleeritud üksus} other {# dubleeritud üksust}} vahele jäetud",
|
||||||
"upload_status_duplicates": "Duplikaadid",
|
"upload_status_duplicates": "Duplikaadid",
|
||||||
"upload_status_errors": "Vead",
|
"upload_status_errors": "Vead",
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
"add_import_path": "Lisää tuontipolku",
|
"add_import_path": "Lisää tuontipolku",
|
||||||
"add_location": "Lisää sijainti",
|
"add_location": "Lisää sijainti",
|
||||||
"add_more_users": "Lisää käyttäjiä",
|
"add_more_users": "Lisää käyttäjiä",
|
||||||
"add_partner": "Lisää kaveri",
|
"add_partner": "Lisää kumppani",
|
||||||
"add_path": "Lisää polku",
|
"add_path": "Lisää polku",
|
||||||
"add_photos": "Lisää kuvia",
|
"add_photos": "Lisää kuvia",
|
||||||
"add_to": "Lisää...",
|
"add_to": "Lisää...",
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
"added_to_favorites_count": "{count, number} lisätty suosikkeihin",
|
"added_to_favorites_count": "{count, number} lisätty suosikkeihin",
|
||||||
"admin": {
|
"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/**\".",
|
"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": "Autentikointiasetukset",
|
||||||
"authentication_settings_description": "Hallitse salasana-, OAuth- ja muut autentikoinnin asetukset",
|
"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.",
|
"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ä",
|
"disable_login": "Poista kirjautuminen käytöstä",
|
||||||
"disabled": "Ei käytössä",
|
"disabled": "Ei käytössä",
|
||||||
"duplicate_detection_job_description": "Tunnista samankaltaiset kuvat käyttäen koneoppimista. Tukeutuu Smart Search:iin",
|
"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_created_at": "Ulkoinen kirjasto (luotu {date})",
|
||||||
"external_library_management": "Ulkoisen kirjaston hallinta",
|
"external_library_management": "Ulkoisen kirjaston hallinta",
|
||||||
"face_detection": "Kasvojen haitseminen",
|
"face_detection": "Kasvojen havaitseminen",
|
||||||
"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ä.",
|
"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. \"Kaikki\" ryhmittelee kaikki kasvot. \"Puuttuvat\" vain ne, joille ei ole määritetty henkilöä.",
|
"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}",
|
"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.",
|
"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",
|
"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_format_description": "WebP tuottaa pienempiä tiedostoja kuin JPEG, mutta on hitaampi pakata.",
|
||||||
"image_prefer_embedded_preview": "Suosi upotettua esikatselua",
|
"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_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": "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_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_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": "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_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": "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_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": "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_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": "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.",
|
"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_created": "Tehtävä luotu",
|
||||||
"job_not_concurrency_safe": "Tätä tehtävää ei ole turvallista ajaa yhtäaikaisesti.",
|
"job_not_concurrency_safe": "Tätä tehtävää ei ole turvallista ajaa yhtäaikaisesti.",
|
||||||
"job_settings": "Tehtävän asetukset",
|
"job_settings": "Tehtävän asetukset",
|
||||||
@@ -101,7 +111,7 @@
|
|||||||
"machine_learning_duplicate_detection": "Kaksoiskappaleiden tunnistus",
|
"machine_learning_duplicate_detection": "Kaksoiskappaleiden tunnistus",
|
||||||
"machine_learning_duplicate_detection_enabled": "Ota käyttöön 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_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": "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_enabled_description": "Jos poistettu käytöstä, kaikki koneoppimistoiminnot ovat pois käytöstä riippumatta alla olevista asetuksista.",
|
||||||
"machine_learning_facial_recognition": "Kasvojen tunnistus",
|
"machine_learning_facial_recognition": "Kasvojen tunnistus",
|
||||||
@@ -121,7 +131,7 @@
|
|||||||
"machine_learning_settings": "Koneoppimisen asetukset",
|
"machine_learning_settings": "Koneoppimisen asetukset",
|
||||||
"machine_learning_settings_description": "Koneoppimisen ominaisuudet ja asetukset",
|
"machine_learning_settings_description": "Koneoppimisen ominaisuudet ja asetukset",
|
||||||
"machine_learning_smart_search": "Älykäs etsintä",
|
"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": "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_smart_search_enabled_description": "Jos ei käytössä, kuvia ei koodata älykkäälle etsinnälle.",
|
||||||
"machine_learning_url_description": "Koneoppimispalvelimen URL",
|
"machine_learning_url_description": "Koneoppimispalvelimen URL",
|
||||||
@@ -129,17 +139,17 @@
|
|||||||
"manage_log_settings": "Hallitse lokien asetuksia",
|
"manage_log_settings": "Hallitse lokien asetuksia",
|
||||||
"map_dark_style": "Tumma teema",
|
"map_dark_style": "Tumma teema",
|
||||||
"map_enable_description": "Ota käyttöön karttatoiminnot",
|
"map_enable_description": "Ota käyttöön karttatoiminnot",
|
||||||
"map_gps_settings": "Kartta & GPS- asetukset",
|
"map_gps_settings": "Kartta- ja GPS-asetukset",
|
||||||
"map_gps_settings_description": "Hallitse Kartan & GPS (Käänteinen Geokoodaus) Asetuksia",
|
"map_gps_settings_description": "Hallitse kartan ja GPS:n (käänteisen geokoodauksen) asetuksia",
|
||||||
"map_implications": "Kartta -ominaisuus käyttää ulkoista karttapalvelua",
|
"map_implications": "Karttaominaisuus käyttää ulkoista karttapalvelua (tiles.immich.cloud)",
|
||||||
"map_light_style": "Vaalea teema",
|
"map_light_style": "Vaalea teema",
|
||||||
"map_manage_reverse_geocoding_settings": "Hallitse <link>käänteisen geokoodauksen</link> asetuksia",
|
"map_manage_reverse_geocoding_settings": "Hallitse <link>käänteisen geokoodauksen</link> asetuksia",
|
||||||
"map_reverse_geocoding": "Käänteinen Geokoodaus",
|
"map_reverse_geocoding": "Käänteinen Geokoodaus",
|
||||||
"map_reverse_geocoding_enable_description": "Ota käyttöön osoitteiden poiminta karttakoordinaateista",
|
"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": "Kartta",
|
||||||
"map_settings_description": "Hallitse kartan asetuksia",
|
"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": "Kerää metadata",
|
||||||
"metadata_extraction_job_description": "Poimi metatiedot aineistoista, kuten GPS, kasvot ja resoluutio",
|
"metadata_extraction_job_description": "Poimi metatiedot aineistoista, kuten GPS, kasvot ja resoluutio",
|
||||||
"metadata_faces_import_setting": "Ota käyttöön kasvojen tuonti",
|
"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_cannot_be_changed_later": "Huom: Tätä ei voi enää myöhemmin vaihtaa!",
|
||||||
"note_unlimited_quota": "Huom: Määritä 0 rajoittamattomaksi kiintiöksi",
|
"note_unlimited_quota": "Huom: Määritä 0 rajoittamattomaksi kiintiöksi",
|
||||||
"notification_email_from_address": "Lähettäjän osoite",
|
"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_host_description": "Sähköpostipalvelin (esim. smtp.immich.app)",
|
||||||
"notification_email_ignore_certificate_errors": "Älä huomioi sertifikaattivirheitä",
|
"notification_email_ignore_certificate_errors": "Älä huomioi varmennevirheitä",
|
||||||
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS sertifikaattien validointivirheitä (ei suositeltu)",
|
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS-varmenteiden validointivirheitä (ei suositeltu)",
|
||||||
"notification_email_password_description": "Sähköpostipalvelimen salasana",
|
"notification_email_password_description": "Sähköpostipalvelimen salasana",
|
||||||
"notification_email_port_description": "Sähköpostipalvelimen portti (esim. 25, 465, tai 587)",
|
"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",
|
"notification_email_sent_test_email_button": "Lähetä testaussähköposti ja tallenna",
|
||||||
@@ -170,13 +180,13 @@
|
|||||||
"notification_settings": "Ilmoitusasetukset",
|
"notification_settings": "Ilmoitusasetukset",
|
||||||
"notification_settings_description": "Hallitse ilmoitusasetuksia, myös sähköpostin",
|
"notification_settings_description": "Hallitse ilmoitusasetuksia, myös sähköpostin",
|
||||||
"oauth_auto_launch": "Automaattinen käynnistys",
|
"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": "Automaattinen rekisteröinti",
|
||||||
"oauth_auto_register_description": "Rekisteröi uudet OAuth:lla kirjautuvat käyttäjät automaattisesti",
|
"oauth_auto_register_description": "Rekisteröi uudet OAuth:lla kirjautuvat käyttäjät automaattisesti",
|
||||||
"oauth_button_text": "Painikkeen teksti",
|
"oauth_button_text": "Painikkeen teksti",
|
||||||
"oauth_client_id": "Client ID",
|
"oauth_client_id": "Client ID",
|
||||||
"oauth_client_secret": "Client Secret",
|
"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_issuer_url": "Toimitsijan URL",
|
||||||
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI",
|
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI",
|
||||||
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
|
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
|
||||||
@@ -185,7 +195,7 @@
|
|||||||
"oauth_profile_signing_algorithm_description": "Algoritmi, jota käytetään käyttäjäprofiilin allekirjoittamiseen.",
|
"oauth_profile_signing_algorithm_description": "Algoritmi, jota käytetään käyttäjäprofiilin allekirjoittamiseen.",
|
||||||
"oauth_scope": "Skooppi (Scope)",
|
"oauth_scope": "Skooppi (Scope)",
|
||||||
"oauth_settings": "OAuth",
|
"oauth_settings": "OAuth",
|
||||||
"oauth_settings_description": "Hallitse OAuth kirjautumisen asetuksia",
|
"oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia",
|
||||||
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
|
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
|
||||||
"oauth_signing_algorithm": "Allekirjoitusalgoritmi",
|
"oauth_signing_algorithm": "Allekirjoitusalgoritmi",
|
||||||
"oauth_storage_label_claim": "Tallennustilan nimikkeen valtuutusväittämä (claim)",
|
"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",
|
"require_password_change_on_login": "Vaadi käyttäjää vaihtamaan salasana ensimmäisellä kirjautumiskerralla",
|
||||||
"reset_settings_to_default": "Nollaa asetukset oletuksille",
|
"reset_settings_to_default": "Nollaa asetukset oletuksille",
|
||||||
"reset_settings_to_recent_saved": "Palauta aiemmin tallennetut asetukset",
|
"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_changed_files": "Etsitään kirjaston muuttuneita tiedostoja",
|
||||||
"scanning_library_for_new_files": "Etsitään uusia tiedostoja",
|
"scanning_library_for_new_files": "Etsitään uusia tiedostoja",
|
||||||
"search_jobs": "Etsi tehtäviä...",
|
"search_jobs": "Etsi tehtäviä...",
|
||||||
@@ -230,9 +241,9 @@
|
|||||||
"storage_template_date_time_sample": "Esimerkki päivämäärä {date}",
|
"storage_template_date_time_sample": "Esimerkki päivämäärä {date}",
|
||||||
"storage_template_enable_description": "Ota käyttöön tallennustilan mallit",
|
"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": "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": "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_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_migration_job": "Tallennustilan mallin muutostyö",
|
||||||
"storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>",
|
"storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>",
|
||||||
@@ -244,7 +255,7 @@
|
|||||||
"system_settings": "Järjestelmäasetukset",
|
"system_settings": "Järjestelmäasetukset",
|
||||||
"tag_cleanup_job": "Merkintäpuhdistus",
|
"tag_cleanup_job": "Merkintäpuhdistus",
|
||||||
"theme_custom_css_settings": "Mukautettu CSS",
|
"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": "Teeman asetukset",
|
||||||
"theme_settings_description": "Kustomoi Immichin web-käyttöliittymää",
|
"theme_settings_description": "Kustomoi Immichin web-käyttöliittymää",
|
||||||
"these_files_matched_by_checksum": "Näillä tiedostoilla on yhteinen tarkistussumma",
|
"these_files_matched_by_checksum": "Näillä tiedostoilla on yhteinen tarkistussumma",
|
||||||
@@ -267,7 +278,7 @@
|
|||||||
"transcoding_audio_codec": "Äänikoodekki",
|
"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_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_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": "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_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ä",
|
"transcoding_constant_rate_factor": "Vakionopeustekijä",
|
||||||
@@ -276,7 +287,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Laitteistokiihdytys",
|
"transcoding_hardware_acceleration": "Laitteistokiihdytys",
|
||||||
"transcoding_hardware_acceleration_description": "Kokeellinen. Paljon nopeampi, mutta huonompaa laatua samalla bittinopeudella",
|
"transcoding_hardware_acceleration_description": "Kokeellinen. Paljon nopeampi, mutta huonompaa laatua samalla bittinopeudella",
|
||||||
"transcoding_hardware_decoding": "Laitteiston dekoodaus",
|
"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_hevc_codec": "HEVC koodekki",
|
||||||
"transcoding_max_b_frames": "B-kehysten enimmäismäärä",
|
"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.",
|
"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.",
|
"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_enabled_description": "Ota käyttöön roskakori",
|
||||||
"trash_number_of_days": "Päivien lukumäärä",
|
"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": "Roskakorin asetukset",
|
||||||
"trash_settings_description": "Hallitse roskakoriasetuksia",
|
"trash_settings_description": "Hallitse roskakoriasetuksia",
|
||||||
"untracked_files": "Tiedostot joita ei seurata",
|
"untracked_files": "Tiedostot joita ei seurata",
|
||||||
@@ -320,7 +331,7 @@
|
|||||||
"user_cleanup_job": "Käyttäjien puhdistus",
|
"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": "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": "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": "<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_delete_immediately_checkbox": "Aseta tili ja sen kohteet jonoon välitöntä poistoa varten",
|
||||||
"user_management": "Käyttäjien hallinta",
|
"user_management": "Käyttäjien hallinta",
|
||||||
@@ -332,7 +343,7 @@
|
|||||||
"user_settings_description": "Hallitse käyttäjäasetuksia",
|
"user_settings_description": "Hallitse käyttäjäasetuksia",
|
||||||
"user_successfully_removed": "Käyttäjä {email} on poistettu.",
|
"user_successfully_removed": "Käyttäjä {email} on poistettu.",
|
||||||
"version_check_enabled_description": "Ota käyttöön versiotarkastus",
|
"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": "Versiotarkistus",
|
||||||
"version_check_settings_description": "Ota käyttöön ilmoitukset, kun uusi versio on saatavilla",
|
"version_check_settings_description": "Ota käyttöön ilmoitukset, kun uusi versio on saatavilla",
|
||||||
"video_conversion_job": "Transkoodaa videot",
|
"video_conversion_job": "Transkoodaa videot",
|
||||||
@@ -395,7 +406,7 @@
|
|||||||
"asset_has_unassigned_faces": "Kohteella on määrittämättömiä kasvoja",
|
"asset_has_unassigned_faces": "Kohteella on määrittämättömiä kasvoja",
|
||||||
"asset_hashing": "Hajautetaan...",
|
"asset_hashing": "Hajautetaan...",
|
||||||
"asset_offline": "Aineisto offline-tilassa",
|
"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": "Ohitettu",
|
||||||
"asset_skipped_in_trash": "Roskakorissa",
|
"asset_skipped_in_trash": "Roskakorissa",
|
||||||
"asset_uploaded": "Lähetetty",
|
"asset_uploaded": "Lähetetty",
|
||||||
@@ -409,19 +420,20 @@
|
|||||||
"assets_moved_to_trash_count": "Siirretty {count, plural, one {# media} other {# mediaa}} roskakoriin",
|
"assets_moved_to_trash_count": "Siirretty {count, plural, one {# media} other {# mediaa}} roskakoriin",
|
||||||
"assets_permanently_deleted_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
|
"assets_permanently_deleted_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
|
||||||
"assets_removed_count": "{count, plural, one {# media} other {# mediaa}} poistettu",
|
"assets_removed_count": "{count, plural, one {# media} other {# mediaa}} poistettu",
|
||||||
"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_restored_count": "{count, plural, one {# media} other {# mediaa}} palautettu",
|
||||||
"assets_trashed_count": "{count, plural, one {# media} other {# mediaa}} siirretty roskakoriin",
|
"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",
|
"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": "Takaisin",
|
||||||
"back_close_deselect": "Palaa, sulje tai poista valinnat",
|
"back_close_deselect": "Palaa, sulje tai poista valinnat",
|
||||||
"backward": "Taaksepäin",
|
"backward": "Taaksepäin",
|
||||||
"birthdate_saved": "Syntymäaika tallennettu",
|
"birthdate_saved": "Syntymäaika tallennettu",
|
||||||
"birthdate_set_description": "Syntymäaikaa käytetään laskemaan henkilön ikä kuvanottohetkellä.",
|
"birthdate_set_description": "Syntymäaikaa käytetään laskemaan henkilön ikä kuvanottohetkellä.",
|
||||||
"blurred_background": "Sumennettu tausta",
|
"blurred_background": "Sumennettu tausta",
|
||||||
"build": "Rakenna",
|
"bugs_and_feature_requests": "Bugit ja ominaisuuspyynnöt",
|
||||||
"build_image": "Rakenna kuva",
|
"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_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_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.",
|
"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_person_hint": "Määritä valitut mediat uudelle henkilölle",
|
||||||
"create_new_user": "Luo uusi käyttäjä",
|
"create_new_user": "Luo uusi käyttäjä",
|
||||||
"create_tag": "Luo tunniste",
|
"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ä",
|
"create_user": "Luo käyttäjä",
|
||||||
"created": "Luotu",
|
"created": "Luotu",
|
||||||
"current_device": "Nykyinen laite",
|
"current_device": "Nykyinen laite",
|
||||||
@@ -520,14 +532,16 @@
|
|||||||
"delete_link": "Poista linkki",
|
"delete_link": "Poista linkki",
|
||||||
"delete_shared_link": "Poista jaettu linkki",
|
"delete_shared_link": "Poista jaettu linkki",
|
||||||
"delete_tag": "Poista tunniste",
|
"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ä",
|
"delete_user": "Poista käyttäjä",
|
||||||
"deleted_shared_link": "Jaettu linkki poistettu",
|
"deleted_shared_link": "Jaettu linkki poistettu",
|
||||||
|
"deletes_missing_assets": "Poistaa levyltä puuttuvat resurssit",
|
||||||
"description": "Kuvaus",
|
"description": "Kuvaus",
|
||||||
"details": "TIEDOT",
|
"details": "TIEDOT",
|
||||||
"direction": "Suunta",
|
"direction": "Suunta",
|
||||||
"disabled": "Poistettu käytöstä",
|
"disabled": "Poistettu käytöstä",
|
||||||
"disallow_edits": "Älä salli muokkauksia",
|
"disallow_edits": "Älä salli muokkauksia",
|
||||||
|
"discord": "Discord",
|
||||||
"discover": "Tutki",
|
"discover": "Tutki",
|
||||||
"dismiss_all_errors": "Sivuuta kaikki virheet",
|
"dismiss_all_errors": "Sivuuta kaikki virheet",
|
||||||
"dismiss_error": "Sivuuta virhe",
|
"dismiss_error": "Sivuuta virhe",
|
||||||
@@ -536,6 +550,7 @@
|
|||||||
"display_original_photos": "Näytä alkuperäiset kuvat",
|
"display_original_photos": "Näytä alkuperäiset kuvat",
|
||||||
"display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva peukalokuvan sijasta kun alkuperäinen aineisto on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.",
|
"display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva peukalokuvan sijasta kun alkuperäinen aineisto on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.",
|
||||||
"do_not_show_again": "Älä näytä tätä enää",
|
"do_not_show_again": "Älä näytä tätä enää",
|
||||||
|
"documentation": "Dokumentaatio",
|
||||||
"done": "Valmis",
|
"done": "Valmis",
|
||||||
"download": "Lataa",
|
"download": "Lataa",
|
||||||
"download_include_embedded_motion_videos": "Upotetut videot",
|
"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_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_assets_to_shared_link": "Medioiden lisääminen jaettuun linkkiin epäonnistui",
|
||||||
"unable_to_add_comment": "Kommentin lisääminen 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_import_path": "Tuontipolkua ei voitu lisätä",
|
||||||
"unable_to_add_partners": "Kumppaneita 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}}",
|
"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_album": "Albumin poistaminen epäonnistui",
|
||||||
"unable_to_delete_asset": "Kohteen poistaminen epäonnistui",
|
"unable_to_delete_asset": "Kohteen poistaminen epäonnistui",
|
||||||
"unable_to_delete_assets": "Virhe kohteen poistamisessa",
|
"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_import_path": "Tuontipolkua ei voitu poistaa",
|
||||||
"unable_to_delete_shared_link": "Jaetun linkin poistaminen epäonnistui",
|
"unable_to_delete_shared_link": "Jaetun linkin poistaminen epäonnistui",
|
||||||
"unable_to_delete_user": "Käyttäjän poistaminen epäonnistui",
|
"unable_to_delete_user": "Käyttäjän poistaminen epäonnistui",
|
||||||
"unable_to_download_files": "Tiedostojen lataaminen 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_edit_import_path": "Tuontipolkua ei voitu muokata",
|
||||||
"unable_to_empty_trash": "Roskakorin tyhjentäminen epäonnistui",
|
"unable_to_empty_trash": "Roskakorin tyhjentäminen epäonnistui",
|
||||||
"unable_to_enter_fullscreen": "Koko ruudun tilaan siirtyminen 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_api_key": "API-avaimen poistaminen epäonnistui",
|
||||||
"unable_to_remove_assets_from_shared_link": "kohteiden poistaminen jaetusta linkistä epäonnistui",
|
"unable_to_remove_assets_from_shared_link": "kohteiden poistaminen jaetusta linkistä epäonnistui",
|
||||||
"unable_to_remove_comment": "",
|
"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_library": "Kirjaston poistaminen epäonnistui",
|
||||||
"unable_to_remove_offline_files": "Offline-tiedostojen poistaminen epäonnistui",
|
"unable_to_remove_offline_files": "Offline-tiedostojen poistaminen epäonnistui",
|
||||||
"unable_to_remove_partner": "Kumppanin poistaminen epäonnistui",
|
"unable_to_remove_partner": "Kumppanin poistaminen epäonnistui",
|
||||||
@@ -729,7 +745,7 @@
|
|||||||
"expired": "Voimassaolo päättynyt",
|
"expired": "Voimassaolo päättynyt",
|
||||||
"expires_date": "Vanhenee {date}",
|
"expires_date": "Vanhenee {date}",
|
||||||
"explore": "Tutki",
|
"explore": "Tutki",
|
||||||
"explorer": "Tutkija",
|
"explorer": "Selain",
|
||||||
"export": "Vie",
|
"export": "Vie",
|
||||||
"export_as_json": "Vie JSON-muodossa",
|
"export_as_json": "Vie JSON-muodossa",
|
||||||
"extension": "Tiedostopääte",
|
"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_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}",
|
"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": "",
|
"img": "",
|
||||||
"immich_logo": "Immich Logo",
|
"immich_logo": "Immich-logo",
|
||||||
"immich_web_interface": "Immich verkkoliittymä",
|
"immich_web_interface": "Immich-verkkokäyttöliittymä",
|
||||||
"import_from_json": "Tuo JSON-tiedostosta",
|
"import_from_json": "Tuo JSON-tiedostosta",
|
||||||
"import_path": "Tuontipolku",
|
"import_path": "Tuontipolku",
|
||||||
"in_albums": "{count, plural, one {# Albumissa} other {# albumissa}}",
|
"in_albums": "{count, plural, one {# Albumissa} other {# albumissa}}",
|
||||||
@@ -847,6 +863,7 @@
|
|||||||
"look": "Tyyli",
|
"look": "Tyyli",
|
||||||
"loop_videos": "Toista videot uudelleen",
|
"loop_videos": "Toista videot uudelleen",
|
||||||
"loop_videos_description": "Ota käyttöön videon automaattinen toisto tarkemmassa näkymässä.",
|
"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",
|
"make": "Valmistaja",
|
||||||
"manage_shared_links": "Hallitse jaettuja linkkejä",
|
"manage_shared_links": "Hallitse jaettuja linkkejä",
|
||||||
"manage_sharing_with_partners": "Hallitse jakamista kumppaneille",
|
"manage_sharing_with_partners": "Hallitse jakamista kumppaneille",
|
||||||
@@ -856,7 +873,7 @@
|
|||||||
"manage_your_devices": "Hallitse sisäänkirjautuneita laitteitasi",
|
"manage_your_devices": "Hallitse sisäänkirjautuneita laitteitasi",
|
||||||
"manage_your_oauth_connection": "Hallitse OAuth-yhteyttäsi",
|
"manage_your_oauth_connection": "Hallitse OAuth-yhteyttäsi",
|
||||||
"map": "Kartta",
|
"map": "Kartta",
|
||||||
"map_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_marker_with_image": "Karttamarkerointi kuvalla",
|
||||||
"map_settings": "Kartta-asetukset",
|
"map_settings": "Kartta-asetukset",
|
||||||
"matches": "Osumia",
|
"matches": "Osumia",
|
||||||
@@ -884,7 +901,7 @@
|
|||||||
"name_or_nickname": "Nimi tai lempinimi",
|
"name_or_nickname": "Nimi tai lempinimi",
|
||||||
"never": "ei koskaan",
|
"never": "ei koskaan",
|
||||||
"new_album": "Uusi Albumi",
|
"new_album": "Uusi Albumi",
|
||||||
"new_api_key": "Uusi API Key",
|
"new_api_key": "Uusi API-avain",
|
||||||
"new_password": "Uusi salasana",
|
"new_password": "Uusi salasana",
|
||||||
"new_person": "Uusi henkilö",
|
"new_person": "Uusi henkilö",
|
||||||
"new_user_created": "Uusi käyttäjä lisätty",
|
"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_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",
|
"note_unlimited_quota": "Huomio: Syötä 0 rajoittamatonta kiintiötä varten",
|
||||||
"notes": "Muistiinpanot",
|
"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": "Ilmoitukset",
|
||||||
"notifications_setting_description": "Hallitse ilmoituksia",
|
"notifications_setting_description": "Hallitse ilmoituksia",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"official_immich_resources": "Viralliset Immich-resurssit",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offline_paths": "Offline-polut",
|
"offline_paths": "Offline-polut",
|
||||||
"offline_paths_description": "Nämä tulokset voivat johtua tiedostojen manuaalisesta poistamisesta, jotka eivät ole osa ulkoista kirjastoa.",
|
"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_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_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_panel_title": "Tue projektia",
|
||||||
"purchase_per_server": "Per serveri",
|
"purchase_per_server": "Per palvelin",
|
||||||
"purchase_per_user": "Per käyttäjä",
|
"purchase_per_user": "Per käyttäjä",
|
||||||
"purchase_remove_product_key": "Poista Tuoteavain",
|
"purchase_remove_product_key": "Poista Tuoteavain",
|
||||||
"purchase_remove_product_key_prompt": "Haluatko varmasti poistaa tuoteavaimen?",
|
"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_remove_server_product_key_prompt": "Haluatko varmasti poistaa palvelimen tuoteavaimen?",
|
||||||
"purchase_server_description_1": "Koko palvelimelle",
|
"purchase_server_description_1": "Koko palvelimelle",
|
||||||
"purchase_server_description_2": "Tukijan tila",
|
"purchase_server_description_2": "Tukijan tila",
|
||||||
"purchase_server_title": "Serveri",
|
"purchase_server_title": "Palvelin",
|
||||||
"purchase_settings_server_activated": "Palvelimen tuoteavainta hallinnoi ylläpitäjä",
|
"purchase_settings_server_activated": "Palvelimen tuoteavainta hallinnoi ylläpitäjä",
|
||||||
"range": "",
|
"range": "",
|
||||||
"rating": "Tähtiarvostelu",
|
"rating": "Tähtiarvostelu",
|
||||||
"rating_clear": "Tyhjennä arvostelu",
|
"rating_clear": "Tyhjennä arvostelu",
|
||||||
"rating_count": "{count, plural, one {# tähti} other {# tähteä}}",
|
"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": "",
|
"raw": "",
|
||||||
"reaction_options": "Reaktioasetukset",
|
"reaction_options": "Reaktioasetukset",
|
||||||
"read_changelog": "Lue muutosloki",
|
"read_changelog": "Lue muutosloki",
|
||||||
@@ -1049,11 +1067,13 @@
|
|||||||
"recent_searches": "Edelliset haut",
|
"recent_searches": "Edelliset haut",
|
||||||
"refresh": "Päivitä",
|
"refresh": "Päivitä",
|
||||||
"refresh_encoded_videos": "Päivitä enkoodatut videot",
|
"refresh_encoded_videos": "Päivitä enkoodatut videot",
|
||||||
|
"refresh_faces": "Päivitä kasvot",
|
||||||
"refresh_metadata": "Päivitä metadata",
|
"refresh_metadata": "Päivitä metadata",
|
||||||
"refresh_thumbnails": "Päivitä pikkukuvat",
|
"refresh_thumbnails": "Päivitä pikkukuvat",
|
||||||
"refreshed": "Päivitetty",
|
"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_encoded_video": "Päivitetään enkoodattu video",
|
||||||
|
"refreshing_faces": "Päivitetään kasvoja",
|
||||||
"refreshing_metadata": "Päivitetään metadata",
|
"refreshing_metadata": "Päivitetään metadata",
|
||||||
"regenerating_thumbnails": "Regeneroidaan pikkukuvia",
|
"regenerating_thumbnails": "Regeneroidaan pikkukuvia",
|
||||||
"remove": "Poista",
|
"remove": "Poista",
|
||||||
@@ -1066,7 +1086,7 @@
|
|||||||
"remove_from_favorites": "Poista suosikeista",
|
"remove_from_favorites": "Poista suosikeista",
|
||||||
"remove_from_shared_link": "Poista jakolinkistä",
|
"remove_from_shared_link": "Poista jakolinkistä",
|
||||||
"remove_user": "Poista käyttäjä",
|
"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_archive": "Poistettu arkistosta",
|
||||||
"removed_from_favorites": "Poistettu suosikeista",
|
"removed_from_favorites": "Poistettu suosikeista",
|
||||||
"removed_from_favorites_count": "{count, plural, other {Poistettu #}} suosikeista",
|
"removed_from_favorites_count": "{count, plural, other {Poistettu #}} suosikeista",
|
||||||
@@ -1096,12 +1116,13 @@
|
|||||||
"role_editor": "Editori",
|
"role_editor": "Editori",
|
||||||
"role_viewer": "Toistin",
|
"role_viewer": "Toistin",
|
||||||
"save": "Tallenna",
|
"save": "Tallenna",
|
||||||
"saved_api_key": "API Key tallennettu",
|
"saved_api_key": "API-avain tallennettu",
|
||||||
"saved_profile": "Profiili tallennettu",
|
"saved_profile": "Profiili tallennettu",
|
||||||
"saved_settings": "Asetukset tallennettu",
|
"saved_settings": "Asetukset tallennettu",
|
||||||
"say_something": "Sano jotain",
|
"say_something": "Sano jotain",
|
||||||
"scan_all_libraries": "Skannaa kaikki kirjastot",
|
"scan_all_libraries": "Skannaa kaikki kirjastot",
|
||||||
"scan_all_library_files": "Skannaa uudelleen kaikki kirjastotiedostot",
|
"scan_all_library_files": "Skannaa uudelleen kaikki kirjastotiedostot",
|
||||||
|
"scan_library": "Skannaa",
|
||||||
"scan_new_library_files": "Skannaa uusia kirjastotiedostoja",
|
"scan_new_library_files": "Skannaa uusia kirjastotiedostoja",
|
||||||
"scan_settings": "Skannausasetukset",
|
"scan_settings": "Skannausasetukset",
|
||||||
"scanning_for_album": "Etsitään albumia...",
|
"scanning_for_album": "Etsitään albumia...",
|
||||||
@@ -1122,7 +1143,7 @@
|
|||||||
"search_places": "Etsi paikkoja",
|
"search_places": "Etsi paikkoja",
|
||||||
"search_settings": "Hakuasetukset",
|
"search_settings": "Hakuasetukset",
|
||||||
"search_state": "Etsi tilaa...",
|
"search_state": "Etsi tilaa...",
|
||||||
"search_tags": "Haku tageja...",
|
"search_tags": "Etsi tunnisteita...",
|
||||||
"search_timezone": "Etsi aikavyöhyke...",
|
"search_timezone": "Etsi aikavyöhyke...",
|
||||||
"search_type": "Etsinnän tyyppi",
|
"search_type": "Etsinnän tyyppi",
|
||||||
"search_your_photos": "Etsi kuvia",
|
"search_your_photos": "Etsi kuvia",
|
||||||
@@ -1146,8 +1167,8 @@
|
|||||||
"send_message": "Lähetä viesti",
|
"send_message": "Lähetä viesti",
|
||||||
"send_welcome_email": "Lähetä tervetuloviesti",
|
"send_welcome_email": "Lähetä tervetuloviesti",
|
||||||
"server": "Palvelin",
|
"server": "Palvelin",
|
||||||
"server_offline": "Serveri Offline-tilassa",
|
"server_offline": "Palvelin Offline-tilassa",
|
||||||
"server_online": "Palvelin on linjalla",
|
"server_online": "Palvelin Online-tilassa",
|
||||||
"server_stats": "Palvelimen tilastot",
|
"server_stats": "Palvelimen tilastot",
|
||||||
"server_version": "Palvelimen versio",
|
"server_version": "Palvelimen versio",
|
||||||
"set": "Aseta",
|
"set": "Aseta",
|
||||||
@@ -1163,11 +1184,11 @@
|
|||||||
"shared_by": "Jakanut",
|
"shared_by": "Jakanut",
|
||||||
"shared_by_user": "Käyttäjän {user} jakama",
|
"shared_by_user": "Käyttäjän {user} jakama",
|
||||||
"shared_by_you": "Sinun jakamasi",
|
"shared_by_you": "Sinun jakamasi",
|
||||||
"shared_from_partner": "{partner}n kuvia",
|
"shared_from_partner": "Kumppanin {partner} kuvia",
|
||||||
"shared_link_options": "Jaetun linkin vaihtoehdot",
|
"shared_link_options": "Jaetun linkin vaihtoehdot",
|
||||||
"shared_links": "Jaetut linkit",
|
"shared_links": "Jaetut linkit",
|
||||||
"shared_photos_and_videos_count": "{assetCount, plural, other {# jaettua kuvaa ja videota.}}",
|
"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": "Jakaminen",
|
||||||
"sharing_enter_password": "Nähdäksesi sivun sinun tulee antaa salasana.",
|
"sharing_enter_password": "Nähdäksesi sivun sinun tulee antaa salasana.",
|
||||||
"sharing_sidebar_description": "Näytä jakamislinkki sivupalkissa",
|
"sharing_sidebar_description": "Näytä jakamislinkki sivupalkissa",
|
||||||
@@ -1188,6 +1209,7 @@
|
|||||||
"show_person_options": "Näytä henkilöasetukset",
|
"show_person_options": "Näytä henkilöasetukset",
|
||||||
"show_progress_bar": "Näytä eteneminen",
|
"show_progress_bar": "Näytä eteneminen",
|
||||||
"show_search_options": "Näytä hakuvaihtoehdot",
|
"show_search_options": "Näytä hakuvaihtoehdot",
|
||||||
|
"show_slideshow_transition": "Näytä diaesitys siirtymä",
|
||||||
"show_supporter_badge": "Kannattajan merkki",
|
"show_supporter_badge": "Kannattajan merkki",
|
||||||
"show_supporter_badge_description": "Näytä kannattajan merkki",
|
"show_supporter_badge_description": "Näytä kannattajan merkki",
|
||||||
"shuffle": "Sekoita",
|
"shuffle": "Sekoita",
|
||||||
@@ -1198,7 +1220,7 @@
|
|||||||
"size": "Koko",
|
"size": "Koko",
|
||||||
"skip_to_content": "Siirry sisältöön",
|
"skip_to_content": "Siirry sisältöön",
|
||||||
"skip_to_folders": "Siirry kansioihin",
|
"skip_to_folders": "Siirry kansioihin",
|
||||||
"skip_to_tags": "Siirry tageihin",
|
"skip_to_tags": "Siirry tunnisteisiin",
|
||||||
"slideshow": "Diaesitys",
|
"slideshow": "Diaesitys",
|
||||||
"slideshow_settings": "Diaesityksen asetukset",
|
"slideshow_settings": "Diaesityksen asetukset",
|
||||||
"sort_albums_by": "Järjestä albumit...",
|
"sort_albums_by": "Järjestä albumit...",
|
||||||
@@ -1208,7 +1230,7 @@
|
|||||||
"sort_oldest": "Vanhin kuva",
|
"sort_oldest": "Vanhin kuva",
|
||||||
"sort_recent": "Tuorein kuva",
|
"sort_recent": "Tuorein kuva",
|
||||||
"sort_title": "Otsikko",
|
"sort_title": "Otsikko",
|
||||||
"source": "Lähde",
|
"source": "Lähdekoodi",
|
||||||
"stack": "Pinoa",
|
"stack": "Pinoa",
|
||||||
"stack_duplicates": "Pinoa kaksoiskappaleet",
|
"stack_duplicates": "Pinoa kaksoiskappaleet",
|
||||||
"stack_select_one_photo": "Valitse yksi pääkuva pinolle",
|
"stack_select_one_photo": "Valitse yksi pääkuva pinolle",
|
||||||
@@ -1216,7 +1238,7 @@
|
|||||||
"stacked_assets_count": "Pinottu {count, plural, one {# media} other {# mediaa}}",
|
"stacked_assets_count": "Pinottu {count, plural, one {# media} other {# mediaa}}",
|
||||||
"stacktrace": "Vianetsintätiedot",
|
"stacktrace": "Vianetsintätiedot",
|
||||||
"start": "Aloita",
|
"start": "Aloita",
|
||||||
"start_date": "Alkupäivämäärä",
|
"start_date": "Alkupäivä",
|
||||||
"state": "Maakunta/osavaltio",
|
"state": "Maakunta/osavaltio",
|
||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
"stop_motion_photo": "Pysäytä liikkuva kuva",
|
"stop_motion_photo": "Pysäytä liikkuva kuva",
|
||||||
@@ -1229,21 +1251,25 @@
|
|||||||
"submit": "Lähetä",
|
"submit": "Lähetä",
|
||||||
"suggestions": "Ehdotukset",
|
"suggestions": "Ehdotukset",
|
||||||
"sunrise_on_the_beach": "Auringonnousu rannalla",
|
"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",
|
"swap_merge_direction": "Käännä yhdistämissuunta",
|
||||||
"sync": "Synkronoi",
|
"sync": "Synkronoi",
|
||||||
"tag": "Tagi",
|
"tag": "Lisää tunniste",
|
||||||
"tag_assets": "Merkitse kohde",
|
"tag_assets": "Lisää tunnisteita",
|
||||||
"tag_created": "Luotu tunniste: {tag}",
|
"tag_created": "Luotu tunniste: {tag}",
|
||||||
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tagiotsikoiden mukaan",
|
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan",
|
||||||
"tag_not_found_question": "Etkö löydä tunnistetta? Luo yksi <link>tästä</link>",
|
"tag_not_found_question": "Etkö löydä tunnistetta? <link> Luo uusi tunniste </link>",
|
||||||
"tag_updated": "Päivitetty tunniste: {tag}",
|
"tag_updated": "Päivitetty tunniste: {tag}",
|
||||||
"tagged_assets": "Tunnistettu {count, plural, one {# kohde} other {# kohdetta}}",
|
"tagged_assets": "Tunnistettu {count, plural, one {# kohde} other {# kohdetta}}",
|
||||||
"tags": "Tagit",
|
"tags": "Tunnisteet",
|
||||||
"template": "Template",
|
"template": "Template",
|
||||||
"theme": "Teema",
|
"theme": "Teema",
|
||||||
"theme_selection": "Teeman valinta",
|
"theme_selection": "Teeman valinta",
|
||||||
"theme_selection_description": "Aseta vaalea tai tumma tila automaattisesti perustuen selaimesi asetuksiin",
|
"theme_selection_description": "Aseta vaalea tai tumma tila automaattisesti perustuen selaimesi asetuksiin",
|
||||||
"they_will_be_merged_together": "Nämä tullaan yhdistämään",
|
"they_will_be_merged_together": "Nämä tullaan yhdistämään",
|
||||||
|
"third_party_resources": "Kolmannen osapuolen resurssit",
|
||||||
"time_based_memories": "Aikaan perustuvat muistot",
|
"time_based_memories": "Aikaan perustuvat muistot",
|
||||||
"timezone": "Aikavyöhyke",
|
"timezone": "Aikavyöhyke",
|
||||||
"to_archive": "Arkistoi",
|
"to_archive": "Arkistoi",
|
||||||
@@ -1314,6 +1340,8 @@
|
|||||||
"version": "Versio",
|
"version": "Versio",
|
||||||
"version_announcement_closing": "Ystäväsi Alex",
|
"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_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": "Video",
|
||||||
"video_hover_setting": "Toista esikatselun video kun kursori viedään sen päälle",
|
"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.",
|
"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.",
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
"added_to_favorites_count": "{count, number} ajouté(s) aux favoris",
|
"added_to_favorites_count": "{count, number} ajouté(s) aux favoris",
|
||||||
"admin": {
|
"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/** ».",
|
"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é à la poubelle. Si le fichier a été déplacé dans la bibliothèque, vérifiez votre chronologie pour le nouvel 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.",
|
"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": "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_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.",
|
"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.",
|
||||||
@@ -51,8 +51,8 @@
|
|||||||
"external_library_created_at": "Bibliothèque externe (créée le {date})",
|
"external_library_created_at": "Bibliothèque externe (créée le {date})",
|
||||||
"external_library_management": "Gestion de la bibliothèque externe",
|
"external_library_management": "Gestion de la bibliothèque externe",
|
||||||
"face_detection": "Détection des visages",
|
"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.",
|
"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. « Tout » (re)regroupe tous les visages. « Manquant » met en file d'attente les visages auxquels aucune personne n'a été attribuée.",
|
"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}",
|
"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.",
|
"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",
|
"forcing_refresh_library_files": "Forcer le rafraîchissement de tous les fichiers de la bibliothèque",
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
"image_prefer_embedded_preview": "Préférer l'aperçu intégré",
|
"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_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": "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 dépouillées, utilisée lors de la visualisation d'un seul média et pour l'apprentissage automatique",
|
"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_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_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": "Résolution des aperçus",
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
"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_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": "Paramètres d'image",
|
||||||
"image_settings_description": "Gestion de la qualité et 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 des métadonnées dépouillées, utilisée lors de la visualisation de groupes de photos comme sur la vue chronologique principale",
|
"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_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_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": "Résolution des miniatures",
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
"library_created": "Bibliothèque créée : {library}",
|
"library_created": "Bibliothèque créée : {library}",
|
||||||
"library_cron_expression": "Expression Cron",
|
"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_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_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_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": "Analyse périodique",
|
||||||
@@ -287,7 +287,7 @@
|
|||||||
"transcoding_hardware_acceleration": "Accélération matérielle",
|
"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_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": "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_hevc_codec": "Codec HEVC",
|
||||||
"transcoding_max_b_frames": "Nombre maximum de trames B",
|
"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.",
|
"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.",
|
||||||
@@ -360,7 +360,7 @@
|
|||||||
"album_added_notification_setting_description": "Recevoir une notification par courriel lorsque vous êtes ajouté(e) à un album partagé",
|
"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_cover_updated": "Couverture de l'album mise à jour",
|
||||||
"album_delete_confirmation": "Êtes-vous sûr de vouloir supprimer l'album {album} ?",
|
"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_info_updated": "Détails de l'album mis à jour",
|
||||||
"album_leave": "Quitter l'album ?",
|
"album_leave": "Quitter l'album ?",
|
||||||
"album_leave_confirmation": "Êtes-vous sûr de vouloir quitter l'album {album} ?",
|
"album_leave_confirmation": "Êtes-vous sûr de vouloir quitter l'album {album} ?",
|
||||||
@@ -431,6 +431,7 @@
|
|||||||
"birthdate_saved": "Date de naissance sauvée avec succès",
|
"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.",
|
"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é",
|
"blurred_background": "Arrière-plan flouté",
|
||||||
|
"bugs_and_feature_requests": "Bugs & demandes d'évolutions",
|
||||||
"build": "Version",
|
"build": "Version",
|
||||||
"build_image": "Image de la 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 !",
|
"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 !",
|
||||||
@@ -540,6 +541,7 @@
|
|||||||
"direction": "Direction",
|
"direction": "Direction",
|
||||||
"disabled": "Désactivé",
|
"disabled": "Désactivé",
|
||||||
"disallow_edits": "Ne pas autoriser les modifications",
|
"disallow_edits": "Ne pas autoriser les modifications",
|
||||||
|
"discord": "Discord",
|
||||||
"discover": "Découvrir",
|
"discover": "Découvrir",
|
||||||
"dismiss_all_errors": "Ignorer toutes les erreurs",
|
"dismiss_all_errors": "Ignorer toutes les erreurs",
|
||||||
"dismiss_error": "Ignorer l'erreur",
|
"dismiss_error": "Ignorer l'erreur",
|
||||||
@@ -548,6 +550,7 @@
|
|||||||
"display_original_photos": "Afficher les photos originales",
|
"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.",
|
"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",
|
"do_not_show_again": "Ne plus afficher ce message",
|
||||||
|
"documentation": "Documentation",
|
||||||
"done": "Terminé",
|
"done": "Terminé",
|
||||||
"download": "Télécharger",
|
"download": "Télécharger",
|
||||||
"download_include_embedded_motion_videos": "Vidéos embarquées",
|
"download_include_embedded_motion_videos": "Vidéos embarquées",
|
||||||
@@ -746,7 +749,7 @@
|
|||||||
"export_as_json": "Exporter en JSON",
|
"export_as_json": "Exporter en JSON",
|
||||||
"extension": "Extension",
|
"extension": "Extension",
|
||||||
"external": "Externe",
|
"external": "Externe",
|
||||||
"external_libraries": "Bibliothèques externes",
|
"external_libraries": "Bibliothèques ext.",
|
||||||
"face_unassigned": "Non attribué",
|
"face_unassigned": "Non attribué",
|
||||||
"failed_to_get_people": "Impossible d'obtenir les personnes",
|
"failed_to_get_people": "Impossible d'obtenir les personnes",
|
||||||
"favorite": "Favori",
|
"favorite": "Favori",
|
||||||
@@ -885,6 +888,7 @@
|
|||||||
"look": "Regarder",
|
"look": "Regarder",
|
||||||
"loop_videos": "Vidéos en boucle",
|
"loop_videos": "Vidéos en boucle",
|
||||||
"loop_videos_description": "Activer pour voir la vidéo en boucle dans le lecteur détaillé.",
|
"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",
|
"make": "Marque",
|
||||||
"manage_shared_links": "Gérer les liens partagés",
|
"manage_shared_links": "Gérer les liens partagés",
|
||||||
"manage_sharing_with_partners": "Gérer le partage avec les partenaires",
|
"manage_sharing_with_partners": "Gérer le partage avec les partenaires",
|
||||||
@@ -954,6 +958,7 @@
|
|||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
"notifications_setting_description": "Gérer les notifications",
|
"notifications_setting_description": "Gérer les notifications",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"official_immich_resources": "Ressources Immich officielles",
|
||||||
"offline": "Hors ligne",
|
"offline": "Hors ligne",
|
||||||
"offline_paths": "Chemins 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.",
|
"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.",
|
||||||
@@ -1088,11 +1093,13 @@
|
|||||||
"recent_searches": "Recherches récentes",
|
"recent_searches": "Recherches récentes",
|
||||||
"refresh": "Actualiser",
|
"refresh": "Actualiser",
|
||||||
"refresh_encoded_videos": "Actualiser les vidéos encodées",
|
"refresh_encoded_videos": "Actualiser les vidéos encodées",
|
||||||
|
"refresh_faces": "Mettre à jour les visages",
|
||||||
"refresh_metadata": "Actualiser les métadonnées",
|
"refresh_metadata": "Actualiser les métadonnées",
|
||||||
"refresh_thumbnails": "Actualiser les vignettes",
|
"refresh_thumbnails": "Actualiser les vignettes",
|
||||||
"refreshed": "Actualisé",
|
"refreshed": "Actualisé",
|
||||||
"refreshes_every_file": "Actualise tous les fichiers (existants et nouveaux)",
|
"refreshes_every_file": "Actualise tous les fichiers (existants et nouveaux)",
|
||||||
"refreshing_encoded_video": "Actualisation de la vidéo encodée",
|
"refreshing_encoded_video": "Actualisation de la vidéo encodée",
|
||||||
|
"refreshing_faces": "Actualiser les visages",
|
||||||
"refreshing_metadata": "Actualisation des métadonnées",
|
"refreshing_metadata": "Actualisation des métadonnées",
|
||||||
"regenerating_thumbnails": "Régénération des vignettes",
|
"regenerating_thumbnails": "Régénération des vignettes",
|
||||||
"remove": "Supprimer",
|
"remove": "Supprimer",
|
||||||
@@ -1251,7 +1258,7 @@
|
|||||||
"sort_title": "Titre",
|
"sort_title": "Titre",
|
||||||
"source": "Source",
|
"source": "Source",
|
||||||
"stack": "Empiler",
|
"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_select_one_photo": "Sélectionnez une photo principale pour la pile",
|
||||||
"stack_selected_photos": "Empiler les photos sélectionnées",
|
"stack_selected_photos": "Empiler les photos sélectionnées",
|
||||||
"stacked_assets_count": "{count, plural, one {# média empilé} other {# médias empilés}}",
|
"stacked_assets_count": "{count, plural, one {# média empilé} other {# médias empilés}}",
|
||||||
@@ -1270,6 +1277,9 @@
|
|||||||
"submit": "Soumettre",
|
"submit": "Soumettre",
|
||||||
"suggestions": "Suggestions",
|
"suggestions": "Suggestions",
|
||||||
"sunrise_on_the_beach": "Aurore sur la plage",
|
"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",
|
"swap_merge_direction": "Inverser la direction de fusion",
|
||||||
"sync": "Synchroniser",
|
"sync": "Synchroniser",
|
||||||
"tag": "Tag",
|
"tag": "Tag",
|
||||||
@@ -1285,6 +1295,7 @@
|
|||||||
"theme_selection": "Sélection du thème",
|
"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",
|
"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",
|
"they_will_be_merged_together": "Elles seront fusionnées ensemble",
|
||||||
|
"third_party_resources": "Ressources tierces",
|
||||||
"time_based_memories": "Souvenirs basés sur la date",
|
"time_based_memories": "Souvenirs basés sur la date",
|
||||||
"timezone": "Fuseau horaire",
|
"timezone": "Fuseau horaire",
|
||||||
"to_archive": "Archiver",
|
"to_archive": "Archiver",
|
||||||
@@ -1358,6 +1369,8 @@
|
|||||||
"version": "Version",
|
"version": "Version",
|
||||||
"version_announcement_closing": "Ton ami, Alex",
|
"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_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": "Vidéo",
|
||||||
"video_hover_setting": "Lire la miniature des vidéos au survol",
|
"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.",
|
"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.",
|
||||||
@@ -28,9 +28,10 @@
|
|||||||
"added_to_favorites_count": "{count, number} נוספו למועדפים",
|
"added_to_favorites_count": "{count, number} נוספו למועדפים",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "הוסף דפוסי החרגה. נתמכת התאמת דפוסים באמצעות *, ** ו-?. כדי להתעלם מכל הקבצים בתיקיה כלשהי בשם \"Raw\", השתמש ב \"**/Raw/**\". כדי להתעלם מכל הקבצים המסתיימים ב \"tif.\", השתמש ב \"tif.*/**\". כדי להתעלם מנתיב מוחלט, השתמש ב \"**/נתיב/להתעלמות\".",
|
"add_exclusion_pattern_description": "הוסף דפוסי החרגה. נתמכת התאמת דפוסים באמצעות *, ** ו-?. כדי להתעלם מכל הקבצים בתיקיה כלשהי בשם \"Raw\", השתמש ב \"**/Raw/**\". כדי להתעלם מכל הקבצים המסתיימים ב \"tif.\", השתמש ב \"tif.*/**\". כדי להתעלם מנתיב מוחלט, השתמש ב \"**/נתיב/להתעלמות\".",
|
||||||
"authentication_settings": "הגדרות אימות",
|
"asset_offline_description": "נכס ספרייה חיצונית זה לא נמצא יותר בדיסק והועבר לאשפה. אם הקובץ הועבר מתוך הספרייה, בדוק את ציר הזמן שלך עבור הנכס המקביל החדש. כדי לשחזר נכס זה, נא לוודא ש-Immich יכול לגשת אל נתיב הקובץ למטה וסרוק מחדש את הספרייה.",
|
||||||
"authentication_settings_description": "נהל סיסמה, OAuth, והגדרות אימות אחרות",
|
"authentication_settings": "הגדרות התחברות",
|
||||||
"authentication_settings_disable_all": "האם את/ה בטוח/ה שברצונך להשבית את כל שיטות ההתחברות? כניסה למערכת תהיה מושבתת לחלוטין.",
|
"authentication_settings_description": "נהל סיסמה, OAuth, והגדרות התחברות אחרות",
|
||||||
|
"authentication_settings_disable_all": "האם ברצונך להשבית את כל שיטות ההתחברות? כניסה למערכת תהיה מושבתת לחלוטין.",
|
||||||
"authentication_settings_reenable": "כדי לאפשר מחדש, השתמש ב<link>פקודת שרת</link>.",
|
"authentication_settings_reenable": "כדי לאפשר מחדש, השתמש ב<link>פקודת שרת</link>.",
|
||||||
"background_task_job": "משימות רקע",
|
"background_task_job": "משימות רקע",
|
||||||
"check_all": "סמן הכל",
|
"check_all": "סמן הכל",
|
||||||
@@ -50,8 +51,8 @@
|
|||||||
"external_library_created_at": "ספרייה חיצונית (נוצרה ב-{date})",
|
"external_library_created_at": "ספרייה חיצונית (נוצרה ב-{date})",
|
||||||
"external_library_management": "ניהול ספרייה חיצונית",
|
"external_library_management": "ניהול ספרייה חיצונית",
|
||||||
"face_detection": "איתור פנים",
|
"face_detection": "איתור פנים",
|
||||||
"face_detection_description": "אתר את הפנים בנכסים באמצעות למידת מכונה. עבור סרטונים, רק התמונה הממוזערת נלקחת בחשבון. \"הכל\" מעבד (מחדש) את כל הנכסים. \"חסרים\" מוסיף לתור נכסים שלא עובדו עדיין. לאחר שאיתור הפנים הושלם, פנים שאותרו יעמדו בתור לזיהוי פנים המשייך אותן לאנשים קיימים או חדשים.",
|
"face_detection_description": "אתר את הפנים בנכסים באמצעות למידת מכונה. עבור סרטונים, רק התמונה הממוזערת נלקחת בחשבון. \"רענון\" מעבד (מחדש) את כל הנכסים. \"איפוס\" מנקה בנוסף את כל נתוני הפנים הנוכחיים. \"חסרים\" מוסיף לתור נכסים שלא עובדו עדיין. לאחר שאיתור הפנים הושלם, פנים שאותרו יעמדו בתור לזיהוי פנים המשייך אותן לאנשים קיימים או חדשים.",
|
||||||
"facial_recognition_job_description": "קבץ פנים שאותרו לתוך אנשים. שלב זה מורץ לאחר השלמת איתור פנים. \"הכל\" מקבץ (מחדש) את כל הפרצופים. \"חסרים\" מוסיף לתור פנים שלא הוקצה להם אדם.",
|
"facial_recognition_job_description": "קבץ פנים שאותרו לתוך אנשים. שלב זה מורץ לאחר השלמת איתור פנים. \"איפוס\" מקבץ (מחדש) את כל הפרצופים. \"חסרים\" מוסיף לתור פנים שלא הוקצה להם אדם.",
|
||||||
"failed_job_command": "הפקודה {command} נכשלה עבור המשימה: {job}",
|
"failed_job_command": "הפקודה {command} נכשלה עבור המשימה: {job}",
|
||||||
"force_delete_user_warning": "אזהרה: פעולה זו תסיר מיד את המשתמש ואת כל הנכסים. לא ניתן לבטל פעולה זו והקבצים לא ניתנים לשחזור.",
|
"force_delete_user_warning": "אזהרה: פעולה זו תסיר מיד את המשתמש ואת כל הנכסים. לא ניתן לבטל פעולה זו והקבצים לא ניתנים לשחזור.",
|
||||||
"forcing_refresh_library_files": "כפיית רענון של כל קבצי הספרייה",
|
"forcing_refresh_library_files": "כפיית רענון של כל קבצי הספרייה",
|
||||||
@@ -61,18 +62,21 @@
|
|||||||
"image_prefer_embedded_preview_setting_description": "השתמש בתצוגות מקדימות מוטמעות בתמונות RAW כקלט לעיבוד תמונה כאשר זמינות. זה יכול להפיק צבעים מדויקים יותר עבור תמונות מסוימות, אבל האיכות של התצוגה המקדימה היא תלוית מצלמה ולתמונה עשויים להיות יותר פגמי דחיסה.",
|
"image_prefer_embedded_preview_setting_description": "השתמש בתצוגות מקדימות מוטמעות בתמונות RAW כקלט לעיבוד תמונה כאשר זמינות. זה יכול להפיק צבעים מדויקים יותר עבור תמונות מסוימות, אבל האיכות של התצוגה המקדימה היא תלוית מצלמה ולתמונה עשויים להיות יותר פגמי דחיסה.",
|
||||||
"image_prefer_wide_gamut": "העדף סולם צבעים רחב",
|
"image_prefer_wide_gamut": "העדף סולם צבעים רחב",
|
||||||
"image_prefer_wide_gamut_setting_description": "השתמש ב-Display P3 לתמונות ממוזערות. זה משמר טוב יותר את החיוניות של תמונות עם מרחבי צבע רחבים, אבל תמונות עשויות להופיע אחרת במכשירים ישנים עם גרסת דפדפן ישנה. תמונות sRGB נשמרות כ-sRGB כדי למנוע שינויי צבע.",
|
"image_prefer_wide_gamut_setting_description": "השתמש ב-Display P3 לתמונות ממוזערות. זה משמר טוב יותר את החיוניות של תמונות עם מרחבי צבע רחבים, אבל תמונות עשויות להופיע אחרת במכשירים ישנים עם גרסת דפדפן ישנה. תמונות sRGB נשמרות כ-sRGB כדי למנוע שינויי צבע.",
|
||||||
"image_preview_description": "תמונה בגודל בינוני עם מטא נתונים מופשטים, משמשת בעת צפייה בנכס בודד ולמידת מכונה",
|
"image_preview_description": "תמונה בגודל בינוני עם מטא-נתונים שהוסרו, משמשת בעת צפייה בנכס בודד ועבור למידת מכונה",
|
||||||
"image_preview_format": "פורמט תצוגה מקדימה",
|
"image_preview_format": "פורמט תצוגה מקדימה",
|
||||||
"image_preview_quality_description": "איכות תצוגה מקדימה בין 1-100. גבוה יותר טוב יותר, אבל מייצר קבצים גדולים יותר ויכול להפחית את התגובתיות באפליקציה. הגדרת ערך נמוך עשויה להשפיע על איכות תוצאות של למידת מכונה.",
|
"image_preview_quality_description": "איכות תצוגה מקדימה בין 1-100. גבוה יותר הוא טוב יותר, אבל מייצר קבצים גדולים יותר ויכול להפחית את תגובתיות היישום. הגדרת ערך נמוך עשויה להשפיע על איכות תוצאות של למידת מכונה.",
|
||||||
"image_preview_resolution": "רזולוציית תצוגה מקדימה",
|
"image_preview_resolution": "רזולוציית תצוגה מקדימה",
|
||||||
"image_preview_resolution_description": "משמש בעת צפייה בתמונה בודדת ועבור למידת מכונה. רזולוציות גבוהות יותר יכולות לשמר פירוט רב יותר אך לוקחות יותר זמן לקידוד, יש להן גדלי קבצים גדולים יותר, ויכולות להפחית את תגובתיות היישום.",
|
"image_preview_resolution_description": "משמש בעת צפייה בתמונה בודדת ועבור למידת מכונה. רזולוציות גבוהות יותר יכולות לשמר פירוט רב יותר אך לוקחות יותר זמן לקידוד, יש להן גדלי קבצים גדולים יותר, ויכולות להפחית את תגובתיות היישום.",
|
||||||
"image_preview_title": "הגדרות תצוגה מקדימה",
|
"image_preview_title": "הגדרות תצוגה מקדימה",
|
||||||
"image_quality": "איכות",
|
"image_quality": "איכות",
|
||||||
"image_quality_description": "איכות תמונה מ-1 עד 100. ערך גבוה יותר עדיף לאיכות אך מייצר קבצים גדולים יותר, אפשרות זו משפיעה על התצוגה המקדימה ותמונות ממוזערות.",
|
"image_quality_description": "איכות תמונה מ-1 עד 100. ערך גבוה יותר עדיף לאיכות אך מייצר קבצים גדולים יותר, אפשרות זו משפיעה על התצוגה המקדימה ותמונות ממוזערות.",
|
||||||
"image_resolution": "רזולוציה",
|
"image_resolution": "רזולוציה",
|
||||||
|
"image_resolution_description": "רזולוציות גבוהות יותר יכולות לשמר פרטים רבים יותר אך לוקחות זמן רב יותר לקידוד, יש להן גדלי קבצים גדולים יותר ויכולות להפחית את תגובתיות היישום.",
|
||||||
"image_settings": "הגדרות תמונה",
|
"image_settings": "הגדרות תמונה",
|
||||||
"image_settings_description": "נהל את האיכות והרזולוציה של תמונות שנוצרו",
|
"image_settings_description": "נהל את האיכות והרזולוציה של תמונות שנוצרו",
|
||||||
|
"image_thumbnail_description": "תמונה ממוזערת קטנה עם מטא-נתונים שהוסרו, משמשת בעת צפייה בקבוצות של תמונות כמו ציר הזמן הראשי",
|
||||||
"image_thumbnail_format": "פורמט תמונה ממוזערת",
|
"image_thumbnail_format": "פורמט תמונה ממוזערת",
|
||||||
|
"image_thumbnail_quality_description": "איכות תמונה ממוזערת בין 1-100. גבוה יותר הוא טוב יותר, אבל מייצר קבצים גדולים יותר ויכול להפחית את תגובתיות היישום.",
|
||||||
"image_thumbnail_resolution": "רזולוציית תמונה ממוזערת",
|
"image_thumbnail_resolution": "רזולוציית תמונה ממוזערת",
|
||||||
"image_thumbnail_resolution_description": "משמש בעת צפייה בקבוצות של תמונות (ציר זמן ראשי, תצוגת אלבום וכו'). רזולוציות גבוהות יותר יכולות לשמר פירוט רב יותר אך לוקחות יותר זמן לקידוד, יש להן גדלי קבצים גדולים יותר, ויכולות להפחית את תגובתיות היישום.",
|
"image_thumbnail_resolution_description": "משמש בעת צפייה בקבוצות של תמונות (ציר זמן ראשי, תצוגת אלבום וכו'). רזולוציות גבוהות יותר יכולות לשמר פירוט רב יותר אך לוקחות יותר זמן לקידוד, יש להן גדלי קבצים גדולים יותר, ויכולות להפחית את תגובתיות היישום.",
|
||||||
"image_thumbnail_title": "הגדרות תמונה ממוזערת",
|
"image_thumbnail_title": "הגדרות תמונה ממוזערת",
|
||||||
@@ -278,12 +282,12 @@
|
|||||||
"transcoding_constant_quality_mode": "מצב איכות קבועה",
|
"transcoding_constant_quality_mode": "מצב איכות קבועה",
|
||||||
"transcoding_constant_quality_mode_description": "ICQ טוב יותר מ-CQP, אך חלק מהתקני האצת החומרה אינם תומכים במצב זה. הגדרת אפשרות זו תעדיף את המצב שצוין בעת שימוש בקידוד מבוסס איכות. בהתעלמות מצד NVENC מכיוון שהוא אינו תומך ב-ICQ.",
|
"transcoding_constant_quality_mode_description": "ICQ טוב יותר מ-CQP, אך חלק מהתקני האצת החומרה אינם תומכים במצב זה. הגדרת אפשרות זו תעדיף את המצב שצוין בעת שימוש בקידוד מבוסס איכות. בהתעלמות מצד NVENC מכיוון שהוא אינו תומך ב-ICQ.",
|
||||||
"transcoding_constant_rate_factor": "גורם קצב קבוע (-crf)",
|
"transcoding_constant_rate_factor": "גורם קצב קבוע (-crf)",
|
||||||
"transcoding_constant_rate_factor_description": "רמת איכות וידאו. ערכים אופייניים הם הערך 23 עבור H.264, הערך 28 עבור HEVC, הערך 31 עבור VP9, והערך 35 עבור AV1. נמוך יותר טוב יותר, אבל מייצר קבצים גדולים יותר.",
|
"transcoding_constant_rate_factor_description": "רמת איכות וידאו. ערכים אופייניים הם הערך 23 עבור H.264, הערך 28 עבור HEVC, הערך 31 עבור VP9, והערך 35 עבור AV1. נמוך יותר הוא טוב יותר, אבל מייצר קבצים גדולים יותר.",
|
||||||
"transcoding_disabled_description": "אין להמיר את הקידוד של שום סרטון, עלול לגרום לכך שהניגון לא יפעל במכשירים מסוימים",
|
"transcoding_disabled_description": "אין להמיר את הקידוד של שום סרטון, עלול לגרום לכך שהניגון לא יפעל במכשירים מסוימים",
|
||||||
"transcoding_hardware_acceleration": "האצת חומרה",
|
"transcoding_hardware_acceleration": "האצת חומרה",
|
||||||
"transcoding_hardware_acceleration_description": "ניסיוני; המרה הרבה יותר מהירה, אבל תהיה באיכות נמוכה יותר באותו קצב סיביות",
|
"transcoding_hardware_acceleration_description": "ניסיוני; המרה הרבה יותר מהירה, אבל תהיה באיכות נמוכה יותר באותו קצב סיביות",
|
||||||
"transcoding_hardware_decoding": "פענוח חומרה",
|
"transcoding_hardware_decoding": "פענוח חומרה",
|
||||||
"transcoding_hardware_decoding_setting_description": "חל רק על NVENC, QSV ו-RKMPP. מאפשר האצה מקצה לקצה במקום רק להאיץ קידוד. ייתכן שלא יפעל על כל הסרטונים.",
|
"transcoding_hardware_decoding_setting_description": "מאפשר האצה מקצה לקצה במקום רק האצת קידוד. ייתכן שלא יפעל על כל הסרטונים.",
|
||||||
"transcoding_hevc_codec": "קידוד HEVC",
|
"transcoding_hevc_codec": "קידוד HEVC",
|
||||||
"transcoding_max_b_frames": "B-פריימים מרביים",
|
"transcoding_max_b_frames": "B-פריימים מרביים",
|
||||||
"transcoding_max_b_frames_description": "ערכים גבוהים יותר משפרים את יעילות הדחיסה, אך מאטים את הקידוד. ייתכן שלא יהיה תואם עם האצת חומרה במכשירים ישנים יותר. 0 משבית את B-פריימים, בעוד ש1- מגדיר את הערך זה באופן אוטומטי.",
|
"transcoding_max_b_frames_description": "ערכים גבוהים יותר משפרים את יעילות הדחיסה, אך מאטים את הקידוד. ייתכן שלא יהיה תואם עם האצת חומרה במכשירים ישנים יותר. 0 משבית את B-פריימים, בעוד ש1- מגדיר את הערך זה באופן אוטומטי.",
|
||||||
@@ -416,7 +420,7 @@
|
|||||||
"assets_moved_to_trash_count": "{count, plural, one {נכס # הועבר} other {# נכסים הועברו}} לאשפה",
|
"assets_moved_to_trash_count": "{count, plural, one {נכס # הועבר} other {# נכסים הועברו}} לאשפה",
|
||||||
"assets_permanently_deleted_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
|
"assets_permanently_deleted_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
|
||||||
"assets_removed_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_restored_count": "{count, plural, one {נכס # שוחזר} other {# נכסים שוחזרו}}",
|
||||||
"assets_trashed_count": "{count, plural, one {נכס # הושלך} other {# נכסים הושלכו}} לאשפה",
|
"assets_trashed_count": "{count, plural, one {נכס # הושלך} other {# נכסים הושלכו}} לאשפה",
|
||||||
"assets_were_part_of_album_count": "{count, plural, one {נכס היה} other {נכסים היו}} כבר חלק מהאלבום",
|
"assets_were_part_of_album_count": "{count, plural, one {נכס היה} other {נכסים היו}} כבר חלק מהאלבום",
|
||||||
@@ -427,6 +431,7 @@
|
|||||||
"birthdate_saved": "תאריך לידה נשמר בהצלחה",
|
"birthdate_saved": "תאריך לידה נשמר בהצלחה",
|
||||||
"birthdate_set_description": "תאריך לידה משמש לחישוב הגיל של האדם הזה בזמן תצלום.",
|
"birthdate_set_description": "תאריך לידה משמש לחישוב הגיל של האדם הזה בזמן תצלום.",
|
||||||
"blurred_background": "רקע מטושטש",
|
"blurred_background": "רקע מטושטש",
|
||||||
|
"bugs_and_feature_requests": "באגים & בקשות לתכונות",
|
||||||
"build": "Build",
|
"build": "Build",
|
||||||
"build_image": "Build Image",
|
"build_image": "Build Image",
|
||||||
"bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!",
|
"bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!",
|
||||||
@@ -536,6 +541,7 @@
|
|||||||
"direction": "כיוון",
|
"direction": "כיוון",
|
||||||
"disabled": "מושבת",
|
"disabled": "מושבת",
|
||||||
"disallow_edits": "אל תאפשר עריכות",
|
"disallow_edits": "אל תאפשר עריכות",
|
||||||
|
"discord": "דיסקורד",
|
||||||
"discover": "גלה",
|
"discover": "גלה",
|
||||||
"dismiss_all_errors": "התעלם מכל השגיאות",
|
"dismiss_all_errors": "התעלם מכל השגיאות",
|
||||||
"dismiss_error": "התעלם מהשגיאה",
|
"dismiss_error": "התעלם מהשגיאה",
|
||||||
@@ -544,6 +550,7 @@
|
|||||||
"display_original_photos": "הצג תמונות מקוריות",
|
"display_original_photos": "הצג תמונות מקוריות",
|
||||||
"display_original_photos_setting_description": "העדף להציג את התמונה המקורית בעת צפיית נכס במקום תמונות ממוזערות כאשר הנכס המקורי תומך בתצוגה בדפדפן. זה עלול לגרום לתמונות להיות מוצגות באיטיות.",
|
"display_original_photos_setting_description": "העדף להציג את התמונה המקורית בעת צפיית נכס במקום תמונות ממוזערות כאשר הנכס המקורי תומך בתצוגה בדפדפן. זה עלול לגרום לתמונות להיות מוצגות באיטיות.",
|
||||||
"do_not_show_again": "אל תציג את ההודעה הזאת שוב",
|
"do_not_show_again": "אל תציג את ההודעה הזאת שוב",
|
||||||
|
"documentation": "תיעוד",
|
||||||
"done": "סיום",
|
"done": "סיום",
|
||||||
"download": "הורדה",
|
"download": "הורדה",
|
||||||
"download_include_embedded_motion_videos": "סרטונים מוטמעים",
|
"download_include_embedded_motion_videos": "סרטונים מוטמעים",
|
||||||
@@ -881,6 +888,7 @@
|
|||||||
"look": "מראה",
|
"look": "מראה",
|
||||||
"loop_videos": "הפעלה חוזרת של סרטונים",
|
"loop_videos": "הפעלה חוזרת של סרטונים",
|
||||||
"loop_videos_description": "אפשר הפעלה חוזרת אוטומטית של סרטון במציג הפרטים.",
|
"loop_videos_description": "אפשר הפעלה חוזרת אוטומטית של סרטון במציג הפרטים.",
|
||||||
|
"main_branch_warning": "את/ה משתמש/ת בגרסת פיתוח; אנחנו ממליצים בחום להשתמש בגרסה יציבה!",
|
||||||
"make": "תוצרת",
|
"make": "תוצרת",
|
||||||
"manage_shared_links": "נהל קישורים משותפים",
|
"manage_shared_links": "נהל קישורים משותפים",
|
||||||
"manage_sharing_with_partners": "נהל שיתוף עם שותפים",
|
"manage_sharing_with_partners": "נהל שיתוף עם שותפים",
|
||||||
@@ -950,6 +958,7 @@
|
|||||||
"notifications": "התראות",
|
"notifications": "התראות",
|
||||||
"notifications_setting_description": "נהל התראות",
|
"notifications_setting_description": "נהל התראות",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"official_immich_resources": "משאבי Immich רשמיים",
|
||||||
"offline": "לא מקוון",
|
"offline": "לא מקוון",
|
||||||
"offline_paths": "נתיבים לא מקוונים",
|
"offline_paths": "נתיבים לא מקוונים",
|
||||||
"offline_paths_description": "תוצאות אלו עשויות להיות עקב מחיקה ידנית של קבצים שאינם חלק מספרייה חיצונית.",
|
"offline_paths_description": "תוצאות אלו עשויות להיות עקב מחיקה ידנית של קבצים שאינם חלק מספרייה חיצונית.",
|
||||||
@@ -1084,11 +1093,13 @@
|
|||||||
"recent_searches": "חיפושים אחרונים",
|
"recent_searches": "חיפושים אחרונים",
|
||||||
"refresh": "רענן",
|
"refresh": "רענן",
|
||||||
"refresh_encoded_videos": "רענן סרטונים מקודדים",
|
"refresh_encoded_videos": "רענן סרטונים מקודדים",
|
||||||
|
"refresh_faces": "רענן פנים",
|
||||||
"refresh_metadata": "רענן מטא-נתונים",
|
"refresh_metadata": "רענן מטא-נתונים",
|
||||||
"refresh_thumbnails": "רענן תמונות ממוזערות",
|
"refresh_thumbnails": "רענן תמונות ממוזערות",
|
||||||
"refreshed": "רוענן",
|
"refreshed": "רוענן",
|
||||||
"refreshes_every_file": "קורא מחדש את כל הקבצים הקיימים והחדשים",
|
"refreshes_every_file": "קורא מחדש את כל הקבצים הקיימים והחדשים",
|
||||||
"refreshing_encoded_video": "מרענן סרטון מקודד",
|
"refreshing_encoded_video": "מרענן סרטון מקודד",
|
||||||
|
"refreshing_faces": "מרענן פרצופים",
|
||||||
"refreshing_metadata": "מרענן מטא-נתונים",
|
"refreshing_metadata": "מרענן מטא-נתונים",
|
||||||
"regenerating_thumbnails": "מחדש תמונות ממוזערות",
|
"regenerating_thumbnails": "מחדש תמונות ממוזערות",
|
||||||
"remove": "הסר",
|
"remove": "הסר",
|
||||||
@@ -1224,7 +1235,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": "תג תומך",
|
"show_supporter_badge": "תג תומך",
|
||||||
"show_supporter_badge_description": "הצג תג תומך",
|
"show_supporter_badge_description": "הצג תג תומך",
|
||||||
"shuffle": "ערבוב",
|
"shuffle": "ערבוב",
|
||||||
@@ -1266,13 +1277,16 @@
|
|||||||
"submit": "שלח",
|
"submit": "שלח",
|
||||||
"suggestions": "הצעות",
|
"suggestions": "הצעות",
|
||||||
"sunrise_on_the_beach": "Sunrise on the beach (מומלץ לחפש באנגלית לתוצאות טובות יותר)",
|
"sunrise_on_the_beach": "Sunrise on the beach (מומלץ לחפש באנגלית לתוצאות טובות יותר)",
|
||||||
|
"support": "תמיכה",
|
||||||
|
"support_and_feedback": "תמיכה & משוב",
|
||||||
|
"support_third_party_description": "התקנת ה-Immich שלך נארזה על ידי צד שלישי. בעיות שאתה חווה עשויות להיגרם על ידי חבילה זו, אז בבקשה תעלה בעיות איתם ראשית כל באמצעות הקישורים למטה.",
|
||||||
"swap_merge_direction": "החלף כיוון מיזוג",
|
"swap_merge_direction": "החלף כיוון מיזוג",
|
||||||
"sync": "סנכרן",
|
"sync": "סנכרן",
|
||||||
"tag": "תג",
|
"tag": "תג",
|
||||||
"tag_assets": "תיוג נכסים",
|
"tag_assets": "תיוג נכסים",
|
||||||
"tag_created": "נוצר תג: {tag}",
|
"tag_created": "נוצר תג: {tag}",
|
||||||
"tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים",
|
"tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים",
|
||||||
"tag_not_found_question": "לא מצליח למצוא תג? <link>צור אחד חדש</link>",
|
"tag_not_found_question": "לא מצליח למצוא תג? <link>צור תג חדש</link>",
|
||||||
"tag_updated": "תג מעודכן: {tag}",
|
"tag_updated": "תג מעודכן: {tag}",
|
||||||
"tagged_assets": "תויגו {count, plural, one {נכס #} other {# נכסים}}",
|
"tagged_assets": "תויגו {count, plural, one {נכס #} other {# נכסים}}",
|
||||||
"tags": "תגים",
|
"tags": "תגים",
|
||||||
@@ -1281,6 +1295,7 @@
|
|||||||
"theme_selection": "בחירת ערכת נושא",
|
"theme_selection": "בחירת ערכת נושא",
|
||||||
"theme_selection_description": "הגדר אוטומטית את ערכת הנושא לבהיר או כהה בהתבסס על העדפת המערכת של הדפדפן שלך",
|
"theme_selection_description": "הגדר אוטומטית את ערכת הנושא לבהיר או כהה בהתבסס על העדפת המערכת של הדפדפן שלך",
|
||||||
"they_will_be_merged_together": "הם יתמזגו יחד",
|
"they_will_be_merged_together": "הם יתמזגו יחד",
|
||||||
|
"third_party_resources": "משאבי צד שלישי",
|
||||||
"time_based_memories": "זכרונות מבוססי זמן",
|
"time_based_memories": "זכרונות מבוססי זמן",
|
||||||
"timezone": "אזור זמן",
|
"timezone": "אזור זמן",
|
||||||
"to_archive": "העבר לארכיון",
|
"to_archive": "העבר לארכיון",
|
||||||
@@ -1354,6 +1369,8 @@
|
|||||||
"version": "גרסה",
|
"version": "גרסה",
|
||||||
"version_announcement_closing": "החבר שלך, אלכס",
|
"version_announcement_closing": "החבר שלך, אלכס",
|
||||||
"version_announcement_message": "הי חבר/ה, יש מהדורה חדשה של היישום, אנא קח/י את הזמן שלך לבקר ב <link>הערות פרסום</link> ולוודא שמבנה ה-<code>docker-compose.yml</code>, וה-<code>.env</code> שלך עדכני כדי למנוע תצורות שגויות, במיוחד אם את/ה משתמש/ת ב-WatchTower או בכל מנגנון שמטפל בעדכון היישום שלך באופן אוטומטי.",
|
"version_announcement_message": "הי חבר/ה, יש מהדורה חדשה של היישום, אנא קח/י את הזמן שלך לבקר ב <link>הערות פרסום</link> ולוודא שמבנה ה-<code>docker-compose.yml</code>, וה-<code>.env</code> שלך עדכני כדי למנוע תצורות שגויות, במיוחד אם את/ה משתמש/ת ב-WatchTower או בכל מנגנון שמטפל בעדכון היישום שלך באופן אוטומטי.",
|
||||||
|
"version_history": "היסטוריית גרסאות",
|
||||||
|
"version_history_item": "{version} הותקנה ב-{date}",
|
||||||
"video": "סרטון",
|
"video": "סרטון",
|
||||||
"video_hover_setting": "הפעל תצוגת סרטון מקדימה בעת ריחוף",
|
"video_hover_setting": "הפעל תצוגת סרטון מקדימה בעת ריחוף",
|
||||||
"video_hover_setting_description": "הפעל תצוגת סרטון מקדימה כאשר העכבר מרחף מעל פריט. אפילו כשהגדרה זו מושבתת, ניתן להתחיל את הניגון על ידי ריחוף מעל סמל ההפעלה.",
|
"video_hover_setting_description": "הפעל תצוגת סרטון מקדימה כאשר העכבר מרחף מעל פריט. אפילו כשהגדרה זו מושבתת, ניתן להתחיל את הניגון על ידי ריחוף מעל סמל ההפעלה.",
|
||||||
@@ -1379,5 +1396,5 @@
|
|||||||
"years_ago": "לפני {years, plural, one {שנה #} other {# שנים}}",
|
"years_ago": "לפני {years, plural, one {שנה #} other {# שנים}}",
|
||||||
"yes": "כן",
|
"yes": "כן",
|
||||||
"you_dont_have_any_shared_links": "אין לך קישורים משותפים",
|
"you_dont_have_any_shared_links": "אין לך קישורים משותפים",
|
||||||
"zoom_image": "התקרב לתמונה"
|
"zoom_image": "זום לתמונה"
|
||||||
}
|
}
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
"added_to_favorites_count": "Dodano {count, number} u omiljeno",
|
"added_to_favorites_count": "Dodano {count, number} u omiljeno",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "Dodajte uzorke izuzimanja. Globiranje pomoću *, ** i ? je podržano. Za ignoriranje svih datoteka u bilo kojem direktoriju pod nazivom \"Raw\", koristite \"**/Raw/**\". Da biste zanemarili sve datoteke koje završavaju na \".tif\", koristite \"**/*.tif\". Da biste zanemarili apsolutni put, koristite \"/path/to/ignore/**\".",
|
"add_exclusion_pattern_description": "Dodajte uzorke izuzimanja. Globiranje pomoću *, ** i ? je podržano. Za ignoriranje svih datoteka u bilo kojem direktoriju pod nazivom \"Raw\", koristite \"**/Raw/**\". Da biste zanemarili sve datoteke koje završavaju na \".tif\", koristite \"**/*.tif\". Da biste zanemarili apsolutni put, koristite \"/path/to/ignore/**\".",
|
||||||
|
"asset_offline_description": "Ovo sredstvo vanjske knjižnice više nije pronađeno na disku i premješteno je u smeće. Ako je datoteka premještena unutar biblioteke, provjerite svoju vremensku traku za novo odgovarajuće sredstvo. Da biste vratili ovo sredstvo, provjerite može li Immich pristupiti donjoj stazi datoteke i skenirajte biblioteku.",
|
||||||
"authentication_settings": "Postavke autentikacije",
|
"authentication_settings": "Postavke autentikacije",
|
||||||
"authentication_settings_description": "Uredi lozinku, OAuth, i druge postavke autentikacije",
|
"authentication_settings_description": "Uredi lozinku, OAuth, i druge postavke autentikacije",
|
||||||
"authentication_settings_disable_all": "Jeste li sigurni da želite onemogućenit sve načine prijave? Prijava će biti potpuno onemogućena.",
|
"authentication_settings_disable_all": "Jeste li sigurni da želite onemogućenit sve načine prijave? Prijava će biti potpuno onemogućena.",
|
||||||
@@ -54,12 +55,15 @@
|
|||||||
"failed_job_command": "Naredba {command} nije uspjela za posao: {job}",
|
"failed_job_command": "Naredba {command} nije uspjela za posao: {job}",
|
||||||
"force_delete_user_warning": "UPOZORENJE: Ovo će odmah ukloniti korisnika i sve pripadajuće podatke. Ovo se ne može poništiti i datoteke se ne mogu vratiti.",
|
"force_delete_user_warning": "UPOZORENJE: Ovo će odmah ukloniti korisnika i sve pripadajuće podatke. Ovo se ne može poništiti i datoteke se ne mogu vratiti.",
|
||||||
"forcing_refresh_library_files": "Prisilno osvježavanje svih datoteka knjižnice",
|
"forcing_refresh_library_files": "Prisilno osvježavanje svih datoteka knjižnice",
|
||||||
|
"image_format": "Format",
|
||||||
"image_format_description": "WebP proizvodi manje datoteke od JPEG-a, ali se sporije kodira.",
|
"image_format_description": "WebP proizvodi manje datoteke od JPEG-a, ali se sporije kodira.",
|
||||||
"image_prefer_embedded_preview": "Preferiraj ugrađeni pregled",
|
"image_prefer_embedded_preview": "Preferiraj ugrađeni pregled",
|
||||||
"image_prefer_embedded_preview_setting_description": "Koristite ugrađene preglede u RAW fotografije kao ulaz za obradu slike kada su dostupni. To može proizvesti preciznije boje za neke slike, ali kvaliteta pregleda ovisi o kameri i slika može imati više artefakata kompresije.",
|
"image_prefer_embedded_preview_setting_description": "Koristite ugrađene preglede u RAW fotografije kao ulaz za obradu slike kada su dostupni. To može proizvesti preciznije boje za neke slike, ali kvaliteta pregleda ovisi o kameri i slika može imati više artefakata kompresije.",
|
||||||
"image_prefer_wide_gamut": "Preferirajte široku gamu",
|
"image_prefer_wide_gamut": "Preferirajte široku gamu",
|
||||||
"image_prefer_wide_gamut_setting_description": "Koristite Display P3 za sličice. Ovo bolje čuva živost slika sa širokim prostorima boja, ali slike mogu izgledati drugačije na starim uređajima sa starom verzijom preglednika. sRGB slike čuvaju se kao sRGB kako bi se izbjegle promjene boja.",
|
"image_prefer_wide_gamut_setting_description": "Koristite Display P3 za sličice. Ovo bolje čuva živost slika sa širokim prostorima boja, ali slike mogu izgledati drugačije na starim uređajima sa starom verzijom preglednika. sRGB slike čuvaju se kao sRGB kako bi se izbjegle promjene boja.",
|
||||||
|
"image_preview_description": "Slika srednje veličine s ogoljenim metapodacima, koristi se prilikom pregledavanja jednog sredstva i za strojno učenje",
|
||||||
"image_preview_format": "Format pregleda",
|
"image_preview_format": "Format pregleda",
|
||||||
|
"image_preview_quality_description": "Kvaliteta pregleda od 1-100. Više je bolje, ali proizvodi veće datoteke i može smanjiti odziv aplikacije. Postavljanje niske vrijednosti može utjecati na kvalitetu strojnog učenja.",
|
||||||
"image_preview_resolution": "Razlučivost pregleda",
|
"image_preview_resolution": "Razlučivost pregleda",
|
||||||
"image_preview_resolution_description": "Koristi se pri gledanju jedne fotografije i za strojno učenje. Veće razlučivosti mogu sačuvati više detalja, ali trebaju dulje za kodiranje, imaju veće veličine datoteka i mogu smanjiti odaziv aplikacije.",
|
"image_preview_resolution_description": "Koristi se pri gledanju jedne fotografije i za strojno učenje. Veće razlučivosti mogu sačuvati više detalja, ali trebaju dulje za kodiranje, imaju veće veličine datoteka i mogu smanjiti odaziv aplikacije.",
|
||||||
"image_quality": "Kvaliteta",
|
"image_quality": "Kvaliteta",
|
||||||