mirror of
https://github.com/immich-app/immich.git
synced 2025-12-14 16:50:45 -08:00
Compare commits
267 Commits
fix/docs-f
...
fix/scrubb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4af8ae5f2 | ||
|
|
e94eb5012f | ||
|
|
4dcc049465 | ||
|
|
d784d431d0 | ||
|
|
1200bfad13 | ||
|
|
f11bfb9581 | ||
|
|
074fdb2b96 | ||
|
|
f1f203719d | ||
|
|
f73ca9d9c0 | ||
|
|
ad3f4fb434 | ||
|
|
8001dedcbf | ||
|
|
07a39226c5 | ||
|
|
88e7e21683 | ||
|
|
2cefbf8ca3 | ||
|
|
4a6c50cd81 | ||
|
|
e0535e20e6 | ||
|
|
62580455af | ||
|
|
0e7e67efe1 | ||
|
|
2c54b506b3 | ||
|
|
8969b8bdb2 | ||
|
|
5186092faa | ||
|
|
4c9142308f | ||
|
|
bea5d4fd37 | ||
|
|
74c24bfa88 | ||
|
|
95834c68d9 | ||
|
|
09024c3558 | ||
|
|
137cb043ef | ||
|
|
edf21bae41 | ||
|
|
c958f9856d | ||
|
|
70ab8bc657 | ||
|
|
edde0f93ae | ||
|
|
896665bca9 | ||
|
|
e8e9e7830e | ||
|
|
4fd9e42ce5 | ||
|
|
337e3a8dac | ||
|
|
2dc81e28fc | ||
|
|
f915d4cc90 | ||
|
|
905f4375b0 | ||
|
|
0b3633db4f | ||
|
|
2f40f5aad8 | ||
|
|
2611e2ec20 | ||
|
|
433a3cd339 | ||
|
|
0b487897a4 | ||
|
|
d5c5bdffcb | ||
|
|
dea95ac2e6 | ||
|
|
9e2208b8dd | ||
|
|
6922a92b69 | ||
|
|
7a2c8e0662 | ||
|
|
787158247f | ||
|
|
b0a0b7c2e1 | ||
|
|
cb6d81771d | ||
|
|
8de6ec1a1b | ||
|
|
d27c01ef70 | ||
|
|
d6307b262f | ||
|
|
b2cbefe41e | ||
|
|
da5a72f6de | ||
|
|
45304f1211 | ||
|
|
a4e65a7ea8 | ||
|
|
dd393c8346 | ||
|
|
493cde9d55 | ||
|
|
7705c84b04 | ||
|
|
ce0172b8c1 | ||
|
|
718b3a7b52 | ||
|
|
8a73de018c | ||
|
|
d92df63f84 | ||
|
|
6c6b00067b | ||
|
|
9cc88ed2a6 | ||
|
|
4905bba694 | ||
|
|
853d19dc2d | ||
|
|
c935ae47d0 | ||
|
|
93ab42fa24 | ||
|
|
6913697ad1 | ||
|
|
a4ae86ce29 | ||
|
|
2c50f2e244 | ||
|
|
365abd8906 | ||
|
|
25fb43bbe3 | ||
|
|
125e8cee01 | ||
|
|
c15e9bfa72 | ||
|
|
35e188e6e7 | ||
|
|
3cc9dd126c | ||
|
|
aa69d89b9f | ||
|
|
29c14a3f58 | ||
|
|
0df70365d7 | ||
|
|
c34be73d81 | ||
|
|
f396e9e374 | ||
|
|
821a9d4691 | ||
|
|
cad654586f | ||
|
|
28eb1bc13c | ||
|
|
1e4779cf48 | ||
|
|
0647c22956 | ||
|
|
b8087b4fa2 | ||
|
|
d94cb9641b | ||
|
|
517c3e1d4c | ||
|
|
619de2a5e4 | ||
|
|
79d0e3e1ed | ||
|
|
f5ff36a1f8 | ||
|
|
b5efc9c16e | ||
|
|
1036076b0d | ||
|
|
c76324c611 | ||
|
|
0ddb92e1ec | ||
|
|
d08a520aa2 | ||
|
|
7bdf0f6c50 | ||
|
|
2b33a58448 | ||
|
|
b35f00f768 | ||
|
|
86cc7c3c73 | ||
|
|
5854cbbe97 | ||
|
|
ceb36a304d | ||
|
|
f5d7e5acca | ||
|
|
be15a84f9b | ||
|
|
32791e98c2 | ||
|
|
7ea443b3a9 | ||
|
|
c69786b039 | ||
|
|
5c7d5539ea | ||
|
|
3531856d1c | ||
|
|
4abaad548a | ||
|
|
61a2c3ace3 | ||
|
|
e9038193db | ||
|
|
3f5cd48a59 | ||
|
|
4cb094e7ae | ||
|
|
57c8378ca7 | ||
|
|
b073f9b802 | ||
|
|
1a2e7d06cb | ||
|
|
217d719b0b | ||
|
|
cf75ad2f26 | ||
|
|
2286444158 | ||
|
|
b489bdf8d3 | ||
|
|
5e6087ea28 | ||
|
|
4ae7cadeae | ||
|
|
fdfb04d83c | ||
|
|
8273c822d7 | ||
|
|
12bb39a111 | ||
|
|
9098717c55 | ||
|
|
8d25f81bec | ||
|
|
52596255c8 | ||
|
|
106effca2e | ||
|
|
9676da27c9 | ||
|
|
3edcb180eb | ||
|
|
9f0b5790af | ||
|
|
e0c2cdddd4 | ||
|
|
74f2c10a5a | ||
|
|
fb97d9f4d9 | ||
|
|
f72bcc8a8f | ||
|
|
46a4dce16b | ||
|
|
62ed5fe27f | ||
|
|
8e3f6cdbbf | ||
|
|
d51b8c1cdf | ||
|
|
698531d6e0 | ||
|
|
44149d187f | ||
|
|
9e3b4ef3db | ||
|
|
ac0d646401 | ||
|
|
664a8fa499 | ||
|
|
3194538817 | ||
|
|
b0d427f8f9 | ||
|
|
02b29046b3 | ||
|
|
c666dc6c67 | ||
|
|
382481735a | ||
|
|
6bb1a9e083 | ||
|
|
3f03a88767 | ||
|
|
328380cfda | ||
|
|
65f29afb0f | ||
|
|
f721a62776 | ||
|
|
c73e3dacea | ||
|
|
78fb815cdb | ||
|
|
d9cddeb0f1 | ||
|
|
c4ff2ea6d5 | ||
|
|
b91b855473 | ||
|
|
7773d6d44f | ||
|
|
2129f889f5 | ||
|
|
221e0ef02f | ||
|
|
0a6b2ad26e | ||
|
|
719bf763e4 | ||
|
|
34bad1ce71 | ||
|
|
6164b027e2 | ||
|
|
d9a13dc8ac | ||
|
|
722dbfa11f | ||
|
|
f8afef0f9d | ||
|
|
3c8df55986 | ||
|
|
47436ad0ce | ||
|
|
9b58d5663a | ||
|
|
b6cebb3ece | ||
|
|
cb7e68a287 | ||
|
|
e196cac6f4 | ||
|
|
351c0d2a4d | ||
|
|
f4969694cd | ||
|
|
b334288529 | ||
|
|
834e52fda6 | ||
|
|
8c27ba3e52 | ||
|
|
cd8d66f5dd | ||
|
|
446f738c7d | ||
|
|
f19ad9726f | ||
|
|
65cac118ca | ||
|
|
efac8c6667 | ||
|
|
a70843e2b4 | ||
|
|
0b941d78c4 | ||
|
|
fc5fc58759 | ||
|
|
9bb2fc238a | ||
|
|
76f5036026 | ||
|
|
032de9ff2f | ||
|
|
c3a533ab40 | ||
|
|
dbd6dcb786 | ||
|
|
9dffbaea98 | ||
|
|
70bda45551 | ||
|
|
d9452e485c | ||
|
|
85e9ced68d | ||
|
|
04e2e42c88 | ||
|
|
bcfdb2f9df | ||
|
|
23a34bee6f | ||
|
|
6f31f27218 | ||
|
|
b102f94e97 | ||
|
|
becb56e1b1 | ||
|
|
05f174a180 | ||
|
|
476bb1cacd | ||
|
|
24fe62ff9d | ||
|
|
a390e44402 | ||
|
|
08f81eb3c6 | ||
|
|
13d33f834f | ||
|
|
58f9659cf6 | ||
|
|
e14d5fb277 | ||
|
|
06151ad173 | ||
|
|
0700758621 | ||
|
|
f26db8053b | ||
|
|
4836047e50 | ||
|
|
0979528a05 | ||
|
|
24a6757630 | ||
|
|
67f093f75b | ||
|
|
3174a27902 | ||
|
|
e7d6a066f8 | ||
|
|
73da80394e | ||
|
|
471cc74ff2 | ||
|
|
ca745d00ee | ||
|
|
3ea8d140a2 | ||
|
|
8b8012f89d | ||
|
|
4b7f851428 | ||
|
|
cc1cd299f3 | ||
|
|
3163afd24a | ||
|
|
95889a69c9 | ||
|
|
81554e5ad1 | ||
|
|
505e16c37c | ||
|
|
24bfdf3263 | ||
|
|
a23dfff6cf | ||
|
|
2919ee4c65 | ||
|
|
d0eae97037 | ||
|
|
9d639607c7 | ||
|
|
74a9be4a0e | ||
|
|
26e877cba7 | ||
|
|
7b7d91a5e1 | ||
|
|
b3055d2e94 | ||
|
|
f1e03d0022 | ||
|
|
9b5855f848 | ||
|
|
7d0228a159 | ||
|
|
c18df7ae25 | ||
|
|
72f5ca4420 | ||
|
|
02beb85642 | ||
|
|
1b62c2ef55 | ||
|
|
43eccca86a | ||
|
|
e6b9cc09c2 | ||
|
|
b484a52252 | ||
|
|
d778286777 | ||
|
|
4d41fa08ad | ||
|
|
6d00930082 | ||
|
|
e4d2c4926c | ||
|
|
dbee133764 | ||
|
|
8473dab684 | ||
|
|
146973b072 | ||
|
|
e8ca7f235c | ||
|
|
d411594c84 | ||
|
|
cf52b879b1 |
2
.github/.nvmrc
vendored
2
.github/.nvmrc
vendored
@@ -1 +1 @@
|
|||||||
22.20.0
|
24.11.0
|
||||||
|
|||||||
2
.github/labeler.yml
vendored
2
.github/labeler.yml
vendored
@@ -31,7 +31,7 @@ documentation:
|
|||||||
🧠machine-learning:
|
🧠machine-learning:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file:
|
- any-glob-to-any-file:
|
||||||
- machine-learning/app/**
|
- machine-learning/**
|
||||||
|
|
||||||
changelog:translation:
|
changelog:translation:
|
||||||
- head-branch: ['^chore/translations$']
|
- head-branch: ['^chore/translations$']
|
||||||
|
|||||||
10
.github/mise.toml
vendored
Normal file
10
.github/mise.toml
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[tasks.install]
|
||||||
|
run = "pnpm install --filter github --frozen-lockfile"
|
||||||
|
|
||||||
|
[tasks.format]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --check ."
|
||||||
|
|
||||||
|
[tasks."format-fix"]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --write ."
|
||||||
195
.github/workflows/build-mobile.yml
vendored
195
.github/workflows/build-mobile.yml
vendored
@@ -1,12 +1,16 @@
|
|||||||
name: Build Mobile
|
name: Build Mobile
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
ref:
|
ref:
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
|
environment:
|
||||||
|
description: 'Target environment'
|
||||||
|
required: true
|
||||||
|
default: 'development'
|
||||||
|
type: string
|
||||||
secrets:
|
secrets:
|
||||||
KEY_JKS:
|
KEY_JKS:
|
||||||
required: true
|
required: true
|
||||||
@@ -16,6 +20,30 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
ANDROID_STORE_PASSWORD:
|
ANDROID_STORE_PASSWORD:
|
||||||
required: true
|
required: true
|
||||||
|
APP_STORE_CONNECT_API_KEY_ID:
|
||||||
|
required: true
|
||||||
|
APP_STORE_CONNECT_API_KEY_ISSUER_ID:
|
||||||
|
required: true
|
||||||
|
APP_STORE_CONNECT_API_KEY:
|
||||||
|
required: true
|
||||||
|
IOS_CERTIFICATE_P12:
|
||||||
|
required: true
|
||||||
|
IOS_CERTIFICATE_PASSWORD:
|
||||||
|
required: true
|
||||||
|
IOS_PROVISIONING_PROFILE:
|
||||||
|
required: true
|
||||||
|
IOS_PROVISIONING_PROFILE_SHARE_EXTENSION:
|
||||||
|
required: true
|
||||||
|
IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION:
|
||||||
|
required: true
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE:
|
||||||
|
required: true
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION:
|
||||||
|
required: true
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION:
|
||||||
|
required: true
|
||||||
|
FASTLANE_TEAM_ID:
|
||||||
|
required: true
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
@@ -34,10 +62,17 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check what should run
|
- name: Check what should run
|
||||||
id: check
|
id: check
|
||||||
uses: immich-app/devtools/actions/pre-job@5f91b52dfbb92b8d96ca411ab59c896cd59714ca # pre-job-action-v1.1.0
|
uses: immich-app/devtools/actions/pre-job@08bac802a312fc89808e0dd589271ca0974087b5 # pre-job-action-v2.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
filters: |
|
filters: |
|
||||||
mobile:
|
mobile:
|
||||||
- 'mobile/**'
|
- 'mobile/**'
|
||||||
@@ -55,10 +90,17 @@ jobs:
|
|||||||
runs-on: mich
|
runs-on: mich
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
ref: ${{ inputs.ref || github.sha }}
|
ref: ${{ inputs.ref || github.sha }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Create the Keystore
|
- name: Create the Keystore
|
||||||
env:
|
env:
|
||||||
@@ -123,7 +165,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Publish Android Artifact
|
- name: Publish Android Artifact
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
with:
|
with:
|
||||||
name: release-apk-signed
|
name: release-apk-signed
|
||||||
path: mobile/build/app/outputs/flutter-apk/*.apk
|
path: mobile/build/app/outputs/flutter-apk/*.apk
|
||||||
@@ -140,3 +182,150 @@ jobs:
|
|||||||
mobile/android/.gradle
|
mobile/android/.gradle
|
||||||
mobile/.dart_tool
|
mobile/.dart_tool
|
||||||
key: ${{ steps.cache-gradle-restore.outputs.cache-primary-key }}
|
key: ${{ steps.cache-gradle-restore.outputs.cache-primary-key }}
|
||||||
|
|
||||||
|
build-sign-ios:
|
||||||
|
name: Build and sign iOS
|
||||||
|
needs: pre-job
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
# Run on main branch or workflow_dispatch, or on PRs/other branches (build only, no upload)
|
||||||
|
if: ${{ !github.event.pull_request.head.repo.fork && fromJSON(needs.pre-job.outputs.should_run).mobile == true }}
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||||
|
with:
|
||||||
|
ref: ${{ inputs.ref || github.sha }}
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Flutter SDK
|
||||||
|
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2
|
||||||
|
with:
|
||||||
|
channel: 'stable'
|
||||||
|
flutter-version-file: ./mobile/pubspec.yaml
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Install Flutter dependencies
|
||||||
|
working-directory: ./mobile
|
||||||
|
run: flutter pub get
|
||||||
|
|
||||||
|
- name: Generate translation files
|
||||||
|
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart
|
||||||
|
working-directory: ./mobile
|
||||||
|
|
||||||
|
- name: Generate platform APIs
|
||||||
|
run: make pigeon
|
||||||
|
working-directory: ./mobile
|
||||||
|
|
||||||
|
- name: Setup Ruby
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: '3.3'
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
|
||||||
|
- name: Install CocoaPods dependencies
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
run: |
|
||||||
|
pod install
|
||||||
|
|
||||||
|
- name: Install Fastlane
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
run: |
|
||||||
|
gem install bundler
|
||||||
|
bundle config set --local path 'vendor/bundle'
|
||||||
|
bundle install
|
||||||
|
|
||||||
|
- name: Create API Key
|
||||||
|
env:
|
||||||
|
API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
|
||||||
|
API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
|
||||||
|
API_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.appstoreconnect/private_keys
|
||||||
|
echo "$API_KEY_CONTENT" | base64 --decode > ~/.appstoreconnect/private_keys/AuthKey_${API_KEY_ID}.p8
|
||||||
|
|
||||||
|
- name: Import Certificate and Provisioning Profiles
|
||||||
|
env:
|
||||||
|
IOS_CERTIFICATE_P12: ${{ secrets.IOS_CERTIFICATE_P12 }}
|
||||||
|
IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
|
||||||
|
IOS_PROVISIONING_PROFILE: ${{ secrets.IOS_PROVISIONING_PROFILE }}
|
||||||
|
IOS_PROVISIONING_PROFILE_SHARE_EXTENSION: ${{ secrets.IOS_PROVISIONING_PROFILE_SHARE_EXTENSION }}
|
||||||
|
IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION: ${{ secrets.IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION }}
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE }}
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION }}
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION }}
|
||||||
|
ENVIRONMENT: ${{ inputs.environment || 'development' }}
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
run: |
|
||||||
|
# Decode certificate
|
||||||
|
echo "$IOS_CERTIFICATE_P12" | base64 --decode > certificate.p12
|
||||||
|
|
||||||
|
# Decode provisioning profiles based on environment
|
||||||
|
if [[ "$ENVIRONMENT" == "development" ]]; then
|
||||||
|
echo "$IOS_DEVELOPMENT_PROVISIONING_PROFILE" | base64 --decode > profile_dev.mobileprovision
|
||||||
|
echo "$IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION" | base64 --decode > profile_dev_share.mobileprovision
|
||||||
|
echo "$IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION" | base64 --decode > profile_dev_widget.mobileprovision
|
||||||
|
ls -lh profile_dev*.mobileprovision
|
||||||
|
else
|
||||||
|
echo "$IOS_PROVISIONING_PROFILE" | base64 --decode > profile.mobileprovision
|
||||||
|
echo "$IOS_PROVISIONING_PROFILE_SHARE_EXTENSION" | base64 --decode > profile_share.mobileprovision
|
||||||
|
echo "$IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION" | base64 --decode > profile_widget.mobileprovision
|
||||||
|
ls -lh profile*.mobileprovision
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create keychain and import certificate
|
||||||
|
env:
|
||||||
|
KEYCHAIN_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
|
||||||
|
CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
run: |
|
||||||
|
# Create keychain
|
||||||
|
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
|
||||||
|
security default-keychain -s build.keychain
|
||||||
|
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
|
||||||
|
security set-keychain-settings -t 3600 -u build.keychain
|
||||||
|
|
||||||
|
# Import certificate
|
||||||
|
security import certificate.p12 -k build.keychain -P "$CERTIFICATE_PASSWORD" -T /usr/bin/codesign -T /usr/bin/security
|
||||||
|
security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" build.keychain
|
||||||
|
|
||||||
|
# Verify certificate was imported
|
||||||
|
security find-identity -v -p codesigning build.keychain
|
||||||
|
|
||||||
|
- name: Build and deploy to TestFlight
|
||||||
|
env:
|
||||||
|
FASTLANE_TEAM_ID: ${{ secrets.FASTLANE_TEAM_ID }}
|
||||||
|
IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
|
||||||
|
KEYCHAIN_NAME: build.keychain
|
||||||
|
KEYCHAIN_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
|
||||||
|
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
|
||||||
|
APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
|
||||||
|
ENVIRONMENT: ${{ inputs.environment || 'development' }}
|
||||||
|
BUNDLE_ID_SUFFIX: ${{ inputs.environment == 'production' && '' || 'development' }}
|
||||||
|
GITHUB_REF: ${{ github.ref }}
|
||||||
|
working-directory: ./mobile/ios
|
||||||
|
run: |
|
||||||
|
# Only upload to TestFlight on main branch
|
||||||
|
if [[ "$GITHUB_REF" == "refs/heads/main" ]]; then
|
||||||
|
if [[ "$ENVIRONMENT" == "development" ]]; then
|
||||||
|
bundle exec fastlane gha_testflight_dev
|
||||||
|
else
|
||||||
|
bundle exec fastlane gha_release_prod
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Build only, no TestFlight upload for non-main branches
|
||||||
|
bundle exec fastlane gha_build_only
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Clean up keychain
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
security delete-keychain build.keychain || true
|
||||||
|
|
||||||
|
- name: Upload IPA artifact
|
||||||
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
|
with:
|
||||||
|
name: ios-release-ipa
|
||||||
|
path: mobile/ios/Runner.ipa
|
||||||
|
|||||||
9
.github/workflows/cache-cleanup.yml
vendored
9
.github/workflows/cache-cleanup.yml
vendored
@@ -18,14 +18,21 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
actions: write
|
actions: write
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ steps.token.outputs.token }}
|
||||||
REF: ${{ github.ref }}
|
REF: ${{ github.ref }}
|
||||||
run: |
|
run: |
|
||||||
gh extension install actions/gh-actions-cache
|
gh extension install actions/gh-actions-cache
|
||||||
|
|||||||
22
.github/workflows/cli.yml
vendored
22
.github/workflows/cli.yml
vendored
@@ -29,15 +29,22 @@ jobs:
|
|||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './cli/.nvmrc'
|
node-version-file: './cli/.nvmrc'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
@@ -64,13 +71,20 @@ jobs:
|
|||||||
needs: publish
|
needs: publish
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
|
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||||
@@ -91,7 +105,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate docker image tags
|
- name: Generate docker image tags
|
||||||
id: metadata
|
id: metadata
|
||||||
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
|
uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v5.9.0
|
||||||
with:
|
with:
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=false
|
latest=false
|
||||||
|
|||||||
2
.github/workflows/close-duplicates.yml
vendored
2
.github/workflows/close-duplicates.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
needs: [get_body, should_run]
|
needs: [get_body, should_run]
|
||||||
if: ${{ needs.should_run.outputs.should_run == 'true' }}
|
if: ${{ needs.should_run.outputs.should_run == 'true' }}
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/immich-app/mdq:main@sha256:d8ae47cf2e6cf4e2559bd57a60b73674fe44f897cba2c2bddff2987a05be10a4
|
image: ghcr.io/immich-app/mdq:main@sha256:9c905a4ff69f00c4b2f98b40b6090ab3ab18d1a15ed1379733b8691aa1fcb271
|
||||||
outputs:
|
outputs:
|
||||||
checked: ${{ steps.get_checkbox.outputs.checked }}
|
checked: ${{ steps.get_checkbox.outputs.checked }}
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
13
.github/workflows/codeql-analysis.yml
vendored
13
.github/workflows/codeql-analysis.yml
vendored
@@ -43,14 +43,21 @@ jobs:
|
|||||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
|
uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -63,7 +70,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
|
uses: github/codeql-action/autobuild@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
@@ -76,6 +83,6 @@ jobs:
|
|||||||
# ./location_of_script_within_repo/buildscript.sh
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
|
uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
|
||||||
with:
|
with:
|
||||||
category: '/language:${{matrix.language}}'
|
category: '/language:${{matrix.language}}'
|
||||||
|
|||||||
28
.github/workflows/docker.yml
vendored
28
.github/workflows/docker.yml
vendored
@@ -22,10 +22,17 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check what should run
|
- name: Check what should run
|
||||||
id: check
|
id: check
|
||||||
uses: immich-app/devtools/actions/pre-job@5f91b52dfbb92b8d96ca411ab59c896cd59714ca # pre-job-action-v1.1.0
|
uses: immich-app/devtools/actions/pre-job@08bac802a312fc89808e0dd589271ca0974087b5 # pre-job-action-v2.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
filters: |
|
filters: |
|
||||||
server:
|
server:
|
||||||
- 'server/**'
|
- 'server/**'
|
||||||
@@ -58,6 +65,7 @@ jobs:
|
|||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Re-tag image
|
- name: Re-tag image
|
||||||
env:
|
env:
|
||||||
REGISTRY_NAME: 'ghcr.io'
|
REGISTRY_NAME: 'ghcr.io'
|
||||||
@@ -87,6 +95,7 @@ jobs:
|
|||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Re-tag image
|
- name: Re-tag image
|
||||||
env:
|
env:
|
||||||
REGISTRY_NAME: 'ghcr.io'
|
REGISTRY_NAME: 'ghcr.io'
|
||||||
@@ -107,24 +116,23 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- device: cpu
|
- device: cpu
|
||||||
tag-suffix: ''
|
|
||||||
- device: cuda
|
- device: cuda
|
||||||
tag-suffix: '-cuda'
|
suffixes: '-cuda'
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
- device: openvino
|
- device: openvino
|
||||||
tag-suffix: '-openvino'
|
suffixes: '-openvino'
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
- device: armnn
|
- device: armnn
|
||||||
tag-suffix: '-armnn'
|
suffixes: '-armnn'
|
||||||
platforms: linux/arm64
|
platforms: linux/arm64
|
||||||
- device: rknn
|
- device: rknn
|
||||||
tag-suffix: '-rknn'
|
suffixes: '-rknn'
|
||||||
platforms: linux/arm64
|
platforms: linux/arm64
|
||||||
- device: rocm
|
- device: rocm
|
||||||
tag-suffix: '-rocm'
|
suffixes: '-rocm'
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
runner-mapping: '{"linux/amd64": "mich"}'
|
runner-mapping: '{"linux/amd64": "mich"}'
|
||||||
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@946acac326940f8badf09ccf591d9cb345d6a689 # multi-runner-build-workflow-v0.2.1
|
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@47a2ee86898ccff51592d6572391fb1abcd7f782 # multi-runner-build-workflow-v2.0.1
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
actions: read
|
actions: read
|
||||||
@@ -138,7 +146,7 @@ jobs:
|
|||||||
dockerfile: machine-learning/Dockerfile
|
dockerfile: machine-learning/Dockerfile
|
||||||
platforms: ${{ matrix.platforms }}
|
platforms: ${{ matrix.platforms }}
|
||||||
runner-mapping: ${{ matrix.runner-mapping }}
|
runner-mapping: ${{ matrix.runner-mapping }}
|
||||||
tag-suffix: ${{ matrix.tag-suffix }}
|
suffixes: ${{ matrix.suffixes }}
|
||||||
dockerhub-push: ${{ github.event_name == 'release' }}
|
dockerhub-push: ${{ github.event_name == 'release' }}
|
||||||
build-args: |
|
build-args: |
|
||||||
DEVICE=${{ matrix.device }}
|
DEVICE=${{ matrix.device }}
|
||||||
@@ -147,7 +155,7 @@ jobs:
|
|||||||
name: Build and Push Server
|
name: Build and Push Server
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }}
|
||||||
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@946acac326940f8badf09ccf591d9cb345d6a689 # multi-runner-build-workflow-v0.2.1
|
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@47a2ee86898ccff51592d6572391fb1abcd7f782 # multi-runner-build-workflow-v2.0.1
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
actions: read
|
actions: read
|
||||||
|
|||||||
24
.github/workflows/docs-build.yml
vendored
24
.github/workflows/docs-build.yml
vendored
@@ -20,10 +20,17 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check what should run
|
- name: Check what should run
|
||||||
id: check
|
id: check
|
||||||
uses: immich-app/devtools/actions/pre-job@5f91b52dfbb92b8d96ca411ab59c896cd59714ca # pre-job-action-v1.1.0
|
uses: immich-app/devtools/actions/pre-job@08bac802a312fc89808e0dd589271ca0974087b5 # pre-job-action-v2.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
filters: |
|
filters: |
|
||||||
docs:
|
docs:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
@@ -31,8 +38,6 @@ jobs:
|
|||||||
- 'open-api/immich-openapi-specs.json'
|
- 'open-api/immich-openapi-specs.json'
|
||||||
force-filters: |
|
force-filters: |
|
||||||
- '.github/workflows/docs-build.yml'
|
- '.github/workflows/docs-build.yml'
|
||||||
- '.github/workflows/docs-deploy.yml'
|
|
||||||
- 'deployment/**'
|
|
||||||
force-events: 'release'
|
force-events: 'release'
|
||||||
force-branches: 'main'
|
force-branches: 'main'
|
||||||
|
|
||||||
@@ -48,16 +53,23 @@ jobs:
|
|||||||
working-directory: ./docs
|
working-directory: ./docs
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './docs/.nvmrc'
|
node-version-file: './docs/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -73,7 +85,7 @@ jobs:
|
|||||||
run: pnpm build
|
run: pnpm build
|
||||||
|
|
||||||
- name: Upload build output
|
- name: Upload build output
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||||
with:
|
with:
|
||||||
name: docs-build-output
|
name: docs-build-output
|
||||||
path: docs/build/
|
path: docs/build/
|
||||||
|
|||||||
62
.github/workflows/docs-deploy.yml
vendored
62
.github/workflows/docs-deploy.yml
vendored
@@ -5,6 +5,9 @@ on:
|
|||||||
types:
|
types:
|
||||||
- completed
|
- completed
|
||||||
|
|
||||||
|
env:
|
||||||
|
TG_NON_INTERACTIVE: 'true'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checks:
|
checks:
|
||||||
name: Docs Deploy Checks
|
name: Docs Deploy Checks
|
||||||
@@ -16,12 +19,19 @@ jobs:
|
|||||||
parameters: ${{ steps.parameters.outputs.result }}
|
parameters: ${{ steps.parameters.outputs.result }}
|
||||||
artifact: ${{ steps.get-artifact.outputs.result }}
|
artifact: ${{ steps.get-artifact.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- if: ${{ github.event.workflow_run.conclusion != 'success' }}
|
- if: ${{ github.event.workflow_run.conclusion != 'success' }}
|
||||||
run: echo 'The triggering workflow did not succeed' && exit 1
|
run: echo 'The triggering workflow did not succeed' && exit 1
|
||||||
- name: Get artifact
|
- name: Get artifact
|
||||||
id: get-artifact
|
id: get-artifact
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
script: |
|
script: |
|
||||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
@@ -42,6 +52,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
|
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
script: |
|
script: |
|
||||||
const eventType = context.payload.workflow_run.event;
|
const eventType = context.payload.workflow_run.event;
|
||||||
const isFork = context.payload.workflow_run.repository.fork;
|
const isFork = context.payload.workflow_run.repository.fork;
|
||||||
@@ -107,10 +118,20 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
|
- name: Setup Mise
|
||||||
|
uses: immich-app/devtools/actions/use-mise@cd24790a7f5f6439ac32cc94f5523cb2de8bfa8c # use-mise-action-v1.1.0
|
||||||
|
|
||||||
- name: Load parameters
|
- name: Load parameters
|
||||||
id: parameters
|
id: parameters
|
||||||
@@ -118,6 +139,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
PARAM_JSON: ${{ needs.checks.outputs.parameters }}
|
PARAM_JSON: ${{ needs.checks.outputs.parameters }}
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
script: |
|
script: |
|
||||||
const parameters = JSON.parse(process.env.PARAM_JSON);
|
const parameters = JSON.parse(process.env.PARAM_JSON);
|
||||||
core.setOutput("event", parameters.event);
|
core.setOutput("event", parameters.event);
|
||||||
@@ -129,6 +151,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }}
|
ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }}
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
script: |
|
script: |
|
||||||
let artifact = JSON.parse(process.env.ARTIFACT_JSON);
|
let artifact = JSON.parse(process.env.ARTIFACT_JSON);
|
||||||
let download = await github.rest.actions.downloadArtifact({
|
let download = await github.rest.actions.downloadArtifact({
|
||||||
@@ -150,12 +173,8 @@ jobs:
|
|||||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||||
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
|
working-directory: 'deployment/modules/cloudflare/docs'
|
||||||
with:
|
run: 'mise run //deployment:tf apply'
|
||||||
tg_version: '0.58.12'
|
|
||||||
tofu_version: '1.7.1'
|
|
||||||
tg_dir: 'deployment/modules/cloudflare/docs'
|
|
||||||
tg_command: 'apply'
|
|
||||||
|
|
||||||
- name: Deploy Docs Subdomain Output
|
- name: Deploy Docs Subdomain Output
|
||||||
id: docs-output
|
id: docs-output
|
||||||
@@ -165,20 +184,12 @@ jobs:
|
|||||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||||
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
|
working-directory: 'deployment/modules/cloudflare/docs'
|
||||||
with:
|
|
||||||
tg_version: '0.58.12'
|
|
||||||
tofu_version: '1.7.1'
|
|
||||||
tg_dir: 'deployment/modules/cloudflare/docs'
|
|
||||||
tg_command: 'output -json'
|
|
||||||
|
|
||||||
- name: Output Cleaning
|
|
||||||
id: clean
|
|
||||||
env:
|
|
||||||
TG_OUTPUT: ${{ steps.docs-output.outputs.tg_action_output }}
|
|
||||||
run: |
|
run: |
|
||||||
CLEANED=$(echo "$TG_OUTPUT" | sed 's|%0A|\n|g ; s|%3C|<|g' | jq -c .)
|
mise run //deployment:tf output -- -json | jq -r '
|
||||||
echo "output=$CLEANED" >> $GITHUB_OUTPUT
|
"projectName=\(.pages_project_name.value)",
|
||||||
|
"subdomain=\(.immich_app_branch_subdomain.value)"
|
||||||
|
' >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Publish to Cloudflare Pages
|
- name: Publish to Cloudflare Pages
|
||||||
# TODO: Action is deprecated
|
# TODO: Action is deprecated
|
||||||
@@ -186,7 +197,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }}
|
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }}
|
||||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
projectName: ${{ fromJson(steps.clean.outputs.output).pages_project_name.value }}
|
projectName: ${{ steps.docs-output.outputs.projectName }}
|
||||||
workingDirectory: 'docs'
|
workingDirectory: 'docs'
|
||||||
directory: 'build'
|
directory: 'build'
|
||||||
branch: ${{ steps.parameters.outputs.name }}
|
branch: ${{ steps.parameters.outputs.name }}
|
||||||
@@ -199,19 +210,16 @@ jobs:
|
|||||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||||
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
|
working-directory: 'deployment/modules/cloudflare/docs-release'
|
||||||
with:
|
run: 'mise run //deployment:tf apply'
|
||||||
tg_version: '0.58.12'
|
|
||||||
tofu_version: '1.7.1'
|
|
||||||
tg_dir: 'deployment/modules/cloudflare/docs-release'
|
|
||||||
tg_command: 'apply'
|
|
||||||
|
|
||||||
- name: Comment
|
- name: Comment
|
||||||
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3.2.0
|
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3.2.0
|
||||||
if: ${{ steps.parameters.outputs.event == 'pr' }}
|
if: ${{ steps.parameters.outputs.event == 'pr' }}
|
||||||
with:
|
with:
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }}
|
number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }}
|
||||||
body: |
|
body: |
|
||||||
📖 Documentation deployed to [${{ fromJson(steps.clean.outputs.output).immich_app_branch_subdomain.value }}](https://${{ fromJson(steps.clean.outputs.output).immich_app_branch_subdomain.value }})
|
📖 Documentation deployed to [${{ steps.docs-output.outputs.subdomain }}](https://${{ steps.docs-output.outputs.subdomain }})
|
||||||
emojis: 'rocket'
|
emojis: 'rocket'
|
||||||
body-include: '<!-- Docs PR URL -->'
|
body-include: '<!-- Docs PR URL -->'
|
||||||
|
|||||||
22
.github/workflows/docs-destroy.yml
vendored
22
.github/workflows/docs-destroy.yml
vendored
@@ -5,6 +5,9 @@ on:
|
|||||||
|
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
|
env:
|
||||||
|
TG_NON_INTERACTIVE: 'true'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
name: Docs Destroy
|
name: Docs Destroy
|
||||||
@@ -13,10 +16,20 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
|
- name: Setup Mise
|
||||||
|
uses: immich-app/devtools/actions/use-mise@cd24790a7f5f6439ac32cc94f5523cb2de8bfa8c # use-mise-action-v1.1.0
|
||||||
|
|
||||||
- name: Destroy Docs Subdomain
|
- name: Destroy Docs Subdomain
|
||||||
env:
|
env:
|
||||||
@@ -25,16 +38,13 @@ jobs:
|
|||||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||||
uses: gruntwork-io/terragrunt-action@aee21a7df999be8b471c2a8564c6cd853cb674e1 # v2.1.8
|
working-directory: 'deployment/modules/cloudflare/docs'
|
||||||
with:
|
run: 'mise run //deployment:tf destroy -- -refresh=false'
|
||||||
tg_version: '0.58.12'
|
|
||||||
tofu_version: '1.7.1'
|
|
||||||
tg_dir: 'deployment/modules/cloudflare/docs'
|
|
||||||
tg_command: 'destroy -refresh=false'
|
|
||||||
|
|
||||||
- name: Comment
|
- name: Comment
|
||||||
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3.2.0
|
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3.2.0
|
||||||
with:
|
with:
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
number: ${{ github.event.number }}
|
number: ${{ github.event.number }}
|
||||||
delete: true
|
delete: true
|
||||||
body-include: '<!-- Docs PR URL -->'
|
body-include: '<!-- Docs PR URL -->'
|
||||||
|
|||||||
7
.github/workflows/fix-format.yml
vendored
7
.github/workflows/fix-format.yml
vendored
@@ -29,17 +29,17 @@ jobs:
|
|||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/pnpm-lock.yaml'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Fix formatting
|
- name: Fix formatting
|
||||||
run: make install-all && make format-all
|
run: pnpm --recursive install && pnpm run --recursive --parallel fix:format
|
||||||
|
|
||||||
- name: Commit and push
|
- name: Commit and push
|
||||||
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
|
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
|
||||||
@@ -51,6 +51,7 @@ jobs:
|
|||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.generate-token.outputs.token }}
|
||||||
script: |
|
script: |
|
||||||
github.rest.issues.removeLabel({
|
github.rest.issues.removeLabel({
|
||||||
issue_number: context.payload.pull_request.number,
|
issue_number: context.payload.pull_request.number,
|
||||||
|
|||||||
18
.github/workflows/merge-translations.yml
vendored
18
.github/workflows/merge-translations.yml
vendored
@@ -28,11 +28,19 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate_token
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Find translation PR
|
- name: Find translation PR
|
||||||
id: find_pr
|
id: find_pr
|
||||||
if: ${{ inputs.skip != true }}
|
if: ${{ inputs.skip != true }}
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -55,14 +63,6 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Generate a token
|
|
||||||
id: generate_token
|
|
||||||
if: ${{ inputs.skip != true }}
|
|
||||||
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
|
||||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
|
||||||
|
|
||||||
- name: Lock weblate
|
- name: Lock weblate
|
||||||
if: ${{ inputs.skip != true }}
|
if: ${{ inputs.skip != true }}
|
||||||
env:
|
env:
|
||||||
|
|||||||
7
.github/workflows/pr-label-validation.yml
vendored
7
.github/workflows/pr-label-validation.yml
vendored
@@ -13,9 +13,16 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Require PR to have a changelog label
|
- name: Require PR to have a changelog label
|
||||||
uses: mheap/github-action-required-labels@8afbe8ae6ab7647d0c9f0cfa7c2f939650d22509 # v5.5.1
|
uses: mheap/github-action-required-labels@8afbe8ae6ab7647d0c9f0cfa7c2f939650d22509 # v5.5.1
|
||||||
with:
|
with:
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
mode: exactly
|
mode: exactly
|
||||||
count: 1
|
count: 1
|
||||||
use_regex: true
|
use_regex: true
|
||||||
|
|||||||
8
.github/workflows/pr-labeler.yml
vendored
8
.github/workflows/pr-labeler.yml
vendored
@@ -11,4 +11,12 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1
|
- uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1
|
||||||
|
with:
|
||||||
|
repo-token: ${{ steps.token.outputs.token }}
|
||||||
|
|||||||
26
.github/workflows/prepare-release.yml
vendored
26
.github/workflows/prepare-release.yml
vendored
@@ -62,13 +62,13 @@ jobs:
|
|||||||
ref: main
|
ref: main
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
|
uses: astral-sh/setup-uv@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -99,8 +99,23 @@ jobs:
|
|||||||
ALIAS: ${{ secrets.ALIAS }}
|
ALIAS: ${{ secrets.ALIAS }}
|
||||||
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
|
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
|
||||||
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
|
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
|
||||||
|
# iOS secrets
|
||||||
|
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
|
||||||
|
APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
|
||||||
|
APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
|
||||||
|
IOS_CERTIFICATE_P12: ${{ secrets.IOS_CERTIFICATE_P12 }}
|
||||||
|
IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }}
|
||||||
|
IOS_PROVISIONING_PROFILE: ${{ secrets.IOS_PROVISIONING_PROFILE }}
|
||||||
|
IOS_PROVISIONING_PROFILE_SHARE_EXTENSION: ${{ secrets.IOS_PROVISIONING_PROFILE_SHARE_EXTENSION }}
|
||||||
|
IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION: ${{ secrets.IOS_PROVISIONING_PROFILE_WIDGET_EXTENSION }}
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE }}
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE_SHARE_EXTENSION }}
|
||||||
|
IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION: ${{ secrets.IOS_DEVELOPMENT_PROVISIONING_PROFILE_WIDGET_EXTENSION }}
|
||||||
|
FASTLANE_TEAM_ID: ${{ secrets.FASTLANE_TEAM_ID }}
|
||||||
|
|
||||||
with:
|
with:
|
||||||
ref: ${{ needs.bump_version.outputs.ref }}
|
ref: ${{ needs.bump_version.outputs.ref }}
|
||||||
|
environment: production
|
||||||
|
|
||||||
prepare_release:
|
prepare_release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -123,12 +138,13 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Download APK
|
- name: Download APK
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
|
||||||
with:
|
with:
|
||||||
name: release-apk-signed
|
name: release-apk-signed
|
||||||
|
github-token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|
||||||
- name: Create draft release
|
- name: Create draft release
|
||||||
uses: softprops/action-gh-release@aec2ec56f94eb8180ceec724245f64ef008b89f5 # v2.4.0
|
uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # v2.4.1
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
tag_name: ${{ env.IMMICH_VERSION }}
|
tag_name: ${{ env.IMMICH_VERSION }}
|
||||||
|
|||||||
18
.github/workflows/preview-label.yaml
vendored
18
.github/workflows/preview-label.yaml
vendored
@@ -13,10 +13,17 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
|
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
message-id: 'preview-status'
|
message-id: 'preview-status'
|
||||||
message: 'Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/'
|
message: 'Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.build/'
|
||||||
|
|
||||||
remove-label:
|
remove-label:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -24,8 +31,15 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
script: |
|
script: |
|
||||||
github.rest.issues.removeLabel({
|
github.rest.issues.removeLabel({
|
||||||
issue_number: context.payload.pull_request.number,
|
issue_number: context.payload.pull_request.number,
|
||||||
@@ -37,11 +51,13 @@ jobs:
|
|||||||
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
|
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
|
||||||
if: ${{ github.event.pull_request.head.repo.fork }}
|
if: ${{ github.event.pull_request.head.repo.fork }}
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
message-id: 'preview-status'
|
message-id: 'preview-status'
|
||||||
message: 'PRs from forks cannot have preview environments.'
|
message: 'PRs from forks cannot have preview environments.'
|
||||||
|
|
||||||
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
|
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
|
||||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
message-id: 'preview-status'
|
message-id: 'preview-status'
|
||||||
message: 'Preview environment has been removed.'
|
message: 'Preview environment has been removed.'
|
||||||
|
|||||||
170
.github/workflows/release-pr.yml
vendored
Normal file
170
.github/workflows/release-pr.yml
vendored
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
name: Manage release PR
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bump:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
persist-credentials: true
|
||||||
|
ref: main
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
|
with:
|
||||||
|
node-version-file: './server/.nvmrc'
|
||||||
|
cache: 'pnpm'
|
||||||
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
|
- name: Determine release type
|
||||||
|
id: bump-type
|
||||||
|
uses: ietf-tools/semver-action@c90370b2958652d71c06a3484129a4d423a6d8a8 # v1.11.0
|
||||||
|
with:
|
||||||
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|
||||||
|
- name: Bump versions
|
||||||
|
env:
|
||||||
|
TYPE: ${{ steps.bump-type.outputs.bump }}
|
||||||
|
run: |
|
||||||
|
if [ "$TYPE" == "none" ]; then
|
||||||
|
exit 1 # TODO: Is there a cleaner way to abort the workflow?
|
||||||
|
fi
|
||||||
|
misc/release/pump-version.sh -s $TYPE -m true
|
||||||
|
|
||||||
|
- name: Manage Outline release document
|
||||||
|
id: outline
|
||||||
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||||
|
env:
|
||||||
|
OUTLINE_API_KEY: ${{ secrets.OUTLINE_API_KEY }}
|
||||||
|
NEXT_VERSION: ${{ steps.bump-type.outputs.next }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
script: |
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
const outlineKey = process.env.OUTLINE_API_KEY;
|
||||||
|
const parentDocumentId = 'da856355-0844-43df-bd71-f8edce5382d9'
|
||||||
|
const collectionId = 'e2910656-714c-4871-8721-447d9353bd73';
|
||||||
|
const baseUrl = 'https://outline.immich.cloud';
|
||||||
|
|
||||||
|
const listResponse = await fetch(`${baseUrl}/api/documents.list`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${outlineKey}`,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ parentDocumentId })
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!listResponse.ok) {
|
||||||
|
throw new Error(`Outline list failed: ${listResponse.statusText}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const listData = await listResponse.json();
|
||||||
|
const allDocuments = listData.data || [];
|
||||||
|
|
||||||
|
const document = allDocuments.find(doc => doc.title === 'next');
|
||||||
|
|
||||||
|
let documentId;
|
||||||
|
let documentUrl;
|
||||||
|
let documentText;
|
||||||
|
|
||||||
|
if (!document) {
|
||||||
|
// Create new document
|
||||||
|
console.log('No existing document found. Creating new one...');
|
||||||
|
const notesTmpl = fs.readFileSync('misc/release/notes.tmpl', 'utf8');
|
||||||
|
const createResponse = await fetch(`${baseUrl}/api/documents.create`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${outlineKey}`,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
title: 'next',
|
||||||
|
text: notesTmpl,
|
||||||
|
collectionId: collectionId,
|
||||||
|
parentDocumentId: parentDocumentId,
|
||||||
|
publish: true
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!createResponse.ok) {
|
||||||
|
throw new Error(`Failed to create document: ${createResponse.statusText}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const createData = await createResponse.json();
|
||||||
|
documentId = createData.data.id;
|
||||||
|
const urlId = createData.data.urlId;
|
||||||
|
documentUrl = `${baseUrl}/doc/next-${urlId}`;
|
||||||
|
documentText = createData.data.text || '';
|
||||||
|
console.log(`Created new document: ${documentUrl}`);
|
||||||
|
} else {
|
||||||
|
documentId = document.id;
|
||||||
|
const docPath = document.url;
|
||||||
|
documentUrl = `${baseUrl}${docPath}`;
|
||||||
|
documentText = document.text || '';
|
||||||
|
console.log(`Found existing document: ${documentUrl}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate GitHub release notes
|
||||||
|
console.log('Generating GitHub release notes...');
|
||||||
|
const releaseNotesResponse = await github.rest.repos.generateReleaseNotes({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
tag_name: `${process.env.NEXT_VERSION}`,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Combine the content
|
||||||
|
const changelog = `
|
||||||
|
# ${process.env.NEXT_VERSION}
|
||||||
|
|
||||||
|
${documentText}
|
||||||
|
|
||||||
|
${releaseNotesResponse.data.body}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
const existingChangelog = fs.existsSync('CHANGELOG.md') ? fs.readFileSync('CHANGELOG.md', 'utf8') : '';
|
||||||
|
fs.writeFileSync('CHANGELOG.md', changelog + existingChangelog, 'utf8');
|
||||||
|
|
||||||
|
core.setOutput('document_url', documentUrl);
|
||||||
|
|
||||||
|
- name: Create PR
|
||||||
|
id: create-pr
|
||||||
|
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||||
|
with:
|
||||||
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
commit-message: 'chore: release ${{ steps.bump-type.outputs.next }}'
|
||||||
|
title: 'chore: release ${{ steps.bump-type.outputs.next }}'
|
||||||
|
body: 'Release notes: ${{ steps.outline.outputs.document_url }}'
|
||||||
|
labels: 'changelog:skip'
|
||||||
|
branch: 'release/next'
|
||||||
|
draft: true
|
||||||
11
.github/workflows/sdk.yml
vendored
11
.github/workflows/sdk.yml
vendored
@@ -16,15 +16,22 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
|
|
||||||
# Setup .npmrc file to publish to npm
|
# Setup .npmrc file to publish to npm
|
||||||
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './open-api/typescript-sdk/.nvmrc'
|
node-version-file: './open-api/typescript-sdk/.nvmrc'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|||||||
18
.github/workflows/static_analysis.yml
vendored
18
.github/workflows/static_analysis.yml
vendored
@@ -19,10 +19,17 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check what should run
|
- name: Check what should run
|
||||||
id: check
|
id: check
|
||||||
uses: immich-app/devtools/actions/pre-job@5f91b52dfbb92b8d96ca411ab59c896cd59714ca # pre-job-action-v1.1.0
|
uses: immich-app/devtools/actions/pre-job@08bac802a312fc89808e0dd589271ca0974087b5 # pre-job-action-v2.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
filters: |
|
filters: |
|
||||||
mobile:
|
mobile:
|
||||||
- 'mobile/**'
|
- 'mobile/**'
|
||||||
@@ -41,10 +48,17 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Setup Flutter SDK
|
- name: Setup Flutter SDK
|
||||||
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
|
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
|
||||||
@@ -58,7 +72,7 @@ jobs:
|
|||||||
- name: Install DCM
|
- name: Install DCM
|
||||||
uses: CQLabs/setup-dcm@8697ae0790c0852e964a6ef1d768d62a6675481a # v2.0.1
|
uses: CQLabs/setup-dcm@8697ae0790c0852e964a6ef1d768d62a6675481a # v2.0.1
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
version: auto
|
version: auto
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
|
|
||||||
|
|||||||
177
.github/workflows/test.yml
vendored
177
.github/workflows/test.yml
vendored
@@ -16,10 +16,17 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check what should run
|
- name: Check what should run
|
||||||
id: check
|
id: check
|
||||||
uses: immich-app/devtools/actions/pre-job@5f91b52dfbb92b8d96ca411ab59c896cd59714ca # pre-job-action-v1.1.0
|
uses: immich-app/devtools/actions/pre-job@08bac802a312fc89808e0dd589271ca0974087b5 # pre-job-action-v2.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
filters: |
|
filters: |
|
||||||
i18n:
|
i18n:
|
||||||
- 'i18n/**'
|
- 'i18n/**'
|
||||||
@@ -55,14 +62,22 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./server
|
working-directory: ./server
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
|
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -92,14 +107,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './cli/.nvmrc'
|
node-version-file: './cli/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -132,14 +154,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './cli/.nvmrc'
|
node-version-file: './cli/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -167,14 +196,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./web
|
working-directory: ./web
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './web/.nvmrc'
|
node-version-file: './web/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -204,14 +240,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./web
|
working-directory: ./web
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './web/.nvmrc'
|
node-version-file: './web/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -235,14 +278,21 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './web/.nvmrc'
|
node-version-file: './web/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -276,14 +326,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./e2e
|
working-directory: ./e2e
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './e2e/.nvmrc'
|
node-version-file: './e2e/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -315,14 +372,22 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./server
|
working-directory: ./server
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
submodules: 'recursive'
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -346,15 +411,22 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: 'recursive'
|
submodules: 'recursive'
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './e2e/.nvmrc'
|
node-version-file: './e2e/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -394,15 +466,22 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: 'recursive'
|
submodules: 'recursive'
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './e2e/.nvmrc'
|
node-version-file: './e2e/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -441,9 +520,16 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup Flutter SDK
|
- name: Setup Flutter SDK
|
||||||
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
|
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
|
||||||
with:
|
with:
|
||||||
@@ -466,11 +552,18 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./machine-learning
|
working-directory: ./machine-learning
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
|
uses: astral-sh/setup-uv@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2
|
||||||
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||||
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
|
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
|
||||||
# with:
|
# with:
|
||||||
@@ -502,14 +595,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./.github
|
working-directory: ./.github
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './.github/.nvmrc'
|
node-version-file: './.github/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -525,9 +625,16 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Run ShellCheck
|
- name: Run ShellCheck
|
||||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
|
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
|
||||||
with:
|
with:
|
||||||
@@ -539,14 +646,21 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -594,14 +708,21 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./server
|
working-directory: ./server
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
token: ${{ steps.token.outputs.token }}
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
|
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|||||||
17
.github/workflows/weblate-lock.yml
vendored
17
.github/workflows/weblate-lock.yml
vendored
@@ -23,10 +23,17 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.check.outputs.should_run }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Check what should run
|
- name: Check what should run
|
||||||
id: check
|
id: check
|
||||||
uses: immich-app/devtools/actions/pre-job@5f91b52dfbb92b8d96ca411ab59c896cd59714ca # pre-job-action-v1.1.0
|
uses: immich-app/devtools/actions/pre-job@08bac802a312fc89808e0dd589271ca0974087b5 # pre-job-action-v2.0.0
|
||||||
with:
|
with:
|
||||||
|
github-token: ${{ steps.token.outputs.token }}
|
||||||
filters: |
|
filters: |
|
||||||
i18n:
|
i18n:
|
||||||
- 'i18n/!(en)**\.json'
|
- 'i18n/!(en)**\.json'
|
||||||
@@ -40,10 +47,16 @@ jobs:
|
|||||||
permissions: {}
|
permissions: {}
|
||||||
if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }}
|
||||||
steps:
|
steps:
|
||||||
|
- id: token
|
||||||
|
uses: immich-app/devtools/actions/create-workflow-token@da177fa133657503ddb7503f8ba53dccefec5da1 # create-workflow-token-action-v1.0.0
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Bot review status
|
- name: Bot review status
|
||||||
env:
|
env:
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number || github.event.pull_request_review.pull_request.number }}
|
PR_NUMBER: ${{ github.event.pull_request.number || github.event.pull_request_review.pull_request.number }}
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ steps.token.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
# Then check for APPROVED by the bot, if absent fail
|
# Then check for APPROVED by the bot, if absent fail
|
||||||
gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json reviews | jq -e '.reviews | map(select(.author.login == env.BOT_NAME and .state == "APPROVED")) | length > 0' \
|
gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json reviews | jq -e '.reviews | map(select(.author.login == env.BOT_NAME and .state == "APPROVED")) | length > 0' \
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
22.20.0
|
24.11.0
|
||||||
|
|||||||
29
cli/mise.toml
Normal file
29
cli/mise.toml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
[tasks.install]
|
||||||
|
run = "pnpm install --filter @immich/cli --frozen-lockfile"
|
||||||
|
|
||||||
|
[tasks.build]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "vite build"
|
||||||
|
|
||||||
|
[tasks.test]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "vite"
|
||||||
|
|
||||||
|
[tasks.lint]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "eslint \"src/**/*.ts\" --max-warnings 0"
|
||||||
|
|
||||||
|
[tasks."lint-fix"]
|
||||||
|
run = { task = "lint --fix" }
|
||||||
|
|
||||||
|
[tasks.format]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --check ."
|
||||||
|
|
||||||
|
[tasks."format-fix"]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --write ."
|
||||||
|
|
||||||
|
[tasks.check]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "tsc --noEmit"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.96",
|
"version": "2.2.101",
|
||||||
"description": "Command Line Interface (CLI) for Immich",
|
"description": "Command Line Interface (CLI) for Immich",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": "./dist/index.js",
|
"exports": "./dist/index.js",
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/micromatch": "^4.0.9",
|
"@types/micromatch": "^4.0.9",
|
||||||
"@types/mock-fs": "^4.13.1",
|
"@types/mock-fs": "^4.13.1",
|
||||||
"@types/node": "^22.18.8",
|
"@types/node": "^22.19.0",
|
||||||
"@vitest/coverage-v8": "^3.0.0",
|
"@vitest/coverage-v8": "^3.0.0",
|
||||||
"byte-size": "^9.0.0",
|
"byte-size": "^9.0.0",
|
||||||
"cli-progress": "^3.12.0",
|
"cli-progress": "^3.12.0",
|
||||||
@@ -69,6 +69,6 @@
|
|||||||
"micromatch": "^4.0.8"
|
"micromatch": "^4.0.8"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "22.20.0"
|
"node": "24.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ describe('startWatch', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should filger out ignored patterns', async () => {
|
it('should filter out ignored patterns', async () => {
|
||||||
const testFilePath = path.join(testFolder, 'test.jpg');
|
const testFilePath = path.join(testFolder, 'test.jpg');
|
||||||
const ignoredPattern = 'ignored';
|
const ignoredPattern = 'ignored';
|
||||||
const ignoredFolder = path.join(testFolder, ignoredPattern);
|
const ignoredFolder = path.join(testFolder, ignoredPattern);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ export interface UploadOptionsDto {
|
|||||||
dryRun?: boolean;
|
dryRun?: boolean;
|
||||||
skipHash?: boolean;
|
skipHash?: boolean;
|
||||||
delete?: boolean;
|
delete?: boolean;
|
||||||
|
deleteDuplicates?: boolean;
|
||||||
album?: boolean;
|
album?: boolean;
|
||||||
albumName?: string;
|
albumName?: string;
|
||||||
includeHidden?: boolean;
|
includeHidden?: boolean;
|
||||||
@@ -70,10 +71,8 @@ const uploadBatch = async (files: string[], options: UploadOptionsDto) => {
|
|||||||
console.log(JSON.stringify({ newFiles, duplicates, newAssets }, undefined, 4));
|
console.log(JSON.stringify({ newFiles, duplicates, newAssets }, undefined, 4));
|
||||||
}
|
}
|
||||||
await updateAlbums([...newAssets, ...duplicates], options);
|
await updateAlbums([...newAssets, ...duplicates], options);
|
||||||
await deleteFiles(
|
|
||||||
newAssets.map(({ filepath }) => filepath),
|
await deleteFiles(newAssets, duplicates, options);
|
||||||
options,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const startWatch = async (
|
export const startWatch = async (
|
||||||
@@ -406,28 +405,46 @@ const uploadFile = async (input: string, stats: Stats): Promise<AssetMediaRespon
|
|||||||
return response.json();
|
return response.json();
|
||||||
};
|
};
|
||||||
|
|
||||||
const deleteFiles = async (files: string[], options: UploadOptionsDto): Promise<void> => {
|
const deleteFiles = async (uploaded: Asset[], duplicates: Asset[], options: UploadOptionsDto): Promise<void> => {
|
||||||
if (!options.delete) {
|
let fileCount = 0;
|
||||||
return;
|
if (options.delete) {
|
||||||
|
fileCount += uploaded.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.deleteDuplicates) {
|
||||||
|
fileCount += duplicates.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.dryRun) {
|
if (options.dryRun) {
|
||||||
console.log(`Would have deleted ${files.length} local asset${s(files.length)}`);
|
console.log(`Would have deleted ${fileCount} local asset${s(fileCount)}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileCount === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Deleting assets that have been uploaded...');
|
console.log('Deleting assets that have been uploaded...');
|
||||||
|
|
||||||
const deletionProgress = new SingleBar(
|
const deletionProgress = new SingleBar(
|
||||||
{ format: 'Deleting local assets | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
|
{ format: 'Deleting local assets | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
|
||||||
Presets.shades_classic,
|
Presets.shades_classic,
|
||||||
);
|
);
|
||||||
deletionProgress.start(files.length, 0);
|
deletionProgress.start(fileCount, 0);
|
||||||
|
|
||||||
|
const chunkDelete = async (files: Asset[]) => {
|
||||||
|
for (const assetBatch of chunk(files, options.concurrency)) {
|
||||||
|
await Promise.all(assetBatch.map((input: Asset) => unlink(input.filepath)));
|
||||||
|
deletionProgress.update(assetBatch.length);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (const assetBatch of chunk(files, options.concurrency)) {
|
if (options.delete) {
|
||||||
await Promise.all(assetBatch.map((input: string) => unlink(input)));
|
await chunkDelete(uploaded);
|
||||||
deletionProgress.update(assetBatch.length);
|
}
|
||||||
|
|
||||||
|
if (options.deleteDuplicates) {
|
||||||
|
await chunkDelete(duplicates);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
deletionProgress.stop();
|
deletionProgress.stop();
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { serverInfo } from 'src/commands/server-info';
|
|||||||
import { version } from '../package.json';
|
import { version } from '../package.json';
|
||||||
|
|
||||||
const defaultConfigDirectory = path.join(os.homedir(), '.config/immich/');
|
const defaultConfigDirectory = path.join(os.homedir(), '.config/immich/');
|
||||||
|
const defaultConcurrency = Math.max(1, os.cpus().length - 1);
|
||||||
|
|
||||||
const program = new Command()
|
const program = new Command()
|
||||||
.name('immich')
|
.name('immich')
|
||||||
@@ -66,7 +67,7 @@ program
|
|||||||
.addOption(
|
.addOption(
|
||||||
new Option('-c, --concurrency <number>', 'Number of assets to upload at the same time')
|
new Option('-c, --concurrency <number>', 'Number of assets to upload at the same time')
|
||||||
.env('IMMICH_UPLOAD_CONCURRENCY')
|
.env('IMMICH_UPLOAD_CONCURRENCY')
|
||||||
.default(4),
|
.default(defaultConcurrency),
|
||||||
)
|
)
|
||||||
.addOption(
|
.addOption(
|
||||||
new Option('-j, --json-output', 'Output detailed information in json format')
|
new Option('-j, --json-output', 'Output detailed information in json format')
|
||||||
@@ -74,6 +75,11 @@ program
|
|||||||
.default(false),
|
.default(false),
|
||||||
)
|
)
|
||||||
.addOption(new Option('--delete', 'Delete local assets after upload').env('IMMICH_DELETE_ASSETS'))
|
.addOption(new Option('--delete', 'Delete local assets after upload').env('IMMICH_DELETE_ASSETS'))
|
||||||
|
.addOption(
|
||||||
|
new Option('--delete-duplicates', 'Delete local assets that are duplicates (already exist on server)').env(
|
||||||
|
'IMMICH_DELETE_DUPLICATES',
|
||||||
|
),
|
||||||
|
)
|
||||||
.addOption(new Option('--no-progress', 'Hide progress bars').env('IMMICH_PROGRESS_BAR').default(true))
|
.addOption(new Option('--no-progress', 'Hide progress bars').env('IMMICH_PROGRESS_BAR').default(true))
|
||||||
.addOption(
|
.addOption(
|
||||||
new Option('--watch', 'Watch for changes and upload automatically')
|
new Option('--watch', 'Watch for changes and upload automatically')
|
||||||
|
|||||||
20
deployment/mise.toml
Normal file
20
deployment/mise.toml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[tools]
|
||||||
|
terragrunt = "0.91.2"
|
||||||
|
opentofu = "1.10.6"
|
||||||
|
|
||||||
|
[tasks."tg:fmt"]
|
||||||
|
run = "terragrunt hclfmt"
|
||||||
|
description = "Format terragrunt files"
|
||||||
|
|
||||||
|
[tasks.tf]
|
||||||
|
run = "terragrunt run --all"
|
||||||
|
description = "Wrapper for terragrunt run-all"
|
||||||
|
dir = "{{cwd}}"
|
||||||
|
|
||||||
|
[tasks."tf:fmt"]
|
||||||
|
run = "tofu fmt -recursive tf/"
|
||||||
|
description = "Format terraform files"
|
||||||
|
|
||||||
|
[tasks."tf:init"]
|
||||||
|
run = { task = "tf init -- -reconfigure" }
|
||||||
|
dir = "{{cwd}}"
|
||||||
@@ -41,6 +41,7 @@ services:
|
|||||||
- app-node_modules:/usr/src/app/node_modules
|
- app-node_modules:/usr/src/app/node_modules
|
||||||
- sveltekit:/usr/src/app/web/.svelte-kit
|
- sveltekit:/usr/src/app/web/.svelte-kit
|
||||||
- coverage:/usr/src/app/web/coverage
|
- coverage:/usr/src/app/web/coverage
|
||||||
|
- ../plugins:/build/corePlugin
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -122,7 +123,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 3003:3003
|
- 3003:3003
|
||||||
volumes:
|
volumes:
|
||||||
- ../machine-learning:/usr/src/app
|
- ../machine-learning/immich_ml:/usr/src/immich_ml
|
||||||
- model-cache:/cache
|
- model-cache:/cache
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
@@ -134,13 +135,13 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -56,14 +56,14 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -83,7 +83,7 @@ services:
|
|||||||
container_name: immich_prometheus
|
container_name: immich_prometheus
|
||||||
ports:
|
ports:
|
||||||
- 9090:9090
|
- 9090:9090
|
||||||
image: prom/prometheus@sha256:63805ebb8d2b3920190daf1cb14a60871b16fd38bed42b857a3182bc621f4996
|
image: prom/prometheus@sha256:49214755b6153f90a597adcbff0252cc61069f8ab69ce8411285cd4a560e8038
|
||||||
volumes:
|
volumes:
|
||||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||||||
- prometheus-data:/prometheus
|
- prometheus-data:/prometheus
|
||||||
@@ -95,7 +95,7 @@ services:
|
|||||||
command: ['./run.sh', '-disable-reporting']
|
command: ['./run.sh', '-disable-reporting']
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
image: grafana/grafana:12.1.1-ubuntu@sha256:d1da838234ff2de93e0065ee1bf0e66d38f948dcc5d718c25fa6237e14b4424a
|
image: grafana/grafana:12.2.1-ubuntu@sha256:797530c642f7b41ba7848c44cfda5e361ef1f3391a98bed1e5d448c472b6826a
|
||||||
volumes:
|
volumes:
|
||||||
- grafana-data:/var/lib/grafana
|
- grafana-data:/var/lib/grafana
|
||||||
|
|
||||||
|
|||||||
@@ -49,14 +49,14 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
POSTGRES_USER: ${DB_USERNAME}
|
POSTGRES_USER: ${DB_USERNAME}
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ DB_DATA_LOCATION=./postgres
|
|||||||
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
||||||
# TZ=Etc/UTC
|
# TZ=Etc/UTC
|
||||||
|
|
||||||
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
|
# The Immich version to use. You can pin this to a specific version like "v2.1.0"
|
||||||
IMMICH_VERSION=release
|
IMMICH_VERSION=v2
|
||||||
|
|
||||||
# Connection secret for postgres. You should change it to a random password
|
# Connection secret for postgres. You should change it to a random password
|
||||||
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
|
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
22.20.0
|
24.11.0
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ Then please follow the steps in the following section for restoring the database
|
|||||||
<TabItem value="Linux system" label="Linux system" default>
|
<TabItem value="Linux system" label="Linux system" default>
|
||||||
|
|
||||||
```bash title='Backup'
|
```bash title='Backup'
|
||||||
|
# Replace <DB_USERNAME> with the database username - usually postgres unless you have changed it.
|
||||||
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
|
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -69,16 +70,18 @@ docker compose create # Create Docker containers for Immich apps witho
|
|||||||
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
|
# Check the database user if you deviated from the default
|
||||||
|
# Replace <DB_USERNAME> with the database username - usually postgres unless you have changed it.
|
||||||
gunzip --stdout "/path/to/backup/dump.sql.gz" \
|
gunzip --stdout "/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 --dbname=postgres --username=<DB_USERNAME> # Restore Backup
|
| docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # Restore Backup
|
||||||
docker compose up -d # Start remainder of Immich apps
|
docker compose up -d # Start remainder of Immich apps
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="Windows system (PowerShell)" label="Windows system (PowerShell)">
|
<TabItem value="Windows system (PowerShell)" label="Windows system (PowerShell)">
|
||||||
|
|
||||||
```powershell title='Backup'
|
```powershell title='Backup'
|
||||||
|
# Replace <DB_USERNAME> with the database username - usually postgres unless you have changed it.
|
||||||
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>))
|
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>))
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -92,13 +95,15 @@ docker compose create # Create Docker containers for
|
|||||||
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
|
||||||
docker exec -it immich_postgres bash # Enter the Docker shell and run the following command
|
docker exec -it immich_postgres bash # Enter the Docker shell and run the following command
|
||||||
# Check the database user if you deviated from the default. If your backup ends in `.gz`, replace `cat` with `gunzip --stdout`
|
# If your backup ends in `.gz`, replace `cat` with `gunzip --stdout`
|
||||||
|
# Replace <DB_USERNAME> with the database username - usually postgres unless you have changed it.
|
||||||
|
|
||||||
cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
|
cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
|
||||||
exit # Exit the Docker shell
|
exit # Exit the Docker shell
|
||||||
docker compose up -d # Start remainder of Immich apps
|
docker compose up -d # Start remainder of Immich apps
|
||||||
```
|
```
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.), in which case you need to delete the `DB_DATA_LOCATION` folder to reset the database.
|
Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.), in which case you need to delete the `DB_DATA_LOCATION` folder to reset the database.
|
||||||
|
|||||||
@@ -10,16 +10,19 @@ Running with a pre-existing Postgres server can unlock powerful administrative f
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
You must install `pgvector` (`>= 0.7.0, < 1.0.0`), as it is a prerequisite for `vchord`.
|
You must install pgvector as it is a prerequisite for VectorChord.
|
||||||
The easiest way to do this on Debian/Ubuntu is by adding the [PostgreSQL Apt repository][pg-apt] and then
|
The easiest way to do this on Debian/Ubuntu is by adding the [PostgreSQL Apt repository][pg-apt] and then
|
||||||
running `apt install postgresql-NN-pgvector`, where `NN` is your Postgres version (e.g., `16`).
|
running `apt install postgresql-NN-pgvector`, where `NN` is your Postgres version (e.g., `16`).
|
||||||
|
|
||||||
You must install VectorChord into your instance of Postgres using their [instructions][vchord-install]. After installation, add `shared_preload_libraries = 'vchord.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, vchord.so'`.
|
You must install VectorChord into your instance of Postgres using their [instructions][vchord-install]. After installation, add `shared_preload_libraries = 'vchord.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, vchord.so'`.
|
||||||
|
|
||||||
:::note
|
:::note Supported versions
|
||||||
Immich is known to work with Postgres versions `>= 14, < 18`.
|
Immich is known to work with Postgres versions `>= 14, < 19`.
|
||||||
|
|
||||||
Make sure the installed version of VectorChord is compatible with your version of Immich. The current accepted range for VectorChord is `>= 0.3.0, < 0.5.0`.
|
VectorChord is known to work with pgvector versions `>= 0.7, < 0.9`.
|
||||||
|
|
||||||
|
The Immich server will check the VectorChord version on startup to ensure compatibility, and refuse to start if a compatible version is not found.
|
||||||
|
The current accepted range for VectorChord is `>= 0.3, < 0.6`.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Specifying the connection URL
|
## Specifying the connection URL
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ Users can deploy a custom reverse proxy that forwards requests to Immich. This w
|
|||||||
Immich does not support being served on a sub-path such as `location /immich {`. It has to be served on the root path of a (sub)domain.
|
Immich does not support being served on a sub-path such as `location /immich {`. It has to be served on the root path of a (sub)domain.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
:::info
|
||||||
|
If your reverse proxy uses the [Let's Encrypt](https://letsencrypt.org/) [http-01 challenge](https://letsencrypt.org/docs/challenge-types/#http-01-challenge), you may want to verify that the Immich well-known endpoint (`/.well-known/immich`) gets correctly routed to Immich, otherwise it will likely be routed elsewhere and the mobile app may run into connection issues.
|
||||||
|
:::
|
||||||
|
|
||||||
### Nginx example config
|
### Nginx example config
|
||||||
|
|
||||||
Below is an example config for nginx. Make sure to set `public_url` to the front-facing URL of your instance, and `backend_url` to the path of the Immich server.
|
Below is an example config for nginx. Make sure to set `public_url` to the front-facing URL of your instance, and `backend_url` to the path of the Immich server.
|
||||||
@@ -37,29 +41,14 @@ server {
|
|||||||
location / {
|
location / {
|
||||||
proxy_pass http://<backend_url>:2283;
|
proxy_pass http://<backend_url>:2283;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# useful when using Let's Encrypt http-01 challenge
|
||||||
|
# location = /.well-known/immich {
|
||||||
|
# proxy_pass http://<backend_url>:2283;
|
||||||
|
# }
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 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.
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
# Community Guides
|
|
||||||
|
|
||||||
This page lists community guides that are written around Immich, but not officially supported by the development team.
|
|
||||||
|
|
||||||
:::warning
|
|
||||||
This list comes with no guarantees about security, performance, reliability, or accuracy. Use at your own risk.
|
|
||||||
:::
|
|
||||||
|
|
||||||
import CommunityGuides from '../src/components/community-guides.tsx';
|
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
<CommunityGuides />
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
# Community Projects
|
|
||||||
|
|
||||||
This page lists community projects that are built around Immich, but not officially supported by the development team.
|
|
||||||
|
|
||||||
:::warning
|
|
||||||
This list comes with no guarantees about security, performance, reliability, or accuracy. Use at your own risk.
|
|
||||||
:::
|
|
||||||
|
|
||||||
import CommunityProjects from '../src/components/community-projects.tsx';
|
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
<CommunityProjects />
|
|
||||||
@@ -12,3 +12,13 @@ pnpm run migrations:generate <migration-name>
|
|||||||
3. Move the migration file to folder `./server/src/schema/migrations` in your code editor.
|
3. Move the migration file to folder `./server/src/schema/migrations` in your code editor.
|
||||||
|
|
||||||
The server will automatically detect `*.ts` file changes and restart. Part of the server start-up process includes running any new migrations, so it will be applied immediately.
|
The server will automatically detect `*.ts` file changes and restart. Part of the server start-up process includes running any new migrations, so it will be applied immediately.
|
||||||
|
|
||||||
|
## Reverting a Migration
|
||||||
|
|
||||||
|
If you need to undo the most recently applied migration—for example, when developing or testing on schema changes—run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm run migrations:revert
|
||||||
|
```
|
||||||
|
|
||||||
|
This command rolls back the latest migration and brings the database schema back to its previous state.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ sidebar_position: 2
|
|||||||
# Setup
|
# Setup
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
If there's a feature you're planning to work on, just give us a heads up in [Discord](https://discord.com/channels/979116623879368755/1071165397228855327) so we can:
|
If there's a feature you're planning to work on, just give us a heads up in [#contributing](https://discord.com/channels/979116623879368755/1071165397228855327) on [our Discord](https://discord.immich.app) so we can:
|
||||||
|
|
||||||
1. Let you know if it's something we would accept into Immich
|
1. Let you know if it's something we would accept into Immich
|
||||||
2. Provide any guidance on how something like that would ideally be implemented
|
2. Provide any guidance on how something like that would ideally be implemented
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ Options:
|
|||||||
-c, --concurrency <number> Number of assets to upload at the same time (default: 4, env: IMMICH_UPLOAD_CONCURRENCY)
|
-c, --concurrency <number> Number of assets to upload at the same time (default: 4, env: IMMICH_UPLOAD_CONCURRENCY)
|
||||||
-j, --json-output Output detailed information in json format (default: false, env: IMMICH_JSON_OUTPUT)
|
-j, --json-output Output detailed information in json format (default: false, env: IMMICH_JSON_OUTPUT)
|
||||||
--delete Delete local assets after upload (env: IMMICH_DELETE_ASSETS)
|
--delete Delete local assets after upload (env: IMMICH_DELETE_ASSETS)
|
||||||
|
--delete-duplicates Delete local assets that are duplicates (already exist on server) (env: IMMICH_DELETE_DUPLICATES)
|
||||||
--no-progress Hide progress bars (env: IMMICH_PROGRESS_BAR)
|
--no-progress Hide progress bars (env: IMMICH_PROGRESS_BAR)
|
||||||
--watch Watch for changes and upload automatically (default: false, env: IMMICH_WATCH_CHANGES)
|
--watch Watch for changes and upload automatically (default: false, env: IMMICH_WATCH_CHANGES)
|
||||||
--help display help for command
|
--help display help for command
|
||||||
@@ -182,7 +183,7 @@ For example to get a list of files that would be uploaded for further
|
|||||||
processing:
|
processing:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
immich upload --dry-run . | tail -n +4 | jq .newFiles[]
|
immich upload --dry-run . | tail -n +6 | jq .newFiles[]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Obtain the API Key
|
### Obtain the API Key
|
||||||
|
|||||||
@@ -54,9 +54,25 @@ You do not need to redo any machine learning jobs after enabling hardware accele
|
|||||||
#### OpenVINO
|
#### OpenVINO
|
||||||
|
|
||||||
- Integrated GPUs are more likely to experience issues than discrete GPUs, especially for older processors or servers with low RAM.
|
- Integrated GPUs are more likely to experience issues than discrete GPUs, especially for older processors or servers with low RAM.
|
||||||
- Ensure the server's kernel version is new enough to use the device for hardware accceleration.
|
- Ensure the server's kernel version is new enough to use the device for hardware acceleration.
|
||||||
- Expect higher RAM usage when using OpenVINO compared to CPU processing.
|
- Expect higher RAM usage when using OpenVINO compared to CPU processing.
|
||||||
|
|
||||||
|
#### OpenVINO-WSL
|
||||||
|
|
||||||
|
- Ensure your container can access the /dev/dri directory, you can verify this by doing `docker exec -t immich_machine_learning ls -la /dev/dri`. If this is not the case execute `getent group render` and `getent group video` on the WSL host, then add those groups to hwaccel.ml.yaml
|
||||||
|
```yaml
|
||||||
|
openvino-wsl:
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
- /dev/dxg:/dev/dxg
|
||||||
|
volumes:
|
||||||
|
- /dev/bus/usb:/dev/bus/usb
|
||||||
|
- /usr/lib/wsl:/usr/lib/wsl
|
||||||
|
group_add:
|
||||||
|
- 44 # Replace this number with the number you found with getent group video
|
||||||
|
- 992 # Replace this number with the number you found with getent group render
|
||||||
|
```
|
||||||
|
|
||||||
#### RKNN
|
#### RKNN
|
||||||
|
|
||||||
- You must have a supported Rockchip SoC: only RK3566, RK3568, RK3576 and RK3588 are supported at this moment.
|
- You must have a supported Rockchip SoC: only RK3566, RK3568, RK3576 and RK3588 are supported at this moment.
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { mdiCloudOffOutline, mdiCloudCheckOutline } from '@mdi/js';
|
|||||||
import MobileAppDownload from '/docs/partials/_mobile-app-download.md';
|
import MobileAppDownload from '/docs/partials/_mobile-app-download.md';
|
||||||
import MobileAppLogin from '/docs/partials/_mobile-app-login.md';
|
import MobileAppLogin from '/docs/partials/_mobile-app-login.md';
|
||||||
import MobileAppBackup from '/docs/partials/_mobile-app-backup.md';
|
import MobileAppBackup from '/docs/partials/_mobile-app-backup.md';
|
||||||
import { cloudDonePath, cloudOffPath } from '@site/src/components/svg-paths';
|
|
||||||
|
|
||||||
# Mobile App
|
# Mobile App
|
||||||
|
|
||||||
@@ -11,6 +10,16 @@ import { cloudDonePath, cloudOffPath } from '@site/src/components/svg-paths';
|
|||||||
|
|
||||||
<MobileAppDownload />
|
<MobileAppDownload />
|
||||||
|
|
||||||
|
:::info Android verification
|
||||||
|
Below are the SHA-256 fingerprints for the certificates signing the android applications.
|
||||||
|
|
||||||
|
- Playstore / Github releases:
|
||||||
|
`86:C5:C4:55:DF:AF:49:85:92:3A:8F:35:AD:B3:1D:0C:9E:0B:95:7D:7F:94:C2:D2:AF:6A:24:38:AA:96:00:20`
|
||||||
|
- F-Droid releases:
|
||||||
|
`FA:8B:43:95:F4:A6:47:71:A0:53:D1:C7:57:73:5F:A2:30:13:74:F5:3D:58:0D:D1:75:AA:F7:A1:35:72:9C:BF`
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
:::info Beta Program
|
:::info Beta Program
|
||||||
The beta release channel allows users to test upcoming changes before they are officially released. To join the channel use the links below.
|
The beta release channel allows users to test upcoming changes before they are officially released. To join the channel use the links below.
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ You can read this guide to learn more about [partner sharing](/features/partner-
|
|||||||
|
|
||||||
## Public sharing
|
## Public sharing
|
||||||
|
|
||||||
You can create a public link to share a group of photos or videos, or an album, with anyone. The public link can be shared via email, social media, or any other method. There are a varierity of options to customize the public link, such as setting an expiration date, password protection, and more. Public shared link is handy when you want to share a group of photos or videos with someone who doesn't have an Immich account and allow the shared user to upload their photos or videos to your account.
|
You can create a public link to share a group of photos or videos, or an album, with anyone. The public link can be shared via email, social media, or any other method. There are a variety of options to customize the public link, such as setting an expiration date, password protection, and more. Public shared link is handy when you want to share a group of photos or videos with someone who doesn't have an Immich account and allow the shared user to upload their photos or videos to your account.
|
||||||
|
|
||||||
The public shared link is generated with a random URL, which acts as as a secret to avoid the link being guessed by unwanted parties, for instance.
|
The public shared link is generated with a random URL, which acts as as a secret to avoid the link being guessed by unwanted parties, for instance.
|
||||||
|
|
||||||
|
|||||||
@@ -106,14 +106,14 @@ SELECT "user"."email", "asset"."type", COUNT(*) FROM "asset"
|
|||||||
|
|
||||||
```sql title="Count by tag"
|
```sql title="Count by tag"
|
||||||
SELECT "t"."value" AS "tag_name", COUNT(*) AS "number_assets" FROM "tag" "t"
|
SELECT "t"."value" AS "tag_name", COUNT(*) AS "number_assets" FROM "tag" "t"
|
||||||
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagsId" JOIN "asset" "a" ON "ta"."assetsId" = "a"."id"
|
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagId" JOIN "asset" "a" ON "ta"."assetId" = "a"."id"
|
||||||
WHERE "a"."visibility" != 'hidden'
|
WHERE "a"."visibility" != 'hidden'
|
||||||
GROUP BY "t"."value" ORDER BY "number_assets" DESC;
|
GROUP BY "t"."value" ORDER BY "number_assets" DESC;
|
||||||
```
|
```
|
||||||
|
|
||||||
```sql title="Count by tag (per user)"
|
```sql title="Count by tag (per user)"
|
||||||
SELECT "t"."value" AS "tag_name", "u"."email" as "user_email", COUNT(*) AS "number_assets" FROM "tag" "t"
|
SELECT "t"."value" AS "tag_name", "u"."email" as "user_email", COUNT(*) AS "number_assets" FROM "tag" "t"
|
||||||
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagsId" JOIN "asset" "a" ON "ta"."assetsId" = "a"."id" JOIN "user" "u" ON "a"."ownerId" = "u"."id"
|
JOIN "tag_asset" "ta" ON "t"."id" = "ta"."tagId" JOIN "asset" "a" ON "ta"."assetId" = "a"."id" JOIN "user" "u" ON "a"."ownerId" = "u"."id"
|
||||||
WHERE "a"."visibility" != 'hidden'
|
WHERE "a"."visibility" != 'hidden'
|
||||||
GROUP BY "t"."value", "u"."email" ORDER BY "number_assets" DESC;
|
GROUP BY "t"."value", "u"."email" ORDER BY "number_assets" DESC;
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ In the Immich web UI:
|
|||||||
<img src={require('./img/create-external-library.webp').default} width="50%" title="Create Library button" />
|
<img src={require('./img/create-external-library.webp').default} width="50%" title="Create Library button" />
|
||||||
|
|
||||||
- In the dialog, select which user should own the new library
|
- In the dialog, select which user should own the new library
|
||||||
<img src={require('./img/library-owner.webp').default} width="50%" title="Library owner diaglog" />
|
<img src={require('./img/library-owner.webp').default} width="50%" title="Library owner dialog" />
|
||||||
|
|
||||||
- Click the three-dots menu and select **Edit Import Paths**
|
- Click the three-dots menu and select **Edit Import Paths**
|
||||||
<img src={require('./img/edit-import-paths.webp').default} width="50%" title="Edit Import Paths menu option" />
|
<img src={require('./img/edit-import-paths.webp').default} width="50%" title="Edit Import Paths menu option" />
|
||||||
|
|||||||
@@ -16,48 +16,76 @@ The default configuration looks like this:
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"ffmpeg": {
|
|
||||||
"crf": 23,
|
|
||||||
"threads": 0,
|
|
||||||
"preset": "ultrafast",
|
|
||||||
"targetVideoCodec": "h264",
|
|
||||||
"acceptedVideoCodecs": ["h264"],
|
|
||||||
"targetAudioCodec": "aac",
|
|
||||||
"acceptedAudioCodecs": ["aac", "mp3", "libopus", "pcm_s16le"],
|
|
||||||
"acceptedContainers": ["mov", "ogg", "webm"],
|
|
||||||
"targetResolution": "720",
|
|
||||||
"maxBitrate": "0",
|
|
||||||
"bframes": -1,
|
|
||||||
"refs": 0,
|
|
||||||
"gopSize": 0,
|
|
||||||
"temporalAQ": false,
|
|
||||||
"cqMode": "auto",
|
|
||||||
"twoPass": false,
|
|
||||||
"preferredHwDevice": "auto",
|
|
||||||
"transcode": "required",
|
|
||||||
"tonemap": "hable",
|
|
||||||
"accel": "disabled",
|
|
||||||
"accelDecode": false
|
|
||||||
},
|
|
||||||
"backup": {
|
"backup": {
|
||||||
"database": {
|
"database": {
|
||||||
"enabled": true,
|
|
||||||
"cronExpression": "0 02 * * *",
|
"cronExpression": "0 02 * * *",
|
||||||
|
"enabled": true,
|
||||||
"keepLastAmount": 14
|
"keepLastAmount": 14
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ffmpeg": {
|
||||||
|
"accel": "disabled",
|
||||||
|
"accelDecode": false,
|
||||||
|
"acceptedAudioCodecs": ["aac", "mp3", "libopus"],
|
||||||
|
"acceptedContainers": ["mov", "ogg", "webm"],
|
||||||
|
"acceptedVideoCodecs": ["h264"],
|
||||||
|
"bframes": -1,
|
||||||
|
"cqMode": "auto",
|
||||||
|
"crf": 23,
|
||||||
|
"gopSize": 0,
|
||||||
|
"maxBitrate": "0",
|
||||||
|
"preferredHwDevice": "auto",
|
||||||
|
"preset": "ultrafast",
|
||||||
|
"refs": 0,
|
||||||
|
"targetAudioCodec": "aac",
|
||||||
|
"targetResolution": "720",
|
||||||
|
"targetVideoCodec": "h264",
|
||||||
|
"temporalAQ": false,
|
||||||
|
"threads": 0,
|
||||||
|
"tonemap": "hable",
|
||||||
|
"transcode": "required",
|
||||||
|
"twoPass": false
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"colorspace": "p3",
|
||||||
|
"extractEmbedded": false,
|
||||||
|
"fullsize": {
|
||||||
|
"enabled": false,
|
||||||
|
"format": "jpeg",
|
||||||
|
"quality": 80
|
||||||
|
},
|
||||||
|
"preview": {
|
||||||
|
"format": "jpeg",
|
||||||
|
"quality": 80,
|
||||||
|
"size": 1440
|
||||||
|
},
|
||||||
|
"thumbnail": {
|
||||||
|
"format": "webp",
|
||||||
|
"quality": 80,
|
||||||
|
"size": 250
|
||||||
|
}
|
||||||
|
},
|
||||||
"job": {
|
"job": {
|
||||||
"backgroundTask": {
|
"backgroundTask": {
|
||||||
"concurrency": 5
|
"concurrency": 5
|
||||||
},
|
},
|
||||||
"smartSearch": {
|
"faceDetection": {
|
||||||
"concurrency": 2
|
"concurrency": 2
|
||||||
},
|
},
|
||||||
|
"library": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
"metadataExtraction": {
|
"metadataExtraction": {
|
||||||
"concurrency": 5
|
"concurrency": 5
|
||||||
},
|
},
|
||||||
"faceDetection": {
|
"migration": {
|
||||||
"concurrency": 2
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"ocr": {
|
||||||
|
"concurrency": 1
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"concurrency": 5
|
"concurrency": 5
|
||||||
@@ -65,20 +93,23 @@ The default configuration looks like this:
|
|||||||
"sidecar": {
|
"sidecar": {
|
||||||
"concurrency": 5
|
"concurrency": 5
|
||||||
},
|
},
|
||||||
"library": {
|
"smartSearch": {
|
||||||
"concurrency": 5
|
"concurrency": 2
|
||||||
},
|
|
||||||
"migration": {
|
|
||||||
"concurrency": 5
|
|
||||||
},
|
},
|
||||||
"thumbnailGeneration": {
|
"thumbnailGeneration": {
|
||||||
"concurrency": 3
|
"concurrency": 3
|
||||||
},
|
},
|
||||||
"videoConversion": {
|
"videoConversion": {
|
||||||
"concurrency": 1
|
"concurrency": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"library": {
|
||||||
|
"scan": {
|
||||||
|
"cronExpression": "0 0 * * *",
|
||||||
|
"enabled": true
|
||||||
},
|
},
|
||||||
"notifications": {
|
"watch": {
|
||||||
"concurrency": 5
|
"enabled": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"logging": {
|
"logging": {
|
||||||
@@ -86,8 +117,11 @@ The default configuration looks like this:
|
|||||||
"level": "log"
|
"level": "log"
|
||||||
},
|
},
|
||||||
"machineLearning": {
|
"machineLearning": {
|
||||||
"enabled": true,
|
"availabilityChecks": {
|
||||||
"urls": ["http://immich-machine-learning:3003"],
|
"enabled": true,
|
||||||
|
"interval": 30000,
|
||||||
|
"timeout": 2000
|
||||||
|
},
|
||||||
"clip": {
|
"clip": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"modelName": "ViT-B-32__openai"
|
"modelName": "ViT-B-32__openai"
|
||||||
@@ -96,27 +130,59 @@ The default configuration looks like this:
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"maxDistance": 0.01
|
"maxDistance": 0.01
|
||||||
},
|
},
|
||||||
|
"enabled": true,
|
||||||
"facialRecognition": {
|
"facialRecognition": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"modelName": "buffalo_l",
|
|
||||||
"minScore": 0.7,
|
|
||||||
"maxDistance": 0.5,
|
"maxDistance": 0.5,
|
||||||
"minFaces": 3
|
"minFaces": 3,
|
||||||
}
|
"minScore": 0.7,
|
||||||
|
"modelName": "buffalo_l"
|
||||||
|
},
|
||||||
|
"ocr": {
|
||||||
|
"enabled": true,
|
||||||
|
"maxResolution": 736,
|
||||||
|
"minDetectionScore": 0.5,
|
||||||
|
"minRecognitionScore": 0.8,
|
||||||
|
"modelName": "PP-OCRv5_mobile"
|
||||||
|
},
|
||||||
|
"urls": ["http://immich-machine-learning:3003"]
|
||||||
},
|
},
|
||||||
"map": {
|
"map": {
|
||||||
|
"darkStyle": "https://tiles.immich.cloud/v1/style/dark.json",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"lightStyle": "https://tiles.immich.cloud/v1/style/light.json",
|
"lightStyle": "https://tiles.immich.cloud/v1/style/light.json"
|
||||||
"darkStyle": "https://tiles.immich.cloud/v1/style/dark.json"
|
|
||||||
},
|
|
||||||
"reverseGeocoding": {
|
|
||||||
"enabled": true
|
|
||||||
},
|
},
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"faces": {
|
"faces": {
|
||||||
"import": false
|
"import": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"newVersionCheck": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"nightlyTasks": {
|
||||||
|
"clusterNewFaces": true,
|
||||||
|
"databaseCleanup": true,
|
||||||
|
"generateMemories": true,
|
||||||
|
"missingThumbnails": true,
|
||||||
|
"startTime": "00:00",
|
||||||
|
"syncQuotaUsage": true
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"smtp": {
|
||||||
|
"enabled": false,
|
||||||
|
"from": "",
|
||||||
|
"replyTo": "",
|
||||||
|
"transport": {
|
||||||
|
"host": "",
|
||||||
|
"ignoreCert": false,
|
||||||
|
"password": "",
|
||||||
|
"port": 587,
|
||||||
|
"secure": false,
|
||||||
|
"username": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"oauth": {
|
"oauth": {
|
||||||
"autoLaunch": false,
|
"autoLaunch": false,
|
||||||
"autoRegister": true,
|
"autoRegister": true,
|
||||||
@@ -128,70 +194,44 @@ The default configuration looks like this:
|
|||||||
"issuerUrl": "",
|
"issuerUrl": "",
|
||||||
"mobileOverrideEnabled": false,
|
"mobileOverrideEnabled": false,
|
||||||
"mobileRedirectUri": "",
|
"mobileRedirectUri": "",
|
||||||
|
"profileSigningAlgorithm": "none",
|
||||||
|
"roleClaim": "immich_role",
|
||||||
"scope": "openid email profile",
|
"scope": "openid email profile",
|
||||||
"signingAlgorithm": "RS256",
|
"signingAlgorithm": "RS256",
|
||||||
"profileSigningAlgorithm": "none",
|
|
||||||
"storageLabelClaim": "preferred_username",
|
"storageLabelClaim": "preferred_username",
|
||||||
"storageQuotaClaim": "immich_quota"
|
"storageQuotaClaim": "immich_quota",
|
||||||
|
"timeout": 30000,
|
||||||
|
"tokenEndpointAuthMethod": "client_secret_post"
|
||||||
},
|
},
|
||||||
"passwordLogin": {
|
"passwordLogin": {
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
|
"reverseGeocoding": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"externalDomain": "",
|
||||||
|
"loginPageMessage": "",
|
||||||
|
"publicUsers": true
|
||||||
|
},
|
||||||
"storageTemplate": {
|
"storageTemplate": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"hashVerificationEnabled": true,
|
"hashVerificationEnabled": true,
|
||||||
"template": "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"
|
"template": "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"
|
||||||
},
|
},
|
||||||
"image": {
|
"templates": {
|
||||||
"thumbnail": {
|
"email": {
|
||||||
"format": "webp",
|
"albumInviteTemplate": "",
|
||||||
"size": 250,
|
"albumUpdateTemplate": "",
|
||||||
"quality": 80
|
"welcomeTemplate": ""
|
||||||
},
|
}
|
||||||
"preview": {
|
|
||||||
"format": "jpeg",
|
|
||||||
"size": 1440,
|
|
||||||
"quality": 80
|
|
||||||
},
|
|
||||||
"colorspace": "p3",
|
|
||||||
"extractEmbedded": false
|
|
||||||
},
|
|
||||||
"newVersionCheck": {
|
|
||||||
"enabled": true
|
|
||||||
},
|
|
||||||
"trash": {
|
|
||||||
"enabled": true,
|
|
||||||
"days": 30
|
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"customCss": ""
|
"customCss": ""
|
||||||
},
|
},
|
||||||
"library": {
|
"trash": {
|
||||||
"scan": {
|
"days": 30,
|
||||||
"enabled": true,
|
"enabled": true
|
||||||
"cronExpression": "0 0 * * *"
|
|
||||||
},
|
|
||||||
"watch": {
|
|
||||||
"enabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"server": {
|
|
||||||
"externalDomain": "",
|
|
||||||
"loginPageMessage": ""
|
|
||||||
},
|
|
||||||
"notifications": {
|
|
||||||
"smtp": {
|
|
||||||
"enabled": false,
|
|
||||||
"from": "",
|
|
||||||
"replyTo": "",
|
|
||||||
"transport": {
|
|
||||||
"ignoreCert": false,
|
|
||||||
"host": "",
|
|
||||||
"port": 587,
|
|
||||||
"username": "",
|
|
||||||
"password": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"deleteDelay": 7
|
"deleteDelay": 7
|
||||||
|
|||||||
@@ -149,28 +149,31 @@ 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) | 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__TEXTUAL` | Comma-separated list of (textual) CLIP model(s) to preload and cache | | machine learning |
|
| `MACHINE_LEARNING_PRELOAD__CLIP__TEXTUAL` | Comma-separated list of (textual) CLIP model(s) to preload and cache | | machine learning |
|
||||||
| `MACHINE_LEARNING_PRELOAD__CLIP__VISUAL` | Comma-separated list of (visual) CLIP model(s) to preload and cache | | machine learning |
|
| `MACHINE_LEARNING_PRELOAD__CLIP__VISUAL` | Comma-separated list of (visual) CLIP model(s) to preload and cache | | machine learning |
|
||||||
| `MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITION` | Comma-separated list of (recognition) facial recognition model(s) to preload and cache | | machine learning |
|
| `MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__RECOGNITION` | Comma-separated list of (recognition) facial recognition model(s) to preload and cache | | machine learning |
|
||||||
| `MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTION` | Comma-separated list of (detection) facial recognition model(s) to preload and cache | | machine learning |
|
| `MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION__DETECTION` | Comma-separated list of (detection) facial recognition model(s) to preload and 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_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 |
|
| `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 |
|
||||||
| `MACHINE_LEARNING_RKNN` | Enable RKNN hardware acceleration if supported | `True` | machine learning |
|
| `MACHINE_LEARNING_MAX_BATCH_SIZE__OCR` | Set the maximum number of boxes that will be processed at once by the OCR model | `6` | machine learning |
|
||||||
| `MACHINE_LEARNING_RKNN_THREADS` | How many threads of RKNN runtime should be spinned up while inferencing. | `1` | machine learning |
|
| `MACHINE_LEARNING_RKNN` | Enable RKNN hardware acceleration if supported | `True` | machine learning |
|
||||||
|
| `MACHINE_LEARNING_RKNN_THREADS` | How many threads of RKNN runtime should be spun up while inferencing. | `1` | machine learning |
|
||||||
|
| `MACHINE_LEARNING_MODEL_ARENA` | Pre-allocates CPU memory to avoid memory fragmentation | true | machine learning |
|
||||||
|
| `MACHINE_LEARNING_OPENVINO_PRECISION` | If set to FP16, uses half-precision floating-point operations for faster inference with reduced accuracy (one of [`FP16`, `FP32`], applies only to OpenVINO) | `FP32` | 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.
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ In the settings of your new project, set "**Project name**" to a name you'll rem
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The following screen will give you the option to further customize your `docker-compose.yml` file. Take note of `DB_STORAGE_TYPE: 'HDD'`and uncomment if applicable for your Synology setup.
|
The following screen will give you the option to further customize your `docker-compose.yml` file. Take note of `DB_STORAGE_TYPE: 'HDD'` and uncomment if applicable for your Synology setup.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ After making a backup, please modify your `docker-compose.yml` file with the fol
|
|||||||
If you deviated from the defaults of pg14 or pgvectors0.2.0, you must adjust the pg major version and pgvecto.rs version. If you are still using the default `docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0` image, you can just follow the changes above. For example, if the previous image is `docker.io/tensorchord/pgvecto-rs:pg16-v0.3.0`, the new image should be `ghcr.io/immich-app/postgres:16-vectorchord0.3.0-pgvectors0.3.0` instead of the image specified in the diff.
|
If you deviated from the defaults of pg14 or pgvectors0.2.0, you must adjust the pg major version and pgvecto.rs version. If you are still using the default `docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0` image, you can just follow the changes above. For example, if the previous image is `docker.io/tensorchord/pgvecto-rs:pg16-v0.3.0`, the new image should be `ghcr.io/immich-app/postgres:16-vectorchord0.3.0-pgvectors0.3.0` instead of the image specified in the diff.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
After making these changes, you can start Immich as normal. Immich will make some changes to the DB during startup, which can take seconds to minutes to finish, depending on hardware and library size. In particular, it’s normal for the server logs to be seemingly stuck at `Reindexing clip_index` and `Reindexing face_index`for some time if you have over 100k assets in Immich and/or Immich is on a relatively weak server. If you see these logs and there are no errors, just give it time.
|
After making these changes, you can start Immich as normal. Immich will make some changes to the DB during startup, which can take seconds to minutes to finish, depending on hardware and library size. In particular, it’s normal for the server logs to be seemingly stuck at `Reindexing clip_index` and `Reindexing face_index` for some time if you have over 100k assets in Immich and/or Immich is on a relatively weak server. If you see these logs and there are no errors, just give it time.
|
||||||
|
|
||||||
:::danger
|
:::danger
|
||||||
After switching to VectorChord, you should not downgrade Immich below 1.133.0.
|
After switching to VectorChord, you should not downgrade Immich below 1.133.0.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
The mobile app can be downloaded from the following places:
|
The mobile app can be downloaded from the following places:
|
||||||
|
|
||||||
|
- Obtainium: You can get your Obtainium config link from the [Utilities page of your Immich server](https://my.immich.app/utilities).
|
||||||
- [Google Play Store](https://play.google.com/store/apps/details?id=app.alextran.immich)
|
- [Google Play Store](https://play.google.com/store/apps/details?id=app.alextran.immich)
|
||||||
- [Apple App Store](https://apps.apple.com/us/app/immich/id1613945652)
|
- [Apple App Store](https://apps.apple.com/us/app/immich/id1613945652)
|
||||||
- [F-Droid](https://f-droid.org/packages/app.alextran.immich)
|
- [F-Droid](https://f-droid.org/packages/app.alextran.immich)
|
||||||
|
|||||||
25
docs/mise.toml
Normal file
25
docs/mise.toml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[tasks.install]
|
||||||
|
run = "pnpm install --filter documentation --frozen-lockfile"
|
||||||
|
|
||||||
|
[tasks.start]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "docusaurus --port 3005"
|
||||||
|
|
||||||
|
[tasks.build]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = [
|
||||||
|
"jq -c < ../open-api/immich-openapi-specs.json > ./static/openapi.json || exit 0",
|
||||||
|
"docusaurus build",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tasks.preview]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "docusaurus serve"
|
||||||
|
|
||||||
|
[tasks.format]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --check ."
|
||||||
|
|
||||||
|
[tasks."format-fix"]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --write ."
|
||||||
@@ -57,6 +57,6 @@
|
|||||||
"node": ">=20"
|
"node": ">=20"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "22.20.0"
|
"node": "24.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,108 +0,0 @@
|
|||||||
import Link from '@docusaurus/Link';
|
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
interface CommunityGuidesProps {
|
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const guides: CommunityGuidesProps[] = [
|
|
||||||
{
|
|
||||||
title: 'Cloudflare Tunnels with SSO/OAuth',
|
|
||||||
description: `Setting up Cloudflare Tunnels and a SaaS App for Immich.`,
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/8299',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Database backup in TrueNAS',
|
|
||||||
description: `Create a database backup with pgAdmin in TrueNAS.`,
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/8809',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Unraid backup scripts',
|
|
||||||
description: `Back up your assets in Unraid with a pre-prepared script.`,
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/8416',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Sync folders with albums',
|
|
||||||
description: `synchronize folders in imported library with albums having the folders name.`,
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/3382',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Podman Quadlets Handbook',
|
|
||||||
description:
|
|
||||||
'A rewrite of the original Immich Docker Compose file using Podman Quadlets, with a set of extra guides in the repository’s wiki.',
|
|
||||||
url: 'https://github.com/linux-universe/immich-podman-quadlets/blob/main/README.md',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Podman/Quadlets Install',
|
|
||||||
description: 'Documentation for simple podman setup using quadlets.',
|
|
||||||
url: 'https://github.com/tbelway/immich-podman-quadlets/blob/main/docs/install/podman-quadlet.md',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Google Photos import + albums',
|
|
||||||
description: 'Import your Google Photos files into Immich and add your albums.',
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/1340',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Access Immich with custom domain',
|
|
||||||
description: 'Access your local Immich installation over the internet using your own domain.',
|
|
||||||
url: 'https://github.com/ppr88/immich-guides/blob/main/open-immich-custom-domain.md',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Nginx caching map server',
|
|
||||||
description: 'Increase privacy by using nginx as a caching proxy in front of a map tile server.',
|
|
||||||
url: 'https://github.com/pcouy/pcouy.github.io/blob/main/_posts/2024-08-30-proxying-a-map-tile-server-for-increased-privacy.md',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'fail2ban setup instructions',
|
|
||||||
description: 'How to configure an existing fail2ban installation to block incorrect login attempts.',
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/3243#discussioncomment-6681948',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich remote access with NordVPN Meshnet',
|
|
||||||
description: 'Access Immich with an end-to-end encrypted connection.',
|
|
||||||
url: 'https://meshnet.nordvpn.com/how-to/remote-files-media-access/immich-remote-access',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Trust Self Signed Certificates with Immich - OAuth Setup',
|
|
||||||
description:
|
|
||||||
'Set up Certificate Authority trust with Immich, and your private OAuth2/OpenID service, while using a private CA for HTTPS commication.',
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/18614',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {
|
|
||||||
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 px-4 py-6">
|
|
||||||
<div className="flex flex-col gap-2">
|
|
||||||
<p className="m-0 items-start flex gap-2 text-2xl font-bold text-immich-primary dark:text-immich-dark-primary">
|
|
||||||
<span>{title}</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300">{description}</p>
|
|
||||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300 my-4">
|
|
||||||
<a href={url}>{url}</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="flex">
|
|
||||||
<Link
|
|
||||||
className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-xl text-sm hover:no-underline text-immich-primary dark:text-immich-dark-bg font-semibold"
|
|
||||||
to={url}
|
|
||||||
>
|
|
||||||
View Guide
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function CommunityGuides(): JSX.Element {
|
|
||||||
return (
|
|
||||||
<div className="grid grid-cols-1 xl:grid-cols-2 gap-4">
|
|
||||||
{guides.map((guides) => (
|
|
||||||
<CommunityGuide {...guides} />
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
import Link from '@docusaurus/Link';
|
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
interface CommunityProjectProps {
|
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const projects: CommunityProjectProps[] = [
|
|
||||||
{
|
|
||||||
title: 'immich-go',
|
|
||||||
description: `An alternative to the immich-CLI that doesn't depend on nodejs. It specializes in importing Google Photos Takeout archives.`,
|
|
||||||
url: 'https://github.com/simulot/immich-go',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'ImmichFrame',
|
|
||||||
description: 'Run an Immich slideshow in a photo frame.',
|
|
||||||
url: 'https://github.com/3rob3/ImmichFrame',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'API Album Sync',
|
|
||||||
description: 'A Python script to sync folders as albums.',
|
|
||||||
url: 'https://git.orenit.solutions/open/immichalbumpull',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich-Tools',
|
|
||||||
description: 'Provides scripts for handling problems on the repair page.',
|
|
||||||
url: 'https://github.com/clumsyCoder00/Immich-Tools',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Lightroom Publisher: mi.Immich.Publisher',
|
|
||||||
description: 'Lightroom plugin to publish photos from Lightroom collections to Immich albums.',
|
|
||||||
url: 'https://github.com/midzelis/mi.Immich.Publisher',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Lightroom Immich Plugin: lrc-immich-plugin',
|
|
||||||
description:
|
|
||||||
'Lightroom plugin to publish, export photos from Lightroom to Immich. Import from Immich to Lightroom is also supported.',
|
|
||||||
url: 'https://blog.fokuspunk.de/lrc-immich-plugin/',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich-Tiktok-Remover',
|
|
||||||
description: 'Script to search for and remove TikTok videos from your Immich library.',
|
|
||||||
url: 'https://github.com/mxc2/immich-tiktok-remover',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Android TV',
|
|
||||||
description: 'Unofficial Immich Android TV app.',
|
|
||||||
url: 'https://github.com/giejay/Immich-Android-TV',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Create albums from folders',
|
|
||||||
description: 'A Python script to create albums based on the folder structure of an external library.',
|
|
||||||
url: 'https://github.com/Salvoxia/immich-folder-album-creator',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Powershell Module PSImmich',
|
|
||||||
description: 'Powershell Module for the Immich API',
|
|
||||||
url: 'https://github.com/hanpq/PSImmich',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Distribution',
|
|
||||||
description: 'Snap package for easy install and zero-care auto updates of Immich. Self-hosted photo management.',
|
|
||||||
url: 'https://immich-distribution.nsg.cc',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Kiosk',
|
|
||||||
description: 'Lightweight slideshow to run on kiosk devices and browsers.',
|
|
||||||
url: 'https://github.com/damongolding/immich-kiosk',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Power Tools',
|
|
||||||
description: 'Power tools for organizing your immich library.',
|
|
||||||
url: 'https://github.com/varun-raj/immich-power-tools',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Public Proxy',
|
|
||||||
description:
|
|
||||||
'Share your Immich photos and albums in a safe way without exposing your Immich instance to the public.',
|
|
||||||
url: 'https://github.com/alangrainger/immich-public-proxy',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Kodi',
|
|
||||||
description: 'Unofficial Kodi plugin for Immich.',
|
|
||||||
url: 'https://github.com/vladd11/immich-kodi',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Downloader',
|
|
||||||
description: 'Downloads a configurable number of random photos based on people or album ID.',
|
|
||||||
url: 'https://github.com/jon6fingrs/immich-dl',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Upload Optimizer',
|
|
||||||
description: 'Automatically optimize files uploaded to Immich in order to save storage space',
|
|
||||||
url: 'https://github.com/miguelangel-nubla/immich-upload-optimizer',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Machine Learning Load Balancer',
|
|
||||||
description: 'Speed up your machine learning by load balancing your requests to multiple computers',
|
|
||||||
url: 'https://github.com/apetersson/immich_ml_balancer',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Drop Uploader',
|
|
||||||
description: 'A tiny, zero-login web app for collecting photos/videos from anyone into your Immich server.',
|
|
||||||
url: 'https://github.com/Nasogaa/immich-drop',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Birthday Sync',
|
|
||||||
description: 'Bulk-upload and -download birthdays, with CardDAV sync support',
|
|
||||||
url: 'https://github.com/sid3windr/immich-birthday',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Stack',
|
|
||||||
description: 'Auto-stack photos with identical filenames and differing extensions (i.e. JPG+RAW)',
|
|
||||||
url: 'https://github.com/sid3windr/immich-stack',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Immich Stack',
|
|
||||||
description: 'Automatically groups similar photos into stacks within the Immich photo management system.',
|
|
||||||
url: 'https://github.com/Majorfi/immich-stack/',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
|
|
||||||
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 px-4 py-6">
|
|
||||||
<div className="flex flex-col gap-2">
|
|
||||||
<p className="m-0 items-start flex gap-2 text-2xl font-bold text-immich-primary dark:text-immich-dark-primary">
|
|
||||||
<span>{title}</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300">{description}</p>
|
|
||||||
<p className="m-0 text-sm text-gray-600 dark:text-gray-300 my-4">
|
|
||||||
<a href={url}>{url}</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="flex">
|
|
||||||
<Link
|
|
||||||
className="px-4 py-2 bg-immich-primary/10 dark:bg-gray-300 rounded-xl text-sm hover:no-underline text-immich-primary dark:text-immich-dark-bg font-semibold"
|
|
||||||
to={url}
|
|
||||||
>
|
|
||||||
View Link
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function CommunityProjects(): JSX.Element {
|
|
||||||
return (
|
|
||||||
<div className="grid grid-cols-1 xl:grid-cols-2 gap-4">
|
|
||||||
{projects.map((project) => (
|
|
||||||
<CommunityProject {...project} />
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
export const discordPath =
|
|
||||||
'M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z';
|
|
||||||
export const discordViewBox = '0 0 126.644 96';
|
|
||||||
6
docs/static/_redirects
vendored
6
docs/static/_redirects
vendored
@@ -27,8 +27,10 @@
|
|||||||
/administration/password-login /administration/system-settings 307
|
/administration/password-login /administration/system-settings 307
|
||||||
/features/search /features/searching 307
|
/features/search /features/searching 307
|
||||||
/features/smart-search /features/searching 307
|
/features/smart-search /features/searching 307
|
||||||
/guides/api-album-sync /community-projects 307
|
/guides/api-album-sync https://awesome.immich.app/ 307
|
||||||
/guides/remove-offline-files /community-projects 307
|
/guides/remove-offline-files https://awesome.immich.app/ 307
|
||||||
|
/community-guides https://awesome.immich.app/ 307
|
||||||
|
/community-projects https://awesome.immich.app/ 307
|
||||||
/overview/introduction /overview/quick-start 307
|
/overview/introduction /overview/quick-start 307
|
||||||
/overview/welcome /overview/quick-start 307
|
/overview/welcome /overview/quick-start 307
|
||||||
/docs/* /:splat 307
|
/docs/* /:splat 307
|
||||||
|
|||||||
20
docs/static/archived-versions.json
vendored
20
docs/static/archived-versions.json
vendored
@@ -1,4 +1,24 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"label": "v2.2.3",
|
||||||
|
"url": "https://docs.v2.2.3.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v2.2.2",
|
||||||
|
"url": "https://docs.v2.2.2.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v2.2.1",
|
||||||
|
"url": "https://docs.v2.2.1.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v2.2.0",
|
||||||
|
"url": "https://docs.v2.2.0.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v2.1.0",
|
||||||
|
"url": "https://docs.v2.1.0.archive.immich.app"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label": "v2.0.1",
|
"label": "v2.0.1",
|
||||||
"url": "https://docs.v2.0.1.archive.immich.app"
|
"url": "https://docs.v2.0.1.archive.immich.app"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
22.20.0
|
24.11.0
|
||||||
|
|||||||
@@ -35,10 +35,10 @@ services:
|
|||||||
- 2285:2285
|
- 2285:2285
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:6.2-alpine@sha256:2185e741f4c1e7b0ea9ca1e163a3767c4270a73086b6bbea2049a7203212fb7f
|
image: redis:6.2-alpine@sha256:37e002448575b32a599109664107e374c8709546905c372a34d64919043b9ceb
|
||||||
|
|
||||||
database:
|
database:
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:11ced39d65a92a54d12890ced6a26cc2003f92697d6f0d4d944b98459dba7138
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:6f3e9d2c2177af16c2988ff71425d79d89ca630ec2f9c8db03209ab716542338
|
||||||
command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf
|
command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
|
|||||||
29
e2e/mise.toml
Normal file
29
e2e/mise.toml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
[tasks.install]
|
||||||
|
run = "pnpm install --filter immich-e2e --frozen-lockfile"
|
||||||
|
|
||||||
|
[tasks.test]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "vitest --run"
|
||||||
|
|
||||||
|
[tasks."test-web"]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "playwright test"
|
||||||
|
|
||||||
|
[tasks.format]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --check ."
|
||||||
|
|
||||||
|
[tasks."format-fix"]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "prettier --write ."
|
||||||
|
|
||||||
|
[tasks.lint]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "eslint \"src/**/*.ts\" --max-warnings 0"
|
||||||
|
|
||||||
|
[tasks."lint-fix"]
|
||||||
|
run = { task = "lint --fix" }
|
||||||
|
|
||||||
|
[tasks.check]
|
||||||
|
env._.path = "./node_modules/.bin"
|
||||||
|
run = "tsc --noEmit"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "2.0.1",
|
"version": "2.2.3",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"@playwright/test": "^1.44.1",
|
"@playwright/test": "^1.44.1",
|
||||||
"@socket.io/component-emitter": "^3.1.2",
|
"@socket.io/component-emitter": "^3.1.2",
|
||||||
"@types/luxon": "^3.4.2",
|
"@types/luxon": "^3.4.2",
|
||||||
"@types/node": "^22.18.8",
|
"@types/node": "^22.19.0",
|
||||||
"@types/oidc-provider": "^9.0.0",
|
"@types/oidc-provider": "^9.0.0",
|
||||||
"@types/pg": "^8.15.1",
|
"@types/pg": "^8.15.1",
|
||||||
"@types/pngjs": "^6.0.4",
|
"@types/pngjs": "^6.0.4",
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-prettier": "^5.1.3",
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
"eslint-plugin-unicorn": "^60.0.0",
|
"eslint-plugin-unicorn": "^60.0.0",
|
||||||
"exiftool-vendored": "^28.3.1",
|
"exiftool-vendored": "^31.1.0",
|
||||||
"globals": "^16.0.0",
|
"globals": "^16.0.0",
|
||||||
"jose": "^5.6.3",
|
"jose": "^5.6.3",
|
||||||
"luxon": "^3.4.4",
|
"luxon": "^3.4.4",
|
||||||
@@ -52,6 +52,6 @@
|
|||||||
"vitest": "^3.0.0"
|
"vitest": "^3.0.0"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "22.20.0"
|
"node": "24.11.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ describe('/albums', () => {
|
|||||||
expect(body).toEqual({
|
expect(body).toEqual({
|
||||||
...user1Albums[0],
|
...user1Albums[0],
|
||||||
assets: [expect.objectContaining({ isFavorite: false })],
|
assets: [expect.objectContaining({ isFavorite: false })],
|
||||||
|
contributorCounts: [{ userId: user1.userId, assetCount: 1 }],
|
||||||
lastModifiedAssetTimestamp: expect.any(String),
|
lastModifiedAssetTimestamp: expect.any(String),
|
||||||
startDate: expect.any(String),
|
startDate: expect.any(String),
|
||||||
endDate: expect.any(String),
|
endDate: expect.any(String),
|
||||||
@@ -310,6 +311,7 @@ describe('/albums', () => {
|
|||||||
expect(body).toEqual({
|
expect(body).toEqual({
|
||||||
...user1Albums[0],
|
...user1Albums[0],
|
||||||
assets: [expect.objectContaining({ id: user1Albums[0].assets[0].id })],
|
assets: [expect.objectContaining({ id: user1Albums[0].assets[0].id })],
|
||||||
|
contributorCounts: [{ userId: user1.userId, assetCount: 1 }],
|
||||||
lastModifiedAssetTimestamp: expect.any(String),
|
lastModifiedAssetTimestamp: expect.any(String),
|
||||||
startDate: expect.any(String),
|
startDate: expect.any(String),
|
||||||
endDate: expect.any(String),
|
endDate: expect.any(String),
|
||||||
@@ -345,6 +347,7 @@ describe('/albums', () => {
|
|||||||
expect(body).toEqual({
|
expect(body).toEqual({
|
||||||
...user1Albums[0],
|
...user1Albums[0],
|
||||||
assets: [expect.objectContaining({ id: user1Albums[0].assets[0].id })],
|
assets: [expect.objectContaining({ id: user1Albums[0].assets[0].id })],
|
||||||
|
contributorCounts: [{ userId: user1.userId, assetCount: 1 }],
|
||||||
lastModifiedAssetTimestamp: expect.any(String),
|
lastModifiedAssetTimestamp: expect.any(String),
|
||||||
startDate: expect.any(String),
|
startDate: expect.any(String),
|
||||||
endDate: expect.any(String),
|
endDate: expect.any(String),
|
||||||
@@ -362,6 +365,7 @@ describe('/albums', () => {
|
|||||||
expect(body).toEqual({
|
expect(body).toEqual({
|
||||||
...user1Albums[0],
|
...user1Albums[0],
|
||||||
assets: [],
|
assets: [],
|
||||||
|
contributorCounts: [{ userId: user1.userId, assetCount: 1 }],
|
||||||
assetCount: 1,
|
assetCount: 1,
|
||||||
lastModifiedAssetTimestamp: expect.any(String),
|
lastModifiedAssetTimestamp: expect.any(String),
|
||||||
endDate: expect.any(String),
|
endDate: expect.any(String),
|
||||||
@@ -382,6 +386,7 @@ describe('/albums', () => {
|
|||||||
expect(body).toEqual({
|
expect(body).toEqual({
|
||||||
...user2Albums[0],
|
...user2Albums[0],
|
||||||
assets: [],
|
assets: [],
|
||||||
|
contributorCounts: [{ userId: user1.userId, assetCount: 1 }],
|
||||||
assetCount: 1,
|
assetCount: 1,
|
||||||
lastModifiedAssetTimestamp: expect.any(String),
|
lastModifiedAssetTimestamp: expect.any(String),
|
||||||
endDate: expect.any(String),
|
endDate: expect.any(String),
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import { DateTime } from 'luxon';
|
|||||||
import { randomBytes } from 'node:crypto';
|
import { randomBytes } from 'node:crypto';
|
||||||
import { readFile, writeFile } from 'node:fs/promises';
|
import { readFile, writeFile } from 'node:fs/promises';
|
||||||
import { basename, join } from 'node:path';
|
import { basename, join } from 'node:path';
|
||||||
import sharp from 'sharp';
|
|
||||||
import { Socket } from 'socket.io-client';
|
import { Socket } from 'socket.io-client';
|
||||||
import { createUserDto, uuidDto } from 'src/fixtures';
|
import { createUserDto, uuidDto } from 'src/fixtures';
|
||||||
import { makeRandomImage } from 'src/generators';
|
import { makeRandomImage } from 'src/generators';
|
||||||
@@ -41,40 +40,6 @@ const today = DateTime.fromObject({
|
|||||||
}) as DateTime<true>;
|
}) as DateTime<true>;
|
||||||
const yesterday = today.minus({ days: 1 });
|
const yesterday = today.minus({ days: 1 });
|
||||||
|
|
||||||
const createTestImageWithExif = async (filename: string, exifData: Record<string, any>) => {
|
|
||||||
// Generate unique color to ensure different checksums for each image
|
|
||||||
const r = Math.floor(Math.random() * 256);
|
|
||||||
const g = Math.floor(Math.random() * 256);
|
|
||||||
const b = Math.floor(Math.random() * 256);
|
|
||||||
|
|
||||||
// Create a 100x100 solid color JPEG using Sharp
|
|
||||||
const imageBytes = await sharp({
|
|
||||||
create: {
|
|
||||||
width: 100,
|
|
||||||
height: 100,
|
|
||||||
channels: 3,
|
|
||||||
background: { r, g, b },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.jpeg({ quality: 90 })
|
|
||||||
.toBuffer();
|
|
||||||
|
|
||||||
// Add random suffix to filename to avoid collisions
|
|
||||||
const uniqueFilename = filename.replace('.jpg', `-${randomBytes(4).toString('hex')}.jpg`);
|
|
||||||
const filepath = join(tempDir, uniqueFilename);
|
|
||||||
await writeFile(filepath, imageBytes);
|
|
||||||
|
|
||||||
// Filter out undefined values before writing EXIF
|
|
||||||
const cleanExifData = Object.fromEntries(Object.entries(exifData).filter(([, value]) => value !== undefined));
|
|
||||||
|
|
||||||
await exiftool.write(filepath, cleanExifData);
|
|
||||||
|
|
||||||
// Re-read the image bytes after EXIF has been written
|
|
||||||
const finalImageBytes = await readFile(filepath);
|
|
||||||
|
|
||||||
return { filepath, imageBytes: finalImageBytes, filename: uniqueFilename };
|
|
||||||
};
|
|
||||||
|
|
||||||
describe('/asset', () => {
|
describe('/asset', () => {
|
||||||
let admin: LoginResponseDto;
|
let admin: LoginResponseDto;
|
||||||
let websocket: Socket;
|
let websocket: Socket;
|
||||||
@@ -1249,411 +1214,6 @@ describe('/asset', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('EXIF metadata extraction', () => {
|
|
||||||
describe('Additional date tag extraction', () => {
|
|
||||||
describe('Date-time vs time-only tag handling', () => {
|
|
||||||
it('should fall back to file timestamps when only time-only tags are available', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('time-only-fallback.jpg', {
|
|
||||||
TimeCreated: '2023:11:15 14:30:00', // Time-only tag, should not be used for dateTimeOriginal
|
|
||||||
// Exclude all date-time tags to force fallback to file timestamps
|
|
||||||
SubSecDateTimeOriginal: undefined,
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
SubSecCreateDate: undefined,
|
|
||||||
SubSecMediaCreateDate: undefined,
|
|
||||||
CreateDate: undefined,
|
|
||||||
MediaCreateDate: undefined,
|
|
||||||
CreationDate: undefined,
|
|
||||||
DateTimeCreated: undefined,
|
|
||||||
GPSDateTime: undefined,
|
|
||||||
DateTimeUTC: undefined,
|
|
||||||
SonyDateTime2: undefined,
|
|
||||||
GPSDateStamp: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const oldDate = new Date('2020-01-01T00:00:00.000Z');
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
fileCreatedAt: oldDate.toISOString(),
|
|
||||||
fileModifiedAt: oldDate.toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
// Should fall back to file timestamps, which we set to 2020-01-01
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2020-01-01T00:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should prefer DateTimeOriginal over time-only tags', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('datetime-over-time.jpg', {
|
|
||||||
DateTimeOriginal: '2023:10:10 10:00:00', // Should be preferred
|
|
||||||
TimeCreated: '2023:11:15 14:30:00', // Should be ignored (time-only)
|
|
||||||
});
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
// Should use DateTimeOriginal, not TimeCreated
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2023-10-10T10:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('GPSDateTime tag extraction', () => {
|
|
||||||
it('should extract GPSDateTime with GPS coordinates', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('gps-datetime.jpg', {
|
|
||||||
GPSDateTime: '2023:11:15 12:30:00Z',
|
|
||||||
GPSLatitude: 37.7749,
|
|
||||||
GPSLongitude: -122.4194,
|
|
||||||
// Exclude other date tags
|
|
||||||
SubSecDateTimeOriginal: undefined,
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
SubSecCreateDate: undefined,
|
|
||||||
SubSecMediaCreateDate: undefined,
|
|
||||||
CreateDate: undefined,
|
|
||||||
MediaCreateDate: undefined,
|
|
||||||
CreationDate: undefined,
|
|
||||||
DateTimeCreated: undefined,
|
|
||||||
TimeCreated: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
expect(assetInfo.exifInfo?.latitude).toBeCloseTo(37.7749, 4);
|
|
||||||
expect(assetInfo.exifInfo?.longitude).toBeCloseTo(-122.4194, 4);
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2023-11-15T12:30:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('CreateDate tag extraction', () => {
|
|
||||||
it('should extract CreateDate when available', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('create-date.jpg', {
|
|
||||||
CreateDate: '2023:11:15 10:30:00',
|
|
||||||
// Exclude other higher priority date tags
|
|
||||||
SubSecDateTimeOriginal: undefined,
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
SubSecCreateDate: undefined,
|
|
||||||
SubSecMediaCreateDate: undefined,
|
|
||||||
MediaCreateDate: undefined,
|
|
||||||
CreationDate: undefined,
|
|
||||||
DateTimeCreated: undefined,
|
|
||||||
TimeCreated: undefined,
|
|
||||||
GPSDateTime: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2023-11-15T10:30:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('GPSDateStamp tag extraction', () => {
|
|
||||||
it('should fall back to file timestamps when only date-only tags are available', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('gps-datestamp.jpg', {
|
|
||||||
GPSDateStamp: '2023:11:15', // Date-only tag, should not be used for dateTimeOriginal
|
|
||||||
// Note: NOT including GPSTimeStamp to avoid automatic GPSDateTime creation
|
|
||||||
GPSLatitude: 51.5074,
|
|
||||||
GPSLongitude: -0.1278,
|
|
||||||
// Explicitly exclude all testable date-time tags to force fallback to file timestamps
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
CreateDate: undefined,
|
|
||||||
CreationDate: undefined,
|
|
||||||
GPSDateTime: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const oldDate = new Date('2020-01-01T00:00:00.000Z');
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
fileCreatedAt: oldDate.toISOString(),
|
|
||||||
fileModifiedAt: oldDate.toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
expect(assetInfo.exifInfo?.latitude).toBeCloseTo(51.5074, 4);
|
|
||||||
expect(assetInfo.exifInfo?.longitude).toBeCloseTo(-0.1278, 4);
|
|
||||||
// Should fall back to file timestamps, which we set to 2020-01-01
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2020-01-01T00:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NOTE: The following EXIF date tags are NOT effectively usable with JPEG test files:
|
|
||||||
*
|
|
||||||
* NOT WRITABLE to JPEG:
|
|
||||||
* - MediaCreateDate: Can be read from video files but not written to JPEG
|
|
||||||
* - DateTimeCreated: Read-only tag in JPEG format
|
|
||||||
* - DateTimeUTC: Cannot be written to JPEG files
|
|
||||||
* - SonyDateTime2: Proprietary Sony tag, not writable to JPEG
|
|
||||||
* - SubSecMediaCreateDate: Tag not defined for JPEG format
|
|
||||||
* - SourceImageCreateTime: Non-standard insta360 tag, not writable to JPEG
|
|
||||||
*
|
|
||||||
* WRITABLE but NOT READABLE from JPEG:
|
|
||||||
* - SubSecDateTimeOriginal: Can be written but not read back from JPEG
|
|
||||||
* - SubSecCreateDate: Can be written but not read back from JPEG
|
|
||||||
*
|
|
||||||
* EFFECTIVELY TESTABLE TAGS (writable and readable):
|
|
||||||
* - DateTimeOriginal ✓
|
|
||||||
* - CreateDate ✓
|
|
||||||
* - CreationDate ✓
|
|
||||||
* - GPSDateTime ✓
|
|
||||||
*
|
|
||||||
* The metadata service correctly handles non-readable tags and will fall back to
|
|
||||||
* file timestamps when only non-readable tags are present.
|
|
||||||
*/
|
|
||||||
|
|
||||||
describe('Date tag priority order', () => {
|
|
||||||
it('should respect the complete date tag priority order', async () => {
|
|
||||||
// Test cases using only EFFECTIVELY TESTABLE tags (writable AND readable from JPEG)
|
|
||||||
const testCases = [
|
|
||||||
{
|
|
||||||
name: 'DateTimeOriginal has highest priority among testable tags',
|
|
||||||
exifData: {
|
|
||||||
DateTimeOriginal: '2023:04:04 04:00:00', // TESTABLE - highest priority among readable tags
|
|
||||||
CreateDate: '2023:05:05 05:00:00', // TESTABLE
|
|
||||||
CreationDate: '2023:07:07 07:00:00', // TESTABLE
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
|
||||||
},
|
|
||||||
expectedDate: '2023-04-04T04:00:00.000Z',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'CreationDate when DateTimeOriginal missing',
|
|
||||||
exifData: {
|
|
||||||
CreationDate: '2023:05:05 05:00:00', // TESTABLE
|
|
||||||
CreateDate: '2023:07:07 07:00:00', // TESTABLE
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
|
||||||
},
|
|
||||||
expectedDate: '2023-05-05T05:00:00.000Z',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'CreationDate when standard EXIF tags missing',
|
|
||||||
exifData: {
|
|
||||||
CreationDate: '2023:07:07 07:00:00', // TESTABLE
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
|
||||||
},
|
|
||||||
expectedDate: '2023-07-07T07:00:00.000Z',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'GPSDateTime when no other testable date tags present',
|
|
||||||
exifData: {
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
|
||||||
Make: 'SONY',
|
|
||||||
},
|
|
||||||
expectedDate: '2023-10-10T10:00:00.000Z',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const testCase of testCases) {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif(
|
|
||||||
`${testCase.name.replaceAll(/\s+/g, '-').toLowerCase()}.jpg`,
|
|
||||||
testCase.exifData,
|
|
||||||
);
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal, `Failed for: ${testCase.name}`).toBeDefined();
|
|
||||||
expect(
|
|
||||||
new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime(),
|
|
||||||
`Date mismatch for: ${testCase.name}`,
|
|
||||||
).toBe(new Date(testCase.expectedDate).getTime());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Edge cases for date tag handling', () => {
|
|
||||||
it('should fall back to file timestamps with GPSDateStamp alone', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('gps-datestamp-only.jpg', {
|
|
||||||
GPSDateStamp: '2023:08:08', // Date-only tag, should not be used for dateTimeOriginal
|
|
||||||
// Intentionally no GPSTimeStamp
|
|
||||||
// Exclude all other date tags
|
|
||||||
SubSecDateTimeOriginal: undefined,
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
SubSecCreateDate: undefined,
|
|
||||||
SubSecMediaCreateDate: undefined,
|
|
||||||
CreateDate: undefined,
|
|
||||||
MediaCreateDate: undefined,
|
|
||||||
CreationDate: undefined,
|
|
||||||
DateTimeCreated: undefined,
|
|
||||||
TimeCreated: undefined,
|
|
||||||
GPSDateTime: undefined,
|
|
||||||
DateTimeUTC: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const oldDate = new Date('2020-01-01T00:00:00.000Z');
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
fileCreatedAt: oldDate.toISOString(),
|
|
||||||
fileModifiedAt: oldDate.toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
// Should fall back to file timestamps, which we set to 2020-01-01
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2020-01-01T00:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should handle all testable date tags present to verify complete priority order', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('all-testable-date-tags.jpg', {
|
|
||||||
// All TESTABLE date tags to JPEG format (writable AND readable)
|
|
||||||
DateTimeOriginal: '2023:04:04 04:00:00', // TESTABLE - highest priority among readable tags
|
|
||||||
CreateDate: '2023:05:05 05:00:00', // TESTABLE
|
|
||||||
CreationDate: '2023:07:07 07:00:00', // TESTABLE
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
|
||||||
// Note: Excluded non-testable tags:
|
|
||||||
// SubSec tags: writable but not readable from JPEG
|
|
||||||
// Non-writable tags: MediaCreateDate, DateTimeCreated, DateTimeUTC, SonyDateTime2, etc.
|
|
||||||
// Time-only/date-only tags: already excluded from EXIF_DATE_TAGS
|
|
||||||
});
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
// Should use DateTimeOriginal as it has the highest priority among testable tags
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2023-04-04T04:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should use CreationDate when SubSec tags are missing', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('creation-date-priority.jpg', {
|
|
||||||
CreationDate: '2023:07:07 07:00:00', // WRITABLE
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // WRITABLE
|
|
||||||
// Note: DateTimeCreated, DateTimeUTC, SonyDateTime2 are NOT writable to JPEG
|
|
||||||
// Note: TimeCreated and GPSDateStamp are excluded from EXIF_DATE_TAGS (time-only/date-only)
|
|
||||||
// Exclude SubSec and standard EXIF tags
|
|
||||||
SubSecDateTimeOriginal: undefined,
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
SubSecCreateDate: undefined,
|
|
||||||
CreateDate: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
// Should use CreationDate when available
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2023-07-07T07:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should skip invalid date formats and use next valid tag', async () => {
|
|
||||||
const { imageBytes, filename } = await createTestImageWithExif('invalid-date-handling.jpg', {
|
|
||||||
// Note: Testing invalid date handling with only WRITABLE tags
|
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // WRITABLE - Valid date
|
|
||||||
CreationDate: '2023:13:13 13:00:00', // WRITABLE - Valid date
|
|
||||||
// Note: TimeCreated excluded (time-only), DateTimeCreated not writable to JPEG
|
|
||||||
// Exclude other date tags
|
|
||||||
SubSecDateTimeOriginal: undefined,
|
|
||||||
DateTimeOriginal: undefined,
|
|
||||||
SubSecCreateDate: undefined,
|
|
||||||
CreateDate: undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
const asset = await utils.createAsset(admin.accessToken, {
|
|
||||||
assetData: {
|
|
||||||
filename,
|
|
||||||
bytes: imageBytes,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: asset.id });
|
|
||||||
|
|
||||||
const assetInfo = await getAssetInfo({ id: asset.id }, { headers: asBearerAuth(admin.accessToken) });
|
|
||||||
|
|
||||||
expect(assetInfo.exifInfo?.dateTimeOriginal).toBeDefined();
|
|
||||||
// Should skip invalid dates and use the first valid one (GPSDateTime)
|
|
||||||
expect(new Date(assetInfo.exifInfo!.dateTimeOriginal!).getTime()).toBe(
|
|
||||||
new Date('2023-10-10T10:00:00.000Z').getTime(),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('POST /assets/exist', () => {
|
describe('POST /assets/exist', () => {
|
||||||
it('ignores invalid deviceAssetIds', async () => {
|
it('ignores invalid deviceAssetIds', async () => {
|
||||||
const response = await utils.checkExistingAssets(user1.accessToken, {
|
const response = await utils.checkExistingAssets(user1.accessToken, {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { JobCommand, JobName, LoginResponseDto, updateConfig } from '@immich/sdk';
|
import { LoginResponseDto, QueueCommand, QueueName, updateConfig } from '@immich/sdk';
|
||||||
import { cpSync, rmSync } from 'node:fs';
|
import { cpSync, rmSync } from 'node:fs';
|
||||||
import { readFile } from 'node:fs/promises';
|
import { readFile } from 'node:fs/promises';
|
||||||
import { basename } from 'node:path';
|
import { basename } from 'node:path';
|
||||||
@@ -17,28 +17,28 @@ describe('/jobs', () => {
|
|||||||
|
|
||||||
describe('PUT /jobs', () => {
|
describe('PUT /jobs', () => {
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await utils.jobCommand(admin.accessToken, JobName.MetadataExtraction, {
|
await utils.queueCommand(admin.accessToken, QueueName.MetadataExtraction, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.FaceDetection, {
|
await utils.queueCommand(admin.accessToken, QueueName.FaceDetection, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.SmartSearch, {
|
await utils.queueCommand(admin.accessToken, QueueName.SmartSearch, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.DuplicateDetection, {
|
await utils.queueCommand(admin.accessToken, QueueName.DuplicateDetection, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -59,8 +59,8 @@ describe('/jobs', () => {
|
|||||||
it('should queue metadata extraction for missing assets', async () => {
|
it('should queue metadata extraction for missing assets', async () => {
|
||||||
const path = `${testAssetDir}/formats/raw/Nikon/D700/philadelphia.nef`;
|
const path = `${testAssetDir}/formats/raw/Nikon/D700/philadelphia.nef`;
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.MetadataExtraction, {
|
await utils.queueCommand(admin.accessToken, QueueName.MetadataExtraction, {
|
||||||
command: JobCommand.Pause,
|
command: QueueCommand.Pause,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -77,20 +77,20 @@ describe('/jobs', () => {
|
|||||||
expect(asset.exifInfo?.make).toBeNull();
|
expect(asset.exifInfo?.make).toBeNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.MetadataExtraction, {
|
await utils.queueCommand(admin.accessToken, QueueName.MetadataExtraction, {
|
||||||
command: JobCommand.Empty,
|
command: QueueCommand.Empty,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction');
|
await utils.waitForQueueFinish(admin.accessToken, 'metadataExtraction');
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.MetadataExtraction, {
|
await utils.queueCommand(admin.accessToken, QueueName.MetadataExtraction, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.MetadataExtraction, {
|
await utils.queueCommand(admin.accessToken, QueueName.MetadataExtraction, {
|
||||||
command: JobCommand.Start,
|
command: QueueCommand.Start,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -124,8 +124,8 @@ describe('/jobs', () => {
|
|||||||
|
|
||||||
cpSync(`${testAssetDir}/formats/raw/Nikon/D80/glarus.nef`, path);
|
cpSync(`${testAssetDir}/formats/raw/Nikon/D80/glarus.nef`, path);
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.MetadataExtraction, {
|
await utils.queueCommand(admin.accessToken, QueueName.MetadataExtraction, {
|
||||||
command: JobCommand.Start,
|
command: QueueCommand.Start,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -144,8 +144,8 @@ describe('/jobs', () => {
|
|||||||
it('should queue thumbnail extraction for assets missing thumbs', async () => {
|
it('should queue thumbnail extraction for assets missing thumbs', async () => {
|
||||||
const path = `${testAssetDir}/albums/nature/tanners_ridge.jpg`;
|
const path = `${testAssetDir}/albums/nature/tanners_ridge.jpg`;
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Pause,
|
command: QueueCommand.Pause,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -153,32 +153,32 @@ describe('/jobs', () => {
|
|||||||
assetData: { bytes: await readFile(path), filename: basename(path) },
|
assetData: { bytes: await readFile(path), filename: basename(path) },
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.MetadataExtraction);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.MetadataExtraction);
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.ThumbnailGeneration);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.ThumbnailGeneration);
|
||||||
|
|
||||||
const assetBefore = await utils.getAssetInfo(admin.accessToken, id);
|
const assetBefore = await utils.getAssetInfo(admin.accessToken, id);
|
||||||
expect(assetBefore.thumbhash).toBeNull();
|
expect(assetBefore.thumbhash).toBeNull();
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Empty,
|
command: QueueCommand.Empty,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.MetadataExtraction);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.MetadataExtraction);
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.ThumbnailGeneration);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.ThumbnailGeneration);
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Start,
|
command: QueueCommand.Start,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.MetadataExtraction);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.MetadataExtraction);
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.ThumbnailGeneration);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.ThumbnailGeneration);
|
||||||
|
|
||||||
const assetAfter = await utils.getAssetInfo(admin.accessToken, id);
|
const assetAfter = await utils.getAssetInfo(admin.accessToken, id);
|
||||||
expect(assetAfter.thumbhash).not.toBeNull();
|
expect(assetAfter.thumbhash).not.toBeNull();
|
||||||
@@ -193,26 +193,26 @@ describe('/jobs', () => {
|
|||||||
assetData: { bytes: await readFile(path), filename: basename(path) },
|
assetData: { bytes: await readFile(path), filename: basename(path) },
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.MetadataExtraction);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.MetadataExtraction);
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.ThumbnailGeneration);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.ThumbnailGeneration);
|
||||||
|
|
||||||
const assetBefore = await utils.getAssetInfo(admin.accessToken, id);
|
const assetBefore = await utils.getAssetInfo(admin.accessToken, id);
|
||||||
|
|
||||||
cpSync(`${testAssetDir}/albums/nature/notocactus_minimus.jpg`, path);
|
cpSync(`${testAssetDir}/albums/nature/notocactus_minimus.jpg`, path);
|
||||||
|
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Resume,
|
command: QueueCommand.Resume,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
// This runs the missing thumbnail job
|
// This runs the missing thumbnail job
|
||||||
await utils.jobCommand(admin.accessToken, JobName.ThumbnailGeneration, {
|
await utils.queueCommand(admin.accessToken, QueueName.ThumbnailGeneration, {
|
||||||
command: JobCommand.Start,
|
command: QueueCommand.Start,
|
||||||
force: false,
|
force: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.MetadataExtraction);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.MetadataExtraction);
|
||||||
await utils.waitForQueueFinish(admin.accessToken, JobName.ThumbnailGeneration);
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.ThumbnailGeneration);
|
||||||
|
|
||||||
const assetAfter = await utils.getAssetInfo(admin.accessToken, id);
|
const assetAfter = await utils.getAssetInfo(admin.accessToken, id);
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ describe('/server', () => {
|
|||||||
importFaces: false,
|
importFaces: false,
|
||||||
oauth: false,
|
oauth: false,
|
||||||
oauthAutoLaunch: false,
|
oauthAutoLaunch: false,
|
||||||
|
ocr: false,
|
||||||
passwordLogin: true,
|
passwordLogin: true,
|
||||||
search: true,
|
search: true,
|
||||||
sidecar: true,
|
sidecar: true,
|
||||||
|
|||||||
@@ -582,7 +582,7 @@ describe('/tags', () => {
|
|||||||
expect(body).toEqual([expect.objectContaining({ id: userAsset.id, success: true })]);
|
expect(body).toEqual([expect.objectContaining({ id: userAsset.id, success: true })]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should remove duplicate assets only once', async () => {
|
it.skip('should remove duplicate assets only once', async () => {
|
||||||
const tagA = await create(user.accessToken, { name: 'TagA' });
|
const tagA = await create(user.accessToken, { name: 'TagA' });
|
||||||
await tagAssets(
|
await tagAssets(
|
||||||
{ id: tagA.id, bulkIdsDto: { ids: [userAsset.id] } },
|
{ id: tagA.id, bulkIdsDto: { ids: [userAsset.id] } },
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
LoginResponseDto,
|
LoginResponseDto,
|
||||||
|
QueueName,
|
||||||
createStack,
|
createStack,
|
||||||
deleteUserAdmin,
|
deleteUserAdmin,
|
||||||
getMyUser,
|
getMyUser,
|
||||||
@@ -327,6 +328,8 @@ describe('/admin/users', () => {
|
|||||||
{ headers: asBearerAuth(user.accessToken) },
|
{ headers: asBearerAuth(user.accessToken) },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
await utils.waitForQueueFinish(admin.accessToken, QueueName.BackgroundTask);
|
||||||
|
|
||||||
const { status, body } = await request(app)
|
const { status, body } = await request(app)
|
||||||
.delete(`/admin/users/${user.userId}`)
|
.delete(`/admin/users/${user.userId}`)
|
||||||
.send({ force: true })
|
.send({ force: true })
|
||||||
|
|||||||
@@ -442,6 +442,176 @@ describe(`immich upload`, () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('immich upload --delete-duplicates', () => {
|
||||||
|
it('should delete local duplicate files', async () => {
|
||||||
|
const {
|
||||||
|
stderr: firstStderr,
|
||||||
|
stdout: firstStdout,
|
||||||
|
exitCode: firstExitCode,
|
||||||
|
} = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
||||||
|
expect(firstStderr).toContain('{message}');
|
||||||
|
expect(firstStdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
|
||||||
|
);
|
||||||
|
expect(firstExitCode).toBe(0);
|
||||||
|
|
||||||
|
await mkdir(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
await symlink(`${testAssetDir}/albums/nature/silver_fir.jpg`, `/tmp/albums/nature/silver_fir.jpg`);
|
||||||
|
|
||||||
|
// Upload with --delete-duplicates flag
|
||||||
|
const { stderr, stdout, exitCode } = await immichCli([
|
||||||
|
'upload',
|
||||||
|
`/tmp/albums/nature/silver_fir.jpg`,
|
||||||
|
'--delete-duplicates',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Check that the duplicate file was deleted
|
||||||
|
const files = await readdir(`/tmp/albums/nature`);
|
||||||
|
await rm(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
expect(files.length).toBe(0);
|
||||||
|
|
||||||
|
expect(stdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.stringContaining('Found 0 new files and 1 duplicate'),
|
||||||
|
expect.stringContaining('All assets were already uploaded, nothing to do'),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
expect(stderr).toContain('{message}');
|
||||||
|
expect(exitCode).toBe(0);
|
||||||
|
|
||||||
|
// Verify no new assets were uploaded
|
||||||
|
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
|
||||||
|
expect(assets.total).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should have accurate dry run with --delete-duplicates', async () => {
|
||||||
|
const {
|
||||||
|
stderr: firstStderr,
|
||||||
|
stdout: firstStdout,
|
||||||
|
exitCode: firstExitCode,
|
||||||
|
} = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
||||||
|
expect(firstStderr).toContain('{message}');
|
||||||
|
expect(firstStdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
|
||||||
|
);
|
||||||
|
expect(firstExitCode).toBe(0);
|
||||||
|
|
||||||
|
await mkdir(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
await symlink(`${testAssetDir}/albums/nature/silver_fir.jpg`, `/tmp/albums/nature/silver_fir.jpg`);
|
||||||
|
|
||||||
|
// Upload with --delete-duplicates and --dry-run flags
|
||||||
|
const { stderr, stdout, exitCode } = await immichCli([
|
||||||
|
'upload',
|
||||||
|
`/tmp/albums/nature/silver_fir.jpg`,
|
||||||
|
'--delete-duplicates',
|
||||||
|
'--dry-run',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Check that the duplicate file was NOT deleted in dry run mode
|
||||||
|
const files = await readdir(`/tmp/albums/nature`);
|
||||||
|
await rm(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
expect(files.length).toBe(1);
|
||||||
|
|
||||||
|
expect(stdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.stringContaining('Found 0 new files and 1 duplicate'),
|
||||||
|
expect.stringContaining('Would have deleted 1 local asset'),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
expect(stderr).toContain('{message}');
|
||||||
|
expect(exitCode).toBe(0);
|
||||||
|
|
||||||
|
// Verify no new assets were uploaded
|
||||||
|
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
|
||||||
|
expect(assets.total).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with both --delete and --delete-duplicates flags', async () => {
|
||||||
|
// First, upload a file to create a duplicate on the server
|
||||||
|
const {
|
||||||
|
stderr: firstStderr,
|
||||||
|
stdout: firstStdout,
|
||||||
|
exitCode: firstExitCode,
|
||||||
|
} = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
||||||
|
expect(firstStderr).toContain('{message}');
|
||||||
|
expect(firstStdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
|
||||||
|
);
|
||||||
|
expect(firstExitCode).toBe(0);
|
||||||
|
|
||||||
|
// Both new and duplicate files
|
||||||
|
await mkdir(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
await symlink(`${testAssetDir}/albums/nature/silver_fir.jpg`, `/tmp/albums/nature/silver_fir.jpg`); // duplicate
|
||||||
|
await symlink(`${testAssetDir}/albums/nature/el_torcal_rocks.jpg`, `/tmp/albums/nature/el_torcal_rocks.jpg`); // new
|
||||||
|
|
||||||
|
// Upload with both --delete and --delete-duplicates flags
|
||||||
|
const { stderr, stdout, exitCode } = await immichCli([
|
||||||
|
'upload',
|
||||||
|
`/tmp/albums/nature`,
|
||||||
|
'--delete',
|
||||||
|
'--delete-duplicates',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Check that both files were deleted (new file due to --delete, duplicate due to --delete-duplicates)
|
||||||
|
const files = await readdir(`/tmp/albums/nature`);
|
||||||
|
await rm(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
expect(files.length).toBe(0);
|
||||||
|
|
||||||
|
expect(stdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.stringContaining('Found 1 new files and 1 duplicate'),
|
||||||
|
expect.stringContaining('Successfully uploaded 1 new asset'),
|
||||||
|
expect.stringContaining('Deleting assets that have been uploaded'),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
expect(stderr).toContain('{message}');
|
||||||
|
expect(exitCode).toBe(0);
|
||||||
|
|
||||||
|
// Verify one new asset was uploaded (total should be 2 now)
|
||||||
|
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
|
||||||
|
expect(assets.total).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should only delete duplicates when --delete-duplicates is used without --delete', async () => {
|
||||||
|
const {
|
||||||
|
stderr: firstStderr,
|
||||||
|
stdout: firstStdout,
|
||||||
|
exitCode: firstExitCode,
|
||||||
|
} = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
|
||||||
|
expect(firstStderr).toContain('{message}');
|
||||||
|
expect(firstStdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
|
||||||
|
);
|
||||||
|
expect(firstExitCode).toBe(0);
|
||||||
|
|
||||||
|
// Both new and duplicate files
|
||||||
|
await mkdir(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
await symlink(`${testAssetDir}/albums/nature/silver_fir.jpg`, `/tmp/albums/nature/silver_fir.jpg`); // duplicate
|
||||||
|
await symlink(`${testAssetDir}/albums/nature/el_torcal_rocks.jpg`, `/tmp/albums/nature/el_torcal_rocks.jpg`); // new
|
||||||
|
|
||||||
|
// Upload with only --delete-duplicates flag
|
||||||
|
const { stderr, stdout, exitCode } = await immichCli(['upload', `/tmp/albums/nature`, '--delete-duplicates']);
|
||||||
|
|
||||||
|
// Check that only the duplicate was deleted, new file should remain
|
||||||
|
const files = await readdir(`/tmp/albums/nature`);
|
||||||
|
await rm(`/tmp/albums/nature`, { recursive: true });
|
||||||
|
expect(files).toEqual(['el_torcal_rocks.jpg']);
|
||||||
|
|
||||||
|
expect(stdout.split('\n')).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.stringContaining('Found 1 new files and 1 duplicate'),
|
||||||
|
expect.stringContaining('Successfully uploaded 1 new asset'),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
expect(stderr).toContain('{message}');
|
||||||
|
expect(exitCode).toBe(0);
|
||||||
|
|
||||||
|
// Verify one new asset was uploaded (total should be 2 now)
|
||||||
|
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
|
||||||
|
expect(assets.total).toBe(2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('immich upload --skip-hash', () => {
|
describe('immich upload --skip-hash', () => {
|
||||||
it('should skip hashing', async () => {
|
it('should skip hashing', async () => {
|
||||||
const filename = `albums/nature/silver_fir.jpg`;
|
const filename = `albums/nature/silver_fir.jpg`;
|
||||||
|
|||||||
@@ -1,178 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Script to generate test images with additional EXIF date tags
|
|
||||||
* This creates actual JPEG images with embedded metadata for testing
|
|
||||||
* Images are generated into e2e/test-assets/metadata/dates/
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { execSync } from 'node:child_process';
|
|
||||||
import { writeFileSync } from 'node:fs';
|
|
||||||
import { dirname, join } from 'node:path';
|
|
||||||
import { fileURLToPath } from 'node:url';
|
|
||||||
import sharp from 'sharp';
|
|
||||||
|
|
||||||
interface TestImage {
|
|
||||||
filename: string;
|
|
||||||
description: string;
|
|
||||||
exifTags: Record<string, string>;
|
|
||||||
}
|
|
||||||
|
|
||||||
const testImages: TestImage[] = [
|
|
||||||
{
|
|
||||||
filename: 'time-created.jpg',
|
|
||||||
description: 'Image with TimeCreated tag',
|
|
||||||
exifTags: {
|
|
||||||
TimeCreated: '2023:11:15 14:30:00',
|
|
||||||
Make: 'Canon',
|
|
||||||
Model: 'EOS R5',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filename: 'gps-datetime.jpg',
|
|
||||||
description: 'Image with GPSDateTime and coordinates',
|
|
||||||
exifTags: {
|
|
||||||
GPSDateTime: '2023:11:15 12:30:00Z',
|
|
||||||
GPSLatitude: '37.7749',
|
|
||||||
GPSLongitude: '-122.4194',
|
|
||||||
GPSLatitudeRef: 'N',
|
|
||||||
GPSLongitudeRef: 'W',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filename: 'datetime-utc.jpg',
|
|
||||||
description: 'Image with DateTimeUTC tag',
|
|
||||||
exifTags: {
|
|
||||||
DateTimeUTC: '2023:11:15 10:30:00',
|
|
||||||
Make: 'Nikon',
|
|
||||||
Model: 'D850',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filename: 'gps-datestamp.jpg',
|
|
||||||
description: 'Image with GPSDateStamp and GPSTimeStamp',
|
|
||||||
exifTags: {
|
|
||||||
GPSDateStamp: '2023:11:15',
|
|
||||||
GPSTimeStamp: '08:30:00',
|
|
||||||
GPSLatitude: '51.5074',
|
|
||||||
GPSLongitude: '-0.1278',
|
|
||||||
GPSLatitudeRef: 'N',
|
|
||||||
GPSLongitudeRef: 'W',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filename: 'sony-datetime2.jpg',
|
|
||||||
description: 'Sony camera image with SonyDateTime2 tag',
|
|
||||||
exifTags: {
|
|
||||||
SonyDateTime2: '2023:11:15 06:30:00',
|
|
||||||
Make: 'SONY',
|
|
||||||
Model: 'ILCE-7RM5',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filename: 'date-priority-test.jpg',
|
|
||||||
description: 'Image with multiple date tags to test priority',
|
|
||||||
exifTags: {
|
|
||||||
SubSecDateTimeOriginal: '2023:01:01 01:00:00',
|
|
||||||
DateTimeOriginal: '2023:02:02 02:00:00',
|
|
||||||
SubSecCreateDate: '2023:03:03 03:00:00',
|
|
||||||
CreateDate: '2023:04:04 04:00:00',
|
|
||||||
CreationDate: '2023:05:05 05:00:00',
|
|
||||||
DateTimeCreated: '2023:06:06 06:00:00',
|
|
||||||
TimeCreated: '2023:07:07 07:00:00',
|
|
||||||
GPSDateTime: '2023:08:08 08:00:00',
|
|
||||||
DateTimeUTC: '2023:09:09 09:00:00',
|
|
||||||
GPSDateStamp: '2023:10:10',
|
|
||||||
SonyDateTime2: '2023:11:11 11:00:00',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filename: 'new-tags-only.jpg',
|
|
||||||
description: 'Image with only additional date tags (no standard tags)',
|
|
||||||
exifTags: {
|
|
||||||
TimeCreated: '2023:12:01 15:45:30',
|
|
||||||
GPSDateTime: '2023:12:01 13:45:30Z',
|
|
||||||
DateTimeUTC: '2023:12:01 13:45:30',
|
|
||||||
GPSDateStamp: '2023:12:01',
|
|
||||||
SonyDateTime2: '2023:12:01 08:45:30',
|
|
||||||
GPSLatitude: '40.7128',
|
|
||||||
GPSLongitude: '-74.0060',
|
|
||||||
GPSLatitudeRef: 'N',
|
|
||||||
GPSLongitudeRef: 'W',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const generateTestImages = async (): Promise<void> => {
|
|
||||||
// Target directory: e2e/test-assets/metadata/dates/
|
|
||||||
// Current file is in: e2e/src/
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
|
||||||
const __dirname = dirname(__filename);
|
|
||||||
const targetDir = join(__dirname, '..', 'test-assets', 'metadata', 'dates');
|
|
||||||
|
|
||||||
console.log('Generating test images with additional EXIF date tags...');
|
|
||||||
console.log(`Target directory: ${targetDir}`);
|
|
||||||
|
|
||||||
for (const image of testImages) {
|
|
||||||
try {
|
|
||||||
const imagePath = join(targetDir, image.filename);
|
|
||||||
|
|
||||||
// Create unique JPEG file using Sharp
|
|
||||||
const r = Math.floor(Math.random() * 256);
|
|
||||||
const g = Math.floor(Math.random() * 256);
|
|
||||||
const b = Math.floor(Math.random() * 256);
|
|
||||||
|
|
||||||
const jpegData = await sharp({
|
|
||||||
create: {
|
|
||||||
width: 100,
|
|
||||||
height: 100,
|
|
||||||
channels: 3,
|
|
||||||
background: { r, g, b },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.jpeg({ quality: 90 })
|
|
||||||
.toBuffer();
|
|
||||||
|
|
||||||
writeFileSync(imagePath, jpegData);
|
|
||||||
|
|
||||||
// Build exiftool command to add EXIF data
|
|
||||||
const exifArgs = Object.entries(image.exifTags)
|
|
||||||
.map(([tag, value]) => `-${tag}="${value}"`)
|
|
||||||
.join(' ');
|
|
||||||
|
|
||||||
const command = `exiftool ${exifArgs} -overwrite_original "${imagePath}"`;
|
|
||||||
|
|
||||||
console.log(`Creating ${image.filename}: ${image.description}`);
|
|
||||||
execSync(command, { stdio: 'pipe' });
|
|
||||||
|
|
||||||
// Verify the tags were written
|
|
||||||
const verifyCommand = `exiftool -json "${imagePath}"`;
|
|
||||||
const result = execSync(verifyCommand, { encoding: 'utf8' });
|
|
||||||
const metadata = JSON.parse(result)[0];
|
|
||||||
|
|
||||||
console.log(` ✓ Created with ${Object.keys(image.exifTags).length} EXIF tags`);
|
|
||||||
|
|
||||||
// Log first date tag found for verification
|
|
||||||
const firstDateTag = Object.keys(image.exifTags).find(
|
|
||||||
(tag) => tag.includes('Date') || tag.includes('Time') || tag.includes('Created'),
|
|
||||||
);
|
|
||||||
if (firstDateTag && metadata[firstDateTag]) {
|
|
||||||
console.log(` ✓ Verified ${firstDateTag}: ${metadata[firstDateTag]}`);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Failed to create ${image.filename}:`, (error as Error).message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('\nTest image generation complete!');
|
|
||||||
console.log('Files created in:', targetDir);
|
|
||||||
console.log('\nTo test these images:');
|
|
||||||
console.log(`cd ${targetDir} && exiftool -time:all -gps:all *.jpg`);
|
|
||||||
};
|
|
||||||
|
|
||||||
export { generateTestImages };
|
|
||||||
|
|
||||||
// Run the generator if this file is executed directly
|
|
||||||
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
||||||
generateTestImages().catch(console.error);
|
|
||||||
}
|
|
||||||
@@ -119,5 +119,6 @@ export const deviceDto = {
|
|||||||
isPendingSyncReset: false,
|
isPendingSyncReset: false,
|
||||||
deviceOS: '',
|
deviceOS: '',
|
||||||
deviceType: '',
|
deviceType: '',
|
||||||
|
appVersion: null,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {
|
import {
|
||||||
AllJobStatusResponseDto,
|
|
||||||
AssetMediaCreateDto,
|
AssetMediaCreateDto,
|
||||||
AssetMediaResponseDto,
|
AssetMediaResponseDto,
|
||||||
AssetResponseDto,
|
AssetResponseDto,
|
||||||
@@ -7,11 +6,12 @@ import {
|
|||||||
CheckExistingAssetsDto,
|
CheckExistingAssetsDto,
|
||||||
CreateAlbumDto,
|
CreateAlbumDto,
|
||||||
CreateLibraryDto,
|
CreateLibraryDto,
|
||||||
JobCommandDto,
|
|
||||||
JobName,
|
|
||||||
MetadataSearchDto,
|
MetadataSearchDto,
|
||||||
Permission,
|
Permission,
|
||||||
PersonCreateDto,
|
PersonCreateDto,
|
||||||
|
QueueCommandDto,
|
||||||
|
QueueName,
|
||||||
|
QueuesResponseDto,
|
||||||
SharedLinkCreateDto,
|
SharedLinkCreateDto,
|
||||||
UpdateLibraryDto,
|
UpdateLibraryDto,
|
||||||
UserAdminCreateDto,
|
UserAdminCreateDto,
|
||||||
@@ -27,14 +27,14 @@ import {
|
|||||||
createStack,
|
createStack,
|
||||||
createUserAdmin,
|
createUserAdmin,
|
||||||
deleteAssets,
|
deleteAssets,
|
||||||
getAllJobsStatus,
|
|
||||||
getAssetInfo,
|
getAssetInfo,
|
||||||
getConfig,
|
getConfig,
|
||||||
getConfigDefaults,
|
getConfigDefaults,
|
||||||
|
getQueuesLegacy,
|
||||||
login,
|
login,
|
||||||
|
runQueueCommandLegacy,
|
||||||
scanLibrary,
|
scanLibrary,
|
||||||
searchAssets,
|
searchAssets,
|
||||||
sendJobCommand,
|
|
||||||
setBaseUrl,
|
setBaseUrl,
|
||||||
signUpAdmin,
|
signUpAdmin,
|
||||||
tagAssets,
|
tagAssets,
|
||||||
@@ -477,8 +477,8 @@ export const utils = {
|
|||||||
tagAssets: (accessToken: string, tagId: string, assetIds: string[]) =>
|
tagAssets: (accessToken: string, tagId: string, assetIds: string[]) =>
|
||||||
tagAssets({ id: tagId, bulkIdsDto: { ids: assetIds } }, { headers: asBearerAuth(accessToken) }),
|
tagAssets({ id: tagId, bulkIdsDto: { ids: assetIds } }, { headers: asBearerAuth(accessToken) }),
|
||||||
|
|
||||||
jobCommand: async (accessToken: string, jobName: JobName, jobCommandDto: JobCommandDto) =>
|
queueCommand: async (accessToken: string, name: QueueName, queueCommandDto: QueueCommandDto) =>
|
||||||
sendJobCommand({ id: jobName, jobCommandDto }, { headers: asBearerAuth(accessToken) }),
|
runQueueCommandLegacy({ name, queueCommandDto }, { headers: asBearerAuth(accessToken) }),
|
||||||
|
|
||||||
setAuthCookies: async (context: BrowserContext, accessToken: string, domain = '127.0.0.1') =>
|
setAuthCookies: async (context: BrowserContext, accessToken: string, domain = '127.0.0.1') =>
|
||||||
await context.addCookies([
|
await context.addCookies([
|
||||||
@@ -524,13 +524,13 @@ export const utils = {
|
|||||||
await updateConfig({ systemConfigDto: defaultConfig }, { headers: asBearerAuth(accessToken) });
|
await updateConfig({ systemConfigDto: defaultConfig }, { headers: asBearerAuth(accessToken) });
|
||||||
},
|
},
|
||||||
|
|
||||||
isQueueEmpty: async (accessToken: string, queue: keyof AllJobStatusResponseDto) => {
|
isQueueEmpty: async (accessToken: string, queue: keyof QueuesResponseDto) => {
|
||||||
const queues = await getAllJobsStatus({ headers: asBearerAuth(accessToken) });
|
const queues = await getQueuesLegacy({ headers: asBearerAuth(accessToken) });
|
||||||
const jobCounts = queues[queue].jobCounts;
|
const jobCounts = queues[queue].jobCounts;
|
||||||
return !jobCounts.active && !jobCounts.waiting;
|
return !jobCounts.active && !jobCounts.waiting;
|
||||||
},
|
},
|
||||||
|
|
||||||
waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => {
|
waitForQueueFinish: (accessToken: string, queue: keyof QueuesResponseDto, ms?: number) => {
|
||||||
// eslint-disable-next-line no-async-promise-executor
|
// eslint-disable-next-line no-async-promise-executor
|
||||||
return new Promise<void>(async (resolve, reject) => {
|
return new Promise<void>(async (resolve, reject) => {
|
||||||
const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000);
|
const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000);
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ test.describe('Asset Viewer Navbar', () => {
|
|||||||
await page.goto(`/photos/${asset.id}`);
|
await page.goto(`/photos/${asset.id}`);
|
||||||
await page.waitForSelector('#immich-asset-viewer');
|
await page.waitForSelector('#immich-asset-viewer');
|
||||||
await page.keyboard.press('f');
|
await page.keyboard.press('f');
|
||||||
await expect(page.locator('#notification-list').getByTestId('message')).toHaveText('Added to favorites');
|
await expect(page.getByText('Added to favorites')).toBeVisible();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -51,6 +51,6 @@ test.describe('Slideshow', () => {
|
|||||||
|
|
||||||
await expect(page.getByRole('button', { name: 'Exit Slideshow' })).toBeVisible();
|
await expect(page.getByRole('button', { name: 'Exit Slideshow' })).toBeVisible();
|
||||||
await page.keyboard.press('f');
|
await page.keyboard.press('f');
|
||||||
await expect(page.locator('#notification-list')).not.toBeVisible();
|
await expect(page.getByText('Added to favorites')).not.toBeVisible();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ test.describe('Registration', () => {
|
|||||||
await page.getByRole('button', { name: 'User Privacy' }).click();
|
await page.getByRole('button', { name: 'User Privacy' }).click();
|
||||||
await page.getByRole('button', { name: 'Storage Template' }).click();
|
await page.getByRole('button', { name: 'Storage Template' }).click();
|
||||||
await page.getByRole('button', { name: 'Backups' }).click();
|
await page.getByRole('button', { name: 'Backups' }).click();
|
||||||
|
await page.getByRole('button', { name: 'Mobile App' }).click();
|
||||||
await page.getByRole('button', { name: 'Done' }).click();
|
await page.getByRole('button', { name: 'Done' }).click();
|
||||||
|
|
||||||
// success
|
// success
|
||||||
@@ -85,6 +86,7 @@ test.describe('Registration', () => {
|
|||||||
await page.getByRole('button', { name: 'Theme' }).click();
|
await page.getByRole('button', { name: 'Theme' }).click();
|
||||||
await page.getByRole('button', { name: 'Language' }).click();
|
await page.getByRole('button', { name: 'Language' }).click();
|
||||||
await page.getByRole('button', { name: 'User Privacy' }).click();
|
await page.getByRole('button', { name: 'User Privacy' }).click();
|
||||||
|
await page.getByRole('button', { name: 'Mobile App' }).click();
|
||||||
await page.getByRole('button', { name: 'Done' }).click();
|
await page.getByRole('button', { name: 'Done' }).click();
|
||||||
|
|
||||||
// success
|
// success
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ test.describe('User Administration', () => {
|
|||||||
|
|
||||||
await page.goto(`/admin/users/${user.userId}`);
|
await page.goto(`/admin/users/${user.userId}`);
|
||||||
|
|
||||||
await page.getByRole('button', { name: 'Edit user' }).click();
|
await page.getByRole('button', { name: 'Edit' }).click();
|
||||||
await expect(page.getByLabel('Admin User')).not.toBeChecked();
|
await expect(page.getByLabel('Admin User')).not.toBeChecked();
|
||||||
await page.getByText('Admin User').click();
|
await page.getByText('Admin User').click();
|
||||||
await expect(page.getByLabel('Admin User')).toBeChecked();
|
await expect(page.getByLabel('Admin User')).toBeChecked();
|
||||||
@@ -77,7 +77,7 @@ test.describe('User Administration', () => {
|
|||||||
|
|
||||||
await page.goto(`/admin/users/${user.userId}`);
|
await page.goto(`/admin/users/${user.userId}`);
|
||||||
|
|
||||||
await page.getByRole('button', { name: 'Edit user' }).click();
|
await page.getByRole('button', { name: 'Edit' }).click();
|
||||||
await expect(page.getByLabel('Admin User')).toBeChecked();
|
await expect(page.getByLabel('Admin User')).toBeChecked();
|
||||||
await page.getByText('Admin User').click();
|
await page.getByText('Admin User').click();
|
||||||
await expect(page.getByLabel('Admin User')).not.toBeChecked();
|
await expect(page.getByLabel('Admin User')).not.toBeChecked();
|
||||||
|
|||||||
Submodule e2e/test-assets updated: 37f60ea537...163c251744
@@ -170,7 +170,6 @@
|
|||||||
"duplicates": "Duplikate",
|
"duplicates": "Duplikate",
|
||||||
"duration": "Duur",
|
"duration": "Duur",
|
||||||
"edit": "Wysig",
|
"edit": "Wysig",
|
||||||
"edited": "Gewysigd",
|
|
||||||
"search_by_description": "Soek by beskrywing",
|
"search_by_description": "Soek by beskrywing",
|
||||||
"search_by_description_example": "Stapdag in Sapa",
|
"search_by_description_example": "Stapdag in Sapa",
|
||||||
"version": "Weergawe",
|
"version": "Weergawe",
|
||||||
|
|||||||
20
i18n/ar.json
20
i18n/ar.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "إضافة الى البومات",
|
"add_to_albums": "إضافة الى البومات",
|
||||||
"add_to_albums_count": "إضافه إلى البومات ({count})",
|
"add_to_albums_count": "إضافه إلى البومات ({count})",
|
||||||
"add_to_shared_album": "إضافة إلى ألبوم مشارك",
|
"add_to_shared_album": "إضافة إلى ألبوم مشارك",
|
||||||
|
"add_upload_to_stack": "اضف رفع الى حزمة",
|
||||||
"add_url": "إضافة رابط",
|
"add_url": "إضافة رابط",
|
||||||
"added_to_archive": "أُضيفت للأرشيف",
|
"added_to_archive": "أُضيفت للأرشيف",
|
||||||
"added_to_favorites": "أُضيفت للمفضلات",
|
"added_to_favorites": "أُضيفت للمفضلات",
|
||||||
@@ -118,12 +119,12 @@
|
|||||||
"library_settings": "المكتبة الخارجية",
|
"library_settings": "المكتبة الخارجية",
|
||||||
"library_settings_description": "إدارة إعدادات المكتبة الخارجية",
|
"library_settings_description": "إدارة إعدادات المكتبة الخارجية",
|
||||||
"library_tasks_description": "مسح المكتبات الخارجية للعثور على الأصول الجديدة و/أو المتغيرة",
|
"library_tasks_description": "مسح المكتبات الخارجية للعثور على الأصول الجديدة و/أو المتغيرة",
|
||||||
"library_watching_enable_description": "راقب المكتبات الخارجية لتغييرات الملفات",
|
"library_watching_enable_description": "مراقبة المكتبات الخارجية لاكتشاف تغييرات الملفات",
|
||||||
"library_watching_settings": "مراقبة المكتبات (تجريبي)",
|
"library_watching_settings": "مراقبة المكتبات [تجريبي]",
|
||||||
"library_watching_settings_description": "راقب تلقائيًا التغييرات في الملفات",
|
"library_watching_settings_description": "راقب تلقائيًا التغييرات في الملفات",
|
||||||
"logging_enable_description": "تفعيل تسجيل الأحداث",
|
"logging_enable_description": "تفعيل تسجيل الأحداث",
|
||||||
"logging_level_description": "عند التفعيل، أي مستوى تسجيل سيستخدم.",
|
"logging_level_description": "عند التفعيل، أي مستوى تسجيل سيستخدم.",
|
||||||
"logging_settings": "تسجيل الاحداث",
|
"logging_settings": "السجلات",
|
||||||
"machine_learning_availability_checks": "تحقق من التوفر",
|
"machine_learning_availability_checks": "تحقق من التوفر",
|
||||||
"machine_learning_availability_checks_description": "تحديد خوادم التعلم الآلي المتاحة تلقائيًا وإعطاءها الأولوية",
|
"machine_learning_availability_checks_description": "تحديد خوادم التعلم الآلي المتاحة تلقائيًا وإعطاءها الأولوية",
|
||||||
"machine_learning_availability_checks_enabled": "تفعيل عمليات فحص التوفر",
|
"machine_learning_availability_checks_enabled": "تفعيل عمليات فحص التوفر",
|
||||||
@@ -205,7 +206,7 @@
|
|||||||
"note_cannot_be_changed_later": "ملاحظة: لا يمكن تغيير هذا لاحقًا!",
|
"note_cannot_be_changed_later": "ملاحظة: لا يمكن تغيير هذا لاحقًا!",
|
||||||
"notification_email_from_address": "عنوان المرسل",
|
"notification_email_from_address": "عنوان المرسل",
|
||||||
"notification_email_from_address_description": "عنوان البريد الإلكتروني للمرسل، على سبيل المثال: \"Immich Photo Server noreply@example.com\". تاكد من استخدام عنوان بريد الكتروني يسمح لك بارسال البريد الالكتروني منه.",
|
"notification_email_from_address_description": "عنوان البريد الإلكتروني للمرسل، على سبيل المثال: \"Immich Photo Server noreply@example.com\". تاكد من استخدام عنوان بريد الكتروني يسمح لك بارسال البريد الالكتروني منه.",
|
||||||
"notification_email_host_description": "مضيف خادم البريد الإلكتروني (مثلًا: smtp.immich.app)",
|
"notification_email_host_description": "عنوان خادم البريد الإلكتروني (مثل smtp.immich.app)",
|
||||||
"notification_email_ignore_certificate_errors": "تجاهل أخطاء الشهادة",
|
"notification_email_ignore_certificate_errors": "تجاهل أخطاء الشهادة",
|
||||||
"notification_email_ignore_certificate_errors_description": "تجاهل أخطاء التحقق من صحة شهادة TLS (غير مستحسن)",
|
"notification_email_ignore_certificate_errors_description": "تجاهل أخطاء التحقق من صحة شهادة TLS (غير مستحسن)",
|
||||||
"notification_email_password_description": "كلمة المرور المستخدمة للمصادقة مع خادم البريد الإلكتروني",
|
"notification_email_password_description": "كلمة المرور المستخدمة للمصادقة مع خادم البريد الإلكتروني",
|
||||||
@@ -332,7 +333,7 @@
|
|||||||
"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 هذا القيمة تلقائيًا.",
|
||||||
"transcoding_max_bitrate": "الحد الأقصى لمعدل البت",
|
"transcoding_max_bitrate": "الحد الأقصى لمعدل البت",
|
||||||
"transcoding_max_bitrate_description": "يمكن أن يؤدي تعيين الحد الأقصى لمعدل البت إلى جعل أحجام الملفات أكثر قابلية للتنبؤ بها بتكلفة بسيطة بالنسبة للجودة. عند دقة 720 بكسل، تكون القيم النموذجية 2600 كيلو بت لـ VP9 أو HEVC، أو 4500 كيلو بت لـ H.264. معطل إذا تم ضبطه على 0.",
|
"transcoding_max_bitrate_description": "يتيح تعيين معدل البت الأقصى التحكم في حجم الملف مع تأثير طفيف على الجودة.عند دقة 720p، القيم المقترحة هي 2600 كيلوبت/ثانية لـ VP9 أو HEVC، و4500 كيلوبت/ثانية لـ H.264.يتم تعطيل الإعداد عند القيمة 0. إذا لم تُحدَّد وحدة، يُفترض k (كيلوبت/ثانية)؛ لذا فإن 5000، 5000k، و5M متكافئة.",
|
||||||
"transcoding_max_keyframe_interval": "الحد الأقصى للفاصل الزمني للإطار الرئيسي",
|
"transcoding_max_keyframe_interval": "الحد الأقصى للفاصل الزمني للإطار الرئيسي",
|
||||||
"transcoding_max_keyframe_interval_description": "يضبط الحد الأقصى لمسافة الإطار بين الإطارات الرئيسية. تؤدي القيم المنخفضة إلى زيادة سوء كفاءة الضغط، ولكنها تعمل على تحسين أوقات البحث وقد تعمل على تحسين الجودة في المشاهد ذات الحركة السريعة. 0 يضبط هذه القيمة تلقائيًا.",
|
"transcoding_max_keyframe_interval_description": "يضبط الحد الأقصى لمسافة الإطار بين الإطارات الرئيسية. تؤدي القيم المنخفضة إلى زيادة سوء كفاءة الضغط، ولكنها تعمل على تحسين أوقات البحث وقد تعمل على تحسين الجودة في المشاهد ذات الحركة السريعة. 0 يضبط هذه القيمة تلقائيًا.",
|
||||||
"transcoding_optimal_description": "مقاطع الفيديو ذات الدقة الأعلى من الدقة المستهدفة أو بتنسيق غير مقبول",
|
"transcoding_optimal_description": "مقاطع الفيديو ذات الدقة الأعلى من الدقة المستهدفة أو بتنسيق غير مقبول",
|
||||||
@@ -350,7 +351,7 @@
|
|||||||
"transcoding_target_resolution": "القرار المستهدف",
|
"transcoding_target_resolution": "القرار المستهدف",
|
||||||
"transcoding_target_resolution_description": "يمكن أن تحافظ الدقة الأعلى على المزيد من التفاصيل ولكنها تستغرق وقتًا أطول للتشفير، ولها أحجام ملفات أكبر، ويمكن أن تقلل من استجابة التطبيق.",
|
"transcoding_target_resolution_description": "يمكن أن تحافظ الدقة الأعلى على المزيد من التفاصيل ولكنها تستغرق وقتًا أطول للتشفير، ولها أحجام ملفات أكبر، ويمكن أن تقلل من استجابة التطبيق.",
|
||||||
"transcoding_temporal_aq": "التكميم التكيفي الزمني",
|
"transcoding_temporal_aq": "التكميم التكيفي الزمني",
|
||||||
"transcoding_temporal_aq_description": "ينطبق فقط على NVENC. يزيد من جودة المشاهد عالية التفاصيل ومنخفضة الحركة. قد لا يكون متوافقًا مع الأجهزة القديمة.",
|
"transcoding_temporal_aq_description": "ينطبق فقط على NVENC. تعمل \"الكمّية التكيفية الزمنية\" على تحسين جودة المشاهد ذات التفاصيل الدقيقة والحركة البطيئة. قد لا يكون هذا الخيار متوافقًا مع الأجهزة القديمة.",
|
||||||
"transcoding_threads": "الخيوط",
|
"transcoding_threads": "الخيوط",
|
||||||
"transcoding_threads_description": "تؤدي القيم الأعلى إلى تشفير أسرع، ولكنها تترك مساحة أقل للخادم لمعالجة المهام الأخرى أثناء النشاط. يجب ألا تزيد هذه القيمة عن عدد مراكز وحدة المعالجة المركزية. يزيد من الإستغلال إذا تم ضبطه على 0.",
|
"transcoding_threads_description": "تؤدي القيم الأعلى إلى تشفير أسرع، ولكنها تترك مساحة أقل للخادم لمعالجة المهام الأخرى أثناء النشاط. يجب ألا تزيد هذه القيمة عن عدد مراكز وحدة المعالجة المركزية. يزيد من الإستغلال إذا تم ضبطه على 0.",
|
||||||
"transcoding_tone_mapping": "رسم الخرائط النغمية",
|
"transcoding_tone_mapping": "رسم الخرائط النغمية",
|
||||||
@@ -700,7 +701,6 @@
|
|||||||
"comments_and_likes": "التعليقات والإعجابات",
|
"comments_and_likes": "التعليقات والإعجابات",
|
||||||
"comments_are_disabled": "التعليقات معطلة",
|
"comments_are_disabled": "التعليقات معطلة",
|
||||||
"common_create_new_album": "إنشاء ألبوم جديد",
|
"common_create_new_album": "إنشاء ألبوم جديد",
|
||||||
"common_server_error": "يرجى التحقق من اتصال الشبكة الخاص بك ، والتأكد من أن الجهاز قابل للوصول وإصدارات التطبيق/الجهاز متوافقة.",
|
|
||||||
"completed": "اكتمل",
|
"completed": "اكتمل",
|
||||||
"confirm": "تأكيد",
|
"confirm": "تأكيد",
|
||||||
"confirm_admin_password": "تأكيد كلمة مرور المسؤول",
|
"confirm_admin_password": "تأكيد كلمة مرور المسؤول",
|
||||||
@@ -882,7 +882,6 @@
|
|||||||
"edit_tag": "تعديل العلامة",
|
"edit_tag": "تعديل العلامة",
|
||||||
"edit_title": "تعديل العنوان",
|
"edit_title": "تعديل العنوان",
|
||||||
"edit_user": "تعديل المستخدم",
|
"edit_user": "تعديل المستخدم",
|
||||||
"edited": "تم التعديل",
|
|
||||||
"editor": "محرر",
|
"editor": "محرر",
|
||||||
"editor_close_without_save_prompt": "لن يتم حفظ التغييرات",
|
"editor_close_without_save_prompt": "لن يتم حفظ التغييرات",
|
||||||
"editor_close_without_save_title": "إغلاق المحرر؟",
|
"editor_close_without_save_title": "إغلاق المحرر؟",
|
||||||
@@ -1119,7 +1118,6 @@
|
|||||||
"header_settings_field_validator_msg": "القيمة لا يمكن ان تكون فارغة",
|
"header_settings_field_validator_msg": "القيمة لا يمكن ان تكون فارغة",
|
||||||
"header_settings_header_name_input": "اسم الرأس",
|
"header_settings_header_name_input": "اسم الرأس",
|
||||||
"header_settings_header_value_input": "قيمة الرأس",
|
"header_settings_header_value_input": "قيمة الرأس",
|
||||||
"headers_settings_tile_subtitle": "قم بتعريف رؤوس الوكيل التي يجب أن يرسلها التطبيق مع كل طلب شبكة",
|
|
||||||
"headers_settings_tile_title": "رؤوس وكيل مخصصة",
|
"headers_settings_tile_title": "رؤوس وكيل مخصصة",
|
||||||
"hi_user": "مرحبا {name} ({email})",
|
"hi_user": "مرحبا {name} ({email})",
|
||||||
"hide_all_people": "إخفاء جميع الأشخاص",
|
"hide_all_people": "إخفاء جميع الأشخاص",
|
||||||
@@ -1542,13 +1540,9 @@
|
|||||||
"privacy": "الخصوصية",
|
"privacy": "الخصوصية",
|
||||||
"profile": "حساب تعريفي",
|
"profile": "حساب تعريفي",
|
||||||
"profile_drawer_app_logs": "السجلات",
|
"profile_drawer_app_logs": "السجلات",
|
||||||
"profile_drawer_client_out_of_date_major": "تطبيق الهاتف المحمول قديم.يرجى التحديث إلى أحدث إصدار رئيسي.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "تطبيق الهاتف المحمول قديم.يرجى التحديث إلى أحدث إصدار صغير.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "العميل والخادم محدثان",
|
"profile_drawer_client_server_up_to_date": "العميل والخادم محدثان",
|
||||||
"profile_drawer_github": "Github",
|
"profile_drawer_github": "Github",
|
||||||
"profile_drawer_readonly_mode": "تم تفعيل وضع القراءة فقط. اضغط مطولا على رمز صورة المستخدم للخروج.",
|
"profile_drawer_readonly_mode": "تم تفعيل وضع القراءة فقط. اضغط مطولا على رمز صورة المستخدم للخروج.",
|
||||||
"profile_drawer_server_out_of_date_major": "الخادم قديم.يرجى التحديث إلى أحدث إصدار رئيسي.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "الخادم قديم.يرجى التحديث إلى أحدث إصدار صغير.",
|
|
||||||
"profile_image_of_user": "صورة الملف الشخصي لـ {user}",
|
"profile_image_of_user": "صورة الملف الشخصي لـ {user}",
|
||||||
"profile_picture_set": "مجموعة الصور الشخصية.",
|
"profile_picture_set": "مجموعة الصور الشخصية.",
|
||||||
"public_album": "الألبوم العام",
|
"public_album": "الألبوم العام",
|
||||||
|
|||||||
11
i18n/be.json
11
i18n/be.json
@@ -51,6 +51,9 @@
|
|||||||
"backup_keep_last_amount": "Колькасць папярэдніх рэзервовых копій для захавання",
|
"backup_keep_last_amount": "Колькасць папярэдніх рэзервовых копій для захавання",
|
||||||
"backup_onboarding_1_description": "зняшняя копія ў воблаку або ў іншым фізічным месцы.",
|
"backup_onboarding_1_description": "зняшняя копія ў воблаку або ў іншым фізічным месцы.",
|
||||||
"backup_onboarding_2_description": "лакальныя копіі на іншых прыладах. Гэта ўключае ў сябе асноўныя файлы і лакальную рэзервовую копію гэтых файлаў.",
|
"backup_onboarding_2_description": "лакальныя копіі на іншых прыладах. Гэта ўключае ў сябе асноўныя файлы і лакальную рэзервовую копію гэтых файлаў.",
|
||||||
|
"backup_onboarding_3_description": "поўная колькасць копій вашых данных, у тым ліку зыходных файлаў. Гэта ўключае 1 пазаштатную копію і 2 лакальныя копіі.",
|
||||||
|
"backup_onboarding_description": "<backblaze-link> стратэгія рэзервавання 3-2-1 </backblaze-link> рэкамендавана для аховы вашых данных. Вы павінны захоўваць копіі вашых загружаных фота / відэа гэтак жа добра, як базу данных Immich для вычарпальна поўнага рэзервовага капіявання.",
|
||||||
|
"backup_onboarding_footer": "Каб атрымаць дадатковую інфармацыю пра рэзервовае капіраванне Immich, звярніцеся да <link>дакументацыі</link>.",
|
||||||
"backup_onboarding_parts_title": "Рэзервовая копія «3-2-1» уключае ў сябе:",
|
"backup_onboarding_parts_title": "Рэзервовая копія «3-2-1» уключае ў сябе:",
|
||||||
"backup_onboarding_title": "Рэзервовыя копіі",
|
"backup_onboarding_title": "Рэзервовыя копіі",
|
||||||
"backup_settings": "Налады рэзервовага капіявання",
|
"backup_settings": "Налады рэзервовага капіявання",
|
||||||
@@ -93,6 +96,8 @@
|
|||||||
"image_resolution": "Раздзяляльнасць",
|
"image_resolution": "Раздзяляльнасць",
|
||||||
"image_settings": "Налады відарыса",
|
"image_settings": "Налады відарыса",
|
||||||
"image_settings_description": "Кіруйце якасцю і раздзяляльнасцю сгенерыраваных відарысаў",
|
"image_settings_description": "Кіруйце якасцю і раздзяляльнасцю сгенерыраваных відарысаў",
|
||||||
|
"image_thumbnail_description": "Маленькая мініяцюра з выдаленымі метададзенымі, якая выкарыстоўваецца пры праглядзе груп фатаграфій, такіх як асноўная хроніка",
|
||||||
|
"image_thumbnail_quality_description": "Якасць мініяцюр ад 1 да 100. Чым вышэй якасць, тым лепш, але пры гэтым ствараюцца файлы большага памеру і можа знізіцца хуткасць водгуку прыкладання.",
|
||||||
"image_thumbnail_title": "Налады мініяцюр",
|
"image_thumbnail_title": "Налады мініяцюр",
|
||||||
"job_concurrency": "{job} канкурэнтнасць",
|
"job_concurrency": "{job} канкурэнтнасць",
|
||||||
"job_created": "Заданне створана",
|
"job_created": "Заданне створана",
|
||||||
@@ -100,6 +105,8 @@
|
|||||||
"job_settings": "Налады заданняў",
|
"job_settings": "Налады заданняў",
|
||||||
"job_settings_description": "Кіраваць наладамі адначасовага (паралельнага) выканання задання",
|
"job_settings_description": "Кіраваць наладамі адначасовага (паралельнага) выканання задання",
|
||||||
"job_status": "Становішча задання",
|
"job_status": "Становішча задання",
|
||||||
|
"jobs_delayed": "{jobCount, plural, other {# адкладзена}}",
|
||||||
|
"jobs_failed": "{jobCount, plural, other {# не выканалася}}",
|
||||||
"library_created": "Створана бібліятэка: {library}",
|
"library_created": "Створана бібліятэка: {library}",
|
||||||
"library_deleted": "Бібліятэка выдалена",
|
"library_deleted": "Бібліятэка выдалена",
|
||||||
"library_scanning": "Сканаванне па раскладзе",
|
"library_scanning": "Сканаванне па раскладзе",
|
||||||
@@ -156,6 +163,9 @@
|
|||||||
"trash_settings": "Налады сметніцы",
|
"trash_settings": "Налады сметніцы",
|
||||||
"trash_settings_description": "Кіраванне наладамі сметніцы",
|
"trash_settings_description": "Кіраванне наладамі сметніцы",
|
||||||
"user_cleanup_job": "Ачыстка карыстальніка",
|
"user_cleanup_job": "Ачыстка карыстальніка",
|
||||||
|
"user_delete_delay": "Уліковы запіс <b>{user}</b> і актывы будуць запланаваны для канчатковага выдалення праз {delay, plural, one {# дзень} few {# дні} many {# дзён} other {# дзён}}.",
|
||||||
|
"user_delete_delay_settings_description": "Колькасць дзён пасля выдалення, па заканчэнні якіх уліковы запіс карыстальніка і яго актывы будуць выдаленыя незваротна. Заданне на выдаленне карыстальніка запускаецца апоўначы для праверкі гатоўнасці карыстальнікаў да выдалення. Змены ў гэтым параметры будуць улічаныя пры наступным выкананні.",
|
||||||
|
"user_delete_immediately": "Уліковы запіс <b>{user}</b> і актывы будуць <b>неадкладна</b> змешчаны ў чаргу на канчатковае выдаленне.",
|
||||||
"user_management": "Кіраванне карыстальнікамі",
|
"user_management": "Кіраванне карыстальнікамі",
|
||||||
"user_password_has_been_reset": "Пароль карыстальніка быў скінуты:",
|
"user_password_has_been_reset": "Пароль карыстальніка быў скінуты:",
|
||||||
"user_password_reset_description": "Задайце карыстальніку часовы пароль і паведаміце яму, што пры наступным уваходзе ў сістэму яму трэба будзе змяніць пароль.",
|
"user_password_reset_description": "Задайце карыстальніку часовы пароль і паведаміце яму, што пры наступным уваходзе ў сістэму яму трэба будзе змяніць пароль.",
|
||||||
@@ -319,7 +329,6 @@
|
|||||||
"edit_tag": "Рэдагаваць тэг",
|
"edit_tag": "Рэдагаваць тэг",
|
||||||
"edit_title": "Рэдагаваць загаловак",
|
"edit_title": "Рэдагаваць загаловак",
|
||||||
"edit_user": "Рэдагаваць карыстальніка",
|
"edit_user": "Рэдагаваць карыстальніка",
|
||||||
"edited": "Адрэдагавана",
|
|
||||||
"editor": "Рэдактар",
|
"editor": "Рэдактар",
|
||||||
"editor_close_without_save_prompt": "Змены не будуць захаваны",
|
"editor_close_without_save_prompt": "Змены не будуць захаваны",
|
||||||
"editor_close_without_save_title": "Закрыць рэдактар?",
|
"editor_close_without_save_title": "Закрыць рэдактар?",
|
||||||
|
|||||||
48
i18n/bg.json
48
i18n/bg.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Добавяне в албуми",
|
"add_to_albums": "Добавяне в албуми",
|
||||||
"add_to_albums_count": "Добавяне в албуми ({count})",
|
"add_to_albums_count": "Добавяне в албуми ({count})",
|
||||||
"add_to_shared_album": "Добави към споделен албум",
|
"add_to_shared_album": "Добави към споделен албум",
|
||||||
|
"add_upload_to_stack": "Добави качените в група",
|
||||||
"add_url": "Добави URL",
|
"add_url": "Добави URL",
|
||||||
"added_to_archive": "Добавено към архива",
|
"added_to_archive": "Добавено към архива",
|
||||||
"added_to_favorites": "Добавени към любимите ви",
|
"added_to_favorites": "Добавени към любимите ви",
|
||||||
@@ -90,7 +91,7 @@
|
|||||||
"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_quality_description": "Качество на предварителния преглед от 1 до 100. По-високата стойност е по-добра, но води до по-големи файлове и може да намали бързодействието на приложението. Задаването на ниска стойност може да повлияе на качеството на машинното обучение.",
|
"image_preview_quality_description": "Качество на предварителния преглед от 1 до 100. По-високата стойност е по-добра, но води до по-големи файлове и може да намали бързодействието на приложението. Задаването на ниска стойност може да повлияе на качеството на машинното обучение.",
|
||||||
"image_preview_title": "Настройки на прегледа",
|
"image_preview_title": "Настройки на прегледа",
|
||||||
"image_quality": "Качество",
|
"image_quality": "Качество",
|
||||||
@@ -117,9 +118,9 @@
|
|||||||
"library_scanning_enable_description": "Включване на периодичното сканиране на библиотеката",
|
"library_scanning_enable_description": "Включване на периодичното сканиране на библиотеката",
|
||||||
"library_settings": "Външна библиотека",
|
"library_settings": "Външна библиотека",
|
||||||
"library_settings_description": "Управление на настройките за външна библиотека",
|
"library_settings_description": "Управление на настройките за външна библиотека",
|
||||||
"library_tasks_description": "Сканирайте външни библиотеки за нови и/или променени активи",
|
"library_tasks_description": "Сканирайте външни библиотеки за нови и/или променени елементи",
|
||||||
"library_watching_enable_description": "Наблюдаване за промяна на файловете във външната библиотека",
|
"library_watching_enable_description": "Наблюдаване за промяна на файловете във външната библиотека",
|
||||||
"library_watching_settings": "Наблюдаване на библиотеката (ЕКСПЕРИМЕНТАЛНО)",
|
"library_watching_settings": "Наблюдаване на библиотеката [ЕКСПЕРИМЕНТАЛНО]",
|
||||||
"library_watching_settings_description": "Автоматично наблюдавай за променени файлове",
|
"library_watching_settings_description": "Автоматично наблюдавай за променени файлове",
|
||||||
"logging_enable_description": "Включване на запис (логове)",
|
"logging_enable_description": "Включване на запис (логове)",
|
||||||
"logging_level_description": "Когато е включено, какво ниво на записване да се използва.",
|
"logging_level_description": "Когато е включено, какво ниво на записване да се използва.",
|
||||||
@@ -178,7 +179,7 @@
|
|||||||
"memory_cleanup_job": "Почистване на паметта",
|
"memory_cleanup_job": "Почистване на паметта",
|
||||||
"memory_generate_job": "Генериране на паметта",
|
"memory_generate_job": "Генериране на паметта",
|
||||||
"metadata_extraction_job": "Извличане на метаданни",
|
"metadata_extraction_job": "Извличане на метаданни",
|
||||||
"metadata_extraction_job_description": "Извличане на метаданни от всеки от елемент, като GPS локация, лица и резолюция на файловете",
|
"metadata_extraction_job_description": "Извличане на метаданни от всеки елемент, като GPS локация, лица и резолюция на файловете",
|
||||||
"metadata_faces_import_setting": "Включи импорт на лице",
|
"metadata_faces_import_setting": "Включи импорт на лице",
|
||||||
"metadata_faces_import_setting_description": "Импортирай лица от EXIF данни и помощни файлове",
|
"metadata_faces_import_setting_description": "Импортирай лица от EXIF данни и помощни файлове",
|
||||||
"metadata_settings": "Опции за метаданни",
|
"metadata_settings": "Опции за метаданни",
|
||||||
@@ -210,6 +211,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Игнорирай грешки свързани с валидация на TLS сертификат (не се препоръчва)",
|
"notification_email_ignore_certificate_errors_description": "Игнорирай грешки свързани с валидация на TLS сертификат (не се препоръчва)",
|
||||||
"notification_email_password_description": "Парола използвана за удостоверяване пред сървъра за електронна поща",
|
"notification_email_password_description": "Парола използвана за удостоверяване пред сървъра за електронна поща",
|
||||||
"notification_email_port_description": "Порт на сървъра за електронна поща (например 25, 465 или 587)",
|
"notification_email_port_description": "Порт на сървъра за електронна поща (например 25, 465 или 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Използвай SMTPS (SMTP по TLS)",
|
||||||
"notification_email_sent_test_email_button": "Изпрати тестов имейл и запази",
|
"notification_email_sent_test_email_button": "Изпрати тестов имейл и запази",
|
||||||
"notification_email_setting_description": "Настройки за изпращане на имейл известия",
|
"notification_email_setting_description": "Настройки за изпращане на имейл известия",
|
||||||
"notification_email_test_email": "Изпрати тестов имейл",
|
"notification_email_test_email": "Изпрати тестов имейл",
|
||||||
@@ -332,7 +335,7 @@
|
|||||||
"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 задава тази стойност автоматично.",
|
||||||
"transcoding_max_bitrate": "Максимален битрейт",
|
"transcoding_max_bitrate": "Максимален битрейт",
|
||||||
"transcoding_max_bitrate_description": "Задаването на максимален битрейт може да направи размерите на файловете по-предвидими при незначителни разлики за качеството. При 720p типичните стойности са 2600 kbit/s за VP9 или HEVC или 4500 kbit/s за H.264. Деактивирано, ако е зададено на 0.",
|
"transcoding_max_bitrate_description": "Задаването на максимален битрейт може да направи размерите на файловете по-предвидими при незначителни разлики за качеството. При 720p типичните стойности са 2600 kbit/s за VP9 или HEVC или 4500 kbit/s за H.264. Деактивирано, ако е зададено на 0. Когато не е зададена мерна единица, подразбира се k (kbit/s); така 5000, 5000k и 5M (Mbit/s) са еквивалентни.",
|
||||||
"transcoding_max_keyframe_interval": "Максимален интервал между ключовите кадри",
|
"transcoding_max_keyframe_interval": "Максимален интервал между ключовите кадри",
|
||||||
"transcoding_max_keyframe_interval_description": "Задава максималното разстояние между ключовите кадри. По-ниските стойности влошават ефективността на компресията, но подобряват времето за търсене и могат да подобрят качеството в сцени с бързо движение. 0 задава тази стойност автоматично.",
|
"transcoding_max_keyframe_interval_description": "Задава максималното разстояние между ключовите кадри. По-ниските стойности влошават ефективността на компресията, но подобряват времето за търсене и могат да подобрят качеството в сцени с бързо движение. 0 задава тази стойност автоматично.",
|
||||||
"transcoding_optimal_description": "Видеоклипове с по-висока от целевата разделителна способност или не в приетия формат",
|
"transcoding_optimal_description": "Видеоклипове с по-висока от целевата разделителна способност или не в приетия формат",
|
||||||
@@ -350,7 +353,7 @@
|
|||||||
"transcoding_target_resolution": "Целева резолюция",
|
"transcoding_target_resolution": "Целева резолюция",
|
||||||
"transcoding_target_resolution_description": "По-високите разделителни способности могат да представят повече детайли, но отнемат повече време за разкодиране, имат по-големи размери на файловете и могат да намалят отзивчивостта на приложението.",
|
"transcoding_target_resolution_description": "По-високите разделителни способности могат да представят повече детайли, но отнемат повече време за разкодиране, имат по-големи размери на файловете и могат да намалят отзивчивостта на приложението.",
|
||||||
"transcoding_temporal_aq": "Темпорален AQ",
|
"transcoding_temporal_aq": "Темпорален AQ",
|
||||||
"transcoding_temporal_aq_description": "Само за NVENC. Повишава качеството на сцени с висока детайлност и ниско ниво на движение. Може да не е съвместимо с по-стари устройства.",
|
"transcoding_temporal_aq_description": "Само за NVENC. Повишава качеството на сцени с висока детайлност и малко движение. Може да не е съвместимо с по-стари устройства.",
|
||||||
"transcoding_threads": "Нишки",
|
"transcoding_threads": "Нишки",
|
||||||
"transcoding_threads_description": "По-високите стойности водят до по-бързо разкодиране, но оставят по-малко място за сървъра да обработва други задачи, докато е активен. Тази стойност не трябва да надвишава броя на процесорните ядра. Увеличава максимално използването, ако е зададено на 0.",
|
"transcoding_threads_description": "По-високите стойности водят до по-бързо разкодиране, но оставят по-малко място за сървъра да обработва други задачи, докато е активен. Тази стойност не трябва да надвишава броя на процесорните ядра. Увеличава максимално използването, ако е зададено на 0.",
|
||||||
"transcoding_tone_mapping": "Тонално картографиране",
|
"transcoding_tone_mapping": "Тонално картографиране",
|
||||||
@@ -401,11 +404,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Някои устройства са твърде бавни за да генерират миниатюри. Активирай тази опция за да се зареждат винаги от сървъра.",
|
"advanced_settings_prefer_remote_subtitle": "Някои устройства са твърде бавни за да генерират миниатюри. Активирай тази опция за да се зареждат винаги от сървъра.",
|
||||||
"advanced_settings_prefer_remote_title": "Предпочитай изображенията на сървъра",
|
"advanced_settings_prefer_remote_title": "Предпочитай изображенията на сървъра",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Дефиниране на прокси хедъри, които Immich трябва да изпраща с всяка мрежова заявка",
|
"advanced_settings_proxy_headers_subtitle": "Дефиниране на прокси хедъри, които Immich трябва да изпраща с всяка мрежова заявка",
|
||||||
"advanced_settings_proxy_headers_title": "Прокси хедъри",
|
"advanced_settings_proxy_headers_title": "Прокси хедъри [ЕКСПЕРИМЕНТАЛНО]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Активира режима \"само за четене\", при който снимките могат да бъдат разглеждани, но неща като избор на няколко изображения, споделяне, изтриване са забранени. Активиране/деактивиране на режима само за четене става от картинката-аватар на потребителя от основния екран",
|
"advanced_settings_readonly_mode_subtitle": "Активира режима \"само за четене\", при който снимките могат да бъдат разглеждани, но неща като избор на няколко изображения, споделяне, изтриване са забранени. Активиране/деактивиране на режима само за четене става от картинката-аватар на потребителя от основния екран",
|
||||||
"advanced_settings_readonly_mode_title": "Режим само за четене",
|
"advanced_settings_readonly_mode_title": "Режим само за четене",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Пропуска проверката на SSL-сертификата на сървъра. Изисква се при самоподписани сертификати.",
|
"advanced_settings_self_signed_ssl_subtitle": "Пропуска проверката на SSL-сертификата на сървъра. Изисква се при самоподписани сертификати.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Разреши самоподписани SSL сертификати",
|
"advanced_settings_self_signed_ssl_title": "Разреши самоподписани SSL сертификати [ЕКСПЕРИМЕНТАЛНО]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Автоматично изтрии или възстанови обект на това устройство, когато действието е извършено през уеб-интерфейса",
|
"advanced_settings_sync_remote_deletions_subtitle": "Автоматично изтрии или възстанови обект на това устройство, когато действието е извършено през уеб-интерфейса",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Синхронизация на дистанционни изтривания [ЕКСПЕРИМЕНТАЛНО]",
|
"advanced_settings_sync_remote_deletions_title": "Синхронизация на дистанционни изтривания [ЕКСПЕРИМЕНТАЛНО]",
|
||||||
"advanced_settings_tile_subtitle": "Разширени потребителски настройки",
|
"advanced_settings_tile_subtitle": "Разширени потребителски настройки",
|
||||||
@@ -465,10 +468,14 @@
|
|||||||
"api_key_description": "Тази стойност ще бъде показана само веднъж. Моля, не забравяйте да го копирате, преди да затворите прозореца.",
|
"api_key_description": "Тази стойност ще бъде показана само веднъж. Моля, не забравяйте да го копирате, преди да затворите прозореца.",
|
||||||
"api_key_empty": "Името на вашия API ключ не трябва да е празно",
|
"api_key_empty": "Името на вашия API ключ не трябва да е празно",
|
||||||
"api_keys": "API ключове",
|
"api_keys": "API ключове",
|
||||||
|
"app_architecture_variant": "Вариант (Ахитектура)",
|
||||||
"app_bar_signout_dialog_content": "Наистина ли искате да излезете?",
|
"app_bar_signout_dialog_content": "Наистина ли искате да излезете?",
|
||||||
"app_bar_signout_dialog_ok": "Да",
|
"app_bar_signout_dialog_ok": "Да",
|
||||||
"app_bar_signout_dialog_title": "Излез от профила",
|
"app_bar_signout_dialog_title": "Излез от профила",
|
||||||
|
"app_download_links": "Линкове за сваляне на приложението",
|
||||||
"app_settings": "Настройки ма приложението",
|
"app_settings": "Настройки ма приложението",
|
||||||
|
"app_stores": "Магазини за приложения",
|
||||||
|
"app_update_available": "Налична е нова версия",
|
||||||
"appears_in": "Излиза в",
|
"appears_in": "Излиза в",
|
||||||
"apply_count": "Приложи ({count, number})",
|
"apply_count": "Приложи ({count, number})",
|
||||||
"archive": "Архив",
|
"archive": "Архив",
|
||||||
@@ -552,6 +559,7 @@
|
|||||||
"backup_albums_sync": "Синхронизиране на архивите",
|
"backup_albums_sync": "Синхронизиране на архивите",
|
||||||
"backup_all": "Всичко",
|
"backup_all": "Всичко",
|
||||||
"backup_background_service_backup_failed_message": "Неуспешно архивиране. Нов опит…",
|
"backup_background_service_backup_failed_message": "Неуспешно архивиране. Нов опит…",
|
||||||
|
"backup_background_service_complete_notification": "Завърши архивирането на обектите",
|
||||||
"backup_background_service_connection_failed_message": "Неуспешно свързване към сървъра. Нов опит…",
|
"backup_background_service_connection_failed_message": "Неуспешно свързване към сървъра. Нов опит…",
|
||||||
"backup_background_service_current_upload_notification": "Зареждам {filename}",
|
"backup_background_service_current_upload_notification": "Зареждам {filename}",
|
||||||
"backup_background_service_default_notification": "Търсене на нови обекти…",
|
"backup_background_service_default_notification": "Търсене на нови обекти…",
|
||||||
@@ -687,8 +695,8 @@
|
|||||||
"client_cert_import_success_msg": "Клиентския сертификат е импортиран",
|
"client_cert_import_success_msg": "Клиентския сертификат е импортиран",
|
||||||
"client_cert_invalid_msg": "Невалиден сертификат или грешна парола",
|
"client_cert_invalid_msg": "Невалиден сертификат или грешна парола",
|
||||||
"client_cert_remove_msg": "Клиентския сертификат е премахнат",
|
"client_cert_remove_msg": "Клиентския сертификат е премахнат",
|
||||||
"client_cert_subtitle": "Поддържа се само формат PKCS12 (.p12, .pfx). Импорт и премахване на сертификат може само преди вписване в системата",
|
"client_cert_subtitle": "Поддържа се само формат PKCS12 (.p12, .pfx). Импорт/премахване на сертификат може само преди вписване в системата",
|
||||||
"client_cert_title": "Клиентски SSL сертификат",
|
"client_cert_title": "Клиентски SSL сертификат [ЕКСПЕРИМЕНТАЛНО]",
|
||||||
"clockwise": "По часовниковата стрелка",
|
"clockwise": "По часовниковата стрелка",
|
||||||
"close": "Затвори",
|
"close": "Затвори",
|
||||||
"collapse": "Свиване",
|
"collapse": "Свиване",
|
||||||
@@ -700,7 +708,6 @@
|
|||||||
"comments_and_likes": "Коментари и харесвания",
|
"comments_and_likes": "Коментари и харесвания",
|
||||||
"comments_are_disabled": "Коментарите са деактивирани",
|
"comments_are_disabled": "Коментарите са деактивирани",
|
||||||
"common_create_new_album": "Създай нов албум",
|
"common_create_new_album": "Създай нов албум",
|
||||||
"common_server_error": "Моля, проверете мрежовата връзка, убедете се, че сървъра е достъпен и версиите на сървъра и приложението са съвместими.",
|
|
||||||
"completed": "Завършено",
|
"completed": "Завършено",
|
||||||
"confirm": "Потвърди",
|
"confirm": "Потвърди",
|
||||||
"confirm_admin_password": "Потвърждаване на паролата на администратора",
|
"confirm_admin_password": "Потвърждаване на паролата на администратора",
|
||||||
@@ -739,6 +746,7 @@
|
|||||||
"create": "Създай",
|
"create": "Създай",
|
||||||
"create_album": "Създай албум",
|
"create_album": "Създай албум",
|
||||||
"create_album_page_untitled": "Без заглавие",
|
"create_album_page_untitled": "Без заглавие",
|
||||||
|
"create_api_key": "Създайте API ключ",
|
||||||
"create_library": "Създай библиотека",
|
"create_library": "Създай библиотека",
|
||||||
"create_link": "Създай линк",
|
"create_link": "Създай линк",
|
||||||
"create_link_to_share": "Създаване на линк за споделяне",
|
"create_link_to_share": "Създаване на линк за споделяне",
|
||||||
@@ -882,7 +890,6 @@
|
|||||||
"edit_tag": "Редактирай таг",
|
"edit_tag": "Редактирай таг",
|
||||||
"edit_title": "Редактиране на заглавието",
|
"edit_title": "Редактиране на заглавието",
|
||||||
"edit_user": "Редактиране на потребител",
|
"edit_user": "Редактиране на потребител",
|
||||||
"edited": "Редактирано",
|
|
||||||
"editor": "Редактор",
|
"editor": "Редактор",
|
||||||
"editor_close_without_save_prompt": "Промените няма да бъдат запазени",
|
"editor_close_without_save_prompt": "Промените няма да бъдат запазени",
|
||||||
"editor_close_without_save_title": "Затваряне на редактора?",
|
"editor_close_without_save_title": "Затваряне на редактора?",
|
||||||
@@ -1038,6 +1045,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Неуспешно обновяване на описание",
|
"exif_bottom_sheet_description_error": "Неуспешно обновяване на описание",
|
||||||
"exif_bottom_sheet_details": "ПОДРОБНОСТИ",
|
"exif_bottom_sheet_details": "ПОДРОБНОСТИ",
|
||||||
"exif_bottom_sheet_location": "МЯСТО",
|
"exif_bottom_sheet_location": "МЯСТО",
|
||||||
|
"exif_bottom_sheet_no_description": "Няма описание",
|
||||||
"exif_bottom_sheet_people": "ХОРА",
|
"exif_bottom_sheet_people": "ХОРА",
|
||||||
"exif_bottom_sheet_person_add_person": "Добави име",
|
"exif_bottom_sheet_person_add_person": "Добави име",
|
||||||
"exit_slideshow": "Изход от слайдшоуто",
|
"exit_slideshow": "Изход от слайдшоуто",
|
||||||
@@ -1119,7 +1127,6 @@
|
|||||||
"header_settings_field_validator_msg": "Недопустимо е да няма стойност",
|
"header_settings_field_validator_msg": "Недопустимо е да няма стойност",
|
||||||
"header_settings_header_name_input": "Име на заглавието",
|
"header_settings_header_name_input": "Име на заглавието",
|
||||||
"header_settings_header_value_input": "Стойност на заглавието",
|
"header_settings_header_value_input": "Стойност на заглавието",
|
||||||
"headers_settings_tile_subtitle": "Дефиниране на прокси заглавия, които приложението трябва да изпраща с всяка мрежова заявка",
|
|
||||||
"headers_settings_tile_title": "Потребителски прокси заглавия",
|
"headers_settings_tile_title": "Потребителски прокси заглавия",
|
||||||
"hi_user": "Здравей, {name} {email}",
|
"hi_user": "Здравей, {name} {email}",
|
||||||
"hide_all_people": "Скрий всички хора",
|
"hide_all_people": "Скрий всички хора",
|
||||||
@@ -1344,6 +1351,8 @@
|
|||||||
"minute": "Минута",
|
"minute": "Минута",
|
||||||
"minutes": "Минути",
|
"minutes": "Минути",
|
||||||
"missing": "Липсващи",
|
"missing": "Липсващи",
|
||||||
|
"mobile_app": "Мобилно приложение",
|
||||||
|
"mobile_app_download_onboarding_note": "Свалете мобилното приложение Immich с някоя от следните опции",
|
||||||
"model": "Модел",
|
"model": "Модел",
|
||||||
"month": "Месец",
|
"month": "Месец",
|
||||||
"monthly_title_text_date_format": "MMMM г",
|
"monthly_title_text_date_format": "MMMM г",
|
||||||
@@ -1362,6 +1371,8 @@
|
|||||||
"my_albums": "Мои албуми",
|
"my_albums": "Мои албуми",
|
||||||
"name": "Име",
|
"name": "Име",
|
||||||
"name_or_nickname": "Име или прякор",
|
"name_or_nickname": "Име или прякор",
|
||||||
|
"navigate": "Придвижване",
|
||||||
|
"navigate_to_time": "Придвижване до момент във времето",
|
||||||
"network_requirement_photos_upload": "Използвай мобилни данни за архивиране на снимки",
|
"network_requirement_photos_upload": "Използвай мобилни данни за архивиране на снимки",
|
||||||
"network_requirement_videos_upload": "Използвай мобилни данни за архивиране на видео",
|
"network_requirement_videos_upload": "Използвай мобилни данни за архивиране на видео",
|
||||||
"network_requirements": "Изисквания към мрежата",
|
"network_requirements": "Изисквания към мрежата",
|
||||||
@@ -1371,6 +1382,7 @@
|
|||||||
"never": "Никога",
|
"never": "Никога",
|
||||||
"new_album": "Нов Албум",
|
"new_album": "Нов Албум",
|
||||||
"new_api_key": "Нов API ключ",
|
"new_api_key": "Нов API ключ",
|
||||||
|
"new_date_range": "Нов период от време",
|
||||||
"new_password": "Нова парола",
|
"new_password": "Нова парола",
|
||||||
"new_person": "Нов човек",
|
"new_person": "Нов човек",
|
||||||
"new_pin_code": "Нов PIN код",
|
"new_pin_code": "Нов PIN код",
|
||||||
@@ -1421,6 +1433,8 @@
|
|||||||
"notifications": "Известия",
|
"notifications": "Известия",
|
||||||
"notifications_setting_description": "Управление на известията",
|
"notifications_setting_description": "Управление на известията",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Конфигуратор за получаване",
|
||||||
|
"obtainium_configurator_instructions": "Използвайте Obtainium за инсталация и обновяване на приложението за Android директно от GitHub на Immich. Създайте API ключ и изберете вариант за да създадете Obtainium конфигурационен линк",
|
||||||
"official_immich_resources": "Официална информация за Immich",
|
"official_immich_resources": "Официална информация за Immich",
|
||||||
"offline": "Офлайн",
|
"offline": "Офлайн",
|
||||||
"offset": "Отместване",
|
"offset": "Отместване",
|
||||||
@@ -1542,13 +1556,9 @@
|
|||||||
"privacy": "Поверителност",
|
"privacy": "Поверителност",
|
||||||
"profile": "Профил",
|
"profile": "Профил",
|
||||||
"profile_drawer_app_logs": "Дневник",
|
"profile_drawer_app_logs": "Дневник",
|
||||||
"profile_drawer_client_out_of_date_major": "Мобилното приложение е остаряло. Моля, актуализирайте до най-новата основна версия.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Мобилното приложение е остаряло. Моля, актуализирайте до най-новата версия.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Клиента и сървъра са обновени",
|
"profile_drawer_client_server_up_to_date": "Клиента и сървъра са обновени",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Режима само за четене е активиран. С дълго натискане върху картиката-аватар на потребителя ще деактивирате само за четене.",
|
"profile_drawer_readonly_mode": "Режима само за четене е активиран. С дълго натискане върху картиката-аватар на потребителя ще деактивирате само за четене.",
|
||||||
"profile_drawer_server_out_of_date_major": "Версията на сървъра е остаряла. Моля, актуализирайте поне до последната главна версия.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Версията на сървъра е остаряла. Моля, актуализирайте до последната версия.",
|
|
||||||
"profile_image_of_user": "Профилна снимка на {user}",
|
"profile_image_of_user": "Профилна снимка на {user}",
|
||||||
"profile_picture_set": "Профилната снимка е сложена.",
|
"profile_picture_set": "Профилната снимка е сложена.",
|
||||||
"public_album": "Публичен албум",
|
"public_album": "Публичен албум",
|
||||||
@@ -1777,6 +1787,7 @@
|
|||||||
"server_online": "Сървър онлайн",
|
"server_online": "Сървър онлайн",
|
||||||
"server_privacy": "Поверителност на сървъра",
|
"server_privacy": "Поверителност на сървъра",
|
||||||
"server_stats": "Статус на сървъра",
|
"server_stats": "Статус на сървъра",
|
||||||
|
"server_update_available": "Налична е нова версия за сървъра",
|
||||||
"server_version": "Версия на сървъра",
|
"server_version": "Версия на сървъра",
|
||||||
"set": "Задай",
|
"set": "Задай",
|
||||||
"set_as_album_cover": "Задаване като обложка на албум",
|
"set_as_album_cover": "Задаване като обложка на албум",
|
||||||
@@ -1805,6 +1816,8 @@
|
|||||||
"setting_notifications_subtitle": "Настройка на известията",
|
"setting_notifications_subtitle": "Настройка на известията",
|
||||||
"setting_notifications_total_progress_subtitle": "Общ напредък на зареждане (готово/всички обекти)",
|
"setting_notifications_total_progress_subtitle": "Общ напредък на зареждане (готово/всички обекти)",
|
||||||
"setting_notifications_total_progress_title": "Показване на общия напредък на архивиране във фонов режим",
|
"setting_notifications_total_progress_title": "Показване на общия напредък на архивиране във фонов режим",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Автоматично започни възпроизвеждане на видео при отваряне",
|
||||||
|
"setting_video_viewer_auto_play_title": "Автоматично възпроизвеждане на видео",
|
||||||
"setting_video_viewer_looping_title": "Циклично",
|
"setting_video_viewer_looping_title": "Циклично",
|
||||||
"setting_video_viewer_original_video_subtitle": "При показване на видео от сървъра показвай оригиналния файл, дори и да има транскодирана версия. Може да използва буфериране. Локално наличните видеа се показват винаги в оригинал, независимо от тази настройка.",
|
"setting_video_viewer_original_video_subtitle": "При показване на видео от сървъра показвай оригиналния файл, дори и да има транскодирана версия. Може да използва буфериране. Локално наличните видеа се показват винаги в оригинал, независимо от тази настройка.",
|
||||||
"setting_video_viewer_original_video_title": "Само оригинално видео",
|
"setting_video_viewer_original_video_title": "Само оригинално видео",
|
||||||
@@ -2016,6 +2029,7 @@
|
|||||||
"troubleshoot": "Отстраняване на проблеми",
|
"troubleshoot": "Отстраняване на проблеми",
|
||||||
"type": "Тип",
|
"type": "Тип",
|
||||||
"unable_to_change_pin_code": "Невъзможна промяна на PIN кода",
|
"unable_to_change_pin_code": "Невъзможна промяна на PIN кода",
|
||||||
|
"unable_to_check_version": "Невъзможна проверка на версията на приложението или сървъра",
|
||||||
"unable_to_setup_pin_code": "Неуспешно задаване на PIN кода",
|
"unable_to_setup_pin_code": "Неуспешно задаване на PIN кода",
|
||||||
"unarchive": "Разархивирай",
|
"unarchive": "Разархивирай",
|
||||||
"unarchive_action_prompt": "{count} са премахнати от Архива",
|
"unarchive_action_prompt": "{count} са премахнати от Архива",
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
"add_to_album": "এলবাম এ যোগ করুন",
|
"add_to_album": "এলবাম এ যোগ করুন",
|
||||||
"add_to_album_bottom_sheet_added": "{album} এ যোগ করা হয়েছে",
|
"add_to_album_bottom_sheet_added": "{album} এ যোগ করা হয়েছে",
|
||||||
"add_to_album_bottom_sheet_already_exists": "{album} এ আগে থেকেই আছে",
|
"add_to_album_bottom_sheet_already_exists": "{album} এ আগে থেকেই আছে",
|
||||||
|
"add_to_album_bottom_sheet_some_local_assets": "কিছু স্থানীয় ছবি বা ভিডিও অ্যালবামে যোগ করা যায়নি",
|
||||||
"add_to_album_toggle": "{album} - এর নির্বাচন পরিবর্তন করুন",
|
"add_to_album_toggle": "{album} - এর নির্বাচন পরিবর্তন করুন",
|
||||||
"add_to_albums": "অ্যালবামে যোগ করুন",
|
"add_to_albums": "অ্যালবামে যোগ করুন",
|
||||||
"add_to_albums_count": "অ্যালবামে যোগ করুন ({count})",
|
"add_to_albums_count": "অ্যালবামে যোগ করুন ({count})",
|
||||||
@@ -123,6 +124,11 @@
|
|||||||
"logging_enable_description": "লগিং এনাবল/সক্ষম করুন",
|
"logging_enable_description": "লগিং এনাবল/সক্ষম করুন",
|
||||||
"logging_level_description": "সক্রিয় থাকাকালীন, কোন লগ স্তর ব্যবহার করতে হবে।",
|
"logging_level_description": "সক্রিয় থাকাকালীন, কোন লগ স্তর ব্যবহার করতে হবে।",
|
||||||
"logging_settings": "লগিং",
|
"logging_settings": "লগিং",
|
||||||
|
"machine_learning_availability_checks": "প্রাপ্যতা পরীক্ষা",
|
||||||
|
"machine_learning_availability_checks_description": "স্বয়ংক্রিয়ভাবে উপলব্ধ মেশিন লার্নিং সার্ভারগুলি সনাক্ত করুন এবং পছন্দ করুন",
|
||||||
|
"machine_learning_availability_checks_enabled": "প্রাপ্যতা পরীক্ষা সক্ষম করুন",
|
||||||
|
"machine_learning_availability_checks_interval": "চেক ব্যবধান",
|
||||||
|
"machine_learning_availability_checks_interval_description": "প্রাপ্যতা পরীক্ষাগুলির মধ্যে ব্যবধান মিলিসেকেন্ডে",
|
||||||
"machine_learning_clip_model": "CLIP মডেল",
|
"machine_learning_clip_model": "CLIP মডেল",
|
||||||
"machine_learning_clip_model_description": "<link>এখানে</link> তালিকাভুক্ত একটি CLIP মডেলের নাম। মনে রাখবেন, মডেল পরিবর্তনের পর সব ছবির জন্য অবশ্যই ‘Smart Search’ কাজটি আবার চালাতে হবে।",
|
"machine_learning_clip_model_description": "<link>এখানে</link> তালিকাভুক্ত একটি CLIP মডেলের নাম। মনে রাখবেন, মডেল পরিবর্তনের পর সব ছবির জন্য অবশ্যই ‘Smart Search’ কাজটি আবার চালাতে হবে।",
|
||||||
"machine_learning_duplicate_detection": "পুনরাবৃত্তি সনাক্তকরণ",
|
"machine_learning_duplicate_detection": "পুনরাবৃত্তি সনাক্তকরণ",
|
||||||
|
|||||||
27
i18n/ca.json
27
i18n/ca.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Afegir als àlbums",
|
"add_to_albums": "Afegir als àlbums",
|
||||||
"add_to_albums_count": "Afegir als àlbums ({count})",
|
"add_to_albums_count": "Afegir als àlbums ({count})",
|
||||||
"add_to_shared_album": "Afegir a un àlbum compartit",
|
"add_to_shared_album": "Afegir a un àlbum compartit",
|
||||||
|
"add_upload_to_stack": "Afegeix la càrrega a la pila",
|
||||||
"add_url": "Afegir URL",
|
"add_url": "Afegir URL",
|
||||||
"added_to_archive": "Afegir a l'arxiu",
|
"added_to_archive": "Afegir a l'arxiu",
|
||||||
"added_to_favorites": "Afegit als preferits",
|
"added_to_favorites": "Afegit als preferits",
|
||||||
@@ -63,7 +64,7 @@
|
|||||||
"confirm_delete_library": "Esteu segurs que voleu eliminar la llibreria {library}?",
|
"confirm_delete_library": "Esteu segurs que voleu eliminar la llibreria {library}?",
|
||||||
"confirm_delete_library_assets": "Esteu segurs que voleu esborrar aquesta llibreria? Això esborrarà {count, plural, one {# contained asset} other {all # contained assets}} d'Immich i no es podrà desfer. Els fitxers romandran al disc.",
|
"confirm_delete_library_assets": "Esteu segurs que voleu esborrar aquesta llibreria? Això esborrarà {count, plural, one {# contained asset} other {all # contained assets}} d'Immich i no es podrà desfer. Els fitxers romandran al disc.",
|
||||||
"confirm_email_below": "Per a confirmar, escriviu \"{email}\" a sota",
|
"confirm_email_below": "Per a confirmar, escriviu \"{email}\" a sota",
|
||||||
"confirm_reprocess_all_faces": "Esteu segur que voleu reprocessar totes les cares? Això també esborrarà la gent que heu anomenat.",
|
"confirm_reprocess_all_faces": "Esteu segurs que voleu reprocessar totes les cares? Això també esborrarà la gent que heu anomenat.",
|
||||||
"confirm_user_password_reset": "Esteu segur que voleu reinicialitzar la contrasenya de l'usuari {user}?",
|
"confirm_user_password_reset": "Esteu segur que voleu reinicialitzar la contrasenya de l'usuari {user}?",
|
||||||
"confirm_user_pin_code_reset": "Esteu segur que voleu restablir el codi PIN de {user}?",
|
"confirm_user_pin_code_reset": "Esteu segur que voleu restablir el codi PIN de {user}?",
|
||||||
"create_job": "Crear tasca",
|
"create_job": "Crear tasca",
|
||||||
@@ -332,7 +333,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Taxa de bits màxima",
|
"transcoding_max_bitrate": "Taxa de bits màxima",
|
||||||
"transcoding_max_bitrate_description": "Establir una taxa de bits màxima pot fer que les mides dels fitxers siguin més previsibles amb un cost menor per a la qualitat. A 720p, els valors típics són 2600 kbit/s per a VP9 o HEVC, o 4500 kbit/s per a H.264. Desactivat si s'estableix a 0.",
|
"transcoding_max_bitrate_description": "Establir una taxa de bits màxima pot fer que les mides dels fitxers siguin més previsibles amb un cost menor per a la qualitat. A 720p, els valors típics són 2600 kbit/s per a VP9 o HEVC, o 4500 kbit/s per a H.264. Desactivat si s'estableix a 0. Quan no s'especifica, s'assumeix kbit/s; per tant 5000 i 5000k i 5M son equivalents.",
|
||||||
"transcoding_max_keyframe_interval": "Interval màxim de fotogrames clau",
|
"transcoding_max_keyframe_interval": "Interval màxim de fotogrames clau",
|
||||||
"transcoding_max_keyframe_interval_description": "Estableix la distància màxima entre fotogrames clau. Els valors més baixos empitjoren l'eficiència de la compressió, però milloren els temps de cerca i poden millorar la qualitat en escenes amb moviment ràpid. 0 estableix aquest valor automàticament.",
|
"transcoding_max_keyframe_interval_description": "Estableix la distància màxima entre fotogrames clau. Els valors més baixos empitjoren l'eficiència de la compressió, però milloren els temps de cerca i poden millorar la qualitat en escenes amb moviment ràpid. 0 estableix aquest valor automàticament.",
|
||||||
"transcoding_optimal_description": "Vídeos superiors a la resolució objectiu o que no tenen un format acceptat",
|
"transcoding_optimal_description": "Vídeos superiors a la resolució objectiu o que no tenen un format acceptat",
|
||||||
@@ -350,7 +351,7 @@
|
|||||||
"transcoding_target_resolution": "Resolució objectiu",
|
"transcoding_target_resolution": "Resolució objectiu",
|
||||||
"transcoding_target_resolution_description": "Les resolucions més altes poden conservar més detalls, però triguen més temps a codificar-se, tenen mides de fitxer més grans i poden reduir la capacitat de resposta de l'aplicació.",
|
"transcoding_target_resolution_description": "Les resolucions més altes poden conservar més detalls, però triguen més temps a codificar-se, tenen mides de fitxer més grans i poden reduir la capacitat de resposta de l'aplicació.",
|
||||||
"transcoding_temporal_aq": "AQ temporal",
|
"transcoding_temporal_aq": "AQ temporal",
|
||||||
"transcoding_temporal_aq_description": "S'aplica només a NVENC. Augmenta la qualitat de les escenes de baix moviment i alt detall. És possible que no sigui compatible amb dispositius antics.",
|
"transcoding_temporal_aq_description": "S'aplica només a NVENC. Quantització adaptativa temporal augmenta la qualitat de les escenes de baix moviment i alt detall. És possible que no sigui compatible amb dispositius antics.",
|
||||||
"transcoding_threads": "Fils",
|
"transcoding_threads": "Fils",
|
||||||
"transcoding_threads_description": "Els valors més alts condueixen a una codificació més ràpida, però deixen menys espai perquè el servidor processi altres tasques mentre està actiu. Aquest valor no hauria de ser superior al nombre de nuclis de CPU. Maximitza la utilització si s'estableix a 0.",
|
"transcoding_threads_description": "Els valors més alts condueixen a una codificació més ràpida, però deixen menys espai perquè el servidor processi altres tasques mentre està actiu. Aquest valor no hauria de ser superior al nombre de nuclis de CPU. Maximitza la utilització si s'estableix a 0.",
|
||||||
"transcoding_tone_mapping": "Mapeig de to",
|
"transcoding_tone_mapping": "Mapeig de to",
|
||||||
@@ -620,7 +621,7 @@
|
|||||||
"bugs_and_feature_requests": "Errors i sol·licituds de funcions",
|
"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 segurs 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_keep_duplicates_confirmation": "Esteu segur que voleu mantenir {count, plural, one {# recurs duplicat} other {# recursos duplicats}}? Això resoldrà tots els grups duplicats sense eliminar res.",
|
"bulk_keep_duplicates_confirmation": "Esteu segur que voleu mantenir {count, plural, one {# recurs duplicat} other {# recursos duplicats}}? Això resoldrà tots els grups duplicats sense eliminar res.",
|
||||||
"bulk_trash_duplicates_confirmation": "Esteu segur que voleu enviar a les escombraries {count, plural, one {# recurs duplicat} other {# recursos duplicats}}? Això mantindrà el recurs més gran de cada grup i eliminarà la resta de duplicats.",
|
"bulk_trash_duplicates_confirmation": "Esteu segur que voleu enviar a les escombraries {count, plural, one {# recurs duplicat} other {# recursos duplicats}}? Això mantindrà el recurs més gran de cada grup i eliminarà la resta de duplicats.",
|
||||||
"buy": "Comprar Immich",
|
"buy": "Comprar Immich",
|
||||||
@@ -700,7 +701,6 @@
|
|||||||
"comments_and_likes": "Comentaris i agradaments",
|
"comments_and_likes": "Comentaris i agradaments",
|
||||||
"comments_are_disabled": "Els comentaris estan desactivats",
|
"comments_are_disabled": "Els comentaris estan desactivats",
|
||||||
"common_create_new_album": "Crea un àlbum nou",
|
"common_create_new_album": "Crea un àlbum nou",
|
||||||
"common_server_error": "Si us plau, comproveu la vostra connexió de xarxa, assegureu-vos que el servidor és accessible i que les versions de l'aplicació i del servidor són compatibles.",
|
|
||||||
"completed": "Completat",
|
"completed": "Completat",
|
||||||
"confirm": "Confirmar",
|
"confirm": "Confirmar",
|
||||||
"confirm_admin_password": "Confirmeu la contrasenya d'administrador",
|
"confirm_admin_password": "Confirmeu la contrasenya d'administrador",
|
||||||
@@ -783,7 +783,7 @@
|
|||||||
"deduplication_info_description": "Per preseleccionar recursos automàticament i eliminar els duplicats de manera massiva, ens fixem en:",
|
"deduplication_info_description": "Per preseleccionar recursos automàticament i eliminar els duplicats de manera massiva, ens fixem en:",
|
||||||
"default_locale": "Localització predeterminada",
|
"default_locale": "Localització predeterminada",
|
||||||
"default_locale_description": "Format de dates i números segons la configuració del navegador",
|
"default_locale_description": "Format de dates i números segons la configuració del navegador",
|
||||||
"delete": "Esborra",
|
"delete": "Esborrar",
|
||||||
"delete_action_confirmation_message": "Segur que vols eliminar aquest recurs? Aquesta acció el mourà a la paperera del servidor, i et preguntarà si el vols eliminar localment",
|
"delete_action_confirmation_message": "Segur que vols eliminar aquest recurs? Aquesta acció el mourà a la paperera del servidor, i et preguntarà si el vols eliminar localment",
|
||||||
"delete_action_prompt": "{count} eliminats",
|
"delete_action_prompt": "{count} eliminats",
|
||||||
"delete_album": "Esborra l'àlbum",
|
"delete_album": "Esborra l'àlbum",
|
||||||
@@ -882,7 +882,6 @@
|
|||||||
"edit_tag": "Editar etiqueta",
|
"edit_tag": "Editar etiqueta",
|
||||||
"edit_title": "Edita títol",
|
"edit_title": "Edita títol",
|
||||||
"edit_user": "Edita l'usuari",
|
"edit_user": "Edita l'usuari",
|
||||||
"edited": "Editat",
|
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
"editor_close_without_save_prompt": "No es desaran els canvis",
|
"editor_close_without_save_prompt": "No es desaran els canvis",
|
||||||
"editor_close_without_save_title": "Tancar l'editor?",
|
"editor_close_without_save_title": "Tancar l'editor?",
|
||||||
@@ -1038,6 +1037,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "No s'ha pogut actualitzar la descripció",
|
"exif_bottom_sheet_description_error": "No s'ha pogut actualitzar la descripció",
|
||||||
"exif_bottom_sheet_details": "DETALLS",
|
"exif_bottom_sheet_details": "DETALLS",
|
||||||
"exif_bottom_sheet_location": "UBICACIÓ",
|
"exif_bottom_sheet_location": "UBICACIÓ",
|
||||||
|
"exif_bottom_sheet_no_description": "Sense descrioció",
|
||||||
"exif_bottom_sheet_people": "PERSONES",
|
"exif_bottom_sheet_people": "PERSONES",
|
||||||
"exif_bottom_sheet_person_add_person": "Afegir nom",
|
"exif_bottom_sheet_person_add_person": "Afegir nom",
|
||||||
"exit_slideshow": "Surt de la presentació de diapositives",
|
"exit_slideshow": "Surt de la presentació de diapositives",
|
||||||
@@ -1119,7 +1119,6 @@
|
|||||||
"header_settings_field_validator_msg": "El valor no pot estar buit",
|
"header_settings_field_validator_msg": "El valor no pot estar buit",
|
||||||
"header_settings_header_name_input": "Nom de la capçalera",
|
"header_settings_header_name_input": "Nom de la capçalera",
|
||||||
"header_settings_header_value_input": "Valor de la capçalera",
|
"header_settings_header_value_input": "Valor de la capçalera",
|
||||||
"headers_settings_tile_subtitle": "Definiu les capçaleres de proxy que l'aplicació hauria d'enviar amb cada sol·licitud de xarxa",
|
|
||||||
"headers_settings_tile_title": "Capçaleres proxy personalitzades",
|
"headers_settings_tile_title": "Capçaleres proxy personalitzades",
|
||||||
"hi_user": "Hola {name} ({email})",
|
"hi_user": "Hola {name} ({email})",
|
||||||
"hide_all_people": "Amaga totes les persones",
|
"hide_all_people": "Amaga totes les persones",
|
||||||
@@ -1344,6 +1343,7 @@
|
|||||||
"minute": "Minut",
|
"minute": "Minut",
|
||||||
"minutes": "Minuts",
|
"minutes": "Minuts",
|
||||||
"missing": "Restants",
|
"missing": "Restants",
|
||||||
|
"mobile_app": "Aplicació mòbil",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"month": "Mes",
|
"month": "Mes",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
@@ -1362,6 +1362,7 @@
|
|||||||
"my_albums": "Els meus àlbums",
|
"my_albums": "Els meus àlbums",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"name_or_nickname": "Nom o sobrenom",
|
"name_or_nickname": "Nom o sobrenom",
|
||||||
|
"navigate": "Navegar",
|
||||||
"network_requirement_photos_upload": "Fes servir dades mòbils per a còpies de seguretat de fotos",
|
"network_requirement_photos_upload": "Fes servir dades mòbils per a còpies de seguretat de fotos",
|
||||||
"network_requirement_videos_upload": "Fes servir dades mòbils per a còpies de seguretat de videos",
|
"network_requirement_videos_upload": "Fes servir dades mòbils per a còpies de seguretat de videos",
|
||||||
"network_requirements": "Requeriments de Xarxa",
|
"network_requirements": "Requeriments de Xarxa",
|
||||||
@@ -1542,13 +1543,9 @@
|
|||||||
"privacy": "Privacitat",
|
"privacy": "Privacitat",
|
||||||
"profile": "Perfil",
|
"profile": "Perfil",
|
||||||
"profile_drawer_app_logs": "Registres",
|
"profile_drawer_app_logs": "Registres",
|
||||||
"profile_drawer_client_out_of_date_major": "L'aplicació mòbil està desactualitzada. Si us plau, actualitzeu a l'última versió major.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "L'aplicació mòbil està desactualitzada. Si us plau, actualitzeu a l'última versió menor.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "El client i el servidor estan actualitzats",
|
"profile_drawer_client_server_up_to_date": "El client i el servidor estan actualitzats",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Mode només lectura. Feu pulsació llarga a la icona de l'avatar d'usuari per sortir.",
|
"profile_drawer_readonly_mode": "Mode només lectura. Feu pulsació llarga a la icona de l'avatar d'usuari per sortir.",
|
||||||
"profile_drawer_server_out_of_date_major": "El servidor està desactualitzat. Si us plau, actualitzeu a l'última versió major.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "El servidor està desactualitzat. Si us plau, actualitzeu a l'última versió menor.",
|
|
||||||
"profile_image_of_user": "Imatge de perfil de {user}",
|
"profile_image_of_user": "Imatge de perfil de {user}",
|
||||||
"profile_picture_set": "Imatge de perfil configurada.",
|
"profile_picture_set": "Imatge de perfil configurada.",
|
||||||
"public_album": "Àlbum públic",
|
"public_album": "Àlbum públic",
|
||||||
@@ -1777,6 +1774,7 @@
|
|||||||
"server_online": "Servidor en línia",
|
"server_online": "Servidor en línia",
|
||||||
"server_privacy": "Privadesa del servidor",
|
"server_privacy": "Privadesa del servidor",
|
||||||
"server_stats": "Estadístiques del servidor",
|
"server_stats": "Estadístiques del servidor",
|
||||||
|
"server_update_available": "Actualització del servidor disponible",
|
||||||
"server_version": "Versió del servidor",
|
"server_version": "Versió del servidor",
|
||||||
"set": "Establir",
|
"set": "Establir",
|
||||||
"set_as_album_cover": "Establir com a portada de l'àlbum",
|
"set_as_album_cover": "Establir com a portada de l'àlbum",
|
||||||
@@ -1805,6 +1803,8 @@
|
|||||||
"setting_notifications_subtitle": "Ajusta les preferències de notificació",
|
"setting_notifications_subtitle": "Ajusta les preferències de notificació",
|
||||||
"setting_notifications_total_progress_subtitle": "Progrés general de la pujada (elements completats/total)",
|
"setting_notifications_total_progress_subtitle": "Progrés general de la pujada (elements completats/total)",
|
||||||
"setting_notifications_total_progress_title": "Mostra el progrés total de la còpia de seguretat en segon pla",
|
"setting_notifications_total_progress_title": "Mostra el progrés total de la còpia de seguretat en segon pla",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Comença a veure videos quan s'obrin",
|
||||||
|
"setting_video_viewer_auto_play_title": "Veure videos automàticament",
|
||||||
"setting_video_viewer_looping_title": "Bucle",
|
"setting_video_viewer_looping_title": "Bucle",
|
||||||
"setting_video_viewer_original_video_subtitle": "Quan reproduïu un vídeo des del servidor, reproduïu l'original encara que hi hagi una transcodificació disponible. Pot conduir a l'amortització. Els vídeos disponibles localment es reprodueixen en qualitat original independentment d'aquesta configuració.",
|
"setting_video_viewer_original_video_subtitle": "Quan reproduïu un vídeo des del servidor, reproduïu l'original encara que hi hagi una transcodificació disponible. Pot conduir a l'amortització. Els vídeos disponibles localment es reprodueixen en qualitat original independentment d'aquesta configuració.",
|
||||||
"setting_video_viewer_original_video_title": "Força el vídeo original",
|
"setting_video_viewer_original_video_title": "Força el vídeo original",
|
||||||
@@ -1812,7 +1812,7 @@
|
|||||||
"settings_require_restart": "Si us plau, reinicieu Immich per a aplicar aquest canvi",
|
"settings_require_restart": "Si us plau, reinicieu Immich per a aplicar aquest canvi",
|
||||||
"settings_saved": "Configuració desada",
|
"settings_saved": "Configuració desada",
|
||||||
"setup_pin_code": "Configurar un codi PIN",
|
"setup_pin_code": "Configurar un codi PIN",
|
||||||
"share": "Comparteix",
|
"share": "Compartir",
|
||||||
"share_action_prompt": "Compartits {count} recursos",
|
"share_action_prompt": "Compartits {count} recursos",
|
||||||
"share_add_photos": "Afegeix fotografies",
|
"share_add_photos": "Afegeix fotografies",
|
||||||
"share_assets_selected": "{count} seleccionats",
|
"share_assets_selected": "{count} seleccionats",
|
||||||
@@ -2016,6 +2016,7 @@
|
|||||||
"troubleshoot": "Solució de problemes",
|
"troubleshoot": "Solució de problemes",
|
||||||
"type": "Tipus",
|
"type": "Tipus",
|
||||||
"unable_to_change_pin_code": "No es pot canviar el codi PIN",
|
"unable_to_change_pin_code": "No es pot canviar el codi PIN",
|
||||||
|
"unable_to_check_version": "No es pot comprovar la versió de l'aplicació ni del servidor",
|
||||||
"unable_to_setup_pin_code": "No s'ha pogut configurar el codi PIN",
|
"unable_to_setup_pin_code": "No s'ha pogut configurar el codi PIN",
|
||||||
"unarchive": "Desarxivar",
|
"unarchive": "Desarxivar",
|
||||||
"unarchive_action_prompt": "{count} eliminades de l'arxiu",
|
"unarchive_action_prompt": "{count} eliminades de l'arxiu",
|
||||||
|
|||||||
85
i18n/cs.json
85
i18n/cs.json
@@ -28,11 +28,12 @@
|
|||||||
"add_to_album": "Přidat do alba",
|
"add_to_album": "Přidat do alba",
|
||||||
"add_to_album_bottom_sheet_added": "Přidáno do {album}",
|
"add_to_album_bottom_sheet_added": "Přidáno do {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Je již v {album}",
|
"add_to_album_bottom_sheet_already_exists": "Je již v {album}",
|
||||||
"add_to_album_bottom_sheet_some_local_assets": "Některá místní aktiva nebylo možné přidat do alba",
|
"add_to_album_bottom_sheet_some_local_assets": "Některé místní položky nebylo možné přidat do alba",
|
||||||
"add_to_album_toggle": "Přepnout výběr pro {album}",
|
"add_to_album_toggle": "Přepnout výběr pro {album}",
|
||||||
"add_to_albums": "Přidat do alb",
|
"add_to_albums": "Přidat do alb",
|
||||||
"add_to_albums_count": "Přidat do alb ({count})",
|
"add_to_albums_count": "Přidat do alb ({count})",
|
||||||
"add_to_shared_album": "Přidat do sdíleného alba",
|
"add_to_shared_album": "Přidat do sdíleného alba",
|
||||||
|
"add_upload_to_stack": "Přidat nahrané do zásobníku",
|
||||||
"add_url": "Přidat URL",
|
"add_url": "Přidat URL",
|
||||||
"added_to_archive": "Přidáno do archivu",
|
"added_to_archive": "Přidáno do archivu",
|
||||||
"added_to_favorites": "Přidáno do oblíbených",
|
"added_to_favorites": "Přidáno do oblíbených",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"library_settings_description": "Správa nastavení externí knihovny",
|
"library_settings_description": "Správa nastavení externí knihovny",
|
||||||
"library_tasks_description": "Vyhledávání nových nebo změněných položek v externích knihovnách",
|
"library_tasks_description": "Vyhledávání nových nebo změněných položek v externích knihovnách",
|
||||||
"library_watching_enable_description": "Sledovat změny souborů v externích knihovnách",
|
"library_watching_enable_description": "Sledovat změny souborů v externích knihovnách",
|
||||||
"library_watching_settings": "Sledování knihovny (EXPERIMENTÁLNÍ)",
|
"library_watching_settings": "Sledování knihovny [EXPERIMENTÁLNÍ]",
|
||||||
"library_watching_settings_description": "Automatické sledování změněných souborů",
|
"library_watching_settings_description": "Automatické sledování změněných souborů",
|
||||||
"logging_enable_description": "Povolit protokolování",
|
"logging_enable_description": "Povolit protokolování",
|
||||||
"logging_level_description": "Když je povoleno, jakou úroveň protokolu použít.",
|
"logging_level_description": "Když je povoleno, jakou úroveň protokolu použít.",
|
||||||
@@ -129,8 +130,8 @@
|
|||||||
"machine_learning_availability_checks_enabled": "Povolit kontroly dostupnosti",
|
"machine_learning_availability_checks_enabled": "Povolit kontroly dostupnosti",
|
||||||
"machine_learning_availability_checks_interval": "Interval kontrol",
|
"machine_learning_availability_checks_interval": "Interval kontrol",
|
||||||
"machine_learning_availability_checks_interval_description": "Interval v milisekundách mezi kontrolami dostupnosti",
|
"machine_learning_availability_checks_interval_description": "Interval v milisekundách mezi kontrolami dostupnosti",
|
||||||
"machine_learning_availability_checks_timeout": "Vypršení požadavku",
|
"machine_learning_availability_checks_timeout": "Časový limit požadavku",
|
||||||
"machine_learning_availability_checks_timeout_description": "Časové vypršení požadavku v milisekundách u kontrol dostupnosti",
|
"machine_learning_availability_checks_timeout_description": "Časový limit v milisekundách pro kontrolu dostupnosti",
|
||||||
"machine_learning_clip_model": "Model CLIP",
|
"machine_learning_clip_model": "Model CLIP",
|
||||||
"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",
|
||||||
@@ -153,6 +154,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "Minimální skóre důvěryhodnosti pro detekci obličeje od 0 do 1. Nižší hodnoty odhalí více tváří, ale mohou vést k falešně pozitivním výsledkům.",
|
"machine_learning_min_detection_score_description": "Minimální skóre důvěryhodnosti pro detekci obličeje od 0 do 1. Nižší hodnoty odhalí více tváří, ale mohou vést k falešně pozitivním výsledkům.",
|
||||||
"machine_learning_min_recognized_faces": "Mininum rozpoznaných obličejů",
|
"machine_learning_min_recognized_faces": "Mininum rozpoznaných obličejů",
|
||||||
"machine_learning_min_recognized_faces_description": "Minimální počet rozpoznaných obličejů pro vytvoření osoby. Zvýšení tohoto počtu zpřesňuje rozpoznávání obličejů za cenu zvýšení pravděpodobnosti, že obličej nebude přiřazen k osobě.",
|
"machine_learning_min_recognized_faces_description": "Minimální počet rozpoznaných obličejů pro vytvoření osoby. Zvýšení tohoto počtu zpřesňuje rozpoznávání obličejů za cenu zvýšení pravděpodobnosti, že obličej nebude přiřazen k osobě.",
|
||||||
|
"machine_learning_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Použijte strojové učení k rozpoznávání textu v obrázcích",
|
||||||
|
"machine_learning_ocr_enabled": "Povolit OCR",
|
||||||
|
"machine_learning_ocr_enabled_description": "Pokud je tato funkce vypnuta, obrázky nebudou podrobeny rozpoznávání textu.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Maximální rozlišení",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Náhledy nad tímto rozlišením budou změněny tak, aby byl zachován poměr stran. Vyšší hodnoty jsou přesnější, ale jejich zpracování trvá déle a zabírají více paměti.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Minimální detekční skóre",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Minimální skóre spolehlivosti pro detekci textu v rozmezí 0–1. Nižší hodnoty detekují více textu, ale mohou vést k falešným pozitivním výsledkům.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Minimální počet bodů pro rozpoznání",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Minimální skóre spolehlivosti pro rozpoznání detekovaného textu v rozmezí 0–1. Nižší hodnoty rozpoznají více textu, ale mohou vést k falešným pozitivům.",
|
||||||
|
"machine_learning_ocr_model": "OCR model",
|
||||||
|
"machine_learning_ocr_model_description": "Serverové modely jsou přesnější než mobilní modely, ale jejich zpracování trvá déle a zabírají více paměti.",
|
||||||
"machine_learning_settings": "Strojové učení",
|
"machine_learning_settings": "Strojové učení",
|
||||||
"machine_learning_settings_description": "Správa funkcí a nastavení strojového učení",
|
"machine_learning_settings_description": "Správa funkcí a nastavení strojového učení",
|
||||||
"machine_learning_smart_search": "Chytré vyhledávání",
|
"machine_learning_smart_search": "Chytré vyhledávání",
|
||||||
@@ -210,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Ignorovat chyby ověření certifikátu TLS (nedoporučuje se)",
|
"notification_email_ignore_certificate_errors_description": "Ignorovat chyby ověření certifikátu TLS (nedoporučuje se)",
|
||||||
"notification_email_password_description": "Heslo pro ověření na e-mailovém serveru",
|
"notification_email_password_description": "Heslo pro ověření na e-mailovém serveru",
|
||||||
"notification_email_port_description": "Port e-mailového serveru (např. 25, 465 nebo 587)",
|
"notification_email_port_description": "Port e-mailového serveru (např. 25, 465 nebo 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Používat SMTPS (SMTP přes TLS)",
|
||||||
"notification_email_sent_test_email_button": "Odeslat testovací e-mail a uložit",
|
"notification_email_sent_test_email_button": "Odeslat testovací e-mail a uložit",
|
||||||
"notification_email_setting_description": "Nastavení pro zasílání e-mailových oznámení",
|
"notification_email_setting_description": "Nastavení pro zasílání e-mailových oznámení",
|
||||||
"notification_email_test_email": "Odeslat testovací e-mail",
|
"notification_email_test_email": "Odeslat testovací e-mail",
|
||||||
@@ -242,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Kvóta v GiB, která se použije, pokud není poskytnuta žádná deklarace.",
|
"oauth_storage_quota_default_description": "Kvóta v GiB, která se použije, pokud není poskytnuta žádná deklarace.",
|
||||||
"oauth_timeout": "Časový limit požadavku",
|
"oauth_timeout": "Časový limit požadavku",
|
||||||
"oauth_timeout_description": "Časový limit pro požadavky v milisekundách",
|
"oauth_timeout_description": "Časový limit pro požadavky v milisekundách",
|
||||||
|
"ocr_job_description": "Použijte strojové učení k rozpoznávání textu v obrázcích",
|
||||||
"password_enable_description": "Přihlášení pomocí e-mailu a hesla",
|
"password_enable_description": "Přihlášení pomocí e-mailu a hesla",
|
||||||
"password_settings": "Přihlášení heslem",
|
"password_settings": "Přihlášení heslem",
|
||||||
"password_settings_description": "Správa nastavení přihlašování pomocí hesla",
|
"password_settings_description": "Správa nastavení přihlašování pomocí hesla",
|
||||||
@@ -332,7 +348,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Maximální datový tok",
|
"transcoding_max_bitrate": "Maximální datový tok",
|
||||||
"transcoding_max_bitrate_description": "Nastavení maximálního datového toku může zvýšit předvídatelnost velikosti souborů za cenu menší újmy na kvalitě. Při rozlišení 720p jsou typické hodnoty 2600 kbit/s pro VP9 nebo HEVC nebo 4500 kbit/s pro H.264. Je zakázáno, pokud je nastavena hodnota 0.",
|
"transcoding_max_bitrate_description": "Nastavení maximálního datového toku může zvýšit předvídatelnost velikosti souborů za cenu menší újmy na kvalitě. Při rozlišení 720p jsou typické hodnoty 2600 kbit/s pro VP9 nebo HEVC nebo 4500 kbit/s pro H.264. Pokud je nastaveno na 0, je zakázáno. Pokud není zadána žádná jednotka, předpokládá se k (pro kbit/s); proto jsou 5000, 5000k a 5M (pro Mbit/s) ekvivalentní.",
|
||||||
"transcoding_max_keyframe_interval": "Maximální interval klíčových snímků",
|
"transcoding_max_keyframe_interval": "Maximální interval klíčových snímků",
|
||||||
"transcoding_max_keyframe_interval_description": "Nastavuje maximální vzdálenost mezi klíčovými snímky. Nižší hodnoty zhoršují účinnost komprese, ale zlepšují rychlost při přeskakování a mohou zlepšit kvalitu ve scénách s rychlým pohybem. Hodnota 0 nastavuje tuto hodnotu automaticky.",
|
"transcoding_max_keyframe_interval_description": "Nastavuje maximální vzdálenost mezi klíčovými snímky. Nižší hodnoty zhoršují účinnost komprese, ale zlepšují rychlost při přeskakování a mohou zlepšit kvalitu ve scénách s rychlým pohybem. Hodnota 0 nastavuje tuto hodnotu automaticky.",
|
||||||
"transcoding_optimal_description": "Videa s vyšším než cílovým rozlišením nebo videa, která nejsou v akceptovaném formátu",
|
"transcoding_optimal_description": "Videa s vyšším než cílovým rozlišením nebo videa, která nejsou v akceptovaném formátu",
|
||||||
@@ -350,7 +366,7 @@
|
|||||||
"transcoding_target_resolution": "Cílové rozlišení",
|
"transcoding_target_resolution": "Cílové rozlišení",
|
||||||
"transcoding_target_resolution_description": "Vyšší rozlišení mohou zachovat více detailů, ale jejich kódování trvá déle, mají větší velikost souboru a mohou snížit odezvu aplikace.",
|
"transcoding_target_resolution_description": "Vyšší rozlišení mohou zachovat více detailů, ale jejich kódování trvá déle, mají větší velikost souboru a mohou snížit odezvu aplikace.",
|
||||||
"transcoding_temporal_aq": "Časové AQ",
|
"transcoding_temporal_aq": "Časové AQ",
|
||||||
"transcoding_temporal_aq_description": "Platí pouze pro NVENC. Zvyšuje kvalitu scén s vysokým počtem detailů a malým počtem pohybů. Nemusí být kompatibilní se staršími zařízeními.",
|
"transcoding_temporal_aq_description": "Platí pouze pro NVENC. Časová adaptivní kvantizace zvyšuje kvalitu scén s vysokým rozlišením a malým pohybem. Nemusí být kompatibilní se staršími zařízeními.",
|
||||||
"transcoding_threads": "Vlákna",
|
"transcoding_threads": "Vlákna",
|
||||||
"transcoding_threads_description": "Vyšší hodnoty vedou k rychlejšímu kódování, ale ponechávají serveru méně prostoru pro zpracování jiných úloh. Tato hodnota by neměla být vyšší než počet jader procesoru. Maximalizuje využití, pokud je nastavena na 0.",
|
"transcoding_threads_description": "Vyšší hodnoty vedou k rychlejšímu kódování, ale ponechávají serveru méně prostoru pro zpracování jiných úloh. Tato hodnota by neměla být vyšší než počet jader procesoru. Maximalizuje využití, pokud je nastavena na 0.",
|
||||||
"transcoding_tone_mapping": "Mapování tónů",
|
"transcoding_tone_mapping": "Mapování tónů",
|
||||||
@@ -401,11 +417,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "U některých zařízení je načítání miniatur z lokálních prostředků velmi pomalé. Aktivujte toto nastavení, aby se místo toho načítaly vzdálené obrázky.",
|
"advanced_settings_prefer_remote_subtitle": "U některých zařízení je načítání miniatur z lokálních prostředků velmi pomalé. Aktivujte toto nastavení, aby se místo toho načítaly vzdálené obrázky.",
|
||||||
"advanced_settings_prefer_remote_title": "Preferovat vzdálené obrázky",
|
"advanced_settings_prefer_remote_title": "Preferovat vzdálené obrázky",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Definice hlaviček proxy serveru, které by měl Immich odesílat s každým síťovým požadavkem",
|
"advanced_settings_proxy_headers_subtitle": "Definice hlaviček proxy serveru, které by měl Immich odesílat s každým síťovým požadavkem",
|
||||||
"advanced_settings_proxy_headers_title": "Proxy hlavičky",
|
"advanced_settings_proxy_headers_title": "Vlastní proxy hlavičky [EXPERIMENTÁLNÍ]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Povoluje režim pouze pro čtení, ve kterém lze fotografie pouze prohlížet, ale funkce jako výběr více obrázků, sdílení, přenos, mazání jsou zakázány. Povolení/zakázání režimu pouze pro čtení pomocí avatara uživatele na hlavní obrazovce",
|
"advanced_settings_readonly_mode_subtitle": "Povoluje režim pouze pro čtení, ve kterém lze fotografie pouze prohlížet, ale funkce jako výběr více obrázků, sdílení, přenos, mazání jsou zakázány. Povolení/zakázání režimu pouze pro čtení pomocí avatara uživatele na hlavní obrazovce",
|
||||||
"advanced_settings_readonly_mode_title": "Režim pouze pro čtení",
|
"advanced_settings_readonly_mode_title": "Režim pouze pro čtení",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Vynechá ověření SSL certifikátu serveru. Vyžadováno pro self-signed certifikáty.",
|
"advanced_settings_self_signed_ssl_subtitle": "Vynechá ověření SSL certifikátu serveru. Vyžadováno pro self-signed certifikáty.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Povolit self-signed SSL certifikáty",
|
"advanced_settings_self_signed_ssl_title": "Povolit self-signed SSL certifikáty [EXPERIMENTÁLNÍ]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Automaticky odstranit nebo obnovit položku v tomto zařízení, když je tato akce provedena na webu",
|
"advanced_settings_sync_remote_deletions_subtitle": "Automaticky odstranit nebo obnovit položku v tomto zařízení, když je tato akce provedena na webu",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Synchronizace vzdáleného mazání [EXPERIMENTÁLNÍ]",
|
"advanced_settings_sync_remote_deletions_title": "Synchronizace vzdáleného mazání [EXPERIMENTÁLNÍ]",
|
||||||
"advanced_settings_tile_subtitle": "Pokročilé uživatelské nastavení",
|
"advanced_settings_tile_subtitle": "Pokročilé uživatelské nastavení",
|
||||||
@@ -465,10 +481,14 @@
|
|||||||
"api_key_description": "Tato hodnota se zobrazí pouze jednou. Před zavřením okna ji nezapomeňte zkopírovat.",
|
"api_key_description": "Tato hodnota se zobrazí pouze jednou. Před zavřením okna ji nezapomeňte zkopírovat.",
|
||||||
"api_key_empty": "Název klíče API by neměl být prázdný",
|
"api_key_empty": "Název klíče API by neměl být prázdný",
|
||||||
"api_keys": "API klíče",
|
"api_keys": "API klíče",
|
||||||
|
"app_architecture_variant": "Varianta (architektura)",
|
||||||
"app_bar_signout_dialog_content": "Určitě se chcete odhlásit?",
|
"app_bar_signout_dialog_content": "Určitě se chcete odhlásit?",
|
||||||
"app_bar_signout_dialog_ok": "Ano",
|
"app_bar_signout_dialog_ok": "Ano",
|
||||||
"app_bar_signout_dialog_title": "Odhlásit se",
|
"app_bar_signout_dialog_title": "Odhlásit se",
|
||||||
|
"app_download_links": "Odkazy ke stažení aplikace",
|
||||||
"app_settings": "Aplikace",
|
"app_settings": "Aplikace",
|
||||||
|
"app_stores": "Obchody s aplikacemi",
|
||||||
|
"app_update_available": "K dispozici je aktualizace aplikace",
|
||||||
"appears_in": "Vyskytuje se v",
|
"appears_in": "Vyskytuje se v",
|
||||||
"apply_count": "Použít ({count, number})",
|
"apply_count": "Použít ({count, number})",
|
||||||
"archive": "Archiv",
|
"archive": "Archiv",
|
||||||
@@ -552,6 +572,7 @@
|
|||||||
"backup_albums_sync": "Synchronizace zálohovaných alb",
|
"backup_albums_sync": "Synchronizace zálohovaných alb",
|
||||||
"backup_all": "Vše",
|
"backup_all": "Vše",
|
||||||
"backup_background_service_backup_failed_message": "Zálohování médií selhalo. Zkouším to znovu…",
|
"backup_background_service_backup_failed_message": "Zálohování médií selhalo. Zkouším to znovu…",
|
||||||
|
"backup_background_service_complete_notification": "Zálohování položek dokončeno",
|
||||||
"backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu…",
|
"backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu…",
|
||||||
"backup_background_service_current_upload_notification": "Nahrávání {filename}",
|
"backup_background_service_current_upload_notification": "Nahrávání {filename}",
|
||||||
"backup_background_service_default_notification": "Kontrola nových médií…",
|
"backup_background_service_default_notification": "Kontrola nových médií…",
|
||||||
@@ -661,6 +682,8 @@
|
|||||||
"change_password_description": "Buď se do systému přihlašujete poprvé, nebo jste byli požádáni o změnu hesla. Zadejte prosím nové heslo níže.",
|
"change_password_description": "Buď se do systému přihlašujete poprvé, nebo jste byli požádáni o změnu hesla. Zadejte prosím nové heslo níže.",
|
||||||
"change_password_form_confirm_password": "Potvrďte heslo",
|
"change_password_form_confirm_password": "Potvrďte heslo",
|
||||||
"change_password_form_description": "Dobrý den, {name}\n\nje to buď poprvé, co se přihlašujete do systému, nebo byl vytvořen požadavek na změnu hesla. Níže zadejte nové heslo.",
|
"change_password_form_description": "Dobrý den, {name}\n\nje to buď poprvé, co se přihlašujete do systému, nebo byl vytvořen požadavek na změnu hesla. Níže zadejte nové heslo.",
|
||||||
|
"change_password_form_log_out": "Odhlásit všechna ostatní zařízení",
|
||||||
|
"change_password_form_log_out_description": "Doporučujeme se odhlásit ze všech ostatních zařízení",
|
||||||
"change_password_form_new_password": "Nové heslo",
|
"change_password_form_new_password": "Nové heslo",
|
||||||
"change_password_form_password_mismatch": "Hesla se neshodují",
|
"change_password_form_password_mismatch": "Hesla se neshodují",
|
||||||
"change_password_form_reenter_new_password": "Znovu zadejte nové heslo",
|
"change_password_form_reenter_new_password": "Znovu zadejte nové heslo",
|
||||||
@@ -687,8 +710,8 @@
|
|||||||
"client_cert_import_success_msg": "Klientský certifikát je importován",
|
"client_cert_import_success_msg": "Klientský certifikát je importován",
|
||||||
"client_cert_invalid_msg": "Neplatný soubor certifikátu nebo špatné heslo",
|
"client_cert_invalid_msg": "Neplatný soubor certifikátu nebo špatné heslo",
|
||||||
"client_cert_remove_msg": "Klientský certifikát je odstraněn",
|
"client_cert_remove_msg": "Klientský certifikát je odstraněn",
|
||||||
"client_cert_subtitle": "Podpora pouze formátu PKCS12 (.p12, .pfx). Import/odstranění certifikátu je možné pouze před přihlášením",
|
"client_cert_subtitle": "Podporuje pouze formát PKCS12 (.p12, .pfx). Import/odstranění certifikátu je možné pouze před přihlášením",
|
||||||
"client_cert_title": "Klientský SSL certifikát",
|
"client_cert_title": "Klientský SSL certifikát [EXPERIMENTÁLNÍ]",
|
||||||
"clockwise": "Po směru hodinových ručiček",
|
"clockwise": "Po směru hodinových ručiček",
|
||||||
"close": "Zavřít",
|
"close": "Zavřít",
|
||||||
"collapse": "Sbalit",
|
"collapse": "Sbalit",
|
||||||
@@ -700,7 +723,6 @@
|
|||||||
"comments_and_likes": "Komentáře a lajky",
|
"comments_and_likes": "Komentáře a lajky",
|
||||||
"comments_are_disabled": "Komentáře jsou vypnuty",
|
"comments_are_disabled": "Komentáře jsou vypnuty",
|
||||||
"common_create_new_album": "Vytvořit nové album",
|
"common_create_new_album": "Vytvořit nové album",
|
||||||
"common_server_error": "Zkontrolujte připojení k internetu. Ujistěte se, že server je dostupný a aplikace/server jsou v kompatibilní verzi.",
|
|
||||||
"completed": "Dokončeno",
|
"completed": "Dokončeno",
|
||||||
"confirm": "Potvrdit",
|
"confirm": "Potvrdit",
|
||||||
"confirm_admin_password": "Potvrzení hesla správce",
|
"confirm_admin_password": "Potvrzení hesla správce",
|
||||||
@@ -739,6 +761,7 @@
|
|||||||
"create": "Vytvořit",
|
"create": "Vytvořit",
|
||||||
"create_album": "Vytvořit album",
|
"create_album": "Vytvořit album",
|
||||||
"create_album_page_untitled": "Bez názvu",
|
"create_album_page_untitled": "Bez názvu",
|
||||||
|
"create_api_key": "Vytvořit API klíč",
|
||||||
"create_library": "Vytvořit knihovnu",
|
"create_library": "Vytvořit knihovnu",
|
||||||
"create_link": "Vytvořit odkaz",
|
"create_link": "Vytvořit odkaz",
|
||||||
"create_link_to_share": "Vytvořit odkaz pro sdílení",
|
"create_link_to_share": "Vytvořit odkaz pro sdílení",
|
||||||
@@ -768,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "EEEE, d. MMMM y",
|
"daily_title_text_date_year": "EEEE, d. MMMM y",
|
||||||
"dark": "Tmavý",
|
"dark": "Tmavý",
|
||||||
"dark_theme": "Přepnout tmavý motiv",
|
"dark_theme": "Přepnout tmavý motiv",
|
||||||
|
"date": "Datum",
|
||||||
"date_after": "Datum po",
|
"date_after": "Datum po",
|
||||||
"date_and_time": "Datum a čas",
|
"date_and_time": "Datum a čas",
|
||||||
"date_before": "Datum před",
|
"date_before": "Datum před",
|
||||||
@@ -865,7 +889,7 @@
|
|||||||
"edit_date_and_time": "Upravit datum a čas",
|
"edit_date_and_time": "Upravit datum a čas",
|
||||||
"edit_date_and_time_action_prompt": "{count} časových údajů upraveno",
|
"edit_date_and_time_action_prompt": "{count} časových údajů upraveno",
|
||||||
"edit_date_and_time_by_offset": "Posunout datum",
|
"edit_date_and_time_by_offset": "Posunout datum",
|
||||||
"edit_date_and_time_by_offset_interval": "Nový rozsah dat: {from} – {to}",
|
"edit_date_and_time_by_offset_interval": "Nový rozsah dat: {from} - {to}",
|
||||||
"edit_description": "Upravit popis",
|
"edit_description": "Upravit popis",
|
||||||
"edit_description_prompt": "Vyberte nový popis:",
|
"edit_description_prompt": "Vyberte nový popis:",
|
||||||
"edit_exclusion_pattern": "Upravit vzor vyloučení",
|
"edit_exclusion_pattern": "Upravit vzor vyloučení",
|
||||||
@@ -882,7 +906,6 @@
|
|||||||
"edit_tag": "Upravit značku",
|
"edit_tag": "Upravit značku",
|
||||||
"edit_title": "Upravit název",
|
"edit_title": "Upravit název",
|
||||||
"edit_user": "Upravit uživatele",
|
"edit_user": "Upravit uživatele",
|
||||||
"edited": "Upraveno",
|
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
"editor_close_without_save_prompt": "Změny nebudou uloženy",
|
"editor_close_without_save_prompt": "Změny nebudou uloženy",
|
||||||
"editor_close_without_save_title": "Zavřít editor?",
|
"editor_close_without_save_title": "Zavřít editor?",
|
||||||
@@ -1038,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Chyba při aktualizaci popisu",
|
"exif_bottom_sheet_description_error": "Chyba při aktualizaci popisu",
|
||||||
"exif_bottom_sheet_details": "PODROBNOSTI",
|
"exif_bottom_sheet_details": "PODROBNOSTI",
|
||||||
"exif_bottom_sheet_location": "POLOHA",
|
"exif_bottom_sheet_location": "POLOHA",
|
||||||
|
"exif_bottom_sheet_no_description": "Žádný popisek",
|
||||||
"exif_bottom_sheet_people": "LIDÉ",
|
"exif_bottom_sheet_people": "LIDÉ",
|
||||||
"exif_bottom_sheet_person_add_person": "Přidat jméno",
|
"exif_bottom_sheet_person_add_person": "Přidat jméno",
|
||||||
"exit_slideshow": "Ukončit prezentaci",
|
"exit_slideshow": "Ukončit prezentaci",
|
||||||
@@ -1076,6 +1100,7 @@
|
|||||||
"features_setting_description": "Správa funkcí aplikace",
|
"features_setting_description": "Správa funkcí aplikace",
|
||||||
"file_name": "Název souboru",
|
"file_name": "Název souboru",
|
||||||
"file_name_or_extension": "Název nebo přípona souboru",
|
"file_name_or_extension": "Název nebo přípona souboru",
|
||||||
|
"file_size": "Velikost souboru",
|
||||||
"filename": "Název souboru",
|
"filename": "Název souboru",
|
||||||
"filetype": "Typ souboru",
|
"filetype": "Typ souboru",
|
||||||
"filter": "Filtr",
|
"filter": "Filtr",
|
||||||
@@ -1119,7 +1144,6 @@
|
|||||||
"header_settings_field_validator_msg": "Hodnota nemůže být prázdná",
|
"header_settings_field_validator_msg": "Hodnota nemůže být prázdná",
|
||||||
"header_settings_header_name_input": "Název hlavičky",
|
"header_settings_header_name_input": "Název hlavičky",
|
||||||
"header_settings_header_value_input": "Hodnota hlavičky",
|
"header_settings_header_value_input": "Hodnota hlavičky",
|
||||||
"headers_settings_tile_subtitle": "Definice hlaviček proxy serveru, které má aplikace odesílat s každým síťovým požadavkem",
|
|
||||||
"headers_settings_tile_title": "Vlastní proxy hlavičky",
|
"headers_settings_tile_title": "Vlastní proxy hlavičky",
|
||||||
"hi_user": "Ahoj {name} ({email})",
|
"hi_user": "Ahoj {name} ({email})",
|
||||||
"hide_all_people": "Skrýt všechny lidi",
|
"hide_all_people": "Skrýt všechny lidi",
|
||||||
@@ -1240,6 +1264,7 @@
|
|||||||
"local_media_summary": "Souhrn místních médií",
|
"local_media_summary": "Souhrn místních médií",
|
||||||
"local_network": "Místní síť",
|
"local_network": "Místní síť",
|
||||||
"local_network_sheet_info": "Aplikace se při použití zadané sítě Wi-Fi připojí k serveru prostřednictvím tohoto URL",
|
"local_network_sheet_info": "Aplikace se při použití zadané sítě Wi-Fi připojí k serveru prostřednictvím tohoto URL",
|
||||||
|
"location": "Poloha",
|
||||||
"location_permission": "Oprávnění polohy",
|
"location_permission": "Oprávnění polohy",
|
||||||
"location_permission_content": "Aby bylo možné používat funkci automatického přepínání, potřebuje Immich oprávnění k přesné poloze, aby mohl přečíst název aktuální sítě Wi-Fi",
|
"location_permission_content": "Aby bylo možné používat funkci automatického přepínání, potřebuje Immich oprávnění k přesné poloze, aby mohl přečíst název aktuální sítě Wi-Fi",
|
||||||
"location_picker_choose_on_map": "Vybrat na mapě",
|
"location_picker_choose_on_map": "Vybrat na mapě",
|
||||||
@@ -1344,6 +1369,8 @@
|
|||||||
"minute": "Minuta",
|
"minute": "Minuta",
|
||||||
"minutes": "Minut",
|
"minutes": "Minut",
|
||||||
"missing": "Chybějící",
|
"missing": "Chybějící",
|
||||||
|
"mobile_app": "Mobilní aplikace",
|
||||||
|
"mobile_app_download_onboarding_note": "Stáhněte si doprovodnou mobilní aplikaci pomocí následujících možností",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"month": "Měsíc",
|
"month": "Měsíc",
|
||||||
"monthly_title_text_date_format": "LLLL y",
|
"monthly_title_text_date_format": "LLLL y",
|
||||||
@@ -1362,6 +1389,8 @@
|
|||||||
"my_albums": "Moje alba",
|
"my_albums": "Moje alba",
|
||||||
"name": "Jméno",
|
"name": "Jméno",
|
||||||
"name_or_nickname": "Jméno nebo přezdívka",
|
"name_or_nickname": "Jméno nebo přezdívka",
|
||||||
|
"navigate": "Navigovat",
|
||||||
|
"navigate_to_time": "Navigovat na čas",
|
||||||
"network_requirement_photos_upload": "Pro zálohování fotografií používat mobilní data",
|
"network_requirement_photos_upload": "Pro zálohování fotografií používat mobilní data",
|
||||||
"network_requirement_videos_upload": "Pro zálohování videí používat mobilní data",
|
"network_requirement_videos_upload": "Pro zálohování videí používat mobilní data",
|
||||||
"network_requirements": "Požadavky na síť",
|
"network_requirements": "Požadavky na síť",
|
||||||
@@ -1371,6 +1400,7 @@
|
|||||||
"never": "Nikdy",
|
"never": "Nikdy",
|
||||||
"new_album": "Nové album",
|
"new_album": "Nové album",
|
||||||
"new_api_key": "Nový API klíč",
|
"new_api_key": "Nový API klíč",
|
||||||
|
"new_date_range": "Nový rozsah dat",
|
||||||
"new_password": "Nové heslo",
|
"new_password": "Nové heslo",
|
||||||
"new_person": "Nová osoba",
|
"new_person": "Nová osoba",
|
||||||
"new_pin_code": "Nový PIN kód",
|
"new_pin_code": "Nový PIN kód",
|
||||||
@@ -1421,6 +1451,9 @@
|
|||||||
"notifications": "Oznámení",
|
"notifications": "Oznámení",
|
||||||
"notifications_setting_description": "Správa oznámení",
|
"notifications_setting_description": "Správa oznámení",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Obtainium konfigurátor",
|
||||||
|
"obtainium_configurator_instructions": "Pomocí Obtainia nainstalujte a aktualizujte aplikaci pro Android přímo z vydání na Immich GitHubu. Vytvořte API klíč a vyberte variantu pro vytvoření konfiguračního odkazu Obtainia",
|
||||||
|
"ocr": "OCR",
|
||||||
"official_immich_resources": "Oficiální zdroje Immich",
|
"official_immich_resources": "Oficiální zdroje Immich",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offset": "Posun",
|
"offset": "Posun",
|
||||||
@@ -1525,6 +1558,9 @@
|
|||||||
"play_memories": "Přehrát vzpomníky",
|
"play_memories": "Přehrát vzpomníky",
|
||||||
"play_motion_photo": "Přehrát pohybovou fotografii",
|
"play_motion_photo": "Přehrát pohybovou fotografii",
|
||||||
"play_or_pause_video": "Přehrát nebo pozastavit video",
|
"play_or_pause_video": "Přehrát nebo pozastavit video",
|
||||||
|
"play_original_video": "Přehrát původní video",
|
||||||
|
"play_original_video_setting_description": "Upřednostňujte přehrávání originálních videí před překódovanými videi. Pokud originální soubor není kompatibilní, nemusí se přehrávat správně.",
|
||||||
|
"play_transcoded_video": "Přehrát překódované video",
|
||||||
"please_auth_to_access": "Pro přístup se prosím ověřte",
|
"please_auth_to_access": "Pro přístup se prosím ověřte",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preferences_settings_subtitle": "Správa předvoleb aplikace",
|
"preferences_settings_subtitle": "Správa předvoleb aplikace",
|
||||||
@@ -1542,13 +1578,9 @@
|
|||||||
"privacy": "Soukromí",
|
"privacy": "Soukromí",
|
||||||
"profile": "Profil",
|
"profile": "Profil",
|
||||||
"profile_drawer_app_logs": "Logy",
|
"profile_drawer_app_logs": "Logy",
|
||||||
"profile_drawer_client_out_of_date_major": "Mobilní aplikace je zastaralá. Aktualizujte ji na nejnovější hlavní verzi.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Mobilní aplikace je zastaralá. Aktualizujte ji na nejnovější verzi.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální",
|
"profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Režim jen pro čtení. Ukončíte ho dlouhým podržením ikony avataru.",
|
"profile_drawer_readonly_mode": "Režim jen pro čtení. Ukončíte ho dlouhým podržením ikony avataru.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server je zastaralý. Aktualizujte na nejnovější hlavní verzi.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Server je zastaralý. Aktualizujte je na nejnovější verzi.",
|
|
||||||
"profile_image_of_user": "Profilový obrázek uživatele {user}",
|
"profile_image_of_user": "Profilový obrázek uživatele {user}",
|
||||||
"profile_picture_set": "Profilový obrázek nastaven.",
|
"profile_picture_set": "Profilový obrázek nastaven.",
|
||||||
"public_album": "Veřejné album",
|
"public_album": "Veřejné album",
|
||||||
@@ -1625,7 +1657,7 @@
|
|||||||
"remove_assets_album_confirmation": "Opravdu chcete z alba odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
|
"remove_assets_album_confirmation": "Opravdu chcete z alba odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
|
||||||
"remove_assets_shared_link_confirmation": "Opravdu chcete ze sdíleného odkazu odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
|
"remove_assets_shared_link_confirmation": "Opravdu chcete ze sdíleného odkazu odstranit {count, plural, one {# položku} few {# položky} other {# položek}}?",
|
||||||
"remove_assets_title": "Odstranit položky?",
|
"remove_assets_title": "Odstranit položky?",
|
||||||
"remove_custom_date_range": "Odstranit vlastní rozsah datumů",
|
"remove_custom_date_range": "Odstranit vlastní rozsah dat",
|
||||||
"remove_deleted_assets": "Odstranit offline soubory",
|
"remove_deleted_assets": "Odstranit offline soubory",
|
||||||
"remove_from_album": "Odstranit z alba",
|
"remove_from_album": "Odstranit z alba",
|
||||||
"remove_from_album_action_prompt": "{count} odstraněných z alba",
|
"remove_from_album_action_prompt": "{count} odstraněných z alba",
|
||||||
@@ -1665,6 +1697,7 @@
|
|||||||
"reset_sqlite_confirmation": "Jste si jisti, že chcete obnovit databázi SQLite? Pro opětovnou synchronizaci dat se budete muset odhlásit a znovu přihlásit",
|
"reset_sqlite_confirmation": "Jste si jisti, že chcete obnovit databázi SQLite? Pro opětovnou synchronizaci dat se budete muset odhlásit a znovu přihlásit",
|
||||||
"reset_sqlite_success": "Obnovení SQLite databáze proběhlo úspěšně",
|
"reset_sqlite_success": "Obnovení SQLite databáze proběhlo úspěšně",
|
||||||
"reset_to_default": "Obnovit výchozí nastavení",
|
"reset_to_default": "Obnovit výchozí nastavení",
|
||||||
|
"resolution": "Rozlišení",
|
||||||
"resolve_duplicates": "Vyřešit duplicity",
|
"resolve_duplicates": "Vyřešit duplicity",
|
||||||
"resolved_all_duplicates": "Vyřešeny všechny duplicity",
|
"resolved_all_duplicates": "Vyřešeny všechny duplicity",
|
||||||
"restore": "Obnovit",
|
"restore": "Obnovit",
|
||||||
@@ -1683,6 +1716,7 @@
|
|||||||
"running": "Probíhá",
|
"running": "Probíhá",
|
||||||
"save": "Uložit",
|
"save": "Uložit",
|
||||||
"save_to_gallery": "Uložit do galerie",
|
"save_to_gallery": "Uložit do galerie",
|
||||||
|
"saved": "Uloženo",
|
||||||
"saved_api_key": "API klíč uložen",
|
"saved_api_key": "API klíč uložen",
|
||||||
"saved_profile": "Profil uložen",
|
"saved_profile": "Profil uložen",
|
||||||
"saved_settings": "Nastavení uloženo",
|
"saved_settings": "Nastavení uloženo",
|
||||||
@@ -1699,6 +1733,9 @@
|
|||||||
"search_by_description_example": "Pěší turistika v Sapě",
|
"search_by_description_example": "Pěší turistika v Sapě",
|
||||||
"search_by_filename": "Vyhledávání podle názvu nebo přípony souboru",
|
"search_by_filename": "Vyhledávání podle názvu nebo přípony souboru",
|
||||||
"search_by_filename_example": "např. IMG_1234.JPG nebo PNG",
|
"search_by_filename_example": "např. IMG_1234.JPG nebo PNG",
|
||||||
|
"search_by_ocr": "Hledat pomocí OCR",
|
||||||
|
"search_by_ocr_example": "Latte",
|
||||||
|
"search_camera_lens_model": "Vyhledat model objektivu...",
|
||||||
"search_camera_make": "Vyhledat výrobce fotoaparátu...",
|
"search_camera_make": "Vyhledat výrobce fotoaparátu...",
|
||||||
"search_camera_model": "Vyhledat model fotoaparátu...",
|
"search_camera_model": "Vyhledat model fotoaparátu...",
|
||||||
"search_city": "Vyhledat město...",
|
"search_city": "Vyhledat město...",
|
||||||
@@ -1707,7 +1744,7 @@
|
|||||||
"search_filter_camera_title": "Výběr typu fotoaparátu",
|
"search_filter_camera_title": "Výběr typu fotoaparátu",
|
||||||
"search_filter_date": "Datum",
|
"search_filter_date": "Datum",
|
||||||
"search_filter_date_interval": "{start} až {end}",
|
"search_filter_date_interval": "{start} až {end}",
|
||||||
"search_filter_date_title": "Výběr rozmezí dat",
|
"search_filter_date_title": "Výběr rozsahu dat",
|
||||||
"search_filter_display_option_not_in_album": "Není v albu",
|
"search_filter_display_option_not_in_album": "Není v albu",
|
||||||
"search_filter_display_options": "Možnost zobrazení",
|
"search_filter_display_options": "Možnost zobrazení",
|
||||||
"search_filter_filename": "Vyhledávat podle názvu souboru",
|
"search_filter_filename": "Vyhledávat podle názvu souboru",
|
||||||
@@ -1715,6 +1752,7 @@
|
|||||||
"search_filter_location_title": "Výběr polohy",
|
"search_filter_location_title": "Výběr polohy",
|
||||||
"search_filter_media_type": "Typ média",
|
"search_filter_media_type": "Typ média",
|
||||||
"search_filter_media_type_title": "Výběr typu média",
|
"search_filter_media_type_title": "Výběr typu média",
|
||||||
|
"search_filter_ocr": "Hledat pomocí OCR",
|
||||||
"search_filter_people_title": "Výběr lidí",
|
"search_filter_people_title": "Výběr lidí",
|
||||||
"search_for": "Vyhledat",
|
"search_for": "Vyhledat",
|
||||||
"search_for_existing_person": "Vyhledat existující osobu",
|
"search_for_existing_person": "Vyhledat existující osobu",
|
||||||
@@ -1777,6 +1815,7 @@
|
|||||||
"server_online": "Server online",
|
"server_online": "Server online",
|
||||||
"server_privacy": "Ochrana soukromí serveru",
|
"server_privacy": "Ochrana soukromí serveru",
|
||||||
"server_stats": "Statistiky serveru",
|
"server_stats": "Statistiky serveru",
|
||||||
|
"server_update_available": "K dispozici je aktualizace serveru",
|
||||||
"server_version": "Verze serveru",
|
"server_version": "Verze serveru",
|
||||||
"set": "Nastavit",
|
"set": "Nastavit",
|
||||||
"set_as_album_cover": "Nastavit jako obal alba",
|
"set_as_album_cover": "Nastavit jako obal alba",
|
||||||
@@ -1805,6 +1844,8 @@
|
|||||||
"setting_notifications_subtitle": "Přizpůsobení předvoleb oznámení",
|
"setting_notifications_subtitle": "Přizpůsobení předvoleb oznámení",
|
||||||
"setting_notifications_total_progress_subtitle": "Celkový průběh nahrání (hotovo/celkově)",
|
"setting_notifications_total_progress_subtitle": "Celkový průběh nahrání (hotovo/celkově)",
|
||||||
"setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí",
|
"setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Automaticky spustit přehrávání videí při jejich otevření",
|
||||||
|
"setting_video_viewer_auto_play_title": "Automatické přehrávání videí",
|
||||||
"setting_video_viewer_looping_title": "Smyčka",
|
"setting_video_viewer_looping_title": "Smyčka",
|
||||||
"setting_video_viewer_original_video_subtitle": "Při streamování videa ze serveru přehrávat originál, i když je k dispozici překódovaná verze. Může vést k bufferování. Videa dostupná lokálně se přehrávají v původní kvalitě bez ohledu na toto nastavení.",
|
"setting_video_viewer_original_video_subtitle": "Při streamování videa ze serveru přehrávat originál, i když je k dispozici překódovaná verze. Může vést k bufferování. Videa dostupná lokálně se přehrávají v původní kvalitě bez ohledu na toto nastavení.",
|
||||||
"setting_video_viewer_original_video_title": "Vynutit původní video",
|
"setting_video_viewer_original_video_title": "Vynutit původní video",
|
||||||
@@ -1964,7 +2005,7 @@
|
|||||||
"tag_updated": "Aktualizována značka: {tag}",
|
"tag_updated": "Aktualizována značka: {tag}",
|
||||||
"tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}",
|
"tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}",
|
||||||
"tags": "Značky",
|
"tags": "Značky",
|
||||||
"tap_to_run_job": "Klepnutím na spustíte úlohu",
|
"tap_to_run_job": "Klepnutím spustíte úlohu",
|
||||||
"template": "Šablona",
|
"template": "Šablona",
|
||||||
"theme": "Motiv",
|
"theme": "Motiv",
|
||||||
"theme_selection": "Výběr motivu",
|
"theme_selection": "Výběr motivu",
|
||||||
@@ -1984,6 +2025,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Povolení třístupňového načítání",
|
"theme_setting_three_stage_loading_title": "Povolení třístupňového načítání",
|
||||||
"they_will_be_merged_together": "Budou sloučeny dohromady",
|
"they_will_be_merged_together": "Budou sloučeny dohromady",
|
||||||
"third_party_resources": "Zdroje třetích stran",
|
"third_party_resources": "Zdroje třetích stran",
|
||||||
|
"time": "Čas",
|
||||||
"time_based_memories": "Časové vzpomínky",
|
"time_based_memories": "Časové vzpomínky",
|
||||||
"timeline": "Časová osa",
|
"timeline": "Časová osa",
|
||||||
"timezone": "Časové pásmo",
|
"timezone": "Časové pásmo",
|
||||||
@@ -2016,6 +2058,7 @@
|
|||||||
"troubleshoot": "Diagnostika",
|
"troubleshoot": "Diagnostika",
|
||||||
"type": "Typ",
|
"type": "Typ",
|
||||||
"unable_to_change_pin_code": "Nelze změnit PIN kód",
|
"unable_to_change_pin_code": "Nelze změnit PIN kód",
|
||||||
|
"unable_to_check_version": "Nepodařilo se zjistit verzi aplikace nebo serveru",
|
||||||
"unable_to_setup_pin_code": "Nelze nastavit PIN kód",
|
"unable_to_setup_pin_code": "Nelze nastavit PIN kód",
|
||||||
"unarchive": "Odebrat z archivu",
|
"unarchive": "Odebrat z archivu",
|
||||||
"unarchive_action_prompt": "{count} odstraněných z archivu",
|
"unarchive_action_prompt": "{count} odstraněných z archivu",
|
||||||
|
|||||||
91
i18n/da.json
91
i18n/da.json
@@ -6,7 +6,7 @@
|
|||||||
"action": "Handling",
|
"action": "Handling",
|
||||||
"action_common_update": "Opdater",
|
"action_common_update": "Opdater",
|
||||||
"actions": "Handlinger",
|
"actions": "Handlinger",
|
||||||
"active": "Aktive",
|
"active": "Aktiv",
|
||||||
"activity": "Aktivitet",
|
"activity": "Aktivitet",
|
||||||
"activity_changed": "Aktivitet er {enabled, select, true {aktiveret} other {deaktiveret}}",
|
"activity_changed": "Aktivitet er {enabled, select, true {aktiveret} other {deaktiveret}}",
|
||||||
"add": "Tilføj",
|
"add": "Tilføj",
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Tilføj til albummer",
|
"add_to_albums": "Tilføj til albummer",
|
||||||
"add_to_albums_count": "Tilføj til albummer({count})",
|
"add_to_albums_count": "Tilføj til albummer({count})",
|
||||||
"add_to_shared_album": "Tilføj til delt album",
|
"add_to_shared_album": "Tilføj til delt album",
|
||||||
|
"add_upload_to_stack": "Tilføj upload til stack",
|
||||||
"add_url": "Tilføj URL",
|
"add_url": "Tilføj URL",
|
||||||
"added_to_archive": "Tilføjet til arkiv",
|
"added_to_archive": "Tilføjet til arkiv",
|
||||||
"added_to_favorites": "Tilføjet til favoritter",
|
"added_to_favorites": "Tilføjet til favoritter",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"library_settings_description": "Administrer eksterne biblioteksindstillinger",
|
"library_settings_description": "Administrer eksterne biblioteksindstillinger",
|
||||||
"library_tasks_description": "Scan eksterne biblioteker for nye og/eller ændrede mediefiler",
|
"library_tasks_description": "Scan eksterne biblioteker for nye og/eller ændrede mediefiler",
|
||||||
"library_watching_enable_description": "Overvåg eksterne biblioteker for filændringer",
|
"library_watching_enable_description": "Overvåg eksterne biblioteker for filændringer",
|
||||||
"library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)",
|
"library_watching_settings": "Biblioteks overvågning [EKSPERIMENTEL]",
|
||||||
"library_watching_settings_description": "Tjek automatisk for ændrede filer",
|
"library_watching_settings_description": "Tjek automatisk for ændrede filer",
|
||||||
"logging_enable_description": "Aktiver logning",
|
"logging_enable_description": "Aktiver logning",
|
||||||
"logging_level_description": "Når slået til, hvilket logniveau, der skal bruges.",
|
"logging_level_description": "Når slået til, hvilket logniveau, der skal bruges.",
|
||||||
@@ -153,6 +154,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "Minimum tillidsscore for et ansigt, der kan registreres fra 0-1. Lavere værdier vil registrere flere ansigter, men kan resultere i falske positiver.",
|
"machine_learning_min_detection_score_description": "Minimum tillidsscore for et ansigt, der kan registreres fra 0-1. Lavere værdier vil registrere flere ansigter, men kan resultere i falske positiver.",
|
||||||
"machine_learning_min_recognized_faces": "Minimum genkendte ansigter",
|
"machine_learning_min_recognized_faces": "Minimum genkendte ansigter",
|
||||||
"machine_learning_min_recognized_faces_description": "Minimumsantallet af genkendte ansigter for en person, før denne person bliver oprettet. At øge dette gør ansigtsgenkendelse mere præcis på bekostning af at øge chancen for, at et ansigt ikke er tildelt en person.",
|
"machine_learning_min_recognized_faces_description": "Minimumsantallet af genkendte ansigter for en person, før denne person bliver oprettet. At øge dette gør ansigtsgenkendelse mere præcis på bekostning af at øge chancen for, at et ansigt ikke er tildelt en person.",
|
||||||
|
"machine_learning_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Brug maskinlæring til at genkende tekst i billeder",
|
||||||
|
"machine_learning_ocr_enabled": "Aktiver OCR",
|
||||||
|
"machine_learning_ocr_enabled_description": "Hvis deaktiveret, vil tekstgenkendelse ikke blive udført på billederne.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Maksimum opløsning",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Forhåndsvisninger over denne opløsning ændres i størrelse, mens billedformatet bevares. Højere værdier er mere nøjagtige, men tager længere tid at behandle og bruger mere hukommelse.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Minimum detektionsscore",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Minimums konfidensscore for tekst, der skal detekteres, fra 0-1. Lavere værdier vil detektere mere tekst, men kan resultere i falsk positiver.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Minimum genkendelsesscore",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Minimum konfidensscore for genkendelse af registreret tekst er fra 0-1. Lavere værdier vil genkende mere tekst, men kan resultere i falsk positiver.",
|
||||||
|
"machine_learning_ocr_model": "OCR model",
|
||||||
|
"machine_learning_ocr_model_description": "Server modeller er mere præcise end mobil modeller, men tager længer tid at processere og bruger mere hukommelse.",
|
||||||
"machine_learning_settings": "Maskinlæringsindstillinger",
|
"machine_learning_settings": "Maskinlæringsindstillinger",
|
||||||
"machine_learning_settings_description": "Administrer maskinlæringsfunktioner og indstillinger",
|
"machine_learning_settings_description": "Administrer maskinlæringsfunktioner og indstillinger",
|
||||||
"machine_learning_smart_search": "Smart søgning",
|
"machine_learning_smart_search": "Smart søgning",
|
||||||
@@ -210,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Ignorér TLS-certifikatgodkendelsesfejl (ikke anbefalet)",
|
"notification_email_ignore_certificate_errors_description": "Ignorér TLS-certifikatgodkendelsesfejl (ikke anbefalet)",
|
||||||
"notification_email_password_description": "Adgangskode til brug ved autentificering med e-mailserveren",
|
"notification_email_password_description": "Adgangskode til brug ved autentificering med e-mailserveren",
|
||||||
"notification_email_port_description": "Emailserverens port (fx 25, 465 eller 587)",
|
"notification_email_port_description": "Emailserverens port (fx 25, 465 eller 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Brug SMTPS (SMTP over TLS)",
|
||||||
"notification_email_sent_test_email_button": "Send test-email og gem",
|
"notification_email_sent_test_email_button": "Send test-email og gem",
|
||||||
"notification_email_setting_description": "Indstillinger for sending af emailnotifikationer",
|
"notification_email_setting_description": "Indstillinger for sending af emailnotifikationer",
|
||||||
"notification_email_test_email": "Send test-email",
|
"notification_email_test_email": "Send test-email",
|
||||||
@@ -242,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Kvote i GiB som bruges, når der ikke bliver oplyst en fordring.",
|
"oauth_storage_quota_default_description": "Kvote i GiB som bruges, når der ikke bliver oplyst en fordring.",
|
||||||
"oauth_timeout": "Forespørgslen udløb",
|
"oauth_timeout": "Forespørgslen udløb",
|
||||||
"oauth_timeout_description": "Udløbstid for forespørgsel i milisekunder",
|
"oauth_timeout_description": "Udløbstid for forespørgsel i milisekunder",
|
||||||
|
"ocr_job_description": "Brug maskinlæring til at genkende tekst i billeder",
|
||||||
"password_enable_description": "Log ind med email og adgangskode",
|
"password_enable_description": "Log ind med email og adgangskode",
|
||||||
"password_settings": "Adgangskodelogin",
|
"password_settings": "Adgangskodelogin",
|
||||||
"password_settings_description": "Administrer indstillinger for adgangskodelogin",
|
"password_settings_description": "Administrer indstillinger for adgangskodelogin",
|
||||||
@@ -332,7 +348,7 @@
|
|||||||
"transcoding_max_b_frames": "Maksimum B-frames",
|
"transcoding_max_b_frames": "Maksimum B-frames",
|
||||||
"transcoding_max_b_frames_description": "Højere værdier forbedrer kompressionseffektivitet, men kan gøre indkodning langsommere. Er måske ikke kompatibelt med hardware-acceleration på ældre enheder. 0 slår B-frames fra, mens -1 sætter denne værdi automatisk.",
|
"transcoding_max_b_frames_description": "Højere værdier forbedrer kompressionseffektivitet, men kan gøre indkodning langsommere. Er måske ikke kompatibelt med hardware-acceleration på ældre enheder. 0 slår B-frames fra, mens -1 sætter denne værdi automatisk.",
|
||||||
"transcoding_max_bitrate": "Maksimal bitrate",
|
"transcoding_max_bitrate": "Maksimal bitrate",
|
||||||
"transcoding_max_bitrate_description": "At sætte en maksmimal bitrate kan gøre filstørrelserne mere forudsigelige med et lille tab i kvalitet. Ved 720p er almindelige værdier 2600 kbit/s for VP9 eller HEVC, eller 4500 kbit/s for H.264. Slået fra hvis sat til 0.",
|
"transcoding_max_bitrate_description": "Indstilling af en maksimal bitrate kan gøre filstørrelser mere forudsigelige, men med et mindre fald i kvaliteten. Ved 720p er typiske værdier 2600 kbit/s for VP9 eller HEVC eller 4500 kbit/s for H.264. Deaktiveret, hvis den er indstillet til 0. Når der ikke er angivet nogen enhed, antages k (for kbit/s); derfor er 5000, 5000k og 5M (for Mbit/s) ækvivalente.",
|
||||||
"transcoding_max_keyframe_interval": "Maksimal keyframe-interval",
|
"transcoding_max_keyframe_interval": "Maksimal keyframe-interval",
|
||||||
"transcoding_max_keyframe_interval_description": "Sætter den maksimale frameafstand mellem keyframes. Lavere værdier forringer kompressionseffektiviteten, men forbedrer søgetider og kan forbedre kvaliteten i scener med hurtig bevægelse. 0 sætter denne værdi automatisk.",
|
"transcoding_max_keyframe_interval_description": "Sætter den maksimale frameafstand mellem keyframes. Lavere værdier forringer kompressionseffektiviteten, men forbedrer søgetider og kan forbedre kvaliteten i scener med hurtig bevægelse. 0 sætter denne værdi automatisk.",
|
||||||
"transcoding_optimal_description": "Videoer højere end målopløsningen eller ikke i et godkendt format",
|
"transcoding_optimal_description": "Videoer højere end målopløsningen eller ikke i et godkendt format",
|
||||||
@@ -395,17 +411,17 @@
|
|||||||
"admin_password": "Administratoradgangskode",
|
"admin_password": "Administratoradgangskode",
|
||||||
"administration": "Administration",
|
"administration": "Administration",
|
||||||
"advanced": "Avanceret",
|
"advanced": "Avanceret",
|
||||||
"advanced_settings_enable_alternate_media_filter_subtitle": "Brug denne valgmulighed for at filtrere media under synkronisering baseret på alternative kriterier. Prøv kun denne hvis du har problemer med at appen ikke opdager alle albums.",
|
"advanced_settings_enable_alternate_media_filter_subtitle": "Brug denne valgmulighed for at filtrere media under synkronisering baseret på alternative kriterier. Prøv kun denne, hvis du har problemer med, at appen ikke opdager alle albums.",
|
||||||
"advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTEL] Brug alternativ enheds album synkroniserings filter",
|
"advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTEL] Brug alternativ enheds album synkroniserings filter",
|
||||||
"advanced_settings_log_level_title": "Logniveau: {level}",
|
"advanced_settings_log_level_title": "Logniveau: {level}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Nogle enheder er meget lang tid om at indlæse miniaturebilleder af lokale elementer. Aktiver denne indstilling for at indlæse elementer fra serveren i stedet.",
|
"advanced_settings_prefer_remote_subtitle": "Nogle enheder er meget lang tid om at indlæse miniaturebilleder af lokale elementer. Aktiver denne indstilling for at indlæse elementer fra serveren i stedet.",
|
||||||
"advanced_settings_prefer_remote_title": "Foretræk elementer på serveren",
|
"advanced_settings_prefer_remote_title": "Foretræk elementer på serveren",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Definer proxy headers Immich skal sende med hver netværks forespørgsel",
|
"advanced_settings_proxy_headers_subtitle": "Definer proxy headers Immich skal sende med hver netværks forespørgsel",
|
||||||
"advanced_settings_proxy_headers_title": "Proxy headere",
|
"advanced_settings_proxy_headers_title": "Tilpasset proxy headere [EKSPERIMENTALT]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Aktiverer skrivebeskyttet tilstand, hvor billederne alene kan vises. Ting som at vælge flere billeder, dele, caste og slette er alle deaktiveret. Aktiver skrivebeskyttet tilstand via en bruger avatar fra hovedskærmen",
|
"advanced_settings_readonly_mode_subtitle": "Aktiverer skrivebeskyttet tilstand, hvor billederne alene kan vises. Ting som at vælge flere billeder, dele, caste og slette er alle deaktiveret. Aktiver skrivebeskyttet tilstand via en bruger avatar fra hovedskærmen",
|
||||||
"advanced_settings_readonly_mode_title": "Skrivebeskyttet tilstand",
|
"advanced_settings_readonly_mode_title": "Skrivebeskyttet tilstand",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Spring verificering af SSL-certifikat over for serverens endelokation. Kræves for selvsignerede certifikater.",
|
"advanced_settings_self_signed_ssl_subtitle": "Spring verificering af SSL-certifikat over for serverens endelokation. Kræves for selvsignerede certifikater.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Tillad selvsignerede certifikater",
|
"advanced_settings_self_signed_ssl_title": "Tillad selvsignerede SSL certifikater [EKSPERIMENTALT]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Slet eller gendan automatisk en mediefil på denne enhed, når denne handling foretages på Immich webinterface",
|
"advanced_settings_sync_remote_deletions_subtitle": "Slet eller gendan automatisk en mediefil på denne enhed, når denne handling foretages på Immich webinterface",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Synkroniser fjernsletninger [EKSPERIMENTELT]",
|
"advanced_settings_sync_remote_deletions_title": "Synkroniser fjernsletninger [EKSPERIMENTELT]",
|
||||||
"advanced_settings_tile_subtitle": "Avancerede brugerindstillinger",
|
"advanced_settings_tile_subtitle": "Avancerede brugerindstillinger",
|
||||||
@@ -465,10 +481,14 @@
|
|||||||
"api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.",
|
"api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.",
|
||||||
"api_key_empty": "Din API-nøgle-navn burde ikke være tom",
|
"api_key_empty": "Din API-nøgle-navn burde ikke være tom",
|
||||||
"api_keys": "API-nøgler",
|
"api_keys": "API-nøgler",
|
||||||
|
"app_architecture_variant": "Variant (Arkitektur)",
|
||||||
"app_bar_signout_dialog_content": "Er du sikker på, du vil logge ud?",
|
"app_bar_signout_dialog_content": "Er du sikker på, du vil logge ud?",
|
||||||
"app_bar_signout_dialog_ok": "Ja",
|
"app_bar_signout_dialog_ok": "Ja",
|
||||||
"app_bar_signout_dialog_title": "Log ud",
|
"app_bar_signout_dialog_title": "Log ud",
|
||||||
|
"app_download_links": "App Download Links",
|
||||||
"app_settings": "Appindstillinger",
|
"app_settings": "Appindstillinger",
|
||||||
|
"app_stores": "App Butikker",
|
||||||
|
"app_update_available": "App opdatering er tilgængelig",
|
||||||
"appears_in": "Optræder i",
|
"appears_in": "Optræder i",
|
||||||
"apply_count": "Brug ({count, number})",
|
"apply_count": "Brug ({count, number})",
|
||||||
"archive": "Arkiv",
|
"archive": "Arkiv",
|
||||||
@@ -552,6 +572,7 @@
|
|||||||
"backup_albums_sync": "Synkronisering af backupalbums",
|
"backup_albums_sync": "Synkronisering af backupalbums",
|
||||||
"backup_all": "Alt",
|
"backup_all": "Alt",
|
||||||
"backup_background_service_backup_failed_message": "Sikkerhedskopiering af elementer fejlede. Forsøger igen…",
|
"backup_background_service_backup_failed_message": "Sikkerhedskopiering af elementer fejlede. Forsøger igen…",
|
||||||
|
"backup_background_service_complete_notification": "Sikkerhedskopiering af aktiver fuldført",
|
||||||
"backup_background_service_connection_failed_message": "Forbindelsen til serveren blev tabt. Forsøger igen…",
|
"backup_background_service_connection_failed_message": "Forbindelsen til serveren blev tabt. Forsøger igen…",
|
||||||
"backup_background_service_current_upload_notification": "Uploader {filename}",
|
"backup_background_service_current_upload_notification": "Uploader {filename}",
|
||||||
"backup_background_service_default_notification": "Søger efter nye elementer…",
|
"backup_background_service_default_notification": "Søger efter nye elementer…",
|
||||||
@@ -651,7 +672,7 @@
|
|||||||
"cast": "Caste",
|
"cast": "Caste",
|
||||||
"cast_description": "Konfigurer tilgængelige cast destinationer",
|
"cast_description": "Konfigurer tilgængelige cast destinationer",
|
||||||
"change_date": "Ændr dato",
|
"change_date": "Ændr dato",
|
||||||
"change_description": "Beskrivelse af ændringer",
|
"change_description": "Ændr beskrivelse",
|
||||||
"change_display_order": "Ændrer visningsrækkefølge",
|
"change_display_order": "Ændrer visningsrækkefølge",
|
||||||
"change_expiration_time": "Ændr udløbstidspunkt",
|
"change_expiration_time": "Ændr udløbstidspunkt",
|
||||||
"change_location": "Ændr sted",
|
"change_location": "Ændr sted",
|
||||||
@@ -661,6 +682,8 @@
|
|||||||
"change_password_description": "Dette er enten første gang du tilmelder dig, eller en ændring af kodeordet blev bestilt. Indtast dit nye kodeord herunder.",
|
"change_password_description": "Dette er enten første gang du tilmelder dig, eller en ændring af kodeordet blev bestilt. Indtast dit nye kodeord herunder.",
|
||||||
"change_password_form_confirm_password": "Bekræft kodeord",
|
"change_password_form_confirm_password": "Bekræft kodeord",
|
||||||
"change_password_form_description": "Hej {name},\n\nDette er enten første gang du logger ind eller også er der lavet en anmodning om at ændre dit kodeord. Indtast venligst et nyt kodeord nedenfor.",
|
"change_password_form_description": "Hej {name},\n\nDette er enten første gang du logger ind eller også er der lavet en anmodning om at ændre dit kodeord. Indtast venligst et nyt kodeord nedenfor.",
|
||||||
|
"change_password_form_log_out": "Log ud af alle andre enheder",
|
||||||
|
"change_password_form_log_out_description": "Det er anbefalet at logge ud af alle andre enheder",
|
||||||
"change_password_form_new_password": "Nyt kodeord",
|
"change_password_form_new_password": "Nyt kodeord",
|
||||||
"change_password_form_password_mismatch": "Kodeord er ikke ens",
|
"change_password_form_password_mismatch": "Kodeord er ikke ens",
|
||||||
"change_password_form_reenter_new_password": "Gentag nyt kodeord",
|
"change_password_form_reenter_new_password": "Gentag nyt kodeord",
|
||||||
@@ -687,8 +710,8 @@
|
|||||||
"client_cert_import_success_msg": "Klient certifikat er importeret",
|
"client_cert_import_success_msg": "Klient certifikat er importeret",
|
||||||
"client_cert_invalid_msg": "Invalid certifikat fil eller forkert adgangskode",
|
"client_cert_invalid_msg": "Invalid certifikat fil eller forkert adgangskode",
|
||||||
"client_cert_remove_msg": "Klient certifikat er fjernet",
|
"client_cert_remove_msg": "Klient certifikat er fjernet",
|
||||||
"client_cert_subtitle": "Supportere kin PKCS12 (.p12, .pfx) Certifikat importering/fjernelse er kun tilgængeligt før login",
|
"client_cert_subtitle": "Supportere kun PKCS12 (.p12, .pfx) format. Certifikat importering/fjernelse er kun tilgængeligt før login",
|
||||||
"client_cert_title": "SSL Klient Certifikat",
|
"client_cert_title": "SSL Klient Certifikat [EKSPERIMENTAL]",
|
||||||
"clockwise": "Med uret",
|
"clockwise": "Med uret",
|
||||||
"close": "Luk",
|
"close": "Luk",
|
||||||
"collapse": "Klap sammen",
|
"collapse": "Klap sammen",
|
||||||
@@ -700,7 +723,6 @@
|
|||||||
"comments_and_likes": "Kommentarer og likes",
|
"comments_and_likes": "Kommentarer og likes",
|
||||||
"comments_are_disabled": "Kommentarer er slået fra",
|
"comments_are_disabled": "Kommentarer er slået fra",
|
||||||
"common_create_new_album": "Opret et nyt album",
|
"common_create_new_album": "Opret et nyt album",
|
||||||
"common_server_error": "Tjek din internetforbindelse, sørg for at serveren er tilgængelig og at app- og serversioner er kompatible.",
|
|
||||||
"completed": "Fuldført",
|
"completed": "Fuldført",
|
||||||
"confirm": "Bekræft",
|
"confirm": "Bekræft",
|
||||||
"confirm_admin_password": "Bekræft administratoradgangskode",
|
"confirm_admin_password": "Bekræft administratoradgangskode",
|
||||||
@@ -739,6 +761,7 @@
|
|||||||
"create": "Opret",
|
"create": "Opret",
|
||||||
"create_album": "Opret album",
|
"create_album": "Opret album",
|
||||||
"create_album_page_untitled": "Uden titel",
|
"create_album_page_untitled": "Uden titel",
|
||||||
|
"create_api_key": "Opret API nøgle",
|
||||||
"create_library": "Opret bibliotek",
|
"create_library": "Opret bibliotek",
|
||||||
"create_link": "Opret link",
|
"create_link": "Opret link",
|
||||||
"create_link_to_share": "Opret link for at dele",
|
"create_link_to_share": "Opret link for at dele",
|
||||||
@@ -768,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
||||||
"dark": "Mørk",
|
"dark": "Mørk",
|
||||||
"dark_theme": "Skift til mørkt tema",
|
"dark_theme": "Skift til mørkt tema",
|
||||||
|
"date": "Dato",
|
||||||
"date_after": "Dato efter",
|
"date_after": "Dato efter",
|
||||||
"date_and_time": "Dato og klokkeslæt",
|
"date_and_time": "Dato og klokkeslæt",
|
||||||
"date_before": "Dato før",
|
"date_before": "Dato før",
|
||||||
@@ -882,7 +906,6 @@
|
|||||||
"edit_tag": "Rediger tag",
|
"edit_tag": "Rediger tag",
|
||||||
"edit_title": "Redigér titel",
|
"edit_title": "Redigér titel",
|
||||||
"edit_user": "Redigér bruger",
|
"edit_user": "Redigér bruger",
|
||||||
"edited": "Redigeret",
|
|
||||||
"editor": "Redaktør",
|
"editor": "Redaktør",
|
||||||
"editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt",
|
"editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt",
|
||||||
"editor_close_without_save_title": "Luk editor?",
|
"editor_close_without_save_title": "Luk editor?",
|
||||||
@@ -1038,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Fejl ved opdatering af beskrivelsen",
|
"exif_bottom_sheet_description_error": "Fejl ved opdatering af beskrivelsen",
|
||||||
"exif_bottom_sheet_details": "DETALJER",
|
"exif_bottom_sheet_details": "DETALJER",
|
||||||
"exif_bottom_sheet_location": "LOKATION",
|
"exif_bottom_sheet_location": "LOKATION",
|
||||||
|
"exif_bottom_sheet_no_description": "Ingen beskrivelse",
|
||||||
"exif_bottom_sheet_people": "PERSONER",
|
"exif_bottom_sheet_people": "PERSONER",
|
||||||
"exif_bottom_sheet_person_add_person": "Tilføj navn",
|
"exif_bottom_sheet_person_add_person": "Tilføj navn",
|
||||||
"exit_slideshow": "Afslut slideshow",
|
"exit_slideshow": "Afslut slideshow",
|
||||||
@@ -1076,6 +1100,7 @@
|
|||||||
"features_setting_description": "Administrer app-funktioner",
|
"features_setting_description": "Administrer app-funktioner",
|
||||||
"file_name": "Filnavn",
|
"file_name": "Filnavn",
|
||||||
"file_name_or_extension": "Filnavn eller filtype",
|
"file_name_or_extension": "Filnavn eller filtype",
|
||||||
|
"file_size": "Fil størrelse",
|
||||||
"filename": "Filnavn",
|
"filename": "Filnavn",
|
||||||
"filetype": "Filtype",
|
"filetype": "Filtype",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
@@ -1115,11 +1140,10 @@
|
|||||||
"hash_asset": "Hash objekter",
|
"hash_asset": "Hash objekter",
|
||||||
"hashed_assets": "Hashede objekter",
|
"hashed_assets": "Hashede objekter",
|
||||||
"hashing": "Hasher",
|
"hashing": "Hasher",
|
||||||
"header_settings_add_header_tip": "Tilføj Header",
|
"header_settings_add_header_tip": "Tilføj header",
|
||||||
"header_settings_field_validator_msg": "Værdi kan ikke være tom",
|
"header_settings_field_validator_msg": "Værdi kan ikke være tom",
|
||||||
"header_settings_header_name_input": "Header navn",
|
"header_settings_header_name_input": "Header navn",
|
||||||
"header_settings_header_value_input": "Header værdi",
|
"header_settings_header_value_input": "Header værdi",
|
||||||
"headers_settings_tile_subtitle": "Definer proxy headers appen skal sende med hver netværks forespørgsel",
|
|
||||||
"headers_settings_tile_title": "Brugerdefineret proxy headers",
|
"headers_settings_tile_title": "Brugerdefineret proxy headers",
|
||||||
"hi_user": "Hej {name} ({email})",
|
"hi_user": "Hej {name} ({email})",
|
||||||
"hide_all_people": "Skjul alle personer",
|
"hide_all_people": "Skjul alle personer",
|
||||||
@@ -1240,6 +1264,7 @@
|
|||||||
"local_media_summary": "Opsummering af lokale media",
|
"local_media_summary": "Opsummering af lokale media",
|
||||||
"local_network": "Lokalt netværk",
|
"local_network": "Lokalt netværk",
|
||||||
"local_network_sheet_info": "Appen vil oprette forbindelse til serveren via denne URL, når du bruger det angivne WiFi-netværk",
|
"local_network_sheet_info": "Appen vil oprette forbindelse til serveren via denne URL, når du bruger det angivne WiFi-netværk",
|
||||||
|
"location": "Lokation",
|
||||||
"location_permission": "Tilladelse til placering",
|
"location_permission": "Tilladelse til placering",
|
||||||
"location_permission_content": "For automatisk at skifte netværk, skal Immich *altid* have præcis placeringsadgang, så appen kan læse Wi-Fi netværkets navn",
|
"location_permission_content": "For automatisk at skifte netværk, skal Immich *altid* have præcis placeringsadgang, så appen kan læse Wi-Fi netværkets navn",
|
||||||
"location_picker_choose_on_map": "Vælg på kort",
|
"location_picker_choose_on_map": "Vælg på kort",
|
||||||
@@ -1344,33 +1369,38 @@
|
|||||||
"minute": "Minut",
|
"minute": "Minut",
|
||||||
"minutes": "Minutter",
|
"minutes": "Minutter",
|
||||||
"missing": "Mangler",
|
"missing": "Mangler",
|
||||||
|
"mobile_app": "Mobil App",
|
||||||
|
"mobile_app_download_onboarding_note": "Hent den tilhørende mobilapp via en af følgende muligheder",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"month": "Måned",
|
"month": "Måned",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM å",
|
||||||
"more": "Mere",
|
"more": "Mere",
|
||||||
"move": "Flyt",
|
"move": "Flyt",
|
||||||
"move_off_locked_folder": "Flyt ud af låst mappe",
|
"move_off_locked_folder": "Flyt ud af låst mappe",
|
||||||
"move_to_lock_folder_action_prompt": "{count} føjet til i den låste mappe",
|
"move_to_lock_folder_action_prompt": "{count} føjet til den låste mappe",
|
||||||
"move_to_locked_folder": "Flyt til låst mappe",
|
"move_to_locked_folder": "Flyt til låst mappe",
|
||||||
"move_to_locked_folder_confirmation": "Disse billeder og videoer vil blive fjernet fra alle albums, og vil kun være synlig fra den låste mappe",
|
"move_to_locked_folder_confirmation": "Disse billeder og videoer vil blive fjernet fra alle albums, og vil kun være synlig fra den låste mappe",
|
||||||
"moved_to_archive": "Flyttede {count, plural, one {# mediefil} other {# mediefiler}} til arkivet",
|
"moved_to_archive": "Flyttede {count, plural, one {# mediefil} other {# mediefiler}} til arkivet",
|
||||||
"moved_to_library": "Flyttede {count, plural, one {# mediefil} other {# mediefiler}} til biblioteket",
|
"moved_to_library": "Flyttede {count, plural, one {# mediefil} other {# mediefiler}} til biblioteket",
|
||||||
"moved_to_trash": "Flyttet til skraldespand",
|
"moved_to_trash": "Flyttet til skraldespand",
|
||||||
"multiselect_grid_edit_date_time_err_read_only": "Kan ikke redigere datoen på kun læselige elementer. Springer over",
|
"multiselect_grid_edit_date_time_err_read_only": "Kan ikke redigere datoen på skrivebeskyttet elementer. Springer over",
|
||||||
"multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af kun læselige elementer. Springer over",
|
"multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af skrivebeskyttet elementer. Springer over",
|
||||||
"mute_memories": "Dæmp minder",
|
"mute_memories": "Dæmp minder",
|
||||||
"my_albums": "Mine albummer",
|
"my_albums": "Mine albummer",
|
||||||
"name": "Navn",
|
"name": "Navn",
|
||||||
"name_or_nickname": "Navn eller kælenavn",
|
"name_or_nickname": "Navn eller kaldenavn",
|
||||||
|
"navigate": "Naviger",
|
||||||
|
"navigate_to_time": "Naviger til tid",
|
||||||
"network_requirement_photos_upload": "Benyt mobildatanettet for at sikkerhedskopiere dine fotos",
|
"network_requirement_photos_upload": "Benyt mobildatanettet for at sikkerhedskopiere dine fotos",
|
||||||
"network_requirement_videos_upload": "Benyt mobildatanettet for at sikkerhedskopiere dine videoer",
|
"network_requirement_videos_upload": "Benyt mobildatanettet for at sikkerhedskopiere dine videoer",
|
||||||
"network_requirements": "Netværkskrav",
|
"network_requirements": "Netværkskrav",
|
||||||
"network_requirements_updated": "Netværkskravene er ændret, backup-køen nulstilles",
|
"network_requirements_updated": "Netværkskravene er ændret, backup-køen nulstilles",
|
||||||
"networking_settings": "Netværk",
|
"networking_settings": "Netværk",
|
||||||
"networking_subtitle": "Administrer serverens endepunktindstillinger",
|
"networking_subtitle": "Administrer serverens endepunktindstillinger",
|
||||||
"never": "aldrig",
|
"never": "Aldrig",
|
||||||
"new_album": "Nyt album",
|
"new_album": "Nyt album",
|
||||||
"new_api_key": "Ny API-nøgle",
|
"new_api_key": "Ny API-nøgle",
|
||||||
|
"new_date_range": "Nyt datointerval",
|
||||||
"new_password": "Ny adgangskode",
|
"new_password": "Ny adgangskode",
|
||||||
"new_person": "Ny person",
|
"new_person": "Ny person",
|
||||||
"new_pin_code": "Ny PIN kode",
|
"new_pin_code": "Ny PIN kode",
|
||||||
@@ -1385,7 +1415,7 @@
|
|||||||
"no_albums_message": "Opret et album for at organisere dine billeder og videoer",
|
"no_albums_message": "Opret et album for at organisere dine billeder og videoer",
|
||||||
"no_albums_with_name_yet": "Det ser ud til, at du ikke har noget album med dette navn endnu.",
|
"no_albums_with_name_yet": "Det ser ud til, at du ikke har noget album med dette navn endnu.",
|
||||||
"no_albums_yet": "Det ser ud til, at du ikke har nogen album endnu.",
|
"no_albums_yet": "Det ser ud til, at du ikke har nogen album endnu.",
|
||||||
"no_archived_assets_message": "Arkivér billeder og videoer for at gemme dem væk fra din Billede oversigt",
|
"no_archived_assets_message": "Arkivér billeder og videoer for at gemme dem væk fra din billedoversigt",
|
||||||
"no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE",
|
"no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE",
|
||||||
"no_assets_to_show": "Ingen elementer at vise",
|
"no_assets_to_show": "Ingen elementer at vise",
|
||||||
"no_cast_devices_found": "Ingen Cast-enheder fundet",
|
"no_cast_devices_found": "Ingen Cast-enheder fundet",
|
||||||
@@ -1421,6 +1451,9 @@
|
|||||||
"notifications": "Notifikationer",
|
"notifications": "Notifikationer",
|
||||||
"notifications_setting_description": "Administrér notifikationer",
|
"notifications_setting_description": "Administrér notifikationer",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Obtainium-konfigurator",
|
||||||
|
"obtainium_configurator_instructions": "Brug Obtainium til at installere og opdatere Android-appen direkte fra Immich-udgivelsen på GitHub. Opret en API-nøgle, og vælg en variant for at generere dit Obtainium-konfigurationslink",
|
||||||
|
"ocr": "OCR",
|
||||||
"official_immich_resources": "Officielle Immich-ressourcer",
|
"official_immich_resources": "Officielle Immich-ressourcer",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offset": "Forskydning",
|
"offset": "Forskydning",
|
||||||
@@ -1525,6 +1558,9 @@
|
|||||||
"play_memories": "Afspil minder",
|
"play_memories": "Afspil minder",
|
||||||
"play_motion_photo": "Afspil bevægelsesbillede",
|
"play_motion_photo": "Afspil bevægelsesbillede",
|
||||||
"play_or_pause_video": "Afspil eller pause video",
|
"play_or_pause_video": "Afspil eller pause video",
|
||||||
|
"play_original_video": "Afspil original video",
|
||||||
|
"play_original_video_setting_description": "Foretrækker afspilning af originale videoer frem for transkodede videoer. Hvis det originale element ikke er kompatibelt, afspilles det muligvis ikke korrekt.",
|
||||||
|
"play_transcoded_video": "Afspil transkodet video",
|
||||||
"please_auth_to_access": "Log venligst ind for at tilgå",
|
"please_auth_to_access": "Log venligst ind for at tilgå",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preferences_settings_subtitle": "Administrer app-præferencer",
|
"preferences_settings_subtitle": "Administrer app-præferencer",
|
||||||
@@ -1542,13 +1578,9 @@
|
|||||||
"privacy": "Privatliv",
|
"privacy": "Privatliv",
|
||||||
"profile": "Profil",
|
"profile": "Profil",
|
||||||
"profile_drawer_app_logs": "Log",
|
"profile_drawer_app_logs": "Log",
|
||||||
"profile_drawer_client_out_of_date_major": "Mobilapp er forældet. Opdater venligst til den nyeste større version.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Mobilapp er forældet. Opdater venligst til den nyeste mindre version.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Klient og server er ajour",
|
"profile_drawer_client_server_up_to_date": "Klient og server er ajour",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Skrivebeskyttet tilstand aktiveret. Lang tryk på bruger avatar ikonet for at afslutte.",
|
"profile_drawer_readonly_mode": "Skrivebeskyttet tilstand aktiveret. Lang tryk på bruger avatar ikonet for at afslutte.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server er forældet. Opdater venligst til den nyeste større version.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Server er forældet. Opdater venligst til den nyeste mindre version.",
|
|
||||||
"profile_image_of_user": "Profilbillede af {user}",
|
"profile_image_of_user": "Profilbillede af {user}",
|
||||||
"profile_picture_set": "Profilbillede indstillet.",
|
"profile_picture_set": "Profilbillede indstillet.",
|
||||||
"public_album": "Offentligt album",
|
"public_album": "Offentligt album",
|
||||||
@@ -1665,6 +1697,7 @@
|
|||||||
"reset_sqlite_confirmation": "Er du sikker på, at du vil nulstille SQLite databasen? Du er nødt til at logge ud og ind igen for at gensynkronisere dine data",
|
"reset_sqlite_confirmation": "Er du sikker på, at du vil nulstille SQLite databasen? Du er nødt til at logge ud og ind igen for at gensynkronisere dine data",
|
||||||
"reset_sqlite_success": "Vellykket reset af SQLite databasen",
|
"reset_sqlite_success": "Vellykket reset af SQLite databasen",
|
||||||
"reset_to_default": "Nulstil til standard",
|
"reset_to_default": "Nulstil til standard",
|
||||||
|
"resolution": "Opløsning",
|
||||||
"resolve_duplicates": "Løs dubletter",
|
"resolve_duplicates": "Løs dubletter",
|
||||||
"resolved_all_duplicates": "Alle dubletter løst",
|
"resolved_all_duplicates": "Alle dubletter løst",
|
||||||
"restore": "Gendan",
|
"restore": "Gendan",
|
||||||
@@ -1683,6 +1716,7 @@
|
|||||||
"running": "Kører",
|
"running": "Kører",
|
||||||
"save": "Gem",
|
"save": "Gem",
|
||||||
"save_to_gallery": "Gem til galleri",
|
"save_to_gallery": "Gem til galleri",
|
||||||
|
"saved": "Gemt",
|
||||||
"saved_api_key": "Gemt API-nøgle",
|
"saved_api_key": "Gemt API-nøgle",
|
||||||
"saved_profile": "Gemte profil",
|
"saved_profile": "Gemte profil",
|
||||||
"saved_settings": "Gemte indstillinger",
|
"saved_settings": "Gemte indstillinger",
|
||||||
@@ -1699,6 +1733,9 @@
|
|||||||
"search_by_description_example": "Vandredag i Paris",
|
"search_by_description_example": "Vandredag i Paris",
|
||||||
"search_by_filename": "Søg efter filnavn eller filtypenavn",
|
"search_by_filename": "Søg efter filnavn eller filtypenavn",
|
||||||
"search_by_filename_example": "dvs. IMG_1234.JPG eller PNG",
|
"search_by_filename_example": "dvs. IMG_1234.JPG eller PNG",
|
||||||
|
"search_by_ocr": "Søg via OCR",
|
||||||
|
"search_by_ocr_example": "Latte",
|
||||||
|
"search_camera_lens_model": "Søg objektiv model...",
|
||||||
"search_camera_make": "Søg efter kameraproducent...",
|
"search_camera_make": "Søg efter kameraproducent...",
|
||||||
"search_camera_model": "Søg efter kameramodel...",
|
"search_camera_model": "Søg efter kameramodel...",
|
||||||
"search_city": "Søg efter by...",
|
"search_city": "Søg efter by...",
|
||||||
@@ -1715,6 +1752,7 @@
|
|||||||
"search_filter_location_title": "Vælg lokation",
|
"search_filter_location_title": "Vælg lokation",
|
||||||
"search_filter_media_type": "Medietype",
|
"search_filter_media_type": "Medietype",
|
||||||
"search_filter_media_type_title": "Vælg medietype",
|
"search_filter_media_type_title": "Vælg medietype",
|
||||||
|
"search_filter_ocr": "Søg via OCR",
|
||||||
"search_filter_people_title": "Vælg personer",
|
"search_filter_people_title": "Vælg personer",
|
||||||
"search_for": "Søg efter",
|
"search_for": "Søg efter",
|
||||||
"search_for_existing_person": "Søg efter eksisterende person",
|
"search_for_existing_person": "Søg efter eksisterende person",
|
||||||
@@ -1777,6 +1815,7 @@
|
|||||||
"server_online": "Server online",
|
"server_online": "Server online",
|
||||||
"server_privacy": "Serverens privatliv",
|
"server_privacy": "Serverens privatliv",
|
||||||
"server_stats": "Serverstatus",
|
"server_stats": "Serverstatus",
|
||||||
|
"server_update_available": "Serveropdatering er tilgængelig",
|
||||||
"server_version": "Server version",
|
"server_version": "Server version",
|
||||||
"set": "Indstil",
|
"set": "Indstil",
|
||||||
"set_as_album_cover": "Indstil som albumcover",
|
"set_as_album_cover": "Indstil som albumcover",
|
||||||
@@ -1805,6 +1844,8 @@
|
|||||||
"setting_notifications_subtitle": "Tilpas dine notifikationspræferencer",
|
"setting_notifications_subtitle": "Tilpas dine notifikationspræferencer",
|
||||||
"setting_notifications_total_progress_subtitle": "Samlet uploadstatus (færdige/samlet antal elementer)",
|
"setting_notifications_total_progress_subtitle": "Samlet uploadstatus (færdige/samlet antal elementer)",
|
||||||
"setting_notifications_total_progress_title": "Vis samlet baggrundsuploadstatus",
|
"setting_notifications_total_progress_title": "Vis samlet baggrundsuploadstatus",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Begynd automatisk at afspille videoer, når de åbnes",
|
||||||
|
"setting_video_viewer_auto_play_title": "Automatisk afspilning af videoer",
|
||||||
"setting_video_viewer_looping_title": "Looper",
|
"setting_video_viewer_looping_title": "Looper",
|
||||||
"setting_video_viewer_original_video_subtitle": "Når der streames video fra serveren, afspil da den originale selv når en omkodet udgave er tilgængelig. Kan føre til buffering. Videoer, der er tilgængelige lokalt, afspilles i original kvalitet uanset denne indstilling.",
|
"setting_video_viewer_original_video_subtitle": "Når der streames video fra serveren, afspil da den originale selv når en omkodet udgave er tilgængelig. Kan føre til buffering. Videoer, der er tilgængelige lokalt, afspilles i original kvalitet uanset denne indstilling.",
|
||||||
"setting_video_viewer_original_video_title": "Tving original video",
|
"setting_video_viewer_original_video_title": "Tving original video",
|
||||||
@@ -1984,6 +2025,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til",
|
"theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til",
|
||||||
"they_will_be_merged_together": "De vil blive slået sammen",
|
"they_will_be_merged_together": "De vil blive slået sammen",
|
||||||
"third_party_resources": "Tredjepartsressourcer",
|
"third_party_resources": "Tredjepartsressourcer",
|
||||||
|
"time": "Tid",
|
||||||
"time_based_memories": "Tidsbaserede minder",
|
"time_based_memories": "Tidsbaserede minder",
|
||||||
"timeline": "Tidslinje",
|
"timeline": "Tidslinje",
|
||||||
"timezone": "Tidszone",
|
"timezone": "Tidszone",
|
||||||
@@ -2016,6 +2058,7 @@
|
|||||||
"troubleshoot": "Fejlfinding",
|
"troubleshoot": "Fejlfinding",
|
||||||
"type": "Type",
|
"type": "Type",
|
||||||
"unable_to_change_pin_code": "Kunne ikke ændre PIN kode",
|
"unable_to_change_pin_code": "Kunne ikke ændre PIN kode",
|
||||||
|
"unable_to_check_version": "Kan ikke tjekke app- eller serverversion",
|
||||||
"unable_to_setup_pin_code": "Kunne ikke sætte PIN kode",
|
"unable_to_setup_pin_code": "Kunne ikke sætte PIN kode",
|
||||||
"unarchive": "Afakivér",
|
"unarchive": "Afakivér",
|
||||||
"unarchive_action_prompt": "{count} slettet fra Arkiv",
|
"unarchive_action_prompt": "{count} slettet fra Arkiv",
|
||||||
|
|||||||
169
i18n/de.json
169
i18n/de.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Zu Alben hinzufügen",
|
"add_to_albums": "Zu Alben hinzufügen",
|
||||||
"add_to_albums_count": "Zu Alben hinzufügen ({count})",
|
"add_to_albums_count": "Zu Alben hinzufügen ({count})",
|
||||||
"add_to_shared_album": "Zu geteiltem Album hinzufügen",
|
"add_to_shared_album": "Zu geteiltem Album hinzufügen",
|
||||||
|
"add_upload_to_stack": "Upload zum Stapel hinzufügen",
|
||||||
"add_url": "URL hinzufügen",
|
"add_url": "URL hinzufügen",
|
||||||
"added_to_archive": "Zum Archiv hinzugefügt",
|
"added_to_archive": "Zum Archiv hinzugefügt",
|
||||||
"added_to_favorites": "Zu Favoriten hinzugefügt",
|
"added_to_favorites": "Zu Favoriten hinzugefügt",
|
||||||
@@ -48,14 +49,14 @@
|
|||||||
"background_task_job": "Hintergrundaufgaben",
|
"background_task_job": "Hintergrundaufgaben",
|
||||||
"backup_database": "Datenbanksicherung erstellen",
|
"backup_database": "Datenbanksicherung erstellen",
|
||||||
"backup_database_enable_description": "Datenbank regelmäßig sichern",
|
"backup_database_enable_description": "Datenbank regelmäßig sichern",
|
||||||
"backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Backups",
|
"backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen",
|
||||||
"backup_onboarding_1_description": "Offsite-Kopie in der Cloud oder an einem anderen physischen Ort.",
|
"backup_onboarding_1_description": "Offsite-Kopie in der Cloud oder an einem anderen physischen Ort.",
|
||||||
"backup_onboarding_2_description": "Lokale Kopien auf verschiedenen Geräten. Dazu gehören die Hauptdateien und eine lokale Sicherung dieser Dateien.",
|
"backup_onboarding_2_description": "lokale Kopien auf verschiedenen Geräten. Dazu gehören die Hauptdateien und eine lokale Sicherung dieser Dateien.",
|
||||||
"backup_onboarding_3_description": "3 komplette Kopien deiner Daten, inkl. der Originaldateien. Dies umfasst 1 Kopie an einem anderen Ort und 2 lokale Kopie.",
|
"backup_onboarding_3_description": "Kopien deiner Daten inklusive Originaldateien. Dies umfasst 1 Kopie an einem anderen Ort und 2 lokale Kopien.",
|
||||||
"backup_onboarding_description": "Eine <backblaze-link>3-2-1 Backup-Strategie</backblaze-link> wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Backup-Lösung zu haben.",
|
"backup_onboarding_description": "Eine <backblaze-link>3-2-1 Sicherungsstrategie</backblaze-link> wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Sicherungslösung zu haben.",
|
||||||
"backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der <link>Dokumentation</link>.",
|
"backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der <link>Dokumentation</link>.",
|
||||||
"backup_onboarding_parts_title": "Eine 3-2-1-Sicherung umfasst:",
|
"backup_onboarding_parts_title": "Eine 3-2-1-Sicherung umfasst:",
|
||||||
"backup_onboarding_title": "Backups",
|
"backup_onboarding_title": "Sicherungen",
|
||||||
"backup_settings": "Einstellungen für Datenbanksicherung",
|
"backup_settings": "Einstellungen für Datenbanksicherung",
|
||||||
"backup_settings_description": "Einstellungen zur regelmäßigen Sicherung der Datenbank. Hinweis: Diese Jobs werden nicht überwacht und du wirst nicht über Fehler informiert.",
|
"backup_settings_description": "Einstellungen zur regelmäßigen Sicherung der Datenbank. Hinweis: Diese Jobs werden nicht überwacht und du wirst nicht über Fehler informiert.",
|
||||||
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
|
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
|
||||||
@@ -65,11 +66,11 @@
|
|||||||
"confirm_email_below": "Bestätige, indem du unten \"{email}\" 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?",
|
||||||
"confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN Code von {user} zurücksetzen möchtest?",
|
"confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN-Code von {user} zurücksetzen möchtest?",
|
||||||
"create_job": "Aufgabe erstellen",
|
"create_job": "Aufgabe erstellen",
|
||||||
"cron_expression": "Cron Zeitangabe",
|
"cron_expression": "Cron-Zeitangabe",
|
||||||
"cron_expression_description": "Setze ein Intervall für die Sicherung mittels cron. Hilfe mit dem Format bietet dir dabei z. B. der <link>Crontab Guru</link>",
|
"cron_expression_description": "Setze das Scanintervall im Cron-Format. Hilfe mit dem Format bietet dir dabei z. B. der <link>Crontab Guru</link>",
|
||||||
"cron_expression_presets": "Nützliche Zeitangaben für Cron",
|
"cron_expression_presets": "Vorlagen für Cron-Zeitangabe",
|
||||||
"disable_login": "Login deaktivieren",
|
"disable_login": "Login deaktivieren",
|
||||||
"duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der intelligenten Suche",
|
"duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der intelligenten Suche",
|
||||||
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.",
|
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"library_settings_description": "Einstellungen externer Bibliotheken verwalten",
|
"library_settings_description": "Einstellungen externer Bibliotheken verwalten",
|
||||||
"library_tasks_description": "Überprüfe externe Bibliotheken auf neue und/oder veränderte Medien",
|
"library_tasks_description": "Überprüfe externe Bibliotheken auf neue und/oder veränderte Medien",
|
||||||
"library_watching_enable_description": "Überwache externe Bibliotheken auf Dateiänderungen",
|
"library_watching_enable_description": "Überwache externe Bibliotheken auf Dateiänderungen",
|
||||||
"library_watching_settings": "Bibliotheksüberwachung (EXPERIMENTELL)",
|
"library_watching_settings": "Überwache Bibliothek [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.",
|
||||||
@@ -153,6 +154,18 @@
|
|||||||
"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 wird.",
|
"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_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Maschinelles Lernen nutzen um Texte in Bildern zu erkennen",
|
||||||
|
"machine_learning_ocr_enabled": "OCR aktivieren",
|
||||||
|
"machine_learning_ocr_enabled_description": "Wenn deaktiviert, werden die Bilder nicht von der Texterkennung bearbeitet.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Maximale Auflösung",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Vorschauen über dieser Auflösung werden unter Beibehaltung des Seitenverhältnisses verkleinert. Höhere Werte sind genauer, benötigen jedoch mehr Zeit für die Verarbeitung und verbrauchen mehr Speicher.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Minimaler Erkennungswert",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Minimale Konfidenzrate für die Texterkennung von 0–1. Niedrigere Werte führen dazu, dass mehr Text erkannt wird, können jedoch zu falsch-positiven Ergebnissen führen.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Minimale Erkennungsrate",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Minimale Konfidenzrate für die Erkennung von erkanntem Text von 0–1. Niedrigere Werte führen dazu, dass mehr Text erkannt wird, können jedoch zu falsch-positiven Ergebnissen führen.",
|
||||||
|
"machine_learning_ocr_model": "OCR Modell",
|
||||||
|
"machine_learning_ocr_model_description": "Server Modelle sind genauer als mobile Modelle, brauchen aber länger zur Verarbeitung und brauchen mehr Speicher.",
|
||||||
"machine_learning_settings": "Einstellungen für maschinelles Lernen",
|
"machine_learning_settings": "Einstellungen für maschinelles Lernen",
|
||||||
"machine_learning_settings_description": "Funktionen und Einstellungen des maschinellen Lernens verwalten",
|
"machine_learning_settings_description": "Funktionen und Einstellungen des maschinellen Lernens verwalten",
|
||||||
"machine_learning_smart_search": "Intelligente Suche",
|
"machine_learning_smart_search": "Intelligente Suche",
|
||||||
@@ -210,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "TLS-Zertifikatsvalidierungsfehler ignorieren (nicht empfohlen)",
|
"notification_email_ignore_certificate_errors_description": "TLS-Zertifikatsvalidierungsfehler ignorieren (nicht empfohlen)",
|
||||||
"notification_email_password_description": "Passwort für die Anmeldung am E-Mail-Server",
|
"notification_email_password_description": "Passwort für die Anmeldung am E-Mail-Server",
|
||||||
"notification_email_port_description": "Port des E-Mail-Servers (z.B. 25, 465, oder 587)",
|
"notification_email_port_description": "Port des E-Mail-Servers (z.B. 25, 465, oder 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Benutze SMTPS (SMTP über TLS)",
|
||||||
"notification_email_sent_test_email_button": "Test-E-Mail versenden und speichern",
|
"notification_email_sent_test_email_button": "Test-E-Mail versenden und speichern",
|
||||||
"notification_email_setting_description": "Einstellungen für E-Mail-Benachrichtigungen",
|
"notification_email_setting_description": "Einstellungen für E-Mail-Benachrichtigungen",
|
||||||
"notification_email_test_email": "Test-E-Mail senden",
|
"notification_email_test_email": "Test-E-Mail senden",
|
||||||
@@ -242,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Kontingent in GiB, das verwendet werden soll, wenn keines übermittelt wird.",
|
"oauth_storage_quota_default_description": "Kontingent in GiB, das verwendet werden soll, wenn keines übermittelt wird.",
|
||||||
"oauth_timeout": "Zeitüberschreitung bei Anfrage",
|
"oauth_timeout": "Zeitüberschreitung bei Anfrage",
|
||||||
"oauth_timeout_description": "Zeitüberschreitung für Anfragen in Millisekunden",
|
"oauth_timeout_description": "Zeitüberschreitung für Anfragen in Millisekunden",
|
||||||
|
"ocr_job_description": "Verwende Machine Learning zur Erkennung von Text in Bildern",
|
||||||
"password_enable_description": "Mit E-Mail und Passwort anmelden",
|
"password_enable_description": "Mit E-Mail und Passwort anmelden",
|
||||||
"password_settings": "Passwort-Anmeldung",
|
"password_settings": "Passwort-Anmeldung",
|
||||||
"password_settings_description": "Passwort-Anmeldeeinstellungen verwalten",
|
"password_settings_description": "Passwort-Anmeldeeinstellungen verwalten",
|
||||||
@@ -286,13 +302,13 @@
|
|||||||
"storage_template_user_label": "<code>{label}</code> is die Speicherpfadbezeichnung 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",
|
||||||
"template_email_available_tags": "In deiner Vorlage kannst du die folgenden Variablen verwenden: {tags}",
|
"template_email_available_tags": "Du kannst die folgenden Variablen in deiner Vorlage verwenden: {tags}",
|
||||||
"template_email_if_empty": "Wenn die Vorlage leer ist, wird die Standard-E-Mail verwendet.",
|
"template_email_if_empty": "Wenn die Vorlage leer ist, wird die Standard-E-Mail-Vorlage verwendet.",
|
||||||
"template_email_invite_album": "E-Mail-Vorlage: Einladung zu Album",
|
"template_email_invite_album": "Einladung zu Album",
|
||||||
"template_email_preview": "Vorschau",
|
"template_email_preview": "Vorschau",
|
||||||
"template_email_settings": "E-Mail-Vorlagen",
|
"template_email_settings": "E-Mail-Vorlagen",
|
||||||
"template_email_update_album": "Album-Vorlage aktualisieren",
|
"template_email_update_album": "Aktualisiertes Album",
|
||||||
"template_email_welcome": "Willkommen bei den E-Mail-Vorlagen",
|
"template_email_welcome": "Willkommens-E-Mail",
|
||||||
"template_settings": "Benachrichtigungsvorlagen",
|
"template_settings": "Benachrichtigungsvorlagen",
|
||||||
"template_settings_description": "Benutzerdefinierte Vorlagen für Benachrichtigungen verwalten",
|
"template_settings_description": "Benutzerdefinierte Vorlagen für Benachrichtigungen verwalten",
|
||||||
"theme_custom_css_settings": "Benutzerdefiniertes CSS",
|
"theme_custom_css_settings": "Benutzerdefiniertes CSS",
|
||||||
@@ -332,7 +348,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Maximale Bitrate",
|
"transcoding_max_bitrate": "Maximale Bitrate",
|
||||||
"transcoding_max_bitrate_description": "Die Festlegung einer maximalen Bitrate kann die Dateigrößen vorhersagbarer machen, ohne dass die Qualität darunter leidet. Bei 720p sind typische Werte 2600 kbit/s für VP9 oder HEVC oder 4500 kbit/s für H.264. Deaktiviert, wenn der Wert auf 0 gesetzt ist.",
|
"transcoding_max_bitrate_description": "Das Festlegen einer maximalen Bitrate kann die Dateigrößen vorhersagbarer machen, ohne dass die Qualität darunter leidet. Bei 720p sind typische Werte 2600 kbit/s für VP9 oder HEVC oder 4500 kbit/s für H.264. Deaktiviert, wenn der Wert auf 0 gesetzt ist. Wenn keine Einheit angegeben wird, wird von k (für kbit/s) ausgegangen; also sind 5000, 5000k und 5M (für Mbit/s) identisch.",
|
||||||
"transcoding_max_keyframe_interval": "Maximales Keyframe-Intervall",
|
"transcoding_max_keyframe_interval": "Maximales Keyframe-Intervall",
|
||||||
"transcoding_max_keyframe_interval_description": "Legt den maximalen Frame-Abstand zwischen Keyframes fest. Niedrigere Werte verschlechtern die Komprimierungseffizienz, verbessern aber die Suchzeiten und können die Qualität in Szenen mit schnellen Bewegungen verbessern. Bei 0 wird dieser Wert automatisch eingestellt.",
|
"transcoding_max_keyframe_interval_description": "Legt den maximalen Frame-Abstand zwischen Keyframes fest. Niedrigere Werte verschlechtern die Komprimierungseffizienz, verbessern aber die Suchzeiten und können die Qualität in Szenen mit schnellen Bewegungen verbessern. Bei 0 wird dieser Wert automatisch eingestellt.",
|
||||||
"transcoding_optimal_description": "Videos mit einer höheren Auflösung als der Zielauflösung oder in einem nicht akzeptierten Format",
|
"transcoding_optimal_description": "Videos mit einer höheren Auflösung als der Zielauflösung oder in einem nicht akzeptierten Format",
|
||||||
@@ -350,7 +366,7 @@
|
|||||||
"transcoding_target_resolution": "Ziel-Auflösung",
|
"transcoding_target_resolution": "Ziel-Auflösung",
|
||||||
"transcoding_target_resolution_description": "Höhere Auflösungen können mehr Details erhalten, benötigen aber mehr Zeit für die Codierung, haben größere Dateigrößen und können die Reaktionszeit der Anwendung beeinträchtigen.",
|
"transcoding_target_resolution_description": "Höhere Auflösungen können mehr Details erhalten, benötigen aber mehr Zeit für die Codierung, haben größere Dateigrößen und können die Reaktionszeit der Anwendung beeinträchtigen.",
|
||||||
"transcoding_temporal_aq": "Temporäre AQ",
|
"transcoding_temporal_aq": "Temporäre AQ",
|
||||||
"transcoding_temporal_aq_description": "Gilt nur für NVENC. Verbessert die Qualität von Szenen mit hohem Detailreichtum und geringen Bewegungen. Dies ist möglicherweise nicht mit älteren Geräten kompatibel.",
|
"transcoding_temporal_aq_description": "Gilt nur für NVENC. Zeitlich adaptive Quantisierung verbessert die Qualität von Szenen mit hohem Detailreichtum und geringen Bewegungen. Dies ist möglicherweise nicht mit älteren Geräten kompatibel.",
|
||||||
"transcoding_threads": "Threads",
|
"transcoding_threads": "Threads",
|
||||||
"transcoding_threads_description": "Höhere Werte führen zu einer schnelleren Kodierung, lassen dem Server jedoch weniger Spielraum für die Verarbeitung anderer Aufgaben im aktiven Zustand. Dieser Wert sollte nicht höher sein als die Anzahl der CPU-Kerne. Maximiert die Auslastung, wenn der Wert auf 0 gesetzt wird.",
|
"transcoding_threads_description": "Höhere Werte führen zu einer schnelleren Kodierung, lassen dem Server jedoch weniger Spielraum für die Verarbeitung anderer Aufgaben im aktiven Zustand. Dieser Wert sollte nicht höher sein als die Anzahl der CPU-Kerne. Maximiert die Auslastung, wenn der Wert auf 0 gesetzt wird.",
|
||||||
"transcoding_tone_mapping": "Farbton-Mapping",
|
"transcoding_tone_mapping": "Farbton-Mapping",
|
||||||
@@ -401,11 +417,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Einige Geräte sind sehr langsam beim Laden von lokalen Vorschaubildern. Aktivieren Sie diese Einstellung, um stattdessen die Server-Bilder zu laden.",
|
"advanced_settings_prefer_remote_subtitle": "Einige Geräte sind sehr langsam beim Laden von lokalen Vorschaubildern. Aktivieren Sie diese Einstellung, um stattdessen die Server-Bilder zu laden.",
|
||||||
"advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen",
|
"advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Definiere einen Proxy-Header, den Immich bei jeder Netzwerkanfrage mitschicken soll",
|
"advanced_settings_proxy_headers_subtitle": "Definiere einen Proxy-Header, den Immich bei jeder Netzwerkanfrage mitschicken soll",
|
||||||
"advanced_settings_proxy_headers_title": "Proxy-Headers",
|
"advanced_settings_proxy_headers_title": "Benutzerdefinierte Proxy-Header [Experimentell]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Aktiviert den schreibgeschützten Modus, in dem die Fotos nur angezeigt werden können. Funktionen wie das Auswählen mehrerer Bilder, das Teilen, das Übertragen und das Löschen sind deaktiviert. Aktivieren/Deaktiviere den schreibgeschützten Modus über den Benutzer-Avatar auf dem Hauptbildschirm",
|
"advanced_settings_readonly_mode_subtitle": "Aktiviert den schreibgeschützten Modus, in dem die Fotos nur angezeigt werden können. Funktionen wie das Auswählen mehrerer Bilder, das Teilen, das Übertragen und das Löschen sind deaktiviert. Aktivieren/Deaktiviere den schreibgeschützten Modus über den Benutzer-Avatar auf dem Hauptbildschirm",
|
||||||
"advanced_settings_readonly_mode_title": "Schreibgeschützter Modus",
|
"advanced_settings_readonly_mode_title": "Schreibgeschützter Modus",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Verifizierung von SSL-Zertifikaten vom Server überspringen. Notwendig bei selbstsignierten Zertifikaten.",
|
"advanced_settings_self_signed_ssl_subtitle": "Verifizierung von SSL-Zertifikaten vom Server überspringen. Notwendig bei selbstsignierten Zertifikaten.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Selbstsignierte SSL-Zertifikate erlauben",
|
"advanced_settings_self_signed_ssl_title": "Selbstsignierte SSL-Zertifikate erlauben [Experimentell]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Automatisches Löschen oder Wiederherstellen einer Datei auf diesem Gerät, wenn diese Aktion im Web durchgeführt wird",
|
"advanced_settings_sync_remote_deletions_subtitle": "Automatisches Löschen oder Wiederherstellen einer Datei auf diesem Gerät, wenn diese Aktion im Web durchgeführt wird",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Mit Server-Löschungen synchronisieren [Experimentell]",
|
"advanced_settings_sync_remote_deletions_title": "Mit Server-Löschungen synchronisieren [Experimentell]",
|
||||||
"advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen",
|
"advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen",
|
||||||
@@ -465,10 +481,14 @@
|
|||||||
"api_key_description": "Dieser Wert wird nur einmal angezeigt. Bitte kopiere ihn, bevor du das Fenster schließt.",
|
"api_key_description": "Dieser Wert wird nur einmal angezeigt. Bitte kopiere ihn, bevor du das Fenster schließt.",
|
||||||
"api_key_empty": "Dein API-Schlüssel-Name darf nicht leer sein",
|
"api_key_empty": "Dein API-Schlüssel-Name darf nicht leer sein",
|
||||||
"api_keys": "API-Schlüssel",
|
"api_keys": "API-Schlüssel",
|
||||||
|
"app_architecture_variant": "Variante (Architektur)",
|
||||||
"app_bar_signout_dialog_content": "Bist du dir sicher, dass du dich abmelden möchtest?",
|
"app_bar_signout_dialog_content": "Bist du dir sicher, dass du dich abmelden möchtest?",
|
||||||
"app_bar_signout_dialog_ok": "Ja",
|
"app_bar_signout_dialog_ok": "Ja",
|
||||||
"app_bar_signout_dialog_title": "Abmelden",
|
"app_bar_signout_dialog_title": "Abmelden",
|
||||||
|
"app_download_links": "App Download Links",
|
||||||
"app_settings": "App-Einstellungen",
|
"app_settings": "App-Einstellungen",
|
||||||
|
"app_stores": "App Stores",
|
||||||
|
"app_update_available": "App Update verfügbar",
|
||||||
"appears_in": "Erscheint in",
|
"appears_in": "Erscheint in",
|
||||||
"apply_count": "Anwenden ({count, number})",
|
"apply_count": "Anwenden ({count, number})",
|
||||||
"archive": "Archiv",
|
"archive": "Archiv",
|
||||||
@@ -538,20 +558,21 @@
|
|||||||
"autoplay_slideshow": "Automatische Diashow",
|
"autoplay_slideshow": "Automatische Diashow",
|
||||||
"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",
|
||||||
"background_backup_running_error": "Hintergrund Sicherung läuft, kann manuelle Sicherung nicht starten",
|
"background_backup_running_error": "Sicherung läuft im Hintergrund. Manuelle Sicherung kann nicht gestartet werden",
|
||||||
"background_location_permission": "Hintergrund Standortfreigabe",
|
"background_location_permission": "Hintergrund Standortfreigabe",
|
||||||
"background_location_permission_content": "Um im Hintergrund zwischen den Netzwerken wechseln zu können, muss Immich *immer* Zugriff auf den genauen Standort haben, damit die App den Namen des WLAN-Netzwerks ermitteln kann",
|
"background_location_permission_content": "Um im Hintergrund zwischen den Netzwerken wechseln zu können, muss Immich *immer* Zugriff auf den genauen Standort haben, damit die App den Namen des WLAN-Netzwerks ermitteln kann",
|
||||||
"background_options": "Hintergrund Optionen",
|
"background_options": "Hintergrund Optionen",
|
||||||
"backup": "Sicherung",
|
"backup": "Sicherung",
|
||||||
"backup_album_selection_page_albums_device": "Alben auf dem Gerät ({count})",
|
"backup_album_selection_page_albums_device": "Alben auf dem Gerät ({count})",
|
||||||
"backup_album_selection_page_albums_tap": "Einmalig das Album antippen um es zu sichern, doppelt antippen um es nicht mehr zu sichern",
|
"backup_album_selection_page_albums_tap": "Antippen zum sichern, erneut antippen zum Ausschließen",
|
||||||
"backup_album_selection_page_assets_scatter": "Elemente (Fotos / Videos) können sich über mehrere Alben verteilen. Daher können diese vor der Sicherung eingeschlossen oder ausgeschlossen werden.",
|
"backup_album_selection_page_assets_scatter": "Elemente (Fotos / Videos) können sich über mehrere Alben verteilen. Daher können diese vor der Sicherung eingeschlossen oder ausgeschlossen werden.",
|
||||||
"backup_album_selection_page_select_albums": "Alben auswählen",
|
"backup_album_selection_page_select_albums": "Alben auswählen",
|
||||||
"backup_album_selection_page_selection_info": "Information",
|
"backup_album_selection_page_selection_info": "Auswahlinformation",
|
||||||
"backup_album_selection_page_total_assets": "Elemente",
|
"backup_album_selection_page_total_assets": "Elemente gesamt",
|
||||||
"backup_albums_sync": "Synchronisation von Alben beim Backup",
|
"backup_albums_sync": "Synchronisation der Sicherungsalben",
|
||||||
"backup_all": "Alle",
|
"backup_all": "Alle",
|
||||||
"backup_background_service_backup_failed_message": "Es trat ein Fehler bei der Sicherung auf. Erneuter Versuch…",
|
"backup_background_service_backup_failed_message": "Es trat ein Fehler bei der Sicherung auf. Erneuter Versuch…",
|
||||||
|
"backup_background_service_complete_notification": "Datei Backup abgeschlossen",
|
||||||
"backup_background_service_connection_failed_message": "Es konnte keine Verbindung zum Server hergestellt werden. Erneuter Versuch…",
|
"backup_background_service_connection_failed_message": "Es konnte keine Verbindung zum Server hergestellt werden. Erneuter Versuch…",
|
||||||
"backup_background_service_current_upload_notification": "Lädt {filename} hoch",
|
"backup_background_service_current_upload_notification": "Lädt {filename} hoch",
|
||||||
"backup_background_service_default_notification": "Suche nach neuen Elementen…",
|
"backup_background_service_default_notification": "Suche nach neuen Elementen…",
|
||||||
@@ -599,7 +620,7 @@
|
|||||||
"backup_controller_page_turn_on": "Sicherung im Vordergrund einschalten",
|
"backup_controller_page_turn_on": "Sicherung im Vordergrund einschalten",
|
||||||
"backup_controller_page_uploading_file_info": "Informationen",
|
"backup_controller_page_uploading_file_info": "Informationen",
|
||||||
"backup_err_only_album": "Das einzige Album kann nicht entfernt werden",
|
"backup_err_only_album": "Das einzige Album kann nicht entfernt werden",
|
||||||
"backup_error_sync_failed": "Synchronisierung fehlgeschlagen. Backup kann nicht verarbeitet werden.",
|
"backup_error_sync_failed": "Synchronisierung fehlgeschlagen. Sicherung kann nicht verarbeitet werden.",
|
||||||
"backup_info_card_assets": "Elemente",
|
"backup_info_card_assets": "Elemente",
|
||||||
"backup_manual_cancelled": "Abgebrochen",
|
"backup_manual_cancelled": "Abgebrochen",
|
||||||
"backup_manual_in_progress": "Sicherung läuft bereits. Bitte versuche es später erneut",
|
"backup_manual_in_progress": "Sicherung läuft bereits. Bitte versuche es später erneut",
|
||||||
@@ -661,10 +682,12 @@
|
|||||||
"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_password_form_confirm_password": "Passwort bestätigen",
|
"change_password_form_confirm_password": "Passwort bestätigen",
|
||||||
"change_password_form_description": "Hallo {name}\n\nDas ist entweder das erste Mal dass du dich einloggst oder es wurde eine Anfrage zur Änderung deines Passwortes gestellt. Bitte gib das neue Passwort ein.",
|
"change_password_form_description": "Hallo {name}\n\nDas ist entweder das erste Mal dass du dich einloggst oder es wurde eine Anfrage zur Änderung deines Passwortes gestellt. Bitte gib das neue Passwort ein.",
|
||||||
|
"change_password_form_log_out": "Von allen Geräte abmelden",
|
||||||
|
"change_password_form_log_out_description": "Es wird empfohlen, alle anderen Geräte abzumelden",
|
||||||
"change_password_form_new_password": "Neues Passwort",
|
"change_password_form_new_password": "Neues Passwort",
|
||||||
"change_password_form_password_mismatch": "Passwörter stimmen nicht überein",
|
"change_password_form_password_mismatch": "Passwörter stimmen nicht überein",
|
||||||
"change_password_form_reenter_new_password": "Passwort erneut eingeben",
|
"change_password_form_reenter_new_password": "Passwort erneut eingeben",
|
||||||
"change_pin_code": "PIN Code ändern",
|
"change_pin_code": "PIN-Code ändern",
|
||||||
"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",
|
||||||
"charging": "Aufladen",
|
"charging": "Aufladen",
|
||||||
@@ -688,7 +711,7 @@
|
|||||||
"client_cert_invalid_msg": "Ungültige Zertifikatsdatei oder falsches Passwort",
|
"client_cert_invalid_msg": "Ungültige Zertifikatsdatei oder falsches Passwort",
|
||||||
"client_cert_remove_msg": "Client Zertifikat wurde entfernt",
|
"client_cert_remove_msg": "Client Zertifikat wurde entfernt",
|
||||||
"client_cert_subtitle": "Unterstützt nur das PKCS12 (.p12, .pfx) Format. Zertifikatsimporte oder -entfernungen sind nur vor dem Login möglich",
|
"client_cert_subtitle": "Unterstützt nur das PKCS12 (.p12, .pfx) Format. Zertifikatsimporte oder -entfernungen sind nur vor dem Login möglich",
|
||||||
"client_cert_title": "SSL-Client-Zertifikat",
|
"client_cert_title": "SSL-Client-Zertifikat [Experimentell]",
|
||||||
"clockwise": "Im Uhrzeigersinn",
|
"clockwise": "Im Uhrzeigersinn",
|
||||||
"close": "Schließen",
|
"close": "Schließen",
|
||||||
"collapse": "Zusammenklappen",
|
"collapse": "Zusammenklappen",
|
||||||
@@ -700,14 +723,13 @@
|
|||||||
"comments_and_likes": "Kommentare & Likes",
|
"comments_and_likes": "Kommentare & Likes",
|
||||||
"comments_are_disabled": "Kommentare sind deaktiviert",
|
"comments_are_disabled": "Kommentare sind deaktiviert",
|
||||||
"common_create_new_album": "Neues Album erstellen",
|
"common_create_new_album": "Neues Album erstellen",
|
||||||
"common_server_error": "Bitte überprüfe deine Netzwerkverbindung und stelle sicher, dass die App und Server Versionen kompatibel sind.",
|
|
||||||
"completed": "Abgeschlossen",
|
"completed": "Abgeschlossen",
|
||||||
"confirm": "Bestätigen",
|
"confirm": "Bestätigen",
|
||||||
"confirm_admin_password": "Administrator Passwort bestätigen",
|
"confirm_admin_password": "Administrator Passwort bestätigen",
|
||||||
"confirm_delete_face": "Bist du sicher dass du das Gesicht von {name} aus der Datei entfernen willst?",
|
"confirm_delete_face": "Bist du sicher dass du das Gesicht von {name} aus der Datei entfernen willst?",
|
||||||
"confirm_delete_shared_link": "Bist du sicher, dass du diesen geteilten Link löschen willst?",
|
"confirm_delete_shared_link": "Bist du sicher, dass du diesen geteilten Link löschen willst?",
|
||||||
"confirm_keep_this_delete_others": "Alle anderen Dateien im Stapel bis auf diese werden gelöscht. Bist du sicher, dass du fortfahren möchten?",
|
"confirm_keep_this_delete_others": "Alle anderen Dateien im Stapel bis auf diese werden gelöscht. Bist du sicher, dass du fortfahren möchten?",
|
||||||
"confirm_new_pin_code": "Neuen PIN Code bestätigen",
|
"confirm_new_pin_code": "Neuen PIN-Code bestätigen",
|
||||||
"confirm_password": "Passwort bestätigen",
|
"confirm_password": "Passwort bestätigen",
|
||||||
"confirm_tag_face": "Wollen Sie dieses Gesicht mit {name} markieren?",
|
"confirm_tag_face": "Wollen Sie dieses Gesicht mit {name} markieren?",
|
||||||
"confirm_tag_face_unnamed": "Möchten Sie dieses Gesicht markieren?",
|
"confirm_tag_face_unnamed": "Möchten Sie dieses Gesicht markieren?",
|
||||||
@@ -739,6 +761,7 @@
|
|||||||
"create": "Erstellen",
|
"create": "Erstellen",
|
||||||
"create_album": "Album erstellen",
|
"create_album": "Album erstellen",
|
||||||
"create_album_page_untitled": "Unbenannt",
|
"create_album_page_untitled": "Unbenannt",
|
||||||
|
"create_api_key": "API Key erstellen",
|
||||||
"create_library": "Bibliothek erstellen",
|
"create_library": "Bibliothek erstellen",
|
||||||
"create_link": "Link erstellen",
|
"create_link": "Link erstellen",
|
||||||
"create_link_to_share": "Link zum Teilen erstellen",
|
"create_link_to_share": "Link zum Teilen erstellen",
|
||||||
@@ -759,7 +782,7 @@
|
|||||||
"crop": "Zuschneiden",
|
"crop": "Zuschneiden",
|
||||||
"curated_object_page_title": "Dinge",
|
"curated_object_page_title": "Dinge",
|
||||||
"current_device": "Aktuelles Gerät",
|
"current_device": "Aktuelles Gerät",
|
||||||
"current_pin_code": "Aktueller PIN Code",
|
"current_pin_code": "Aktueller PIN-Code",
|
||||||
"current_server_address": "Aktuelle Serveradresse",
|
"current_server_address": "Aktuelle Serveradresse",
|
||||||
"custom_locale": "Benutzerdefinierte Sprache",
|
"custom_locale": "Benutzerdefinierte Sprache",
|
||||||
"custom_locale_description": "Datumsangaben und Zahlen je nach Sprache und Land formatieren",
|
"custom_locale_description": "Datumsangaben und Zahlen je nach Sprache und Land formatieren",
|
||||||
@@ -768,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
||||||
"dark": "Dunkel",
|
"dark": "Dunkel",
|
||||||
"dark_theme": "Dunkle Ansicht umschalten",
|
"dark_theme": "Dunkle Ansicht umschalten",
|
||||||
|
"date": "Datum",
|
||||||
"date_after": "Datum nach",
|
"date_after": "Datum nach",
|
||||||
"date_and_time": "Datum und Zeit",
|
"date_and_time": "Datum und Zeit",
|
||||||
"date_before": "Datum vor",
|
"date_before": "Datum vor",
|
||||||
@@ -882,7 +906,6 @@
|
|||||||
"edit_tag": "Tag bearbeiten",
|
"edit_tag": "Tag bearbeiten",
|
||||||
"edit_title": "Titel bearbeiten",
|
"edit_title": "Titel bearbeiten",
|
||||||
"edit_user": "Nutzer bearbeiten",
|
"edit_user": "Nutzer bearbeiten",
|
||||||
"edited": "Bearbeitet",
|
|
||||||
"editor": "Bearbeiter",
|
"editor": "Bearbeiter",
|
||||||
"editor_close_without_save_prompt": "Die Ä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?",
|
||||||
@@ -895,13 +918,13 @@
|
|||||||
"empty_trash_confirmation": "Bist du sicher, dass du den Papierkorb leeren willst?\nDies entfernt alle Dateien im Papierkorb endgültig aus Immich und kann nicht rückgängig gemacht werden!",
|
"empty_trash_confirmation": "Bist du sicher, dass du den Papierkorb leeren willst?\nDies entfernt alle Dateien im Papierkorb endgültig aus Immich und kann nicht rückgängig gemacht werden!",
|
||||||
"enable": "Aktivieren",
|
"enable": "Aktivieren",
|
||||||
"enable_backup": "Sicherung aktivieren",
|
"enable_backup": "Sicherung aktivieren",
|
||||||
"enable_biometric_auth_description": "Gib deinen PIN Code ein, um die biometrische Authentifizierung zu aktivieren",
|
"enable_biometric_auth_description": "Gib deinen PIN-Code ein, um die biometrische Authentifizierung zu aktivieren",
|
||||||
"enabled": "Aktiviert",
|
"enabled": "Aktiviert",
|
||||||
"end_date": "Enddatum",
|
"end_date": "Enddatum",
|
||||||
"enqueued": "Eingereiht",
|
"enqueued": "Eingereiht",
|
||||||
"enter_wifi_name": "WLAN-Name eingeben",
|
"enter_wifi_name": "WLAN-Name eingeben",
|
||||||
"enter_your_pin_code": "PIN Code eingeben",
|
"enter_your_pin_code": "PIN-Code eingeben",
|
||||||
"enter_your_pin_code_subtitle": "Gib deinen PIN Code ein, um auf den gesperrten Ordner zuzugreifen",
|
"enter_your_pin_code_subtitle": "Gib deinen PIN-Code ein, um auf den gesperrten Ordner zuzugreifen",
|
||||||
"error": "Fehler",
|
"error": "Fehler",
|
||||||
"error_change_sort_album": "Ändern der Anzeigereihenfolge fehlgeschlagen",
|
"error_change_sort_album": "Ändern der Anzeigereihenfolge fehlgeschlagen",
|
||||||
"error_delete_face": "Fehler beim Löschen des Gesichts",
|
"error_delete_face": "Fehler beim Löschen des Gesichts",
|
||||||
@@ -940,7 +963,7 @@
|
|||||||
"failed_to_load_notifications": "Fehler beim Laden der Benachrichtigungen",
|
"failed_to_load_notifications": "Fehler beim Laden der Benachrichtigungen",
|
||||||
"failed_to_load_people": "Fehler beim Laden von Personen",
|
"failed_to_load_people": "Fehler beim Laden von Personen",
|
||||||
"failed_to_remove_product_key": "Fehler beim Entfernen des Produktschlüssels",
|
"failed_to_remove_product_key": "Fehler beim Entfernen des Produktschlüssels",
|
||||||
"failed_to_reset_pin_code": "Zurücksetzen des PIN Codes fehlgeschlagen",
|
"failed_to_reset_pin_code": "Zurücksetzen des PIN-Codes fehlgeschlagen",
|
||||||
"failed_to_stack_assets": "Dateien konnten nicht gestapelt werden",
|
"failed_to_stack_assets": "Dateien konnten nicht gestapelt werden",
|
||||||
"failed_to_unstack_assets": "Dateien konnten nicht entstapelt werden",
|
"failed_to_unstack_assets": "Dateien konnten nicht entstapelt werden",
|
||||||
"failed_to_update_notification_status": "Benachrichtigungsstatus aktualisieren fehlgeschlagen",
|
"failed_to_update_notification_status": "Benachrichtigungsstatus aktualisieren fehlgeschlagen",
|
||||||
@@ -1005,7 +1028,7 @@
|
|||||||
"unable_to_remove_partner": "Partner kann nicht entfernt werden",
|
"unable_to_remove_partner": "Partner kann nicht entfernt werden",
|
||||||
"unable_to_remove_reaction": "Reaktion kann nicht entfernt werden",
|
"unable_to_remove_reaction": "Reaktion kann nicht entfernt werden",
|
||||||
"unable_to_reset_password": "Passwort kann nicht zurückgesetzt werden",
|
"unable_to_reset_password": "Passwort kann nicht zurückgesetzt werden",
|
||||||
"unable_to_reset_pin_code": "Zurücksetzen des PIN Code nicht möglich",
|
"unable_to_reset_pin_code": "Zurücksetzen des PIN-Code nicht möglich",
|
||||||
"unable_to_resolve_duplicate": "Duplikate können nicht aufgelöst werden",
|
"unable_to_resolve_duplicate": "Duplikate können nicht aufgelöst werden",
|
||||||
"unable_to_restore_assets": "Dateien konnten nicht wiederhergestellt werden",
|
"unable_to_restore_assets": "Dateien konnten nicht wiederhergestellt werden",
|
||||||
"unable_to_restore_trash": "Papierkorb kann nicht wiederhergestellt werden",
|
"unable_to_restore_trash": "Papierkorb kann nicht wiederhergestellt werden",
|
||||||
@@ -1038,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Fehler bei der Aktualisierung der Beschreibung",
|
"exif_bottom_sheet_description_error": "Fehler bei der Aktualisierung der Beschreibung",
|
||||||
"exif_bottom_sheet_details": "DETAILS",
|
"exif_bottom_sheet_details": "DETAILS",
|
||||||
"exif_bottom_sheet_location": "STANDORT",
|
"exif_bottom_sheet_location": "STANDORT",
|
||||||
|
"exif_bottom_sheet_no_description": "Keine Beschreibung",
|
||||||
"exif_bottom_sheet_people": "PERSONEN",
|
"exif_bottom_sheet_people": "PERSONEN",
|
||||||
"exif_bottom_sheet_person_add_person": "Namen hinzufügen",
|
"exif_bottom_sheet_person_add_person": "Namen hinzufügen",
|
||||||
"exit_slideshow": "Diashow beenden",
|
"exit_slideshow": "Diashow beenden",
|
||||||
@@ -1076,6 +1100,7 @@
|
|||||||
"features_setting_description": "Funktionen der App verwalten",
|
"features_setting_description": "Funktionen der App verwalten",
|
||||||
"file_name": "Dateiname",
|
"file_name": "Dateiname",
|
||||||
"file_name_or_extension": "Dateiname oder -erweiterung",
|
"file_name_or_extension": "Dateiname oder -erweiterung",
|
||||||
|
"file_size": "Dateigröße",
|
||||||
"filename": "Dateiname",
|
"filename": "Dateiname",
|
||||||
"filetype": "Dateityp",
|
"filetype": "Dateityp",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
@@ -1088,7 +1113,7 @@
|
|||||||
"folder_not_found": "Ordner nicht gefunden",
|
"folder_not_found": "Ordner nicht gefunden",
|
||||||
"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",
|
||||||
"forgot_pin_code_question": "PIN Code vergessen?",
|
"forgot_pin_code_question": "PIN-Code vergessen?",
|
||||||
"forward": "Vorwärts",
|
"forward": "Vorwärts",
|
||||||
"gcast_enabled": "Google Cast",
|
"gcast_enabled": "Google Cast",
|
||||||
"gcast_enabled_description": "Diese Funktion lädt externe Quellen von Google, um zu funktionieren.",
|
"gcast_enabled_description": "Diese Funktion lädt externe Quellen von Google, um zu funktionieren.",
|
||||||
@@ -1119,7 +1144,6 @@
|
|||||||
"header_settings_field_validator_msg": "Der Wert darf nicht leer sein",
|
"header_settings_field_validator_msg": "Der Wert darf nicht leer sein",
|
||||||
"header_settings_header_name_input": "Header-Name",
|
"header_settings_header_name_input": "Header-Name",
|
||||||
"header_settings_header_value_input": "Header-Wert",
|
"header_settings_header_value_input": "Header-Wert",
|
||||||
"headers_settings_tile_subtitle": "Definiere einen Proxy-Header, den die Anwendung bei jeder Netzwerkanfrage mitschicken soll",
|
|
||||||
"headers_settings_tile_title": "Benutzerdefinierte Proxy-Header",
|
"headers_settings_tile_title": "Benutzerdefinierte Proxy-Header",
|
||||||
"hi_user": "Hallo {name} ({email})",
|
"hi_user": "Hallo {name} ({email})",
|
||||||
"hide_all_people": "Alle Personen verbergen",
|
"hide_all_people": "Alle Personen verbergen",
|
||||||
@@ -1240,6 +1264,7 @@
|
|||||||
"local_media_summary": "Zusammenfassung der lokalen Medien",
|
"local_media_summary": "Zusammenfassung der lokalen Medien",
|
||||||
"local_network": "Lokales Netzwerk",
|
"local_network": "Lokales Netzwerk",
|
||||||
"local_network_sheet_info": "Die App stellt über diese URL eine Verbindung zum Server her, wenn sie das angegebene WLAN-Netzwerk verwendet",
|
"local_network_sheet_info": "Die App stellt über diese URL eine Verbindung zum Server her, wenn sie das angegebene WLAN-Netzwerk verwendet",
|
||||||
|
"location": "Standort",
|
||||||
"location_permission": "Standort Genehmigung",
|
"location_permission": "Standort Genehmigung",
|
||||||
"location_permission_content": "Um die automatische Umschaltfunktion nutzen zu können, benötigt Immich genaue Standortberechtigung, damit es den Namen des aktuellen WLAN-Netzwerks ermitteln kann",
|
"location_permission_content": "Um die automatische Umschaltfunktion nutzen zu können, benötigt Immich genaue Standortberechtigung, damit es den Namen des aktuellen WLAN-Netzwerks ermitteln kann",
|
||||||
"location_picker_choose_on_map": "Auf der Karte auswählen",
|
"location_picker_choose_on_map": "Auf der Karte auswählen",
|
||||||
@@ -1330,7 +1355,7 @@
|
|||||||
"memories_check_back_tomorrow": "Schau morgen wieder vorbei für weitere Erinnerungen",
|
"memories_check_back_tomorrow": "Schau morgen wieder vorbei für weitere Erinnerungen",
|
||||||
"memories_setting_description": "Verwalte, was du in deinen Erinnerungen siehst",
|
"memories_setting_description": "Verwalte, was du in deinen Erinnerungen siehst",
|
||||||
"memories_start_over": "Erneut beginnen",
|
"memories_start_over": "Erneut beginnen",
|
||||||
"memories_swipe_to_close": "Nach oben Wischen zum schließen",
|
"memories_swipe_to_close": "Nach oben Wischen zum Schließen",
|
||||||
"memory": "Erinnerung",
|
"memory": "Erinnerung",
|
||||||
"memory_lane_title": "Foto-Erinnerungen {title}",
|
"memory_lane_title": "Foto-Erinnerungen {title}",
|
||||||
"menu": "Menü",
|
"menu": "Menü",
|
||||||
@@ -1344,6 +1369,8 @@
|
|||||||
"minute": "Minute",
|
"minute": "Minute",
|
||||||
"minutes": "Minuten",
|
"minutes": "Minuten",
|
||||||
"missing": "Fehlende",
|
"missing": "Fehlende",
|
||||||
|
"mobile_app": "Mobile App",
|
||||||
|
"mobile_app_download_onboarding_note": "Herunterladen der mobilen Begleiter-App über einen der folgenden Möglichkeiten",
|
||||||
"model": "Modell",
|
"model": "Modell",
|
||||||
"month": "Monat",
|
"month": "Monat",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
@@ -1362,6 +1389,8 @@
|
|||||||
"my_albums": "Meine Alben",
|
"my_albums": "Meine Alben",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_or_nickname": "Name oder Nickname",
|
"name_or_nickname": "Name oder Nickname",
|
||||||
|
"navigate": "Navigation",
|
||||||
|
"navigate_to_time": "Navigiere zu Zeit",
|
||||||
"network_requirement_photos_upload": "Mobile Daten verwenden, um Fotos zu sichern",
|
"network_requirement_photos_upload": "Mobile Daten verwenden, um Fotos zu sichern",
|
||||||
"network_requirement_videos_upload": "Mobile Daten verwenden, um Videos zu sichern",
|
"network_requirement_videos_upload": "Mobile Daten verwenden, um Videos zu sichern",
|
||||||
"network_requirements": "Anforderungen ans Netzwerk",
|
"network_requirements": "Anforderungen ans Netzwerk",
|
||||||
@@ -1371,10 +1400,11 @@
|
|||||||
"never": "Niemals",
|
"never": "Niemals",
|
||||||
"new_album": "Neues Album",
|
"new_album": "Neues Album",
|
||||||
"new_api_key": "Neuer API-Schlüssel",
|
"new_api_key": "Neuer API-Schlüssel",
|
||||||
|
"new_date_range": "Neuer Datumsbereich",
|
||||||
"new_password": "Neues Passwort",
|
"new_password": "Neues Passwort",
|
||||||
"new_person": "Neue Person",
|
"new_person": "Neue Person",
|
||||||
"new_pin_code": "Neuer PIN Code",
|
"new_pin_code": "Neuer PIN-Code",
|
||||||
"new_pin_code_subtitle": "Dies ist dein erster Zugriff auf den gesperrten Ordner. Erstelle einen PIN Code für den sicheren Zugriff auf diese Seite",
|
"new_pin_code_subtitle": "Dies ist dein erster Zugriff auf den gesperrten Ordner. Erstelle einen PIN-Code für den sicheren Zugriff auf diese Seite",
|
||||||
"new_timeline": "Neue Zeitleiste",
|
"new_timeline": "Neue Zeitleiste",
|
||||||
"new_user_created": "Neuer Benutzer wurde erstellt",
|
"new_user_created": "Neuer Benutzer wurde erstellt",
|
||||||
"new_version_available": "NEUE VERSION VERFÜGBAR",
|
"new_version_available": "NEUE VERSION VERFÜGBAR",
|
||||||
@@ -1421,6 +1451,9 @@
|
|||||||
"notifications": "Benachrichtigungen",
|
"notifications": "Benachrichtigungen",
|
||||||
"notifications_setting_description": "Benachrichtigungen verwalten",
|
"notifications_setting_description": "Benachrichtigungen verwalten",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Obtainium Konfiguratior",
|
||||||
|
"obtainium_configurator_instructions": "Du kannst Obtainium benutzen, um die App direkt aus den Github Releases zu installieren oder zu aktualisieren. Bitte erstelle dazu einen API-Schlüssel und wähle eine Variante aus um einen Obtainium-Konfigurationslink zu erstellen",
|
||||||
|
"ocr": "OCR",
|
||||||
"official_immich_resources": "Offizielle Immich Quellen",
|
"official_immich_resources": "Offizielle Immich Quellen",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offset": "Verschiebung",
|
"offset": "Verschiebung",
|
||||||
@@ -1514,10 +1547,10 @@
|
|||||||
"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ähle einen Ort",
|
"pick_a_location": "Wähle einen Ort",
|
||||||
"pin_code_changed_successfully": "PIN Code erfolgreich geändert",
|
"pin_code_changed_successfully": "PIN-Code erfolgreich geändert",
|
||||||
"pin_code_reset_successfully": "PIN Code erfolgreich zurückgesetzt",
|
"pin_code_reset_successfully": "PIN-Code erfolgreich zurückgesetzt",
|
||||||
"pin_code_setup_successfully": "PIN Code erfolgreich festgelegt",
|
"pin_code_setup_successfully": "PIN-Code erfolgreich festgelegt",
|
||||||
"pin_verification": "PIN Code Überprüfung",
|
"pin_verification": "PIN-Code Überprüfung",
|
||||||
"place": "Ort",
|
"place": "Ort",
|
||||||
"places": "Orte",
|
"places": "Orte",
|
||||||
"places_count": "{count, plural, one {{count, number} Ort} other {{count, number} Orte}}",
|
"places_count": "{count, plural, one {{count, number} Ort} other {{count, number} Orte}}",
|
||||||
@@ -1525,6 +1558,9 @@
|
|||||||
"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",
|
||||||
|
"play_original_video": "Originales Video abspielen",
|
||||||
|
"play_original_video_setting_description": "Bevorzugen die Wiedergabe von Originalvideos gegenüber transkodierten Videos. Wenn das Original nicht kompatibel ist, wird es möglicherweise nicht korrekt wiedergegeben.",
|
||||||
|
"play_transcoded_video": "Transkodiertes Video abspielen",
|
||||||
"please_auth_to_access": "Für den Zugriff bitte Authentifizieren",
|
"please_auth_to_access": "Für den Zugriff bitte Authentifizieren",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preferences_settings_subtitle": "App-Einstellungen verwalten",
|
"preferences_settings_subtitle": "App-Einstellungen verwalten",
|
||||||
@@ -1542,13 +1578,9 @@
|
|||||||
"privacy": "Privatsphäre",
|
"privacy": "Privatsphäre",
|
||||||
"profile": "Profil",
|
"profile": "Profil",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_out_of_date_major": "Mobile-App ist veraltet. Bitte aktualisiere auf die neueste Major-Version.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Mobile-App ist veraltet. Bitte aktualisiere auf die neueste Minor-Version.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Die App- und Server-Versionen sind aktuell",
|
"profile_drawer_client_server_up_to_date": "Die App- und Server-Versionen sind aktuell",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Schreibgeschützter Modus aktiviert. Halte das Benutzer-Avatar-Symbol gedrückt, um den Modus zu verlassen.",
|
"profile_drawer_readonly_mode": "Schreibgeschützter Modus aktiviert. Halte das Benutzer-Avatar-Symbol gedrückt, um den Modus zu verlassen.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server-Version ist veraltet. Bitte aktualisiere auf die neueste Major-Version.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Server-Version ist veraltet. Bitte aktualisiere auf die neueste Minor-Version.",
|
|
||||||
"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",
|
||||||
@@ -1650,21 +1682,22 @@
|
|||||||
"repair": "Reparatur",
|
"repair": "Reparatur",
|
||||||
"repair_no_results_message": "Nicht auffindbare und fehlende Dateien werden hier angezeigt",
|
"repair_no_results_message": "Nicht auffindbare und fehlende Dateien werden hier angezeigt",
|
||||||
"replace_with_upload": "Durch Upload ersetzen",
|
"replace_with_upload": "Durch Upload ersetzen",
|
||||||
"repository": "Repository",
|
"repository": "Repositorium",
|
||||||
"require_password": "Passwort erforderlich",
|
"require_password": "Passwort erforderlich",
|
||||||
"require_user_to_change_password_on_first_login": "Benutzer muss das Passwort beim ersten Login ändern",
|
"require_user_to_change_password_on_first_login": "Benutzer muss das Passwort beim ersten Login ändern",
|
||||||
"rescan": "Erneut scannen",
|
"rescan": "Erneut scannen",
|
||||||
"reset": "Zurücksetzen",
|
"reset": "Zurücksetzen",
|
||||||
"reset_password": "Passwort zurücksetzen",
|
"reset_password": "Passwort zurücksetzen",
|
||||||
"reset_people_visibility": "Sichtbarkeit von Personen zurücksetzen",
|
"reset_people_visibility": "Sichtbarkeit von Personen zurücksetzen",
|
||||||
"reset_pin_code": "PIN Code zurücksetzen",
|
"reset_pin_code": "PIN-Code zurücksetzen",
|
||||||
"reset_pin_code_description": "Falls du deinen PIN Code vergessen hast, wende dich an deinen Immich-Administrator um ihn zurücksetzen zu lassen",
|
"reset_pin_code_description": "Falls du deinen PIN-Code vergessen hast, kannst du dich an den Server-Administrator wenden, um ihn zurückzusetzen",
|
||||||
"reset_pin_code_success": "PIN Code erfolgreich zurückgesetzt",
|
"reset_pin_code_success": "PIN-Code erfolgreich zurückgesetzt",
|
||||||
"reset_pin_code_with_password": "Mit deinem Passwort kannst du jederzeit deinen PIN Code zurücksetzen",
|
"reset_pin_code_with_password": "Mit deinem Passwort kannst du jederzeit deinen PIN-Code zurücksetzen",
|
||||||
"reset_sqlite": "SQLite Datenbank zurücksetzen",
|
"reset_sqlite": "SQLite Datenbank zurücksetzen",
|
||||||
"reset_sqlite_confirmation": "Bist du sicher, dass du die SQLite-Datenbank zurücksetzen willst? Du musst dich ab- und wieder anmelden, um die Daten neu zu synchronisieren",
|
"reset_sqlite_confirmation": "Bist du sicher, dass du die SQLite-Datenbank zurücksetzen willst? Du musst dich ab- und wieder anmelden, um die Daten neu zu synchronisieren",
|
||||||
"reset_sqlite_success": "SQLite Datenbank erfolgreich zurückgesetzt",
|
"reset_sqlite_success": "SQLite Datenbank erfolgreich zurückgesetzt",
|
||||||
"reset_to_default": "Auf Standard zurücksetzen",
|
"reset_to_default": "Auf Standard zurücksetzen",
|
||||||
|
"resolution": "Auflösung",
|
||||||
"resolve_duplicates": "Duplikate entfernen",
|
"resolve_duplicates": "Duplikate entfernen",
|
||||||
"resolved_all_duplicates": "Alle Duplikate aufgelöst",
|
"resolved_all_duplicates": "Alle Duplikate aufgelöst",
|
||||||
"restore": "Wiederherstellen",
|
"restore": "Wiederherstellen",
|
||||||
@@ -1683,6 +1716,7 @@
|
|||||||
"running": "Läuft",
|
"running": "Läuft",
|
||||||
"save": "Speichern",
|
"save": "Speichern",
|
||||||
"save_to_gallery": "In Galerie speichern",
|
"save_to_gallery": "In Galerie speichern",
|
||||||
|
"saved": "Gespeichert",
|
||||||
"saved_api_key": "API-Schlüssel wurde gespeichert",
|
"saved_api_key": "API-Schlüssel wurde gespeichert",
|
||||||
"saved_profile": "Profil gespeichert",
|
"saved_profile": "Profil gespeichert",
|
||||||
"saved_settings": "Einstellungen gespeichert",
|
"saved_settings": "Einstellungen gespeichert",
|
||||||
@@ -1699,6 +1733,9 @@
|
|||||||
"search_by_description_example": "Wandern in Sapa",
|
"search_by_description_example": "Wandern in Sapa",
|
||||||
"search_by_filename": "Suche nach Dateiname oder -erweiterung",
|
"search_by_filename": "Suche nach Dateiname oder -erweiterung",
|
||||||
"search_by_filename_example": "z.B. IMG_1234.JPG oder PNG",
|
"search_by_filename_example": "z.B. IMG_1234.JPG oder PNG",
|
||||||
|
"search_by_ocr": "Suche per OCR",
|
||||||
|
"search_by_ocr_example": "Latte",
|
||||||
|
"search_camera_lens_model": "Suche nach Kameralinse...",
|
||||||
"search_camera_make": "Suche nach Kameramarke...",
|
"search_camera_make": "Suche nach Kameramarke...",
|
||||||
"search_camera_model": "Suche nach Kameramodell...",
|
"search_camera_model": "Suche nach Kameramodell...",
|
||||||
"search_city": "Suche nach Stadt...",
|
"search_city": "Suche nach Stadt...",
|
||||||
@@ -1715,6 +1752,7 @@
|
|||||||
"search_filter_location_title": "Ort auswählen",
|
"search_filter_location_title": "Ort auswählen",
|
||||||
"search_filter_media_type": "Medientyp",
|
"search_filter_media_type": "Medientyp",
|
||||||
"search_filter_media_type_title": "Medientyp auswählen",
|
"search_filter_media_type_title": "Medientyp auswählen",
|
||||||
|
"search_filter_ocr": "Suche per OCR",
|
||||||
"search_filter_people_title": "Personen auswählen",
|
"search_filter_people_title": "Personen auswählen",
|
||||||
"search_for": "Suche nach",
|
"search_for": "Suche nach",
|
||||||
"search_for_existing_person": "Suche nach vorhandener Person",
|
"search_for_existing_person": "Suche nach vorhandener Person",
|
||||||
@@ -1777,6 +1815,7 @@
|
|||||||
"server_online": "Server online",
|
"server_online": "Server online",
|
||||||
"server_privacy": "Privatsphäre auf dem Server",
|
"server_privacy": "Privatsphäre auf dem Server",
|
||||||
"server_stats": "Server-Statistiken",
|
"server_stats": "Server-Statistiken",
|
||||||
|
"server_update_available": "Server Update verfügbar",
|
||||||
"server_version": "Server-Version",
|
"server_version": "Server-Version",
|
||||||
"set": "Speichern",
|
"set": "Speichern",
|
||||||
"set_as_album_cover": "Als Albumcover festlegen",
|
"set_as_album_cover": "Als Albumcover festlegen",
|
||||||
@@ -1805,13 +1844,15 @@
|
|||||||
"setting_notifications_subtitle": "Benachrichtigungen anpassen",
|
"setting_notifications_subtitle": "Benachrichtigungen anpassen",
|
||||||
"setting_notifications_total_progress_subtitle": "Gesamter Upload-Fortschritt (abgeschlossen/Anzahl Elemente)",
|
"setting_notifications_total_progress_subtitle": "Gesamter Upload-Fortschritt (abgeschlossen/Anzahl Elemente)",
|
||||||
"setting_notifications_total_progress_title": "Zeige den Gesamtfortschritt der Hintergrundsicherung",
|
"setting_notifications_total_progress_title": "Zeige den Gesamtfortschritt der Hintergrundsicherung",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Videos automatisch wiedergeben sobald sie geöffnet werden",
|
||||||
|
"setting_video_viewer_auto_play_title": "Videos automatisch wiedergeben",
|
||||||
"setting_video_viewer_looping_title": "Video-Wiederholung",
|
"setting_video_viewer_looping_title": "Video-Wiederholung",
|
||||||
"setting_video_viewer_original_video_subtitle": "Beim Streaming eines Videos vom Server wird das Original abgespielt, auch wenn eine Transkodierung verfügbar ist. Kann zu Pufferung führen. Lokal verfügbare Videos werden unabhängig von dieser Einstellung in Originalqualität wiedergegeben.",
|
"setting_video_viewer_original_video_subtitle": "Beim Streaming eines Videos vom Server wird das Original abgespielt, auch wenn eine Transkodierung verfügbar ist. Kann zu Pufferung führen. Lokal verfügbare Videos werden unabhängig von dieser Einstellung in Originalqualität wiedergegeben.",
|
||||||
"setting_video_viewer_original_video_title": "Originalvideo erzwingen",
|
"setting_video_viewer_original_video_title": "Originalvideo erzwingen",
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
"settings_require_restart": "Bitte starte Immich neu, um diese Einstellung anzuwenden",
|
"settings_require_restart": "Bitte starte Immich neu, um diese Einstellung anzuwenden",
|
||||||
"settings_saved": "Einstellungen gespeichert",
|
"settings_saved": "Einstellungen gespeichert",
|
||||||
"setup_pin_code": "Einen PIN Code festlegen",
|
"setup_pin_code": "Einen PIN-Code festlegen",
|
||||||
"share": "Teilen",
|
"share": "Teilen",
|
||||||
"share_action_prompt": "{count} Dateien geteilt",
|
"share_action_prompt": "{count} Dateien geteilt",
|
||||||
"share_add_photos": "Fotos hinzufügen",
|
"share_add_photos": "Fotos hinzufügen",
|
||||||
@@ -1954,7 +1995,7 @@
|
|||||||
"sync_remote": "mit Server synchronisieren",
|
"sync_remote": "mit Server synchronisieren",
|
||||||
"sync_status": "Synchronisierungstatus",
|
"sync_status": "Synchronisierungstatus",
|
||||||
"sync_status_subtitle": "Synchronisierungssystem anzeigen und bearbeiten",
|
"sync_status_subtitle": "Synchronisierungssystem anzeigen und bearbeiten",
|
||||||
"sync_upload_album_setting_subtitle": "Erstelle deine ausgewählten Alben in Immich und lade die Fotos und Videos dort hoch",
|
"sync_upload_album_setting_subtitle": "Erstelle und lade deine ausgewählten Fotos und Videos in die ausgewählten Alben auf Immich hoch",
|
||||||
"tag": "Tag",
|
"tag": "Tag",
|
||||||
"tag_assets": "Dateien taggen",
|
"tag_assets": "Dateien taggen",
|
||||||
"tag_created": "Tag erstellt: {tag}",
|
"tag_created": "Tag erstellt: {tag}",
|
||||||
@@ -1984,6 +2025,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Dreistufiges Laden aktivieren",
|
"theme_setting_three_stage_loading_title": "Dreistufiges Laden aktivieren",
|
||||||
"they_will_be_merged_together": "Sie werden zusammengeführt",
|
"they_will_be_merged_together": "Sie werden zusammengeführt",
|
||||||
"third_party_resources": "Drittanbieter-Quellen",
|
"third_party_resources": "Drittanbieter-Quellen",
|
||||||
|
"time": "Zeit",
|
||||||
"time_based_memories": "Zeitbasierte Erinnerungen",
|
"time_based_memories": "Zeitbasierte Erinnerungen",
|
||||||
"timeline": "Zeitleiste",
|
"timeline": "Zeitleiste",
|
||||||
"timezone": "Zeitzone",
|
"timezone": "Zeitzone",
|
||||||
@@ -2012,11 +2054,12 @@
|
|||||||
"trash_page_restore_all": "Alle wiederherstellen",
|
"trash_page_restore_all": "Alle wiederherstellen",
|
||||||
"trash_page_select_assets_btn": "Elemente auswählen",
|
"trash_page_select_assets_btn": "Elemente auswählen",
|
||||||
"trash_page_title": "Papierkorb ({count})",
|
"trash_page_title": "Papierkorb ({count})",
|
||||||
"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": "Objekte im Papierkorb werden nach {days, plural, one {# Tag} other {# Tagen}} endgültig gelöscht.",
|
||||||
"troubleshoot": "Fehler beheben",
|
"troubleshoot": "Fehler beheben",
|
||||||
"type": "Typ",
|
"type": "Typ",
|
||||||
"unable_to_change_pin_code": "PIN Code konnte nicht geändert werden",
|
"unable_to_change_pin_code": "PIN-Code konnte nicht geändert werden",
|
||||||
"unable_to_setup_pin_code": "PIN Code konnte nicht festgelegt werden",
|
"unable_to_check_version": "App oder Server Versionscheck nicht möglich",
|
||||||
|
"unable_to_setup_pin_code": "PIN-Code konnte nicht festgelegt werden",
|
||||||
"unarchive": "Entarchivieren",
|
"unarchive": "Entarchivieren",
|
||||||
"unarchive_action_prompt": "{count} aus dem Archiv entfernt",
|
"unarchive_action_prompt": "{count} aus dem Archiv entfernt",
|
||||||
"unarchived_count": "{count, plural, other {# entarchiviert}}",
|
"unarchived_count": "{count, plural, other {# entarchiviert}}",
|
||||||
@@ -2073,8 +2116,8 @@
|
|||||||
"user_has_been_deleted": "Dieser Benutzer wurde gelöscht.",
|
"user_has_been_deleted": "Dieser Benutzer wurde gelöscht.",
|
||||||
"user_id": "Nutzer-ID",
|
"user_id": "Nutzer-ID",
|
||||||
"user_liked": "{type, select, photo {Dieses Foto} video {Dieses Video} asset {Diese Datei} other {Dies}} gefällt {user}",
|
"user_liked": "{type, select, photo {Dieses Foto} video {Dieses Video} asset {Diese Datei} other {Dies}} gefällt {user}",
|
||||||
"user_pin_code_settings": "PIN Code",
|
"user_pin_code_settings": "PIN-Code",
|
||||||
"user_pin_code_settings_description": "Verwalte deinen PIN Code",
|
"user_pin_code_settings_description": "Verwalte deinen PIN-Code",
|
||||||
"user_privacy": "Datenschutzeinstellungen Nutzer",
|
"user_privacy": "Datenschutzeinstellungen Nutzer",
|
||||||
"user_purchase_settings": "Kauf",
|
"user_purchase_settings": "Kauf",
|
||||||
"user_purchase_settings_description": "Kauf verwalten",
|
"user_purchase_settings_description": "Kauf verwalten",
|
||||||
@@ -2085,7 +2128,7 @@
|
|||||||
"username": "Nutzername",
|
"username": "Nutzername",
|
||||||
"users": "Benutzer",
|
"users": "Benutzer",
|
||||||
"users_added_to_album_count": "{count, plural, one {# Benutzer} other {# Benutzer}} zum Album hinzugefügt",
|
"users_added_to_album_count": "{count, plural, one {# Benutzer} other {# Benutzer}} zum Album hinzugefügt",
|
||||||
"utilities": "Hilfsmittel",
|
"utilities": "Werkzeuge",
|
||||||
"validate": "Validieren",
|
"validate": "Validieren",
|
||||||
"validate_endpoint_error": "Bitte gib eine gültige URL ein",
|
"validate_endpoint_error": "Bitte gib eine gültige URL ein",
|
||||||
"variables": "Variablen",
|
"variables": "Variablen",
|
||||||
@@ -2124,7 +2167,7 @@
|
|||||||
"welcome": "Willkommen",
|
"welcome": "Willkommen",
|
||||||
"welcome_to_immich": "Willkommen bei Immich",
|
"welcome_to_immich": "Willkommen bei Immich",
|
||||||
"wifi_name": "WLAN-Name",
|
"wifi_name": "WLAN-Name",
|
||||||
"wrong_pin_code": "PIN Code falsch",
|
"wrong_pin_code": "PIN-Code falsch",
|
||||||
"year": "Jahr",
|
"year": "Jahr",
|
||||||
"years_ago": "Vor {years, plural, one {einem Jahr} other {# Jahren}}",
|
"years_ago": "Vor {years, plural, one {einem Jahr} other {# Jahren}}",
|
||||||
"yes": "Ja",
|
"yes": "Ja",
|
||||||
|
|||||||
33
i18n/el.json
33
i18n/el.json
@@ -11,10 +11,10 @@
|
|||||||
"activity_changed": "Η δραστηριότητα είναι {enabled, select, true {ενεργοποιημένη} other {απενεργοποιημένη}}",
|
"activity_changed": "Η δραστηριότητα είναι {enabled, select, true {ενεργοποιημένη} other {απενεργοποιημένη}}",
|
||||||
"add": "Προσθήκη",
|
"add": "Προσθήκη",
|
||||||
"add_a_description": "Προσθήκη περιγραφής",
|
"add_a_description": "Προσθήκη περιγραφής",
|
||||||
"add_a_location": "Προσθήκη μίας τοποθεσίας",
|
"add_a_location": "Προσθήκη τοποθεσίας",
|
||||||
"add_a_name": "Προσθέστε ένα όνομα",
|
"add_a_name": "Προσθήκη ονόματος",
|
||||||
"add_a_title": "Προσθήκη τίτλου",
|
"add_a_title": "Προσθήκη τίτλου",
|
||||||
"add_birthday": "Προσθέστε την ημερομηνία γενεθλίων",
|
"add_birthday": "Προσθήκη γενεθλίων",
|
||||||
"add_endpoint": "Προσθήκη τελικού σημείου",
|
"add_endpoint": "Προσθήκη τελικού σημείου",
|
||||||
"add_exclusion_pattern": "Προσθήκη μοτίβου αποκλεισμού",
|
"add_exclusion_pattern": "Προσθήκη μοτίβου αποκλεισμού",
|
||||||
"add_import_path": "Προσθήκη μονοπατιού εισαγωγής",
|
"add_import_path": "Προσθήκη μονοπατιού εισαγωγής",
|
||||||
@@ -28,11 +28,12 @@
|
|||||||
"add_to_album": "Προσθήκη σε άλμπουμ",
|
"add_to_album": "Προσθήκη σε άλμπουμ",
|
||||||
"add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}",
|
"add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}",
|
"add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}",
|
||||||
"add_to_album_bottom_sheet_some_local_assets": "Ορισμένοι τοπικά στοιχεία δεν μπόρεσαν να προστεθούν στο άλμπουμ",
|
"add_to_album_bottom_sheet_some_local_assets": "Ορισμένα τοπικά στοιχεία δεν μπόρεσαν να προστεθούν στο άλμπουμ",
|
||||||
"add_to_album_toggle": "Εναλλαγή επιλογής για το {album}",
|
"add_to_album_toggle": "Εναλλαγή επιλογής για το {album}",
|
||||||
"add_to_albums": "Προσθήκη στα άλμπουμ",
|
"add_to_albums": "Προσθήκη στα άλμπουμ",
|
||||||
"add_to_albums_count": "Προσθήκη στα άλμπουμ ({count})",
|
"add_to_albums_count": "Προσθήκη στα άλμπουμ ({count})",
|
||||||
"add_to_shared_album": "Προσθήκη σε κοινόχρηστο άλμπουμ",
|
"add_to_shared_album": "Προσθήκη σε κοινόχρηστο άλμπουμ",
|
||||||
|
"add_upload_to_stack": "Προσθήκη αρχείου στην ουρά",
|
||||||
"add_url": "Προσθήκη Συνδέσμου",
|
"add_url": "Προσθήκη Συνδέσμου",
|
||||||
"added_to_archive": "Προστέθηκε στο αρχείο",
|
"added_to_archive": "Προστέθηκε στο αρχείο",
|
||||||
"added_to_favorites": "Προστέθηκε στα αγαπημένα",
|
"added_to_favorites": "Προστέθηκε στα αγαπημένα",
|
||||||
@@ -210,6 +211,7 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Παράβλεψη σφαλμάτων επικύρωσης της πιστοποίησης TLS (δεν προτείνεται)",
|
"notification_email_ignore_certificate_errors_description": "Παράβλεψη σφαλμάτων επικύρωσης της πιστοποίησης TLS (δεν προτείνεται)",
|
||||||
"notification_email_password_description": "Κωδικός για την αυθεντικοποίηση με τον server του email",
|
"notification_email_password_description": "Κωδικός για την αυθεντικοποίηση με τον server του email",
|
||||||
"notification_email_port_description": "Θύρα του email server (πχ 25, 465, ή 587)",
|
"notification_email_port_description": "Θύρα του email server (πχ 25, 465, ή 587)",
|
||||||
|
"notification_email_secure_description": "Χρήση SMTPS (SMTP over TLS)",
|
||||||
"notification_email_sent_test_email_button": "Αποστολή test email και αποθήκευση",
|
"notification_email_sent_test_email_button": "Αποστολή test email και αποθήκευση",
|
||||||
"notification_email_setting_description": "Ρυθμίσεις για την αποστολή ειδοποιήσεων μέσω email",
|
"notification_email_setting_description": "Ρυθμίσεις για την αποστολή ειδοποιήσεων μέσω email",
|
||||||
"notification_email_test_email": "Αποστολή test email",
|
"notification_email_test_email": "Αποστολή test email",
|
||||||
@@ -332,7 +334,7 @@
|
|||||||
"transcoding_max_b_frames": "Μέγιστος αριθμός B-frames(Bidirectional Predictive Frames)",
|
"transcoding_max_b_frames": "Μέγιστος αριθμός B-frames(Bidirectional Predictive Frames)",
|
||||||
"transcoding_max_b_frames_description": "Οι υψηλότερες τιμές βελτιώνουν την αποδοτικότητα της συμπίεσης, αλλά επιβραδύνουν την κωδικοποίηση. Ενδέχεται να μην είναι συμβατές με την επιτάχυνση υλικού σε παλαιότερες συσκευές. Η τιμή 0 απενεργοποιεί τα B-frames, ενώ η -1, τη ρυθμίζει αυτόματα.",
|
"transcoding_max_b_frames_description": "Οι υψηλότερες τιμές βελτιώνουν την αποδοτικότητα της συμπίεσης, αλλά επιβραδύνουν την κωδικοποίηση. Ενδέχεται να μην είναι συμβατές με την επιτάχυνση υλικού σε παλαιότερες συσκευές. Η τιμή 0 απενεργοποιεί τα B-frames, ενώ η -1, τη ρυθμίζει αυτόματα.",
|
||||||
"transcoding_max_bitrate": "Μέγιστος ρυθμός μετάδοσης (bitrate)",
|
"transcoding_max_bitrate": "Μέγιστος ρυθμός μετάδοσης (bitrate)",
|
||||||
"transcoding_max_bitrate_description": "Η ρύθμιση ενός μέγιστου ρυθμού μετάδοσης(bitrate) μπορεί να κάνει το μέγεθος των αρχείων πιο προβλέψιμο, αλλά με ένα μικρό κόστος στην ποιότητα. Στην ανάλυση των 720p, οι τυπικές τιμές είναι 2600 kbit/s για VP9 ή HEVC, ή 4500 kbit/s για H.264. Απενεργοποιείται εάν οριστεί σε 0.",
|
"transcoding_max_bitrate_description": "Ο καθορισμός του μέγιστου bitrate μπορεί να κάνει το μέγεθος των αρχείων πιο προβλέψιμο, με ένα μικρό κόστος στην ποιότητα. Στα 720p, οι τυπικές τιμές είναι 2600 kbit/s για VP9 ή HEVC, ή 4500 kbit/s για H.264. Αν οριστεί σε 0, η ρύθμιση απενεργοποιείται. Όταν δεν καθορίζεται, θεωρείται το k (για kbit/s)· επομένως τα 5000, 5000k και 5M (για Mbit/s) είναι ισοδύναμα.",
|
||||||
"transcoding_max_keyframe_interval": "Μέγιστο χρονικό διάστημα μεταξύ των καρέ αναφοράς (keyframe)",
|
"transcoding_max_keyframe_interval": "Μέγιστο χρονικό διάστημα μεταξύ των καρέ αναφοράς (keyframe)",
|
||||||
"transcoding_max_keyframe_interval_description": "Ορίζει το μέγιστο διάστημα μεταξύ των καρέ αναφοράς. Χαμηλότερες τιμές μειώνουν την αποδοτικότητα συμπίεσης, αλλά βελτιώνουν τον χρόνο αναζήτησης και μπορεί να βελτιώσουν την ποιότητα σε σκηνές με γρήγορη κίνηση. Η τιμή 0 ρυθμίζει αυτό το διάστημα αυτόματα.",
|
"transcoding_max_keyframe_interval_description": "Ορίζει το μέγιστο διάστημα μεταξύ των καρέ αναφοράς. Χαμηλότερες τιμές μειώνουν την αποδοτικότητα συμπίεσης, αλλά βελτιώνουν τον χρόνο αναζήτησης και μπορεί να βελτιώσουν την ποιότητα σε σκηνές με γρήγορη κίνηση. Η τιμή 0 ρυθμίζει αυτό το διάστημα αυτόματα.",
|
||||||
"transcoding_optimal_description": "Βίντεο με ανώτερη ανάλυση από την επιθυμητή ή σε μη αποδεκτή μορφή",
|
"transcoding_optimal_description": "Βίντεο με ανώτερη ανάλυση από την επιθυμητή ή σε μη αποδεκτή μορφή",
|
||||||
@@ -350,7 +352,7 @@
|
|||||||
"transcoding_target_resolution": "Επιθυμητή ανάλυση",
|
"transcoding_target_resolution": "Επιθυμητή ανάλυση",
|
||||||
"transcoding_target_resolution_description": "Οι υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά απαιτούν περισσότερο χρόνο για κωδικοποίηση, παράγουν μεγαλύτερα αρχεία και μπορεί να μειώσουν την απόκριση της εφαρμογής.",
|
"transcoding_target_resolution_description": "Οι υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά απαιτούν περισσότερο χρόνο για κωδικοποίηση, παράγουν μεγαλύτερα αρχεία και μπορεί να μειώσουν την απόκριση της εφαρμογής.",
|
||||||
"transcoding_temporal_aq": "Χρονική Προσαρμοστική Ποιότητα AQ(Adaptive Quantization)",
|
"transcoding_temporal_aq": "Χρονική Προσαρμοστική Ποιότητα AQ(Adaptive Quantization)",
|
||||||
"transcoding_temporal_aq_description": "Ισχύει μόνο για NVENC. Αυξάνει την ποιότητα σε σκηνές με υψηλή λεπτομέρεια και χαμηλή κίνηση. Ενδέχεται να μην είναι συμβατό με παλαιότερες συσκευές.",
|
"transcoding_temporal_aq_description": "Ισχύει μόνο για το NVENC. Η Χρονική προσαρμογή ποιότητας (Temporal Adaptive Quantization) βελτιώνει την ποιότητα σε σκηνές με υψηλή λεπτομέρεια και χαμηλή κίνηση. Ενδέχεται να μην είναι συμβατή με παλαιότερες συσκευές.",
|
||||||
"transcoding_threads": "Νήματα (παράλληλες διεργασίες)",
|
"transcoding_threads": "Νήματα (παράλληλες διεργασίες)",
|
||||||
"transcoding_threads_description": "Οι υψηλότερες τιμές οδηγούν σε ταχύτερη κωδικοποίηση, αλλά αφήνουν λιγότερο χώρο στον διακομιστή για να επεξεργαστεί άλλες εργασίες όσο είναι ενεργή. Αυτή η τιμή δεν πρέπει να ξεπερνά τον αριθμό των πυρήνων του επεξεργαστή. Η μέγιστη αξιοποίηση επιτυγχάνεται αν οριστεί στο 0.",
|
"transcoding_threads_description": "Οι υψηλότερες τιμές οδηγούν σε ταχύτερη κωδικοποίηση, αλλά αφήνουν λιγότερο χώρο στον διακομιστή για να επεξεργαστεί άλλες εργασίες όσο είναι ενεργή. Αυτή η τιμή δεν πρέπει να ξεπερνά τον αριθμό των πυρήνων του επεξεργαστή. Η μέγιστη αξιοποίηση επιτυγχάνεται αν οριστεί στο 0.",
|
||||||
"transcoding_tone_mapping": "Χαρτογράφηση χρωματικών τόνων",
|
"transcoding_tone_mapping": "Χαρτογράφηση χρωματικών τόνων",
|
||||||
@@ -465,9 +467,11 @@
|
|||||||
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
|
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
|
||||||
"api_key_empty": "Το όνομα του κλειδιού API, δεν πρέπει να είναι κενό",
|
"api_key_empty": "Το όνομα του κλειδιού API, δεν πρέπει να είναι κενό",
|
||||||
"api_keys": "Κλειδιά API",
|
"api_keys": "Κλειδιά API",
|
||||||
|
"app_architecture_variant": "Παραλλαγή (Αρχιτεκτονική)",
|
||||||
"app_bar_signout_dialog_content": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε;",
|
"app_bar_signout_dialog_content": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε;",
|
||||||
"app_bar_signout_dialog_ok": "Ναι",
|
"app_bar_signout_dialog_ok": "Ναι",
|
||||||
"app_bar_signout_dialog_title": "Αποσύνδεση",
|
"app_bar_signout_dialog_title": "Αποσύνδεση",
|
||||||
|
"app_download_links": "Σύνδεσμοι Λήψης Εφαρμογής",
|
||||||
"app_settings": "Ρυθμίσεις εφαρμογής",
|
"app_settings": "Ρυθμίσεις εφαρμογής",
|
||||||
"appears_in": "Εμφανίζεται σε",
|
"appears_in": "Εμφανίζεται σε",
|
||||||
"apply_count": "Εφαρμογή ({count, number})",
|
"apply_count": "Εφαρμογή ({count, number})",
|
||||||
@@ -700,7 +704,6 @@
|
|||||||
"comments_and_likes": "Σχόλια & αντιδράσεις (likes)",
|
"comments_and_likes": "Σχόλια & αντιδράσεις (likes)",
|
||||||
"comments_are_disabled": "Τα σχόλια είναι απενεργοποιημένα",
|
"comments_are_disabled": "Τα σχόλια είναι απενεργοποιημένα",
|
||||||
"common_create_new_album": "Δημιουργία νέου άλμπουμ",
|
"common_create_new_album": "Δημιουργία νέου άλμπουμ",
|
||||||
"common_server_error": "Ελέγξτε τη σύνδεσή σας, βεβαιωθείτε ότι ο διακομιστής είναι προσβάσιμος και ότι οι εκδόσεις της εφαρμογής/διακομιστή είναι συμβατές.",
|
|
||||||
"completed": "Ολοκληρώθηκε",
|
"completed": "Ολοκληρώθηκε",
|
||||||
"confirm": "Επιβεβαίωση",
|
"confirm": "Επιβεβαίωση",
|
||||||
"confirm_admin_password": "Επιβεβαίωση κωδικού Διαχειριστή",
|
"confirm_admin_password": "Επιβεβαίωση κωδικού Διαχειριστή",
|
||||||
@@ -882,7 +885,6 @@
|
|||||||
"edit_tag": "Επεξεργασία ετικέτας",
|
"edit_tag": "Επεξεργασία ετικέτας",
|
||||||
"edit_title": "Επεξεργασία Τίτλου",
|
"edit_title": "Επεξεργασία Τίτλου",
|
||||||
"edit_user": "Επεξεργασία χρήστη",
|
"edit_user": "Επεξεργασία χρήστη",
|
||||||
"edited": "Επεξεργάστηκε",
|
|
||||||
"editor": "Επεξεργαστής",
|
"editor": "Επεξεργαστής",
|
||||||
"editor_close_without_save_prompt": "Αυτές οι αλλαγές δεν θα αποθηκευτούν",
|
"editor_close_without_save_prompt": "Αυτές οι αλλαγές δεν θα αποθηκευτούν",
|
||||||
"editor_close_without_save_title": "Κλείσιμο επεξεργαστή;",
|
"editor_close_without_save_title": "Κλείσιμο επεξεργαστή;",
|
||||||
@@ -1038,6 +1040,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Σφάλμα κατά την ενημέρωση της περιγραφής",
|
"exif_bottom_sheet_description_error": "Σφάλμα κατά την ενημέρωση της περιγραφής",
|
||||||
"exif_bottom_sheet_details": "ΛΕΠΤΟΜΕΡΕΙΕΣ",
|
"exif_bottom_sheet_details": "ΛΕΠΤΟΜΕΡΕΙΕΣ",
|
||||||
"exif_bottom_sheet_location": "ΤΟΠΟΘΕΣΙΑ",
|
"exif_bottom_sheet_location": "ΤΟΠΟΘΕΣΙΑ",
|
||||||
|
"exif_bottom_sheet_no_description": "Καμία περιγραφή",
|
||||||
"exif_bottom_sheet_people": "ΑΤΟΜΑ",
|
"exif_bottom_sheet_people": "ΑΤΟΜΑ",
|
||||||
"exif_bottom_sheet_person_add_person": "Προσθήκη ονόματος",
|
"exif_bottom_sheet_person_add_person": "Προσθήκη ονόματος",
|
||||||
"exit_slideshow": "Έξοδος από την παρουσίαση",
|
"exit_slideshow": "Έξοδος από την παρουσίαση",
|
||||||
@@ -1119,7 +1122,6 @@
|
|||||||
"header_settings_field_validator_msg": "Η τιμή δεν μπορεί να είναι κενή",
|
"header_settings_field_validator_msg": "Η τιμή δεν μπορεί να είναι κενή",
|
||||||
"header_settings_header_name_input": "Όνομα κεφαλίδας",
|
"header_settings_header_name_input": "Όνομα κεφαλίδας",
|
||||||
"header_settings_header_value_input": "Τιμή κεφαλίδας",
|
"header_settings_header_value_input": "Τιμή κεφαλίδας",
|
||||||
"headers_settings_tile_subtitle": "Καθορίστε τις κεφαλίδες διακομιστή μεσολάβησης που θα πρέπει να στέλνει η εφαρμογή με κάθε αίτημα δικτύου",
|
|
||||||
"headers_settings_tile_title": "Προσαρμοσμένες κεφαλίδες διακομιστή μεσολάβησης",
|
"headers_settings_tile_title": "Προσαρμοσμένες κεφαλίδες διακομιστή μεσολάβησης",
|
||||||
"hi_user": "Γειά σου {name} {email}",
|
"hi_user": "Γειά σου {name} {email}",
|
||||||
"hide_all_people": "Απόκρυψη όλων των ατόμων",
|
"hide_all_people": "Απόκρυψη όλων των ατόμων",
|
||||||
@@ -1344,6 +1346,8 @@
|
|||||||
"minute": "Λεπτό",
|
"minute": "Λεπτό",
|
||||||
"minutes": "Λεπτά",
|
"minutes": "Λεπτά",
|
||||||
"missing": "Όσα Λείπουν",
|
"missing": "Όσα Λείπουν",
|
||||||
|
"mobile_app": "Εφαρμογή για κινητά",
|
||||||
|
"mobile_app_download_onboarding_note": "Μπορείτε να αποκτήσετε ξανά πρόσβαση σε αυτές τις επιλογές από τη σελίδα Βοηθήματα.",
|
||||||
"model": "Μοντέλο",
|
"model": "Μοντέλο",
|
||||||
"month": "Μήνας",
|
"month": "Μήνας",
|
||||||
"monthly_title_text_date_format": "ΜΜΜΜ y",
|
"monthly_title_text_date_format": "ΜΜΜΜ y",
|
||||||
@@ -1362,6 +1366,8 @@
|
|||||||
"my_albums": "Τα άλμπουμ μου",
|
"my_albums": "Τα άλμπουμ μου",
|
||||||
"name": "Όνομα",
|
"name": "Όνομα",
|
||||||
"name_or_nickname": "Όνομα ή ψευδώνυμο",
|
"name_or_nickname": "Όνομα ή ψευδώνυμο",
|
||||||
|
"navigate": "Πλοηγηθείτε",
|
||||||
|
"navigate_to_time": "Πλοηγηθείτε στο Χρόνο",
|
||||||
"network_requirement_photos_upload": "Χρήση δεδομένων κινητής τηλεφωνίας για τη δημιουργία αντιγράφων ασφαλείας των φωτογραφιών",
|
"network_requirement_photos_upload": "Χρήση δεδομένων κινητής τηλεφωνίας για τη δημιουργία αντιγράφων ασφαλείας των φωτογραφιών",
|
||||||
"network_requirement_videos_upload": "Χρήση δεδομένων κινητής τηλεφωνίας για τη δημιουργία αντιγράφων ασφαλείας των βίντεο",
|
"network_requirement_videos_upload": "Χρήση δεδομένων κινητής τηλεφωνίας για τη δημιουργία αντιγράφων ασφαλείας των βίντεο",
|
||||||
"network_requirements": "Απαιτήσεις Δυκτίου",
|
"network_requirements": "Απαιτήσεις Δυκτίου",
|
||||||
@@ -1371,6 +1377,7 @@
|
|||||||
"never": "Ποτέ",
|
"never": "Ποτέ",
|
||||||
"new_album": "Νέο Άλμπουμ",
|
"new_album": "Νέο Άλμπουμ",
|
||||||
"new_api_key": "Νέο API Key",
|
"new_api_key": "Νέο API Key",
|
||||||
|
"new_date_range": "Εύρος νέας ημερομηνίας",
|
||||||
"new_password": "Νέος κωδικός πρόσβασης",
|
"new_password": "Νέος κωδικός πρόσβασης",
|
||||||
"new_person": "Νέο άτομο",
|
"new_person": "Νέο άτομο",
|
||||||
"new_pin_code": "Νέος κωδικός PIN",
|
"new_pin_code": "Νέος κωδικός PIN",
|
||||||
@@ -1421,6 +1428,8 @@
|
|||||||
"notifications": "Ειδοποιήσεις",
|
"notifications": "Ειδοποιήσεις",
|
||||||
"notifications_setting_description": "Διαχείριση ειδοποιήσεων",
|
"notifications_setting_description": "Διαχείριση ειδοποιήσεων",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Ρυθμιστής Obtainium",
|
||||||
|
"obtainium_configurator_instructions": "Δημιουργήστε ένα κλειδί API και επιλέξτε μια παραλλαγή για να δημιουργήσετε τον σύνδεσμο σας ρύθμισης Obtainium.",
|
||||||
"official_immich_resources": "Επίσημοι Πόροι του Immich",
|
"official_immich_resources": "Επίσημοι Πόροι του Immich",
|
||||||
"offline": "Εκτός σύνδεσης",
|
"offline": "Εκτός σύνδεσης",
|
||||||
"offset": "Μετατόπιση",
|
"offset": "Μετατόπιση",
|
||||||
@@ -1542,13 +1551,9 @@
|
|||||||
"privacy": "Ιδιωτικότητα",
|
"privacy": "Ιδιωτικότητα",
|
||||||
"profile": "Προφίλ",
|
"profile": "Προφίλ",
|
||||||
"profile_drawer_app_logs": "Καταγραφές",
|
"profile_drawer_app_logs": "Καταγραφές",
|
||||||
"profile_drawer_client_out_of_date_major": "Παρακαλώ ενημερώστε την εφαρμογή στην πιο πρόσφατη κύρια έκδοση.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Παρακαλώ ενημερώστε την εφαρμογή στην πιο πρόσφατη δευτερεύουσα έκδοση.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Ο πελάτης και ο διακομιστής είναι ενημερωμένοι",
|
"profile_drawer_client_server_up_to_date": "Ο πελάτης και ο διακομιστής είναι ενημερωμένοι",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Η λειτουργία μόνο-για-ανάγνωση ενεργοποιήθηκε. Κρατήστε πατημένο το εικονίδιο του χρήστη για απενεργοποίηση.",
|
"profile_drawer_readonly_mode": "Η λειτουργία μόνο-για-ανάγνωση ενεργοποιήθηκε. Κρατήστε πατημένο το εικονίδιο του χρήστη για απενεργοποίηση.",
|
||||||
"profile_drawer_server_out_of_date_major": "Παρακαλώ ενημερώστε τον διακομιστή στην πιο πρόσφατη κύρια έκδοση.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Παρακαλώ ενημερώστε τον διακομιστή στην πιο πρόσφατη δευτερεύουσα έκδοση.",
|
|
||||||
"profile_image_of_user": "Εικόνα προφίλ του χρήστη {user}",
|
"profile_image_of_user": "Εικόνα προφίλ του χρήστη {user}",
|
||||||
"profile_picture_set": "Ορισμός εικόνας προφίλ.",
|
"profile_picture_set": "Ορισμός εικόνας προφίλ.",
|
||||||
"public_album": "Δημόσιο άλμπουμ",
|
"public_album": "Δημόσιο άλμπουμ",
|
||||||
@@ -1805,6 +1810,8 @@
|
|||||||
"setting_notifications_subtitle": "Προσαρμόστε τις προτιμήσεις ειδοποίησης",
|
"setting_notifications_subtitle": "Προσαρμόστε τις προτιμήσεις ειδοποίησης",
|
||||||
"setting_notifications_total_progress_subtitle": "Συνολική πρόοδος μεταφόρτωσης (ολοκληρώθηκε/σύνολο στοιχείων)",
|
"setting_notifications_total_progress_subtitle": "Συνολική πρόοδος μεταφόρτωσης (ολοκληρώθηκε/σύνολο στοιχείων)",
|
||||||
"setting_notifications_total_progress_title": "Εμφάνιση συνολικής προόδου δημιουργίας αντιγράφων ασφαλείας παρασκηνίου",
|
"setting_notifications_total_progress_title": "Εμφάνιση συνολικής προόδου δημιουργίας αντιγράφων ασφαλείας παρασκηνίου",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Αυτόματη αναπαραγωγή βίντεο κατά το άνοιγμά τους",
|
||||||
|
"setting_video_viewer_auto_play_title": "Αυτόματη αναπαραγωγή βίντεο",
|
||||||
"setting_video_viewer_looping_title": "Συνεχής Επανάληψη",
|
"setting_video_viewer_looping_title": "Συνεχής Επανάληψη",
|
||||||
"setting_video_viewer_original_video_subtitle": "Όταν μεταδίδετε ένα βίντεο από τον διακομιστή, αναπαράγετε το αυθεντικό ακόμη και όταν υπάρχει διαθέσιμο με διαφορετική κωδικοποίηση. Μπορεί να προκαλέσει καθυστέρηση φόρτωσης. Τα βίντεο που είναι διαθέσιμα τοπικά, αναπαράγονται στην αυθεντική ποιότητα, ανεξαρτήτως αυτής της ρύθμισης.",
|
"setting_video_viewer_original_video_subtitle": "Όταν μεταδίδετε ένα βίντεο από τον διακομιστή, αναπαράγετε το αυθεντικό ακόμη και όταν υπάρχει διαθέσιμο με διαφορετική κωδικοποίηση. Μπορεί να προκαλέσει καθυστέρηση φόρτωσης. Τα βίντεο που είναι διαθέσιμα τοπικά, αναπαράγονται στην αυθεντική ποιότητα, ανεξαρτήτως αυτής της ρύθμισης.",
|
||||||
"setting_video_viewer_original_video_title": "Αναγκαστική αναπαραγωγή αυθεντικού βίντεο",
|
"setting_video_viewer_original_video_title": "Αναγκαστική αναπαραγωγή αυθεντικού βίντεο",
|
||||||
|
|||||||
92
i18n/en.json
92
i18n/en.json
@@ -32,6 +32,7 @@
|
|||||||
"add_to_album_toggle": "Toggle selection for {album}",
|
"add_to_album_toggle": "Toggle selection for {album}",
|
||||||
"add_to_albums": "Add to albums",
|
"add_to_albums": "Add to albums",
|
||||||
"add_to_albums_count": "Add to albums ({count})",
|
"add_to_albums_count": "Add to albums ({count})",
|
||||||
|
"add_to_bottom_bar": "Add to",
|
||||||
"add_to_shared_album": "Add to shared album",
|
"add_to_shared_album": "Add to shared album",
|
||||||
"add_upload_to_stack": "Add upload to stack",
|
"add_upload_to_stack": "Add upload to stack",
|
||||||
"add_url": "Add URL",
|
"add_url": "Add URL",
|
||||||
@@ -120,7 +121,7 @@
|
|||||||
"library_settings_description": "Manage external library settings",
|
"library_settings_description": "Manage external library settings",
|
||||||
"library_tasks_description": "Scan external libraries for new and/or changed assets",
|
"library_tasks_description": "Scan external libraries for new and/or changed assets",
|
||||||
"library_watching_enable_description": "Watch external libraries for file changes",
|
"library_watching_enable_description": "Watch external libraries for file changes",
|
||||||
"library_watching_settings": "Library watching (EXPERIMENTAL)",
|
"library_watching_settings": "Library watching [EXPERIMENTAL]",
|
||||||
"library_watching_settings_description": "Automatically watch for changed files",
|
"library_watching_settings_description": "Automatically watch for changed files",
|
||||||
"logging_enable_description": "Enable logging",
|
"logging_enable_description": "Enable logging",
|
||||||
"logging_level_description": "When enabled, what log level to use.",
|
"logging_level_description": "When enabled, what log level to use.",
|
||||||
@@ -154,6 +155,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "Minimum confidence score for a face to be detected from 0-1. Lower values will detect more faces but may result in false positives.",
|
"machine_learning_min_detection_score_description": "Minimum confidence score for a face to be detected from 0-1. Lower values will detect more faces but may result in false positives.",
|
||||||
"machine_learning_min_recognized_faces": "Minimum recognized faces",
|
"machine_learning_min_recognized_faces": "Minimum recognized faces",
|
||||||
"machine_learning_min_recognized_faces_description": "The minimum number of recognized faces for a person to be created. Increasing this makes Facial Recognition more precise at the cost of increasing the chance that a face is not assigned to a person.",
|
"machine_learning_min_recognized_faces_description": "The minimum number of recognized faces for a person to be created. Increasing this makes Facial Recognition more precise at the cost of increasing the chance that a face is not assigned to a person.",
|
||||||
|
"machine_learning_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Use machine learning to recognize text in images",
|
||||||
|
"machine_learning_ocr_enabled": "Enable OCR",
|
||||||
|
"machine_learning_ocr_enabled_description": "If disabled, images will not undergo text recognition.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Maximum resolution",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Previews above this resolution will be resized while preserving aspect ratio. Higher values are more accurate, but take longer to process and use more memory.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Minimum detection score",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Minimum confidence score for text to be detected from 0-1. Lower values will detect more text but may result in false positives.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Minimum recognition score",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Minimum confidence score for detected text to be recognized from 0-1. Lower values will recognize more text but may result in false positives.",
|
||||||
|
"machine_learning_ocr_model": "OCR model",
|
||||||
|
"machine_learning_ocr_model_description": "Server models are more accurate than mobile models, but take longer to process and use more memory.",
|
||||||
"machine_learning_settings": "Machine Learning Settings",
|
"machine_learning_settings": "Machine Learning Settings",
|
||||||
"machine_learning_settings_description": "Manage machine learning features and settings",
|
"machine_learning_settings_description": "Manage machine learning features and settings",
|
||||||
"machine_learning_smart_search": "Smart Search",
|
"machine_learning_smart_search": "Smart Search",
|
||||||
@@ -211,6 +224,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Ignore TLS certificate validation errors (not recommended)",
|
"notification_email_ignore_certificate_errors_description": "Ignore TLS certificate validation errors (not recommended)",
|
||||||
"notification_email_password_description": "Password to use when authenticating with the email server",
|
"notification_email_password_description": "Password to use when authenticating with the email server",
|
||||||
"notification_email_port_description": "Port of the email server (e.g 25, 465, or 587)",
|
"notification_email_port_description": "Port of the email server (e.g 25, 465, or 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Use SMTPS (SMTP over TLS)",
|
||||||
"notification_email_sent_test_email_button": "Send test email and save",
|
"notification_email_sent_test_email_button": "Send test email and save",
|
||||||
"notification_email_setting_description": "Settings for sending email notifications",
|
"notification_email_setting_description": "Settings for sending email notifications",
|
||||||
"notification_email_test_email": "Send test email",
|
"notification_email_test_email": "Send test email",
|
||||||
@@ -243,6 +258,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Quota in GiB to be used when no claim is provided.",
|
"oauth_storage_quota_default_description": "Quota in GiB to be used when no claim is provided.",
|
||||||
"oauth_timeout": "Request Timeout",
|
"oauth_timeout": "Request Timeout",
|
||||||
"oauth_timeout_description": "Timeout for requests in milliseconds",
|
"oauth_timeout_description": "Timeout for requests in milliseconds",
|
||||||
|
"ocr_job_description": "Use machine learning to recognize text in images",
|
||||||
"password_enable_description": "Login with email and password",
|
"password_enable_description": "Login with email and password",
|
||||||
"password_settings": "Password Login",
|
"password_settings": "Password Login",
|
||||||
"password_settings_description": "Manage password login settings",
|
"password_settings_description": "Manage password login settings",
|
||||||
@@ -333,7 +349,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Maximum bitrate",
|
"transcoding_max_bitrate": "Maximum bitrate",
|
||||||
"transcoding_max_bitrate_description": "Setting a max bitrate can make file sizes more predictable at a minor cost to quality. At 720p, typical values are 2600 kbit/s for VP9 or HEVC, or 4500 kbit/s for H.264. Disabled if set to 0.",
|
"transcoding_max_bitrate_description": "Setting a max bitrate can make file sizes more predictable at a minor cost to quality. At 720p, typical values are 2600 kbit/s for VP9 or HEVC, or 4500 kbit/s for H.264. Disabled if set to 0. When no unit is specified, k (for kbit/s) is assumed; therefore 5000, 5000k, and 5M (for Mbit/s) are equivalent.",
|
||||||
"transcoding_max_keyframe_interval": "Maximum keyframe interval",
|
"transcoding_max_keyframe_interval": "Maximum keyframe interval",
|
||||||
"transcoding_max_keyframe_interval_description": "Sets the maximum frame distance between keyframes. Lower values worsen compression efficiency, but improve seek times and may improve quality in scenes with fast movement. 0 sets this value automatically.",
|
"transcoding_max_keyframe_interval_description": "Sets the maximum frame distance between keyframes. Lower values worsen compression efficiency, but improve seek times and may improve quality in scenes with fast movement. 0 sets this value automatically.",
|
||||||
"transcoding_optimal_description": "Videos higher than target resolution or not in an accepted format",
|
"transcoding_optimal_description": "Videos higher than target resolution or not in an accepted format",
|
||||||
@@ -351,7 +367,7 @@
|
|||||||
"transcoding_target_resolution": "Target resolution",
|
"transcoding_target_resolution": "Target resolution",
|
||||||
"transcoding_target_resolution_description": "Higher resolutions can preserve more detail but take longer to encode, have larger file sizes, and can reduce app responsiveness.",
|
"transcoding_target_resolution_description": "Higher resolutions can preserve more detail but take longer to encode, have larger file sizes, and can reduce app responsiveness.",
|
||||||
"transcoding_temporal_aq": "Temporal AQ",
|
"transcoding_temporal_aq": "Temporal AQ",
|
||||||
"transcoding_temporal_aq_description": "Applies only to NVENC. Increases quality of high-detail, low-motion scenes. May not be compatible with older devices.",
|
"transcoding_temporal_aq_description": "Applies only to NVENC. Temporal Adaptive Quantization increases quality of high-detail, low-motion scenes. May not be compatible with older devices.",
|
||||||
"transcoding_threads": "Threads",
|
"transcoding_threads": "Threads",
|
||||||
"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",
|
||||||
@@ -402,11 +418,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from local assets. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from local assets. Activate this setting to load remote images instead.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Define proxy headers Immich should send with each network request",
|
"advanced_settings_proxy_headers_subtitle": "Define proxy headers Immich should send with each network request",
|
||||||
"advanced_settings_proxy_headers_title": "Proxy Headers",
|
"advanced_settings_proxy_headers_title": "Custom proxy headers [EXPERIMENTAL]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Enables the read-only mode where the photos can be only viewed, things like selecting multiple images, sharing, casting, delete are all disabled. Enable/Disable read-only via user avatar from the main screen",
|
"advanced_settings_readonly_mode_subtitle": "Enables the read-only mode where the photos can be only viewed, things like selecting multiple images, sharing, casting, delete are all disabled. Enable/Disable read-only via user avatar from the main screen",
|
||||||
"advanced_settings_readonly_mode_title": "Read-only Mode",
|
"advanced_settings_readonly_mode_title": "Read-only mode",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.",
|
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates",
|
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates [EXPERIMENTAL]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Automatically delete or restore an asset on this device when that action is taken on the web",
|
"advanced_settings_sync_remote_deletions_subtitle": "Automatically delete or restore an asset on this device when that action is taken on the web",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Sync remote deletions [EXPERIMENTAL]",
|
"advanced_settings_sync_remote_deletions_title": "Sync remote deletions [EXPERIMENTAL]",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
||||||
@@ -415,6 +431,7 @@
|
|||||||
"age_months": "Age {months, plural, one {# month} other {# months}}",
|
"age_months": "Age {months, plural, one {# month} other {# months}}",
|
||||||
"age_year_months": "Age 1 year, {months, plural, one {# month} other {# months}}",
|
"age_year_months": "Age 1 year, {months, plural, one {# month} other {# months}}",
|
||||||
"age_years": "{years, plural, other {Age #}}",
|
"age_years": "{years, plural, other {Age #}}",
|
||||||
|
"album": "Album",
|
||||||
"album_added": "Album added",
|
"album_added": "Album added",
|
||||||
"album_added_notification_setting_description": "Receive an email notification when you are added to a shared album",
|
"album_added_notification_setting_description": "Receive an email notification when you are added to a shared album",
|
||||||
"album_cover_updated": "Album cover updated",
|
"album_cover_updated": "Album cover updated",
|
||||||
@@ -460,16 +477,21 @@
|
|||||||
"allow_edits": "Allow edits",
|
"allow_edits": "Allow edits",
|
||||||
"allow_public_user_to_download": "Allow public user to download",
|
"allow_public_user_to_download": "Allow public user to download",
|
||||||
"allow_public_user_to_upload": "Allow public user to upload",
|
"allow_public_user_to_upload": "Allow public user to upload",
|
||||||
|
"allowed": "Allowed",
|
||||||
"alt_text_qr_code": "QR code image",
|
"alt_text_qr_code": "QR code image",
|
||||||
"anti_clockwise": "Anti-clockwise",
|
"anti_clockwise": "Anti-clockwise",
|
||||||
"api_key": "API Key",
|
"api_key": "API Key",
|
||||||
"api_key_description": "This value will only be shown once. Please be sure to copy it before closing the window.",
|
"api_key_description": "This value will only be shown once. Please be sure to copy it before closing the window.",
|
||||||
"api_key_empty": "Your API Key name shouldn't be empty",
|
"api_key_empty": "Your API Key name shouldn't be empty",
|
||||||
"api_keys": "API Keys",
|
"api_keys": "API Keys",
|
||||||
|
"app_architecture_variant": "Variant (Architecture)",
|
||||||
"app_bar_signout_dialog_content": "Are you sure you want to sign out?",
|
"app_bar_signout_dialog_content": "Are you sure you want to sign out?",
|
||||||
"app_bar_signout_dialog_ok": "Yes",
|
"app_bar_signout_dialog_ok": "Yes",
|
||||||
"app_bar_signout_dialog_title": "Sign out",
|
"app_bar_signout_dialog_title": "Sign out",
|
||||||
|
"app_download_links": "App Download Links",
|
||||||
"app_settings": "App Settings",
|
"app_settings": "App Settings",
|
||||||
|
"app_stores": "App Stores",
|
||||||
|
"app_update_available": "App update is available",
|
||||||
"appears_in": "Appears in",
|
"appears_in": "Appears in",
|
||||||
"apply_count": "Apply ({count, number})",
|
"apply_count": "Apply ({count, number})",
|
||||||
"archive": "Archive",
|
"archive": "Archive",
|
||||||
@@ -553,6 +575,7 @@
|
|||||||
"backup_albums_sync": "Backup albums synchronization",
|
"backup_albums_sync": "Backup albums synchronization",
|
||||||
"backup_all": "All",
|
"backup_all": "All",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
||||||
|
"backup_background_service_complete_notification": "Asset backup complete",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
||||||
"backup_background_service_current_upload_notification": "Uploading {filename}",
|
"backup_background_service_current_upload_notification": "Uploading {filename}",
|
||||||
"backup_background_service_default_notification": "Checking for new assets…",
|
"backup_background_service_default_notification": "Checking for new assets…",
|
||||||
@@ -662,6 +685,8 @@
|
|||||||
"change_password_description": "This is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"change_password_description": "This is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
"change_password_form_confirm_password": "Confirm Password",
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
"change_password_form_description": "Hi {name},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"change_password_form_description": "Hi {name},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_log_out": "Log out all other devices",
|
||||||
|
"change_password_form_log_out_description": "It is recommended to log out of all other devices",
|
||||||
"change_password_form_new_password": "New Password",
|
"change_password_form_new_password": "New Password",
|
||||||
"change_password_form_password_mismatch": "Passwords do not match",
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
@@ -688,8 +713,8 @@
|
|||||||
"client_cert_import_success_msg": "Client certificate is imported",
|
"client_cert_import_success_msg": "Client certificate is imported",
|
||||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||||
"client_cert_remove_msg": "Client certificate is removed",
|
"client_cert_remove_msg": "Client certificate is removed",
|
||||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate import/removal is available only before login",
|
||||||
"client_cert_title": "SSL Client Certificate",
|
"client_cert_title": "SSL client certificate [EXPERIMENTAL]",
|
||||||
"clockwise": "Сlockwise",
|
"clockwise": "Сlockwise",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
"collapse": "Collapse",
|
"collapse": "Collapse",
|
||||||
@@ -701,7 +726,6 @@
|
|||||||
"comments_and_likes": "Comments & likes",
|
"comments_and_likes": "Comments & likes",
|
||||||
"comments_are_disabled": "Comments are disabled",
|
"comments_are_disabled": "Comments are disabled",
|
||||||
"common_create_new_album": "Create new album",
|
"common_create_new_album": "Create new album",
|
||||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"confirm_admin_password": "Confirm Admin Password",
|
"confirm_admin_password": "Confirm Admin Password",
|
||||||
@@ -740,6 +764,7 @@
|
|||||||
"create": "Create",
|
"create": "Create",
|
||||||
"create_album": "Create album",
|
"create_album": "Create album",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "Untitled",
|
||||||
|
"create_api_key": "Create API key",
|
||||||
"create_library": "Create Library",
|
"create_library": "Create Library",
|
||||||
"create_link": "Create link",
|
"create_link": "Create link",
|
||||||
"create_link_to_share": "Create link to share",
|
"create_link_to_share": "Create link to share",
|
||||||
@@ -769,6 +794,7 @@
|
|||||||
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
||||||
"dark": "Dark",
|
"dark": "Dark",
|
||||||
"dark_theme": "Toggle dark theme",
|
"dark_theme": "Toggle dark theme",
|
||||||
|
"date": "Date",
|
||||||
"date_after": "Date after",
|
"date_after": "Date after",
|
||||||
"date_and_time": "Date and Time",
|
"date_and_time": "Date and Time",
|
||||||
"date_before": "Date before",
|
"date_before": "Date before",
|
||||||
@@ -883,7 +909,6 @@
|
|||||||
"edit_tag": "Edit tag",
|
"edit_tag": "Edit tag",
|
||||||
"edit_title": "Edit Title",
|
"edit_title": "Edit Title",
|
||||||
"edit_user": "Edit user",
|
"edit_user": "Edit user",
|
||||||
"edited": "Edited",
|
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
"editor_close_without_save_prompt": "The changes will not be saved",
|
"editor_close_without_save_prompt": "The changes will not be saved",
|
||||||
"editor_close_without_save_title": "Close editor?",
|
"editor_close_without_save_title": "Close editor?",
|
||||||
@@ -1039,6 +1064,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Error updating description",
|
"exif_bottom_sheet_description_error": "Error updating description",
|
||||||
"exif_bottom_sheet_details": "DETAILS",
|
"exif_bottom_sheet_details": "DETAILS",
|
||||||
"exif_bottom_sheet_location": "LOCATION",
|
"exif_bottom_sheet_location": "LOCATION",
|
||||||
|
"exif_bottom_sheet_no_description": "No description",
|
||||||
"exif_bottom_sheet_people": "PEOPLE",
|
"exif_bottom_sheet_people": "PEOPLE",
|
||||||
"exif_bottom_sheet_person_add_person": "Add name",
|
"exif_bottom_sheet_person_add_person": "Add name",
|
||||||
"exit_slideshow": "Exit Slideshow",
|
"exit_slideshow": "Exit Slideshow",
|
||||||
@@ -1077,6 +1103,7 @@
|
|||||||
"features_setting_description": "Manage the app features",
|
"features_setting_description": "Manage the app features",
|
||||||
"file_name": "File name",
|
"file_name": "File name",
|
||||||
"file_name_or_extension": "File name or extension",
|
"file_name_or_extension": "File name or extension",
|
||||||
|
"file_size": "File size",
|
||||||
"filename": "Filename",
|
"filename": "Filename",
|
||||||
"filetype": "Filetype",
|
"filetype": "Filetype",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
@@ -1116,11 +1143,10 @@
|
|||||||
"hash_asset": "Hash asset",
|
"hash_asset": "Hash asset",
|
||||||
"hashed_assets": "Hashed assets",
|
"hashed_assets": "Hashed assets",
|
||||||
"hashing": "Hashing",
|
"hashing": "Hashing",
|
||||||
"header_settings_add_header_tip": "Add Header",
|
"header_settings_add_header_tip": "Add header",
|
||||||
"header_settings_field_validator_msg": "Value cannot be empty",
|
"header_settings_field_validator_msg": "Value cannot be empty",
|
||||||
"header_settings_header_name_input": "Header name",
|
"header_settings_header_name_input": "Header name",
|
||||||
"header_settings_header_value_input": "Header value",
|
"header_settings_header_value_input": "Header value",
|
||||||
"headers_settings_tile_subtitle": "Define proxy headers the app should send with each network request",
|
|
||||||
"headers_settings_tile_title": "Custom proxy headers",
|
"headers_settings_tile_title": "Custom proxy headers",
|
||||||
"hi_user": "Hi {name} ({email})",
|
"hi_user": "Hi {name} ({email})",
|
||||||
"hide_all_people": "Hide all people",
|
"hide_all_people": "Hide all people",
|
||||||
@@ -1173,6 +1199,8 @@
|
|||||||
"import_path": "Import path",
|
"import_path": "Import path",
|
||||||
"in_albums": "In {count, plural, one {# album} other {# albums}}",
|
"in_albums": "In {count, plural, one {# album} other {# albums}}",
|
||||||
"in_archive": "In archive",
|
"in_archive": "In archive",
|
||||||
|
"in_year": "In {year}",
|
||||||
|
"in_year_selector": "In",
|
||||||
"include_archived": "Include archived",
|
"include_archived": "Include archived",
|
||||||
"include_shared_albums": "Include shared albums",
|
"include_shared_albums": "Include shared albums",
|
||||||
"include_shared_partner_assets": "Include shared partner assets",
|
"include_shared_partner_assets": "Include shared partner assets",
|
||||||
@@ -1209,6 +1237,7 @@
|
|||||||
"language_setting_description": "Select your preferred language",
|
"language_setting_description": "Select your preferred language",
|
||||||
"large_files": "Large Files",
|
"large_files": "Large Files",
|
||||||
"last": "Last",
|
"last": "Last",
|
||||||
|
"last_months": "{count, plural, one {Last month} other {Last # months}}",
|
||||||
"last_seen": "Last seen",
|
"last_seen": "Last seen",
|
||||||
"latest_version": "Latest Version",
|
"latest_version": "Latest Version",
|
||||||
"latitude": "Latitude",
|
"latitude": "Latitude",
|
||||||
@@ -1241,6 +1270,7 @@
|
|||||||
"local_media_summary": "Local Media Summary",
|
"local_media_summary": "Local Media Summary",
|
||||||
"local_network": "Local network",
|
"local_network": "Local network",
|
||||||
"local_network_sheet_info": "The app will connect to the server through this URL when using the specified Wi-Fi network",
|
"local_network_sheet_info": "The app will connect to the server through this URL when using the specified Wi-Fi network",
|
||||||
|
"location": "Location",
|
||||||
"location_permission": "Location permission",
|
"location_permission": "Location permission",
|
||||||
"location_permission_content": "In order to use the auto-switching feature, Immich needs precise location permission so it can read the current Wi-Fi network's name",
|
"location_permission_content": "In order to use the auto-switching feature, Immich needs precise location permission so it can read the current Wi-Fi network's name",
|
||||||
"location_picker_choose_on_map": "Choose on map",
|
"location_picker_choose_on_map": "Choose on map",
|
||||||
@@ -1290,6 +1320,10 @@
|
|||||||
"main_menu": "Main menu",
|
"main_menu": "Main menu",
|
||||||
"make": "Make",
|
"make": "Make",
|
||||||
"manage_geolocation": "Manage location",
|
"manage_geolocation": "Manage location",
|
||||||
|
"manage_media_access_rationale": "This permission is required for proper handling of moving assets to the trash and restoring them from it.",
|
||||||
|
"manage_media_access_settings": "Open settings",
|
||||||
|
"manage_media_access_subtitle": "Allow the Immich app to manage and move media files.",
|
||||||
|
"manage_media_access_title": "Media Management Access",
|
||||||
"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",
|
||||||
"manage_the_app_settings": "Manage the app settings",
|
"manage_the_app_settings": "Manage the app settings",
|
||||||
@@ -1345,12 +1379,15 @@
|
|||||||
"minute": "Minute",
|
"minute": "Minute",
|
||||||
"minutes": "Minutes",
|
"minutes": "Minutes",
|
||||||
"missing": "Missing",
|
"missing": "Missing",
|
||||||
|
"mobile_app": "Mobile App",
|
||||||
|
"mobile_app_download_onboarding_note": "Download the companion mobile app using the following options",
|
||||||
"model": "Model",
|
"model": "Model",
|
||||||
"month": "Month",
|
"month": "Month",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"more": "More",
|
"more": "More",
|
||||||
"move": "Move",
|
"move": "Move",
|
||||||
"move_off_locked_folder": "Move out of locked folder",
|
"move_off_locked_folder": "Move out of locked folder",
|
||||||
|
"move_to": "Move to",
|
||||||
"move_to_lock_folder_action_prompt": "{count} added to the locked folder",
|
"move_to_lock_folder_action_prompt": "{count} added to the locked folder",
|
||||||
"move_to_locked_folder": "Move to locked folder",
|
"move_to_locked_folder": "Move to locked folder",
|
||||||
"move_to_locked_folder_confirmation": "These photos and video will be removed from all albums, and only viewable from the locked folder",
|
"move_to_locked_folder_confirmation": "These photos and video will be removed from all albums, and only viewable from the locked folder",
|
||||||
@@ -1363,6 +1400,8 @@
|
|||||||
"my_albums": "My albums",
|
"my_albums": "My albums",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_or_nickname": "Name or nickname",
|
"name_or_nickname": "Name or nickname",
|
||||||
|
"navigate": "Navigate",
|
||||||
|
"navigate_to_time": "Navigate to Time",
|
||||||
"network_requirement_photos_upload": "Use cellular data to backup photos",
|
"network_requirement_photos_upload": "Use cellular data to backup photos",
|
||||||
"network_requirement_videos_upload": "Use cellular data to backup videos",
|
"network_requirement_videos_upload": "Use cellular data to backup videos",
|
||||||
"network_requirements": "Network Requirements",
|
"network_requirements": "Network Requirements",
|
||||||
@@ -1372,11 +1411,13 @@
|
|||||||
"never": "Never",
|
"never": "Never",
|
||||||
"new_album": "New Album",
|
"new_album": "New Album",
|
||||||
"new_api_key": "New API Key",
|
"new_api_key": "New API Key",
|
||||||
|
"new_date_range": "New date range",
|
||||||
"new_password": "New password",
|
"new_password": "New password",
|
||||||
"new_person": "New person",
|
"new_person": "New person",
|
||||||
"new_pin_code": "New PIN code",
|
"new_pin_code": "New PIN code",
|
||||||
"new_pin_code_subtitle": "This is your first time accessing the locked folder. Create a PIN code to securely access this page",
|
"new_pin_code_subtitle": "This is your first time accessing the locked folder. Create a PIN code to securely access this page",
|
||||||
"new_timeline": "New Timeline",
|
"new_timeline": "New Timeline",
|
||||||
|
"new_update": "New update",
|
||||||
"new_user_created": "New user created",
|
"new_user_created": "New user created",
|
||||||
"new_version_available": "NEW VERSION AVAILABLE",
|
"new_version_available": "NEW VERSION AVAILABLE",
|
||||||
"newest_first": "Newest first",
|
"newest_first": "Newest first",
|
||||||
@@ -1392,6 +1433,7 @@
|
|||||||
"no_cast_devices_found": "No cast devices found",
|
"no_cast_devices_found": "No cast devices found",
|
||||||
"no_checksum_local": "No checksum available - cannot fetch local assets",
|
"no_checksum_local": "No checksum available - cannot fetch local assets",
|
||||||
"no_checksum_remote": "No checksum available - cannot fetch remote asset",
|
"no_checksum_remote": "No checksum available - cannot fetch remote asset",
|
||||||
|
"no_devices": "No authorized devices",
|
||||||
"no_duplicates_found": "No duplicates were found.",
|
"no_duplicates_found": "No duplicates were found.",
|
||||||
"no_exif_info_available": "No exif info available",
|
"no_exif_info_available": "No exif info available",
|
||||||
"no_explore_results_message": "Upload more photos to explore your collection.",
|
"no_explore_results_message": "Upload more photos to explore your collection.",
|
||||||
@@ -1408,6 +1450,7 @@
|
|||||||
"no_results_description": "Try a synonym or more general keyword",
|
"no_results_description": "Try a synonym or more general keyword",
|
||||||
"no_shared_albums_message": "Create an album to share photos and videos with people in your network",
|
"no_shared_albums_message": "Create an album to share photos and videos with people in your network",
|
||||||
"no_uploads_in_progress": "No uploads in progress",
|
"no_uploads_in_progress": "No uploads in progress",
|
||||||
|
"not_allowed": "Not allowed",
|
||||||
"not_available": "N/A",
|
"not_available": "N/A",
|
||||||
"not_in_any_album": "Not in any album",
|
"not_in_any_album": "Not in any album",
|
||||||
"not_selected": "Not selected",
|
"not_selected": "Not selected",
|
||||||
@@ -1422,6 +1465,9 @@
|
|||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
"notifications_setting_description": "Manage notifications",
|
"notifications_setting_description": "Manage notifications",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Obtainium Configurator",
|
||||||
|
"obtainium_configurator_instructions": "Use Obtainium to install and update the Android app directly from Immich GitHub's release. Create an API key and select a variant to create your Obtainium configuration link",
|
||||||
|
"ocr": "OCR",
|
||||||
"official_immich_resources": "Official Immich Resources",
|
"official_immich_resources": "Official Immich Resources",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offset": "Offset",
|
"offset": "Offset",
|
||||||
@@ -1515,6 +1561,8 @@
|
|||||||
"photos_count": "{count, plural, one {{count, number} Photo} other {{count, number} Photos}}",
|
"photos_count": "{count, plural, one {{count, number} Photo} other {{count, number} Photos}}",
|
||||||
"photos_from_previous_years": "Photos from previous years",
|
"photos_from_previous_years": "Photos from previous years",
|
||||||
"pick_a_location": "Pick a location",
|
"pick_a_location": "Pick a location",
|
||||||
|
"pick_custom_range": "Custom range",
|
||||||
|
"pick_date_range": "Select a date range",
|
||||||
"pin_code_changed_successfully": "Successfully changed PIN code",
|
"pin_code_changed_successfully": "Successfully changed PIN code",
|
||||||
"pin_code_reset_successfully": "Successfully reset PIN code",
|
"pin_code_reset_successfully": "Successfully reset PIN code",
|
||||||
"pin_code_setup_successfully": "Successfully setup a PIN code",
|
"pin_code_setup_successfully": "Successfully setup a PIN code",
|
||||||
@@ -1526,6 +1574,9 @@
|
|||||||
"play_memories": "Play memories",
|
"play_memories": "Play memories",
|
||||||
"play_motion_photo": "Play Motion Photo",
|
"play_motion_photo": "Play Motion Photo",
|
||||||
"play_or_pause_video": "Play or pause video",
|
"play_or_pause_video": "Play or pause video",
|
||||||
|
"play_original_video": "Play original video",
|
||||||
|
"play_original_video_setting_description": "Prefer playback of original videos rather than transcoded videos. If original asset is not compatible it may not playback correctly.",
|
||||||
|
"play_transcoded_video": "Play transcoded video",
|
||||||
"please_auth_to_access": "Please authenticate to access",
|
"please_auth_to_access": "Please authenticate to access",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preferences_settings_subtitle": "Manage the app's preferences",
|
"preferences_settings_subtitle": "Manage the app's preferences",
|
||||||
@@ -1543,13 +1594,9 @@
|
|||||||
"privacy": "Privacy",
|
"privacy": "Privacy",
|
||||||
"profile": "Profile",
|
"profile": "Profile",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_out_of_date_major": "Mobile App is out of date. Please update to the latest major version.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Mobile App is out of date. Please update to the latest minor version.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Read-only mode enabled. Long-press the user avatar icon to exit.",
|
"profile_drawer_readonly_mode": "Read-only mode enabled. Long-press the user avatar icon to exit.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server is out of date. Please update to the latest major version.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Server is out of date. Please update to the latest minor version.",
|
|
||||||
"profile_image_of_user": "Profile image of {user}",
|
"profile_image_of_user": "Profile image of {user}",
|
||||||
"profile_picture_set": "Profile picture set.",
|
"profile_picture_set": "Profile picture set.",
|
||||||
"public_album": "Public album",
|
"public_album": "Public album",
|
||||||
@@ -1666,6 +1713,7 @@
|
|||||||
"reset_sqlite_confirmation": "Are you sure you want to reset the SQLite database? You will need to log out and log in again to resync the data",
|
"reset_sqlite_confirmation": "Are you sure you want to reset the SQLite database? You will need to log out and log in again to resync the data",
|
||||||
"reset_sqlite_success": "Successfully reset the SQLite database",
|
"reset_sqlite_success": "Successfully reset the SQLite database",
|
||||||
"reset_to_default": "Reset to default",
|
"reset_to_default": "Reset to default",
|
||||||
|
"resolution": "Resolution",
|
||||||
"resolve_duplicates": "Resolve duplicates",
|
"resolve_duplicates": "Resolve duplicates",
|
||||||
"resolved_all_duplicates": "Resolved all duplicates",
|
"resolved_all_duplicates": "Resolved all duplicates",
|
||||||
"restore": "Restore",
|
"restore": "Restore",
|
||||||
@@ -1684,6 +1732,7 @@
|
|||||||
"running": "Running",
|
"running": "Running",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"save_to_gallery": "Save to gallery",
|
"save_to_gallery": "Save to gallery",
|
||||||
|
"saved": "Saved",
|
||||||
"saved_api_key": "Saved API Key",
|
"saved_api_key": "Saved API Key",
|
||||||
"saved_profile": "Saved profile",
|
"saved_profile": "Saved profile",
|
||||||
"saved_settings": "Saved settings",
|
"saved_settings": "Saved settings",
|
||||||
@@ -1700,6 +1749,9 @@
|
|||||||
"search_by_description_example": "Hiking day in Sapa",
|
"search_by_description_example": "Hiking day in Sapa",
|
||||||
"search_by_filename": "Search by file name or extension",
|
"search_by_filename": "Search by file name or extension",
|
||||||
"search_by_filename_example": "i.e. IMG_1234.JPG or PNG",
|
"search_by_filename_example": "i.e. IMG_1234.JPG or PNG",
|
||||||
|
"search_by_ocr": "Search by OCR",
|
||||||
|
"search_by_ocr_example": "Latte",
|
||||||
|
"search_camera_lens_model": "Search lens model...",
|
||||||
"search_camera_make": "Search camera make...",
|
"search_camera_make": "Search camera make...",
|
||||||
"search_camera_model": "Search camera model...",
|
"search_camera_model": "Search camera model...",
|
||||||
"search_city": "Search city...",
|
"search_city": "Search city...",
|
||||||
@@ -1716,6 +1768,7 @@
|
|||||||
"search_filter_location_title": "Select location",
|
"search_filter_location_title": "Select location",
|
||||||
"search_filter_media_type": "Media Type",
|
"search_filter_media_type": "Media Type",
|
||||||
"search_filter_media_type_title": "Select media type",
|
"search_filter_media_type_title": "Select media type",
|
||||||
|
"search_filter_ocr": "Search by OCR",
|
||||||
"search_filter_people_title": "Select people",
|
"search_filter_people_title": "Select people",
|
||||||
"search_for": "Search for",
|
"search_for": "Search for",
|
||||||
"search_for_existing_person": "Search for existing person",
|
"search_for_existing_person": "Search for existing person",
|
||||||
@@ -1778,6 +1831,7 @@
|
|||||||
"server_online": "Server Online",
|
"server_online": "Server Online",
|
||||||
"server_privacy": "Server Privacy",
|
"server_privacy": "Server Privacy",
|
||||||
"server_stats": "Server Stats",
|
"server_stats": "Server Stats",
|
||||||
|
"server_update_available": "Server update is available",
|
||||||
"server_version": "Server Version",
|
"server_version": "Server Version",
|
||||||
"set": "Set",
|
"set": "Set",
|
||||||
"set_as_album_cover": "Set as album cover",
|
"set_as_album_cover": "Set as album cover",
|
||||||
@@ -1806,6 +1860,8 @@
|
|||||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
"setting_notifications_subtitle": "Adjust your notification preferences",
|
||||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "Show background backup total progress",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Automatically start playing videos when they are opened",
|
||||||
|
"setting_video_viewer_auto_play_title": "Auto play videos",
|
||||||
"setting_video_viewer_looping_title": "Looping",
|
"setting_video_viewer_looping_title": "Looping",
|
||||||
"setting_video_viewer_original_video_subtitle": "When streaming a video from the server, play the original even when a transcode is available. May lead to buffering. Videos available locally are played in original quality regardless of this setting.",
|
"setting_video_viewer_original_video_subtitle": "When streaming a video from the server, play the original even when a transcode is available. May lead to buffering. Videos available locally are played in original quality regardless of this setting.",
|
||||||
"setting_video_viewer_original_video_title": "Force original video",
|
"setting_video_viewer_original_video_title": "Force original video",
|
||||||
@@ -1985,7 +2041,9 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
"they_will_be_merged_together": "They will be merged together",
|
"they_will_be_merged_together": "They will be merged together",
|
||||||
"third_party_resources": "Third-Party Resources",
|
"third_party_resources": "Third-Party Resources",
|
||||||
|
"time": "Time",
|
||||||
"time_based_memories": "Time-based memories",
|
"time_based_memories": "Time-based memories",
|
||||||
|
"time_based_memories_duration": "Number of seconds to display each image.",
|
||||||
"timeline": "Timeline",
|
"timeline": "Timeline",
|
||||||
"timezone": "Timezone",
|
"timezone": "Timezone",
|
||||||
"to_archive": "Archive",
|
"to_archive": "Archive",
|
||||||
@@ -2017,6 +2075,7 @@
|
|||||||
"troubleshoot": "Troubleshoot",
|
"troubleshoot": "Troubleshoot",
|
||||||
"type": "Type",
|
"type": "Type",
|
||||||
"unable_to_change_pin_code": "Unable to change PIN code",
|
"unable_to_change_pin_code": "Unable to change PIN code",
|
||||||
|
"unable_to_check_version": "Unable to check app or server version",
|
||||||
"unable_to_setup_pin_code": "Unable to setup PIN code",
|
"unable_to_setup_pin_code": "Unable to setup PIN code",
|
||||||
"unarchive": "Unarchive",
|
"unarchive": "Unarchive",
|
||||||
"unarchive_action_prompt": "{count} removed from Archive",
|
"unarchive_action_prompt": "{count} removed from Archive",
|
||||||
@@ -2125,6 +2184,7 @@
|
|||||||
"welcome": "Welcome",
|
"welcome": "Welcome",
|
||||||
"welcome_to_immich": "Welcome to Immich",
|
"welcome_to_immich": "Welcome to Immich",
|
||||||
"wifi_name": "Wi-Fi Name",
|
"wifi_name": "Wi-Fi Name",
|
||||||
|
"workflow": "Workflow",
|
||||||
"wrong_pin_code": "Wrong PIN code",
|
"wrong_pin_code": "Wrong PIN code",
|
||||||
"year": "Year",
|
"year": "Year",
|
||||||
"years_ago": "{years, plural, one {# year} other {# years}} ago",
|
"years_ago": "{years, plural, one {# year} other {# years}} ago",
|
||||||
|
|||||||
91
i18n/es.json
91
i18n/es.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Incluir en álbumes",
|
"add_to_albums": "Incluir en álbumes",
|
||||||
"add_to_albums_count": "Incluir en {count} álbumes",
|
"add_to_albums_count": "Incluir en {count} álbumes",
|
||||||
"add_to_shared_album": "Incluir en álbum compartido",
|
"add_to_shared_album": "Incluir en álbum compartido",
|
||||||
|
"add_upload_to_stack": "Añadir archivo y apilar",
|
||||||
"add_url": "Agregar URL",
|
"add_url": "Agregar URL",
|
||||||
"added_to_archive": "Agregado al Archivado",
|
"added_to_archive": "Agregado al Archivado",
|
||||||
"added_to_favorites": "Agregado a favoritos",
|
"added_to_favorites": "Agregado a favoritos",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"library_settings_description": "Administrar configuración biblioteca externa",
|
"library_settings_description": "Administrar configuración biblioteca externa",
|
||||||
"library_tasks_description": "Buscar elementos nuevos o modificados en bibliotecas externas",
|
"library_tasks_description": "Buscar elementos nuevos o modificados en bibliotecas externas",
|
||||||
"library_watching_enable_description": "Vigilar las bibliotecas externas para detectar cambios en los archivos",
|
"library_watching_enable_description": "Vigilar las bibliotecas externas para detectar cambios en los archivos",
|
||||||
"library_watching_settings": "Vigilancia de la biblioteca (EXPERIMENTAL)",
|
"library_watching_settings": "Vigilancia de la biblioteca [EXPERIMENTAL]",
|
||||||
"library_watching_settings_description": "Vigilar automaticamente en busca de archivos modificados",
|
"library_watching_settings_description": "Vigilar automaticamente en busca de archivos modificados",
|
||||||
"logging_enable_description": "Habilitar registro",
|
"logging_enable_description": "Habilitar registro",
|
||||||
"logging_level_description": "Indica el nivel de registro a utilizar cuando está habilitado.",
|
"logging_level_description": "Indica el nivel de registro a utilizar cuando está habilitado.",
|
||||||
@@ -153,6 +154,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "Puntuación de confianza mínima para que se detecte una cara de 0 a 1. Los valores más bajos detectarán más rostros pero pueden generar falsos positivos.",
|
"machine_learning_min_detection_score_description": "Puntuación de confianza mínima para que se detecte una cara de 0 a 1. Los valores más bajos detectarán más rostros pero pueden generar falsos positivos.",
|
||||||
"machine_learning_min_recognized_faces": "Rostros mínimos reconocidos",
|
"machine_learning_min_recognized_faces": "Rostros mínimos reconocidos",
|
||||||
"machine_learning_min_recognized_faces_description": "El número mínimo de rostros reconocidos para que se cree una persona. Aumentar esto permite que el reconocimiento facial sea más preciso a costa de aumentar la posibilidad de que no se asigne una cara a una persona.",
|
"machine_learning_min_recognized_faces_description": "El número mínimo de rostros reconocidos para que se cree una persona. Aumentar esto permite que el reconocimiento facial sea más preciso a costa de aumentar la posibilidad de que no se asigne una cara a una persona.",
|
||||||
|
"machine_learning_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Usa el aprendizaje automático para reconocer texto en imágenes",
|
||||||
|
"machine_learning_ocr_enabled": "Activar OCR",
|
||||||
|
"machine_learning_ocr_enabled_description": "Si está desactivado, las imágenes no se someterán al reconocimiento de texto.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Resolución máxima",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Las vistas previas por encima de esta resolución se redimensionarán manteniendo la relación de aspecto. Los valores más altos son más precisos, pero tardan más en procesarse y consumen más memoria.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Puntuación mínima de detección",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Puntuación mínima de confianza para que el texto sea detectado de 0 a 1. Los valores más bajos detectarán más texto, pero pueden producir falsos positivos.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Puntuación mínima de reconocimiento",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Puntuación mínima de confianza para que el texto detectado sea reconocido de 0 a 1. Los valores más bajos reconocerán más texto, pero pueden producir falsos positivos.",
|
||||||
|
"machine_learning_ocr_model": "Modelo de OCR",
|
||||||
|
"machine_learning_ocr_model_description": "Los modelos del servidor son más precisos que los modelos para móviles móviles, pero tardan más en procesar y consumen más memoria.",
|
||||||
"machine_learning_settings": "Configuración de aprendizaje automático",
|
"machine_learning_settings": "Configuración de aprendizaje automático",
|
||||||
"machine_learning_settings_description": "Administrar funciones y configuraciones de aprendizaje automático",
|
"machine_learning_settings_description": "Administrar funciones y configuraciones de aprendizaje automático",
|
||||||
"machine_learning_smart_search": "Busqueda inteligente",
|
"machine_learning_smart_search": "Busqueda inteligente",
|
||||||
@@ -201,7 +214,7 @@
|
|||||||
"nightly_tasks_sync_quota_usage_setting_description": "Actualizar la cuota de almacenamiento del usuario, según el uso actual",
|
"nightly_tasks_sync_quota_usage_setting_description": "Actualizar la cuota de almacenamiento del usuario, según el uso actual",
|
||||||
"no_paths_added": "No se han agregado rutas",
|
"no_paths_added": "No se han agregado rutas",
|
||||||
"no_pattern_added": "No se han agregado patrones",
|
"no_pattern_added": "No se han agregado patrones",
|
||||||
"note_apply_storage_label_previous_assets": "Nota: Para aplicar la etiqueta de almacenamiento a los elementos que ya se subieron, ejecuta la",
|
"note_apply_storage_label_previous_assets": "Nota: Para aplicar la Etiqueta de Almacenamiento a los elementos previamente subidos, ejecuta la",
|
||||||
"note_cannot_be_changed_later": "NOTA: ¡No se puede cambiar posteriormente!",
|
"note_cannot_be_changed_later": "NOTA: ¡No se puede cambiar posteriormente!",
|
||||||
"notification_email_from_address": "Desde",
|
"notification_email_from_address": "Desde",
|
||||||
"notification_email_from_address_description": "Dirección de correo electrónico del remitente, por ejemplo: \"Immich Photo Server <noreply@example.com>\". Asegúrate de utilizar una dirección desde la que puedas enviar correos electrónicos.",
|
"notification_email_from_address_description": "Dirección de correo electrónico del remitente, por ejemplo: \"Immich Photo Server <noreply@example.com>\". Asegúrate de utilizar una dirección desde la que puedas enviar correos electrónicos.",
|
||||||
@@ -210,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Ignorar los errores de validación del certificado TLS (no recomendado)",
|
"notification_email_ignore_certificate_errors_description": "Ignorar los errores de validación del certificado TLS (no recomendado)",
|
||||||
"notification_email_password_description": "Contraseña a utilizar al autenticarse con el servidor de correo electrónico",
|
"notification_email_password_description": "Contraseña a utilizar al autenticarse con el servidor de correo electrónico",
|
||||||
"notification_email_port_description": "Puerto del servidor de correo electrónico (por ejemplo: 25, 465 o 587)",
|
"notification_email_port_description": "Puerto del servidor de correo electrónico (por ejemplo: 25, 465 o 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Usar SMTPS (SMTP sobre TLS)",
|
||||||
"notification_email_sent_test_email_button": "Enviar correo electrónico de prueba y guardar",
|
"notification_email_sent_test_email_button": "Enviar correo electrónico de prueba y guardar",
|
||||||
"notification_email_setting_description": "Configuraciones para enviar notificaciones por correo electrónico",
|
"notification_email_setting_description": "Configuraciones para enviar notificaciones por correo electrónico",
|
||||||
"notification_email_test_email": "Enviar email de prueba",
|
"notification_email_test_email": "Enviar email de prueba",
|
||||||
@@ -240,8 +255,9 @@
|
|||||||
"oauth_storage_quota_claim_description": "Fijar la cuota de almacenamiento del usuario automáticamente al valor solicitado.",
|
"oauth_storage_quota_claim_description": "Fijar la cuota de almacenamiento del usuario automáticamente al valor solicitado.",
|
||||||
"oauth_storage_quota_default": "Cuota de almacenamiento predeterminada (GiB)",
|
"oauth_storage_quota_default": "Cuota de almacenamiento predeterminada (GiB)",
|
||||||
"oauth_storage_quota_default_description": "Cuota (en GiB) que se usará cuando no se solicite un valor específico.",
|
"oauth_storage_quota_default_description": "Cuota (en GiB) que se usará cuando no se solicite un valor específico.",
|
||||||
"oauth_timeout": "Tiempo de espera agotado para la solicitud",
|
"oauth_timeout": "Tiempo de espera de la solicitud agotado",
|
||||||
"oauth_timeout_description": "Tiempo de espera de solicitudes en milisegundos",
|
"oauth_timeout_description": "Tiempo de espera de solicitudes en milisegundos",
|
||||||
|
"ocr_job_description": "Usar aprendizaje automático para reconocer texto en imágenes",
|
||||||
"password_enable_description": "Iniciar sesión con correo electrónico y contraseña",
|
"password_enable_description": "Iniciar sesión con correo electrónico y contraseña",
|
||||||
"password_settings": "Contraseña de Acceso",
|
"password_settings": "Contraseña de Acceso",
|
||||||
"password_settings_description": "Administrar la configuración de inicio de sesión con contraseña",
|
"password_settings_description": "Administrar la configuración de inicio de sesión con contraseña",
|
||||||
@@ -332,7 +348,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Máxima tasa de bits",
|
"transcoding_max_bitrate": "Máxima tasa de bits",
|
||||||
"transcoding_max_bitrate_description": "Establecer una tasa de bits máxima puede hacer que los tamaños de archivos sean más predecibles con un costo menor para la calidad. A 720p, los valores típicos son 2600 kbit/s para VP9 o HEVC, o 4500 kbit/s para H.264. Deshabilitado si se establece en 0.",
|
"transcoding_max_bitrate_description": "Establecer una tasa de bits máxima puede hacer que los tamaños de archivo sean más predecibles a un coste menor en la calidad. A 720p, los valores típicos son 2600 kbit/s para VP9 o HEVC, o 4500 kbit/s para H.264. Se desactiva si se establece en 0. Cuando no se especifica una unidad, se asume k (para kbit/s); por lo tanto, 5000, 5000k y 5M (para Mbit/s) son equivalentes.",
|
||||||
"transcoding_max_keyframe_interval": "Intervalo máximo de fotogramas clave",
|
"transcoding_max_keyframe_interval": "Intervalo máximo de fotogramas clave",
|
||||||
"transcoding_max_keyframe_interval_description": "Establece la distancia máxima de fotograma entre fotogramas clave. Los valores más bajos empeoran la eficiencia de la compresión, pero mejoran los tiempos de búsqueda y pueden mejorar la calidad en escenas con movimientos rápidos. 0 establece este valor automáticamente.",
|
"transcoding_max_keyframe_interval_description": "Establece la distancia máxima de fotograma entre fotogramas clave. Los valores más bajos empeoran la eficiencia de la compresión, pero mejoran los tiempos de búsqueda y pueden mejorar la calidad en escenas con movimientos rápidos. 0 establece este valor automáticamente.",
|
||||||
"transcoding_optimal_description": "Vídeos con una resolución superior a la fijada o que no están en un formato aceptado",
|
"transcoding_optimal_description": "Vídeos con una resolución superior a la fijada o que no están en un formato aceptado",
|
||||||
@@ -350,7 +366,7 @@
|
|||||||
"transcoding_target_resolution": "Resolución deseada",
|
"transcoding_target_resolution": "Resolución deseada",
|
||||||
"transcoding_target_resolution_description": "Las resoluciones más altas pueden conservar más detalles, pero la codificación tarda más, tienen tamaños de archivo más grandes y pueden reducir la capacidad de respuesta de la aplicación.",
|
"transcoding_target_resolution_description": "Las resoluciones más altas pueden conservar más detalles, pero la codificación tarda más, tienen tamaños de archivo más grandes y pueden reducir la capacidad de respuesta de la aplicación.",
|
||||||
"transcoding_temporal_aq": "AQ temporal",
|
"transcoding_temporal_aq": "AQ temporal",
|
||||||
"transcoding_temporal_aq_description": "Se aplica únicamente a NVENC. Aumenta la calidad de escenas con mucho detalle y poco movimiento. Puede que no sea compatible con dispositivos más antiguos.",
|
"transcoding_temporal_aq_description": "Solo se aplica a NVENC. La Cuantificación Adaptativa Temporal aumenta la calidad de las escenas con mucho detalle y poco movimiento. Podría no ser compatible con dispositivos más antiguos.",
|
||||||
"transcoding_threads": "Hilos",
|
"transcoding_threads": "Hilos",
|
||||||
"transcoding_threads_description": "Los valores más altos conducen a una codificación más rápida, pero dejan menos espacio para que el servidor procese otras tareas mientras está activo. Este valor no debe ser mayor que la cantidad de núcleos de CPU. Maximiza la utilización si se establece en 0.",
|
"transcoding_threads_description": "Los valores más altos conducen a una codificación más rápida, pero dejan menos espacio para que el servidor procese otras tareas mientras está activo. Este valor no debe ser mayor que la cantidad de núcleos de CPU. Maximiza la utilización si se establece en 0.",
|
||||||
"transcoding_tone_mapping": "Mapeo de tonos",
|
"transcoding_tone_mapping": "Mapeo de tonos",
|
||||||
@@ -401,11 +417,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas desde los archivos locales. Activa esta opción para cargar imágenes remotas en su lugar.",
|
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas desde los archivos locales. Activa esta opción para cargar imágenes remotas en su lugar.",
|
||||||
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
|
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Configura headers HTTP que Immich incluirá en cada petición de red",
|
"advanced_settings_proxy_headers_subtitle": "Configura headers HTTP que Immich incluirá en cada petición de red",
|
||||||
"advanced_settings_proxy_headers_title": "Cabeceras Proxy",
|
"advanced_settings_proxy_headers_title": "Cabeceras proxy personalizadas [EXPERIMENTAL]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Habilita el modo de solo lectura donde las fotografías sólo pueden ser vistas, funciones como seleccionar múltiples imágenes, compartir, transmitir, eliminar son deshabilitadas. Habilita/Deshabilita solo lectura vía el avatar del usuario en la pantalla principal",
|
"advanced_settings_readonly_mode_subtitle": "Habilita el modo de solo lectura donde las fotografías sólo pueden ser vistas, funciones como seleccionar múltiples imágenes, compartir, transmitir, eliminar son deshabilitadas. Habilita/Deshabilita solo lectura vía el avatar del usuario en la pantalla principal",
|
||||||
"advanced_settings_readonly_mode_title": "Modo Solo lectura",
|
"advanced_settings_readonly_mode_title": "Modo solo lectura",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Omitir verificación del certificado SSL del servidor. Requerido para certificados autofirmados.",
|
"advanced_settings_self_signed_ssl_subtitle": "Omitir verificación del certificado SSL del servidor. Requerido para certificados autofirmados.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Permitir certificados autofirmados",
|
"advanced_settings_self_signed_ssl_title": "Permitir certificados SSL autofirmados [EXPERIMENTAL]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Eliminar o restaurar automáticamente un recurso en este dispositivo cuando se realice esa acción en la web",
|
"advanced_settings_sync_remote_deletions_subtitle": "Eliminar o restaurar automáticamente un recurso en este dispositivo cuando se realice esa acción en la web",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Sincronizar eliminaciones remotas [EXPERIMENTAL]",
|
"advanced_settings_sync_remote_deletions_title": "Sincronizar eliminaciones remotas [EXPERIMENTAL]",
|
||||||
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
|
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
|
||||||
@@ -444,7 +460,7 @@
|
|||||||
"album_viewer_appbar_share_leave": "Abandonar álbum",
|
"album_viewer_appbar_share_leave": "Abandonar álbum",
|
||||||
"album_viewer_appbar_share_to": "Compartir Con",
|
"album_viewer_appbar_share_to": "Compartir Con",
|
||||||
"album_viewer_page_share_add_users": "Agregar usuarios",
|
"album_viewer_page_share_add_users": "Agregar usuarios",
|
||||||
"album_with_link_access": "Permite que cualquiera que tenga este enlace vea las fotos y las personas del álbum.",
|
"album_with_link_access": "Permitir que cualquiera que tenga el enlace vea las fotos y las personas del álbum.",
|
||||||
"albums": "Álbumes",
|
"albums": "Álbumes",
|
||||||
"albums_count": "{count, plural, one {{count, number} álbum} other {{count, number} álbumes}}",
|
"albums_count": "{count, plural, one {{count, number} álbum} other {{count, number} álbumes}}",
|
||||||
"albums_default_sort_order": "Ordenación por defecto de los álbumes",
|
"albums_default_sort_order": "Ordenación por defecto de los álbumes",
|
||||||
@@ -458,17 +474,21 @@
|
|||||||
"allow_dark_mode": "Permitir modo oscuro",
|
"allow_dark_mode": "Permitir modo oscuro",
|
||||||
"allow_edits": "Permitir edición",
|
"allow_edits": "Permitir edición",
|
||||||
"allow_public_user_to_download": "Permitir descargas a los usuarios públicos",
|
"allow_public_user_to_download": "Permitir descargas a los usuarios públicos",
|
||||||
"allow_public_user_to_upload": "Permitir subir fotos a los usuarios públicos",
|
"allow_public_user_to_upload": "Permitir a los usuarios públicos subir fotos",
|
||||||
"alt_text_qr_code": "Código QR",
|
"alt_text_qr_code": "Código QR",
|
||||||
"anti_clockwise": "En sentido antihorario",
|
"anti_clockwise": "En sentido antihorario",
|
||||||
"api_key": "Clave API",
|
"api_key": "Clave API",
|
||||||
"api_key_description": "Este valor sólo se mostrará una vez. Asegúrese de copiarlo antes de cerrar la ventana.",
|
"api_key_description": "Este valor sólo se mostrará una vez. Asegúrese de copiarlo antes de cerrar la ventana.",
|
||||||
"api_key_empty": "El nombre de su clave API no debe estar vacío",
|
"api_key_empty": "El nombre de su clave API no debe estar vacío",
|
||||||
"api_keys": "Claves API",
|
"api_keys": "Claves API",
|
||||||
|
"app_architecture_variant": "Variante (Arquitectura)",
|
||||||
"app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?",
|
"app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?",
|
||||||
"app_bar_signout_dialog_ok": "Sí",
|
"app_bar_signout_dialog_ok": "Sí",
|
||||||
"app_bar_signout_dialog_title": "Cerrar sesión",
|
"app_bar_signout_dialog_title": "Cerrar sesión",
|
||||||
|
"app_download_links": "Enlaces de Descarga de la Aplicación",
|
||||||
"app_settings": "Ajustes de la aplicacion",
|
"app_settings": "Ajustes de la aplicacion",
|
||||||
|
"app_stores": "App Stores",
|
||||||
|
"app_update_available": "Actualización de aplicación está disponible",
|
||||||
"appears_in": "Aparece en",
|
"appears_in": "Aparece en",
|
||||||
"apply_count": "Aplicar ({count, number})",
|
"apply_count": "Aplicar ({count, number})",
|
||||||
"archive": "Archivo",
|
"archive": "Archivo",
|
||||||
@@ -552,6 +572,7 @@
|
|||||||
"backup_albums_sync": "Sincronización de álbumes de respaldo",
|
"backup_albums_sync": "Sincronización de álbumes de respaldo",
|
||||||
"backup_all": "Todos",
|
"backup_all": "Todos",
|
||||||
"backup_background_service_backup_failed_message": "Error al copiar elementos. Reintentando…",
|
"backup_background_service_backup_failed_message": "Error al copiar elementos. Reintentando…",
|
||||||
|
"backup_background_service_complete_notification": "Copia de seguridad de activos completada",
|
||||||
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando…",
|
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando…",
|
||||||
"backup_background_service_current_upload_notification": "Subiendo {filename}",
|
"backup_background_service_current_upload_notification": "Subiendo {filename}",
|
||||||
"backup_background_service_default_notification": "Comprobando nuevos elementos…",
|
"backup_background_service_default_notification": "Comprobando nuevos elementos…",
|
||||||
@@ -599,7 +620,7 @@
|
|||||||
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
||||||
"backup_controller_page_uploading_file_info": "Subiendo información del archivo",
|
"backup_controller_page_uploading_file_info": "Subiendo información del archivo",
|
||||||
"backup_err_only_album": "No se puede eliminar el único álbum",
|
"backup_err_only_album": "No se puede eliminar el único álbum",
|
||||||
"backup_error_sync_failed": "Sincronización falló. No es posible procesar la copia de seguridad.",
|
"backup_error_sync_failed": "La sincronización falló. No es posible procesar la copia de seguridad.",
|
||||||
"backup_info_card_assets": "elementos",
|
"backup_info_card_assets": "elementos",
|
||||||
"backup_manual_cancelled": "Cancelado",
|
"backup_manual_cancelled": "Cancelado",
|
||||||
"backup_manual_in_progress": "Subida ya en progreso. Vuelve a intentarlo más tarde",
|
"backup_manual_in_progress": "Subida ya en progreso. Vuelve a intentarlo más tarde",
|
||||||
@@ -648,7 +669,7 @@
|
|||||||
"cannot_merge_people": "No se pueden fusionar personas",
|
"cannot_merge_people": "No se pueden fusionar personas",
|
||||||
"cannot_undo_this_action": "¡No puedes deshacer esta acción!",
|
"cannot_undo_this_action": "¡No puedes deshacer esta acción!",
|
||||||
"cannot_update_the_description": "No se puede actualizar la descripción",
|
"cannot_update_the_description": "No se puede actualizar la descripción",
|
||||||
"cast": "Convertir",
|
"cast": "Enviar contenido",
|
||||||
"cast_description": "Configura los posibles destinos de retransmisión",
|
"cast_description": "Configura los posibles destinos de retransmisión",
|
||||||
"change_date": "Cambiar fecha",
|
"change_date": "Cambiar fecha",
|
||||||
"change_description": "Cambiar descripción",
|
"change_description": "Cambiar descripción",
|
||||||
@@ -661,6 +682,8 @@
|
|||||||
"change_password_description": "Esta es la primera vez que inicia sesión en el sistema o se ha realizado una solicitud para cambiar su contraseña. Por favor ingrese la nueva contraseña a continuación.",
|
"change_password_description": "Esta es la primera vez que inicia sesión en el sistema o se ha realizado una solicitud para cambiar su contraseña. Por favor ingrese la nueva contraseña a continuación.",
|
||||||
"change_password_form_confirm_password": "Confirmar contraseña",
|
"change_password_form_confirm_password": "Confirmar contraseña",
|
||||||
"change_password_form_description": "Hola {name},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
|
"change_password_form_description": "Hola {name},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
|
||||||
|
"change_password_form_log_out": "Cerrar sesión los demás dispositivos",
|
||||||
|
"change_password_form_log_out_description": "Se recomienda cerrar sesión en todos los demás dispositivos",
|
||||||
"change_password_form_new_password": "Nueva contraseña",
|
"change_password_form_new_password": "Nueva contraseña",
|
||||||
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||||
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||||
@@ -688,7 +711,7 @@
|
|||||||
"client_cert_invalid_msg": "Archivo de certificado no válido o contraseña incorrecta",
|
"client_cert_invalid_msg": "Archivo de certificado no válido o contraseña incorrecta",
|
||||||
"client_cert_remove_msg": "El certificado de cliente se ha eliminado",
|
"client_cert_remove_msg": "El certificado de cliente se ha eliminado",
|
||||||
"client_cert_subtitle": "Solo se admite el formato PKCS12 (.p12, .pfx). La importación/eliminación de certificados solo está disponible antes de iniciar sesión",
|
"client_cert_subtitle": "Solo se admite el formato PKCS12 (.p12, .pfx). La importación/eliminación de certificados solo está disponible antes de iniciar sesión",
|
||||||
"client_cert_title": "Certificado de cliente SSL",
|
"client_cert_title": "Certificado de cliente SSL [EXPERIMENTAL]",
|
||||||
"clockwise": "En el sentido de las agujas del reloj",
|
"clockwise": "En el sentido de las agujas del reloj",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
"collapse": "Agrupar",
|
"collapse": "Agrupar",
|
||||||
@@ -700,7 +723,6 @@
|
|||||||
"comments_and_likes": "Comentarios y me gusta",
|
"comments_and_likes": "Comentarios y me gusta",
|
||||||
"comments_are_disabled": "Los comentarios están deshabilitados",
|
"comments_are_disabled": "Los comentarios están deshabilitados",
|
||||||
"common_create_new_album": "Crear nuevo álbum",
|
"common_create_new_album": "Crear nuevo álbum",
|
||||||
"common_server_error": "Por favor, comprueba tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
|
|
||||||
"completed": "Completado",
|
"completed": "Completado",
|
||||||
"confirm": "Confirmar",
|
"confirm": "Confirmar",
|
||||||
"confirm_admin_password": "Confirmar contraseña del administrador",
|
"confirm_admin_password": "Confirmar contraseña del administrador",
|
||||||
@@ -739,6 +761,7 @@
|
|||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"create_album": "Crear álbum",
|
"create_album": "Crear álbum",
|
||||||
"create_album_page_untitled": "Sin título",
|
"create_album_page_untitled": "Sin título",
|
||||||
|
"create_api_key": "Crear clave API",
|
||||||
"create_library": "Crear biblioteca",
|
"create_library": "Crear biblioteca",
|
||||||
"create_link": "Crear enlace",
|
"create_link": "Crear enlace",
|
||||||
"create_link_to_share": "Crear enlace compartido",
|
"create_link_to_share": "Crear enlace compartido",
|
||||||
@@ -768,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "E dd de MMM, yyyy",
|
"daily_title_text_date_year": "E dd de MMM, yyyy",
|
||||||
"dark": "Oscuro",
|
"dark": "Oscuro",
|
||||||
"dark_theme": "Alternar tema oscuro",
|
"dark_theme": "Alternar tema oscuro",
|
||||||
|
"date": "Fecha",
|
||||||
"date_after": "Fecha posterior",
|
"date_after": "Fecha posterior",
|
||||||
"date_and_time": "Fecha y Hora",
|
"date_and_time": "Fecha y Hora",
|
||||||
"date_before": "Fecha anterior",
|
"date_before": "Fecha anterior",
|
||||||
@@ -882,7 +906,6 @@
|
|||||||
"edit_tag": "Editar etiqueta",
|
"edit_tag": "Editar etiqueta",
|
||||||
"edit_title": "Editar Titulo",
|
"edit_title": "Editar Titulo",
|
||||||
"edit_user": "Editar usuario",
|
"edit_user": "Editar usuario",
|
||||||
"edited": "Editado",
|
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
"editor_close_without_save_prompt": "No se guardarán los cambios",
|
"editor_close_without_save_prompt": "No se guardarán los cambios",
|
||||||
"editor_close_without_save_title": "¿Cerrar el editor?",
|
"editor_close_without_save_title": "¿Cerrar el editor?",
|
||||||
@@ -1038,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Error al actualizar la descripción",
|
"exif_bottom_sheet_description_error": "Error al actualizar la descripción",
|
||||||
"exif_bottom_sheet_details": "DETALLES",
|
"exif_bottom_sheet_details": "DETALLES",
|
||||||
"exif_bottom_sheet_location": "UBICACIÓN",
|
"exif_bottom_sheet_location": "UBICACIÓN",
|
||||||
|
"exif_bottom_sheet_no_description": "Sin descripción",
|
||||||
"exif_bottom_sheet_people": "PERSONAS",
|
"exif_bottom_sheet_people": "PERSONAS",
|
||||||
"exif_bottom_sheet_person_add_person": "Agregar nombre",
|
"exif_bottom_sheet_person_add_person": "Agregar nombre",
|
||||||
"exit_slideshow": "Salir de la presentación",
|
"exit_slideshow": "Salir de la presentación",
|
||||||
@@ -1076,9 +1100,10 @@
|
|||||||
"features_setting_description": "Administrar las funciones de la aplicación",
|
"features_setting_description": "Administrar las funciones de la aplicación",
|
||||||
"file_name": "Nombre de archivo",
|
"file_name": "Nombre de archivo",
|
||||||
"file_name_or_extension": "Nombre del archivo o extensión",
|
"file_name_or_extension": "Nombre del archivo o extensión",
|
||||||
|
"file_size": "Tamaño del archivo",
|
||||||
"filename": "Nombre del archivo",
|
"filename": "Nombre del archivo",
|
||||||
"filetype": "Tipo de archivo",
|
"filetype": "Tipo de archivo",
|
||||||
"filter": "Filtrar",
|
"filter": "Filtros",
|
||||||
"filter_people": "Filtrar personas",
|
"filter_people": "Filtrar personas",
|
||||||
"filter_places": "Filtrar lugares",
|
"filter_places": "Filtrar lugares",
|
||||||
"find_them_fast": "Encuéntrelos rápidamente por nombre con la búsqueda",
|
"find_them_fast": "Encuéntrelos rápidamente por nombre con la búsqueda",
|
||||||
@@ -1119,7 +1144,6 @@
|
|||||||
"header_settings_field_validator_msg": "El valor no puede estar vacío",
|
"header_settings_field_validator_msg": "El valor no puede estar vacío",
|
||||||
"header_settings_header_name_input": "Nombre de la cabecera",
|
"header_settings_header_name_input": "Nombre de la cabecera",
|
||||||
"header_settings_header_value_input": "Valor de la cabecera",
|
"header_settings_header_value_input": "Valor de la cabecera",
|
||||||
"headers_settings_tile_subtitle": "Configura headers HTTP que la aplicación incluirá en cada petición de red",
|
|
||||||
"headers_settings_tile_title": "Cabeceras de proxy personalizadas",
|
"headers_settings_tile_title": "Cabeceras de proxy personalizadas",
|
||||||
"hi_user": "Hola {name} ({email})",
|
"hi_user": "Hola {name} ({email})",
|
||||||
"hide_all_people": "Ocultar a todas las personas",
|
"hide_all_people": "Ocultar a todas las personas",
|
||||||
@@ -1240,6 +1264,7 @@
|
|||||||
"local_media_summary": "Resumen de Medios Locales",
|
"local_media_summary": "Resumen de Medios Locales",
|
||||||
"local_network": "Red local",
|
"local_network": "Red local",
|
||||||
"local_network_sheet_info": "La aplicación se conectará al servidor a través de esta URL cuando utilice la red Wi-Fi especificada",
|
"local_network_sheet_info": "La aplicación se conectará al servidor a través de esta URL cuando utilice la red Wi-Fi especificada",
|
||||||
|
"location": "Ubicación",
|
||||||
"location_permission": "Permiso de ubicación",
|
"location_permission": "Permiso de ubicación",
|
||||||
"location_permission_content": "Para usar la función de cambio automático, Immich necesita permiso de ubicación precisa para poder leer el nombre de la red Wi-Fi actual",
|
"location_permission_content": "Para usar la función de cambio automático, Immich necesita permiso de ubicación precisa para poder leer el nombre de la red Wi-Fi actual",
|
||||||
"location_picker_choose_on_map": "Elegir en el mapa",
|
"location_picker_choose_on_map": "Elegir en el mapa",
|
||||||
@@ -1344,6 +1369,8 @@
|
|||||||
"minute": "Minuto",
|
"minute": "Minuto",
|
||||||
"minutes": "Minutos",
|
"minutes": "Minutos",
|
||||||
"missing": "Faltante",
|
"missing": "Faltante",
|
||||||
|
"mobile_app": "Aplicación Móvil",
|
||||||
|
"mobile_app_download_onboarding_note": "Descarga la aplicación móvil utilizando las siguientes opciones",
|
||||||
"model": "Modelo",
|
"model": "Modelo",
|
||||||
"month": "Mes",
|
"month": "Mes",
|
||||||
"monthly_title_text_date_format": "MMMM a",
|
"monthly_title_text_date_format": "MMMM a",
|
||||||
@@ -1362,6 +1389,8 @@
|
|||||||
"my_albums": "Mis álbumes",
|
"my_albums": "Mis álbumes",
|
||||||
"name": "Nombre",
|
"name": "Nombre",
|
||||||
"name_or_nickname": "Nombre o apodo",
|
"name_or_nickname": "Nombre o apodo",
|
||||||
|
"navigate": "Navegar",
|
||||||
|
"navigate_to_time": "Navegar a Hora",
|
||||||
"network_requirement_photos_upload": "Usar datos móviles para crear una copia de seguridad de las fotos",
|
"network_requirement_photos_upload": "Usar datos móviles para crear una copia de seguridad de las fotos",
|
||||||
"network_requirement_videos_upload": "Usar datos móviles para crear una copia de seguridad de los videos",
|
"network_requirement_videos_upload": "Usar datos móviles para crear una copia de seguridad de los videos",
|
||||||
"network_requirements": "Requisitos de red",
|
"network_requirements": "Requisitos de red",
|
||||||
@@ -1371,6 +1400,7 @@
|
|||||||
"never": "Nunca",
|
"never": "Nunca",
|
||||||
"new_album": "Nuevo álbum",
|
"new_album": "Nuevo álbum",
|
||||||
"new_api_key": "Nueva clave API",
|
"new_api_key": "Nueva clave API",
|
||||||
|
"new_date_range": "Nuevo rango de fechas",
|
||||||
"new_password": "Nueva contraseña",
|
"new_password": "Nueva contraseña",
|
||||||
"new_person": "Nueva persona",
|
"new_person": "Nueva persona",
|
||||||
"new_pin_code": "Nuevo PIN",
|
"new_pin_code": "Nuevo PIN",
|
||||||
@@ -1421,6 +1451,9 @@
|
|||||||
"notifications": "Notificaciones",
|
"notifications": "Notificaciones",
|
||||||
"notifications_setting_description": "Administrar notificaciones",
|
"notifications_setting_description": "Administrar notificaciones",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Configurador de Obtainium",
|
||||||
|
"obtainium_configurator_instructions": "Usa Obtainium para instalar y actualizar la aplicación de Android directamente desde las versiones publicadas en el GitHub de Immich. Crea una clave API y selecciona una variante para generar tu enlace de configuración de Obtainium",
|
||||||
|
"ocr": "OCR",
|
||||||
"official_immich_resources": "Recursos oficiales de Immich",
|
"official_immich_resources": "Recursos oficiales de Immich",
|
||||||
"offline": "Desconectado",
|
"offline": "Desconectado",
|
||||||
"offset": "Desviación",
|
"offset": "Desviación",
|
||||||
@@ -1525,6 +1558,9 @@
|
|||||||
"play_memories": "Reproducir recuerdos",
|
"play_memories": "Reproducir recuerdos",
|
||||||
"play_motion_photo": "Reproducir foto en movimiento",
|
"play_motion_photo": "Reproducir foto en movimiento",
|
||||||
"play_or_pause_video": "Reproducir o pausar vídeo",
|
"play_or_pause_video": "Reproducir o pausar vídeo",
|
||||||
|
"play_original_video": "Reproducir video original",
|
||||||
|
"play_original_video_setting_description": "Preferir la reproducción de videos originales en lugar de videos transcodificados. Si el recurso original no es compatible, es posible que no se reproduzca correctamente.",
|
||||||
|
"play_transcoded_video": "Reproducir video transcodificado",
|
||||||
"please_auth_to_access": "Por favor, autentícate para acceder",
|
"please_auth_to_access": "Por favor, autentícate para acceder",
|
||||||
"port": "Puerto",
|
"port": "Puerto",
|
||||||
"preferences_settings_subtitle": "Configuraciones de la aplicación",
|
"preferences_settings_subtitle": "Configuraciones de la aplicación",
|
||||||
@@ -1542,13 +1578,9 @@
|
|||||||
"privacy": "Privacidad",
|
"privacy": "Privacidad",
|
||||||
"profile": "Perfil",
|
"profile": "Perfil",
|
||||||
"profile_drawer_app_logs": "Registros",
|
"profile_drawer_app_logs": "Registros",
|
||||||
"profile_drawer_client_out_of_date_major": "La app está desactualizada. Por favor actualiza a la última versión principal.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "La app está desactualizada. Por favor actualiza a la última versión menor.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Cliente y Servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "Cliente y Servidor están actualizados",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Modo Solo lectura habilitado. Mantén pulsado el icono del avatar del usuario para salir.",
|
"profile_drawer_readonly_mode": "Modo Solo lectura habilitado. Mantén pulsado el icono del avatar del usuario para salir.",
|
||||||
"profile_drawer_server_out_of_date_major": "El servidor está desactualizado. Por favor actualiza a la última versión principal.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "El servidor está desactualizado. Por favor actualiza a la última versión menor.",
|
|
||||||
"profile_image_of_user": "Foto de perfil de {user}",
|
"profile_image_of_user": "Foto de perfil de {user}",
|
||||||
"profile_picture_set": "Conjunto de imágenes de perfil.",
|
"profile_picture_set": "Conjunto de imágenes de perfil.",
|
||||||
"public_album": "Álbum público",
|
"public_album": "Álbum público",
|
||||||
@@ -1605,8 +1637,8 @@
|
|||||||
"recent_searches": "Búsquedas recientes",
|
"recent_searches": "Búsquedas recientes",
|
||||||
"recently_added": "Añadidos recientemente",
|
"recently_added": "Añadidos recientemente",
|
||||||
"recently_added_page_title": "Recién Agregadas",
|
"recently_added_page_title": "Recién Agregadas",
|
||||||
"recently_taken": "Recientemente tomado",
|
"recently_taken": "Tomadas recientemente",
|
||||||
"recently_taken_page_title": "Recientemente Tomado",
|
"recently_taken_page_title": "Tomadas Recientemente",
|
||||||
"refresh": "Actualizar",
|
"refresh": "Actualizar",
|
||||||
"refresh_encoded_videos": "Recargar los vídeos codificados",
|
"refresh_encoded_videos": "Recargar los vídeos codificados",
|
||||||
"refresh_faces": "Actualizar caras",
|
"refresh_faces": "Actualizar caras",
|
||||||
@@ -1665,6 +1697,7 @@
|
|||||||
"reset_sqlite_confirmation": "¿Estás seguro que deseas restablecer la base de datos SQLite? Deberás cerrar sesión y volver a iniciarla para resincronizar los datos",
|
"reset_sqlite_confirmation": "¿Estás seguro que deseas restablecer la base de datos SQLite? Deberás cerrar sesión y volver a iniciarla para resincronizar los datos",
|
||||||
"reset_sqlite_success": "Restablecer exitosamente la base de datos SQLite",
|
"reset_sqlite_success": "Restablecer exitosamente la base de datos SQLite",
|
||||||
"reset_to_default": "Restablecer los valores predeterminados",
|
"reset_to_default": "Restablecer los valores predeterminados",
|
||||||
|
"resolution": "Resolución",
|
||||||
"resolve_duplicates": "Resolver duplicados",
|
"resolve_duplicates": "Resolver duplicados",
|
||||||
"resolved_all_duplicates": "Todos los duplicados resueltos",
|
"resolved_all_duplicates": "Todos los duplicados resueltos",
|
||||||
"restore": "Restaurar",
|
"restore": "Restaurar",
|
||||||
@@ -1683,6 +1716,7 @@
|
|||||||
"running": "En ejecución",
|
"running": "En ejecución",
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"save_to_gallery": "Guardado en la galería",
|
"save_to_gallery": "Guardado en la galería",
|
||||||
|
"saved": "Guardado",
|
||||||
"saved_api_key": "Clave API guardada",
|
"saved_api_key": "Clave API guardada",
|
||||||
"saved_profile": "Perfil guardado",
|
"saved_profile": "Perfil guardado",
|
||||||
"saved_settings": "Configuraciones guardadas",
|
"saved_settings": "Configuraciones guardadas",
|
||||||
@@ -1699,6 +1733,9 @@
|
|||||||
"search_by_description_example": "Día de senderismo en Sapa",
|
"search_by_description_example": "Día de senderismo en Sapa",
|
||||||
"search_by_filename": "Buscar por nombre de archivo o extensión",
|
"search_by_filename": "Buscar por nombre de archivo o extensión",
|
||||||
"search_by_filename_example": "es decir IMG_1234.JPG o PNG",
|
"search_by_filename_example": "es decir IMG_1234.JPG o PNG",
|
||||||
|
"search_by_ocr": "Buscar por OCR",
|
||||||
|
"search_by_ocr_example": "Café con leche",
|
||||||
|
"search_camera_lens_model": "Buscar modelo de lente...",
|
||||||
"search_camera_make": "Buscar fabricante de cámara...",
|
"search_camera_make": "Buscar fabricante de cámara...",
|
||||||
"search_camera_model": "Buscar modelo de cámara...",
|
"search_camera_model": "Buscar modelo de cámara...",
|
||||||
"search_city": "Buscar ciudad...",
|
"search_city": "Buscar ciudad...",
|
||||||
@@ -1715,6 +1752,7 @@
|
|||||||
"search_filter_location_title": "Seleccionar una ubicación",
|
"search_filter_location_title": "Seleccionar una ubicación",
|
||||||
"search_filter_media_type": "Tipo de archivo",
|
"search_filter_media_type": "Tipo de archivo",
|
||||||
"search_filter_media_type_title": "Seleccionar el tipo de archivo",
|
"search_filter_media_type_title": "Seleccionar el tipo de archivo",
|
||||||
|
"search_filter_ocr": "Buscar por OCR",
|
||||||
"search_filter_people_title": "Seleccionar personas",
|
"search_filter_people_title": "Seleccionar personas",
|
||||||
"search_for": "Buscar",
|
"search_for": "Buscar",
|
||||||
"search_for_existing_person": "Buscar persona existente",
|
"search_for_existing_person": "Buscar persona existente",
|
||||||
@@ -1771,12 +1809,13 @@
|
|||||||
"send_message": "Enviar mensaje",
|
"send_message": "Enviar mensaje",
|
||||||
"send_welcome_email": "Enviar correo de bienvenida",
|
"send_welcome_email": "Enviar correo de bienvenida",
|
||||||
"server_endpoint": "Punto final del servidor",
|
"server_endpoint": "Punto final del servidor",
|
||||||
"server_info_box_app_version": "Versión de la Aplicación",
|
"server_info_box_app_version": "Versión de la aplicación",
|
||||||
"server_info_box_server_url": "Enlace del servidor",
|
"server_info_box_server_url": "Enlace del servidor",
|
||||||
"server_offline": "Servidor desconectado",
|
"server_offline": "Servidor desconectado",
|
||||||
"server_online": "Servidor en línea",
|
"server_online": "Servidor en línea",
|
||||||
"server_privacy": "Privacidad del Servidor",
|
"server_privacy": "Privacidad del Servidor",
|
||||||
"server_stats": "Estadísticas del servidor",
|
"server_stats": "Estadísticas del servidor",
|
||||||
|
"server_update_available": "Actualización de servidor disponible",
|
||||||
"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",
|
||||||
@@ -1805,6 +1844,8 @@
|
|||||||
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
||||||
"setting_notifications_total_progress_subtitle": "Progreso general de subida (elementos completados/total)",
|
"setting_notifications_total_progress_subtitle": "Progreso general de subida (elementos completados/total)",
|
||||||
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
|
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Reproducir vídeos automáticamente al abrirlos",
|
||||||
|
"setting_video_viewer_auto_play_title": "Reproducir vídeos automáticamente",
|
||||||
"setting_video_viewer_looping_title": "Bucle",
|
"setting_video_viewer_looping_title": "Bucle",
|
||||||
"setting_video_viewer_original_video_subtitle": "Al reproducir un video en streaming desde el servidor, reproducir el original incluso cuando haya una transcodificación disponible. Puede causar buffering. Los videos disponibles localmente se reproducen en calidad original independientemente de esta configuración.",
|
"setting_video_viewer_original_video_subtitle": "Al reproducir un video en streaming desde el servidor, reproducir el original incluso cuando haya una transcodificación disponible. Puede causar buffering. Los videos disponibles localmente se reproducen en calidad original independientemente de esta configuración.",
|
||||||
"setting_video_viewer_original_video_title": "Forzar vídeo original",
|
"setting_video_viewer_original_video_title": "Forzar vídeo original",
|
||||||
@@ -1984,6 +2025,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
|
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
|
||||||
"they_will_be_merged_together": "Se fusionarán entre sí",
|
"they_will_be_merged_together": "Se fusionarán entre sí",
|
||||||
"third_party_resources": "Recursos de terceros",
|
"third_party_resources": "Recursos de terceros",
|
||||||
|
"time": "Tiempo",
|
||||||
"time_based_memories": "Recuerdos basados en tiempo",
|
"time_based_memories": "Recuerdos basados en tiempo",
|
||||||
"timeline": "Cronología",
|
"timeline": "Cronología",
|
||||||
"timezone": "Zona horaria",
|
"timezone": "Zona horaria",
|
||||||
@@ -2016,6 +2058,7 @@
|
|||||||
"troubleshoot": "Solucionar problemas",
|
"troubleshoot": "Solucionar problemas",
|
||||||
"type": "Tipo",
|
"type": "Tipo",
|
||||||
"unable_to_change_pin_code": "No se ha podido cambiar el PIN",
|
"unable_to_change_pin_code": "No se ha podido cambiar el PIN",
|
||||||
|
"unable_to_check_version": "No se puede comprobar la versión de la aplicación o del servidor",
|
||||||
"unable_to_setup_pin_code": "No se ha podido establecer el PIN",
|
"unable_to_setup_pin_code": "No se ha podido establecer el PIN",
|
||||||
"unarchive": "Desarchivar",
|
"unarchive": "Desarchivar",
|
||||||
"unarchive_action_prompt": "{count} eliminados del archivo",
|
"unarchive_action_prompt": "{count} eliminados del archivo",
|
||||||
|
|||||||
78
i18n/et.json
78
i18n/et.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Lisa albumitesse",
|
"add_to_albums": "Lisa albumitesse",
|
||||||
"add_to_albums_count": "Lisa albumitesse ({count})",
|
"add_to_albums_count": "Lisa albumitesse ({count})",
|
||||||
"add_to_shared_album": "Lisa jagatud albumisse",
|
"add_to_shared_album": "Lisa jagatud albumisse",
|
||||||
|
"add_upload_to_stack": "Virnasta üleslaaditud üksus",
|
||||||
"add_url": "Lisa URL",
|
"add_url": "Lisa URL",
|
||||||
"added_to_archive": "Lisatud arhiivi",
|
"added_to_archive": "Lisatud arhiivi",
|
||||||
"added_to_favorites": "Lisatud lemmikutesse",
|
"added_to_favorites": "Lisatud lemmikutesse",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"library_settings_description": "Halda välise kogu seadeid",
|
"library_settings_description": "Halda välise kogu seadeid",
|
||||||
"library_tasks_description": "Otsi välistest kogudest uusi ja muutunud üksuseid",
|
"library_tasks_description": "Otsi välistest kogudest uusi ja muutunud üksuseid",
|
||||||
"library_watching_enable_description": "Jälgi välises kogus failide muudatusi",
|
"library_watching_enable_description": "Jälgi välises kogus failide muudatusi",
|
||||||
"library_watching_settings": "Kogu jälgimine (EKSPERIMENTAALNE)",
|
"library_watching_settings": "Kogu jälgimine [EKSPERIMENTAALNE]",
|
||||||
"library_watching_settings_description": "Jälgi automaatselt muutunud faile",
|
"library_watching_settings_description": "Jälgi automaatselt muutunud faile",
|
||||||
"logging_enable_description": "Luba logimine",
|
"logging_enable_description": "Luba logimine",
|
||||||
"logging_level_description": "Kui lubatud, millist logimistaset kasutada.",
|
"logging_level_description": "Kui lubatud, millist logimistaset kasutada.",
|
||||||
@@ -153,6 +154,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "Minimaalne usaldusskoor näo avastamiseks, vahemikus 0-1. Madalamad väärtused leiavad rohkem nägusid, kuid võib esineda valepositiivseid.",
|
"machine_learning_min_detection_score_description": "Minimaalne usaldusskoor näo avastamiseks, vahemikus 0-1. Madalamad väärtused leiavad rohkem nägusid, kuid võib esineda valepositiivseid.",
|
||||||
"machine_learning_min_recognized_faces": "Minimaalne tuvastatud nägude arv",
|
"machine_learning_min_recognized_faces": "Minimaalne tuvastatud nägude arv",
|
||||||
"machine_learning_min_recognized_faces_description": "Minimaalne tuvastatud nägude arv, mida saab isikuks grupeerida. Selle suurendamine teeb näotuvastuse täpsemaks, kuid suureneb tõenäosus, et nägu ei seostata ühegi isikuga.",
|
"machine_learning_min_recognized_faces_description": "Minimaalne tuvastatud nägude arv, mida saab isikuks grupeerida. Selle suurendamine teeb näotuvastuse täpsemaks, kuid suureneb tõenäosus, et nägu ei seostata ühegi isikuga.",
|
||||||
|
"machine_learning_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Kasuta piltidelt teksti tuvastamiseks masinõpet",
|
||||||
|
"machine_learning_ocr_enabled": "Luba OCR",
|
||||||
|
"machine_learning_ocr_enabled_description": "Kui keelatud, ei rakendata piltidele tekstituvastust.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Maksimaalne resolutsioon",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Eelvaated üle selle resolutsiooni vähendatakse, säilitades külgede suhte. Suuremad väärtused on täpsemad, aga töötlemine võtab kauem aega ja kasutab rohkem mälu.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Minimaalne avastusskoor",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Minimaalne usaldusskoor teksti avastamiseks, vahemikus 0-1. Madalamad väärtused leiavad rohkem teksti, kuid võib esineda valepositiivseid.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Minimaalne tuvastusskoor",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Minimaalne usaldusskoor avastatud teksti tuvastamiseks, vahemikus 0-1. Madalamad väärtused tuvastavad rohkem teksti, kuid võib esineda valepositiivseid.",
|
||||||
|
"machine_learning_ocr_model": "OCR mudel",
|
||||||
|
"machine_learning_ocr_model_description": "Serverimudelid on täpsemad kui mobiilsed mudelid, aga töötlemine võtab rohkem aega ja kasutab rohkem mälu.",
|
||||||
"machine_learning_settings": "Masinõppe seaded",
|
"machine_learning_settings": "Masinõppe seaded",
|
||||||
"machine_learning_settings_description": "Halda masinõppe funktsioone ja seadeid",
|
"machine_learning_settings_description": "Halda masinõppe funktsioone ja seadeid",
|
||||||
"machine_learning_smart_search": "Nutiotsing",
|
"machine_learning_smart_search": "Nutiotsing",
|
||||||
@@ -210,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Ignoreeri TLS sertifikaadi valideerimise vigu (mittesoovituslik)",
|
"notification_email_ignore_certificate_errors_description": "Ignoreeri TLS sertifikaadi valideerimise vigu (mittesoovituslik)",
|
||||||
"notification_email_password_description": "Parool e-posti serveriga autentimiseks",
|
"notification_email_password_description": "Parool e-posti serveriga autentimiseks",
|
||||||
"notification_email_port_description": "E-posti serveri port (nt. 25, 465 või 587)",
|
"notification_email_port_description": "E-posti serveri port (nt. 25, 465 või 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Kasuta SMTPS-i (SMTP üle TLS-i)",
|
||||||
"notification_email_sent_test_email_button": "Saada test e-kiri ja salvesta",
|
"notification_email_sent_test_email_button": "Saada test e-kiri ja salvesta",
|
||||||
"notification_email_setting_description": "E-posti teel teavituste saatmise seaded",
|
"notification_email_setting_description": "E-posti teel teavituste saatmise seaded",
|
||||||
"notification_email_test_email": "Saada test e-kiri",
|
"notification_email_test_email": "Saada test e-kiri",
|
||||||
@@ -242,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Kvoot (GiB), mida kasutada, kui ühtegi väidet pole esitatud.",
|
"oauth_storage_quota_default_description": "Kvoot (GiB), mida kasutada, kui ühtegi väidet pole esitatud.",
|
||||||
"oauth_timeout": "Päringu ajalõpp",
|
"oauth_timeout": "Päringu ajalõpp",
|
||||||
"oauth_timeout_description": "Päringute ajalõpp millisekundites",
|
"oauth_timeout_description": "Päringute ajalõpp millisekundites",
|
||||||
|
"ocr_job_description": "Kasuta piltidelt teksti tuvastamiseks masinõpet",
|
||||||
"password_enable_description": "Logi sisse e-posti aadressi ja parooliga",
|
"password_enable_description": "Logi sisse e-posti aadressi ja parooliga",
|
||||||
"password_settings": "Parooliga sisselogimine",
|
"password_settings": "Parooliga sisselogimine",
|
||||||
"password_settings_description": "Halda parooliga sisselogimise seadeid",
|
"password_settings_description": "Halda parooliga sisselogimise seadeid",
|
||||||
@@ -332,7 +348,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Maksimaalne bitisagedus",
|
"transcoding_max_bitrate": "Maksimaalne bitisagedus",
|
||||||
"transcoding_max_bitrate_description": "Maksimaalse bitisageduse määramine teeb failisuurused ennustatavamaks, väikese kvaliteedikao hinnaga. 720p resolutsiooni puhul on tüüpilised väärtused 2600 kbit/s (VP9 ja HEVC) või 4500 kbit/s (H.264). Väärtus 0 eemaldab piirangu.",
|
"transcoding_max_bitrate_description": "Maksimaalse bitisageduse määramine teeb failisuurused ennustatavamaks, väikese kvaliteedikao hinnaga. 720p resolutsiooni puhul on tüüpilised väärtused 2600 kbit/s (VP9 ja HEVC) või 4500 kbit/s (H.264). Väärtus 0 eemaldab piirangu. Kui ühikut pole määratud, eeldatakse k (kbit/s); seega 5000, 5000k ja 5M (Mbit/s) on samaväärsed.",
|
||||||
"transcoding_max_keyframe_interval": "Maksimaalne võtmekaadri intervall",
|
"transcoding_max_keyframe_interval": "Maksimaalne võtmekaadri intervall",
|
||||||
"transcoding_max_keyframe_interval_description": "Määrab maksimaalse kauguse võtmekaadrite vahel. Madalamad väärtused vähendavad pakkimise efektiivsust, aga parandavad otsimiskiirust ning võivad tõsta kiire liikumisega stseenide kvaliteeti. 0 määrab väärtuse automaatselt.",
|
"transcoding_max_keyframe_interval_description": "Määrab maksimaalse kauguse võtmekaadrite vahel. Madalamad väärtused vähendavad pakkimise efektiivsust, aga parandavad otsimiskiirust ning võivad tõsta kiire liikumisega stseenide kvaliteeti. 0 määrab väärtuse automaatselt.",
|
||||||
"transcoding_optimal_description": "Kõrgema kui lubatud resolutsiooniga või mittelubatud formaadis videod",
|
"transcoding_optimal_description": "Kõrgema kui lubatud resolutsiooniga või mittelubatud formaadis videod",
|
||||||
@@ -350,7 +366,7 @@
|
|||||||
"transcoding_target_resolution": "Sihtresolutsioon",
|
"transcoding_target_resolution": "Sihtresolutsioon",
|
||||||
"transcoding_target_resolution_description": "Kõrgemad resolutsioonid säilitavad rohkem detaile, aga kodeerimine võtab kauem aega, tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust.",
|
"transcoding_target_resolution_description": "Kõrgemad resolutsioonid säilitavad rohkem detaile, aga kodeerimine võtab kauem aega, tekitab suuremaid faile ning võib mõjutada rakenduse töökiirust.",
|
||||||
"transcoding_temporal_aq": "Temporal AQ",
|
"transcoding_temporal_aq": "Temporal AQ",
|
||||||
"transcoding_temporal_aq_description": "Rakendub NVENC puhul. Parandab paljude detailide, aga vähese liikumisega stseenide kvaliteeti. Ei pruugi ühilduda vanemate seadmetega.",
|
"transcoding_temporal_aq_description": "Rakendub NVENC puhul. Temporal Adaptive Quantization parandab paljude detailide, aga vähese liikumisega stseenide kvaliteeti. Ei pruugi ühilduda vanemate seadmetega.",
|
||||||
"transcoding_threads": "Lõimed",
|
"transcoding_threads": "Lõimed",
|
||||||
"transcoding_threads_description": "Kõrgem väärtus tähendab kiiremat kodeerimist, aga jätab serverile muude tegevuste jaoks vähem ressursse. See väärtus ei tohiks olla suurem kui protsessori tuumade arv. Väärtus 0 tähendab maksimaalset kasutust.",
|
"transcoding_threads_description": "Kõrgem väärtus tähendab kiiremat kodeerimist, aga jätab serverile muude tegevuste jaoks vähem ressursse. See väärtus ei tohiks olla suurem kui protsessori tuumade arv. Väärtus 0 tähendab maksimaalset kasutust.",
|
||||||
"transcoding_tone_mapping": "Toonivastendus",
|
"transcoding_tone_mapping": "Toonivastendus",
|
||||||
@@ -401,11 +417,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Mõned seadmed laadivad lokaalsete üksuste pisipilte piinavalt aeglaselt. Aktiveeri see seadistus, et laadida selle asemel kaugpilte.",
|
"advanced_settings_prefer_remote_subtitle": "Mõned seadmed laadivad lokaalsete üksuste pisipilte piinavalt aeglaselt. Aktiveeri see seadistus, et laadida selle asemel kaugpilte.",
|
||||||
"advanced_settings_prefer_remote_title": "Eelista kaugpilte",
|
"advanced_settings_prefer_remote_title": "Eelista kaugpilte",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Määra vaheserveri päised, mida Immich peaks iga päringuga saatma",
|
"advanced_settings_proxy_headers_subtitle": "Määra vaheserveri päised, mida Immich peaks iga päringuga saatma",
|
||||||
"advanced_settings_proxy_headers_title": "Vaheserveri päised",
|
"advanced_settings_proxy_headers_title": "Kohandatud vaheserveri päised [EKSPERIMENTAALNE]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Lülitab sisse kirjutuskaitserežiimi, milles saab fotosid ainult vaadata ning toimingud nagu mitme pildi valimine, jagamine, edastamine ja kustutamine on keelatud. Lülita kirjutuskaitserežiim sisse/välja põhiekraanil oleva avatari kaudu",
|
"advanced_settings_readonly_mode_subtitle": "Lülitab sisse kirjutuskaitserežiimi, milles saab fotosid ainult vaadata ning toimingud nagu mitme pildi valimine, jagamine, edastamine ja kustutamine on keelatud. Lülita kirjutuskaitserežiim sisse/välja põhiekraanil oleva avatari kaudu",
|
||||||
"advanced_settings_readonly_mode_title": "Kirjutuskaitserežiim",
|
"advanced_settings_readonly_mode_title": "Kirjutuskaitserežiim",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Jätab serveri lõpp-punkti SSL-sertifikaadi kontrolli vahele. Nõutud endasigneeritud sertifikaatide jaoks.",
|
"advanced_settings_self_signed_ssl_subtitle": "Jätab serveri lõpp-punkti SSL-sertifikaadi kontrolli vahele. Nõutud endasigneeritud sertifikaatide jaoks.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Luba endasigneeritud SSL-sertifikaadid",
|
"advanced_settings_self_signed_ssl_title": "Luba endasigneeritud SSL-sertifikaadid [EKSPERIMENTAALNE]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Kustuta või taasta üksus selles seadmes automaatself, kui sama tegevus toimub veebis",
|
"advanced_settings_sync_remote_deletions_subtitle": "Kustuta või taasta üksus selles seadmes automaatself, kui sama tegevus toimub veebis",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Sünkrooni kaugkustutamised [EKSPERIMENTAALNE]",
|
"advanced_settings_sync_remote_deletions_title": "Sünkrooni kaugkustutamised [EKSPERIMENTAALNE]",
|
||||||
"advanced_settings_tile_subtitle": "Edasijõudnud kasutajate seaded",
|
"advanced_settings_tile_subtitle": "Edasijõudnud kasutajate seaded",
|
||||||
@@ -465,10 +481,14 @@
|
|||||||
"api_key_description": "Seda väärtust kuvatakse ainult üks kord. Kopeeri see enne akna sulgemist.",
|
"api_key_description": "Seda väärtust kuvatakse ainult üks kord. Kopeeri see enne akna sulgemist.",
|
||||||
"api_key_empty": "Su API võtme nimi ei tohiks olla tühi",
|
"api_key_empty": "Su API võtme nimi ei tohiks olla tühi",
|
||||||
"api_keys": "API võtmed",
|
"api_keys": "API võtmed",
|
||||||
|
"app_architecture_variant": "Variant (arhitektuur)",
|
||||||
"app_bar_signout_dialog_content": "Kas oled kindel, et soovid välja logida?",
|
"app_bar_signout_dialog_content": "Kas oled kindel, et soovid välja logida?",
|
||||||
"app_bar_signout_dialog_ok": "Jah",
|
"app_bar_signout_dialog_ok": "Jah",
|
||||||
"app_bar_signout_dialog_title": "Logi välja",
|
"app_bar_signout_dialog_title": "Logi välja",
|
||||||
|
"app_download_links": "Rakenduse allalaadimise lingid",
|
||||||
"app_settings": "Rakenduse seaded",
|
"app_settings": "Rakenduse seaded",
|
||||||
|
"app_stores": "Rakendusepoed",
|
||||||
|
"app_update_available": "Rakenduse uuendus on saadaval",
|
||||||
"appears_in": "Albumid",
|
"appears_in": "Albumid",
|
||||||
"apply_count": "Rakenda ({count, number})",
|
"apply_count": "Rakenda ({count, number})",
|
||||||
"archive": "Arhiiv",
|
"archive": "Arhiiv",
|
||||||
@@ -552,6 +572,7 @@
|
|||||||
"backup_albums_sync": "Varundusalbumite sünkroniseerimine",
|
"backup_albums_sync": "Varundusalbumite sünkroniseerimine",
|
||||||
"backup_all": "Kõik",
|
"backup_all": "Kõik",
|
||||||
"backup_background_service_backup_failed_message": "Üksuste varundamine ebaõnnestus. Uuesti proovimine…",
|
"backup_background_service_backup_failed_message": "Üksuste varundamine ebaõnnestus. Uuesti proovimine…",
|
||||||
|
"backup_background_service_complete_notification": "Üksuste varundamine lõppenud",
|
||||||
"backup_background_service_connection_failed_message": "Serveriga ühendumine ebaõnnestus. Uuesti proovimine…",
|
"backup_background_service_connection_failed_message": "Serveriga ühendumine ebaõnnestus. Uuesti proovimine…",
|
||||||
"backup_background_service_current_upload_notification": "{filename} üleslaadimine",
|
"backup_background_service_current_upload_notification": "{filename} üleslaadimine",
|
||||||
"backup_background_service_default_notification": "Uute üksuste kontrollimine…",
|
"backup_background_service_default_notification": "Uute üksuste kontrollimine…",
|
||||||
@@ -599,6 +620,7 @@
|
|||||||
"backup_controller_page_turn_on": "Lülita esiplaanil varundus sisse",
|
"backup_controller_page_turn_on": "Lülita esiplaanil varundus sisse",
|
||||||
"backup_controller_page_uploading_file_info": "Faili info üleslaadimine",
|
"backup_controller_page_uploading_file_info": "Faili info üleslaadimine",
|
||||||
"backup_err_only_album": "Ei saa ainsat albumit eemaldada",
|
"backup_err_only_album": "Ei saa ainsat albumit eemaldada",
|
||||||
|
"backup_error_sync_failed": "Sünkroonimine ebaõnnestus. Varundust ei saa töödelda.",
|
||||||
"backup_info_card_assets": "üksused",
|
"backup_info_card_assets": "üksused",
|
||||||
"backup_manual_cancelled": "Tühistatud",
|
"backup_manual_cancelled": "Tühistatud",
|
||||||
"backup_manual_in_progress": "Üleslaadimine juba käib. Proovi hiljem uuesti",
|
"backup_manual_in_progress": "Üleslaadimine juba käib. Proovi hiljem uuesti",
|
||||||
@@ -660,6 +682,8 @@
|
|||||||
"change_password_description": "See on su esimene kord süsteemi siseneda, või on tehtud taotlus parooli muutmiseks. Palun sisesta allpool uus parool.",
|
"change_password_description": "See on su esimene kord süsteemi siseneda, või on tehtud taotlus parooli muutmiseks. Palun sisesta allpool uus parool.",
|
||||||
"change_password_form_confirm_password": "Kinnita parool",
|
"change_password_form_confirm_password": "Kinnita parool",
|
||||||
"change_password_form_description": "Hei {name},\n\nSa kas logid süsteemi esimest korda sisse, või on esitatud taotlus sinu parooli muutmiseks. Palun sisesta allpool uus parool.",
|
"change_password_form_description": "Hei {name},\n\nSa kas logid süsteemi esimest korda sisse, või on esitatud taotlus sinu parooli muutmiseks. Palun sisesta allpool uus parool.",
|
||||||
|
"change_password_form_log_out": "Logi muudest seadmetest välja",
|
||||||
|
"change_password_form_log_out_description": "Soovituslik on kõigist muudest seadmetest välja logida",
|
||||||
"change_password_form_new_password": "Uus parool",
|
"change_password_form_new_password": "Uus parool",
|
||||||
"change_password_form_password_mismatch": "Paroolid ei klapi",
|
"change_password_form_password_mismatch": "Paroolid ei klapi",
|
||||||
"change_password_form_reenter_new_password": "Korda uut parooli",
|
"change_password_form_reenter_new_password": "Korda uut parooli",
|
||||||
@@ -687,7 +711,7 @@
|
|||||||
"client_cert_invalid_msg": "Vigane sertifikaadi fail või vale parool",
|
"client_cert_invalid_msg": "Vigane sertifikaadi fail või vale parool",
|
||||||
"client_cert_remove_msg": "Klientsertifikaat on eemaldatud",
|
"client_cert_remove_msg": "Klientsertifikaat on eemaldatud",
|
||||||
"client_cert_subtitle": "Toetab ainult PKCS12 (.p12, .pfx) formaati. Sertifikaadi importimine/eemaldamine on saadaval ainult enne sisselogimist",
|
"client_cert_subtitle": "Toetab ainult PKCS12 (.p12, .pfx) formaati. Sertifikaadi importimine/eemaldamine on saadaval ainult enne sisselogimist",
|
||||||
"client_cert_title": "SSL klientsertifikaat",
|
"client_cert_title": "SSL klientsertifikaat [EKSPERIMENTAALNE]",
|
||||||
"clockwise": "Päripäeva",
|
"clockwise": "Päripäeva",
|
||||||
"close": "Sulge",
|
"close": "Sulge",
|
||||||
"collapse": "Peida",
|
"collapse": "Peida",
|
||||||
@@ -699,7 +723,6 @@
|
|||||||
"comments_and_likes": "Kommentaarid ja meeldimised",
|
"comments_and_likes": "Kommentaarid ja meeldimised",
|
||||||
"comments_are_disabled": "Kommentaarid on keelatud",
|
"comments_are_disabled": "Kommentaarid on keelatud",
|
||||||
"common_create_new_album": "Lisa uus album",
|
"common_create_new_album": "Lisa uus album",
|
||||||
"common_server_error": "Kontrolli oma võrguühendust ja veendu, et server on kättesaadav ning rakenduse ja serveri versioonid on ühilduvad.",
|
|
||||||
"completed": "Lõpetatud",
|
"completed": "Lõpetatud",
|
||||||
"confirm": "Kinnita",
|
"confirm": "Kinnita",
|
||||||
"confirm_admin_password": "Kinnita administraatori parool",
|
"confirm_admin_password": "Kinnita administraatori parool",
|
||||||
@@ -738,6 +761,7 @@
|
|||||||
"create": "Lisa",
|
"create": "Lisa",
|
||||||
"create_album": "Lisa album",
|
"create_album": "Lisa album",
|
||||||
"create_album_page_untitled": "Pealkirjata",
|
"create_album_page_untitled": "Pealkirjata",
|
||||||
|
"create_api_key": "Lisa API võti",
|
||||||
"create_library": "Lisa kogu",
|
"create_library": "Lisa kogu",
|
||||||
"create_link": "Lisa link",
|
"create_link": "Lisa link",
|
||||||
"create_link_to_share": "Lisa jagamiseks link",
|
"create_link_to_share": "Lisa jagamiseks link",
|
||||||
@@ -767,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "d. MMMM yyyy",
|
"daily_title_text_date_year": "d. MMMM yyyy",
|
||||||
"dark": "Tume",
|
"dark": "Tume",
|
||||||
"dark_theme": "Lülita tume teema",
|
"dark_theme": "Lülita tume teema",
|
||||||
|
"date": "Kuupäev",
|
||||||
"date_after": "Kuupäev pärast",
|
"date_after": "Kuupäev pärast",
|
||||||
"date_and_time": "Kuupäev ja kellaaeg",
|
"date_and_time": "Kuupäev ja kellaaeg",
|
||||||
"date_before": "Kuupäev enne",
|
"date_before": "Kuupäev enne",
|
||||||
@@ -881,7 +906,6 @@
|
|||||||
"edit_tag": "Muuda silti",
|
"edit_tag": "Muuda silti",
|
||||||
"edit_title": "Muuda pealkirja",
|
"edit_title": "Muuda pealkirja",
|
||||||
"edit_user": "Muuda kasutajat",
|
"edit_user": "Muuda kasutajat",
|
||||||
"edited": "Muudetud",
|
|
||||||
"editor": "Muutja",
|
"editor": "Muutja",
|
||||||
"editor_close_without_save_prompt": "Muudatusi ei salvestata",
|
"editor_close_without_save_prompt": "Muudatusi ei salvestata",
|
||||||
"editor_close_without_save_title": "Sulge muutja?",
|
"editor_close_without_save_title": "Sulge muutja?",
|
||||||
@@ -1037,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Viga kirjelduse muutmisel",
|
"exif_bottom_sheet_description_error": "Viga kirjelduse muutmisel",
|
||||||
"exif_bottom_sheet_details": "ÜKSIKASJAD",
|
"exif_bottom_sheet_details": "ÜKSIKASJAD",
|
||||||
"exif_bottom_sheet_location": "ASUKOHT",
|
"exif_bottom_sheet_location": "ASUKOHT",
|
||||||
|
"exif_bottom_sheet_no_description": "Kirjeldus puudub",
|
||||||
"exif_bottom_sheet_people": "ISIKUD",
|
"exif_bottom_sheet_people": "ISIKUD",
|
||||||
"exif_bottom_sheet_person_add_person": "Lisa nimi",
|
"exif_bottom_sheet_person_add_person": "Lisa nimi",
|
||||||
"exit_slideshow": "Sulge slaidiesitlus",
|
"exit_slideshow": "Sulge slaidiesitlus",
|
||||||
@@ -1075,6 +1100,7 @@
|
|||||||
"features_setting_description": "Halda rakenduse funktsioone",
|
"features_setting_description": "Halda rakenduse funktsioone",
|
||||||
"file_name": "Failinimi",
|
"file_name": "Failinimi",
|
||||||
"file_name_or_extension": "Failinimi või -laiend",
|
"file_name_or_extension": "Failinimi või -laiend",
|
||||||
|
"file_size": "Failisuurus",
|
||||||
"filename": "Failinimi",
|
"filename": "Failinimi",
|
||||||
"filetype": "Failitüüp",
|
"filetype": "Failitüüp",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
@@ -1118,7 +1144,6 @@
|
|||||||
"header_settings_field_validator_msg": "Väärtus ei saa olla tühi",
|
"header_settings_field_validator_msg": "Väärtus ei saa olla tühi",
|
||||||
"header_settings_header_name_input": "Päise nimi",
|
"header_settings_header_name_input": "Päise nimi",
|
||||||
"header_settings_header_value_input": "Päise väärtus",
|
"header_settings_header_value_input": "Päise väärtus",
|
||||||
"headers_settings_tile_subtitle": "Määra vaheserveri päised, mida rakendus peaks iga päringuga saatma",
|
|
||||||
"headers_settings_tile_title": "Kohandatud vaheserveri päised",
|
"headers_settings_tile_title": "Kohandatud vaheserveri päised",
|
||||||
"hi_user": "Tere {name} ({email})",
|
"hi_user": "Tere {name} ({email})",
|
||||||
"hide_all_people": "Peida kõik isikud",
|
"hide_all_people": "Peida kõik isikud",
|
||||||
@@ -1239,6 +1264,7 @@
|
|||||||
"local_media_summary": "Lokaalsete üksuste kokkuvõte",
|
"local_media_summary": "Lokaalsete üksuste kokkuvõte",
|
||||||
"local_network": "Kohalik võrk",
|
"local_network": "Kohalik võrk",
|
||||||
"local_network_sheet_info": "Rakendus ühendub valitud Wi-Fi võrgus olles serveriga selle URL-i kaudu",
|
"local_network_sheet_info": "Rakendus ühendub valitud Wi-Fi võrgus olles serveriga selle URL-i kaudu",
|
||||||
|
"location": "Asukoht",
|
||||||
"location_permission": "Asukoha luba",
|
"location_permission": "Asukoha luba",
|
||||||
"location_permission_content": "Automaatseks ümberlülitumiseks vajab Immich täpse asukoha luba, et saaks lugeda aktiivse WiFi-võrgu nime",
|
"location_permission_content": "Automaatseks ümberlülitumiseks vajab Immich täpse asukoha luba, et saaks lugeda aktiivse WiFi-võrgu nime",
|
||||||
"location_picker_choose_on_map": "Vali kaardil",
|
"location_picker_choose_on_map": "Vali kaardil",
|
||||||
@@ -1323,7 +1349,7 @@
|
|||||||
"marked_all_as_read": "Kõik märgiti loetuks",
|
"marked_all_as_read": "Kõik märgiti loetuks",
|
||||||
"matches": "Ühtivad failid",
|
"matches": "Ühtivad failid",
|
||||||
"matching_assets": "Ühtivad üksused",
|
"matching_assets": "Ühtivad üksused",
|
||||||
"media_type": "Meediumi tüüp",
|
"media_type": "Üksuse tüüp",
|
||||||
"memories": "Mälestused",
|
"memories": "Mälestused",
|
||||||
"memories_all_caught_up": "Ongi kõik",
|
"memories_all_caught_up": "Ongi kõik",
|
||||||
"memories_check_back_tomorrow": "Vaata homme juba uusi mälestusi",
|
"memories_check_back_tomorrow": "Vaata homme juba uusi mälestusi",
|
||||||
@@ -1343,6 +1369,8 @@
|
|||||||
"minute": "Minut",
|
"minute": "Minut",
|
||||||
"minutes": "Minutit",
|
"minutes": "Minutit",
|
||||||
"missing": "Puuduvad",
|
"missing": "Puuduvad",
|
||||||
|
"mobile_app": "Mobiilirakendus",
|
||||||
|
"mobile_app_download_onboarding_note": "Mobiilirakenduse allalaadimiseks kasuta järgnevaid valikuid",
|
||||||
"model": "Mudel",
|
"model": "Mudel",
|
||||||
"month": "Kuu",
|
"month": "Kuu",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
@@ -1361,6 +1389,8 @@
|
|||||||
"my_albums": "Minu albumid",
|
"my_albums": "Minu albumid",
|
||||||
"name": "Nimi",
|
"name": "Nimi",
|
||||||
"name_or_nickname": "Nimi või hüüdnimi",
|
"name_or_nickname": "Nimi või hüüdnimi",
|
||||||
|
"navigate": "Navigeeri",
|
||||||
|
"navigate_to_time": "Navigeeri aega",
|
||||||
"network_requirement_photos_upload": "Kasuta fotode varundamiseks mobiilset andmesidet",
|
"network_requirement_photos_upload": "Kasuta fotode varundamiseks mobiilset andmesidet",
|
||||||
"network_requirement_videos_upload": "Kasuta videote varundamiseks mobiilset andmesidet",
|
"network_requirement_videos_upload": "Kasuta videote varundamiseks mobiilset andmesidet",
|
||||||
"network_requirements": "Võrgu nõuded",
|
"network_requirements": "Võrgu nõuded",
|
||||||
@@ -1370,6 +1400,7 @@
|
|||||||
"never": "Mitte kunagi",
|
"never": "Mitte kunagi",
|
||||||
"new_album": "Uus album",
|
"new_album": "Uus album",
|
||||||
"new_api_key": "Uus API võti",
|
"new_api_key": "Uus API võti",
|
||||||
|
"new_date_range": "Uus kuupäevavahemik",
|
||||||
"new_password": "Uus parool",
|
"new_password": "Uus parool",
|
||||||
"new_person": "Uus isik",
|
"new_person": "Uus isik",
|
||||||
"new_pin_code": "Uus PIN-kood",
|
"new_pin_code": "Uus PIN-kood",
|
||||||
@@ -1406,6 +1437,7 @@
|
|||||||
"no_results_description": "Proovi sünonüümi või üldisemat märksõna",
|
"no_results_description": "Proovi sünonüümi või üldisemat märksõna",
|
||||||
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
|
"no_shared_albums_message": "Lisa album, et fotosid ja videosid teistega jagada",
|
||||||
"no_uploads_in_progress": "Üleslaadimisi käimas ei ole",
|
"no_uploads_in_progress": "Üleslaadimisi käimas ei ole",
|
||||||
|
"not_available": "Pole saadaval",
|
||||||
"not_in_any_album": "Pole üheski albumis",
|
"not_in_any_album": "Pole üheski albumis",
|
||||||
"not_selected": "Ei ole valitud",
|
"not_selected": "Ei ole valitud",
|
||||||
"note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
|
"note_apply_storage_label_to_previously_uploaded assets": "Märkus: Et rakendada talletussilt varem üleslaaditud üksustele, käivita",
|
||||||
@@ -1419,6 +1451,9 @@
|
|||||||
"notifications": "Teavitused",
|
"notifications": "Teavitused",
|
||||||
"notifications_setting_description": "Halda teavitusi",
|
"notifications_setting_description": "Halda teavitusi",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Obtainiumi seadistamine",
|
||||||
|
"obtainium_configurator_instructions": "Androidi rakenduse otse GitHub'ist paigaldamiseks ja uuendamiseks kasuta Obtainiumit. Seadistamise lingi loomiseks lisa API võti ja vali rakenduse variant",
|
||||||
|
"ocr": "OCR",
|
||||||
"official_immich_resources": "Ametlikud Immich'i ressursid",
|
"official_immich_resources": "Ametlikud Immich'i ressursid",
|
||||||
"offline": "Ühendus puudub",
|
"offline": "Ühendus puudub",
|
||||||
"offset": "Nihe",
|
"offset": "Nihe",
|
||||||
@@ -1523,6 +1558,9 @@
|
|||||||
"play_memories": "Esita mälestused",
|
"play_memories": "Esita mälestused",
|
||||||
"play_motion_photo": "Esita liikuv foto",
|
"play_motion_photo": "Esita liikuv foto",
|
||||||
"play_or_pause_video": "Esita või peata video",
|
"play_or_pause_video": "Esita või peata video",
|
||||||
|
"play_original_video": "Taasesita algne video",
|
||||||
|
"play_original_video_setting_description": "Eelista transkodeeritud video asemel algse video taasesitamist. Kui algne üksus ei ole ühilduv, võib taasesitamine ebaõnnestuda.",
|
||||||
|
"play_transcoded_video": "Taasesita transkodeeritud video",
|
||||||
"please_auth_to_access": "Ligipääsemiseks palun autendi",
|
"please_auth_to_access": "Ligipääsemiseks palun autendi",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preferences_settings_subtitle": "Halda rakenduse eelistusi",
|
"preferences_settings_subtitle": "Halda rakenduse eelistusi",
|
||||||
@@ -1540,13 +1578,9 @@
|
|||||||
"privacy": "Privaatsus",
|
"privacy": "Privaatsus",
|
||||||
"profile": "Profiil",
|
"profile": "Profiil",
|
||||||
"profile_drawer_app_logs": "Logid",
|
"profile_drawer_app_logs": "Logid",
|
||||||
"profile_drawer_client_out_of_date_major": "Mobiilirakendus on aegunud. Palun uuenda uusimale suurele versioonile.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Mobiilirakendus on aegunud. Palun uuenda uusimale väikesele versioonile.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Klient ja server on uuendatud",
|
"profile_drawer_client_server_up_to_date": "Klient ja server on uuendatud",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Kirjutuskaitserežiim sisse lülitatud. Väljumiseks puuduta pikalt avatari ikooni.",
|
"profile_drawer_readonly_mode": "Kirjutuskaitserežiim sisse lülitatud. Väljumiseks puuduta pikalt avatari ikooni.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server on aegunud. Palun uuenda uusimale suurele versioonile.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Server on aegunud. Palun uuenda uusimale väikesele versioonile.",
|
|
||||||
"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.",
|
||||||
"public_album": "Avalik album",
|
"public_album": "Avalik album",
|
||||||
@@ -1583,6 +1617,7 @@
|
|||||||
"purchase_server_description_2": "Toetaja staatus",
|
"purchase_server_description_2": "Toetaja staatus",
|
||||||
"purchase_server_title": "Server",
|
"purchase_server_title": "Server",
|
||||||
"purchase_settings_server_activated": "Serveri tootevõtit haldab administraator",
|
"purchase_settings_server_activated": "Serveri tootevõtit haldab administraator",
|
||||||
|
"query_asset_id": "Päringu üksuse ID",
|
||||||
"queue_status": "Järjekorras {count}/{total}",
|
"queue_status": "Järjekorras {count}/{total}",
|
||||||
"rating": "Hinnang",
|
"rating": "Hinnang",
|
||||||
"rating_clear": "Tühjenda hinnang",
|
"rating_clear": "Tühjenda hinnang",
|
||||||
@@ -1662,6 +1697,7 @@
|
|||||||
"reset_sqlite_confirmation": "Kas oled kindel, et soovid SQLite andmebaasi lähtestada? Andmete uuesti sünkroonimiseks pead välja ja jälle sisse logima",
|
"reset_sqlite_confirmation": "Kas oled kindel, et soovid SQLite andmebaasi lähtestada? Andmete uuesti sünkroonimiseks pead välja ja jälle sisse logima",
|
||||||
"reset_sqlite_success": "SQLite andmebaas edukalt lähtestatud",
|
"reset_sqlite_success": "SQLite andmebaas edukalt lähtestatud",
|
||||||
"reset_to_default": "Lähtesta",
|
"reset_to_default": "Lähtesta",
|
||||||
|
"resolution": "Resolutsioon",
|
||||||
"resolve_duplicates": "Lahenda duplikaadid",
|
"resolve_duplicates": "Lahenda duplikaadid",
|
||||||
"resolved_all_duplicates": "Kõik duplikaadid lahendatud",
|
"resolved_all_duplicates": "Kõik duplikaadid lahendatud",
|
||||||
"restore": "Taasta",
|
"restore": "Taasta",
|
||||||
@@ -1680,6 +1716,7 @@
|
|||||||
"running": "Käimas",
|
"running": "Käimas",
|
||||||
"save": "Salvesta",
|
"save": "Salvesta",
|
||||||
"save_to_gallery": "Salvesta galeriisse",
|
"save_to_gallery": "Salvesta galeriisse",
|
||||||
|
"saved": "Salvestatud",
|
||||||
"saved_api_key": "API võti salvestatud",
|
"saved_api_key": "API võti salvestatud",
|
||||||
"saved_profile": "Profiil salvestatud",
|
"saved_profile": "Profiil salvestatud",
|
||||||
"saved_settings": "Seaded salvestatud",
|
"saved_settings": "Seaded salvestatud",
|
||||||
@@ -1696,6 +1733,9 @@
|
|||||||
"search_by_description_example": "Matkapäev Sapas",
|
"search_by_description_example": "Matkapäev Sapas",
|
||||||
"search_by_filename": "Otsi failinime või -laiendi järgi",
|
"search_by_filename": "Otsi failinime või -laiendi järgi",
|
||||||
"search_by_filename_example": "st. IMG_1234.JPG või PNG",
|
"search_by_filename_example": "st. IMG_1234.JPG või PNG",
|
||||||
|
"search_by_ocr": "Otsi OCR-i abil",
|
||||||
|
"search_by_ocr_example": "Latte",
|
||||||
|
"search_camera_lens_model": "Otsi läätse mudelit...",
|
||||||
"search_camera_make": "Otsi kaamera marki...",
|
"search_camera_make": "Otsi kaamera marki...",
|
||||||
"search_camera_model": "Otsi kaamera mudelit...",
|
"search_camera_model": "Otsi kaamera mudelit...",
|
||||||
"search_city": "Otsi linna...",
|
"search_city": "Otsi linna...",
|
||||||
@@ -1710,8 +1750,9 @@
|
|||||||
"search_filter_filename": "Otsi failinime alusel",
|
"search_filter_filename": "Otsi failinime alusel",
|
||||||
"search_filter_location": "Asukoht",
|
"search_filter_location": "Asukoht",
|
||||||
"search_filter_location_title": "Vali asukoht",
|
"search_filter_location_title": "Vali asukoht",
|
||||||
"search_filter_media_type": "Meediumi tüüp",
|
"search_filter_media_type": "Üksuse tüüp",
|
||||||
"search_filter_media_type_title": "Vali meediumi tüüp",
|
"search_filter_media_type_title": "Vali üksuse tüüp",
|
||||||
|
"search_filter_ocr": "Otsi OCR-i abil",
|
||||||
"search_filter_people_title": "Vali isikud",
|
"search_filter_people_title": "Vali isikud",
|
||||||
"search_for": "Otsi",
|
"search_for": "Otsi",
|
||||||
"search_for_existing_person": "Otsi olemasolevat isikut",
|
"search_for_existing_person": "Otsi olemasolevat isikut",
|
||||||
@@ -1774,6 +1815,7 @@
|
|||||||
"server_online": "Server ühendatud",
|
"server_online": "Server ühendatud",
|
||||||
"server_privacy": "Serveri privaatsus",
|
"server_privacy": "Serveri privaatsus",
|
||||||
"server_stats": "Serveri statistika",
|
"server_stats": "Serveri statistika",
|
||||||
|
"server_update_available": "Serveri uuendus on saadaval",
|
||||||
"server_version": "Serveri versioon",
|
"server_version": "Serveri versioon",
|
||||||
"set": "Määra",
|
"set": "Määra",
|
||||||
"set_as_album_cover": "Sea albumi kaanepildiks",
|
"set_as_album_cover": "Sea albumi kaanepildiks",
|
||||||
@@ -1802,6 +1844,8 @@
|
|||||||
"setting_notifications_subtitle": "Halda oma teavituste eelistusi",
|
"setting_notifications_subtitle": "Halda oma teavituste eelistusi",
|
||||||
"setting_notifications_total_progress_subtitle": "Üldine üleslaadimise edenemine (üksuseid tehtud/kokku)",
|
"setting_notifications_total_progress_subtitle": "Üldine üleslaadimise edenemine (üksuseid tehtud/kokku)",
|
||||||
"setting_notifications_total_progress_title": "Kuva taustal varundamise üldist edenemist",
|
"setting_notifications_total_progress_title": "Kuva taustal varundamise üldist edenemist",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Alusta videote avamisel automaatselt taasesitust",
|
||||||
|
"setting_video_viewer_auto_play_title": "Esita videod automaatselt",
|
||||||
"setting_video_viewer_looping_title": "Taasesitus",
|
"setting_video_viewer_looping_title": "Taasesitus",
|
||||||
"setting_video_viewer_original_video_subtitle": "Esita serverist video voogedastamisel originaal, isegi kui transkodeeritud video on saadaval. Võib põhjustada puhverdamist. Lokaalselt saadaolevad videod mängitakse originaalkvaliteediga sõltumata sellest seadest.",
|
"setting_video_viewer_original_video_subtitle": "Esita serverist video voogedastamisel originaal, isegi kui transkodeeritud video on saadaval. Võib põhjustada puhverdamist. Lokaalselt saadaolevad videod mängitakse originaalkvaliteediga sõltumata sellest seadest.",
|
||||||
"setting_video_viewer_original_video_title": "Sunni originaalvideo",
|
"setting_video_viewer_original_video_title": "Sunni originaalvideo",
|
||||||
@@ -1981,6 +2025,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Luba kolmeastmeline laadimine",
|
"theme_setting_three_stage_loading_title": "Luba kolmeastmeline laadimine",
|
||||||
"they_will_be_merged_together": "Nad ühendatakse kokku",
|
"they_will_be_merged_together": "Nad ühendatakse kokku",
|
||||||
"third_party_resources": "Kolmanda osapoole ressursid",
|
"third_party_resources": "Kolmanda osapoole ressursid",
|
||||||
|
"time": "Aeg",
|
||||||
"time_based_memories": "Ajapõhised mälestused",
|
"time_based_memories": "Ajapõhised mälestused",
|
||||||
"timeline": "Ajajoon",
|
"timeline": "Ajajoon",
|
||||||
"timezone": "Ajavöönd",
|
"timezone": "Ajavöönd",
|
||||||
@@ -2013,6 +2058,7 @@
|
|||||||
"troubleshoot": "Tõrkeotsing",
|
"troubleshoot": "Tõrkeotsing",
|
||||||
"type": "Tüüp",
|
"type": "Tüüp",
|
||||||
"unable_to_change_pin_code": "PIN-koodi muutmine ebaõnnestus",
|
"unable_to_change_pin_code": "PIN-koodi muutmine ebaõnnestus",
|
||||||
|
"unable_to_check_version": "Rakenduse või serveri versiooni kontrollimine ebaõnnestus",
|
||||||
"unable_to_setup_pin_code": "PIN-koodi seadistamine ebaõnnestus",
|
"unable_to_setup_pin_code": "PIN-koodi seadistamine ebaõnnestus",
|
||||||
"unarchive": "Taasta arhiivist",
|
"unarchive": "Taasta arhiivist",
|
||||||
"unarchive_action_prompt": "{count} eemaldatud arhiivist",
|
"unarchive_action_prompt": "{count} eemaldatud arhiivist",
|
||||||
|
|||||||
@@ -58,6 +58,7 @@
|
|||||||
"image_format_description": "WebP ereduak JPEG baino fitxategi txikiagoak sortzen ditu, baina motelagoa da kodifikatzen.",
|
"image_format_description": "WebP ereduak JPEG baino fitxategi txikiagoak sortzen ditu, baina motelagoa da kodifikatzen.",
|
||||||
"image_preview_title": "Aurreikusiaen Konfigurazioa",
|
"image_preview_title": "Aurreikusiaen Konfigurazioa",
|
||||||
"image_quality": "Kalitatea",
|
"image_quality": "Kalitatea",
|
||||||
|
"image_resolution": "Erresoluzioa",
|
||||||
"image_settings": "Argazkien Konfigurazioa",
|
"image_settings": "Argazkien Konfigurazioa",
|
||||||
"image_thumbnail_title": "Argazki Txikien Konfigurazioa",
|
"image_thumbnail_title": "Argazki Txikien Konfigurazioa",
|
||||||
"job_created": "Zeregina sortuta",
|
"job_created": "Zeregina sortuta",
|
||||||
@@ -81,8 +82,11 @@
|
|||||||
"metadata_faces_import_setting": "Gaitu aurpegien inportazioa",
|
"metadata_faces_import_setting": "Gaitu aurpegien inportazioa",
|
||||||
"metadata_settings": "Metadata Konfigurazioa",
|
"metadata_settings": "Metadata Konfigurazioa",
|
||||||
"metadata_settings_description": "Kudeatu metadaten konfigurazioa",
|
"metadata_settings_description": "Kudeatu metadaten konfigurazioa",
|
||||||
"migration_job": "Migrazio"
|
"migration_job": "Migrazio",
|
||||||
|
"oauth_settings": "OAuth",
|
||||||
|
"transcoding_acceleration_vaapi": "VAAPI"
|
||||||
},
|
},
|
||||||
|
"advanced": "Aurreratua",
|
||||||
"advanced_settings_readonly_mode_title": "Irakurri-bakarrik Modua",
|
"advanced_settings_readonly_mode_title": "Irakurri-bakarrik Modua",
|
||||||
"apply_count": "Ezarri ({count, number})",
|
"apply_count": "Ezarri ({count, number})",
|
||||||
"assets_added_to_albums_count": "Gehituta {assetTotal, plural, one {# asset} other {# assets}} to {albumTotal, plural, one {# album} other {# albums}}",
|
"assets_added_to_albums_count": "Gehituta {assetTotal, plural, one {# asset} other {# assets}} to {albumTotal, plural, one {# album} other {# albums}}",
|
||||||
|
|||||||
14
i18n/fa.json
14
i18n/fa.json
@@ -44,6 +44,7 @@
|
|||||||
"confirm_email_below": "برای تأیید، \"{email}\" را در زیر تایپ کنید",
|
"confirm_email_below": "برای تأیید، \"{email}\" را در زیر تایپ کنید",
|
||||||
"confirm_reprocess_all_faces": "آیا مطمئن هستید که میخواهید تمام چهرهها را مجددا پردازش کنید؟ این عمل باعث پاک شدن افراد مشخص شده نیز خواهد شد.",
|
"confirm_reprocess_all_faces": "آیا مطمئن هستید که میخواهید تمام چهرهها را مجددا پردازش کنید؟ این عمل باعث پاک شدن افراد مشخص شده نیز خواهد شد.",
|
||||||
"confirm_user_password_reset": "آیا مطمئن هستید که میخواهید رمز عبور {user} را بازنشانی کنید؟",
|
"confirm_user_password_reset": "آیا مطمئن هستید که میخواهید رمز عبور {user} را بازنشانی کنید؟",
|
||||||
|
"confirm_user_pin_code_reset": "آیا مطمئن هستید که میخواهید کد PIN {user} را بازنشانی کنید؟",
|
||||||
"disable_login": "غیرفعال کردن ورود",
|
"disable_login": "غیرفعال کردن ورود",
|
||||||
"duplicate_detection_job_description": "اجرای یادگیری ماشین بر روی فایلها برای شناسایی تصاویر مشابه. این وابسته به جستجوی هوشمند است",
|
"duplicate_detection_job_description": "اجرای یادگیری ماشین بر روی فایلها برای شناسایی تصاویر مشابه. این وابسته به جستجوی هوشمند است",
|
||||||
"exclusion_pattern_description": "الگوهای استثنا به شما امکان میدهد هنگام اسکن کتابخانه خود فایلها و پوشهها را نادیده بگیرید . این مفید است اگر پوشههایی دارید که فایلهایی را شامل میشوند که نمیخواهید وارد کنید، مانند فایلهای RAW.",
|
"exclusion_pattern_description": "الگوهای استثنا به شما امکان میدهد هنگام اسکن کتابخانه خود فایلها و پوشهها را نادیده بگیرید . این مفید است اگر پوشههایی دارید که فایلهایی را شامل میشوند که نمیخواهید وارد کنید، مانند فایلهای RAW.",
|
||||||
@@ -54,11 +55,21 @@
|
|||||||
"failed_job_command": "دستور {command} برای کار: {job} ناموفق بود",
|
"failed_job_command": "دستور {command} برای کار: {job} ناموفق بود",
|
||||||
"force_delete_user_warning": "هشدار: این عمل باعث حذف فوری کاربر و تمام فایلها میشود. این عمل قابل بازگشت نیست و فایلها قابل بازیابی نیستند.",
|
"force_delete_user_warning": "هشدار: این عمل باعث حذف فوری کاربر و تمام فایلها میشود. این عمل قابل بازگشت نیست و فایلها قابل بازیابی نیستند.",
|
||||||
"image_format_description": "فرمت WebP فایلهای کوچکتری نسبت به JPEG ایجاد میکند، اما زمان کدگذاری آن کندتر است.",
|
"image_format_description": "فرمت WebP فایلهای کوچکتری نسبت به JPEG ایجاد میکند، اما زمان کدگذاری آن کندتر است.",
|
||||||
|
"image_fullsize_description": "تصویر با اندازه کامل و بدون فراداده، مورد استفاده هنگام بزرگنمایی",
|
||||||
|
"image_fullsize_enabled": "فعالسازی تولید تصویر با اندازه کامل",
|
||||||
|
"image_fullsize_enabled_description": "تولید تصویر با اندازه کامل برای فرمتهای غیرسازگار با وب. هنگامی که گزینه «استفاده از پیشنمایش تعبیهشده» فعال باشد، پیشنمایشهای تعبیهشده مستقیماً بدون تبدیل استفاده میشوند. این تنظیم بر فرمتهای سازگار با وب مانند JPEG تأثیری ندارد.",
|
||||||
|
"image_fullsize_quality_description": "کیفیت تصویر با اندازه کامل از ۱ تا ۱۰۰. هرچه بالاتر باشد، کیفیت بهتر است، اما فایلهای بزرگتری ایجاد میکند.",
|
||||||
|
"image_fullsize_title": "تنظیمات تصویر با اندازه کامل",
|
||||||
"image_prefer_embedded_preview": "ترجیحات پیشنمایش تعبیهشده",
|
"image_prefer_embedded_preview": "ترجیحات پیشنمایش تعبیهشده",
|
||||||
"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_quality_description": "کیفیت پیشنمایش از ۱ تا ۱۰۰. هرچه بالاتر باشد، کیفیت بهتر است، اما فایلهای بزرگتری ایجاد میکند و ممکن است پاسخگویی برنامه کاهش یابد. تنظیم مقدار پایین میتواند بر کیفیت یادگیری ماشین تأثیر بگذارد.",
|
||||||
|
"image_preview_title": "تنظیمات پیشنمایش",
|
||||||
"image_quality": "کیفیت",
|
"image_quality": "کیفیت",
|
||||||
|
"image_resolution": "وضوح تصویر",
|
||||||
|
"image_resolution_description": "وضوح بالاتر میتواند جزئیات بیشتری را حفظ کند، اما تبدیل آن زمان بیشتری میبرد، حجم فایلها را افزایش میدهد و ممکن است پاسخگویی برنامه را کاهش دهد.",
|
||||||
"image_settings": "تنظیمات عکس",
|
"image_settings": "تنظیمات عکس",
|
||||||
"image_settings_description": "مدیریت کیفیت و وضوح تصاویر تولید شده",
|
"image_settings_description": "مدیریت کیفیت و وضوح تصاویر تولید شده",
|
||||||
"job_concurrency": "همزمانی {job}",
|
"job_concurrency": "همزمانی {job}",
|
||||||
@@ -412,7 +423,6 @@
|
|||||||
"edit_people": "ویرایش افراد",
|
"edit_people": "ویرایش افراد",
|
||||||
"edit_title": "ویرایش عنوان",
|
"edit_title": "ویرایش عنوان",
|
||||||
"edit_user": "ویرایش کاربر",
|
"edit_user": "ویرایش کاربر",
|
||||||
"edited": "ویرایش شد",
|
|
||||||
"editor": "ویرایشگر",
|
"editor": "ویرایشگر",
|
||||||
"email": "ایمیل",
|
"email": "ایمیل",
|
||||||
"empty_trash": "خالی کردن سطل زباله",
|
"empty_trash": "خالی کردن سطل زباله",
|
||||||
|
|||||||
191
i18n/fi.json
191
i18n/fi.json
@@ -28,10 +28,12 @@
|
|||||||
"add_to_album": "Lisää albumiin",
|
"add_to_album": "Lisää albumiin",
|
||||||
"add_to_album_bottom_sheet_added": "Lisätty albumiin {album}",
|
"add_to_album_bottom_sheet_added": "Lisätty albumiin {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}",
|
"add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}",
|
||||||
|
"add_to_album_bottom_sheet_some_local_assets": "Joitakin osia paikallisesta sisällöstä ei pystytty lisäämään albumiin",
|
||||||
"add_to_album_toggle": "Vaihda albumin {album} valintaa",
|
"add_to_album_toggle": "Vaihda albumin {album} valintaa",
|
||||||
"add_to_albums": "Lisää albumeihin",
|
"add_to_albums": "Lisää albumeihin",
|
||||||
"add_to_albums_count": "Lisää albumeihin ({count})",
|
"add_to_albums_count": "Lisää albumeihin ({count})",
|
||||||
"add_to_shared_album": "Lisää jaettuun albumiin",
|
"add_to_shared_album": "Lisää jaettuun albumiin",
|
||||||
|
"add_upload_to_stack": "Lisää kuvapinoon",
|
||||||
"add_url": "Lisää URL",
|
"add_url": "Lisää URL",
|
||||||
"added_to_archive": "Lisätty arkistoon",
|
"added_to_archive": "Lisätty arkistoon",
|
||||||
"added_to_favorites": "Lisätty suosikkeihin",
|
"added_to_favorites": "Lisätty suosikkeihin",
|
||||||
@@ -39,7 +41,7 @@
|
|||||||
"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/**\".",
|
||||||
"admin_user": "Ylläpitäjä",
|
"admin_user": "Ylläpitäjä",
|
||||||
"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.",
|
"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. Palauttaaksesi 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.",
|
||||||
@@ -149,9 +151,21 @@
|
|||||||
"machine_learning_max_recognition_distance": "Suurin kasvojen eroavaisuus",
|
"machine_learning_max_recognition_distance": "Suurin kasvojen eroavaisuus",
|
||||||
"machine_learning_max_recognition_distance_description": "Kahden kasvon suurin eroavaisuus, milloin ne vielä mielletään samaksi henkilöksi, välillä 0-2. Arvoa alentamalla voidaan ehkäistä kahden saman näköisen henkilön mieltäminen samaksi henkilöksi, kun taas korottamalla voidaan ehkäistä saman henkilön mieltäminen kahdeksi erilliseksi henkilöksi. Huomaa että on helpompaa yhdistää kaksi, kuin erottaa, joten suosi mahdollisimman matalaa arvoa.",
|
"machine_learning_max_recognition_distance_description": "Kahden kasvon suurin eroavaisuus, milloin ne vielä mielletään samaksi henkilöksi, välillä 0-2. Arvoa alentamalla voidaan ehkäistä kahden saman näköisen henkilön mieltäminen samaksi henkilöksi, kun taas korottamalla voidaan ehkäistä saman henkilön mieltäminen kahdeksi erilliseksi henkilöksi. Huomaa että on helpompaa yhdistää kaksi, kuin erottaa, joten suosi mahdollisimman matalaa arvoa.",
|
||||||
"machine_learning_min_detection_score": "Tunnistuksen vähimmäistulos",
|
"machine_learning_min_detection_score": "Tunnistuksen vähimmäistulos",
|
||||||
"machine_learning_min_detection_score_description": "Pienin kasvojen tunnistamisessa saatu vahvuusarvo välillä 0-1. Matalammalla arvolla havaitaan enemmän kascoja, mutta voi lisätä virhearvioiden määrää.",
|
"machine_learning_min_detection_score_description": "Pienin kasvojen tunnistamisessa saatu vahvuusarvo välillä 0-1. Matalammalla arvolla havaitaan enemmän kasvoja, mutta voi lisätä virhearvioiden määrää.",
|
||||||
"machine_learning_min_recognized_faces": "Tunnistettujen kasvojen vähimmäismäärä",
|
"machine_learning_min_recognized_faces": "Tunnistettujen kasvojen vähimmäismäärä",
|
||||||
"machine_learning_min_recognized_faces_description": "Luotavan käyttäjän kasvojen vähimmäismäärä. Arvoa nostamalla kasvojentunnistuksen tarkkuus paranee, mutta todennäköisyys sille, että kasvoja ei osata yhdistää henkilöön kasvaa.",
|
"machine_learning_min_recognized_faces_description": "Luotavan käyttäjän kasvojen vähimmäismäärä. Arvoa nostamalla kasvojentunnistuksen tarkkuus paranee, mutta todennäköisyys sille, että kasvoja ei osata yhdistää henkilöön kasvaa.",
|
||||||
|
"machine_learning_ocr": "Tekstintunnistus (OCR)",
|
||||||
|
"machine_learning_ocr_description": "Käytä koneoppimista tekstin tunnistamiseen kuvista",
|
||||||
|
"machine_learning_ocr_enabled": "Aktivoi OCR",
|
||||||
|
"machine_learning_ocr_enabled_description": "Jos asetus on pois päältä, kuvia ei prosessoida tekstin tunnistamiseksi.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Maksimiresoluutio",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Tätä suuremmat esikatselukuvat tullaan pienentämään samassa kuvasuhteessa. Suuremmat arvot ovat tarkempia, mutta kestävät pidempään prosessoida ja käyttävät enemmän muistia.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Pienin paikannuksen pistemäärä",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Pienin arvo tekstin paikannukselle varmuudelle välillä 0-1. Pienemmät arvot paikantavat enemmän tekstiä, mutta saattavat johtaa useampaan väärään positiiviseen.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Pienin tunnistuksen pistemäärä",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Pienin arvo tekstin tunnistuksen varmuudelle välillä 0-1. Pienemmät arvot tunnistavat enemmän tekstiä, mutta saattavat johtaa useampaan väärään positiiviseen.",
|
||||||
|
"machine_learning_ocr_model": "OCR-malli",
|
||||||
|
"machine_learning_ocr_model_description": "Palvelinmallit ovat tarkempia kuin mobiilimallit, mutta prosessointi kestää pidempään ja käyttää enemmän muistia.",
|
||||||
"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ä",
|
||||||
@@ -183,7 +197,7 @@
|
|||||||
"metadata_settings": "Metatietoasetukset",
|
"metadata_settings": "Metatietoasetukset",
|
||||||
"metadata_settings_description": "Hallitse metatietoja",
|
"metadata_settings_description": "Hallitse metatietoja",
|
||||||
"migration_job": "Migraatio",
|
"migration_job": "Migraatio",
|
||||||
"migration_job_description": "Migroi aineiston pikkukuvat ja kasvot uusimpaan kansiorakenteeseen",
|
"migration_job_description": "Migratoi aineiston pikkukuvat ja kasvot uusimpaan kansiorakenteeseen",
|
||||||
"nightly_tasks_cluster_faces_setting_description": "Aja kasvojen tunnistus uusiin tunnistettuihin kasvoihin",
|
"nightly_tasks_cluster_faces_setting_description": "Aja kasvojen tunnistus uusiin tunnistettuihin kasvoihin",
|
||||||
"nightly_tasks_cluster_new_faces_setting": "Kokoa uudet kasvot",
|
"nightly_tasks_cluster_new_faces_setting": "Kokoa uudet kasvot",
|
||||||
"nightly_tasks_database_cleanup_setting": "Tietokannan puhdistuksen tehtävät",
|
"nightly_tasks_database_cleanup_setting": "Tietokannan puhdistuksen tehtävät",
|
||||||
@@ -203,12 +217,14 @@
|
|||||||
"note_apply_storage_label_previous_assets": "Huom: Asettaaksesi nimikkeen aiemmin ladatulle aineistolle, aja",
|
"note_apply_storage_label_previous_assets": "Huom: Asettaaksesi nimikkeen aiemmin ladatulle aineistolle, aja",
|
||||||
"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!",
|
||||||
"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>\". Varmista, että käytetystä osoiteesta on lupa lähettää sähköposteja.",
|
"notification_email_from_address_description": "Lähettäjän sähköpostiosoite. Esimerkiksi \"Immich-kuvapalvelin <noreply@example.com>\". Varmista, että käytetystä osoitteesta on lupa lähettää sähköposteja.",
|
||||||
"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 varmennevirheitä",
|
"notification_email_ignore_certificate_errors": "Älä huomioi varmennevirheitä",
|
||||||
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS-varmenteiden 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_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Käytä SMTPS:ää (SMTP over TLS)",
|
||||||
"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",
|
||||||
"notification_email_setting_description": "Sähköposti-ilmoitusten asetukset",
|
"notification_email_setting_description": "Sähköposti-ilmoitusten asetukset",
|
||||||
"notification_email_test_email": "Lähetä testisähköposti",
|
"notification_email_test_email": "Lähetä testisähköposti",
|
||||||
@@ -225,9 +241,9 @@
|
|||||||
"oauth_button_text": "Painikkeen teksti",
|
"oauth_button_text": "Painikkeen teksti",
|
||||||
"oauth_client_secret_description": "Vaaditaan, jos OAuth-palveluntarjoaja ei tue PKCE:tä (Proof Key for Code Exchange)",
|
"oauth_client_secret_description": "Vaaditaan, jos OAuth-palveluntarjoaja ei tue PKCE:tä (Proof Key for Code Exchange)",
|
||||||
"oauth_enable_description": "Kirjaudu käyttäen OAuthia",
|
"oauth_enable_description": "Kirjaudu käyttäen OAuthia",
|
||||||
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI",
|
"oauth_mobile_redirect_uri": "Mobiilin uudelleenohjaus-URI",
|
||||||
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
|
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
|
||||||
"oauth_mobile_redirect_uri_override_description": "Ota käyttöön kun OAuth tarjoaja ei salli mobiili URI:a, kuten ''{callback}''",
|
"oauth_mobile_redirect_uri_override_description": "Ota käyttöön kun OAuth-tarjoaja ei salli mobiili-URI:a, kuten ''{callback}''",
|
||||||
"oauth_role_claim": "Roolin vaatimus",
|
"oauth_role_claim": "Roolin vaatimus",
|
||||||
"oauth_role_claim_description": "Salli pääkäyttäjän pääsyoikeus automaattisesti tämän vaatimuksen perusteella. Vaatimus voi sisältää, joko 'käyttäjän' tai 'pääkäyttäjän'.",
|
"oauth_role_claim_description": "Salli pääkäyttäjän pääsyoikeus automaattisesti tämän vaatimuksen perusteella. Vaatimus voi sisältää, joko 'käyttäjän' tai 'pääkäyttäjän'.",
|
||||||
"oauth_settings": "OAuth",
|
"oauth_settings": "OAuth",
|
||||||
@@ -241,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Käytettävä kiintiön määrä gigatavuissa, kun väittämää ei ole annettu.",
|
"oauth_storage_quota_default_description": "Käytettävä kiintiön määrä gigatavuissa, kun väittämää ei ole annettu.",
|
||||||
"oauth_timeout": "Pyynnön aikakatkaisu",
|
"oauth_timeout": "Pyynnön aikakatkaisu",
|
||||||
"oauth_timeout_description": "Pyyntöjen aikakatkaisu millisekunteina",
|
"oauth_timeout_description": "Pyyntöjen aikakatkaisu millisekunteina",
|
||||||
|
"ocr_job_description": "Käytä koneoppimista tunnistamaan tekstiä kuvista",
|
||||||
"password_enable_description": "Kirjaudu käyttäen sähköpostiosoitetta ja salasanaa",
|
"password_enable_description": "Kirjaudu käyttäen sähköpostiosoitetta ja salasanaa",
|
||||||
"password_settings": "Kirjaudu salasanalla",
|
"password_settings": "Kirjaudu salasanalla",
|
||||||
"password_settings_description": "Hallitse salasanakirjautumisen asetuksia",
|
"password_settings_description": "Hallitse salasanakirjautumisen asetuksia",
|
||||||
@@ -278,7 +295,7 @@
|
|||||||
"storage_template_migration_info": "Tallennusmalli muuntaa kaikki tiedostopäätteet pieniksi kirjaimiksi. Mallipohjan muutokset koskevat vain uusia resursseja. Jos haluat käyttää mallipohjaa takautuvasti aiemmin ladattuihin resursseihin, suorita <link>{job}</link>.",
|
"storage_template_migration_info": "Tallennusmalli muuntaa kaikki tiedostopäätteet pieniksi kirjaimiksi. Mallipohjan muutokset koskevat vain uusia resursseja. Jos haluat käyttää mallipohjaa takautuvasti aiemmin ladattuihin resursseihin, suorita <link>{job}</link>.",
|
||||||
"storage_template_migration_job": "Tallennustilan mallin muutostyö",
|
"storage_template_migration_job": "Tallennustilan mallin muutostyö",
|
||||||
"storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>",
|
"storage_template_more_details": "Saadaksesi lisätietoa tästä ominaisuudesta, katso <template-link>Tallennustilan Mallit</template-link> sekä <implications-link>mihin se vaikuttaa</implications-link>",
|
||||||
"storage_template_onboarding_description_v2": "Päälle kytkettynä, toiminto järjestestelee tiedostot automaattisesti käyttäjän määrittämän mallin mukaisesti. Lisätietoja <link>dokumentaatiosta</link>..",
|
"storage_template_onboarding_description_v2": "Päälle kytkettynä toiminto järjestelee tiedostot automaattisesti käyttäjän määrittämän mallin mukaisesti. Lisätietoja <link>dokumentaatiosta</link>..",
|
||||||
"storage_template_path_length": "Arvioitu tiedostopolun pituusrajoitus: <b>{length, number}</b>/{limit, number}",
|
"storage_template_path_length": "Arvioitu tiedostopolun pituusrajoitus: <b>{length, number}</b>/{limit, number}",
|
||||||
"storage_template_settings": "Tallennustilan malli",
|
"storage_template_settings": "Tallennustilan malli",
|
||||||
"storage_template_settings_description": "Hallitse palvelimelle ladatun aineiston kansiorakennetta ja tiedostonimiä",
|
"storage_template_settings_description": "Hallitse palvelimelle ladatun aineiston kansiorakennetta ja tiedostonimiä",
|
||||||
@@ -301,17 +318,17 @@
|
|||||||
"thumbnail_generation_job": "Luo pikkukuvat",
|
"thumbnail_generation_job": "Luo pikkukuvat",
|
||||||
"thumbnail_generation_job_description": "Generoi isot, pienet sekä sumeat pikkukuvat jokaisesta aineistosta, kuten myös henkilöistä",
|
"thumbnail_generation_job_description": "Generoi isot, pienet sekä sumeat pikkukuvat jokaisesta aineistosta, kuten myös henkilöistä",
|
||||||
"transcoding_acceleration_api": "Kiihdytysrajapinta",
|
"transcoding_acceleration_api": "Kiihdytysrajapinta",
|
||||||
"transcoding_acceleration_api_description": "Rajapinta, jolla keskustellaan laittesi kanssa nopeuttaaksemme koodausta. Tämä asetus on paras mahdollinen: Mikäli ongelmia ilmenee, palataan käyttämään ohjelmistopohjaista koodausta. VP9 voi toimia tai ei, riippuen laitteistosi kokoonpanosta.",
|
"transcoding_acceleration_api_description": "Rajapinta, jolla keskustellaan laitteesi kanssa nopeuttaaksemme koodausta. Tämä asetus on paras mahdollinen: Mikäli ongelmia ilmenee, palataan käyttämään ohjelmistopohjaista koodausta. VP9 voi toimia tai ei, riippuen laitteistosi kokoonpanosta.",
|
||||||
"transcoding_acceleration_nvenc": "NVENC (vaatii NVIDIA:n grafiikkasuorittimen)",
|
"transcoding_acceleration_nvenc": "NVENC (vaatii NVIDIA:n grafiikkasuorittimen)",
|
||||||
"transcoding_acceleration_qsv": "Quick Sync (Vaatii vähintään gen7 Intel prosessorin)",
|
"transcoding_acceleration_qsv": "Quick Sync (Vaatii vähintään gen7 Intel prosessorin)",
|
||||||
"transcoding_acceleration_rkmpp": "RKMPP (vain Rockchip SOCt)",
|
"transcoding_acceleration_rkmpp": "RKMPP (vain Rockchip SOCt)",
|
||||||
"transcoding_acceleration_vaapi": "VAAPI",
|
"transcoding_acceleration_vaapi": "VAAPI",
|
||||||
"transcoding_accepted_audio_codecs": "Sallitut äänikoodekit",
|
"transcoding_accepted_audio_codecs": "Sallitut äänikoodekit",
|
||||||
"transcoding_accepted_audio_codecs_description": "Valitse mitä äänikoodekkeja ei tarvitse muuntaa. Käytetään vain tiettyjen koodauskäytäntöjen kanssa.",
|
"transcoding_accepted_audio_codecs_description": "Valitse, mitä äänikoodekkeja ei tarvitse muuntaa. Käytetään vain tiettyjen koodauskäytäntöjen kanssa.",
|
||||||
"transcoding_accepted_containers": "Hyväksytyt kontit",
|
"transcoding_accepted_containers": "Sallitut säiliömuodot",
|
||||||
"transcoding_accepted_containers_description": "Valitse, mitä formaatteja ei tarvitse kääntää MP4- muotoon. Käytössä vain tietyille muunnos säännöille.",
|
"transcoding_accepted_containers_description": "Valitse, mitä säiliömuotoja ei tarvitse muuntaa MP4-muotoon. Käytetään vain tiettyjen koodauskäytäntöjen kanssa.",
|
||||||
"transcoding_accepted_video_codecs": "Sallitut videokoodekit",
|
"transcoding_accepted_video_codecs": "Sallitut videokoodekit",
|
||||||
"transcoding_accepted_video_codecs_description": "Valitse mitä videokoodekkeja ei tarvitse muuntaa. Käytetään vain tiettyjen koodauskäytäntöjen kanssa.",
|
"transcoding_accepted_video_codecs_description": "Valitse, mitä videokoodekkeja ei tarvitse muuntaa. Käytetään vain tiettyjen koodauskäytäntöjen kanssa.",
|
||||||
"transcoding_advanced_options_description": "Asetukset, joita useimpien käyttäjien ei tulisi muuttaa",
|
"transcoding_advanced_options_description": "Asetukset, joita useimpien käyttäjien ei tulisi muuttaa",
|
||||||
"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.",
|
||||||
@@ -331,14 +348,14 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Suurin bittinopeus",
|
"transcoding_max_bitrate": "Suurin bittinopeus",
|
||||||
"transcoding_max_bitrate_description": "Suurimman sallitun bittinopeuden asettaminen tekee tiedostojen koosta ennustettavampaa vaikka laatu voi hieman heiketä. 720p videossa tyypilliset arvot ovat 2600 kbit/s VP9:lle ja HEVC:lle, tai 4500 kbit/s H.254:lle. Jos 0, ei käytössä.",
|
"transcoding_max_bitrate_description": "Suurimman sallitun bittinopeuden asettaminen tekee tiedostojen koosta ennustettavampaa vaikka laatu voi hieman heiketä. 720p videossa tyypilliset arvot ovat 2600 kbit/s VP9:lle ja HEVC:lle, tai 4500 kbit/s H.254:lle. Jos 0, ei käytössä. Jos yksikköä ei ole annettu, oletus on k (kbit/s). Eli 5000, 5000k ja 5M ovat yhtä suuria.",
|
||||||
"transcoding_max_keyframe_interval": "Suurin avainkehysten väli",
|
"transcoding_max_keyframe_interval": "Suurin avainkehysten väli",
|
||||||
"transcoding_max_keyframe_interval_description": "Asettaa avainkehysten välin maksimiarvon. Alempi arvo huonontaa pakkauksen tehoa, mutta parantaa hakuaikoja ja voi parantaa laatua nopealiikkeisissä kohtauksissa. 0 asettaa arvon automaattisesti.",
|
"transcoding_max_keyframe_interval_description": "Asettaa avainkehysten välin maksimiarvon. Alempi arvo huonontaa pakkauksen tehoa, mutta parantaa hakuaikoja ja voi parantaa laatua nopealiikkeisissä kohtauksissa. 0 asettaa arvon automaattisesti.",
|
||||||
"transcoding_optimal_description": "Videot, joiden resoluutio on korkeampi kuin kohteen, tai ei hyväksytyssä formaatissa",
|
"transcoding_optimal_description": "Videot, joiden resoluutio on korkeampi kuin kohteen, tai ei hyväksytyssä formaatissa",
|
||||||
"transcoding_policy": "Transkoodauskäytäntö",
|
"transcoding_policy": "Transkoodauskäytäntö",
|
||||||
"transcoding_policy_description": "Aseta milloin video transkoodataan",
|
"transcoding_policy_description": "Aseta milloin video transkoodataan",
|
||||||
"transcoding_preferred_hardware_device": "Ensisijainen laite",
|
"transcoding_preferred_hardware_device": "Ensisijainen laite",
|
||||||
"transcoding_preferred_hardware_device_description": "On voimassa vain VAAPI ja QSV -määritteille. Asettaa laitteistokoodauksessa käytetyn DRI noodin.",
|
"transcoding_preferred_hardware_device_description": "On voimassa vain VAAPI- ja QSV-määritteille. Asettaa laitteistokoodauksessa käytetyn DRI-noodin.",
|
||||||
"transcoding_preset_preset": "Esiasetus (-asetus)",
|
"transcoding_preset_preset": "Esiasetus (-asetus)",
|
||||||
"transcoding_preset_preset_description": "Pakkausnopeus. Hitaampi tuottaa pienempiä tiedostoja ja parantaa laatua, kun kohdistetaan tiettyyn bittinopeuteen. VP9 ei huomioi korkeampaa kuin 'faster'.",
|
"transcoding_preset_preset_description": "Pakkausnopeus. Hitaampi tuottaa pienempiä tiedostoja ja parantaa laatua, kun kohdistetaan tiettyyn bittinopeuteen. VP9 ei huomioi korkeampaa kuin 'faster'.",
|
||||||
"transcoding_reference_frames": "Kehysviitteet",
|
"transcoding_reference_frames": "Kehysviitteet",
|
||||||
@@ -349,13 +366,13 @@
|
|||||||
"transcoding_target_resolution": "Kohderesoluutio",
|
"transcoding_target_resolution": "Kohderesoluutio",
|
||||||
"transcoding_target_resolution_description": "Korkeampi resoluutio on tarkempi, mutta kestää kauemmin enkoodata, vie enemmän tilaa ja voi hidastaa sovelluksen responsiivisuutta.",
|
"transcoding_target_resolution_description": "Korkeampi resoluutio on tarkempi, mutta kestää kauemmin enkoodata, vie enemmän tilaa ja voi hidastaa sovelluksen responsiivisuutta.",
|
||||||
"transcoding_temporal_aq": "Väliaikainen AQ",
|
"transcoding_temporal_aq": "Väliaikainen AQ",
|
||||||
"transcoding_temporal_aq_description": "Vaikuttaa vain NVENC:lle. Parantaa laatua kohtauksissa, joissa on paljon yksityiskohtia ja vähän liikettä. Ei välttämättä ole yhteensopiva vanhempien laitteiden kanssa.",
|
"transcoding_temporal_aq_description": "Vaikuttaa vain NVENC:lle. Aikaperusteinen adaptiivinen kvantisointi parantaa laatua kohtauksissa, joissa on paljon yksityiskohtia ja vähän liikettä. Ei välttämättä ole yhteensopiva vanhempien laitteiden kanssa.",
|
||||||
"transcoding_threads": "Säikeet",
|
"transcoding_threads": "Säikeet",
|
||||||
"transcoding_threads_description": "Korkeampi arvo nopeuttaa enkoodausta, mutta vie tilaa palvelimen muilta tehtäviltä. Tämä arvo ei tulisi olla suurempi mitä suorittimen ytimien määrä. Suurin mahdollinen käyttö, mikäli arvo on 0.",
|
"transcoding_threads_description": "Korkeampi arvo nopeuttaa enkoodausta, mutta vie tilaa palvelimen muilta tehtäviltä. Tämä arvo ei tulisi olla suurempi mitä suorittimen ytimien määrä. Suurin mahdollinen käyttö, mikäli arvo on 0.",
|
||||||
"transcoding_tone_mapping": "Sävykartoitus",
|
"transcoding_tone_mapping": "Sävykartoitus",
|
||||||
"transcoding_tone_mapping_description": "Pyrkii säilömään HDR-kuvien ulkonäön, kun muunnetaan peruskuvaksi. Jokaisella algoritmilla on omat heikkoutensa värien, yksityiskohtien tai kirkkauksien kesken. Hable säilöö yksityiskohdat, Mobius värit ja Reinhard kirkkaudet.",
|
"transcoding_tone_mapping_description": "Pyrkii säilömään HDR-kuvien ulkonäön, kun muunnetaan peruskuvaksi. Jokaisella algoritmilla on omat heikkoutensa värien, yksityiskohtien tai kirkkauksien kesken. Hable säilöö yksityiskohdat, Mobius värit ja Reinhard kirkkaudet.",
|
||||||
"transcoding_transcode_policy": "Transkoodauskäytäntö",
|
"transcoding_transcode_policy": "Transkoodauskäytäntö",
|
||||||
"transcoding_transcode_policy_description": "Käytäntö miten video tulisi transkoodata. HDR videot transkoodataan aina, paitsi jos transkoodaus on poistettu käytöstä.",
|
"transcoding_transcode_policy_description": "Käytäntö, miten video tulisi transkoodata. HDR-videot transkoodataan aina, paitsi jos transkoodaus on poistettu käytöstä.",
|
||||||
"transcoding_two_pass_encoding": "Two-pass enkoodaus",
|
"transcoding_two_pass_encoding": "Two-pass enkoodaus",
|
||||||
"transcoding_two_pass_encoding_setting_description": "Transkoodaa kahdessa vaiheessa tuottaaksesi paremmin koodattuja videoita. Kun maksimibittinopeus on käytössä (vaaditaan H.264- ja HEVC-koodaukselle), tämä tila käyttää bittinopeusaluetta, joka perustuu maksimibittinopeuteen ja ohittaa CRF. VP9 osalta CRF:ää voidaan käyttää, jos maksimibittinopeus on poistettu käytöstä.",
|
"transcoding_two_pass_encoding_setting_description": "Transkoodaa kahdessa vaiheessa tuottaaksesi paremmin koodattuja videoita. Kun maksimibittinopeus on käytössä (vaaditaan H.264- ja HEVC-koodaukselle), tämä tila käyttää bittinopeusaluetta, joka perustuu maksimibittinopeuteen ja ohittaa CRF. VP9 osalta CRF:ää voidaan käyttää, jos maksimibittinopeus on poistettu käytöstä.",
|
||||||
"transcoding_video_codec": "Videokoodekki",
|
"transcoding_video_codec": "Videokoodekki",
|
||||||
@@ -400,11 +417,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Jotkut laitteet ovat erittäin hitaita lataamaan esikatselukuvia paikallisista kohteista. Aktivoi tämä asetus käyttääksesi etäkuvia.",
|
"advanced_settings_prefer_remote_subtitle": "Jotkut laitteet ovat erittäin hitaita lataamaan esikatselukuvia paikallisista kohteista. Aktivoi tämä asetus käyttääksesi etäkuvia.",
|
||||||
"advanced_settings_prefer_remote_title": "Suosi etäkuvia",
|
"advanced_settings_prefer_remote_title": "Suosi etäkuvia",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Määritä välityspalvelimen otsikot(proxy headers), jotka Immichin tulisi lähettää jokaisen verkkopyynnön mukana",
|
"advanced_settings_proxy_headers_subtitle": "Määritä välityspalvelimen otsikot(proxy headers), jotka Immichin tulisi lähettää jokaisen verkkopyynnön mukana",
|
||||||
"advanced_settings_proxy_headers_title": "Välityspalvelimen otsikot",
|
"advanced_settings_proxy_headers_title": "Mukautetut välityspalvelimen otsikot [KOKEELLINEN]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Aktivoi vain luku -tilan, jolloin valokuvia voi ainoastaan selata. Toiminnot kuten useiden kuvien valitseminen, jakaminen, siirtäminen toistolaitteelle ja poistaminen ovat pois käytöstä. Laita vain luku -tila päälle tai pois päältä päävalikon käyttäjäkuvakkeesta",
|
"advanced_settings_readonly_mode_subtitle": "Aktivoi vain luku -tilan, jolloin valokuvia voi ainoastaan selata. Toiminnot kuten useiden kuvien valitseminen, jakaminen, siirtäminen toistolaitteelle ja poistaminen ovat pois käytöstä. Laita vain luku -tila päälle tai pois päältä päävalikon käyttäjäkuvakkeesta",
|
||||||
"advanced_settings_readonly_mode_title": "Vain luku -tila",
|
"advanced_settings_readonly_mode_title": "Vain luku -tila",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Ohita SSL sertifikaattivarmennus palvelimen päätepisteellä. Vaaditaan self-signed -sertifikaateissa.",
|
"advanced_settings_self_signed_ssl_subtitle": "Ohita SSL sertifikaattivarmennus palvelimen päätepisteellä. Vaaditaan self-signed -sertifikaateissa.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Salli self-signed SSL -sertifikaatit",
|
"advanced_settings_self_signed_ssl_title": "Salli self-signed SSL -sertifikaatit [KOKEELLINEN]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Poista tai palauta kohde automaattisesti tällä laitteella, kun kyseinen toiminto suoritetaan verkossa",
|
"advanced_settings_sync_remote_deletions_subtitle": "Poista tai palauta kohde automaattisesti tällä laitteella, kun kyseinen toiminto suoritetaan verkossa",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Synkronoi etäpoistot [KOKEELLINEN]",
|
"advanced_settings_sync_remote_deletions_title": "Synkronoi etäpoistot [KOKEELLINEN]",
|
||||||
"advanced_settings_tile_subtitle": "Edistyneen käyttäjän asetukset",
|
"advanced_settings_tile_subtitle": "Edistyneen käyttäjän asetukset",
|
||||||
@@ -435,7 +452,7 @@
|
|||||||
"album_updated_setting_description": "Saa sähköpostia kun jaetussa albumissa on uutta sisältöä",
|
"album_updated_setting_description": "Saa sähköpostia kun jaetussa albumissa on uutta sisältöä",
|
||||||
"album_user_left": "Poistuttiin albumista {album}",
|
"album_user_left": "Poistuttiin albumista {album}",
|
||||||
"album_user_removed": "{user} poistettu",
|
"album_user_removed": "{user} poistettu",
|
||||||
"album_viewer_appbar_delete_confirm": "Haluatko varmast poistaa tämän albumin tililtäsi?",
|
"album_viewer_appbar_delete_confirm": "Haluatko varmasti poistaa tämän albumin tililtäsi?",
|
||||||
"album_viewer_appbar_share_err_delete": "Albumin poistaminen epäonnistui",
|
"album_viewer_appbar_share_err_delete": "Albumin poistaminen epäonnistui",
|
||||||
"album_viewer_appbar_share_err_leave": "Albumista poistuminen epäonnistui",
|
"album_viewer_appbar_share_err_leave": "Albumista poistuminen epäonnistui",
|
||||||
"album_viewer_appbar_share_err_remove": "Ongelmia kohteiden poistamisessa albumista",
|
"album_viewer_appbar_share_err_remove": "Ongelmia kohteiden poistamisessa albumista",
|
||||||
@@ -464,10 +481,14 @@
|
|||||||
"api_key_description": "Tämä arvo näytetään vain kerran. Varmista, että olet kopioinut sen ennen kuin suljet ikkunan.",
|
"api_key_description": "Tämä arvo näytetään vain kerran. Varmista, että olet kopioinut sen ennen kuin suljet ikkunan.",
|
||||||
"api_key_empty": "API-avaimesi ei pitäisi olla tyhjä",
|
"api_key_empty": "API-avaimesi ei pitäisi olla tyhjä",
|
||||||
"api_keys": "API-avaimet",
|
"api_keys": "API-avaimet",
|
||||||
|
"app_architecture_variant": "Variantti (Arkkitehtuuri)",
|
||||||
"app_bar_signout_dialog_content": "Haluatko varmasti kirjautua ulos?",
|
"app_bar_signout_dialog_content": "Haluatko varmasti kirjautua ulos?",
|
||||||
"app_bar_signout_dialog_ok": "Kyllä",
|
"app_bar_signout_dialog_ok": "Kyllä",
|
||||||
"app_bar_signout_dialog_title": "Kirjaudu ulos",
|
"app_bar_signout_dialog_title": "Kirjaudu ulos",
|
||||||
|
"app_download_links": "Sovelluksen latauslinkit",
|
||||||
"app_settings": "Sovellusasetukset",
|
"app_settings": "Sovellusasetukset",
|
||||||
|
"app_stores": "Sovelluskaupat",
|
||||||
|
"app_update_available": "Sovellukseen on saatavilla päivitys",
|
||||||
"appears_in": "Esiintyy albumeissa",
|
"appears_in": "Esiintyy albumeissa",
|
||||||
"apply_count": "Aseta {count, number}",
|
"apply_count": "Aseta {count, number}",
|
||||||
"archive": "Arkisto",
|
"archive": "Arkisto",
|
||||||
@@ -481,7 +502,7 @@
|
|||||||
"archived_count": "{count, plural, other {Arkistoitu #}}",
|
"archived_count": "{count, plural, other {Arkistoitu #}}",
|
||||||
"are_these_the_same_person": "Ovatko he sama henkilö?",
|
"are_these_the_same_person": "Ovatko he sama henkilö?",
|
||||||
"are_you_sure_to_do_this": "Haluatko varmasti tehdä tämän?",
|
"are_you_sure_to_do_this": "Haluatko varmasti tehdä tämän?",
|
||||||
"asset_action_delete_err_read_only": "Vain luku-tilassa olevia kohteita ei voitu poistaa, ohitetaan",
|
"asset_action_delete_err_read_only": "Vain luku -tilassa olevia kohteita ei voitu poistaa, ohitetaan",
|
||||||
"asset_action_share_err_offline": "Verkottomassa tilassa olevia kohteita ei voitu noutaa, ohitetaan",
|
"asset_action_share_err_offline": "Verkottomassa tilassa olevia kohteita ei voitu noutaa, ohitetaan",
|
||||||
"asset_added_to_album": "Lisätty albumiin",
|
"asset_added_to_album": "Lisätty albumiin",
|
||||||
"asset_adding_to_album": "Lisätään albumiin…",
|
"asset_adding_to_album": "Lisätään albumiin…",
|
||||||
@@ -503,6 +524,7 @@
|
|||||||
"asset_skipped": "Ohitettu",
|
"asset_skipped": "Ohitettu",
|
||||||
"asset_skipped_in_trash": "Roskakorissa",
|
"asset_skipped_in_trash": "Roskakorissa",
|
||||||
"asset_trashed": "Kohde poistettu",
|
"asset_trashed": "Kohde poistettu",
|
||||||
|
"asset_troubleshoot": "Sisällön vian paikannus",
|
||||||
"asset_uploaded": "Lähetetty",
|
"asset_uploaded": "Lähetetty",
|
||||||
"asset_uploading": "Ladataan…",
|
"asset_uploading": "Ladataan…",
|
||||||
"asset_viewer_settings_subtitle": "Galleriakatseluohjelman asetusten hallinta",
|
"asset_viewer_settings_subtitle": "Galleriakatseluohjelman asetusten hallinta",
|
||||||
@@ -510,7 +532,7 @@
|
|||||||
"assets": "Kohteet",
|
"assets": "Kohteet",
|
||||||
"assets_added_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}}",
|
"assets_added_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}}",
|
||||||
"assets_added_to_album_count": "Albumiin lisätty {count, plural, one {# kohde} other {# kohdetta}}",
|
"assets_added_to_album_count": "Albumiin lisätty {count, plural, one {# kohde} other {# kohdetta}}",
|
||||||
"assets_added_to_albums_count": "Lisätty {assetTotal, plural, one {# aineisto} other {# aaineistoa}} {albumTotal, plural, one {# albumiin} other {# albumeihin}}",
|
"assets_added_to_albums_count": "Lisätty {assetTotal, plural, one {# kohde} other {# kohdetta}} {albumTotal, plural, one {# albumiin} other {# albumiin}}",
|
||||||
"assets_cannot_be_added_to_album_count": "{count, plural, one {Kohdetta} other {Kohdetta}} ei voida lisätä albumiin",
|
"assets_cannot_be_added_to_album_count": "{count, plural, one {Kohdetta} other {Kohdetta}} ei voida lisätä albumiin",
|
||||||
"assets_cannot_be_added_to_albums": "{count, plural, one {Aineisto} other {Aineistoa}} ei voi lisätä mihinkään albumiin",
|
"assets_cannot_be_added_to_albums": "{count, plural, one {Aineisto} other {Aineistoa}} ei voi lisätä mihinkään albumiin",
|
||||||
"assets_count": "{count, plural, one {# media} other {# mediaa}}",
|
"assets_count": "{count, plural, one {# media} other {# mediaa}}",
|
||||||
@@ -547,8 +569,10 @@
|
|||||||
"backup_album_selection_page_select_albums": "Valitse albumit",
|
"backup_album_selection_page_select_albums": "Valitse albumit",
|
||||||
"backup_album_selection_page_selection_info": "Valintatiedot",
|
"backup_album_selection_page_selection_info": "Valintatiedot",
|
||||||
"backup_album_selection_page_total_assets": "Ainulaatuisia kohteita yhteensä",
|
"backup_album_selection_page_total_assets": "Ainulaatuisia kohteita yhteensä",
|
||||||
|
"backup_albums_sync": "Varmuuskopioitujen albumeiden synkronointi",
|
||||||
"backup_all": "Kaikki",
|
"backup_all": "Kaikki",
|
||||||
"backup_background_service_backup_failed_message": "Kohteiden varmuuskopiointi epäonnistui. Yritetään uudelleen…",
|
"backup_background_service_backup_failed_message": "Kohteiden varmuuskopiointi epäonnistui. Yritetään uudelleen…",
|
||||||
|
"backup_background_service_complete_notification": "Kohteiden varmuuskopiointi valmis",
|
||||||
"backup_background_service_connection_failed_message": "Palvelimeen ei saatu yhteyttä. Yritetään uudelleen…",
|
"backup_background_service_connection_failed_message": "Palvelimeen ei saatu yhteyttä. Yritetään uudelleen…",
|
||||||
"backup_background_service_current_upload_notification": "Lähetetään {filename}",
|
"backup_background_service_current_upload_notification": "Lähetetään {filename}",
|
||||||
"backup_background_service_default_notification": "Tarkistetaan uusia kohteita…",
|
"backup_background_service_default_notification": "Tarkistetaan uusia kohteita…",
|
||||||
@@ -596,7 +620,8 @@
|
|||||||
"backup_controller_page_turn_on": "Varmuuskopiointi päälle",
|
"backup_controller_page_turn_on": "Varmuuskopiointi päälle",
|
||||||
"backup_controller_page_uploading_file_info": "Tiedostojen lähetystiedot",
|
"backup_controller_page_uploading_file_info": "Tiedostojen lähetystiedot",
|
||||||
"backup_err_only_album": "Vähintään yhden albumin tulee olla valittuna",
|
"backup_err_only_album": "Vähintään yhden albumin tulee olla valittuna",
|
||||||
"backup_info_card_assets": "kohteet",
|
"backup_error_sync_failed": "Synkronointi epäonnistui. Varmuuskopion käsittely ei onnistu.",
|
||||||
|
"backup_info_card_assets": "kohdetta",
|
||||||
"backup_manual_cancelled": "Peruutettu",
|
"backup_manual_cancelled": "Peruutettu",
|
||||||
"backup_manual_in_progress": "Lähetys palvelimelle on jo käynnissä. Kokeile myöhemmin uudelleen",
|
"backup_manual_in_progress": "Lähetys palvelimelle on jo käynnissä. Kokeile myöhemmin uudelleen",
|
||||||
"backup_manual_success": "Onnistui",
|
"backup_manual_success": "Onnistui",
|
||||||
@@ -631,7 +656,7 @@
|
|||||||
"cache_settings_statistics_thumbnail": "Esikatselukuvat",
|
"cache_settings_statistics_thumbnail": "Esikatselukuvat",
|
||||||
"cache_settings_statistics_title": "Välimuistin käyttö",
|
"cache_settings_statistics_title": "Välimuistin käyttö",
|
||||||
"cache_settings_subtitle": "Hallitse Immich-mobiilisovelluksen välimuistin käyttöä",
|
"cache_settings_subtitle": "Hallitse Immich-mobiilisovelluksen välimuistin käyttöä",
|
||||||
"cache_settings_tile_subtitle": "Hallitse paikallista tallenustilaa",
|
"cache_settings_tile_subtitle": "Hallitse paikallista tallennustilaa",
|
||||||
"cache_settings_tile_title": "Paikallinen tallennustila",
|
"cache_settings_tile_title": "Paikallinen tallennustila",
|
||||||
"cache_settings_title": "Välimuistin asetukset",
|
"cache_settings_title": "Välimuistin asetukset",
|
||||||
"camera": "Kamera",
|
"camera": "Kamera",
|
||||||
@@ -657,12 +682,16 @@
|
|||||||
"change_password_description": "Tämä on joko ensimmäinen kertasi kun kirjaudut järjestelmään, tai salasanasi on pyydetty vaihtamaan. Määritä uusi salasana alle.",
|
"change_password_description": "Tämä on joko ensimmäinen kertasi kun kirjaudut järjestelmään, tai salasanasi on pyydetty vaihtamaan. Määritä uusi salasana alle.",
|
||||||
"change_password_form_confirm_password": "Vahvista salasana",
|
"change_password_form_confirm_password": "Vahvista salasana",
|
||||||
"change_password_form_description": "Hei {name},\n\nTämä on joko ensimmäinen kerta, kun kirjaudut järjestelmään, tai sinulta on pyydetty salasanan vaihtoa. Ole hyvä ja syötä uusi salasana alle.",
|
"change_password_form_description": "Hei {name},\n\nTämä on joko ensimmäinen kerta, kun kirjaudut järjestelmään, tai sinulta on pyydetty salasanan vaihtoa. Ole hyvä ja syötä uusi salasana alle.",
|
||||||
|
"change_password_form_log_out": "Kirjaudu ulos kaikilta muilta laitteilta",
|
||||||
|
"change_password_form_log_out_description": "On suositeltavaa kirjautua ulos kaikilta muilta laitteilta",
|
||||||
"change_password_form_new_password": "Uusi salasana",
|
"change_password_form_new_password": "Uusi salasana",
|
||||||
"change_password_form_password_mismatch": "Salasanat eivät täsmää",
|
"change_password_form_password_mismatch": "Salasanat eivät täsmää",
|
||||||
"change_password_form_reenter_new_password": "Uusi salasana uudelleen",
|
"change_password_form_reenter_new_password": "Uusi salasana uudelleen",
|
||||||
"change_pin_code": "Vaihda PIN-koodi",
|
"change_pin_code": "Vaihda PIN-koodi",
|
||||||
"change_your_password": "Vaihda salasanasi",
|
"change_your_password": "Vaihda salasanasi",
|
||||||
"changed_visibility_successfully": "Näkyvyys vaihdettu",
|
"changed_visibility_successfully": "Näkyvyys vaihdettu",
|
||||||
|
"charging": "Ladataan laitetta",
|
||||||
|
"charging_requirement_mobile_backup": "Varmuuskopiointi taustalla vaatii laitteen latautumista",
|
||||||
"check_corrupt_asset_backup": "Vioittuneiden varmuuskopioiden tarkistaminen",
|
"check_corrupt_asset_backup": "Vioittuneiden varmuuskopioiden tarkistaminen",
|
||||||
"check_corrupt_asset_backup_button": "Suorita tarkistus",
|
"check_corrupt_asset_backup_button": "Suorita tarkistus",
|
||||||
"check_corrupt_asset_backup_description": "Suorita tämä tarkistus vain Wi-Fi-yhteyden kautta ja vasta, kun kaikki kohteet on varmuuskopioitu. Toimenpide voi kestää muutamia minuutteja.",
|
"check_corrupt_asset_backup_description": "Suorita tämä tarkistus vain Wi-Fi-yhteyden kautta ja vasta, kun kaikki kohteet on varmuuskopioitu. Toimenpide voi kestää muutamia minuutteja.",
|
||||||
@@ -682,7 +711,7 @@
|
|||||||
"client_cert_invalid_msg": "Virheellinen varmennetiedosto tai väärä salasana",
|
"client_cert_invalid_msg": "Virheellinen varmennetiedosto tai väärä salasana",
|
||||||
"client_cert_remove_msg": "Asiakassertifikaatti on poistettu",
|
"client_cert_remove_msg": "Asiakassertifikaatti on poistettu",
|
||||||
"client_cert_subtitle": "Vain PKCS12 (.p12, .pfx) -muotoa tuetaan. Varmenteen tuonti/poisto on käytettävissä vain ennen sisäänkirjautumista",
|
"client_cert_subtitle": "Vain PKCS12 (.p12, .pfx) -muotoa tuetaan. Varmenteen tuonti/poisto on käytettävissä vain ennen sisäänkirjautumista",
|
||||||
"client_cert_title": "SSL-asiakassertifikaatti",
|
"client_cert_title": "SSL-asiakassertifikaatti [KOKEELLINEN]",
|
||||||
"clockwise": "Myötäpäivään",
|
"clockwise": "Myötäpäivään",
|
||||||
"close": "Sulje",
|
"close": "Sulje",
|
||||||
"collapse": "Supista",
|
"collapse": "Supista",
|
||||||
@@ -694,7 +723,6 @@
|
|||||||
"comments_and_likes": "Kommentit ja tykkäykset",
|
"comments_and_likes": "Kommentit ja tykkäykset",
|
||||||
"comments_are_disabled": "Kommentointi ei käytössä",
|
"comments_are_disabled": "Kommentointi ei käytössä",
|
||||||
"common_create_new_album": "Luo uusi albumi",
|
"common_create_new_album": "Luo uusi albumi",
|
||||||
"common_server_error": "Tarkista internet-yhteytesi. Varmista että palvelin on saavutettavissa ja sovellus-/palvelinversiot ovat yhteensopivia.",
|
|
||||||
"completed": "Valmis",
|
"completed": "Valmis",
|
||||||
"confirm": "Vahvista",
|
"confirm": "Vahvista",
|
||||||
"confirm_admin_password": "Vahvista ylläpitäjän salasana",
|
"confirm_admin_password": "Vahvista ylläpitäjän salasana",
|
||||||
@@ -733,6 +761,7 @@
|
|||||||
"create": "Luo",
|
"create": "Luo",
|
||||||
"create_album": "Luo albumi",
|
"create_album": "Luo albumi",
|
||||||
"create_album_page_untitled": "Nimetön",
|
"create_album_page_untitled": "Nimetön",
|
||||||
|
"create_api_key": "Luo API-avain",
|
||||||
"create_library": "Luo uusi kirjasto",
|
"create_library": "Luo uusi kirjasto",
|
||||||
"create_link": "Luo linkki",
|
"create_link": "Luo linkki",
|
||||||
"create_link_to_share": "Luo linkki jaettavaksi",
|
"create_link_to_share": "Luo linkki jaettavaksi",
|
||||||
@@ -749,6 +778,7 @@
|
|||||||
"create_user": "Luo käyttäjä",
|
"create_user": "Luo käyttäjä",
|
||||||
"created": "Luotu",
|
"created": "Luotu",
|
||||||
"created_at": "Luotu",
|
"created_at": "Luotu",
|
||||||
|
"creating_linked_albums": "Luodaan linkattuja albumeita...",
|
||||||
"crop": "Rajaa",
|
"crop": "Rajaa",
|
||||||
"curated_object_page_title": "Asiat",
|
"curated_object_page_title": "Asiat",
|
||||||
"current_device": "Nykyinen laite",
|
"current_device": "Nykyinen laite",
|
||||||
@@ -761,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
||||||
"dark": "Tumma",
|
"dark": "Tumma",
|
||||||
"dark_theme": "Vaihda tumma teema",
|
"dark_theme": "Vaihda tumma teema",
|
||||||
|
"date": "Päivämäärä",
|
||||||
"date_after": "Päivämäärän jälkeen",
|
"date_after": "Päivämäärän jälkeen",
|
||||||
"date_and_time": "Päivämäärä ja aika",
|
"date_and_time": "Päivämäärä ja aika",
|
||||||
"date_before": "Päivä ennen",
|
"date_before": "Päivä ennen",
|
||||||
@@ -773,7 +804,7 @@
|
|||||||
"deduplication_criteria_1": "Kuvan koko tavuina",
|
"deduplication_criteria_1": "Kuvan koko tavuina",
|
||||||
"deduplication_criteria_2": "EXIF-datan määrä",
|
"deduplication_criteria_2": "EXIF-datan määrä",
|
||||||
"deduplication_info": "Deduplikaatiotieto",
|
"deduplication_info": "Deduplikaatiotieto",
|
||||||
"deduplication_info_description": "Jotta voimme automaattisesti esivalita aineistot ja poistaa duplikaatit suurina erinä, tarkastelemme:",
|
"deduplication_info_description": "Jotta voimme automaattisesti esivalita aineistot ja poistaa kaksoiskappaleet suurina erinä, tarkastelemme:",
|
||||||
"default_locale": "Oletuskieliasetus",
|
"default_locale": "Oletuskieliasetus",
|
||||||
"default_locale_description": "Muotoile päivämäärät ja numerot selaimesi kielen mukaan",
|
"default_locale_description": "Muotoile päivämäärät ja numerot selaimesi kielen mukaan",
|
||||||
"delete": "Poista",
|
"delete": "Poista",
|
||||||
@@ -848,7 +879,7 @@
|
|||||||
"downloading_media": "Median lataaminen",
|
"downloading_media": "Median lataaminen",
|
||||||
"drop_files_to_upload": "Pudota tiedostot mihin tahansa ladataksesi ne",
|
"drop_files_to_upload": "Pudota tiedostot mihin tahansa ladataksesi ne",
|
||||||
"duplicates": "Kaksoiskappaleet",
|
"duplicates": "Kaksoiskappaleet",
|
||||||
"duplicates_description": "Selvitä jokaisen kohdalla mitkä (jos yksikään) ovat kaksoiskappaleita",
|
"duplicates_description": "Selvitä jokaisen kohdalla mitkä (jos mitkään) ovat kaksoiskappaleita",
|
||||||
"duration": "Kesto",
|
"duration": "Kesto",
|
||||||
"edit": "Muokkaa",
|
"edit": "Muokkaa",
|
||||||
"edit_album": "Muokkaa albumia",
|
"edit_album": "Muokkaa albumia",
|
||||||
@@ -875,7 +906,6 @@
|
|||||||
"edit_tag": "Muokkaa tunnistetta",
|
"edit_tag": "Muokkaa tunnistetta",
|
||||||
"edit_title": "Muokkaa otsikkoa",
|
"edit_title": "Muokkaa otsikkoa",
|
||||||
"edit_user": "Muokkaa käyttäjää",
|
"edit_user": "Muokkaa käyttäjää",
|
||||||
"edited": "Muokattu",
|
|
||||||
"editor": "Muokkaaja",
|
"editor": "Muokkaaja",
|
||||||
"editor_close_without_save_prompt": "Muutoksia ei tallenneta",
|
"editor_close_without_save_prompt": "Muutoksia ei tallenneta",
|
||||||
"editor_close_without_save_title": "Suljetaanko editori?",
|
"editor_close_without_save_title": "Suljetaanko editori?",
|
||||||
@@ -898,7 +928,9 @@
|
|||||||
"error": "Virhe",
|
"error": "Virhe",
|
||||||
"error_change_sort_album": "Albumin lajittelujärjestyksen muuttaminen epäonnistui",
|
"error_change_sort_album": "Albumin lajittelujärjestyksen muuttaminen epäonnistui",
|
||||||
"error_delete_face": "Virhe kasvojen poistamisessa kohteesta",
|
"error_delete_face": "Virhe kasvojen poistamisessa kohteesta",
|
||||||
|
"error_getting_places": "Ongelma paikkojen haussa",
|
||||||
"error_loading_image": "Kuvan lataus ei onnistunut",
|
"error_loading_image": "Kuvan lataus ei onnistunut",
|
||||||
|
"error_loading_partners": "Ongelma partnerin haussa: {error}",
|
||||||
"error_saving_image": "Virhe: {error}",
|
"error_saving_image": "Virhe: {error}",
|
||||||
"error_tag_face_bounding_box": "Kasvojen merkitseminen epäonnistui – rajausruudun koordinaatteja ei löydy",
|
"error_tag_face_bounding_box": "Kasvojen merkitseminen epäonnistui – rajausruudun koordinaatteja ei löydy",
|
||||||
"error_title": "Virhe - Jotain meni pieleen",
|
"error_title": "Virhe - Jotain meni pieleen",
|
||||||
@@ -1029,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Kuvauksen muuttaminen epäonnistui",
|
"exif_bottom_sheet_description_error": "Kuvauksen muuttaminen epäonnistui",
|
||||||
"exif_bottom_sheet_details": "TIEDOT",
|
"exif_bottom_sheet_details": "TIEDOT",
|
||||||
"exif_bottom_sheet_location": "SIJAINTI",
|
"exif_bottom_sheet_location": "SIJAINTI",
|
||||||
|
"exif_bottom_sheet_no_description": "Ei kuvausta",
|
||||||
"exif_bottom_sheet_people": "IHMISET",
|
"exif_bottom_sheet_people": "IHMISET",
|
||||||
"exif_bottom_sheet_person_add_person": "Lisää nimi",
|
"exif_bottom_sheet_person_add_person": "Lisää nimi",
|
||||||
"exit_slideshow": "Poistu diaesityksestä",
|
"exit_slideshow": "Poistu diaesityksestä",
|
||||||
@@ -1058,14 +1091,16 @@
|
|||||||
"failed_to_load_folder": "Kansion lataaminen epäonnistui",
|
"failed_to_load_folder": "Kansion lataaminen epäonnistui",
|
||||||
"favorite": "Suosikki",
|
"favorite": "Suosikki",
|
||||||
"favorite_action_prompt": "{count} lisätty suosikkeihin",
|
"favorite_action_prompt": "{count} lisätty suosikkeihin",
|
||||||
"favorite_or_unfavorite_photo": "Suosikki- tai ei-suosikkikuva",
|
"favorite_or_unfavorite_photo": "Lisää tai poista kuva suosikeista",
|
||||||
"favorites": "Suosikit",
|
"favorites": "Suosikit",
|
||||||
"favorites_page_no_favorites": "Suosikkikohteita ei löytynyt",
|
"favorites_page_no_favorites": "Suosikkikohteita ei löytynyt",
|
||||||
"feature_photo_updated": "Kansikuva ladattu",
|
"feature_photo_updated": "Kansikuva ladattu",
|
||||||
"features": "Ominaisuudet",
|
"features": "Ominaisuudet",
|
||||||
|
"features_in_development": "Kehityksessä olevat ominaisuudet",
|
||||||
"features_setting_description": "Hallitse sovelluksen ominaisuuksia",
|
"features_setting_description": "Hallitse sovelluksen ominaisuuksia",
|
||||||
"file_name": "Tiedoston nimi",
|
"file_name": "Tiedoston nimi",
|
||||||
"file_name_or_extension": "Tiedostonimi tai tiedostopääte",
|
"file_name_or_extension": "Tiedostonimi tai tiedostopääte",
|
||||||
|
"file_size": "Tiedostokoko",
|
||||||
"filename": "Tiedostonimi",
|
"filename": "Tiedostonimi",
|
||||||
"filetype": "Tiedostotyyppi",
|
"filetype": "Tiedostotyyppi",
|
||||||
"filter": "Suodatin",
|
"filter": "Suodatin",
|
||||||
@@ -1090,6 +1125,8 @@
|
|||||||
"go_back": "Palaa",
|
"go_back": "Palaa",
|
||||||
"go_to_folder": "Mene kansioon",
|
"go_to_folder": "Mene kansioon",
|
||||||
"go_to_search": "Siirry hakuun",
|
"go_to_search": "Siirry hakuun",
|
||||||
|
"gps": "GPS",
|
||||||
|
"gps_missing": "Ei GPS:ää",
|
||||||
"grant_permission": "Myönnä lupa",
|
"grant_permission": "Myönnä lupa",
|
||||||
"group_albums_by": "Ryhmitä albumi...",
|
"group_albums_by": "Ryhmitä albumi...",
|
||||||
"group_country": "Ryhmitä maan mukaan",
|
"group_country": "Ryhmitä maan mukaan",
|
||||||
@@ -1107,7 +1144,6 @@
|
|||||||
"header_settings_field_validator_msg": "Arvo ei voi olla tyhjä",
|
"header_settings_field_validator_msg": "Arvo ei voi olla tyhjä",
|
||||||
"header_settings_header_name_input": "Otsikon nimi",
|
"header_settings_header_name_input": "Otsikon nimi",
|
||||||
"header_settings_header_value_input": "Otsikon arvo",
|
"header_settings_header_value_input": "Otsikon arvo",
|
||||||
"headers_settings_tile_subtitle": "Määritä välityspalvelimen otsikot, jotka sovelluksen tulisi lähettää jokaisen verkkopyynnön mukana",
|
|
||||||
"headers_settings_tile_title": "Mukautettu proxy headers",
|
"headers_settings_tile_title": "Mukautettu proxy headers",
|
||||||
"hi_user": "Hei {name} ({email})",
|
"hi_user": "Hei {name} ({email})",
|
||||||
"hide_all_people": "Piilota kaikki henkilöt",
|
"hide_all_people": "Piilota kaikki henkilöt",
|
||||||
@@ -1119,18 +1155,18 @@
|
|||||||
"home_page_add_to_album_conflicts": "Lisätty {added} kohdetta albumiin {album}. {failed} kohdetta on jo albumissa.",
|
"home_page_add_to_album_conflicts": "Lisätty {added} kohdetta albumiin {album}. {failed} kohdetta on jo albumissa.",
|
||||||
"home_page_add_to_album_err_local": "Paikallisten kohteiden lisääminen albumeihin ei ole mahdollista, ohitetaan",
|
"home_page_add_to_album_err_local": "Paikallisten kohteiden lisääminen albumeihin ei ole mahdollista, ohitetaan",
|
||||||
"home_page_add_to_album_success": "Lisätty {added} kohdetta albumiin {album}.",
|
"home_page_add_to_album_success": "Lisätty {added} kohdetta albumiin {album}.",
|
||||||
"home_page_album_err_partner": "Kumppanin kohteita ei voi vielä lisätä albumiin. Hypätään yli",
|
"home_page_album_err_partner": "Kumppanin kohteita ei voi vielä lisätä albumiin, ohitetaan",
|
||||||
"home_page_archive_err_local": "Paikallisten kohteiden arkistointi ei ole mahdollista, ohitetaan",
|
"home_page_archive_err_local": "Paikallisten kohteiden arkistointi ei ole mahdollista, ohitetaan",
|
||||||
"home_page_archive_err_partner": "Kumppanin kohteita ei voi arkistoida. Hypätään yli",
|
"home_page_archive_err_partner": "Kumppanin kohteita ei voi arkistoida, ohitetaan",
|
||||||
"home_page_building_timeline": "Rakennetaan aikajanaa",
|
"home_page_building_timeline": "Rakennetaan aikajanaa",
|
||||||
"home_page_delete_err_partner": "Kumppanin kohteita ei voi poistaa.Hypätään yli",
|
"home_page_delete_err_partner": "Kumppanin kohteita ei voi poistaa, ohitetaan",
|
||||||
"home_page_delete_remote_err_local": "Paikallisia kohteita etäkohdevalintojen joukossa, ohitetaan",
|
"home_page_delete_remote_err_local": "Paikallisia kohteita etäkohdevalintojen joukossa, ohitetaan",
|
||||||
"home_page_favorite_err_local": "Paikallisten kohteiden lisääminen suosikkeihin ei ole mahdollista, ohitetaan",
|
"home_page_favorite_err_local": "Paikallisten kohteiden lisääminen suosikkeihin ei ole mahdollista, ohitetaan",
|
||||||
"home_page_favorite_err_partner": "Kumppanin kohteita ei voi vielä merkitä suosikiksi. Hypätään yli",
|
"home_page_favorite_err_partner": "Kumppanin kohteita ei voi vielä merkitä suosikiksi, ohitetaan",
|
||||||
"home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita",
|
"home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita",
|
||||||
"home_page_locked_error_local": "Paikallisten kohteiden siirto lukittuun kansioon ei onnistu, ohitetaan",
|
"home_page_locked_error_local": "Paikallisten kohteiden siirto lukittuun kansioon ei onnistu, ohitetaan",
|
||||||
"home_page_locked_error_partner": "Kumppanin kohteita ei voi siirtää lukittuun kansioon, ohitetaan",
|
"home_page_locked_error_partner": "Kumppanin kohteita ei voi siirtää lukittuun kansioon, ohitetaan",
|
||||||
"home_page_share_err_local": "Paikallisia kohteita ei voitu jakaa linkkien avulla. Hypätään yli",
|
"home_page_share_err_local": "Paikallisia kohteita ei voitu jakaa linkkien avulla, ohitetaan",
|
||||||
"home_page_upload_err_limit": "Voit lähettää palvelimelle enintään 30 kohdetta kerrallaan, ohitetaan",
|
"home_page_upload_err_limit": "Voit lähettää palvelimelle enintään 30 kohdetta kerrallaan, ohitetaan",
|
||||||
"host": "Isäntä",
|
"host": "Isäntä",
|
||||||
"hour": "Tunti",
|
"hour": "Tunti",
|
||||||
@@ -1158,7 +1194,7 @@
|
|||||||
"immich_web_interface": "Immich-verkkokäyttöliittymä",
|
"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}}",
|
||||||
"in_archive": "Arkistossa",
|
"in_archive": "Arkistossa",
|
||||||
"include_archived": "Sisällytä arkistoidut",
|
"include_archived": "Sisällytä arkistoidut",
|
||||||
"include_shared_albums": "Sisällytä jaetut albumit",
|
"include_shared_albums": "Sisällytä jaetut albumit",
|
||||||
@@ -1167,10 +1203,10 @@
|
|||||||
"individual_shares": "Yksittäiset jaot",
|
"individual_shares": "Yksittäiset jaot",
|
||||||
"info": "Lisätietoja",
|
"info": "Lisätietoja",
|
||||||
"interval": {
|
"interval": {
|
||||||
"day_at_onepm": "Joka päivä klo 13:00",
|
"day_at_onepm": "Joka päivä klo 13.00",
|
||||||
"hours": "Joka {hours, plural, one {tunti} other {{hours, number} tuntia}}",
|
"hours": "Joka {hours, plural, one {tunti} other {{hours, number} tuntia}}",
|
||||||
"night_at_midnight": "Joka yö keskiyöllä",
|
"night_at_midnight": "Joka yö keskiyöllä",
|
||||||
"night_at_twoam": "Joka yö klo 02:00"
|
"night_at_twoam": "Joka yö klo 2.00"
|
||||||
},
|
},
|
||||||
"invalid_date": "Virheellinen päivämäärä",
|
"invalid_date": "Virheellinen päivämäärä",
|
||||||
"invalid_date_format": "Virheellinen päivämäärämuoto",
|
"invalid_date_format": "Virheellinen päivämäärämuoto",
|
||||||
@@ -1225,8 +1261,10 @@
|
|||||||
"local": "Paikallinen",
|
"local": "Paikallinen",
|
||||||
"local_asset_cast_failed": "Kohdetta, joka ei ole ladattuna palvelimelle, ei voida striimata",
|
"local_asset_cast_failed": "Kohdetta, joka ei ole ladattuna palvelimelle, ei voida striimata",
|
||||||
"local_assets": "Paikalliset kohteet",
|
"local_assets": "Paikalliset kohteet",
|
||||||
|
"local_media_summary": "Paikallisen median yhteenveto",
|
||||||
"local_network": "Lähiverkko",
|
"local_network": "Lähiverkko",
|
||||||
"local_network_sheet_info": "Sovellus muodostaa yhteyden palvelimeen tämän URL-osoitteen kautta, kun käytetään määritettyä Wi-Fi-verkkoa",
|
"local_network_sheet_info": "Sovellus muodostaa yhteyden palvelimeen tämän URL-osoitteen kautta, kun käytetään määritettyä Wi-Fi-verkkoa",
|
||||||
|
"location": "Sijainti",
|
||||||
"location_permission": "Sijainnin käyttöoikeus",
|
"location_permission": "Sijainnin käyttöoikeus",
|
||||||
"location_permission_content": "Automaattisen vaihtotoiminnon käyttämiseksi Immich tarvitsee tarkan sijainnin käyttöoikeuden, jotta se voi lukea nykyisen Wi-Fi-verkon nimen",
|
"location_permission_content": "Automaattisen vaihtotoiminnon käyttämiseksi Immich tarvitsee tarkan sijainnin käyttöoikeuden, jotta se voi lukea nykyisen Wi-Fi-verkon nimen",
|
||||||
"location_picker_choose_on_map": "Valitse kartalta",
|
"location_picker_choose_on_map": "Valitse kartalta",
|
||||||
@@ -1236,6 +1274,7 @@
|
|||||||
"location_picker_longitude_hint": "Syötä pituusaste",
|
"location_picker_longitude_hint": "Syötä pituusaste",
|
||||||
"lock": "Lukitse",
|
"lock": "Lukitse",
|
||||||
"locked_folder": "Lukittu kansio",
|
"locked_folder": "Lukittu kansio",
|
||||||
|
"log_detail_title": "Lokin yksityiskohtaisuus",
|
||||||
"log_out": "Kirjaudu ulos",
|
"log_out": "Kirjaudu ulos",
|
||||||
"log_out_all_devices": "Kirjaudu ulos kaikilta laitteilta",
|
"log_out_all_devices": "Kirjaudu ulos kaikilta laitteilta",
|
||||||
"logged_in_as": "Kirjautunut käyttäjänä {user}",
|
"logged_in_as": "Kirjautunut käyttäjänä {user}",
|
||||||
@@ -1266,6 +1305,7 @@
|
|||||||
"login_password_changed_success": "Salasan päivitetty onnistuneesti",
|
"login_password_changed_success": "Salasan päivitetty onnistuneesti",
|
||||||
"logout_all_device_confirmation": "Haluatko varmasti kirjautua ulos kaikilta laitteilta?",
|
"logout_all_device_confirmation": "Haluatko varmasti kirjautua ulos kaikilta laitteilta?",
|
||||||
"logout_this_device_confirmation": "Haluatko varmasti kirjautua ulos näiltä laitteilta?",
|
"logout_this_device_confirmation": "Haluatko varmasti kirjautua ulos näiltä laitteilta?",
|
||||||
|
"logs": "Loki",
|
||||||
"longitude": "Pituusaste",
|
"longitude": "Pituusaste",
|
||||||
"look": "Tyyli",
|
"look": "Tyyli",
|
||||||
"loop_videos": "Toista videot uudelleen",
|
"loop_videos": "Toista videot uudelleen",
|
||||||
@@ -1273,6 +1313,7 @@
|
|||||||
"main_branch_warning": "Käytät kehitysversiota; suosittelemme vahvasti käyttämään julkaisuversiota!",
|
"main_branch_warning": "Käytät kehitysversiota; suosittelemme vahvasti käyttämään julkaisuversiota!",
|
||||||
"main_menu": "Päävalikko",
|
"main_menu": "Päävalikko",
|
||||||
"make": "Valmistaja",
|
"make": "Valmistaja",
|
||||||
|
"manage_geolocation": "Muokkaa sijaintia",
|
||||||
"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",
|
||||||
"manage_the_app_settings": "Hallitse sovelluksen asetuksia",
|
"manage_the_app_settings": "Hallitse sovelluksen asetuksia",
|
||||||
@@ -1307,6 +1348,7 @@
|
|||||||
"mark_as_read": "Merkitse luetuksi",
|
"mark_as_read": "Merkitse luetuksi",
|
||||||
"marked_all_as_read": "Merkitty kaikki luetuiksi",
|
"marked_all_as_read": "Merkitty kaikki luetuiksi",
|
||||||
"matches": "Osumia",
|
"matches": "Osumia",
|
||||||
|
"matching_assets": "Vastaava sisältö",
|
||||||
"media_type": "Median tyyppi",
|
"media_type": "Median tyyppi",
|
||||||
"memories": "Muistoja",
|
"memories": "Muistoja",
|
||||||
"memories_all_caught_up": "Kaikki ajan tasalla",
|
"memories_all_caught_up": "Kaikki ajan tasalla",
|
||||||
@@ -1323,10 +1365,12 @@
|
|||||||
"merge_people_prompt": "Haluatko yhdistää nämä henkilöt? Tätä valintaa ei voi peruuttaa.",
|
"merge_people_prompt": "Haluatko yhdistää nämä henkilöt? Tätä valintaa ei voi peruuttaa.",
|
||||||
"merge_people_successfully": "Henkilöt yhdistetty",
|
"merge_people_successfully": "Henkilöt yhdistetty",
|
||||||
"merged_people_count": "{count, plural, one {# Henkilö} other {# henkilöä}} yhdistetty",
|
"merged_people_count": "{count, plural, one {# Henkilö} other {# henkilöä}} yhdistetty",
|
||||||
"minimize": "PIenennä",
|
"minimize": "Pienennä",
|
||||||
"minute": "Minuutti",
|
"minute": "Minuutti",
|
||||||
"minutes": "Minuutit",
|
"minutes": "Minuutit",
|
||||||
"missing": "Puuttuvat",
|
"missing": "Puuttuvat",
|
||||||
|
"mobile_app": "Mobiilisovellus",
|
||||||
|
"mobile_app_download_onboarding_note": "Lataa mobiilisovellus käyttämällä seuraavia vaihtoehtoja",
|
||||||
"model": "Malli",
|
"model": "Malli",
|
||||||
"month": "Kuukauden mukaan",
|
"month": "Kuukauden mukaan",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
@@ -1340,23 +1384,28 @@
|
|||||||
"moved_to_library": "Siirretty {count, plural, one {# kohde} other {# kohdetta}} kirjastoon",
|
"moved_to_library": "Siirretty {count, plural, one {# kohde} other {# kohdetta}} kirjastoon",
|
||||||
"moved_to_trash": "Siirretty roskakoriin",
|
"moved_to_trash": "Siirretty roskakoriin",
|
||||||
"multiselect_grid_edit_date_time_err_read_only": "Vain luku -tilassa olevien kohteiden päivämäärää ei voitu muokata, ohitetaan",
|
"multiselect_grid_edit_date_time_err_read_only": "Vain luku -tilassa olevien kohteiden päivämäärää ei voitu muokata, ohitetaan",
|
||||||
"multiselect_grid_edit_gps_err_read_only": "Vain luku-tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan",
|
"multiselect_grid_edit_gps_err_read_only": "Vain luku -tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan",
|
||||||
"mute_memories": "Mykistä muistot",
|
"mute_memories": "Mykistä muistot",
|
||||||
"my_albums": "Omat albumit",
|
"my_albums": "Omat albumit",
|
||||||
"name": "Nimi",
|
"name": "Nimi",
|
||||||
"name_or_nickname": "Nimi tai lempinimi",
|
"name_or_nickname": "Nimi tai lempinimi",
|
||||||
|
"navigate": "Navigoi",
|
||||||
|
"navigate_to_time": "Navigoi aikaan",
|
||||||
"network_requirement_photos_upload": "Käytä mobiiliverkkoa kuvien varmuuskopioimiseksi",
|
"network_requirement_photos_upload": "Käytä mobiiliverkkoa kuvien varmuuskopioimiseksi",
|
||||||
"network_requirement_videos_upload": "Käytä mobiiliverkkoa videoiden varmuuskopioimiseksi",
|
"network_requirement_videos_upload": "Käytä mobiiliverkkoa videoiden varmuuskopioimiseksi",
|
||||||
|
"network_requirements": "Verkkovaatimukset",
|
||||||
"network_requirements_updated": "Verkkovaatimukset muuttuivat, nollataan varmuuskopiointijono",
|
"network_requirements_updated": "Verkkovaatimukset muuttuivat, nollataan varmuuskopiointijono",
|
||||||
"networking_settings": "Verkko",
|
"networking_settings": "Verkko",
|
||||||
"networking_subtitle": "Hallitse palvelinasetuksia",
|
"networking_subtitle": "Hallitse palvelinasetuksia",
|
||||||
"never": "ei koskaan",
|
"never": "ei koskaan",
|
||||||
"new_album": "Uusi Albumi",
|
"new_album": "Uusi Albumi",
|
||||||
"new_api_key": "Uusi API-avain",
|
"new_api_key": "Uusi API-avain",
|
||||||
|
"new_date_range": "Uusi aikaväli",
|
||||||
"new_password": "Uusi salasana",
|
"new_password": "Uusi salasana",
|
||||||
"new_person": "Uusi henkilö",
|
"new_person": "Uusi henkilö",
|
||||||
"new_pin_code": "Uusi PIN-koodi",
|
"new_pin_code": "Uusi PIN-koodi",
|
||||||
"new_pin_code_subtitle": "Tämä on ensimmäinen kerta, kun käytät lukittua kansiota. Luo PIN-koodi päästäksesi tähän sisältöön turvallisesti",
|
"new_pin_code_subtitle": "Tämä on ensimmäinen kerta, kun käytät lukittua kansiota. Luo PIN-koodi päästäksesi tähän sisältöön turvallisesti",
|
||||||
|
"new_timeline": "Uusi aikajana",
|
||||||
"new_user_created": "Uusi käyttäjä lisätty",
|
"new_user_created": "Uusi käyttäjä lisätty",
|
||||||
"new_version_available": "UUSI VERSIO SAATAVILLA",
|
"new_version_available": "UUSI VERSIO SAATAVILLA",
|
||||||
"newest_first": "Uusin ensin",
|
"newest_first": "Uusin ensin",
|
||||||
@@ -1367,23 +1416,28 @@
|
|||||||
"no_albums_with_name_yet": "Näyttää siltä, ettei sinulla ole yhtään tämän nimistä albumia.",
|
"no_albums_with_name_yet": "Näyttää siltä, ettei sinulla ole yhtään tämän nimistä albumia.",
|
||||||
"no_albums_yet": "Näyttää siltä, ettei sinulla ole vielä yhtään albumia.",
|
"no_albums_yet": "Näyttää siltä, ettei sinulla ole vielä yhtään albumia.",
|
||||||
"no_archived_assets_message": "Arkistoi kuvia ja videoita piilottaaksesi ne kuvat näkymästä",
|
"no_archived_assets_message": "Arkistoi kuvia ja videoita piilottaaksesi ne kuvat näkymästä",
|
||||||
"no_assets_message": "NAPAUTA LATAAKSESI ENSIMMÄISEN KUVASI",
|
"no_assets_message": "NAPAUTA LADATAKSESI ENSIMMÄINEN KUVASI",
|
||||||
"no_assets_to_show": "Ei näytettäviä kohteita",
|
"no_assets_to_show": "Ei näytettäviä kohteita",
|
||||||
"no_cast_devices_found": "Cast-laitteita ei löytynyt",
|
"no_cast_devices_found": "Cast-laitteita ei löytynyt",
|
||||||
|
"no_checksum_local": "Ei tarkistussummaa - paikallista sisältöä ei voida hakea",
|
||||||
|
"no_checksum_remote": "Ei tarkistussummaa - etänä olevaa sisältöä ei voida hakea",
|
||||||
"no_duplicates_found": "Kaksoiskappaleita ei löytynyt.",
|
"no_duplicates_found": "Kaksoiskappaleita ei löytynyt.",
|
||||||
"no_exif_info_available": "EXIF-tietoa ei saatavilla",
|
"no_exif_info_available": "EXIF-tietoa ei saatavilla",
|
||||||
"no_explore_results_message": "Lataa lisää kuvia tutkiaksesi kokoelmaasi.",
|
"no_explore_results_message": "Lataa lisää kuvia tutkiaksesi kokoelmaasi.",
|
||||||
"no_favorites_message": "Lisää suosikkeja löytääksesi nopeasti parhaat kuvasi ja videosi",
|
"no_favorites_message": "Lisää suosikkeja löytääksesi nopeasti parhaat kuvasi ja videosi",
|
||||||
"no_libraries_message": "Luo ulkoinen kirjasto nähdäksesi valokuvasi ja videot",
|
"no_libraries_message": "Luo ulkoinen kirjasto nähdäksesi valokuvasi ja videot",
|
||||||
|
"no_local_assets_found": "Paikallista sisältöä ei löytynyt tällä tarkistussummalla",
|
||||||
"no_locked_photos_message": "Kuvat ja videot lukitussa kansiossa ovat piilotettuja, eivätkä ne näy selatessasi tai etsiessäsi kirjastoasi.",
|
"no_locked_photos_message": "Kuvat ja videot lukitussa kansiossa ovat piilotettuja, eivätkä ne näy selatessasi tai etsiessäsi kirjastoasi.",
|
||||||
"no_name": "Ei nimeä",
|
"no_name": "Ei nimeä",
|
||||||
"no_notifications": "Ei ilmoituksia",
|
"no_notifications": "Ei ilmoituksia",
|
||||||
"no_people_found": "Ei vastaavia henkilöitä",
|
"no_people_found": "Ei vastaavia henkilöitä",
|
||||||
"no_places": "Ei paikkoja",
|
"no_places": "Ei paikkoja",
|
||||||
|
"no_remote_assets_found": "Etänä olevaa sisältöä ei löytynyt tällä tarkistussummalla",
|
||||||
"no_results": "Ei tuloksia",
|
"no_results": "Ei tuloksia",
|
||||||
"no_results_description": "Kokeile synonyymiä tai yleisempää avainsanaa",
|
"no_results_description": "Kokeile synonyymiä tai yleisempää avainsanaa",
|
||||||
"no_shared_albums_message": "Luo albumi, jotta voit jakaa kuvia ja videoita toisille",
|
"no_shared_albums_message": "Luo albumi, jotta voit jakaa kuvia ja videoita toisille",
|
||||||
"no_uploads_in_progress": "Ei käynnissä olevia latauksia",
|
"no_uploads_in_progress": "Ei käynnissä olevia latauksia",
|
||||||
|
"not_available": "N/A",
|
||||||
"not_in_any_album": "Ei yhdessäkään albumissa",
|
"not_in_any_album": "Ei yhdessäkään albumissa",
|
||||||
"not_selected": "Ei valittu",
|
"not_selected": "Ei valittu",
|
||||||
"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",
|
||||||
@@ -1397,6 +1451,9 @@
|
|||||||
"notifications": "Ilmoitukset",
|
"notifications": "Ilmoitukset",
|
||||||
"notifications_setting_description": "Hallitse ilmoituksia",
|
"notifications_setting_description": "Hallitse ilmoituksia",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Obtainium-määritystyökalu",
|
||||||
|
"obtainium_configurator_instructions": "Käytä Obtainiumia asentaaksesi ja päivittääksesi Android-sovelluksen suoraan Immichin GitHubin julkaisukanavasta. Luo API-avain ja valitse variantti luodaksesi Obtainium-määrityslinkin",
|
||||||
|
"ocr": "OCR (Tekstintunnistus)",
|
||||||
"official_immich_resources": "Viralliset Immich-resurssit",
|
"official_immich_resources": "Viralliset Immich-resurssit",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offset": "Ero",
|
"offset": "Ero",
|
||||||
@@ -1418,6 +1475,8 @@
|
|||||||
"open_the_search_filters": "Avaa hakusuodattimet",
|
"open_the_search_filters": "Avaa hakusuodattimet",
|
||||||
"options": "Vaihtoehdot",
|
"options": "Vaihtoehdot",
|
||||||
"or": "tai",
|
"or": "tai",
|
||||||
|
"organize_into_albums": "Järjestä albumeihin",
|
||||||
|
"organize_into_albums_description": "Siirrä olemassa olevat kuvat albumeihin käyttäen nykyisiä synkronointiasetuksia",
|
||||||
"organize_your_library": "Järjestele kirjastosi",
|
"organize_your_library": "Järjestele kirjastosi",
|
||||||
"original": "alkuperäinen",
|
"original": "alkuperäinen",
|
||||||
"other": "Muut",
|
"other": "Muut",
|
||||||
@@ -1463,7 +1522,7 @@
|
|||||||
"permanent_deletion_warning_setting_description": "Näytä varoitus, kun poistat kohteita pysyvästi",
|
"permanent_deletion_warning_setting_description": "Näytä varoitus, kun poistat kohteita pysyvästi",
|
||||||
"permanently_delete": "Poista pysyvästi",
|
"permanently_delete": "Poista pysyvästi",
|
||||||
"permanently_delete_assets_count": "Poista pysyvästi {count, plural, one {kohde} other {kohteita}}",
|
"permanently_delete_assets_count": "Poista pysyvästi {count, plural, one {kohde} other {kohteita}}",
|
||||||
"permanently_delete_assets_prompt": "Haluatko varmasti poistaa pysyvästi {count, plural, one {tämän kohteen?} other {nämä <b>#</b> kohteet?}} Tämä poistaa myös {count, plural, one {sen} other {ne}} kaikista albumeista.",
|
"permanently_delete_assets_prompt": "Haluatko varmasti poistaa pysyvästi {count, plural, one {tämän kohteen?} other {nämä <b>#</b> kohteet?}} Tämä poistaa {count, plural, one {sen} other {ne}} myös kaikista albumeista.",
|
||||||
"permanently_deleted_asset": "Media poistettu pysyvästi",
|
"permanently_deleted_asset": "Media poistettu pysyvästi",
|
||||||
"permanently_deleted_assets_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
|
"permanently_deleted_assets_count": "{count, plural, one {# media} other {# mediaa}} poistettu pysyvästi",
|
||||||
"permission": "Käyttöoikeus",
|
"permission": "Käyttöoikeus",
|
||||||
@@ -1499,10 +1558,14 @@
|
|||||||
"play_memories": "Toista muistot",
|
"play_memories": "Toista muistot",
|
||||||
"play_motion_photo": "Toista Liikekuva",
|
"play_motion_photo": "Toista Liikekuva",
|
||||||
"play_or_pause_video": "Toista tai keskeytä video",
|
"play_or_pause_video": "Toista tai keskeytä video",
|
||||||
|
"play_original_video": "Toista alkuperäinen video",
|
||||||
|
"play_original_video_setting_description": "Suosi alkuperäisten videoiden toistoa transkoodattujen videoiden sijaan. Jos alkuperäinen tiedosto ei ole yhteensopiva, se ei välttämättä toistu oikein.",
|
||||||
|
"play_transcoded_video": "Toista transkoodattu video",
|
||||||
"please_auth_to_access": "Ole hyvä ja kirjaudu sisään",
|
"please_auth_to_access": "Ole hyvä ja kirjaudu sisään",
|
||||||
"port": "Portti",
|
"port": "Portti",
|
||||||
"preferences_settings_subtitle": "Hallitse sovelluksen asetuksia",
|
"preferences_settings_subtitle": "Hallitse sovelluksen asetuksia",
|
||||||
"preferences_settings_title": "Asetukset",
|
"preferences_settings_title": "Asetukset",
|
||||||
|
"preparing": "Valmistellaan",
|
||||||
"preset": "Asetus",
|
"preset": "Asetus",
|
||||||
"preview": "Esikatselu",
|
"preview": "Esikatselu",
|
||||||
"previous": "Edellinen",
|
"previous": "Edellinen",
|
||||||
@@ -1515,12 +1578,9 @@
|
|||||||
"privacy": "Tietosuoja",
|
"privacy": "Tietosuoja",
|
||||||
"profile": "Profiili",
|
"profile": "Profiili",
|
||||||
"profile_drawer_app_logs": "Lokit",
|
"profile_drawer_app_logs": "Lokit",
|
||||||
"profile_drawer_client_out_of_date_major": "Sovelluksen mobiiliversio on vanhentunut. Päivitä viimeisimpään merkittävään versioon.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "Sovelluksen mobiiliversio on vanhentunut. Päivitä viimeisimpään versioon.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Asiakasohjelma ja palvelin ovat ajan tasalla",
|
"profile_drawer_client_server_up_to_date": "Asiakasohjelma ja palvelin ovat ajan tasalla",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_server_out_of_date_major": "Palvelimen ohjelmistoversio on vanhentunut. Päivitä viimeisimpään merkittävään versioon.",
|
"profile_drawer_readonly_mode": "Muokkaus on estetty. Paina käyttäjäkuvaketta pitkään palataksesi muokkaustilaan.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Palvelimen ohjelmistoversio on vanhentunut. Päivitä viimeisimpään versioon.",
|
|
||||||
"profile_image_of_user": "Käyttäjän {user} profiilikuva",
|
"profile_image_of_user": "Käyttäjän {user} profiilikuva",
|
||||||
"profile_picture_set": "Profiilikuva asetettu.",
|
"profile_picture_set": "Profiilikuva asetettu.",
|
||||||
"public_album": "Julkinen albumi",
|
"public_album": "Julkinen albumi",
|
||||||
@@ -1557,6 +1617,7 @@
|
|||||||
"purchase_server_description_2": "Tukijan tila",
|
"purchase_server_description_2": "Tukijan tila",
|
||||||
"purchase_server_title": "Palvelin",
|
"purchase_server_title": "Palvelin",
|
||||||
"purchase_settings_server_activated": "Palvelimen tuoteavainta hallinnoi ylläpitäjä",
|
"purchase_settings_server_activated": "Palvelimen tuoteavainta hallinnoi ylläpitäjä",
|
||||||
|
"query_asset_id": "Kysy sisällön ID:tä",
|
||||||
"queue_status": "Jonossa {count}/{total}",
|
"queue_status": "Jonossa {count}/{total}",
|
||||||
"rating": "Tähtiarvostelu",
|
"rating": "Tähtiarvostelu",
|
||||||
"rating_clear": "Tyhjennä arvostelu",
|
"rating_clear": "Tyhjennä arvostelu",
|
||||||
@@ -1564,6 +1625,9 @@
|
|||||||
"rating_description": "Näytä EXIF-arvosana lisätietopaneelissa",
|
"rating_description": "Näytä EXIF-arvosana lisätietopaneelissa",
|
||||||
"reaction_options": "Reaktioasetukset",
|
"reaction_options": "Reaktioasetukset",
|
||||||
"read_changelog": "Lue muutosloki",
|
"read_changelog": "Lue muutosloki",
|
||||||
|
"readonly_mode_disabled": "Muokkaustila päällä",
|
||||||
|
"readonly_mode_enabled": "Muokkaustila pois päältä",
|
||||||
|
"ready_for_upload": "Valmis lähetystä varten",
|
||||||
"reassign": "Määritä uudelleen",
|
"reassign": "Määritä uudelleen",
|
||||||
"reassigned_assets_to_existing_person": "Uudelleen määritetty {count, plural, one {# kohde} other {# kohdetta}} {name, select, null {olemassa olevalle henkilölle} other {{name}}}",
|
"reassigned_assets_to_existing_person": "Uudelleen määritetty {count, plural, one {# kohde} other {# kohdetta}} {name, select, null {olemassa olevalle henkilölle} other {{name}}}",
|
||||||
"reassigned_assets_to_new_person": "Määritetty {count, plural, one {# media} other {# mediaa}} uudelle henkilölle",
|
"reassigned_assets_to_new_person": "Määritetty {count, plural, one {# media} other {# mediaa}} uudelle henkilölle",
|
||||||
@@ -1588,6 +1652,7 @@
|
|||||||
"regenerating_thumbnails": "Regeneroidaan pikkukuvia",
|
"regenerating_thumbnails": "Regeneroidaan pikkukuvia",
|
||||||
"remote": "Etä",
|
"remote": "Etä",
|
||||||
"remote_assets": "Etäkohteet",
|
"remote_assets": "Etäkohteet",
|
||||||
|
"remote_media_summary": "Yhteenveto etänä olevasta mediasta",
|
||||||
"remove": "Poista",
|
"remove": "Poista",
|
||||||
"remove_assets_album_confirmation": "Haluatko varmasti poistaa {count, plural, one {# median} other {# mediaa}} albumista?",
|
"remove_assets_album_confirmation": "Haluatko varmasti poistaa {count, plural, one {# median} other {# mediaa}} albumista?",
|
||||||
"remove_assets_shared_link_confirmation": "Haluatko varmasti poistaa {count, plural, one {# median} other {# mediaa}} tästä jakolinkistä?",
|
"remove_assets_shared_link_confirmation": "Haluatko varmasti poistaa {count, plural, one {# median} other {# mediaa}} tästä jakolinkistä?",
|
||||||
@@ -1632,6 +1697,7 @@
|
|||||||
"reset_sqlite_confirmation": "Haluatko varmasti nollata SQLite tietokannan? Sinun tulee kirjautua sovelluksesta ulos ja takaisin sisään uudelleensynkronoidaksesi datan",
|
"reset_sqlite_confirmation": "Haluatko varmasti nollata SQLite tietokannan? Sinun tulee kirjautua sovelluksesta ulos ja takaisin sisään uudelleensynkronoidaksesi datan",
|
||||||
"reset_sqlite_success": "SQLite Tietokanta nollattu onnistuneesti",
|
"reset_sqlite_success": "SQLite Tietokanta nollattu onnistuneesti",
|
||||||
"reset_to_default": "Palauta oletusasetukset",
|
"reset_to_default": "Palauta oletusasetukset",
|
||||||
|
"resolution": "Resoluutio",
|
||||||
"resolve_duplicates": "Ratkaise kaksoiskappaleet",
|
"resolve_duplicates": "Ratkaise kaksoiskappaleet",
|
||||||
"resolved_all_duplicates": "Kaikki kaksoiskappaleet selvitetty",
|
"resolved_all_duplicates": "Kaikki kaksoiskappaleet selvitetty",
|
||||||
"restore": "Palauta",
|
"restore": "Palauta",
|
||||||
@@ -1640,6 +1706,7 @@
|
|||||||
"restore_user": "Palauta käyttäjä",
|
"restore_user": "Palauta käyttäjä",
|
||||||
"restored_asset": "Palautettu media",
|
"restored_asset": "Palautettu media",
|
||||||
"resume": "Jatka",
|
"resume": "Jatka",
|
||||||
|
"resume_paused_jobs": "Jatka {count, plural, one {# paused job} other {# paused jobs}}",
|
||||||
"retry_upload": "Yritä latausta uudelleen",
|
"retry_upload": "Yritä latausta uudelleen",
|
||||||
"review_duplicates": "Tarkastele kaksoiskappaleita",
|
"review_duplicates": "Tarkastele kaksoiskappaleita",
|
||||||
"review_large_files": "Tarkista suuret tiedostot",
|
"review_large_files": "Tarkista suuret tiedostot",
|
||||||
@@ -1665,6 +1732,9 @@
|
|||||||
"search_by_description_example": "Vaelluspäivä Sapassa",
|
"search_by_description_example": "Vaelluspäivä Sapassa",
|
||||||
"search_by_filename": "Hae tiedostonimen tai -päätteen mukaan",
|
"search_by_filename": "Hae tiedostonimen tai -päätteen mukaan",
|
||||||
"search_by_filename_example": "esim. IMG_1234.JPG tai PNG",
|
"search_by_filename_example": "esim. IMG_1234.JPG tai PNG",
|
||||||
|
"search_by_ocr": "Etsi tekstintunnistuksella (OCR)",
|
||||||
|
"search_by_ocr_example": "Latte",
|
||||||
|
"search_camera_lens_model": "Etsi linssin mallia...",
|
||||||
"search_camera_make": "Etsi kameramerkkiä...",
|
"search_camera_make": "Etsi kameramerkkiä...",
|
||||||
"search_camera_model": "Etsi kameramallia...",
|
"search_camera_model": "Etsi kameramallia...",
|
||||||
"search_city": "Etsi kaupunkia...",
|
"search_city": "Etsi kaupunkia...",
|
||||||
@@ -1681,6 +1751,7 @@
|
|||||||
"search_filter_location_title": "Valitse sijainti",
|
"search_filter_location_title": "Valitse sijainti",
|
||||||
"search_filter_media_type": "Mediatyyppi",
|
"search_filter_media_type": "Mediatyyppi",
|
||||||
"search_filter_media_type_title": "Valitse mediatyyppi",
|
"search_filter_media_type_title": "Valitse mediatyyppi",
|
||||||
|
"search_filter_ocr": "Hae tekstintunnistuksella (OCR)",
|
||||||
"search_filter_people_title": "Valitse ihmiset",
|
"search_filter_people_title": "Valitse ihmiset",
|
||||||
"search_for": "Hae",
|
"search_for": "Hae",
|
||||||
"search_for_existing_person": "Etsi olemassa olevaa henkilöä",
|
"search_for_existing_person": "Etsi olemassa olevaa henkilöä",
|
||||||
@@ -1704,7 +1775,7 @@
|
|||||||
"search_places": "Etsi paikkoja",
|
"search_places": "Etsi paikkoja",
|
||||||
"search_rating": "Hae luokituksen mukaan...",
|
"search_rating": "Hae luokituksen mukaan...",
|
||||||
"search_result_page_new_search_hint": "Uusi haku",
|
"search_result_page_new_search_hint": "Uusi haku",
|
||||||
"search_settings": "Hakuasetukset",
|
"search_settings": "Etsi asetuksia",
|
||||||
"search_state": "Etsi maakuntaa...",
|
"search_state": "Etsi maakuntaa...",
|
||||||
"search_suggestion_list_smart_search_hint_1": "Älykäs haku on oletuksena käytössä. Käytä metatietojen etsimiseen syntaksia ",
|
"search_suggestion_list_smart_search_hint_1": "Älykäs haku on oletuksena käytössä. Käytä metatietojen etsimiseen syntaksia ",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:hakusana",
|
"search_suggestion_list_smart_search_hint_2": "m:hakusana",
|
||||||
@@ -1716,7 +1787,7 @@
|
|||||||
"second": "Toinen",
|
"second": "Toinen",
|
||||||
"see_all_people": "Näytä kaikki henkilöt",
|
"see_all_people": "Näytä kaikki henkilöt",
|
||||||
"select": "Valitse",
|
"select": "Valitse",
|
||||||
"select_album_cover": "Valitse albmin kansi",
|
"select_album_cover": "Valitse albumin kansi",
|
||||||
"select_all": "Valitse kaikki",
|
"select_all": "Valitse kaikki",
|
||||||
"select_all_duplicates": "Valitse kaikki kaksoiskappaleet",
|
"select_all_duplicates": "Valitse kaikki kaksoiskappaleet",
|
||||||
"select_all_in": "Valitse kaikki {group}",
|
"select_all_in": "Valitse kaikki {group}",
|
||||||
@@ -1733,6 +1804,7 @@
|
|||||||
"select_user_for_sharing_page_err_album": "Albumin luonti epäonnistui",
|
"select_user_for_sharing_page_err_album": "Albumin luonti epäonnistui",
|
||||||
"selected": "Valittu",
|
"selected": "Valittu",
|
||||||
"selected_count": "{count, plural, other {# valittu}}",
|
"selected_count": "{count, plural, other {# valittu}}",
|
||||||
|
"selected_gps_coordinates": "Valitut GPS-koordinaatit",
|
||||||
"send_message": "Lähetä viesti",
|
"send_message": "Lähetä viesti",
|
||||||
"send_welcome_email": "Lähetä tervetuloviesti",
|
"send_welcome_email": "Lähetä tervetuloviesti",
|
||||||
"server_endpoint": "Palvelinosoite",
|
"server_endpoint": "Palvelinosoite",
|
||||||
@@ -1742,6 +1814,7 @@
|
|||||||
"server_online": "Palvelin Online-tilassa",
|
"server_online": "Palvelin Online-tilassa",
|
||||||
"server_privacy": "Palvelimen tietosuoja",
|
"server_privacy": "Palvelimen tietosuoja",
|
||||||
"server_stats": "Palvelimen tilastot",
|
"server_stats": "Palvelimen tilastot",
|
||||||
|
"server_update_available": "Palvelimeen on saatavilla päivitys",
|
||||||
"server_version": "Palvelimen versio",
|
"server_version": "Palvelimen versio",
|
||||||
"set": "Aseta",
|
"set": "Aseta",
|
||||||
"set_as_album_cover": "Aseta albumin kanneksi",
|
"set_as_album_cover": "Aseta albumin kanneksi",
|
||||||
@@ -1770,11 +1843,13 @@
|
|||||||
"setting_notifications_subtitle": "Ilmoitusasetusten määrittely",
|
"setting_notifications_subtitle": "Ilmoitusasetusten määrittely",
|
||||||
"setting_notifications_total_progress_subtitle": "Lähetyksen yleinen edistyminen (kohteita lähetetty/yhteensä)",
|
"setting_notifications_total_progress_subtitle": "Lähetyksen yleinen edistyminen (kohteita lähetetty/yhteensä)",
|
||||||
"setting_notifications_total_progress_title": "Näytä taustavarmuuskopioinnin kokonaisedistyminen",
|
"setting_notifications_total_progress_title": "Näytä taustavarmuuskopioinnin kokonaisedistyminen",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Aloita videoiden toistaminen automaattisesti kun ne avataan",
|
||||||
|
"setting_video_viewer_auto_play_title": "Toista videoita automaattisesti",
|
||||||
"setting_video_viewer_looping_title": "Silmukkatoisto",
|
"setting_video_viewer_looping_title": "Silmukkatoisto",
|
||||||
"setting_video_viewer_original_video_subtitle": "Kun toistat videota palvelimelta, toista alkuperäinen, vaikka transkoodattu versio olisi saatavilla. Tämä voi johtaa puskurointiin. Paikalliset videot toistetaan aina alkuperäislaadulla.",
|
"setting_video_viewer_original_video_subtitle": "Kun toistat videota palvelimelta, toista alkuperäinen, vaikka transkoodattu versio olisi saatavilla. Tämä voi johtaa puskurointiin. Paikalliset videot toistetaan aina alkuperäislaadulla.",
|
||||||
"setting_video_viewer_original_video_title": "Pakota alkuperäinen video",
|
"setting_video_viewer_original_video_title": "Pakota alkuperäinen video",
|
||||||
"settings": "Asetukset",
|
"settings": "Asetukset",
|
||||||
"settings_require_restart": "Käynnistä Immich uudelleen ottaaksesti tämän asetuksen käyttöön",
|
"settings_require_restart": "Käynnistä Immich uudelleen ottaaksesi tämä asetus käyttöön",
|
||||||
"settings_saved": "Asetukset tallennettu",
|
"settings_saved": "Asetukset tallennettu",
|
||||||
"setup_pin_code": "Määritä PIN-koodi",
|
"setup_pin_code": "Määritä PIN-koodi",
|
||||||
"share": "Jaa",
|
"share": "Jaa",
|
||||||
@@ -1840,7 +1915,7 @@
|
|||||||
"sharing_sidebar_description": "Näytä jakamislinkki sivupalkissa",
|
"sharing_sidebar_description": "Näytä jakamislinkki sivupalkissa",
|
||||||
"sharing_silver_appbar_create_shared_album": "Luo jaettu albumi",
|
"sharing_silver_appbar_create_shared_album": "Luo jaettu albumi",
|
||||||
"sharing_silver_appbar_share_partner": "Jaa kumppanille",
|
"sharing_silver_appbar_share_partner": "Jaa kumppanille",
|
||||||
"shift_to_permanent_delete": "Paina ⇧ poistaaksesi median pysyvästi",
|
"shift_to_permanent_delete": "Paina ⇧ poistaaksesi media pysyvästi",
|
||||||
"show_album_options": "Näytä albumin asetukset",
|
"show_album_options": "Näytä albumin asetukset",
|
||||||
"show_albums": "Näytä albumit",
|
"show_albums": "Näytä albumit",
|
||||||
"show_all_people": "Näytä kaikki henkilöt",
|
"show_all_people": "Näytä kaikki henkilöt",
|
||||||
@@ -1861,6 +1936,7 @@
|
|||||||
"show_slideshow_transition": "Näytä diaesitys siirtymä",
|
"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",
|
||||||
|
"show_text_search_menu": "Näytä tekstihakuvalikko",
|
||||||
"shuffle": "Sekoita",
|
"shuffle": "Sekoita",
|
||||||
"sidebar": "Sivupalkki",
|
"sidebar": "Sivupalkki",
|
||||||
"sidebar_display_description": "Näytä linkki näkymään sivupalkissa",
|
"sidebar_display_description": "Näytä linkki näkymään sivupalkissa",
|
||||||
@@ -1891,6 +1967,7 @@
|
|||||||
"stacktrace": "Vianetsintätiedot",
|
"stacktrace": "Vianetsintätiedot",
|
||||||
"start": "Aloita",
|
"start": "Aloita",
|
||||||
"start_date": "Alkupäivä",
|
"start_date": "Alkupäivä",
|
||||||
|
"start_date_before_end_date": "Aloituspäivämäärän pitää olla ennen lopetuspäivämäärää",
|
||||||
"state": "Maakunta",
|
"state": "Maakunta",
|
||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
"stop_casting": "Lopeta suoratoisto",
|
"stop_casting": "Lopeta suoratoisto",
|
||||||
@@ -1915,6 +1992,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Synkronoi kaikki ladatut videot ja valokuvat valittuihin varmuuskopioalbumeihin",
|
"sync_albums_manual_subtitle": "Synkronoi kaikki ladatut videot ja valokuvat valittuihin varmuuskopioalbumeihin",
|
||||||
"sync_local": "Synkronoi paikallinen",
|
"sync_local": "Synkronoi paikallinen",
|
||||||
"sync_remote": "Synkronoi etä",
|
"sync_remote": "Synkronoi etä",
|
||||||
|
"sync_status": "Synkronoinnin status",
|
||||||
|
"sync_status_subtitle": "Näytä ja hallinnoi synkronointijärjestelmää",
|
||||||
"sync_upload_album_setting_subtitle": "Luo ja lataa valokuvasi ja videosi valittuihin albumeihin Immichissä",
|
"sync_upload_album_setting_subtitle": "Luo ja lataa valokuvasi ja videosi valittuihin albumeihin Immichissä",
|
||||||
"tag": "Tunniste",
|
"tag": "Tunniste",
|
||||||
"tag_assets": "Lisää tunnisteita",
|
"tag_assets": "Lisää tunnisteita",
|
||||||
@@ -1945,6 +2024,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Ota kolmivaiheinen lataus käyttöön",
|
"theme_setting_three_stage_loading_title": "Ota kolmivaiheinen lataus käyttöön",
|
||||||
"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",
|
"third_party_resources": "Kolmannen osapuolen resurssit",
|
||||||
|
"time": "Aika",
|
||||||
"time_based_memories": "Aikaan perustuvat muistot",
|
"time_based_memories": "Aikaan perustuvat muistot",
|
||||||
"timeline": "Aikajana",
|
"timeline": "Aikajana",
|
||||||
"timezone": "Aikavyöhyke",
|
"timezone": "Aikavyöhyke",
|
||||||
@@ -1952,7 +2032,9 @@
|
|||||||
"to_change_password": "Vaihda salasana",
|
"to_change_password": "Vaihda salasana",
|
||||||
"to_favorite": "Aseta suosikiksi",
|
"to_favorite": "Aseta suosikiksi",
|
||||||
"to_login": "Kirjaudu sisään",
|
"to_login": "Kirjaudu sisään",
|
||||||
|
"to_multi_select": "usean valitsemiseksi",
|
||||||
"to_parent": "Siirry vanhempaan",
|
"to_parent": "Siirry vanhempaan",
|
||||||
|
"to_select": "valitsemiseksi",
|
||||||
"to_trash": "Roskakoriin",
|
"to_trash": "Roskakoriin",
|
||||||
"toggle_settings": "Määritä asetukset",
|
"toggle_settings": "Määritä asetukset",
|
||||||
"total": "Yhteensä",
|
"total": "Yhteensä",
|
||||||
@@ -1960,7 +2042,7 @@
|
|||||||
"trash": "Roskakori",
|
"trash": "Roskakori",
|
||||||
"trash_action_prompt": "{count} siirretty roskakoriin",
|
"trash_action_prompt": "{count} siirretty roskakoriin",
|
||||||
"trash_all": "Vie kaikki roskakoriin",
|
"trash_all": "Vie kaikki roskakoriin",
|
||||||
"trash_count": "Roskakori {count, number}",
|
"trash_count": "Vie {count, number} roskakoriin",
|
||||||
"trash_delete_asset": "Poista / vie roskakoriin",
|
"trash_delete_asset": "Poista / vie roskakoriin",
|
||||||
"trash_emptied": "Roskakori tyhjennetty",
|
"trash_emptied": "Roskakori tyhjennetty",
|
||||||
"trash_no_results_message": "Roskakorissa olevat kuvat ja videot näytetään täällä.",
|
"trash_no_results_message": "Roskakorissa olevat kuvat ja videot näytetään täällä.",
|
||||||
@@ -1972,8 +2054,10 @@
|
|||||||
"trash_page_select_assets_btn": "Valitse kohteet",
|
"trash_page_select_assets_btn": "Valitse kohteet",
|
||||||
"trash_page_title": "Roskakori ({count})",
|
"trash_page_title": "Roskakori ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Roskakorin kohteet poistetaan pysyvästi {days, plural, one {# päivän} other {# päivän}} päästä.",
|
"trashed_items_will_be_permanently_deleted_after": "Roskakorin kohteet poistetaan pysyvästi {days, plural, one {# päivän} other {# päivän}} päästä.",
|
||||||
|
"troubleshoot": "Vianetsintä",
|
||||||
"type": "Tyyppi",
|
"type": "Tyyppi",
|
||||||
"unable_to_change_pin_code": "PIN-koodin vaihtaminen epäonnistui",
|
"unable_to_change_pin_code": "PIN-koodin vaihtaminen epäonnistui",
|
||||||
|
"unable_to_check_version": "Sovelluksen tai palvelimen versiota ei voitu tarkistaa",
|
||||||
"unable_to_setup_pin_code": "PIN-koodin määrittäminen epäonnistui",
|
"unable_to_setup_pin_code": "PIN-koodin määrittäminen epäonnistui",
|
||||||
"unarchive": "Palauta arkistosta",
|
"unarchive": "Palauta arkistosta",
|
||||||
"unarchive_action_prompt": "{count} poistettu arkistosta",
|
"unarchive_action_prompt": "{count} poistettu arkistosta",
|
||||||
@@ -2002,6 +2086,7 @@
|
|||||||
"unstacked_assets_count": "Poistettu pinosta {count, plural, one {# kohde} other {# kohdetta}}",
|
"unstacked_assets_count": "Poistettu pinosta {count, plural, one {# kohde} other {# kohdetta}}",
|
||||||
"untagged": "Ilman tunnistetta",
|
"untagged": "Ilman tunnistetta",
|
||||||
"up_next": "Seuraavaksi",
|
"up_next": "Seuraavaksi",
|
||||||
|
"update_location_action_prompt": "Päivitä {count} kohteen sijaintia:",
|
||||||
"updated_at": "Päivitetty",
|
"updated_at": "Päivitetty",
|
||||||
"updated_password": "Salasana päivitetty",
|
"updated_password": "Salasana päivitetty",
|
||||||
"upload": "Siirrä palvelimelle",
|
"upload": "Siirrä palvelimelle",
|
||||||
@@ -2068,6 +2153,7 @@
|
|||||||
"view_next_asset": "Näytä seuraava",
|
"view_next_asset": "Näytä seuraava",
|
||||||
"view_previous_asset": "Näytä edellinen",
|
"view_previous_asset": "Näytä edellinen",
|
||||||
"view_qr_code": "Näytä QR-koodi",
|
"view_qr_code": "Näytä QR-koodi",
|
||||||
|
"view_similar_photos": "Näytä samankaltaiset kuvat",
|
||||||
"view_stack": "Näytä pinona",
|
"view_stack": "Näytä pinona",
|
||||||
"view_user": "Näytä käyttäjä",
|
"view_user": "Näytä käyttäjä",
|
||||||
"viewer_remove_from_stack": "Poista pinosta",
|
"viewer_remove_from_stack": "Poista pinosta",
|
||||||
@@ -2086,5 +2172,6 @@
|
|||||||
"yes": "Kyllä",
|
"yes": "Kyllä",
|
||||||
"you_dont_have_any_shared_links": "Sinulla ei ole jaettuja linkkejä",
|
"you_dont_have_any_shared_links": "Sinulla ei ole jaettuja linkkejä",
|
||||||
"your_wifi_name": "Wi-Fi-verkkosi nimi",
|
"your_wifi_name": "Wi-Fi-verkkosi nimi",
|
||||||
"zoom_image": "Zoomaa kuvaa"
|
"zoom_image": "Zoomaa kuvaa",
|
||||||
|
"zoom_to_bounds": "Zoomaa reunoihin"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
"add_to_album": "Idagdag sa album",
|
"add_to_album": "Idagdag sa album",
|
||||||
"add_to_album_bottom_sheet_added": "Naidagdag sa {album}",
|
"add_to_album_bottom_sheet_added": "Naidagdag sa {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Nasa {album} na",
|
"add_to_album_bottom_sheet_already_exists": "Nasa {album} na",
|
||||||
|
"add_to_albums": "Idagdag sa mga album",
|
||||||
|
"add_to_albums_count": "Idagdag sa mga album ({count})",
|
||||||
"add_to_shared_album": "Idagdag sa shared album",
|
"add_to_shared_album": "Idagdag sa shared album",
|
||||||
"add_url": "Magdagdag ng URL",
|
"add_url": "Magdagdag ng URL",
|
||||||
"added_to_archive": "Naidagdag sa archive",
|
"added_to_archive": "Naidagdag sa archive",
|
||||||
@@ -67,16 +69,18 @@
|
|||||||
},
|
},
|
||||||
"album_user_left": "Umalis sa {album}",
|
"album_user_left": "Umalis sa {album}",
|
||||||
"all_albums": "Lahat ng albums",
|
"all_albums": "Lahat ng albums",
|
||||||
|
"all_people": "Lahat ng tao",
|
||||||
|
"all_videos": "Lahat ng video",
|
||||||
"api_key_description": "Isang beses lamang na ipapakita itong value. Siguraduhin na ikopya itong value bago iclose ang window na ito.",
|
"api_key_description": "Isang beses lamang na ipapakita itong value. Siguraduhin na ikopya itong value bago iclose ang window na ito.",
|
||||||
"are_these_the_same_person": "Itong tao na ito ay parehas?",
|
"are_these_the_same_person": "Itong tao na ito ay parehas?",
|
||||||
"asset_adding_to_album": "Dinadagdag sa album...",
|
"asset_adding_to_album": "Dinadagdag sa album...",
|
||||||
"asset_filename_is_offline": "Offline ang asset {filename}",
|
"asset_filename_is_offline": "Offline ang asset {filename}",
|
||||||
"asset_uploading": "Ina-upload...",
|
"asset_uploading": "Ina-upload...",
|
||||||
|
"create_album_page_untitled": "Walang pamagat",
|
||||||
"documentation": "Dokumentasyion",
|
"documentation": "Dokumentasyion",
|
||||||
"done": "Tapos na",
|
"done": "Tapos na",
|
||||||
"download": "I-download",
|
"download": "I-download",
|
||||||
"edit": "I-edit",
|
"edit": "I-edit",
|
||||||
"edited": "Inedit",
|
|
||||||
"editor_close_without_save_title": "Isara ang editor?",
|
"editor_close_without_save_title": "Isara ang editor?",
|
||||||
"explore": "I-explore",
|
"explore": "I-explore",
|
||||||
"export": "I-export",
|
"export": "I-export",
|
||||||
|
|||||||
81
i18n/fr.json
81
i18n/fr.json
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "Ajouter aux albums",
|
"add_to_albums": "Ajouter aux albums",
|
||||||
"add_to_albums_count": "Ajouter aux albums ({count})",
|
"add_to_albums_count": "Ajouter aux albums ({count})",
|
||||||
"add_to_shared_album": "Ajouter à l'album partagé",
|
"add_to_shared_album": "Ajouter à l'album partagé",
|
||||||
|
"add_upload_to_stack": "Ajouter les éléments téléversés à la pile",
|
||||||
"add_url": "Ajouter l'URL",
|
"add_url": "Ajouter l'URL",
|
||||||
"added_to_archive": "Ajouté à l'archive",
|
"added_to_archive": "Ajouté à l'archive",
|
||||||
"added_to_favorites": "Ajouté aux favoris",
|
"added_to_favorites": "Ajouté aux favoris",
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
"library_settings_description": "Gestion des paramètres des bibliothèques externes",
|
"library_settings_description": "Gestion des paramètres des bibliothèques externes",
|
||||||
"library_tasks_description": "Scanner les bibliothèques externes pour les nouveaux et/ou les éléments modifiés",
|
"library_tasks_description": "Scanner les bibliothèques externes pour les nouveaux et/ou les éléments modifiés",
|
||||||
"library_watching_enable_description": "Surveiller les modifications de fichiers dans les bibliothèques externes",
|
"library_watching_enable_description": "Surveiller les modifications de fichiers dans les bibliothèques externes",
|
||||||
"library_watching_settings": "Surveillance de bibliothèque (EXPÉRIMENTAL)",
|
"library_watching_settings": "Surveillance de bibliothèque [EXPÉRIMENTAL]",
|
||||||
"library_watching_settings_description": "Surveiller automatiquement les fichiers modifiés",
|
"library_watching_settings_description": "Surveiller automatiquement les fichiers modifiés",
|
||||||
"logging_enable_description": "Activer la journalisation",
|
"logging_enable_description": "Activer la journalisation",
|
||||||
"logging_level_description": "Niveau de journalisation lorsque cette option est activée.",
|
"logging_level_description": "Niveau de journalisation lorsque cette option est activée.",
|
||||||
@@ -153,6 +154,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "Score de confiance minimal pour qu'un visage soit détecté, allant de 0 à 1. Des valeurs plus basses détecteront plus de visages mais peuvent entraîner des faux positifs.",
|
"machine_learning_min_detection_score_description": "Score de confiance minimal pour qu'un visage soit détecté, allant de 0 à 1. Des valeurs plus basses détecteront plus de visages mais peuvent entraîner des faux positifs.",
|
||||||
"machine_learning_min_recognized_faces": "Nombre minimal de visages reconnus",
|
"machine_learning_min_recognized_faces": "Nombre minimal de visages reconnus",
|
||||||
"machine_learning_min_recognized_faces_description": "Nombre minimal de visages reconnus pour qu'une personne soit créée. Augmenter cette valeur rend la reconnaissance faciale plus précise au détriment d'augmenter la chance qu'un visage ne soit pas attribué à une personne.",
|
"machine_learning_min_recognized_faces_description": "Nombre minimal de visages reconnus pour qu'une personne soit créée. Augmenter cette valeur rend la reconnaissance faciale plus précise au détriment d'augmenter la chance qu'un visage ne soit pas attribué à une personne.",
|
||||||
|
"machine_learning_ocr": "OCR",
|
||||||
|
"machine_learning_ocr_description": "Utiliser l'apprentissage automatique pour reconnaître le texte dans les images",
|
||||||
|
"machine_learning_ocr_enabled": "Activer la reconnaissance de caractères",
|
||||||
|
"machine_learning_ocr_enabled_description": "Si désactivé, la reconnaissance de texte ne s'appliquera pas aux images.",
|
||||||
|
"machine_learning_ocr_max_resolution": "Résolution maximale",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "Les prévisualisations au-dessus de cette résolution seront retaillées en conservant leur ratio. Des valeurs plus grandes sont plus précises, mais sont plus lentes et utilisent plus de mémoire.",
|
||||||
|
"machine_learning_ocr_min_detection_score": "Score minimum de détection",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "Score de confiance minimum pour la détection du textew entre 0 et 1. Des valeurs faibles permettront de reconnaître davantage de texte mais peuvent entraîner des faux positifs.",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "Score de reconnaissance minimum",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "Score de confiance minimum pour la reconnaissance du texte, entre 0 et 1. Des valeurs faible permettront de reconnaître davantage de texte, mais peuvent entraîner des faux positifs.",
|
||||||
|
"machine_learning_ocr_model": "Modèle de Reconnaissance Optique de Caractères",
|
||||||
|
"machine_learning_ocr_model_description": "Les modèles du serveur sont plus précis que les modèles mobiles, mais ils sont plus lents et utilisent plus de mémoire.",
|
||||||
"machine_learning_settings": "Paramètres d'apprentissage automatique",
|
"machine_learning_settings": "Paramètres d'apprentissage automatique",
|
||||||
"machine_learning_settings_description": "Gérer les fonctionnalités et les paramètres d'apprentissage automatique",
|
"machine_learning_settings_description": "Gérer les fonctionnalités et les paramètres d'apprentissage automatique",
|
||||||
"machine_learning_smart_search": "Recherche intelligente",
|
"machine_learning_smart_search": "Recherche intelligente",
|
||||||
@@ -210,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "Ignorer les erreurs de validation du certificat TLS (non recommandé)",
|
"notification_email_ignore_certificate_errors_description": "Ignorer les erreurs de validation du certificat TLS (non recommandé)",
|
||||||
"notification_email_password_description": "Mot de passe à utiliser lors de l'authentification avec le serveur de messagerie",
|
"notification_email_password_description": "Mot de passe à utiliser lors de l'authentification avec le serveur de messagerie",
|
||||||
"notification_email_port_description": "Port du serveur de messagerie (par exemple 25, 465 ou 587)",
|
"notification_email_port_description": "Port du serveur de messagerie (par exemple 25, 465 ou 587)",
|
||||||
|
"notification_email_secure": "SMTPS",
|
||||||
|
"notification_email_secure_description": "Utilise SMTPS (SMTP via TLS)",
|
||||||
"notification_email_sent_test_email_button": "Envoyer un courriel de test et enregistrer",
|
"notification_email_sent_test_email_button": "Envoyer un courriel de test et enregistrer",
|
||||||
"notification_email_setting_description": "Paramètres pour l'envoi de notifications par courriel",
|
"notification_email_setting_description": "Paramètres pour l'envoi de notifications par courriel",
|
||||||
"notification_email_test_email": "Envoyer un courriel de test",
|
"notification_email_test_email": "Envoyer un courriel de test",
|
||||||
@@ -242,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "Quota en Gio à utiliser lorsqu'aucune valeur n'est précisée.",
|
"oauth_storage_quota_default_description": "Quota en Gio à utiliser lorsqu'aucune valeur n'est précisée.",
|
||||||
"oauth_timeout": "Expiration de la durée de la requête",
|
"oauth_timeout": "Expiration de la durée de la requête",
|
||||||
"oauth_timeout_description": "Délai d'expiration des requêtes en millisecondes",
|
"oauth_timeout_description": "Délai d'expiration des requêtes en millisecondes",
|
||||||
|
"ocr_job_description": "Utiliser un modèle d'apprentissage automatique pour reconnaitre le texte dans les images",
|
||||||
"password_enable_description": "Connexion avec courriel et mot de passe",
|
"password_enable_description": "Connexion avec courriel et mot de passe",
|
||||||
"password_settings": "Connexion par mot de passe",
|
"password_settings": "Connexion par mot de passe",
|
||||||
"password_settings_description": "Gérer les paramètres de connexion par mot de passe",
|
"password_settings_description": "Gérer les paramètres de connexion par mot de passe",
|
||||||
@@ -304,7 +320,7 @@
|
|||||||
"transcoding_acceleration_api": "API d'accélération",
|
"transcoding_acceleration_api": "API d'accélération",
|
||||||
"transcoding_acceleration_api_description": "Il s'agit de l'API qui interagira avec votre appareil pour accélérer le transcodage. Ce paramètre fait au mieux : il basculera vers le transcodage logiciel en cas d'échec. Le codec vidéo VP9 peut fonctionner ou non selon votre matériel.",
|
"transcoding_acceleration_api_description": "Il s'agit de l'API qui interagira avec votre appareil pour accélérer le transcodage. Ce paramètre fait au mieux : il basculera vers le transcodage logiciel en cas d'échec. Le codec vidéo VP9 peut fonctionner ou non selon votre matériel.",
|
||||||
"transcoding_acceleration_nvenc": "NVENC (nécessite un GPU NVIDIA)",
|
"transcoding_acceleration_nvenc": "NVENC (nécessite un GPU NVIDIA)",
|
||||||
"transcoding_acceleration_qsv": "Quick Sync (nécessite un processeur Intel de 7ème génération ou plus)",
|
"transcoding_acceleration_qsv": "Quick Sync (nécessite un processeur Intel de 7ème génération ou supérieur)",
|
||||||
"transcoding_acceleration_rkmpp": "RKMPP (uniquement sur les SOCs Rockchip)",
|
"transcoding_acceleration_rkmpp": "RKMPP (uniquement sur les SOCs Rockchip)",
|
||||||
"transcoding_acceleration_vaapi": "VAAPI",
|
"transcoding_acceleration_vaapi": "VAAPI",
|
||||||
"transcoding_accepted_audio_codecs": "Codecs audio acceptés",
|
"transcoding_accepted_audio_codecs": "Codecs audio acceptés",
|
||||||
@@ -332,7 +348,7 @@
|
|||||||
"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.",
|
||||||
"transcoding_max_bitrate": "Débit binaire maximal",
|
"transcoding_max_bitrate": "Débit binaire maximal",
|
||||||
"transcoding_max_bitrate_description": "Définir un débit binaire maximal peut résulter en des fichiers de taille plus prédictible, au prix d'une légère perte en qualité. En 720p, les valeurs sont 2600 kbit/s pour du VP9 ou du HEVC ou 4500 kbit/s pour du H.264. Désactivé si le débit binaire est à 0.",
|
"transcoding_max_bitrate_description": "Définir un débit binaire maximal peut rendre la taille des fichiers plus prévisible, au prix d’une légère perte de qualité. En 720p, les valeurs typiques sont de 2600 kbit/s pour du VP9 ou du HEVC, ou de 4500 kbit/s pour du H.264. Désactivé si le débit binaire est fixé à 0. Lorsqu’aucune unité n’est spécifiée, k (pour kbit/s) est supposée ; ainsi, 5000, 5000k et 5M (pour Mbit/s) sont équivalents.",
|
||||||
"transcoding_max_keyframe_interval": "Intervalle maximal entre les images clés",
|
"transcoding_max_keyframe_interval": "Intervalle maximal entre les images clés",
|
||||||
"transcoding_max_keyframe_interval_description": "Définit la distance maximale de trames entre les images clés. Les valeurs plus basses diminuent l'efficacité de la compression, mais améliorent les temps de recherche et peuvent améliorer la qualité dans les scènes avec des mouvements rapides. Une valeur de 0 définit automatiquement ce paramètre.",
|
"transcoding_max_keyframe_interval_description": "Définit la distance maximale de trames entre les images clés. Les valeurs plus basses diminuent l'efficacité de la compression, mais améliorent les temps de recherche et peuvent améliorer la qualité dans les scènes avec des mouvements rapides. Une valeur de 0 définit automatiquement ce paramètre.",
|
||||||
"transcoding_optimal_description": "Les vidéos dont la résolution est supérieure à celle attendue ou celles qui ne sont pas dans un format accepté",
|
"transcoding_optimal_description": "Les vidéos dont la résolution est supérieure à celle attendue ou celles qui ne sont pas dans un format accepté",
|
||||||
@@ -350,7 +366,7 @@
|
|||||||
"transcoding_target_resolution": "Résolution cible",
|
"transcoding_target_resolution": "Résolution cible",
|
||||||
"transcoding_target_resolution_description": "Des résolutions plus élevées peuvent préserver plus de détails, mais prennent plus de temps à encoder, ont de plus grandes tailles de fichiers, et peuvent réduire la réactivité de l'application.",
|
"transcoding_target_resolution_description": "Des résolutions plus élevées peuvent préserver plus de détails, mais prennent plus de temps à encoder, ont de plus grandes tailles de fichiers, et peuvent réduire la réactivité de l'application.",
|
||||||
"transcoding_temporal_aq": "Quantification adaptative temporelle (temporal AQ)",
|
"transcoding_temporal_aq": "Quantification adaptative temporelle (temporal AQ)",
|
||||||
"transcoding_temporal_aq_description": "S'applique uniquement à NVENC. Améliore la qualité des scènes riches en détails et à faible mouvement. Peut ne pas être compatible avec les anciens appareils.",
|
"transcoding_temporal_aq_description": "S'applique uniquement à NVENC. La quantification adaptative temporelle améliore la qualité des scènes riches en détails et à faible mouvement. Peut ne pas être compatible avec les anciens appareils.",
|
||||||
"transcoding_threads": "Processus",
|
"transcoding_threads": "Processus",
|
||||||
"transcoding_threads_description": "Une valeur plus élevée entraîne un encodage plus rapide, mais laisse moins de place au serveur pour traiter d'autres tâches pendant son activité. Cette valeur ne doit pas être supérieure au nombre de cœurs de CPU. Une valeur égale à 0 maximise l'utilisation.",
|
"transcoding_threads_description": "Une valeur plus élevée entraîne un encodage plus rapide, mais laisse moins de place au serveur pour traiter d'autres tâches pendant son activité. Cette valeur ne doit pas être supérieure au nombre de cœurs de CPU. Une valeur égale à 0 maximise l'utilisation.",
|
||||||
"transcoding_tone_mapping": "Mappage tonal",
|
"transcoding_tone_mapping": "Mappage tonal",
|
||||||
@@ -401,11 +417,11 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des miniatures à partir de ressources locales. Activez ce paramètre pour charger des images externes à la place.",
|
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des miniatures à partir de ressources locales. Activez ce paramètre pour charger des images externes à la place.",
|
||||||
"advanced_settings_prefer_remote_title": "Préférer les images externes",
|
"advanced_settings_prefer_remote_title": "Préférer les images externes",
|
||||||
"advanced_settings_proxy_headers_subtitle": "Ajoutez des en-têtes personnalisés à chaque requête réseau",
|
"advanced_settings_proxy_headers_subtitle": "Ajoutez des en-têtes personnalisés à chaque requête réseau",
|
||||||
"advanced_settings_proxy_headers_title": "En-têtes de proxy",
|
"advanced_settings_proxy_headers_title": "En-têtes de proxy personnalisés [EXPÉRIMENTAL]",
|
||||||
"advanced_settings_readonly_mode_subtitle": "Active le mode lecture seule, où les photos peuvent seulement être visualisées, et les actions comme les sélections multiples, le partage, la diffusion, la suppression sont désactivées. Activer/désactiver la lecture seule via l'image de l'utilisateur depuis l'écran d'accueil",
|
"advanced_settings_readonly_mode_subtitle": "Active le mode lecture seule, où les photos peuvent seulement être visualisées, et les actions comme les sélections multiples, le partage, la diffusion, la suppression sont désactivées. Activer/désactiver la lecture seule via l'image de l'utilisateur depuis l'écran d'accueil",
|
||||||
"advanced_settings_readonly_mode_title": "Mode lecture seule",
|
"advanced_settings_readonly_mode_title": "Mode lecture seule",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "Permet d'ignorer la vérification du certificat SSL pour le point d'accès du serveur. Requis pour les certificats auto-signés.",
|
"advanced_settings_self_signed_ssl_subtitle": "Permet d'ignorer la vérification du certificat SSL pour le point d'accès du serveur. Requis pour les certificats auto-signés.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Autoriser les certificats SSL auto-signés",
|
"advanced_settings_self_signed_ssl_title": "Autoriser les certificats SSL auto-signés [EXPÉRIMENTAL]",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "Supprimer ou restaurer automatiquement un média sur cet appareil lorsqu'une action a été faite sur le web",
|
"advanced_settings_sync_remote_deletions_subtitle": "Supprimer ou restaurer automatiquement un média sur cet appareil lorsqu'une action a été faite sur le web",
|
||||||
"advanced_settings_sync_remote_deletions_title": "Synchroniser les suppressions depuis le serveur [EXPÉRIMENTAL]",
|
"advanced_settings_sync_remote_deletions_title": "Synchroniser les suppressions depuis le serveur [EXPÉRIMENTAL]",
|
||||||
"advanced_settings_tile_subtitle": "Paramètres d'utilisateur avancés",
|
"advanced_settings_tile_subtitle": "Paramètres d'utilisateur avancés",
|
||||||
@@ -465,10 +481,14 @@
|
|||||||
"api_key_description": "Cette valeur ne sera affichée qu'une seule fois. Assurez-vous de la copier avant de fermer la fenêtre.",
|
"api_key_description": "Cette valeur ne sera affichée qu'une seule fois. Assurez-vous de la copier avant de fermer la fenêtre.",
|
||||||
"api_key_empty": "Le nom de votre clé API ne doit pas être vide",
|
"api_key_empty": "Le nom de votre clé API ne doit pas être vide",
|
||||||
"api_keys": "Clés d'API",
|
"api_keys": "Clés d'API",
|
||||||
|
"app_architecture_variant": "Variante (Architecture)",
|
||||||
"app_bar_signout_dialog_content": "Êtes-vous sûr(e) de vouloir vous déconnecter ?",
|
"app_bar_signout_dialog_content": "Êtes-vous sûr(e) de vouloir vous déconnecter ?",
|
||||||
"app_bar_signout_dialog_ok": "Oui",
|
"app_bar_signout_dialog_ok": "Oui",
|
||||||
"app_bar_signout_dialog_title": "Se déconnecter",
|
"app_bar_signout_dialog_title": "Se déconnecter",
|
||||||
|
"app_download_links": "Liens de téléchargement de l'appli",
|
||||||
"app_settings": "Paramètres de l'application",
|
"app_settings": "Paramètres de l'application",
|
||||||
|
"app_stores": "Magasins d'applications",
|
||||||
|
"app_update_available": "Une mise à jour est disponible",
|
||||||
"appears_in": "Apparaît dans",
|
"appears_in": "Apparaît dans",
|
||||||
"apply_count": "Appliquer ({count, number})",
|
"apply_count": "Appliquer ({count, number})",
|
||||||
"archive": "Archive",
|
"archive": "Archive",
|
||||||
@@ -552,6 +572,7 @@
|
|||||||
"backup_albums_sync": "Sauvegarde de la synchronisation des albums",
|
"backup_albums_sync": "Sauvegarde de la synchronisation des albums",
|
||||||
"backup_all": "Tout",
|
"backup_all": "Tout",
|
||||||
"backup_background_service_backup_failed_message": "Échec de la sauvegarde des médias. Nouvelle tentative…",
|
"backup_background_service_backup_failed_message": "Échec de la sauvegarde des médias. Nouvelle tentative…",
|
||||||
|
"backup_background_service_complete_notification": "Sauvegarde du média terminée",
|
||||||
"backup_background_service_connection_failed_message": "Impossible de se connecter au serveur. Nouvelle tentative…",
|
"backup_background_service_connection_failed_message": "Impossible de se connecter au serveur. Nouvelle tentative…",
|
||||||
"backup_background_service_current_upload_notification": "Envoi de {filename}",
|
"backup_background_service_current_upload_notification": "Envoi de {filename}",
|
||||||
"backup_background_service_default_notification": "Recherche de nouveaux médias…",
|
"backup_background_service_default_notification": "Recherche de nouveaux médias…",
|
||||||
@@ -599,8 +620,8 @@
|
|||||||
"backup_controller_page_turn_on": "Activer la sauvegarde au premier plan",
|
"backup_controller_page_turn_on": "Activer la sauvegarde au premier plan",
|
||||||
"backup_controller_page_uploading_file_info": "Envoi des informations du fichier",
|
"backup_controller_page_uploading_file_info": "Envoi des informations du fichier",
|
||||||
"backup_err_only_album": "Impossible de retirer le seul album",
|
"backup_err_only_album": "Impossible de retirer le seul album",
|
||||||
"backup_error_sync_failed": "Échec de la synchronisation. Impossible d'exécuter la sauvegarde.",
|
"backup_error_sync_failed": "Échec de synchronisation.",
|
||||||
"backup_info_card_assets": "éléments",
|
"backup_info_card_assets": "médias",
|
||||||
"backup_manual_cancelled": "Annulé",
|
"backup_manual_cancelled": "Annulé",
|
||||||
"backup_manual_in_progress": "Envoi déjà en cours. Réessayez plus tard",
|
"backup_manual_in_progress": "Envoi déjà en cours. Réessayez plus tard",
|
||||||
"backup_manual_success": "Succès",
|
"backup_manual_success": "Succès",
|
||||||
@@ -661,6 +682,8 @@
|
|||||||
"change_password_description": "C'est la première fois que vous vous connectez ou une demande a été faite pour changer votre mot de passe. Veuillez entrer le nouveau mot de passe ci-dessous.",
|
"change_password_description": "C'est la première fois que vous vous connectez ou une demande a été faite pour changer votre mot de passe. Veuillez entrer le nouveau mot de passe ci-dessous.",
|
||||||
"change_password_form_confirm_password": "Confirmez le mot de passe",
|
"change_password_form_confirm_password": "Confirmez le mot de passe",
|
||||||
"change_password_form_description": "Bonjour {name},\n\nC'est la première fois que vous vous connectez au système ou vous avez demandé de changer votre mot de passe. Veuillez saisir le nouveau mot de passe ci-dessous.",
|
"change_password_form_description": "Bonjour {name},\n\nC'est la première fois que vous vous connectez au système ou vous avez demandé de changer votre mot de passe. Veuillez saisir le nouveau mot de passe ci-dessous.",
|
||||||
|
"change_password_form_log_out": "Déconnecter tous les autres appareils",
|
||||||
|
"change_password_form_log_out_description": "Il est recommandé de déconnecter tous les autres appareils",
|
||||||
"change_password_form_new_password": "Nouveau mot de passe",
|
"change_password_form_new_password": "Nouveau mot de passe",
|
||||||
"change_password_form_password_mismatch": "Les mots de passe ne correspondent pas",
|
"change_password_form_password_mismatch": "Les mots de passe ne correspondent pas",
|
||||||
"change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe",
|
"change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe",
|
||||||
@@ -688,7 +711,7 @@
|
|||||||
"client_cert_invalid_msg": "Fichier de certificat invalide ou mot de passe incorrect",
|
"client_cert_invalid_msg": "Fichier de certificat invalide ou mot de passe incorrect",
|
||||||
"client_cert_remove_msg": "Certificat supprimé",
|
"client_cert_remove_msg": "Certificat supprimé",
|
||||||
"client_cert_subtitle": "Prend en charge uniquement le format PKCS12 (.p12, .pfx). L'importation/suppression de certificats n'est possible qu'avant la connexion",
|
"client_cert_subtitle": "Prend en charge uniquement le format PKCS12 (.p12, .pfx). L'importation/suppression de certificats n'est possible qu'avant la connexion",
|
||||||
"client_cert_title": "Certificat SSL",
|
"client_cert_title": "Certificat SSL [EXPÉRIMENTAL]",
|
||||||
"clockwise": "Sens horaire",
|
"clockwise": "Sens horaire",
|
||||||
"close": "Fermer",
|
"close": "Fermer",
|
||||||
"collapse": "Réduire",
|
"collapse": "Réduire",
|
||||||
@@ -700,7 +723,6 @@
|
|||||||
"comments_and_likes": "Commentaires et \"J'aime\"",
|
"comments_and_likes": "Commentaires et \"J'aime\"",
|
||||||
"comments_are_disabled": "Les commentaires sont désactivés",
|
"comments_are_disabled": "Les commentaires sont désactivés",
|
||||||
"common_create_new_album": "Créer un nouvel album",
|
"common_create_new_album": "Créer un nouvel album",
|
||||||
"common_server_error": "Veuillez vérifier votre connexion réseau, vous assurer que le serveur est accessible et que les versions de l'application et du serveur sont compatibles.",
|
|
||||||
"completed": "Complété",
|
"completed": "Complété",
|
||||||
"confirm": "Confirmez",
|
"confirm": "Confirmez",
|
||||||
"confirm_admin_password": "Confirmez le mot de passe Admin",
|
"confirm_admin_password": "Confirmez le mot de passe Admin",
|
||||||
@@ -739,6 +761,7 @@
|
|||||||
"create": "Créer",
|
"create": "Créer",
|
||||||
"create_album": "Créer un album",
|
"create_album": "Créer un album",
|
||||||
"create_album_page_untitled": "Sans titre",
|
"create_album_page_untitled": "Sans titre",
|
||||||
|
"create_api_key": "Créer une clé d'API",
|
||||||
"create_library": "Créer une bibliothèque",
|
"create_library": "Créer une bibliothèque",
|
||||||
"create_link": "Créer le lien",
|
"create_link": "Créer le lien",
|
||||||
"create_link_to_share": "Créer un lien pour partager",
|
"create_link_to_share": "Créer un lien pour partager",
|
||||||
@@ -768,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
||||||
"dark": "Sombre",
|
"dark": "Sombre",
|
||||||
"dark_theme": "Activer le thème sombre",
|
"dark_theme": "Activer le thème sombre",
|
||||||
|
"date": "Date",
|
||||||
"date_after": "Date après",
|
"date_after": "Date après",
|
||||||
"date_and_time": "Date et heure",
|
"date_and_time": "Date et heure",
|
||||||
"date_before": "Date avant",
|
"date_before": "Date avant",
|
||||||
@@ -882,7 +906,6 @@
|
|||||||
"edit_tag": "Modifier l'étiquette",
|
"edit_tag": "Modifier l'étiquette",
|
||||||
"edit_title": "Modifier le titre",
|
"edit_title": "Modifier le titre",
|
||||||
"edit_user": "Modifier l'utilisateur",
|
"edit_user": "Modifier l'utilisateur",
|
||||||
"edited": "Modifié",
|
|
||||||
"editor": "Editeur",
|
"editor": "Editeur",
|
||||||
"editor_close_without_save_prompt": "Les changements ne seront pas enregistrés",
|
"editor_close_without_save_prompt": "Les changements ne seront pas enregistrés",
|
||||||
"editor_close_without_save_title": "Fermer l'éditeur ?",
|
"editor_close_without_save_title": "Fermer l'éditeur ?",
|
||||||
@@ -894,7 +917,7 @@
|
|||||||
"empty_trash": "Vider la corbeille",
|
"empty_trash": "Vider la corbeille",
|
||||||
"empty_trash_confirmation": "Êtes-vous sûr de vouloir vider la corbeille ? Cela supprimera définitivement de Immich tous les médias qu'elle contient.\nVous ne pouvez pas annuler cette action !",
|
"empty_trash_confirmation": "Êtes-vous sûr de vouloir vider la corbeille ? Cela supprimera définitivement de Immich tous les médias qu'elle contient.\nVous ne pouvez pas annuler cette action !",
|
||||||
"enable": "Active",
|
"enable": "Active",
|
||||||
"enable_backup": "Activer la sauvegarde",
|
"enable_backup": "Sauvegarde",
|
||||||
"enable_biometric_auth_description": "Entrez votre code PIN pour activer l'authentification biométrique",
|
"enable_biometric_auth_description": "Entrez votre code PIN pour activer l'authentification biométrique",
|
||||||
"enabled": "Activé",
|
"enabled": "Activé",
|
||||||
"end_date": "Date de fin",
|
"end_date": "Date de fin",
|
||||||
@@ -1038,6 +1061,7 @@
|
|||||||
"exif_bottom_sheet_description_error": "Erreur de mise à jour de la description",
|
"exif_bottom_sheet_description_error": "Erreur de mise à jour de la description",
|
||||||
"exif_bottom_sheet_details": "DÉTAILS",
|
"exif_bottom_sheet_details": "DÉTAILS",
|
||||||
"exif_bottom_sheet_location": "LOCALISATION",
|
"exif_bottom_sheet_location": "LOCALISATION",
|
||||||
|
"exif_bottom_sheet_no_description": "Aucune description",
|
||||||
"exif_bottom_sheet_people": "PERSONNES",
|
"exif_bottom_sheet_people": "PERSONNES",
|
||||||
"exif_bottom_sheet_person_add_person": "Ajouter un nom",
|
"exif_bottom_sheet_person_add_person": "Ajouter un nom",
|
||||||
"exit_slideshow": "Quitter le diaporama",
|
"exit_slideshow": "Quitter le diaporama",
|
||||||
@@ -1076,6 +1100,7 @@
|
|||||||
"features_setting_description": "Gérer les fonctionnalités de l'application",
|
"features_setting_description": "Gérer les fonctionnalités de l'application",
|
||||||
"file_name": "Nom du fichier",
|
"file_name": "Nom du fichier",
|
||||||
"file_name_or_extension": "Nom du fichier ou extension",
|
"file_name_or_extension": "Nom du fichier ou extension",
|
||||||
|
"file_size": "Taille du fichier",
|
||||||
"filename": "Nom du fichier",
|
"filename": "Nom du fichier",
|
||||||
"filetype": "Type de fichier",
|
"filetype": "Type de fichier",
|
||||||
"filter": "Filtres",
|
"filter": "Filtres",
|
||||||
@@ -1119,7 +1144,6 @@
|
|||||||
"header_settings_field_validator_msg": "Cette valeur ne peut pas être vide",
|
"header_settings_field_validator_msg": "Cette valeur ne peut pas être vide",
|
||||||
"header_settings_header_name_input": "Nom de l'en-tête",
|
"header_settings_header_name_input": "Nom de l'en-tête",
|
||||||
"header_settings_header_value_input": "Valeur de l'en-tête",
|
"header_settings_header_value_input": "Valeur de l'en-tête",
|
||||||
"headers_settings_tile_subtitle": "Définir les en-têtes de proxy que l'application doit envoyer avec chaque requête réseau",
|
|
||||||
"headers_settings_tile_title": "En-têtes de proxy personnalisés",
|
"headers_settings_tile_title": "En-têtes de proxy personnalisés",
|
||||||
"hi_user": "Bonjour {name} ({email})",
|
"hi_user": "Bonjour {name} ({email})",
|
||||||
"hide_all_people": "Cacher toutes les personnes",
|
"hide_all_people": "Cacher toutes les personnes",
|
||||||
@@ -1240,6 +1264,7 @@
|
|||||||
"local_media_summary": "Résumé du média local",
|
"local_media_summary": "Résumé du média local",
|
||||||
"local_network": "Réseau local",
|
"local_network": "Réseau local",
|
||||||
"local_network_sheet_info": "L'application va se connecter au serveur via cette URL quand l'appareil est connecté à ce réseau Wi-Fi",
|
"local_network_sheet_info": "L'application va se connecter au serveur via cette URL quand l'appareil est connecté à ce réseau Wi-Fi",
|
||||||
|
"location": "Localisation",
|
||||||
"location_permission": "Autorisation de localisation",
|
"location_permission": "Autorisation de localisation",
|
||||||
"location_permission_content": "Afin de pouvoir changer d'adresse automatiquement, Immich doit avoir accès à la localisation précise, afin d'accéder au nom du réseau wifi utilisé",
|
"location_permission_content": "Afin de pouvoir changer d'adresse automatiquement, Immich doit avoir accès à la localisation précise, afin d'accéder au nom du réseau wifi utilisé",
|
||||||
"location_picker_choose_on_map": "Sélectionner sur la carte",
|
"location_picker_choose_on_map": "Sélectionner sur la carte",
|
||||||
@@ -1344,6 +1369,8 @@
|
|||||||
"minute": "Minute",
|
"minute": "Minute",
|
||||||
"minutes": "Minutes",
|
"minutes": "Minutes",
|
||||||
"missing": "Manquant",
|
"missing": "Manquant",
|
||||||
|
"mobile_app": "Appli mobile",
|
||||||
|
"mobile_app_download_onboarding_note": "Téléchargez l'application mobile compagnon via les options suivantes",
|
||||||
"model": "Modèle",
|
"model": "Modèle",
|
||||||
"month": "Mois",
|
"month": "Mois",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
@@ -1362,6 +1389,8 @@
|
|||||||
"my_albums": "Mes albums",
|
"my_albums": "Mes albums",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"name_or_nickname": "Nom ou surnom",
|
"name_or_nickname": "Nom ou surnom",
|
||||||
|
"navigate": "Naviguer vers",
|
||||||
|
"navigate_to_time": "Naviguer vers Date/Heure",
|
||||||
"network_requirement_photos_upload": "Utiliser les données mobile pour sauvegarder les photos",
|
"network_requirement_photos_upload": "Utiliser les données mobile pour sauvegarder les photos",
|
||||||
"network_requirement_videos_upload": "Utiliser les données mobile pour sauvegarder les vidéos",
|
"network_requirement_videos_upload": "Utiliser les données mobile pour sauvegarder les vidéos",
|
||||||
"network_requirements": "Prérequis réseau",
|
"network_requirements": "Prérequis réseau",
|
||||||
@@ -1371,6 +1400,7 @@
|
|||||||
"never": "Jamais",
|
"never": "Jamais",
|
||||||
"new_album": "Nouvel Album",
|
"new_album": "Nouvel Album",
|
||||||
"new_api_key": "Nouvelle clé API",
|
"new_api_key": "Nouvelle clé API",
|
||||||
|
"new_date_range": "Nouvelle plage de date",
|
||||||
"new_password": "Nouveau mot de passe",
|
"new_password": "Nouveau mot de passe",
|
||||||
"new_person": "Nouvelle personne",
|
"new_person": "Nouvelle personne",
|
||||||
"new_pin_code": "Nouveau code PIN",
|
"new_pin_code": "Nouveau code PIN",
|
||||||
@@ -1421,6 +1451,9 @@
|
|||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
"notifications_setting_description": "Gérer les notifications",
|
"notifications_setting_description": "Gérer les notifications",
|
||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
|
"obtainium_configurator": "Configuration pour Obtainium",
|
||||||
|
"obtainium_configurator_instructions": "Utilisez Obtainium pour installer et mettre à jour l'application Android directement depuis la version d'Immich sur Github. Créer une clé d'API et sélectionner une variante pour créer votre lien de configuration pour Obtainium",
|
||||||
|
"ocr": "Reconnaissance Optique de Caractères",
|
||||||
"official_immich_resources": "Ressources Immich officielles",
|
"official_immich_resources": "Ressources Immich officielles",
|
||||||
"offline": "Hors ligne",
|
"offline": "Hors ligne",
|
||||||
"offset": "Décalage",
|
"offset": "Décalage",
|
||||||
@@ -1525,6 +1558,9 @@
|
|||||||
"play_memories": "Lancer les souvenirs",
|
"play_memories": "Lancer les souvenirs",
|
||||||
"play_motion_photo": "Jouer la photo animée",
|
"play_motion_photo": "Jouer la photo animée",
|
||||||
"play_or_pause_video": "Lancer ou mettre en pause la vidéo",
|
"play_or_pause_video": "Lancer ou mettre en pause la vidéo",
|
||||||
|
"play_original_video": "Lire la vidéo originale",
|
||||||
|
"play_original_video_setting_description": "Préférer la lecture des vidéos originales plutôt que les vidéos transcodées. Si le média original n'est pas compatible, il pourrait ne pas être lu correctement.",
|
||||||
|
"play_transcoded_video": "Lire la vidéo transcodée",
|
||||||
"please_auth_to_access": "Merci de vous authentifier pour accéder",
|
"please_auth_to_access": "Merci de vous authentifier pour accéder",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"preferences_settings_subtitle": "Gérer les préférences de l'application",
|
"preferences_settings_subtitle": "Gérer les préférences de l'application",
|
||||||
@@ -1542,13 +1578,9 @@
|
|||||||
"privacy": "Vie privée",
|
"privacy": "Vie privée",
|
||||||
"profile": "Profil",
|
"profile": "Profil",
|
||||||
"profile_drawer_app_logs": "Journaux",
|
"profile_drawer_app_logs": "Journaux",
|
||||||
"profile_drawer_client_out_of_date_major": "L'application mobile est obsolète. Veuillez effectuer la mise à jour vers la dernière version majeure.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "L'application mobile est obsolète. Veuillez effectuer la mise à jour vers la dernière version mineure.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
|
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Mode lecture seule activé. Faites un appui long sur l'image de l'utilisateur pour quitter.",
|
"profile_drawer_readonly_mode": "Mode lecture seule activé. Faites un appui long sur l'image de l'utilisateur pour quitter.",
|
||||||
"profile_drawer_server_out_of_date_major": "Le serveur est obsolète. Veuillez mettre à jour vers la dernière version majeure.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "Le serveur est obsolète. Veuillez mettre à jour vers la dernière version mineure.",
|
|
||||||
"profile_image_of_user": "Image de profil de {user}",
|
"profile_image_of_user": "Image de profil de {user}",
|
||||||
"profile_picture_set": "Photo de profil définie.",
|
"profile_picture_set": "Photo de profil définie.",
|
||||||
"public_album": "Album public",
|
"public_album": "Album public",
|
||||||
@@ -1665,6 +1697,7 @@
|
|||||||
"reset_sqlite_confirmation": "Êtes-vous certain de vouloir réinitialiser la base de données SQLite ? Vous devrez vous déconnecter puis vous reconnecter à nouveau pour resynchroniser les données",
|
"reset_sqlite_confirmation": "Êtes-vous certain de vouloir réinitialiser la base de données SQLite ? Vous devrez vous déconnecter puis vous reconnecter à nouveau pour resynchroniser les données",
|
||||||
"reset_sqlite_success": "La base de données SQLite à été réinitialisé avec succès",
|
"reset_sqlite_success": "La base de données SQLite à été réinitialisé avec succès",
|
||||||
"reset_to_default": "Rétablir les valeurs par défaut",
|
"reset_to_default": "Rétablir les valeurs par défaut",
|
||||||
|
"resolution": "Résolution",
|
||||||
"resolve_duplicates": "Résoudre les doublons",
|
"resolve_duplicates": "Résoudre les doublons",
|
||||||
"resolved_all_duplicates": "Résolution de tous les doublons",
|
"resolved_all_duplicates": "Résolution de tous les doublons",
|
||||||
"restore": "Restaurer",
|
"restore": "Restaurer",
|
||||||
@@ -1683,6 +1716,7 @@
|
|||||||
"running": "En cours",
|
"running": "En cours",
|
||||||
"save": "Sauvegarder",
|
"save": "Sauvegarder",
|
||||||
"save_to_gallery": "Enregistrer",
|
"save_to_gallery": "Enregistrer",
|
||||||
|
"saved": "Sauvegardé",
|
||||||
"saved_api_key": "Clé API sauvegardée",
|
"saved_api_key": "Clé API sauvegardée",
|
||||||
"saved_profile": "Profil enregistré",
|
"saved_profile": "Profil enregistré",
|
||||||
"saved_settings": "Paramètres enregistrés",
|
"saved_settings": "Paramètres enregistrés",
|
||||||
@@ -1699,6 +1733,9 @@
|
|||||||
"search_by_description_example": "Randonnée à Sapa",
|
"search_by_description_example": "Randonnée à Sapa",
|
||||||
"search_by_filename": "Rechercher par nom du fichier ou extension",
|
"search_by_filename": "Rechercher par nom du fichier ou extension",
|
||||||
"search_by_filename_example": "Exemple : IMG_1234.JPG ou PNG",
|
"search_by_filename_example": "Exemple : IMG_1234.JPG ou PNG",
|
||||||
|
"search_by_ocr": "Recherche par OCR",
|
||||||
|
"search_by_ocr_example": "café latte",
|
||||||
|
"search_camera_lens_model": "Chercher par modèle d'objectif...",
|
||||||
"search_camera_make": "Rechercher par marque d'appareil photo...",
|
"search_camera_make": "Rechercher par marque d'appareil photo...",
|
||||||
"search_camera_model": "Rechercher par modèle d'appareil photo...",
|
"search_camera_model": "Rechercher par modèle d'appareil photo...",
|
||||||
"search_city": "Rechercher par ville...",
|
"search_city": "Rechercher par ville...",
|
||||||
@@ -1715,6 +1752,7 @@
|
|||||||
"search_filter_location_title": "Sélectionner une localisation",
|
"search_filter_location_title": "Sélectionner une localisation",
|
||||||
"search_filter_media_type": "Type de média",
|
"search_filter_media_type": "Type de média",
|
||||||
"search_filter_media_type_title": "Sélectionner type de média",
|
"search_filter_media_type_title": "Sélectionner type de média",
|
||||||
|
"search_filter_ocr": "Recherche par OCR",
|
||||||
"search_filter_people_title": "Sélectionner une personne",
|
"search_filter_people_title": "Sélectionner une personne",
|
||||||
"search_for": "Chercher",
|
"search_for": "Chercher",
|
||||||
"search_for_existing_person": "Rechercher une personne existante",
|
"search_for_existing_person": "Rechercher une personne existante",
|
||||||
@@ -1772,11 +1810,12 @@
|
|||||||
"send_welcome_email": "Envoyer un courriel de bienvenue",
|
"send_welcome_email": "Envoyer un courriel de bienvenue",
|
||||||
"server_endpoint": "Adresse du serveur",
|
"server_endpoint": "Adresse du serveur",
|
||||||
"server_info_box_app_version": "Version de l'application",
|
"server_info_box_app_version": "Version de l'application",
|
||||||
"server_info_box_server_url": "URL du serveur",
|
"server_info_box_server_url": "Server URL",
|
||||||
"server_offline": "Serveur hors ligne",
|
"server_offline": "Serveur hors ligne",
|
||||||
"server_online": "Serveur en ligne",
|
"server_online": "Serveur en ligne",
|
||||||
"server_privacy": "Vie privée pour le serveur",
|
"server_privacy": "Vie privée pour le serveur",
|
||||||
"server_stats": "Statistiques du serveur",
|
"server_stats": "Statistiques du serveur",
|
||||||
|
"server_update_available": "Une mise à jour du serveur est disponible",
|
||||||
"server_version": "Version du serveur",
|
"server_version": "Version du serveur",
|
||||||
"set": "Définir",
|
"set": "Définir",
|
||||||
"set_as_album_cover": "Définir comme couverture d'album",
|
"set_as_album_cover": "Définir comme couverture d'album",
|
||||||
@@ -1805,6 +1844,8 @@
|
|||||||
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
|
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
|
||||||
"setting_notifications_total_progress_subtitle": "Progression globale de l'envoi (effectué/total des médias)",
|
"setting_notifications_total_progress_subtitle": "Progression globale de l'envoi (effectué/total des médias)",
|
||||||
"setting_notifications_total_progress_title": "Afficher la progression totale de la sauvegarde en arrière-plan",
|
"setting_notifications_total_progress_title": "Afficher la progression totale de la sauvegarde en arrière-plan",
|
||||||
|
"setting_video_viewer_auto_play_subtitle": "Lancer automatiquement la lecture des vidéos lorsqu’elles sont ouvertes",
|
||||||
|
"setting_video_viewer_auto_play_title": "Lecture automatique des vidéos",
|
||||||
"setting_video_viewer_looping_title": "Boucle",
|
"setting_video_viewer_looping_title": "Boucle",
|
||||||
"setting_video_viewer_original_video_subtitle": "Lors de la diffusion d'une vidéo depuis le serveur, lisez l'original même si un transcodage est disponible. Cela peut entraîner de la mise en mémoire tampon. Les vidéos disponibles localement sont lues en qualité d'origine, quel que soit ce paramètre.",
|
"setting_video_viewer_original_video_subtitle": "Lors de la diffusion d'une vidéo depuis le serveur, lisez l'original même si un transcodage est disponible. Cela peut entraîner de la mise en mémoire tampon. Les vidéos disponibles localement sont lues en qualité d'origine, quel que soit ce paramètre.",
|
||||||
"setting_video_viewer_original_video_title": "Forcer la vidéo originale",
|
"setting_video_viewer_original_video_title": "Forcer la vidéo originale",
|
||||||
@@ -1897,7 +1938,7 @@
|
|||||||
"show_supporter_badge": "Badge de contributeur",
|
"show_supporter_badge": "Badge de contributeur",
|
||||||
"show_supporter_badge_description": "Afficher le badge de contributeur",
|
"show_supporter_badge_description": "Afficher le badge de contributeur",
|
||||||
"show_text_search_menu": "Afficher le menu de recherche de texte",
|
"show_text_search_menu": "Afficher le menu de recherche de texte",
|
||||||
"shuffle": "Mélanger",
|
"shuffle": "Aléatoire",
|
||||||
"sidebar": "Barre latérale",
|
"sidebar": "Barre latérale",
|
||||||
"sidebar_display_description": "Afficher un lien vers la vue dans la barre latérale",
|
"sidebar_display_description": "Afficher un lien vers la vue dans la barre latérale",
|
||||||
"sign_out": "Déconnexion",
|
"sign_out": "Déconnexion",
|
||||||
@@ -1984,6 +2025,7 @@
|
|||||||
"theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes",
|
"theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes",
|
||||||
"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",
|
"third_party_resources": "Ressources tierces",
|
||||||
|
"time": "Horaire",
|
||||||
"time_based_memories": "Souvenirs basés sur la date",
|
"time_based_memories": "Souvenirs basés sur la date",
|
||||||
"timeline": "Vue chronologique",
|
"timeline": "Vue chronologique",
|
||||||
"timezone": "Fuseau horaire",
|
"timezone": "Fuseau horaire",
|
||||||
@@ -2016,6 +2058,7 @@
|
|||||||
"troubleshoot": "Dépannage",
|
"troubleshoot": "Dépannage",
|
||||||
"type": "Type",
|
"type": "Type",
|
||||||
"unable_to_change_pin_code": "Impossible de changer le code PIN",
|
"unable_to_change_pin_code": "Impossible de changer le code PIN",
|
||||||
|
"unable_to_check_version": "Impossible de vérifier la version de l'application ou du serveur",
|
||||||
"unable_to_setup_pin_code": "Impossible de définir le code PIN",
|
"unable_to_setup_pin_code": "Impossible de définir le code PIN",
|
||||||
"unarchive": "Désarchiver",
|
"unarchive": "Désarchiver",
|
||||||
"unarchive_action_prompt": "{count} supprimé(s) de l'archive",
|
"unarchive_action_prompt": "{count} supprimé(s) de l'archive",
|
||||||
|
|||||||
768
i18n/gl.json
768
i18n/gl.json
File diff suppressed because it is too large
Load Diff
26
i18n/he.json
26
i18n/he.json
@@ -15,7 +15,7 @@
|
|||||||
"add_a_name": "הוספת שם",
|
"add_a_name": "הוספת שם",
|
||||||
"add_a_title": "הוספת כותרת",
|
"add_a_title": "הוספת כותרת",
|
||||||
"add_birthday": "הוספת יום הולדת",
|
"add_birthday": "הוספת יום הולדת",
|
||||||
"add_endpoint": "הוסף נקודת קצה",
|
"add_endpoint": "הוסף כתובת URL",
|
||||||
"add_exclusion_pattern": "הוספת דפוס החרגה",
|
"add_exclusion_pattern": "הוספת דפוס החרגה",
|
||||||
"add_import_path": "הוספת נתיב יבוא",
|
"add_import_path": "הוספת נתיב יבוא",
|
||||||
"add_location": "הוספת מיקום",
|
"add_location": "הוספת מיקום",
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
"add_to_albums": "הוספה לאלבומים",
|
"add_to_albums": "הוספה לאלבומים",
|
||||||
"add_to_albums_count": "הוסף ({count}) לאלבום",
|
"add_to_albums_count": "הוסף ({count}) לאלבום",
|
||||||
"add_to_shared_album": "הוספה לאלבום משותף",
|
"add_to_shared_album": "הוספה לאלבום משותף",
|
||||||
|
"add_upload_to_stack": "הוסף את ההעלאה לערימה",
|
||||||
"add_url": "הוספת קישור",
|
"add_url": "הוספת קישור",
|
||||||
"added_to_archive": "נוסף לארכיון",
|
"added_to_archive": "נוסף לארכיון",
|
||||||
"added_to_favorites": "נוסף למועדפים",
|
"added_to_favorites": "נוסף למועדפים",
|
||||||
@@ -404,7 +405,7 @@
|
|||||||
"advanced_settings_proxy_headers_title": "כותרות פרוקסי",
|
"advanced_settings_proxy_headers_title": "כותרות פרוקסי",
|
||||||
"advanced_settings_readonly_mode_subtitle": "מאפשר את מצב לקריאה בלבד בו התמונות ניתנות לצפייה בלבד, דברים כמו בחירת תמונות מרובות, שיתוף, שידור, מחיקה הם כולם מושבתים. אפשר/השבת מצב לקריאה בלבד באמצעות יצגן המשתמש מהמסך הראשי",
|
"advanced_settings_readonly_mode_subtitle": "מאפשר את מצב לקריאה בלבד בו התמונות ניתנות לצפייה בלבד, דברים כמו בחירת תמונות מרובות, שיתוף, שידור, מחיקה הם כולם מושבתים. אפשר/השבת מצב לקריאה בלבד באמצעות יצגן המשתמש מהמסך הראשי",
|
||||||
"advanced_settings_readonly_mode_title": "מצב לקריאה בלבד",
|
"advanced_settings_readonly_mode_title": "מצב לקריאה בלבד",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "מדלג על אימות תעודת SSL עבור נקודת הקצה של השרת. דרוש עבור תעודות בחתימה עצמית.",
|
"advanced_settings_self_signed_ssl_subtitle": "מדלג על אימות תעודת SSL עבור כתובת URL של השרת. דרוש עבור תעודות בחתימה עצמית.",
|
||||||
"advanced_settings_self_signed_ssl_title": "התר תעודות SSL בחתימה עצמית",
|
"advanced_settings_self_signed_ssl_title": "התר תעודות SSL בחתימה עצמית",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "מחק או שחזר תמונה במכשיר זה באופן אוטומטי כאשר פעולה זו נעשית בדפדפן",
|
"advanced_settings_sync_remote_deletions_subtitle": "מחק או שחזר תמונה במכשיר זה באופן אוטומטי כאשר פעולה זו נעשית בדפדפן",
|
||||||
"advanced_settings_sync_remote_deletions_title": "סנכרן מחיקות שבוצעו במכשירים אחרים [נסיוני]",
|
"advanced_settings_sync_remote_deletions_title": "סנכרן מחיקות שבוצעו במכשירים אחרים [נסיוני]",
|
||||||
@@ -592,7 +593,7 @@
|
|||||||
"backup_controller_page_start_backup": "התחל גיבוי",
|
"backup_controller_page_start_backup": "התחל גיבוי",
|
||||||
"backup_controller_page_status_off": "גיבוי חזית אוטומטי כבוי",
|
"backup_controller_page_status_off": "גיבוי חזית אוטומטי כבוי",
|
||||||
"backup_controller_page_status_on": "גיבוי חזית אוטומטי מופעל",
|
"backup_controller_page_status_on": "גיבוי חזית אוטומטי מופעל",
|
||||||
"backup_controller_page_storage_format": "{used}מתוך {total} בשימוש",
|
"backup_controller_page_storage_format": "{used} מתוך {total} בשימוש",
|
||||||
"backup_controller_page_to_backup": "אלבומים לגבות",
|
"backup_controller_page_to_backup": "אלבומים לגבות",
|
||||||
"backup_controller_page_total_sub": "כל התמונות והסרטונים הייחודיים מאלבומים שנבחרו",
|
"backup_controller_page_total_sub": "כל התמונות והסרטונים הייחודיים מאלבומים שנבחרו",
|
||||||
"backup_controller_page_turn_off": "כיבוי גיבוי חזית",
|
"backup_controller_page_turn_off": "כיבוי גיבוי חזית",
|
||||||
@@ -700,7 +701,6 @@
|
|||||||
"comments_and_likes": "תגובות & לייקים",
|
"comments_and_likes": "תגובות & לייקים",
|
||||||
"comments_are_disabled": "תגובות מושבתות",
|
"comments_are_disabled": "תגובות מושבתות",
|
||||||
"common_create_new_album": "צור אלבום חדש",
|
"common_create_new_album": "צור אלבום חדש",
|
||||||
"common_server_error": "נא לבדוק את חיבור הרשת שלך, תוודא/י שהשרת נגיש ושגרסאות אפליקציה/שרת תואמות.",
|
|
||||||
"completed": "הושלמו",
|
"completed": "הושלמו",
|
||||||
"confirm": "אישור",
|
"confirm": "אישור",
|
||||||
"confirm_admin_password": "אישור סיסמת מנהל",
|
"confirm_admin_password": "אישור סיסמת מנהל",
|
||||||
@@ -882,7 +882,6 @@
|
|||||||
"edit_tag": "ערוך תג",
|
"edit_tag": "ערוך תג",
|
||||||
"edit_title": "ערוך כותרת",
|
"edit_title": "ערוך כותרת",
|
||||||
"edit_user": "ערוך משתמש",
|
"edit_user": "ערוך משתמש",
|
||||||
"edited": "נערך",
|
|
||||||
"editor": "עורך",
|
"editor": "עורך",
|
||||||
"editor_close_without_save_prompt": "השינויים לא יישמרו",
|
"editor_close_without_save_prompt": "השינויים לא יישמרו",
|
||||||
"editor_close_without_save_title": "לסגור את העורך?",
|
"editor_close_without_save_title": "לסגור את העורך?",
|
||||||
@@ -1119,7 +1118,6 @@
|
|||||||
"header_settings_field_validator_msg": "ערך אינו יכול להיות ריק",
|
"header_settings_field_validator_msg": "ערך אינו יכול להיות ריק",
|
||||||
"header_settings_header_name_input": "שם כותרת",
|
"header_settings_header_name_input": "שם כותרת",
|
||||||
"header_settings_header_value_input": "ערך כותרת",
|
"header_settings_header_value_input": "ערך כותרת",
|
||||||
"headers_settings_tile_subtitle": "הגדר כותרות פרוקסי שהיישום צריך לשלוח עם כל בקשת רשת",
|
|
||||||
"headers_settings_tile_title": "כותרות פרוקסי מותאמות",
|
"headers_settings_tile_title": "כותרות פרוקסי מותאמות",
|
||||||
"hi_user": "היי {name}, ({email})",
|
"hi_user": "היי {name}, ({email})",
|
||||||
"hide_all_people": "הסתר את כל האנשים",
|
"hide_all_people": "הסתר את כל האנשים",
|
||||||
@@ -1261,7 +1259,7 @@
|
|||||||
"login_form_back_button_text": "חזרה",
|
"login_form_back_button_text": "חזרה",
|
||||||
"login_form_email_hint": "yourmail@email.com",
|
"login_form_email_hint": "yourmail@email.com",
|
||||||
"login_form_endpoint_hint": "http://your-server-ip:port",
|
"login_form_endpoint_hint": "http://your-server-ip:port",
|
||||||
"login_form_endpoint_url": "כתובת נקודת קצה השרת",
|
"login_form_endpoint_url": "כתובת URL של השרת",
|
||||||
"login_form_err_http": "נא לציין //:http או //:https",
|
"login_form_err_http": "נא לציין //:http או //:https",
|
||||||
"login_form_err_invalid_email": "דוא\"ל שגוי",
|
"login_form_err_invalid_email": "דוא\"ל שגוי",
|
||||||
"login_form_err_invalid_url": "כתובת לא חוקית",
|
"login_form_err_invalid_url": "כתובת לא חוקית",
|
||||||
@@ -1367,7 +1365,7 @@
|
|||||||
"network_requirements": "דרישות רשת",
|
"network_requirements": "דרישות רשת",
|
||||||
"network_requirements_updated": "דרישות הרשת השתנו, תור הגיבוי אופס",
|
"network_requirements_updated": "דרישות הרשת השתנו, תור הגיבוי אופס",
|
||||||
"networking_settings": "רשת",
|
"networking_settings": "רשת",
|
||||||
"networking_subtitle": "ניהול הגדרות נקודת קצה שרת",
|
"networking_subtitle": "ניהול הגדרות כתובת URL של השרת",
|
||||||
"never": "אף פעם",
|
"never": "אף פעם",
|
||||||
"new_album": "אלבום חדש",
|
"new_album": "אלבום חדש",
|
||||||
"new_api_key": "מפתח API חדש",
|
"new_api_key": "מפתח API חדש",
|
||||||
@@ -1542,13 +1540,9 @@
|
|||||||
"privacy": "פרטיות",
|
"privacy": "פרטיות",
|
||||||
"profile": "פרופיל",
|
"profile": "פרופיל",
|
||||||
"profile_drawer_app_logs": "יומן",
|
"profile_drawer_app_logs": "יומן",
|
||||||
"profile_drawer_client_out_of_date_major": "גרסת היישום לנייד מיושנת. נא לעדכן לגרסה הראשית האחרונה.",
|
|
||||||
"profile_drawer_client_out_of_date_minor": "גרסת היישום לנייד מיושנת. נא לעדכן לגרסה המשנית האחרונה.",
|
|
||||||
"profile_drawer_client_server_up_to_date": "היישום והשרת מעודכנים",
|
"profile_drawer_client_server_up_to_date": "היישום והשרת מעודכנים",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "מצב לקריאה בלבד מופעל. לחץ לחיצה ארוכה על סמל היצגן של המשתמש כדי לצאת.",
|
"profile_drawer_readonly_mode": "מצב לקריאה בלבד מופעל. לחץ לחיצה ארוכה על סמל היצגן של המשתמש כדי לצאת.",
|
||||||
"profile_drawer_server_out_of_date_major": "השרת אינו מעודכן. נא לעדכן לגרסה הראשית האחרונה.",
|
|
||||||
"profile_drawer_server_out_of_date_minor": "השרת אינו מעודכן. נא לעדכן לגרסה המשנית האחרונה.",
|
|
||||||
"profile_image_of_user": "תמונת פרופיל של {user}",
|
"profile_image_of_user": "תמונת פרופיל של {user}",
|
||||||
"profile_picture_set": "תמונת פרופיל נבחרה.",
|
"profile_picture_set": "תמונת פרופיל נבחרה.",
|
||||||
"public_album": "אלבום ציבורי",
|
"public_album": "אלבום ציבורי",
|
||||||
@@ -1770,7 +1764,7 @@
|
|||||||
"selected_gps_coordinates": "קואורדינטות GPS שנבחרו",
|
"selected_gps_coordinates": "קואורדינטות GPS שנבחרו",
|
||||||
"send_message": "שלח הודעה",
|
"send_message": "שלח הודעה",
|
||||||
"send_welcome_email": "שלח דוא\"ל קבלת פנים",
|
"send_welcome_email": "שלח דוא\"ל קבלת פנים",
|
||||||
"server_endpoint": "נקודת קצה שרת",
|
"server_endpoint": "כתובת URL של השרת",
|
||||||
"server_info_box_app_version": "גרסת יישום",
|
"server_info_box_app_version": "גרסת יישום",
|
||||||
"server_info_box_server_url": "כתובת שרת",
|
"server_info_box_server_url": "כתובת שרת",
|
||||||
"server_offline": "השרת מנותק",
|
"server_offline": "השרת מנותק",
|
||||||
@@ -1951,8 +1945,8 @@
|
|||||||
"sync_albums": "סנכרן אלבומים",
|
"sync_albums": "סנכרן אלבומים",
|
||||||
"sync_albums_manual_subtitle": "סנכרן את כל הסרטונים והתמונות שהועלו לאלבומי הגיבוי שנבחרו",
|
"sync_albums_manual_subtitle": "סנכרן את כל הסרטונים והתמונות שהועלו לאלבומי הגיבוי שנבחרו",
|
||||||
"sync_local": "סנכרן מקומי",
|
"sync_local": "סנכרן מקומי",
|
||||||
"sync_remote": "סנכרן נקודת קצה מרוחקת",
|
"sync_remote": "סנכרן מהשרת",
|
||||||
"sync_status": "סנכרן מצב",
|
"sync_status": "סטטוס סנכרון",
|
||||||
"sync_status_subtitle": "הצג ונהל את מערכת הסנכרון",
|
"sync_status_subtitle": "הצג ונהל את מערכת הסנכרון",
|
||||||
"sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום",
|
"sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום",
|
||||||
"tag": "תג",
|
"tag": "תג",
|
||||||
@@ -2087,7 +2081,7 @@
|
|||||||
"users_added_to_album_count": "נוספו {count, plural, one {משתמש #} other {# משתמשים}} לאלבום",
|
"users_added_to_album_count": "נוספו {count, plural, one {משתמש #} other {# משתמשים}} לאלבום",
|
||||||
"utilities": "כלים",
|
"utilities": "כלים",
|
||||||
"validate": "לאמת",
|
"validate": "לאמת",
|
||||||
"validate_endpoint_error": "נא להזין כתובת תקנית",
|
"validate_endpoint_error": "נא להזין כתובת URL תקנית",
|
||||||
"variables": "משתנים",
|
"variables": "משתנים",
|
||||||
"version": "גרסה",
|
"version": "גרסה",
|
||||||
"version_announcement_closing": "החבר שלך, אלכס",
|
"version_announcement_closing": "החבר שלך, אלכס",
|
||||||
|
|||||||
104
i18n/hi.json
104
i18n/hi.json
@@ -28,7 +28,12 @@
|
|||||||
"add_to_album": "एल्बम में डालें",
|
"add_to_album": "एल्बम में डालें",
|
||||||
"add_to_album_bottom_sheet_added": "{album} में डालें",
|
"add_to_album_bottom_sheet_added": "{album} में डालें",
|
||||||
"add_to_album_bottom_sheet_already_exists": "{album} में पहले से है",
|
"add_to_album_bottom_sheet_already_exists": "{album} में पहले से है",
|
||||||
|
"add_to_album_bottom_sheet_some_local_assets": "कुछ स्थानीय एसेट एल्बम में नहीं जोड़े जा सके",
|
||||||
|
"add_to_album_toggle": "{album} के लिए चयन टॉगल करें",
|
||||||
|
"add_to_albums": "एकाधिक एल्बम में डाले",
|
||||||
|
"add_to_albums_count": "एल्बमों में डालें ({count})",
|
||||||
"add_to_shared_album": "शेयर किए गए एल्बम में डालें",
|
"add_to_shared_album": "शेयर किए गए एल्बम में डालें",
|
||||||
|
"add_upload_to_stack": "स्टैक में अपलोड करें",
|
||||||
"add_url": "URL डालें",
|
"add_url": "URL डालें",
|
||||||
"added_to_archive": "संग्रहीत कर दिया गया है",
|
"added_to_archive": "संग्रहीत कर दिया गया है",
|
||||||
"added_to_favorites": "पसंदीदा में डाला गया",
|
"added_to_favorites": "पसंदीदा में डाला गया",
|
||||||
@@ -115,11 +120,18 @@
|
|||||||
"library_settings_description": "बाहरी संग्रह सेटिंग प्रबंधित करें",
|
"library_settings_description": "बाहरी संग्रह सेटिंग प्रबंधित करें",
|
||||||
"library_tasks_description": "नई और/या परिवर्तित संपत्तियों के लिए बाहरी लाइब्रेरीज़ को स्कैन करें",
|
"library_tasks_description": "नई और/या परिवर्तित संपत्तियों के लिए बाहरी लाइब्रेरीज़ को स्कैन करें",
|
||||||
"library_watching_enable_description": "एक्सटर्नल लाइब्रेरीज में बदलावों के लिए निगरानी रखें",
|
"library_watching_enable_description": "एक्सटर्नल लाइब्रेरीज में बदलावों के लिए निगरानी रखें",
|
||||||
"library_watching_settings": "पुस्तकालय निगरानी (प्रायोगिक)",
|
"library_watching_settings": "पुस्तकालय निगरानी [प्रायोगिक]",
|
||||||
"library_watching_settings_description": "परिवर्तित फ़ाइलों पर स्वचालित रूप से नज़र रखें",
|
"library_watching_settings_description": "परिवर्तित फ़ाइलों पर स्वचालित रूप से नज़र रखें",
|
||||||
"logging_enable_description": "लॉगिंग करने देना",
|
"logging_enable_description": "लॉगिंग करने देना",
|
||||||
"logging_level_description": "सक्षम होने पर, किस लॉग स्तर का उपयोग करना है।",
|
"logging_level_description": "सक्षम होने पर, किस लॉग स्तर का उपयोग करना है।",
|
||||||
"logging_settings": "लॉगिंग",
|
"logging_settings": "लॉगिंग",
|
||||||
|
"machine_learning_availability_checks": "उपलब्धता जांच",
|
||||||
|
"machine_learning_availability_checks_description": "उपलब्ध मशीन लर्निंग सर्वर का स्वचालित रूप से पता लगाएं और प्राथमिकता दें",
|
||||||
|
"machine_learning_availability_checks_enabled": "उपलब्धता जांच सक्षम करें",
|
||||||
|
"machine_learning_availability_checks_interval": "अंतराल की जाँच करें",
|
||||||
|
"machine_learning_availability_checks_interval_description": "उपलब्धता जांच के बीच मिलीसेकेंड में अंतराल",
|
||||||
|
"machine_learning_availability_checks_timeout": "अनुरोध समयबाह्य हुआ",
|
||||||
|
"machine_learning_availability_checks_timeout_description": "उपलब्धता जांच के लिए मिलीसेकंड में समयबाह्य अंतराल",
|
||||||
"machine_learning_clip_model": "क्लिप मॉडल",
|
"machine_learning_clip_model": "क्लिप मॉडल",
|
||||||
"machine_learning_clip_model_description": "CLIP मॉडल का नाम <link>यहां</link> सूचीबद्ध है। ध्यान दें कि मॉडल बदलने पर आपको सभी छवियों के लिए 'स्मार्ट सर्च' जोब फिर से चलाना होगा।",
|
"machine_learning_clip_model_description": "CLIP मॉडल का नाम <link>यहां</link> सूचीबद्ध है। ध्यान दें कि मॉडल बदलने पर आपको सभी छवियों के लिए 'स्मार्ट सर्च' जोब फिर से चलाना होगा।",
|
||||||
"machine_learning_duplicate_detection": "डुप्लिकेट का पता लगाना",
|
"machine_learning_duplicate_detection": "डुप्लिकेट का पता लगाना",
|
||||||
@@ -142,6 +154,18 @@
|
|||||||
"machine_learning_min_detection_score_description": "किसी चेहरे का पता लगाने के लिए न्यूनतम आत्मविश्वास स्कोर 0-1 होना चाहिए।",
|
"machine_learning_min_detection_score_description": "किसी चेहरे का पता लगाने के लिए न्यूनतम आत्मविश्वास स्कोर 0-1 होना चाहिए।",
|
||||||
"machine_learning_min_recognized_faces": "निम्नतम पहचाने चेहरे",
|
"machine_learning_min_recognized_faces": "निम्नतम पहचाने चेहरे",
|
||||||
"machine_learning_min_recognized_faces_description": "किसी व्यक्ति के लिए पहचाने जाने वाले चेहरों की न्यूनतम संख्या।",
|
"machine_learning_min_recognized_faces_description": "किसी व्यक्ति के लिए पहचाने जाने वाले चेहरों की न्यूनतम संख्या।",
|
||||||
|
"machine_learning_ocr": "ओ.सी.आर",
|
||||||
|
"machine_learning_ocr_description": "चित्रों में पाठ को पहचानने के लिए मशीन लर्निंग का उपयोग करें",
|
||||||
|
"machine_learning_ocr_enabled": "ओ.सी.आर. सक्षम करें",
|
||||||
|
"machine_learning_ocr_enabled_description": "यदि अक्षम किया गया है, तो चित्रों पर पाठ-पहचान नहीं होगा।",
|
||||||
|
"machine_learning_ocr_max_resolution": "अधिकतम रिज़ॉल्यूशन",
|
||||||
|
"machine_learning_ocr_max_resolution_description": "इस रिज़ॉल्यूशन से ऊपर के प्रदर्शन का आकार मूल अनुपात को संरक्षित करते हुए बदल दिया जाएगा। उच्च मान अधिक सटीक होते हैं, लेकिन संसाधित होने में अधिक मेमोरी और समय लगाते हैं।",
|
||||||
|
"machine_learning_ocr_min_detection_score": "न्यूनतम खोज अंक",
|
||||||
|
"machine_learning_ocr_min_detection_score_description": "पाठ का पता लगाने के लिए 0-1 के बीच न्यूनतम आत्मविश्वास अंक। कम अंक अधिक पाठ का पता लगाएंगे लेकिन परिणाम गलत हो सकते हैं।",
|
||||||
|
"machine_learning_ocr_min_recognition_score": "न्यूनतम पहचान अंक",
|
||||||
|
"machine_learning_ocr_min_score_recognition_description": "पाठ को पहचानने के लिए 0-1 के बीच न्यूनतम आत्मविश्वास अंक। कम अंक अधिक पाठ को पहचानेंगे लेकिन परिणाम गलत हो सकते हैं।",
|
||||||
|
"machine_learning_ocr_model": "ओसीआर प्रतिमान",
|
||||||
|
"machine_learning_ocr_model_description": "सर्वर प्रतिमान मोबाइल प्रतिमान की तुलना में अधिक सटीक होते हैं, लेकिन संसाधित होने में अधिक मेमोरी और समय लेते हैं।",
|
||||||
"machine_learning_settings": "मशीन लर्निंग सेटिंग्स",
|
"machine_learning_settings": "मशीन लर्निंग सेटिंग्स",
|
||||||
"machine_learning_settings_description": "मशीन लर्निंग सुविधाओं और सेटिंग्स को प्रबंधित करें",
|
"machine_learning_settings_description": "मशीन लर्निंग सुविधाओं और सेटिंग्स को प्रबंधित करें",
|
||||||
"machine_learning_smart_search": "स्मार्ट खोज",
|
"machine_learning_smart_search": "स्मार्ट खोज",
|
||||||
@@ -199,6 +223,8 @@
|
|||||||
"notification_email_ignore_certificate_errors_description": "टीएलएस प्रमाणपत्र सत्यापन त्रुटियों पर ध्यान न दें (अनुशंसित नहीं)",
|
"notification_email_ignore_certificate_errors_description": "टीएलएस प्रमाणपत्र सत्यापन त्रुटियों पर ध्यान न दें (अनुशंसित नहीं)",
|
||||||
"notification_email_password_description": "ईमेल सर्वर से प्रमाणीकरण करते समय उपयोग किया जाने वाला पासवर्ड",
|
"notification_email_password_description": "ईमेल सर्वर से प्रमाणीकरण करते समय उपयोग किया जाने वाला पासवर्ड",
|
||||||
"notification_email_port_description": "ईमेल सर्वर का पोर्ट (जैसे 25, 465, या 587)",
|
"notification_email_port_description": "ईमेल सर्वर का पोर्ट (जैसे 25, 465, या 587)",
|
||||||
|
"notification_email_secure": "एस एम टी पी एस",
|
||||||
|
"notification_email_secure_description": "एस.एम.टी.पी.एस. प्रयोग करें (टी.एल.एस पर एस.एम.टी.पी)",
|
||||||
"notification_email_sent_test_email_button": "परीक्षण ईमेल भेजें और सहेजें",
|
"notification_email_sent_test_email_button": "परीक्षण ईमेल भेजें और सहेजें",
|
||||||
"notification_email_setting_description": "ईमेल सूचनाएं भेजने के लिए सेटिंग्स",
|
"notification_email_setting_description": "ईमेल सूचनाएं भेजने के लिए सेटिंग्स",
|
||||||
"notification_email_test_email": "परीक्षण ईमेल भेजें",
|
"notification_email_test_email": "परीक्षण ईमेल भेजें",
|
||||||
@@ -231,6 +257,7 @@
|
|||||||
"oauth_storage_quota_default_description": "GiB में कोटा का उपयोग तब किया जाएगा जब कोई दावा प्रदान नहीं किया गया हो ।",
|
"oauth_storage_quota_default_description": "GiB में कोटा का उपयोग तब किया जाएगा जब कोई दावा प्रदान नहीं किया गया हो ।",
|
||||||
"oauth_timeout": "ब्रेक का अनुरोध",
|
"oauth_timeout": "ब्रेक का अनुरोध",
|
||||||
"oauth_timeout_description": "अनुरोधों के लिए समय-सीमा मिलीसेकंड में",
|
"oauth_timeout_description": "अनुरोधों के लिए समय-सीमा मिलीसेकंड में",
|
||||||
|
"ocr_job_description": "चित्रों में पाठ को पहचानने के लिए मशीन लर्निंग का उपयोग करें",
|
||||||
"password_enable_description": "ईमेल और पासवर्ड से लॉगिन करें",
|
"password_enable_description": "ईमेल और पासवर्ड से लॉगिन करें",
|
||||||
"password_settings": "पासवर्ड लॉग इन",
|
"password_settings": "पासवर्ड लॉग इन",
|
||||||
"password_settings_description": "पासवर्ड लॉगिन सेटिंग प्रबंधित करें",
|
"password_settings_description": "पासवर्ड लॉगिन सेटिंग प्रबंधित करें",
|
||||||
@@ -321,7 +348,7 @@
|
|||||||
"transcoding_max_b_frames": "अधिकतम बी-फ्रेम",
|
"transcoding_max_b_frames": "अधिकतम बी-फ्रेम",
|
||||||
"transcoding_max_b_frames_description": "उच्च मान संपीड़न दक्षता में सुधार करते हैं, लेकिन एन्कोडिंग को धीमा कर देते हैं।",
|
"transcoding_max_b_frames_description": "उच्च मान संपीड़न दक्षता में सुधार करते हैं, लेकिन एन्कोडिंग को धीमा कर देते हैं।",
|
||||||
"transcoding_max_bitrate": "अधिकतम बिटरेट",
|
"transcoding_max_bitrate": "अधिकतम बिटरेट",
|
||||||
"transcoding_max_bitrate_description": "अधिकतम बिटरेट सेट करने से फ़ाइल आकार को गुणवत्ता पर मामूली लागत के साथ अधिक पूर्वानुमानित किया जा सकता है। 720p पर, सामान्य मान VP9 या HEVC के लिए 2600k kbit/s या H.264 के लिए 4500k kbit/s हैं। 0 पर सेट होने पर अक्षम।",
|
"transcoding_max_bitrate_description": "अधिकतम बिटरेट सेट करने से फ़ाइल आकार को गुणवत्ता पर मामूली लागत के साथ अधिक पूर्वानुमानित किया जा सकता है। 720p पर, सामान्य मान VP9 या HEVC के लिए 2600k kbit/s या H.264 के लिए 4500k kbit/s हैं। 0 पर सेट होने पर अक्षम। जब कोई इकाई निर्दिष्ट नहीं की जाती है, तो k (kbit/s के लिए) मान लिया जाता है; इसलिए 5000, 5000k, और 5M (Mbit/s के लिए) समतुल्य हैं।",
|
||||||
"transcoding_max_keyframe_interval": "अधिकतम मुख्यफ़्रेम अंतराल",
|
"transcoding_max_keyframe_interval": "अधिकतम मुख्यफ़्रेम अंतराल",
|
||||||
"transcoding_max_keyframe_interval_description": "मुख्यफ़्रेम के बीच अधिकतम फ़्रेम दूरी निर्धारित करता है।",
|
"transcoding_max_keyframe_interval_description": "मुख्यफ़्रेम के बीच अधिकतम फ़्रेम दूरी निर्धारित करता है।",
|
||||||
"transcoding_optimal_description": "लक्ष्य रिज़ॉल्यूशन से अधिक ऊंचे वीडियो या स्वीकृत प्रारूप में नहीं",
|
"transcoding_optimal_description": "लक्ष्य रिज़ॉल्यूशन से अधिक ऊंचे वीडियो या स्वीकृत प्रारूप में नहीं",
|
||||||
@@ -355,6 +382,9 @@
|
|||||||
"trash_number_of_days_description": "संपत्तियों को स्थायी रूप से हटाने से पहले उन्हें कूड़ेदान में रखने के लिए दिनों की संख्या",
|
"trash_number_of_days_description": "संपत्तियों को स्थायी रूप से हटाने से पहले उन्हें कूड़ेदान में रखने के लिए दिनों की संख्या",
|
||||||
"trash_settings": "ट्रैश सेटिंग",
|
"trash_settings": "ट्रैश सेटिंग",
|
||||||
"trash_settings_description": "ट्रैश सेटिंग प्रबंधित करें",
|
"trash_settings_description": "ट्रैश सेटिंग प्रबंधित करें",
|
||||||
|
"unlink_all_oauth_accounts": "सभी ओ.औथ खातों से संपर्क तोड़ दें",
|
||||||
|
"unlink_all_oauth_accounts_description": "नए प्रदाता पर सतानांतरण करने से पहले सभी ओ.औथ खातों से संपर्क तोड़ना याद रखें।",
|
||||||
|
"unlink_all_oauth_accounts_prompt": "क्या आप वाकई सभी ओ.औथ खातों से संपर्क तोड़ना चाहते हैं? इससे प्रत्येक उपयोगकर्ता के लिए ओ.औथ आई.डी रद्द हो जाएगी और इसे पूर्ववत नहीं किया जा सकेगा।",
|
||||||
"user_cleanup_job": "उपयोगकर्ता सफ़ाई",
|
"user_cleanup_job": "उपयोगकर्ता सफ़ाई",
|
||||||
"user_delete_delay": "<b>{user}</b> के खाते और परिसंपत्तियों को {delay, plural, one {# day} other {# days}} में स्थायी रूप से हटाने के लिए शेड्यूल किया जाएगा।",
|
"user_delete_delay": "<b>{user}</b> के खाते और परिसंपत्तियों को {delay, plural, one {# day} other {# days}} में स्थायी रूप से हटाने के लिए शेड्यूल किया जाएगा।",
|
||||||
"user_delete_delay_settings": "हटाने में देरी",
|
"user_delete_delay_settings": "हटाने में देरी",
|
||||||
@@ -388,6 +418,8 @@
|
|||||||
"advanced_settings_prefer_remote_title": "दूरस्थ छवियों को प्राथमिकता दें",
|
"advanced_settings_prefer_remote_title": "दूरस्थ छवियों को प्राथमिकता दें",
|
||||||
"advanced_settings_proxy_headers_subtitle": "प्रत्येक नेटवर्क अनुरोध के साथ इम्मिच द्वारा भेजे जाने वाले प्रॉक्सी हेडर को परिभाषित करें",
|
"advanced_settings_proxy_headers_subtitle": "प्रत्येक नेटवर्क अनुरोध के साथ इम्मिच द्वारा भेजे जाने वाले प्रॉक्सी हेडर को परिभाषित करें",
|
||||||
"advanced_settings_proxy_headers_title": "प्रॉक्सी हेडर",
|
"advanced_settings_proxy_headers_title": "प्रॉक्सी हेडर",
|
||||||
|
"advanced_settings_readonly_mode_subtitle": "रीड-ओनली प्रणाली को सक्षम करता है जहां चित्र को केवल देखा जा सकता है, एकाधिक चित्रों का चयन करना, साझा करना, कास्टिंग करना, हटाना जैसी सभी चीज़ें अक्षम हैं। मुख्य स्क्रीन में उपयोगकर्ता- अवतार के माध्यम से रीड-ओनली प्रणाली को सक्षम/अक्षम करें",
|
||||||
|
"advanced_settings_readonly_mode_title": "रीड-ओनली प्रणाली",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "सर्वर एंडपॉइंट के लिए SSL प्रमाणपत्र सत्यापन को छोड़ देता है। स्व-हस्ताक्षरित प्रमाणपत्रों के लिए आवश्यक है।",
|
"advanced_settings_self_signed_ssl_subtitle": "सर्वर एंडपॉइंट के लिए SSL प्रमाणपत्र सत्यापन को छोड़ देता है। स्व-हस्ताक्षरित प्रमाणपत्रों के लिए आवश्यक है।",
|
||||||
"advanced_settings_self_signed_ssl_title": "स्व-हस्ताक्षरित SSL प्रमाणपत्रों की अनुमति दें",
|
"advanced_settings_self_signed_ssl_title": "स्व-हस्ताक्षरित SSL प्रमाणपत्रों की अनुमति दें",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "वेब पर कार्रवाई किए जाने पर इस डिवाइस पर किसी संपत्ति को स्वचालित रूप से हटाएँ या पुनर्स्थापित करें",
|
"advanced_settings_sync_remote_deletions_subtitle": "वेब पर कार्रवाई किए जाने पर इस डिवाइस पर किसी संपत्ति को स्वचालित रूप से हटाएँ या पुनर्स्थापित करें",
|
||||||
@@ -415,6 +447,7 @@
|
|||||||
"album_remove_user_confirmation": "क्या आप वाकई {user} को हटाना चाहते हैं?",
|
"album_remove_user_confirmation": "क्या आप वाकई {user} को हटाना चाहते हैं?",
|
||||||
"album_search_not_found": "आपकी खोज से मेल खाता कोई एल्बम नहीं मिला",
|
"album_search_not_found": "आपकी खोज से मेल खाता कोई एल्बम नहीं मिला",
|
||||||
"album_share_no_users": "ऐसा लगता है कि आपने यह एल्बम सभी उपयोगकर्ताओं के साथ साझा कर दिया है या आपके पास साझा करने के लिए कोई उपयोगकर्ता नहीं है।",
|
"album_share_no_users": "ऐसा लगता है कि आपने यह एल्बम सभी उपयोगकर्ताओं के साथ साझा कर दिया है या आपके पास साझा करने के लिए कोई उपयोगकर्ता नहीं है।",
|
||||||
|
"album_summary": "एल्बम सारांश",
|
||||||
"album_updated": "एल्बम अपडेट किया गया",
|
"album_updated": "एल्बम अपडेट किया गया",
|
||||||
"album_updated_setting_description": "जब किसी साझा एल्बम में नई संपत्तियाँ हों तो एक ईमेल सूचना प्राप्त करें",
|
"album_updated_setting_description": "जब किसी साझा एल्बम में नई संपत्तियाँ हों तो एक ईमेल सूचना प्राप्त करें",
|
||||||
"album_user_left": "बायाँ {album}",
|
"album_user_left": "बायाँ {album}",
|
||||||
@@ -448,11 +481,16 @@
|
|||||||
"api_key_description": "यह की केवल एक बार दिखाई जाएगी। विंडो बंद करने से पहले कृपया इसे कॉपी करना सुनिश्चित करें।।",
|
"api_key_description": "यह की केवल एक बार दिखाई जाएगी। विंडो बंद करने से पहले कृपया इसे कॉपी करना सुनिश्चित करें।।",
|
||||||
"api_key_empty": "आपका एपीआई कुंजी नाम खाली नहीं होना चाहिए",
|
"api_key_empty": "आपका एपीआई कुंजी नाम खाली नहीं होना चाहिए",
|
||||||
"api_keys": "एपीआई कीज",
|
"api_keys": "एपीआई कीज",
|
||||||
|
"app_architecture_variant": "रूपान्तर (स्थापत्य/आर्किटेक्चर)",
|
||||||
"app_bar_signout_dialog_content": "क्या आप सुनिश्चित हैं कि आप लॉग आउट करना चाहते हैं?",
|
"app_bar_signout_dialog_content": "क्या आप सुनिश्चित हैं कि आप लॉग आउट करना चाहते हैं?",
|
||||||
"app_bar_signout_dialog_ok": "हाँ",
|
"app_bar_signout_dialog_ok": "हाँ",
|
||||||
"app_bar_signout_dialog_title": "लॉग आउट",
|
"app_bar_signout_dialog_title": "लॉग आउट",
|
||||||
|
"app_download_links": "ऐप डाउनलोड लिंक",
|
||||||
"app_settings": "एप्लिकेशन सेटिंग",
|
"app_settings": "एप्लिकेशन सेटिंग",
|
||||||
|
"app_stores": "ऐप स्टोर/गोदाम",
|
||||||
|
"app_update_available": "आधुनिक ऐप उपलब्ध है",
|
||||||
"appears_in": "प्रकट होता है",
|
"appears_in": "प्रकट होता है",
|
||||||
|
"apply_count": "लागू करें ({count, number})",
|
||||||
"archive": "संग्रहालय",
|
"archive": "संग्रहालय",
|
||||||
"archive_action_prompt": "{count} को संग्रह में जोड़ा गया",
|
"archive_action_prompt": "{count} को संग्रह में जोड़ा गया",
|
||||||
"archive_or_unarchive_photo": "फ़ोटो को संग्रहीत या असंग्रहीत करें",
|
"archive_or_unarchive_photo": "फ़ोटो को संग्रहीत या असंग्रहीत करें",
|
||||||
@@ -461,17 +499,17 @@
|
|||||||
"archive_size": "पुरालेख आकार",
|
"archive_size": "पुरालेख आकार",
|
||||||
"archive_size_description": "डाउनलोड के लिए संग्रह आकार कॉन्फ़िगर करें (GiB में)",
|
"archive_size_description": "डाउनलोड के लिए संग्रह आकार कॉन्फ़िगर करें (GiB में)",
|
||||||
"archived": "संग्रहित",
|
"archived": "संग्रहित",
|
||||||
"archived_count": "{count, plural, other {# संग्रहीत किए गए}",
|
"archived_count": "{count, plural, other {# संग्रहीत किए गए}}",
|
||||||
"are_these_the_same_person": "क्या ये वही व्यक्ति हैं?",
|
"are_these_the_same_person": "क्या ये वही व्यक्ति हैं?",
|
||||||
"are_you_sure_to_do_this": "क्या आप वास्तव में इसे करना चाहते हैं?",
|
"are_you_sure_to_do_this": "क्या आप वास्तव में इसे करना चाहते हैं?",
|
||||||
"asset_action_delete_err_read_only": "केवल पढ़ने योग्य परिसंपत्ति(ओं) को हटाया नहीं जा सकता, छोड़ा जा सकता है",
|
"asset_action_delete_err_read_only": "केवल पढ़ने योग्य परिसंपत्ति(ओं) को हटाया नहीं जा सकता, छोड़ा जा सकता है",
|
||||||
"asset_action_share_err_offline": "ऑफ़लाइन परिसंपत्ति(एँ) प्राप्त नहीं की जा सकती, छोड़ी जा रही है",
|
"asset_action_share_err_offline": "ऑफ़लाइन परिसंपत्ति(एँ) प्राप्त नहीं की जा सकती, छोड़ी जा रही है",
|
||||||
"asset_added_to_album": "एल्बम में डाला गया",
|
"asset_added_to_album": "एल्बम में डाला गया",
|
||||||
"asset_adding_to_album": "एल्बम में डाला जा रहा है..।",
|
"asset_adding_to_album": "एल्बम में डाला जा रहा है…",
|
||||||
"asset_description_updated": "संपत्ति विवरण अद्यतन कर दिया गया है",
|
"asset_description_updated": "संपत्ति विवरण अद्यतन कर दिया गया है",
|
||||||
"asset_filename_is_offline": "एसेट {filename} ऑफ़लाइन है",
|
"asset_filename_is_offline": "एसेट {filename} ऑफ़लाइन है",
|
||||||
"asset_has_unassigned_faces": "एसेट में अनिर्धारित चेहरे हैं",
|
"asset_has_unassigned_faces": "एसेट में अनिर्धारित चेहरे हैं",
|
||||||
"asset_hashing": "हैशिंग...।",
|
"asset_hashing": "हैशिंग…",
|
||||||
"asset_list_group_by_sub_title": "द्वारा समूह बनाएं",
|
"asset_list_group_by_sub_title": "द्वारा समूह बनाएं",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "गतिशील लेआउट",
|
"asset_list_layout_settings_dynamic_layout_title": "गतिशील लेआउट",
|
||||||
"asset_list_layout_settings_group_automatically": "स्वचालित",
|
"asset_list_layout_settings_group_automatically": "स्वचालित",
|
||||||
@@ -485,6 +523,8 @@
|
|||||||
"asset_restored_successfully": "संपत्ति(याँ) सफलतापूर्वक पुनर्स्थापित की गईं",
|
"asset_restored_successfully": "संपत्ति(याँ) सफलतापूर्वक पुनर्स्थापित की गईं",
|
||||||
"asset_skipped": "छोड़ा गया",
|
"asset_skipped": "छोड़ा गया",
|
||||||
"asset_skipped_in_trash": "कचरे में",
|
"asset_skipped_in_trash": "कचरे में",
|
||||||
|
"asset_trashed": "एसेट नष्ट किया गया",
|
||||||
|
"asset_troubleshoot": "एसेट समस्या निवारण",
|
||||||
"asset_uploaded": "अपलोड किए गए",
|
"asset_uploaded": "अपलोड किए गए",
|
||||||
"asset_uploading": "अपलोड हो रहा है…",
|
"asset_uploading": "अपलोड हो रहा है…",
|
||||||
"asset_viewer_settings_subtitle": "अपनी गैलरी व्यूअर सेटिंग प्रबंधित करें",
|
"asset_viewer_settings_subtitle": "अपनी गैलरी व्यूअर सेटिंग प्रबंधित करें",
|
||||||
@@ -492,7 +532,9 @@
|
|||||||
"assets": "संपत्तियां",
|
"assets": "संपत्तियां",
|
||||||
"assets_added_count": "{count, plural, one {# asset} other {# assets}} जोड़ा गया",
|
"assets_added_count": "{count, plural, one {# asset} other {# assets}} जोड़ा गया",
|
||||||
"assets_added_to_album_count": "एल्बम में {count, plural, one {# asset} other {# assets}} जोड़ा गया",
|
"assets_added_to_album_count": "एल्बम में {count, plural, one {# asset} other {# assets}} जोड़ा गया",
|
||||||
|
"assets_added_to_albums_count": "{assetTotal, plural, one {# asset} other {# assets}} को {albumTotal, plural, one {# album} other {# albums}} से जोड़ा गया",
|
||||||
"assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} को एल्बम में नहीं जोड़ा जा सकता",
|
"assets_cannot_be_added_to_album_count": "{count, plural, one {Asset} other {Assets}} को एल्बम में नहीं जोड़ा जा सकता",
|
||||||
|
"assets_cannot_be_added_to_albums": "{count, plural, one {Asset} other {Assets}} किसी एल्बम से नहीं जोड़े जा सकते",
|
||||||
"assets_count": "{count, plural, one {# आइटम} other {# आइटम्स}}",
|
"assets_count": "{count, plural, one {# आइटम} other {# आइटम्स}}",
|
||||||
"assets_deleted_permanently": "{count} संपत्ति(याँ) स्थायी रूप से हटा दी गईं",
|
"assets_deleted_permanently": "{count} संपत्ति(याँ) स्थायी रूप से हटा दी गईं",
|
||||||
"assets_deleted_permanently_from_server": "{count} संपत्ति(याँ) इमिच सर्वर से स्थायी रूप से हटा दी गईं",
|
"assets_deleted_permanently_from_server": "{count} संपत्ति(याँ) इमिच सर्वर से स्थायी रूप से हटा दी गईं",
|
||||||
@@ -509,14 +551,17 @@
|
|||||||
"assets_trashed_count": "ट्रैश की गई {count, plural, one {# asset} other {# assets}}",
|
"assets_trashed_count": "ट्रैश की गई {count, plural, one {# asset} other {# assets}}",
|
||||||
"assets_trashed_from_server": "{count} संपत्ति(याँ) इमिच सर्वर से कचरे में डाली गईं",
|
"assets_trashed_from_server": "{count} संपत्ति(याँ) इमिच सर्वर से कचरे में डाली गईं",
|
||||||
"assets_were_part_of_album_count": "{count, plural, one {Asset was} other {Assets were}}एल्बम का पहले से ही हिस्सा थे",
|
"assets_were_part_of_album_count": "{count, plural, one {Asset was} other {Assets were}}एल्बम का पहले से ही हिस्सा थे",
|
||||||
|
"assets_were_part_of_albums_count": "{count, plural, one {Asset was} other {Assets were}} पहले ही एल्बम में संयोजित हैं",
|
||||||
"authorized_devices": "अधिकृत उपकरण",
|
"authorized_devices": "अधिकृत उपकरण",
|
||||||
"automatic_endpoint_switching_subtitle": "उपलब्ध होने पर निर्दिष्ट वाई-फाई से स्थानीय रूप से कनेक्ट करें और अन्यत्र वैकल्पिक कनेक्शन का उपयोग करें",
|
"automatic_endpoint_switching_subtitle": "उपलब्ध होने पर निर्दिष्ट वाई-फाई से स्थानीय रूप से कनेक्ट करें और अन्यत्र वैकल्पिक कनेक्शन का उपयोग करें",
|
||||||
"automatic_endpoint_switching_title": "स्वचालित URL स्विचिंग",
|
"automatic_endpoint_switching_title": "स्वचालित URL स्विचिंग",
|
||||||
"autoplay_slideshow": "ऑटोप्ले स्लाइड शो",
|
"autoplay_slideshow": "ऑटोप्ले स्लाइड शो",
|
||||||
"back": "वापस",
|
"back": "वापस",
|
||||||
"back_close_deselect": "वापस जाएँ, बंद करें, या अचयनित करें",
|
"back_close_deselect": "वापस जाएँ, बंद करें, या अचयनित करें",
|
||||||
|
"background_backup_running_error": "परिप्रेक्ष्य बैकअप अभी जारी है, नियमावली बैकअप प्रारंभ नहीं किया जा सकता",
|
||||||
"background_location_permission": "पृष्ठभूमि स्थान अनुमति",
|
"background_location_permission": "पृष्ठभूमि स्थान अनुमति",
|
||||||
"background_location_permission_content": "पृष्ठभूमि में चलते समय नेटवर्क बदलने के लिए, Immich के पास *हमेशा* सटीक स्थान तक पहुंच होनी चाहिए ताकि ऐप वाई-फाई नेटवर्क का नाम पढ़ सके",
|
"background_location_permission_content": "पृष्ठभूमि में चलते समय नेटवर्क बदलने के लिए, Immich के पास *हमेशा* सटीक स्थान तक पहुंच होनी चाहिए ताकि ऐप वाई-फाई नेटवर्क का नाम पढ़ सके",
|
||||||
|
"background_options": "परिप्रेक्ष्य विकल्प",
|
||||||
"backup": "बैकअप",
|
"backup": "बैकअप",
|
||||||
"backup_album_selection_page_albums_device": "डिवाइस पर एल्बम ({count})",
|
"backup_album_selection_page_albums_device": "डिवाइस पर एल्बम ({count})",
|
||||||
"backup_album_selection_page_albums_tap": "शामिल करने के लिए टैप करें, बाहर करने के लिए डबल टैप करें",
|
"backup_album_selection_page_albums_tap": "शामिल करने के लिए टैप करें, बाहर करने के लिए डबल टैप करें",
|
||||||
@@ -524,8 +569,10 @@
|
|||||||
"backup_album_selection_page_select_albums": "एल्बम चुनें",
|
"backup_album_selection_page_select_albums": "एल्बम चुनें",
|
||||||
"backup_album_selection_page_selection_info": "चयन जानकारी",
|
"backup_album_selection_page_selection_info": "चयन जानकारी",
|
||||||
"backup_album_selection_page_total_assets": "कुल अद्वितीय संपत्तियाँ",
|
"backup_album_selection_page_total_assets": "कुल अद्वितीय संपत्तियाँ",
|
||||||
|
"backup_albums_sync": "बैकअप एल्बम का तुल्यकालन",
|
||||||
"backup_all": "सभी",
|
"backup_all": "सभी",
|
||||||
"backup_background_service_backup_failed_message": "संपत्तियों का बैकअप लेने में विफल. पुनः प्रयास किया जा रहा है…",
|
"backup_background_service_backup_failed_message": "संपत्तियों का बैकअप लेने में विफल. पुनः प्रयास किया जा रहा है…",
|
||||||
|
"backup_background_service_complete_notification": "एसेट का बैकअप पूरा हुआ",
|
||||||
"backup_background_service_connection_failed_message": "सर्वर से कनेक्ट करने में विफल. पुनः प्रयास किया जा रहा है…",
|
"backup_background_service_connection_failed_message": "सर्वर से कनेक्ट करने में विफल. पुनः प्रयास किया जा रहा है…",
|
||||||
"backup_background_service_current_upload_notification": "{filename} अपलोड हो रहा है",
|
"backup_background_service_current_upload_notification": "{filename} अपलोड हो रहा है",
|
||||||
"backup_background_service_default_notification": "नई परिसंपत्तियों की जांच की जा रही है…",
|
"backup_background_service_default_notification": "नई परिसंपत्तियों की जांच की जा रही है…",
|
||||||
@@ -573,6 +620,7 @@
|
|||||||
"backup_controller_page_turn_on": "अग्रभूमि बैकअप चालू करें",
|
"backup_controller_page_turn_on": "अग्रभूमि बैकअप चालू करें",
|
||||||
"backup_controller_page_uploading_file_info": "फ़ाइल जानकारी अपलोड करना",
|
"backup_controller_page_uploading_file_info": "फ़ाइल जानकारी अपलोड करना",
|
||||||
"backup_err_only_album": "एकमात्र एल्बम नहीं हटाया जा सकता",
|
"backup_err_only_album": "एकमात्र एल्बम नहीं हटाया जा सकता",
|
||||||
|
"backup_error_sync_failed": "तुल्यकालन विफल. बैकअप संसाधित नहीं किया जा सकता।",
|
||||||
"backup_info_card_assets": "संपत्ति",
|
"backup_info_card_assets": "संपत्ति",
|
||||||
"backup_manual_cancelled": "रद्द",
|
"backup_manual_cancelled": "रद्द",
|
||||||
"backup_manual_in_progress": "अपलोड पहले से ही प्रगति पर है। कुछ देर बाद प्रयास करें",
|
"backup_manual_in_progress": "अपलोड पहले से ही प्रगति पर है। कुछ देर बाद प्रयास करें",
|
||||||
@@ -634,12 +682,16 @@
|
|||||||
"change_password_description": "यह या तो पहली बार है जब आप सिस्टम में साइन इन कर रहे हैं या आपका पासवर्ड बदलने का अनुरोध किया गया है।",
|
"change_password_description": "यह या तो पहली बार है जब आप सिस्टम में साइन इन कर रहे हैं या आपका पासवर्ड बदलने का अनुरोध किया गया है।",
|
||||||
"change_password_form_confirm_password": "पासवर्ड की पुष्टि कीजिये",
|
"change_password_form_confirm_password": "पासवर्ड की पुष्टि कीजिये",
|
||||||
"change_password_form_description": "नमस्ते {name},\n\nया तो आप पहली बार सिस्टम में साइन इन कर रहे हैं या फिर आपका पासवर्ड बदलने का अनुरोध किया गया है। कृपया नीचे नया पासवर्ड डालें।",
|
"change_password_form_description": "नमस्ते {name},\n\nया तो आप पहली बार सिस्टम में साइन इन कर रहे हैं या फिर आपका पासवर्ड बदलने का अनुरोध किया गया है। कृपया नीचे नया पासवर्ड डालें।",
|
||||||
|
"change_password_form_log_out": "अन्य सभी डिवाइस को लॉग आउट करें",
|
||||||
|
"change_password_form_log_out_description": "अन्य सभी डिवाइस से लॉग आउट करना अनुशंसित है",
|
||||||
"change_password_form_new_password": "नया पासवर्ड",
|
"change_password_form_new_password": "नया पासवर्ड",
|
||||||
"change_password_form_password_mismatch": "सांकेतिक शब्द मेल नहीं खाते",
|
"change_password_form_password_mismatch": "सांकेतिक शब्द मेल नहीं खाते",
|
||||||
"change_password_form_reenter_new_password": "नया पासवर्ड पुनः दर्ज करें",
|
"change_password_form_reenter_new_password": "नया पासवर्ड पुनः दर्ज करें",
|
||||||
"change_pin_code": "पिन कोड बदलें",
|
"change_pin_code": "पिन कोड बदलें",
|
||||||
"change_your_password": "अपना पासवर्ड बदलें",
|
"change_your_password": "अपना पासवर्ड बदलें",
|
||||||
"changed_visibility_successfully": "दृश्यता सफलतापूर्वक परिवर्तित",
|
"changed_visibility_successfully": "दृश्यता सफलतापूर्वक परिवर्तित",
|
||||||
|
"charging": "चार्जिंग",
|
||||||
|
"charging_requirement_mobile_backup": "परिप्रेक्ष्य बैकअप के लिए डिवाइस का चार्जिंग पे लगे होना आवश्यक है",
|
||||||
"check_corrupt_asset_backup": "दूषित परिसंपत्ति बैकअप की जाँच करें",
|
"check_corrupt_asset_backup": "दूषित परिसंपत्ति बैकअप की जाँच करें",
|
||||||
"check_corrupt_asset_backup_button": "जाँच करें",
|
"check_corrupt_asset_backup_button": "जाँच करें",
|
||||||
"check_corrupt_asset_backup_description": "यह जाँच केवल वाई-फ़ाई पर ही करें और सभी संपत्तियों का बैकअप लेने के बाद ही करें। इस प्रक्रिया में कुछ मिनट लग सकते हैं।",
|
"check_corrupt_asset_backup_description": "यह जाँच केवल वाई-फ़ाई पर ही करें और सभी संपत्तियों का बैकअप लेने के बाद ही करें। इस प्रक्रिया में कुछ मिनट लग सकते हैं।",
|
||||||
@@ -661,7 +713,7 @@
|
|||||||
"client_cert_subtitle": "केवल PKCS12 (.p12, .pfx) फ़ॉर्मैट का समर्थन करता है। प्रमाणपत्र आयात/हटाएँ केवल लॉगिन से पहले उपलब्ध हैं",
|
"client_cert_subtitle": "केवल PKCS12 (.p12, .pfx) फ़ॉर्मैट का समर्थन करता है। प्रमाणपत्र आयात/हटाएँ केवल लॉगिन से पहले उपलब्ध हैं",
|
||||||
"client_cert_title": "SSL क्लाइंट प्रमाणपत्र",
|
"client_cert_title": "SSL क्लाइंट प्रमाणपत्र",
|
||||||
"clockwise": "दक्षिणावर्त",
|
"clockwise": "दक्षिणावर्त",
|
||||||
"close": "बंद",
|
"close": "बंद करें",
|
||||||
"collapse": "गिर जाना",
|
"collapse": "गिर जाना",
|
||||||
"collapse_all": "सभी को संकुचित करें",
|
"collapse_all": "सभी को संकुचित करें",
|
||||||
"color": "रंग",
|
"color": "रंग",
|
||||||
@@ -671,9 +723,8 @@
|
|||||||
"comments_and_likes": "टिप्पणियाँ और पसंद",
|
"comments_and_likes": "टिप्पणियाँ और पसंद",
|
||||||
"comments_are_disabled": "टिप्पणियाँ अक्षम हैं",
|
"comments_are_disabled": "टिप्पणियाँ अक्षम हैं",
|
||||||
"common_create_new_album": "नया एल्बम बनाएँ",
|
"common_create_new_album": "नया एल्बम बनाएँ",
|
||||||
"common_server_error": "कृपया अपने नेटवर्क कनेक्शन की जांच करें, सुनिश्चित करें कि सर्वर पहुंच योग्य है और ऐप/सर्वर संस्करण संगत हैं।",
|
"completed": "पूरित",
|
||||||
"completed": "पुरा होना",
|
"confirm": "पुष्टि करें",
|
||||||
"confirm": "पुष्टि",
|
|
||||||
"confirm_admin_password": "एडमिन पासवर्ड की पुष्टि करें",
|
"confirm_admin_password": "एडमिन पासवर्ड की पुष्टि करें",
|
||||||
"confirm_delete_face": "क्या आप वाकई एसेट से {name} चेहरा हटाना चाहते हैं?",
|
"confirm_delete_face": "क्या आप वाकई एसेट से {name} चेहरा हटाना चाहते हैं?",
|
||||||
"confirm_delete_shared_link": "क्या आप वाकई इस साझा लिंक को हटाना चाहते हैं?",
|
"confirm_delete_shared_link": "क्या आप वाकई इस साझा लिंक को हटाना चाहते हैं?",
|
||||||
@@ -682,13 +733,13 @@
|
|||||||
"confirm_password": "पासवर्ड की पुष्टि कीजिये",
|
"confirm_password": "पासवर्ड की पुष्टि कीजिये",
|
||||||
"confirm_tag_face": "क्या आप इस चेहरे को {name} के रूप में टैग करना चाहते हैं?",
|
"confirm_tag_face": "क्या आप इस चेहरे को {name} के रूप में टैग करना चाहते हैं?",
|
||||||
"confirm_tag_face_unnamed": "क्या आप इस चेहरे को टैग करना चाहते हैं?",
|
"confirm_tag_face_unnamed": "क्या आप इस चेहरे को टैग करना चाहते हैं?",
|
||||||
"connected_device": "कनेक्टेड डिवाइस",
|
"connected_device": "योजित यंत्र",
|
||||||
"connected_to": "से जुड़ा",
|
"connected_to": "से जुड़ा",
|
||||||
"contain": "समाहित",
|
"contain": "समाहित",
|
||||||
"context": "संदर्भ",
|
"context": "संदर्भ",
|
||||||
"continue": "जारी",
|
"continue": "जारी",
|
||||||
"control_bottom_app_bar_create_new_album": "नया एल्बम बनाएँ",
|
"control_bottom_app_bar_create_new_album": "नया एल्बम बनाएँ",
|
||||||
"control_bottom_app_bar_delete_from_immich": "Immich से हटाएं",
|
"control_bottom_app_bar_delete_from_immich": "इम्मिच से हटाएं",
|
||||||
"control_bottom_app_bar_delete_from_local": "डिवाइस से हटाएं",
|
"control_bottom_app_bar_delete_from_local": "डिवाइस से हटाएं",
|
||||||
"control_bottom_app_bar_edit_location": "स्थान संपादित करें",
|
"control_bottom_app_bar_edit_location": "स्थान संपादित करें",
|
||||||
"control_bottom_app_bar_edit_time": "तारीख और समय संपादित करें",
|
"control_bottom_app_bar_edit_time": "तारीख और समय संपादित करें",
|
||||||
@@ -710,6 +761,7 @@
|
|||||||
"create": "तैयार करें",
|
"create": "तैयार करें",
|
||||||
"create_album": "एल्बम बनाओ",
|
"create_album": "एल्बम बनाओ",
|
||||||
"create_album_page_untitled": "शीर्षकहीन",
|
"create_album_page_untitled": "शीर्षकहीन",
|
||||||
|
"create_api_key": "ऐ.पी.आई. चाभी बनाएं",
|
||||||
"create_library": "लाइब्रेरी बनाएं",
|
"create_library": "लाइब्रेरी बनाएं",
|
||||||
"create_link": "लिंक बनाएं",
|
"create_link": "लिंक बनाएं",
|
||||||
"create_link_to_share": "शेयर करने के लिए लिंक बनाएं",
|
"create_link_to_share": "शेयर करने के लिए लिंक बनाएं",
|
||||||
@@ -726,6 +778,7 @@
|
|||||||
"create_user": "उपयोगकर्ता बनाइये",
|
"create_user": "उपयोगकर्ता बनाइये",
|
||||||
"created": "बनाया",
|
"created": "बनाया",
|
||||||
"created_at": "बनाया था",
|
"created_at": "बनाया था",
|
||||||
|
"creating_linked_albums": "जुड़े हुए एल्बम बनाए जा रहे हैं..।",
|
||||||
"crop": "छाँटें",
|
"crop": "छाँटें",
|
||||||
"curated_object_page_title": "चीज़ें",
|
"curated_object_page_title": "चीज़ें",
|
||||||
"current_device": "वर्तमान उपकरण",
|
"current_device": "वर्तमान उपकरण",
|
||||||
@@ -738,6 +791,7 @@
|
|||||||
"daily_title_text_date_year": "ई, एमएमएम दिन, वर्ष",
|
"daily_title_text_date_year": "ई, एमएमएम दिन, वर्ष",
|
||||||
"dark": "डार्क",
|
"dark": "डार्क",
|
||||||
"dark_theme": "डार्क थीम टॉगल करें",
|
"dark_theme": "डार्क थीम टॉगल करें",
|
||||||
|
"date": "दिनांक",
|
||||||
"date_after": "इसके बाद की तारीख",
|
"date_after": "इसके बाद की तारीख",
|
||||||
"date_and_time": "तिथि और समय",
|
"date_and_time": "तिथि और समय",
|
||||||
"date_before": "पहले की तारीख",
|
"date_before": "पहले की तारीख",
|
||||||
@@ -745,6 +799,7 @@
|
|||||||
"date_of_birth_saved": "जन्मतिथि सफलतापूर्वक सहेजी गई",
|
"date_of_birth_saved": "जन्मतिथि सफलतापूर्वक सहेजी गई",
|
||||||
"date_range": "तिथि सीमा",
|
"date_range": "तिथि सीमा",
|
||||||
"day": "दिन",
|
"day": "दिन",
|
||||||
|
"days": "दिन",
|
||||||
"deduplicate_all": "सभी को डुप्लिकेट करें",
|
"deduplicate_all": "सभी को डुप्लिकेट करें",
|
||||||
"deduplication_criteria_1": "छवि का आकार बाइट्स में",
|
"deduplication_criteria_1": "छवि का आकार बाइट्स में",
|
||||||
"deduplication_criteria_2": "EXIF डेटा की संख्या",
|
"deduplication_criteria_2": "EXIF डेटा की संख्या",
|
||||||
@@ -833,6 +888,8 @@
|
|||||||
"edit_date": "संपादन की तारीख",
|
"edit_date": "संपादन की तारीख",
|
||||||
"edit_date_and_time": "दिनांक और समय संपादित करें",
|
"edit_date_and_time": "दिनांक और समय संपादित करें",
|
||||||
"edit_date_and_time_action_prompt": "{count} तारीख और समय संपादित किए गए",
|
"edit_date_and_time_action_prompt": "{count} तारीख और समय संपादित किए गए",
|
||||||
|
"edit_date_and_time_by_offset": "अंकुर से दिनांक बदलें",
|
||||||
|
"edit_date_and_time_by_offset_interval": "नयी दिनांक सीमा: {from} - {to}",
|
||||||
"edit_description": "संपादित करें वर्णन",
|
"edit_description": "संपादित करें वर्णन",
|
||||||
"edit_description_prompt": "कृपया एक नया विवरण चुनें:",
|
"edit_description_prompt": "कृपया एक नया विवरण चुनें:",
|
||||||
"edit_exclusion_pattern": "बहिष्करण पैटर्न संपादित करें",
|
"edit_exclusion_pattern": "बहिष्करण पैटर्न संपादित करें",
|
||||||
@@ -849,7 +906,6 @@
|
|||||||
"edit_tag": "टैग बदलें",
|
"edit_tag": "टैग बदलें",
|
||||||
"edit_title": "शीर्षक संपादित करें",
|
"edit_title": "शीर्षक संपादित करें",
|
||||||
"edit_user": "यूजर को संपादित करो",
|
"edit_user": "यूजर को संपादित करो",
|
||||||
"edited": "संपादित",
|
|
||||||
"editor": "संपादक",
|
"editor": "संपादक",
|
||||||
"editor_close_without_save_prompt": "परिवर्तन सहेजे नहीं जाएँगे",
|
"editor_close_without_save_prompt": "परिवर्तन सहेजे नहीं जाएँगे",
|
||||||
"editor_close_without_save_title": "संपादक बंद करें?",
|
"editor_close_without_save_title": "संपादक बंद करें?",
|
||||||
@@ -872,7 +928,9 @@
|
|||||||
"error": "गलती",
|
"error": "गलती",
|
||||||
"error_change_sort_album": "एल्बम का क्रम बदलने में असफल रहा",
|
"error_change_sort_album": "एल्बम का क्रम बदलने में असफल रहा",
|
||||||
"error_delete_face": "एसेट से चेहरे को हटाने में त्रुटि हुई",
|
"error_delete_face": "एसेट से चेहरे को हटाने में त्रुटि हुई",
|
||||||
|
"error_getting_places": "स्थानों को प्राप्त करने में त्रुटि हुई",
|
||||||
"error_loading_image": "छवि लोड करने में त्रुटि",
|
"error_loading_image": "छवि लोड करने में त्रुटि",
|
||||||
|
"error_loading_partners": "जोड़ीदार लोड करने में त्रुटि हुई: {error}",
|
||||||
"error_saving_image": "त्रुटि: {error}",
|
"error_saving_image": "त्रुटि: {error}",
|
||||||
"error_tag_face_bounding_box": "चेहरे को टैग करने में त्रुटि – बाउंडिंग बॉक्स निर्देशांक प्राप्त नहीं कर सके",
|
"error_tag_face_bounding_box": "चेहरे को टैग करने में त्रुटि – बाउंडिंग बॉक्स निर्देशांक प्राप्त नहीं कर सके",
|
||||||
"error_title": "त्रुटि - कुछ गलत हो गया",
|
"error_title": "त्रुटि - कुछ गलत हो गया",
|
||||||
@@ -905,6 +963,7 @@
|
|||||||
"failed_to_load_notifications": "सूचनाएँ लोड करने में विफल",
|
"failed_to_load_notifications": "सूचनाएँ लोड करने में विफल",
|
||||||
"failed_to_load_people": "लोगों को लोड करने में विफल",
|
"failed_to_load_people": "लोगों को लोड करने में विफल",
|
||||||
"failed_to_remove_product_key": "उत्पाद कुंजी निकालने में विफल",
|
"failed_to_remove_product_key": "उत्पाद कुंजी निकालने में विफल",
|
||||||
|
"failed_to_reset_pin_code": "पिन कोड रीसेट करना विफल हुआ",
|
||||||
"failed_to_stack_assets": "परिसंपत्तियों का ढेर लगाने में विफल",
|
"failed_to_stack_assets": "परिसंपत्तियों का ढेर लगाने में विफल",
|
||||||
"failed_to_unstack_assets": "परिसंपत्तियों का ढेर खोलने में विफल",
|
"failed_to_unstack_assets": "परिसंपत्तियों का ढेर खोलने में विफल",
|
||||||
"failed_to_update_notification_status": "सूचना की स्थिति अपडेट करने में विफल",
|
"failed_to_update_notification_status": "सूचना की स्थिति अपडेट करने में विफल",
|
||||||
@@ -913,6 +972,7 @@
|
|||||||
"paths_validation_failed": "{paths, plural, one {# पथ} other {# पथ}} सत्यापन में विफल रहे",
|
"paths_validation_failed": "{paths, plural, one {# पथ} other {# पथ}} सत्यापन में विफल रहे",
|
||||||
"profile_picture_transparent_pixels": "प्रोफ़ाइल चित्रों में पारदर्शी पिक्सेल नहीं हो सकते।",
|
"profile_picture_transparent_pixels": "प्रोफ़ाइल चित्रों में पारदर्शी पिक्सेल नहीं हो सकते।",
|
||||||
"quota_higher_than_disk_size": "आपने डिस्क आकार से अधिक कोटा निर्धारित किया है",
|
"quota_higher_than_disk_size": "आपने डिस्क आकार से अधिक कोटा निर्धारित किया है",
|
||||||
|
"something_went_wrong": "कुछ त्रुटि हुई",
|
||||||
"unable_to_add_album_users": "उपयोगकर्ताओं को एल्बम में डालने में असमर्थ",
|
"unable_to_add_album_users": "उपयोगकर्ताओं को एल्बम में डालने में असमर्थ",
|
||||||
"unable_to_add_assets_to_shared_link": "साझा लिंक में संपत्ति डालने में असमर्थ",
|
"unable_to_add_assets_to_shared_link": "साझा लिंक में संपत्ति डालने में असमर्थ",
|
||||||
"unable_to_add_comment": "टिप्पणी डालने में असमर्थ",
|
"unable_to_add_comment": "टिप्पणी डालने में असमर्थ",
|
||||||
@@ -998,22 +1058,42 @@
|
|||||||
},
|
},
|
||||||
"exif": "एक्सिफ",
|
"exif": "एक्सिफ",
|
||||||
"exif_bottom_sheet_description": "विवरण जोड़ें..।",
|
"exif_bottom_sheet_description": "विवरण जोड़ें..।",
|
||||||
|
"exif_bottom_sheet_description_error": "विवरण के आधुनीकरण करने में त्रुटि हुई",
|
||||||
|
"exif_bottom_sheet_details": "विवरण",
|
||||||
|
"exif_bottom_sheet_location": "स्थान",
|
||||||
|
"exif_bottom_sheet_no_description": "कोई विवरण नहीं",
|
||||||
|
"exif_bottom_sheet_people": "लोग",
|
||||||
"exif_bottom_sheet_person_add_person": "नाम डालें",
|
"exif_bottom_sheet_person_add_person": "नाम डालें",
|
||||||
"exit_slideshow": "स्लाइड शो से बाहर निकलें",
|
"exit_slideshow": "स्लाइड शो से बाहर निकलें",
|
||||||
"expand_all": "सभी का विस्तार",
|
"expand_all": "सभी का विस्तार",
|
||||||
|
"experimental_settings_new_asset_list_subtitle": "कार्य प्रगति पर है",
|
||||||
|
"experimental_settings_new_asset_list_title": "प्रयोगात्मक फोटो ग्रिड सक्षम करें",
|
||||||
|
"experimental_settings_subtitle": "अपने जोखिम पर उपयोग करें!",
|
||||||
|
"experimental_settings_title": "प्रयोगात्मक",
|
||||||
"expire_after": "एक्सपायर आफ्टर",
|
"expire_after": "एक्सपायर आफ्टर",
|
||||||
"expired": "खत्म हो चुका",
|
"expired": "खत्म हो चुका",
|
||||||
|
"expires_date": "{date} को समाप्त हो रहा है",
|
||||||
"explore": "अन्वेषण करना",
|
"explore": "अन्वेषण करना",
|
||||||
|
"explorer": "समन्वेषक",
|
||||||
"export": "निर्यात",
|
"export": "निर्यात",
|
||||||
"export_as_json": "JSON के रूप में निर्यात करें",
|
"export_as_json": "JSON के रूप में निर्यात करें",
|
||||||
|
"export_database": "डेटाबेस निर्यात करें",
|
||||||
|
"export_database_description": "इस.क्यू.लाइट डेटाबेस निर्यात करें",
|
||||||
"extension": "विस्तार",
|
"extension": "विस्तार",
|
||||||
"external": "बाहरी",
|
"external": "बाहरी",
|
||||||
"external_libraries": "बाहरी पुस्तकालय",
|
"external_libraries": "बाहरी पुस्तकालय",
|
||||||
|
"external_network": "बाहरी नेटवर्क",
|
||||||
"external_network_sheet_info": "When not on the preferred WiFi network, the app will connect to the server through the first of the below URLs it can reach, starting from top to bottom",
|
"external_network_sheet_info": "When not on the preferred WiFi network, the app will connect to the server through the first of the below URLs it can reach, starting from top to bottom",
|
||||||
"face_unassigned": "सौंपे नहीं गए",
|
"face_unassigned": "सौंपे नहीं गए",
|
||||||
|
"failed": "विफल हुआ",
|
||||||
|
"failed_to_authenticate": "प्रमाणित करने में विफल",
|
||||||
|
"failed_to_load_assets": "एसेट लोड करने में विफल",
|
||||||
|
"failed_to_load_folder": "फोल्डर लोड करने में विफल",
|
||||||
"favorite": "पसंदीदा",
|
"favorite": "पसंदीदा",
|
||||||
|
"favorite_action_prompt": "{count} पसंदीदा संकलन में जोड़े गए",
|
||||||
"favorite_or_unfavorite_photo": "पसंदीदा या नापसंद फोटो",
|
"favorite_or_unfavorite_photo": "पसंदीदा या नापसंद फोटो",
|
||||||
"favorites": "पसंदीदा",
|
"favorites": "पसंदीदा",
|
||||||
|
"favorites_page_no_favorites": "कोई पसंदीदा एसेट नहीं मिले",
|
||||||
"feature_photo_updated": "फ़ीचर फ़ोटो अपडेट किया गया",
|
"feature_photo_updated": "फ़ीचर फ़ोटो अपडेट किया गया",
|
||||||
"file_name": "फ़ाइल का नाम",
|
"file_name": "फ़ाइल का नाम",
|
||||||
"file_name_or_extension": "फ़ाइल का नाम या एक्सटेंशन",
|
"file_name_or_extension": "फ़ाइल का नाम या एक्सटेंशन",
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user