Compare commits

...

148 Commits

Author SHA1 Message Date
Alex
fe4c6c6365 default thumbnail size 2024-11-19 11:49:08 -06:00
Alex
63ed6283fc feat(mobile): smaller default local thumbnail size 2024-11-18 17:41:56 -06:00
John Stef
41f138d3c8 fix(mobile): Dismissible menus (#14192)
* chore(mobile): make all search filters dismissible

* chore(mobile): make ImmichAppBarDialog dismissible

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-18 10:06:07 -06:00
Mert
6b5defc27b fix(mobile): use sets in album refresh, concurrent futures (#14193)
* use sets in album sync, concurrent futures

* batch excluded asset IDs

* update test

* take advantage of sets in Recents check

* move log statement

* smaller diff
2024-11-18 09:26:23 -06:00
renovate[bot]
2604940f09 chore(deps): pin mcr.microsoft.com/devcontainers/typescript-node docker tag to dc2c365 (#14124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 14:57:43 +01:00
Michel Heusschen
32f908baf1 fix: show tags when viewing stacked assets (#14199)
fix: refresh tags when viewing stacked assets
2024-11-18 07:50:04 -05:00
Mert
944ea7dbcd fix(mobile): unnecessary rebuilds from partner share notifier (#14170)
* fix unnecessary notifications

* move equality function

* sort by id

* use same comparison for initial and later queries
2024-11-17 12:04:55 -05:00
Matthew Momjian
4b5657c21e docs: get asset owner by ID from database (#14174)
asset owner
2024-11-16 14:43:32 -05:00
weathondev
f5c4af73aa feat: adding photo & video storage space to server stats (#14125)
* expose detailed user storage stats + display them in the storage per user table

* chore: openapi & sql

* fix: fix test stubs

* fix: formatting errors, e2e test and server test

* fix: upper lower case typo in spec file

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-11-15 16:38:57 -06:00
Michel Heusschen
24ae4ecff1 fix(web): don't refresh panorama viewer when modifying asset (#14163) 2024-11-15 16:30:38 -06:00
Michel Heusschen
64a7baec8c refactor(web): remove reactivity triggers (#14164) 2024-11-15 16:28:28 -06:00
Mert
caf6c0996d refactor(mobile): backup info box (#14171)
split up backup info box into separate widgets
2024-11-15 17:16:52 -05:00
Lena Tauchner
6729782c3f fix(cli): Concurrency not fully using queue potential (#11828) 2024-11-15 13:09:56 -05:00
Michel Heusschen
a60209db3e fix(web): prevent infinite loop when modifying stacked asset (#14162) 2024-11-15 07:16:56 -05:00
renovate[bot]
d1169e3b2f chore(deps): update prom/prometheus docker digest to 3b9b2a1 (#14154)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 18:56:37 -05:00
Ben
df972ef711 feat(web): Added tag button to the context menu in the favorites page (#14156)
Added tag action to the context menu in the favorites page when selection is active
2024-11-14 16:06:36 -06:00
Alex
33263cf9f3 fix(mobile): Android local notification failes to invoke (#14155)
* fix(mobile): local notification failed to invoke

* add proguard rules
2024-11-14 16:05:32 -06:00
Michel Heusschen
1b5811d992 fix(web): allow selecting people after clearing search options (#14146) 2024-11-14 09:59:50 -06:00
Michel Heusschen
1fa0122eda fix(web): update description height when navigating between assets (#14145) 2024-11-14 09:59:30 -06:00
Alex
d1085e8a02 chore(web): move enum out of .svelte file (#14144)
* chore(web): clean up todo task

* chore(web): move enums out of .svelte file
2024-11-14 15:41:11 +00:00
Michel Heusschen
d6a70bc7e5 fix(web): saving pasted coordinates (#14143) 2024-11-14 15:21:40 +00:00
Michel Heusschen
d3fe238eef fix(web): ensure current asset index stays within bounds (#14013) 2024-11-14 09:05:36 -06:00
Pranay Pandey
35f24270fe fix: Routing back button in sharedLinks page (#13703)
* fix: go back to last page from shared links page. Handle albums page from shared links page routing

* add default route for sharing

* chore: remove redundant import

* remove unnecessary comment

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-11-14 15:00:33 +00:00
Đức
1f1a4ab1a3 fix(web): textarea autogrow height (#13983)
fix(web): remove album assetGridWidth & globalWidth

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-11-14 15:00:18 +00:00
Alex
0b3742cf13 chore(web): migration svelte 5 syntax (#13883) 2024-11-14 08:43:25 -06:00
Lukas
9203a61709 fix(server): Some MTS videos fail to generate thumbnail (#14134)
* Stop skipping of all frames in MTS video

* Only skip flag for mts videos

* Fix lint checks

* Adds test

* Add comment for why flag is removed
2024-11-14 07:07:04 +00:00
Mert
11403abfbc feat(mobile): new video slider ui (#14126) 2024-11-13 19:49:25 -05:00
mcarbonne
5a2af558fb feat: add minimal devcontainer setup (#14038)
* add minimal devcontainer setup

* fix Makefile & update doc

* fix Makefile

* add warning regarding devcontainer + add newline at EOF
2024-11-13 11:28:07 -06:00
John Stef
de993289ad fix(mobile): fix logout timeout (#14104)
* fix(mobile): add timeout to logout

* chore(mobile): refactor timeout durations

* feat(mobile): add loading state to logout button

* chore(mobile): format authentication.provider.dart

* chore: format

* chore: revert settings.json change

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-13 17:27:49 +00:00
Nicholas Flamy
c58bd307ce docs: Update TrueNAS docs for TrueNAS SCALE 24.10 (#14067)
* initial-docs-update

* add-info-about-external-libraries
2024-11-13 11:26:23 -06:00
Pablo Molina
333ca8827e feat: use dateTimeOriginal to calculate album date (#14119) 2024-11-13 11:17:14 -06:00
Alex
3dad19883d fix(mobile): duration ui overflow (#14120)
* fix(mobile): duration ui overflow

* pr feedback
2024-11-13 09:39:21 -06:00
renovate[bot]
4ca27a3e7f chore(deps): update redis:6.2-alpine docker digest to eaba718 (#14114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 07:12:30 -05:00
renovate[bot]
b0bb11f9e0 chore(deps): update docker.io/redis:6.2-alpine docker digest to eaba718 (#14113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 07:12:06 -05:00
Xuesong
ecb8349085 chore(docs): encode db dump in UTF-8 without BOM for Windows (#13775) 2024-11-13 10:05:53 +00:00
Mert
e1feba2198 refactor(mobile): video controls (#14086)
* refactor video controls

* inline

* make mute icon const

* move placeholder to private widget

* adjust text width, move volume button slightly right
2024-11-13 01:13:21 -05:00
renovate[bot]
53a7ac3868 chore(deps): update prom/prometheus docker digest to 2659f4c (#13928)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 23:30:06 -05:00
dependabot[bot]
f2e950d89c chore(deps): bump ytanikin/PRConventionalCommits from 1.2.0 to 1.3.0 (#13051)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-13 01:27:37 +00:00
renovate[bot]
8ba2c99b08 chore(deps): update docker.io/redis:6.2-alpine docker digest to 77c6e37 (#14097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 01:15:45 +00:00
renovate[bot]
93346496fc chore(deps): update redis:6.2-alpine docker digest to 77c6e37 (#14098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 01:15:30 +00:00
Alex
a9525de356 chore(mobile): post release tasks (#14105) 2024-11-12 14:34:33 -05:00
github-actions
31a1e64b58 chore: version v1.120.2 2024-11-12 17:30:29 +00:00
Zack Pollard
e17bd8efc6 fix(server): backup version checks not handling database versions correctly (#14102) 2024-11-12 10:57:05 -06:00
Alex
2f9019c0e1 fix(server): correct rotation for common files (#14092)
* fix(server): correct rotation for common files

* fix: test:

* pr feedback
2024-11-12 15:07:56 +00:00
Zack Pollard
dfa8a8a6e1 feat(server): use pg_dumpall version that matches the database version (#14083) 2024-11-12 14:58:29 +00:00
renovate[bot]
b9a0c3c79f chore(deps): update base-image to v20241112 (major) (#14088)
chore(deps): update base-image to v20241112

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 12:49:31 +00:00
renovate[bot]
bda97c4e0e chore(deps): update node (#14090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 07:32:52 -05:00
Robert Schütz
e3426c880f chore(ml): replace fastapi-slim with fastapi (#14091)
The two have been identical since version 0.112.0:
https://github.com/fastapi/fastapi/discussions/11525#discussioncomment-10219861
2024-11-11 23:08:29 -05:00
Zack Pollard
d4ca7d0075 fix: config updates not applying for job and storage template service (#14074) 2024-11-11 12:50:09 +00:00
Zack Pollard
f1c9b763cf docs: backup folder name is backups (#14073) 2024-11-11 12:28:53 +00:00
Zack Pollard
5097c92494 fix(server): attempt to delete failed backups immediately after failure (#13995) 2024-11-11 12:08:52 +00:00
gamescom15
7aacc92699 docs: clarify file size impact in hardware-transcoding.md (#14049) 2024-11-11 03:51:00 +00:00
Daniel Dietzler
00d6cc86ad chore: add weblate requests (#14051) 2024-11-10 15:49:23 -05:00
Joren Guillaume
54d881e5c6 docs: Fix DCM docs link (#14059)
Fix DCM docs link
2024-11-10 13:33:51 -05:00
Snowknight26
edce096680 chore(web): Update the new version announcement text (#14001)
* Update en.json

* Update en.json

* Update en.json
2024-11-09 12:15:25 -06:00
mcarbonne
5c31acbcf0 feat(web): stable json settings export (#14036)
* recursively sort json output (settings)

* fix format/lint/...g
2024-11-09 12:11:20 -06:00
Alex
6b49104d59 fix(mobile): make sure date locale is inititialized for some languages (#14035) 2024-11-09 10:40:13 -05:00
Ben
97dbe3236b chore(docs): roadmap SEO (#14024) 2024-11-08 19:48:23 -05:00
Michel Heusschen
586393f178 fix(web): use locale for scrubber label when scrolling (#14012) 2024-11-08 15:36:26 -05:00
bo0tzz
f3e88ea2fa docs: make IGNORE_MOUNT_CHECK warning stronger (#14011) 2024-11-08 13:29:10 +00:00
Terry Zhao
c8b46802d6 fix(server): thumbnail rotation when using embedded previews (#13948) 2024-11-08 06:30:59 +00:00
Jason Rasmussen
7534098596 fix(server): support non-default postgres port when taking a backup (#13992) 2024-11-07 20:06:16 +00:00
Zack Pollard
ec5b7c266b chore: backups custom location and config file docs (#13996) 2024-11-07 18:08:02 +00:00
Jason Rasmussen
e84ad084d5 refactor(server): cron validation (#13990) 2024-11-07 17:27:52 +00:00
Jason Rasmussen
dc2de47204 refactor(server): cron repository (#13988) 2024-11-07 12:15:54 -05:00
Alex
2fe6607aea chore(mobile): post release tasks (#13989) 2024-11-07 10:27:28 -06:00
Jason Rasmussen
64831e2328 refactor: remove smart info table (#13985) 2024-11-07 11:25:10 -05:00
Alex
6053214e75 chore(mobile): update isar build (#13987) 2024-11-07 09:54:19 -06:00
github-actions
599b489f81 chore: version v1.120.1 2024-11-07 15:31:19 +00:00
Jason Rasmussen
0b98c5e3c4 fix(web): time zone dependent test (#13859) 2024-11-07 10:05:55 -05:00
Alex
b238b69689 fix(mobile): video player not playing in full size on Android (#13986) 2024-11-07 15:04:20 +00:00
Jason Rasmussen
decbc741e2 docs: update roadmap (#13984) 2024-11-07 09:24:21 -05:00
Sefa Eyeoglu
564449a555 fix(server): database backups compatible with deduplication (#13965)
gzip --rsyncable has a slightly worse compression ratio, but allows for
efficient deduplication and, as the name implies, faster rsync
operations.

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
2024-11-07 12:36:17 +00:00
Robert Schütz
f4741c70f3 fix(server): allow starting backup through API and fix pg_dumpall args when using database URLs (#13970)
* fix(server): allow starting backup through API

* fix(server): fix pg_dumpall args when using database URLs

The database has to be specified using `-d`, unlike for pg_dump.
2024-11-07 11:57:36 +00:00
yodatak
be2b76be8c docs: add backups to startup folders list (#13967)
Add the check of backups that is done on immich microservice of backups folder presence
2024-11-07 04:18:14 +00:00
Alex
cff0b95f4c chore(mobile): post release task (#13954) 2024-11-06 17:57:45 -05:00
Daniel Dietzler
1321a393c1 docs: 50k stars (#13964) 2024-11-06 22:49:18 +01:00
bo0tzz
a9fc840d65 chore: tidy up backup-and-restore.md (#13961) 2024-11-06 22:18:55 +01:00
Alex
ebf06dc12e fix(server): cannot render email template (#13957) 2024-11-06 22:14:11 +01:00
Thariq Shanavas
8d8becd0f7 docs: Added a note about avoiding redundant database backups (#13958)
* Add note about built-in backups

* npm run format:fix
2024-11-06 15:09:53 -06:00
slamp
3b5f5ec57a docs: improve custom-locations wording to be easier to read (#13849)
* Improve wording to make it easier to read custom-locations.md

It's only grammatical change

* Update docs/docs/guides/custom-locations.md

Co-authored-by: bo0tzz <git@bo0tzz.me>

* Update custom-locations.md

Revert to 'because of' and remove 'hard drive'

---------

Co-authored-by: bo0tzz <git@bo0tzz.me>
2024-11-06 19:49:23 +00:00
Daniel Dietzler
b29e4ec39f fix: docker link (#13956) 2024-11-06 13:45:52 -06:00
github-actions
f1b8a9374f chore: version v1.120.0 2024-11-06 16:17:29 +00:00
Weblate (bot)
497b3d995e chore(web): update translations (#13810)
Co-authored-by: Benjamin Freeman <b.t.freeman16@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Carl Dressler <cstmth@gmail.com>
Co-authored-by: Diego Saint Esteben <diego@saintesteben.me>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: Dragonslayer <chybzik@gmail.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Iwwww <mike.yolgin@gmail.com>
Co-authored-by: JBP <weblate@1peer1boom.nl>
Co-authored-by: Jonas Grubbauer <nicjontrickshots@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Kamil Warczek <kamilwarczek@gmail.com>
Co-authored-by: Kovács Ádám <kovaszftw@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Mehmet Numan Çam <mncam051@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Polly Julien <julien.polly@laposte.net>
Co-authored-by: Rastislav Simcisko <21sd95@gmail.com>
Co-authored-by: Samet Güzeldemirci <s.g52@gmx.de>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: T.Nikolaou <tnikolaou@users.noreply.hosted.weblate.org>
Co-authored-by: TheGothian <github@dreamstate.nu>
Co-authored-by: fmis13 <fmis13@disroot.org>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: vytautas <immichtranslation.a03gn@simplelogin.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xxzp3 <oliver@bastholm.dk>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-11-06 14:45:59 +00:00
Alex
9fd425dd5c chore(mobile): translation update (#13942) 2024-11-06 08:37:39 -06:00
Matthew Momjian
442d4e5e1c docs: fail2ban community project (#13943)
fail2ban
2024-11-05 21:19:12 -06:00
renovate[bot]
7134d26a19 chore(deps): update base-image to v20241105 (major) (#13826) 2024-11-05 21:24:36 +00:00
renovate[bot]
42ee7f1290 chore(deps): update typescript-projects (#13922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-11-05 20:04:39 +00:00
renovate[bot]
5d7a04367c chore(deps): update dependency @types/node to ^22.8.6 (#13937)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 14:28:13 -05:00
Alex
06e0ba29f8 chore(web): scrubber animation (#13936)
* chore(web): scrubber animation

* minor styling
2024-11-05 13:55:20 -05:00
Alex
b36de7d7d4 chore(mobile): upgrade gradle (#13901)
* chore(mobile): upgrade gradle

* update photo_manager

* migrate from kapt to ksp

pumps kotlin and other dependency version to fix build issues

* increase java heap size

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2024-11-05 10:34:24 -06:00
Zack Pollard
d456d35510 refactor: config init event for first config load (#13930) 2024-11-05 16:30:56 +00:00
Zack Pollard
c383e115af chore: better observability for geodata import (#13931) 2024-11-05 16:20:56 +00:00
Jason Rasmussen
5edbb93a4d refactor(server): get worker (#13927) 2024-11-05 13:07:51 +00:00
renovate[bot]
1d55b5bfc0 chore(deps): update dependency @types/node to ^22.8.5 (#13923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 06:48:01 -05:00
renovate[bot]
60afd7b400 chore(deps): update node (#13918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 19:52:23 -05:00
renovate[bot]
3f99ef90ec fix(deps): update machine-learning (#13919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 19:50:17 -05:00
Pranay Pandey
380fc06979 fix: remove duplicateIds on unique assets (#13752) 2024-11-04 10:03:03 -05:00
renovate[bot]
d34d92dca3 fix(deps): update dependency exiftool-vendored to v28.7.0 (#13790)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 12:49:21 +00:00
Daniel Dietzler
3551407d95 fix: healthcheck if custom host is set (#13887) 2024-11-02 22:46:16 -04:00
cfitzw
6bfc20ef95 feat: render asset path (#13873)
render asset path
2024-11-02 13:27:40 -05:00
Daniel Dietzler
eadcbd52fb chore: svelte 5 🎉 (#13738)
chore: svelte 5

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
2024-11-02 10:49:07 -05:00
Jason Rasmussen
fed882a28a refactor(server): immich worker (#13871)
refactor(server): immich work
2024-11-01 17:19:36 -04:00
Carsten Otto
cdabd08139 fix(server): wrong image dimensions for RAW files (RAF, CR2) (also fixes face preview) (#13377) 2024-11-01 10:34:34 -04:00
Yashraj Jain
b95bc32310 fix(mobile): do not removed not backup asset when selecting the correspond options (#13256)
* fixed the local ids selecting issue

* code: updated impl inside deleteLocalOnlyAssets

* fix: used png instead of jpg to maintain picture quality

* Revert "fix: used png instead of jpg to maintain picture quality"

This reverts commit 04f2ed54e4.

* fix: update logic from code-review perspective

* refractor (mobile) : Dart fix applied

* fix (mobile) : Updated multi grid as per requirement

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-11-01 09:03:03 -05:00
Mert
b9096f3e99 feat(server): use tonemapx for software tone-mapping (#13785) 2024-10-31 20:48:23 -04:00
Alex
5ac236d6fd chore(mobile): update flutter_web_auth (#13863) 2024-10-31 17:35:01 -05:00
renovate[bot]
458f2acf42 chore(deps): update flutter (#13455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 17:53:26 +00:00
Jason Rasmussen
5b2cd704d3 refactor(server): job discovery (#13838)
refactor(server): job discorvery
2024-10-31 13:42:58 -04:00
Alan Grainger
0130052de5 chore(docs): Add Immich Public Proxy to the Community Projects list (#13836)
Update community-projects.tsx

Add Immich Public Proxy to Community Projects
2024-10-31 17:24:11 +00:00
Zack Pollard
16027678ee chore: move library settings cron expression to setting select element (#13856) 2024-10-31 15:06:53 +00:00
Alex
343cdcfeed fix(mobile): not throwing error when cannot parse orientation value (#13853)
* fix(mobile): not throw when error in parsing the orientation

* fix(mobile): not throw when error in parsing the orientation

* linting
2024-10-31 09:37:02 -05:00
renovate[bot]
a28b92b3cc chore(deps): update dependency node to v22 (#13855)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 14:21:45 +00:00
renovate[bot]
066682f48d chore(deps): update dependency @types/node to ^22.8.1 (#13854)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 14:20:26 +00:00
Zack Pollard
7d933ec97a feat: built-in automatic database backups (#13773) 2024-10-31 11:29:42 +00:00
dvbthien
30d42e571c fix(mobile): Reapply thumbnail image improvements and fix issue #13804 (#13835)
fix issue #13804

Co-authored-by: dvbthien <dvbthien@gmail.com>
2024-10-30 14:40:04 -05:00
Alex
318ab756cb fix(mobile): search page (#13833)
* fix(mobile): search page minor problems

* fix: flashing between search

* restore search size

* remove print statement

* linting
2024-10-30 14:27:13 -05:00
renovate[bot]
9d75c5b999 chore(deps): update typescript-projects (#13789)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 15:03:32 -04:00
Jason Rasmussen
40fbef50cf refactor(server): remove unused on method (#13830) 2024-10-30 14:09:52 -04:00
renovate[bot]
7961435d36 fix(deps): update machine-learning (#13786) 2024-10-30 16:38:56 +00:00
renovate[bot]
92ad03615c chore(deps): update node to v22 (major) (#13792)
* chore(deps): update node to v22

* fix: deprecated constructor

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-10-30 16:05:02 +00:00
CanbiZ
33409a8cd0 chore(docs): update german readme to latest version (#13824)
* chore(docs): update german readme to latest version

* formatting
2024-10-30 12:02:05 -04:00
Alex
244c8cb4d4 feat(web): scrubber label and animation (#13815)
* feat(web): scrubber label and animation

* tune x fly in distance

* refactor

* lint and minor fix

* fly height
2024-10-30 14:38:35 +00:00
renovate[bot]
0d62ff11f1 chore(deps): update base-image to v20241029 (major) (#13821)
chore(deps): update base-image to v20241029

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 06:02:45 -04:00
renovate[bot]
ae2992a6d8 chore(deps): update terraform cloudflare to v4.45.0 (#13820)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 05:14:16 -04:00
renovate[bot]
952c6be6ea chore(deps): update grafana/grafana docker tag to v11.3.0 (#13763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 05:09:19 -04:00
Jason Rasmussen
0f668fd5c6 refactor(server): env validation (#13817) 2024-10-30 05:00:41 -04:00
Jason Rasmussen
19eb3ed8b9 refactor(server): cls (#13814) 2024-10-29 20:41:47 +00:00
Jason Rasmussen
2efba6326d chore(server): telemetry env clean up (#13813) 2024-10-29 19:20:32 +00:00
Justin
0230dc284b feat(web): disable opening image and library sub-items by default (#13729)
Disable opening image and library sub-items by default

Disable both the Image Settings and the External Library sub-items by default. This aligns with auth other settings sub-items showing as collapsed by default.
2024-10-29 12:02:34 -05:00
Alex
a39a1cfffa fix(mobile): thumbnail not filled area on tablet (#13808) 2024-10-29 16:39:14 +00:00
Alex
f776e049e9 chore(docs): add feature to readme (#13794) 2024-10-29 11:26:57 -05:00
Jason Rasmussen
37e437a568 fix(server): keep system config transformations (#13796) 2024-10-29 15:59:35 +00:00
Zack Pollard
2c86da07c6 feat(web): library settings crontab link includes existing expression (#13807) 2024-10-29 15:51:00 +00:00
Jason Rasmussen
4b9e460db5 refactor(server): worker cleanup (#13805) 2024-10-29 11:47:33 -04:00
Alex
143ee0bc34 fix(mobile): Revert thumbnail image ui improvements (#13655) (#13806)
Revert "chore(mobile): thumbnail image ui improvements  (#13655)"

This reverts commit 16f2364e93.
2024-10-29 15:38:20 +00:00
Zack Pollard
68a4cc25dc refactor: better postgres connection param typing (#13800) 2024-10-29 15:11:34 +00:00
Zack Pollard
e74ddca6c0 fix: shutdown api process when another worker exits unexpectedly (#13802) 2024-10-29 14:46:04 +00:00
Zack Pollard
02819dc079 feat: mount checks on a folder level (#13801) 2024-10-29 14:43:27 +00:00
Weblate (bot)
6a011a4595 chore(web): update translations (#13688)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_devel/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/id/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translation: Immich/immich

Co-authored-by: Amirul Asri <amirulasrix@gmail.com>
Co-authored-by: Dean Cvjetanović <forteee@gmail.com>
Co-authored-by: Diego Saint Esteben <diego@saintesteben.me>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Hexie <hexterjexter@gmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Lab Forensic <recoverylabkor@gmail.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: LeonardoCasarotto <leonardo.casar8@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Max <mail@heavygale.de>
Co-authored-by: Michal Micech <michal.micech@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Napat Srichan <napatsrichan2001@gmail.com>
Co-authored-by: Roger Veciana Rovira <rveciana@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: tux2000 <tux2k@web.de>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2024-10-29 14:35:36 +00:00
Jason Rasmussen
e029190a5d fix(server): handle N/A duration response from ffprobe (#13803) 2024-10-29 14:21:30 +00:00
github-actions
00dd9419a5 chore: version v1.119.1 2024-10-29 13:33:36 +00:00
aviv926
96e97278d3 docs: Add info about album sync&folder view (#12371)
* Album Sync

* npm run format:fix

* fix path

* info about folder view

* Sync albums

* npm run format:fix

* Add information about limitations of a property that appears in multiple albums

* npm run format:fix

* - to ->

* Update docs/docs/features/mobile-app.mdx

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* Update docs/docs/features/mobile-app.mdx

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2024-10-29 05:00:43 +00:00
Jevgeni Kiski
e1d968d1b3 docs: note about Nginx reverse proxy compatibility with Let's Encrypt (#13764)
* Nginx reverse proxy compatibility with Let's Encrypt

* Update reverse-proxy.md

* Update reverse-proxy.md

Co-authored-by: bo0tzz <git@bo0tzz.me>

* Priority of = is higher

* Update reverse-proxy.md

---------

Co-authored-by: bo0tzz <git@bo0tzz.me>
2024-10-28 23:48:09 -05:00
renovate[bot]
db69361f19 chore(deps): update stumpylog/image-cleaner-action action to v0.9.0 (#13788)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 23:47:54 -05:00
renovate[bot]
490fcc5591 chore(deps): update dependency @types/node to ^20.17.0 (#13787)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 21:55:44 -04:00
Alex
921b7cbc8d feat(web): add job action to search page result (#13784) 2024-10-28 22:50:08 +00:00
Alex
044c3e93f8 chore(mobile): post release task (#13779) 2024-10-28 16:12:35 +00:00
639 changed files with 16317 additions and 12060 deletions

2
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,2 @@
ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:dc2c3654370fe92a55daeefe9d2d95839d85bdc1f68f7fd4ab86621f49e5818a
FROM ${BASEIMAGE}

View File

@@ -0,0 +1,20 @@
{
"name": "Immich devcontainers",
"build": {
"dockerfile": "Dockerfile",
"args": {
"BASEIMAGE": "mcr.microsoft.com/devcontainers/typescript-node:22"
}
},
"customizations": {
"vscode": {
"extensions": [
"svelte.svelte-vscode"
]
}
},
"forwardPorts": [],
"postCreateCommand": "make install-all",
"remoteUser": "node"
}

View File

@@ -35,7 +35,7 @@ jobs:
steps:
- name: Clean temporary images
if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0
uses: stumpylog/image-cleaner-action/ephemeral@v0.9.0
with:
token: "${{ env.TOKEN }}"
owner: "immich-app"
@@ -64,7 +64,7 @@ jobs:
steps:
- name: Clean untagged images
if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/untagged@v0.8.0
uses: stumpylog/image-cleaner-action/untagged@v0.9.0
with:
token: "${{ env.TOKEN }}"
owner: "immich-app"

View File

@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: PR Conventional Commit Validation
uses: ytanikin/PRConventionalCommits@1.2.0
uses: ytanikin/PRConventionalCommits@1.3.0
with:
task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]'
add_label: 'false'

View File

@@ -41,4 +41,4 @@
"explorer.fileNesting.patterns": {
"*.ts": "${capture}.spec.ts,${capture}.mock.ts"
}
}
}

View File

@@ -39,7 +39,7 @@ attach-server:
renovate:
LOG_LEVEL=debug npx renovate --platform=local --repository-cache=reset
MODULES = e2e server web cli sdk
MODULES = e2e server web cli sdk docs
audit-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix
@@ -48,11 +48,9 @@ install-%:
build-cli: build-sdk
build-web: build-sdk
build-%: install-%
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run | grep 'build' >/dev/null \
&& npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run build || true
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run build
format-%:
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run | grep 'format:fix' >/dev/null \
&& npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run format:fix || true
npm --prefix $* run format:fix
lint-%:
npm --prefix $* run lint:fix
check-%:
@@ -79,14 +77,14 @@ test-medium:
test-medium-dev:
docker exec -it immich_server /bin/sh -c "npm run test:medium"
build-all: $(foreach M,$(MODULES),build-$M) ;
build-all: $(foreach M,$(filter-out e2e,$(MODULES)),build-$M) ;
install-all: $(foreach M,$(MODULES),install-$M) ;
check-all: $(foreach M,$(MODULES),check-$M) ;
lint-all: $(foreach M,$(MODULES),lint-$M) ;
format-all: $(foreach M,$(MODULES),format-$M) ;
check-all: $(foreach M,$(filter-out sdk cli docs,$(MODULES)),check-$M) ;
lint-all: $(foreach M,$(filter-out sdk docs,$(MODULES)),lint-$M) ;
format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ;
audit-all: $(foreach M,$(MODULES),audit-$M) ;
hygiene-all: lint-all format-all check-all sql audit-all;
test-all: $(foreach M,$(MODULES),test-$M) ;
test-all: $(foreach M,$(filter-out sdk docs,$(MODULES)),test-$M) ;
clean:
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +

View File

@@ -102,6 +102,8 @@ For the mobile app, you can use `https://demo.immich.app/api` for the `Server En
| Offline support | Yes | No |
| Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes |
| Tags | No | Yes |
| Folder View | No | Yes |
## Translations

View File

@@ -1 +1 @@
20.18.0
22.11.0

View File

@@ -1,4 +1,4 @@
FROM node:20.18.0-alpine3.20@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9 AS core
FROM node:22.11.0-alpine3.20@sha256:dc8ba2f61dd86c44e43eb25a7812ad03c5b1b224a19fc6f77e1eb9e5669f0b82 AS core
WORKDIR /usr/src/open-api/typescript-sdk
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./

444
cli/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@immich/cli",
"version": "2.2.27",
"version": "2.2.31",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@immich/cli",
"version": "2.2.27",
"version": "2.2.31",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"fast-glob": "^3.3.2",
@@ -24,7 +24,7 @@
"@types/cli-progress": "^3.11.0",
"@types/lodash-es": "^4.17.12",
"@types/mock-fs": "^4.13.1",
"@types/node": "^20.16.12",
"@types/node": "^22.9.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"@vitest/coverage-v8": "^2.0.5",
@@ -43,7 +43,7 @@
"vite": "^5.0.12",
"vite-tsconfig-paths": "^5.0.0",
"vitest": "^2.0.5",
"vitest-fetch-mock": "^0.3.0",
"vitest-fetch-mock": "^0.4.0",
"yaml": "^2.3.1"
},
"engines": {
@@ -52,14 +52,14 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.119.0",
"version": "1.120.2",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@oazapfts/runtime": "^1.0.2"
},
"devDependencies": {
"@types/node": "^20.16.12",
"@types/node": "^22.9.0",
"typescript": "^5.3.3"
}
},
@@ -173,19 +173,21 @@
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
"integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
@@ -276,12 +278,13 @@
}
},
"node_modules/@babel/parser": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
"integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"version": "7.26.2",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.2"
"@babel/types": "^7.26.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -291,14 +294,14 @@
}
},
"node_modules/@babel/types": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
"integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"version": "7.26.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -766,9 +769,9 @@
}
},
"node_modules/@eslint/core": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz",
"integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==",
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
"integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -835,9 +838,9 @@
}
},
"node_modules/@eslint/js": {
"version": "9.12.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz",
"integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==",
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1378,13 +1381,13 @@
}
},
"node_modules/@types/node": {
"version": "20.16.13",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.13.tgz",
"integrity": "sha512-GjQ7im10B0labo8ZGXDGROUl9k0BNyDgzfGpb4g/cl+4yYDWVKcozANF4FGr4/p0O/rAkQClM6Wiwkije++1Tg==",
"version": "22.9.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
"integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.2"
"undici-types": "~6.19.8"
}
},
"node_modules/@types/normalize-package-data": {
@@ -1394,17 +1397,17 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.10.0.tgz",
"integrity": "sha512-phuB3hoP7FFKbRXxjl+DRlQDuJqhpOnm5MmtROXyWi3uS/Xg2ZXqiQfcG2BJHiN4QKyzdOJi3NEn/qTnjUlkmQ==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz",
"integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.10.0",
"@typescript-eslint/type-utils": "8.10.0",
"@typescript-eslint/utils": "8.10.0",
"@typescript-eslint/visitor-keys": "8.10.0",
"@typescript-eslint/scope-manager": "8.12.2",
"@typescript-eslint/type-utils": "8.12.2",
"@typescript-eslint/utils": "8.12.2",
"@typescript-eslint/visitor-keys": "8.12.2",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -1428,16 +1431,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.10.0.tgz",
"integrity": "sha512-E24l90SxuJhytWJ0pTQydFT46Nk0Z+bsLKo/L8rtQSL93rQ6byd1V/QbDpHUTdLPOMsBCcYXZweADNCfOCmOAg==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz",
"integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"@typescript-eslint/scope-manager": "8.10.0",
"@typescript-eslint/types": "8.10.0",
"@typescript-eslint/typescript-estree": "8.10.0",
"@typescript-eslint/visitor-keys": "8.10.0",
"@typescript-eslint/scope-manager": "8.12.2",
"@typescript-eslint/types": "8.12.2",
"@typescript-eslint/typescript-estree": "8.12.2",
"@typescript-eslint/visitor-keys": "8.12.2",
"debug": "^4.3.4"
},
"engines": {
@@ -1457,14 +1460,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.10.0.tgz",
"integrity": "sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz",
"integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.10.0",
"@typescript-eslint/visitor-keys": "8.10.0"
"@typescript-eslint/types": "8.12.2",
"@typescript-eslint/visitor-keys": "8.12.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1475,14 +1478,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.10.0.tgz",
"integrity": "sha512-PCpUOpyQSpxBn230yIcK+LeCQaXuxrgCm2Zk1S+PTIRJsEfU6nJ0TtwyH8pIwPK/vJoA+7TZtzyAJSGBz+s/dg==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz",
"integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "8.10.0",
"@typescript-eslint/utils": "8.10.0",
"@typescript-eslint/typescript-estree": "8.12.2",
"@typescript-eslint/utils": "8.12.2",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -1500,9 +1503,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.10.0.tgz",
"integrity": "sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz",
"integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1514,14 +1517,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.10.0.tgz",
"integrity": "sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz",
"integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"@typescript-eslint/types": "8.10.0",
"@typescript-eslint/visitor-keys": "8.10.0",
"@typescript-eslint/types": "8.12.2",
"@typescript-eslint/visitor-keys": "8.12.2",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -1543,16 +1546,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.10.0.tgz",
"integrity": "sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz",
"integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.10.0",
"@typescript-eslint/types": "8.10.0",
"@typescript-eslint/typescript-estree": "8.10.0"
"@typescript-eslint/scope-manager": "8.12.2",
"@typescript-eslint/types": "8.12.2",
"@typescript-eslint/typescript-estree": "8.12.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1566,13 +1569,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.10.0.tgz",
"integrity": "sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==",
"version": "8.12.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz",
"integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.10.0",
"@typescript-eslint/types": "8.12.2",
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
@@ -1584,21 +1587,21 @@
}
},
"node_modules/@vitest/coverage-v8": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz",
"integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz",
"integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.3.0",
"@bcoe/v8-coverage": "^0.2.3",
"debug": "^4.3.6",
"debug": "^4.3.7",
"istanbul-lib-coverage": "^3.2.2",
"istanbul-lib-report": "^3.0.1",
"istanbul-lib-source-maps": "^5.0.6",
"istanbul-reports": "^3.1.7",
"magic-string": "^0.30.11",
"magicast": "^0.3.4",
"magic-string": "^0.30.12",
"magicast": "^0.3.5",
"std-env": "^3.7.0",
"test-exclude": "^7.0.1",
"tinyrainbow": "^1.2.0"
@@ -1607,8 +1610,8 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"@vitest/browser": "2.1.3",
"vitest": "2.1.3"
"@vitest/browser": "2.1.4",
"vitest": "2.1.4"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -1617,15 +1620,15 @@
}
},
"node_modules/@vitest/expect": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz",
"integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz",
"integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/spy": "2.1.3",
"@vitest/utils": "2.1.3",
"chai": "^5.1.1",
"@vitest/spy": "2.1.4",
"@vitest/utils": "2.1.4",
"chai": "^5.1.2",
"tinyrainbow": "^1.2.0"
},
"funding": {
@@ -1633,22 +1636,21 @@
}
},
"node_modules/@vitest/mocker": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz",
"integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz",
"integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/spy": "2.1.3",
"@vitest/spy": "2.1.4",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.11"
"magic-string": "^0.30.12"
},
"funding": {
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
"@vitest/spy": "2.1.3",
"msw": "^2.3.5",
"msw": "^2.4.9",
"vite": "^5.0.0"
},
"peerDependenciesMeta": {
@@ -1661,9 +1663,9 @@
}
},
"node_modules/@vitest/pretty-format": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz",
"integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz",
"integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1674,13 +1676,13 @@
}
},
"node_modules/@vitest/runner": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz",
"integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz",
"integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/utils": "2.1.3",
"@vitest/utils": "2.1.4",
"pathe": "^1.1.2"
},
"funding": {
@@ -1688,14 +1690,14 @@
}
},
"node_modules/@vitest/snapshot": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz",
"integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz",
"integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/pretty-format": "2.1.3",
"magic-string": "^0.30.11",
"@vitest/pretty-format": "2.1.4",
"magic-string": "^0.30.12",
"pathe": "^1.1.2"
},
"funding": {
@@ -1703,27 +1705,27 @@
}
},
"node_modules/@vitest/spy": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz",
"integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz",
"integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==",
"dev": true,
"license": "MIT",
"dependencies": {
"tinyspy": "^3.0.0"
"tinyspy": "^3.0.2"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/utils": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz",
"integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz",
"integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/pretty-format": "2.1.3",
"loupe": "^3.1.1",
"@vitest/pretty-format": "2.1.4",
"loupe": "^3.1.2",
"tinyrainbow": "^1.2.0"
},
"funding": {
@@ -1930,9 +1932,9 @@
]
},
"node_modules/chai": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz",
"integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==",
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz",
"integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2067,15 +2069,6 @@
"url": "https://opencollective.com/core-js"
}
},
"node_modules/cross-fetch": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
"integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
"dev": true,
"dependencies": {
"node-fetch": "^2.6.12"
}
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2091,12 +2084,13 @@
}
},
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -2211,18 +2205,18 @@
}
},
"node_modules/eslint": {
"version": "9.12.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz",
"integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==",
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
"integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.11.0",
"@eslint/config-array": "^0.18.0",
"@eslint/core": "^0.6.0",
"@eslint/core": "^0.7.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "9.12.0",
"@eslint/js": "9.13.0",
"@eslint/plugin-kit": "^0.2.0",
"@humanfs/node": "^0.16.5",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -2396,9 +2390,9 @@
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
"integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2505,6 +2499,16 @@
"node": ">=0.10.0"
}
},
"node_modules/expect-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz",
"integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3061,22 +3065,24 @@
"dev": true
},
"node_modules/magic-string": {
"version": "0.30.11",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
"integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
"version": "0.30.12",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
"integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/magicast": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz",
"integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==",
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
"integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.24.4",
"@babel/types": "^7.24.0",
"@babel/parser": "^7.25.4",
"@babel/types": "^7.25.4",
"source-map-js": "^1.2.0"
}
},
@@ -3150,9 +3156,9 @@
}
},
"node_modules/mock-fs": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.0.tgz",
"integrity": "sha512-3ROPnEMgBOkusBMYQUW2rnT3wZwsgfOKzJDLvx/TZ7FL1WmWvwSwn3j4aDR5fLDGtgcc1WF0Z1y0di7c9L4FKw==",
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.1.tgz",
"integrity": "sha512-sz/Q8K1gXXXHR+qr0GZg2ysxCRr323kuN10O7CtQjraJsFDJ4SJ+0I5MzALz7aRp9lHk8Cc/YdsT95h9Ka1aFw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3160,10 +3166,11 @@
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.7",
@@ -3189,26 +3196,6 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"dev": true,
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
@@ -4000,17 +3987,18 @@
"license": "MIT"
},
"node_modules/tinyexec": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz",
"integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==",
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz",
"integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==",
"dev": true,
"license": "MIT"
},
"node_modules/tinypool": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz",
"integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz",
"integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.0.0 || >=20.0.0"
}
@@ -4034,15 +4022,6 @@
"node": ">=14.0.0"
}
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4054,12 +4033,6 @@
"node": ">=8.0"
}
},
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true
},
"node_modules/ts-api-utils": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
@@ -4181,9 +4154,9 @@
}
},
"node_modules/vite": {
"version": "5.4.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz",
"integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==",
"version": "5.4.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
"integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4241,14 +4214,14 @@
}
},
"node_modules/vite-node": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz",
"integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz",
"integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"cac": "^6.7.14",
"debug": "^4.3.6",
"debug": "^4.3.7",
"pathe": "^1.1.2",
"vite": "^5.0.0"
},
@@ -4283,30 +4256,31 @@
}
},
"node_modules/vitest": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz",
"integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz",
"integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@vitest/expect": "2.1.3",
"@vitest/mocker": "2.1.3",
"@vitest/pretty-format": "^2.1.3",
"@vitest/runner": "2.1.3",
"@vitest/snapshot": "2.1.3",
"@vitest/spy": "2.1.3",
"@vitest/utils": "2.1.3",
"chai": "^5.1.1",
"debug": "^4.3.6",
"magic-string": "^0.30.11",
"@vitest/expect": "2.1.4",
"@vitest/mocker": "2.1.4",
"@vitest/pretty-format": "^2.1.4",
"@vitest/runner": "2.1.4",
"@vitest/snapshot": "2.1.4",
"@vitest/spy": "2.1.4",
"@vitest/utils": "2.1.4",
"chai": "^5.1.2",
"debug": "^4.3.7",
"expect-type": "^1.1.0",
"magic-string": "^0.30.12",
"pathe": "^1.1.2",
"std-env": "^3.7.0",
"tinybench": "^2.9.0",
"tinyexec": "^0.3.0",
"tinypool": "^1.0.0",
"tinyexec": "^0.3.1",
"tinypool": "^1.0.1",
"tinyrainbow": "^1.2.0",
"vite": "^5.0.0",
"vite-node": "2.1.3",
"vite-node": "2.1.4",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -4321,8 +4295,8 @@
"peerDependencies": {
"@edge-runtime/vm": "*",
"@types/node": "^18.0.0 || >=20.0.0",
"@vitest/browser": "2.1.3",
"@vitest/ui": "2.1.3",
"@vitest/browser": "2.1.4",
"@vitest/ui": "2.1.4",
"happy-dom": "*",
"jsdom": "*"
},
@@ -4348,36 +4322,18 @@
}
},
"node_modules/vitest-fetch-mock": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.3.0.tgz",
"integrity": "sha512-g6upWcL8/32fXL43/5f4VHcocuwQIi9Fj5othcK9gPO8XqSEGtnIZdenr2IaipDr61ReRFt+vaOEgo8jiUUX5w==",
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.4.1.tgz",
"integrity": "sha512-Y6VEV2AgJps1t9NUdhID/vUwarAuhOkPHShfoEruIlQr5+O31hgJ4YmZpU8kVWD3KQjEyZqPeMibWehd7rMq+A==",
"dev": true,
"dependencies": {
"cross-fetch": "^4.0.0"
},
"license": "MIT",
"engines": {
"node": ">=14.14.0"
"node": ">=18.0.0"
},
"peerDependencies": {
"vitest": ">=2.0.0"
}
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dev": true,
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.2.27",
"version": "2.2.31",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",
@@ -20,7 +20,7 @@
"@types/cli-progress": "^3.11.0",
"@types/lodash-es": "^4.17.12",
"@types/mock-fs": "^4.13.1",
"@types/node": "^20.16.12",
"@types/node": "^22.9.0",
"@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^8.0.0",
"@vitest/coverage-v8": "^2.0.5",
@@ -39,7 +39,7 @@
"vite": "^5.0.12",
"vite-tsconfig-paths": "^5.0.0",
"vitest": "^2.0.5",
"vitest-fetch-mock": "^0.3.0",
"vitest-fetch-mock": "^0.4.0",
"yaml": "^2.3.1"
},
"scripts": {
@@ -67,6 +67,6 @@
"lodash-es": "^4.17.21"
},
"volta": {
"node": "20.18.0"
"node": "22.11.0"
}
}

View File

@@ -1,5 +1,6 @@
import {
Action,
AssetBulkUploadCheckItem,
AssetBulkUploadCheckResult,
AssetMediaResponseDto,
AssetMediaStatus,
@@ -11,7 +12,7 @@ import {
getSupportedMediaTypes,
} from '@immich/sdk';
import byteSize from 'byte-size';
import { Presets, SingleBar } from 'cli-progress';
import { MultiBar, Presets, SingleBar } from 'cli-progress';
import { chunk } from 'lodash-es';
import { Stats, createReadStream } from 'node:fs';
import { stat, unlink } from 'node:fs/promises';
@@ -90,23 +91,23 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
return { newFiles: files, duplicates: [] };
}
const progressBar = new SingleBar(
{ format: 'Checking files | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
const multiBar = new MultiBar(
{ format: '{message} | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
Presets.shades_classic,
);
progressBar.start(files.length, 0);
const hashProgressBar = multiBar.create(files.length, 0, { message: 'Hashing files ' });
const checkProgressBar = multiBar.create(files.length, 0, { message: 'Checking for duplicates' });
const newFiles: string[] = [];
const duplicates: Asset[] = [];
const queue = new Queue<string[], AssetBulkUploadCheckResults>(
async (filepaths: string[]) => {
const dto = await Promise.all(
filepaths.map(async (filepath) => ({ id: filepath, checksum: await sha1(filepath) })),
);
const response = await checkBulkUpload({ assetBulkUploadCheckDto: { assets: dto } });
const checkBulkUploadQueue = new Queue<AssetBulkUploadCheckItem[], void>(
async (assets: AssetBulkUploadCheckItem[]) => {
const response = await checkBulkUpload({ assetBulkUploadCheckDto: { assets } });
const results = response.results as AssetBulkUploadCheckResults;
for (const { id: filepath, assetId, action } of results) {
if (action === Action.Accept) {
newFiles.push(filepath);
@@ -115,19 +116,46 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
duplicates.push({ id: assetId as string, filepath });
}
}
progressBar.increment(filepaths.length);
checkProgressBar.increment(assets.length);
},
{ concurrency, retry: 3 },
);
const results: { id: string; checksum: string }[] = [];
let checkBulkUploadRequests: AssetBulkUploadCheckItem[] = [];
const queue = new Queue<string, AssetBulkUploadCheckItem[]>(
async (filepath: string): Promise<AssetBulkUploadCheckItem[]> => {
const dto = { id: filepath, checksum: await sha1(filepath) };
results.push(dto);
checkBulkUploadRequests.push(dto);
if (checkBulkUploadRequests.length === 5000) {
const batch = checkBulkUploadRequests;
checkBulkUploadRequests = [];
void checkBulkUploadQueue.push(batch);
}
hashProgressBar.increment();
return results;
},
{ concurrency, retry: 3 },
);
for (const items of chunk(files, concurrency)) {
await queue.push(items);
for (const item of files) {
void queue.push(item);
}
await queue.drained();
progressBar.stop();
if (checkBulkUploadRequests.length > 0) {
void checkBulkUploadQueue.push(checkBulkUploadRequests);
}
await checkBulkUploadQueue.drained();
multiBar.stop();
console.log(`Found ${newFiles.length} new files and ${duplicates.length} duplicate${s(duplicates.length)}`);
@@ -201,8 +229,8 @@ export const uploadFiles = async (files: string[], { dryRun, concurrency }: Uplo
{ concurrency, retry: 3 },
);
for (const filepath of files) {
await queue.push(filepath);
for (const item of files) {
void queue.push(item);
}
await queue.drained();

View File

@@ -72,8 +72,8 @@ export class Queue<T, R> {
* @returns Promise<void> - The returned Promise will be resolved when all tasks in the queue have been processed by a worker.
* This promise could be ignored as it will not lead to a `unhandledRejection`.
*/
async drained(): Promise<void> {
await this.queue.drain();
drained(): Promise<void> {
return this.queue.drained();
}
/**

View File

@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.44.0"
constraints = "4.44.0"
version = "4.45.0"
constraints = "4.45.0"
hashes = [
"h1:2kgcFIKdPgw/22FoLI+54G2+Np3L0np8ost6e8VwAhU=",
"h1:5FQNWKXde8kkfEJHeu5yBaC0NxCzeOKs2K0QMGTicAQ=",
"h1:8rq9U72Ieus2zn1M1FVKgEnEO2f+ZFx/ISMefIEt6kc=",
"h1:MeMGdavako/OPTU/qAgKRIQKD49x9tn4PGrOTWi9tFE=",
"h1:PIP4W0AHpcV+jnKMlZmNd6MtfXMJlKjBdR2DYOX8rTs=",
"h1:TSWZWvxliZCajkWOq5wOSsB6TJdu3nhhaaAcFL6aBdM=",
"h1:VKuCmJyi+i9UlIHl2ezQkmGZgZMm8E+WHkxTheDGcFc=",
"h1:WL/GOSfwJuTfyGnl17hXxBA24Pe+pG5o6ONKfGdAesM=",
"h1:XicUpPrAY/QJvE3qncz/LtAfeS43fXgI5lihOBmWzpI=",
"h1:YftzVnHzmOxfK9an5wzHnB7kLAEMzoNnEgRffntMIFI=",
"h1:ZQrgBiB//NLYh3K6gOT1nJp5ezBqUQJ1Qx5eTpMpBB4=",
"h1:cRV923M29H/H3NfvlVGsGkvyn8P7ovsMU5BNb9U1d+o=",
"h1:qivroEJiR4Vycmc4E4DherPkBCAm4xfet2Sr87uIXhY=",
"h1:z2119TMCuS7zEYg2oDYff5EnHWtYSVv0mcOJ25wl3i8=",
"zh:0cae95e8c9d2d979669712745251dcf5720cee2a59bb81d8ad2c2dcf0e6e0c7a",
"zh:1220aee9549e7938648f6a36237929ead0de8244c6a00f8e8cded559f4b65a2f",
"zh:23ae1862e5fe5b583b8ec2c96f80a5ba0e3883be8e1169a0484a45106cc238ce",
"zh:3034654c6f34e419c53dcd6ea558b715e1150fbcc70c93209c5ee88a03025072",
"zh:3b64a66f3ddeb04345511262ad9376eb3c26e0683a78f47a3fd7f5e71f3f7e27",
"zh:4b29435e1e8f970b92bb38eca52820f7a8362c16235334aef9a83be32bd00094",
"zh:4f8fe69db7f54bce0e78a4c671aa5db20515114626035051f387d9833f4a5a91",
"zh:86776bfbdabd2095975be9b3ca999c2f47ca5194ece6c58c69130ccfa2e3c97d",
"h1:/CGpnYMkLRDmqn4iAsh/jg7ELZ6QExUw03VdjKZyK5M=",
"h1:82C/ryqwQvxhBINYOOyF5ZzPW/k4zJ/RYT13eCdPgEc=",
"h1:8Wu1D7ZwbLGdHakLRAzoAJ5VqZ8I14qzkPv1OGNfIlg=",
"h1:CVq0CAibeueOuiNk0UQtwZvMLMof33n1BgskFPOymrk=",
"h1:FSS5Kq+L+CX1zARy8PhaF8edBFNgsLtds4Uo8MwJiK8=",
"h1:L4qsorLII7f8xSFmv6JOoWfLWDunWQEpK964Bxk7mtM=",
"h1:StO3PV5PDskSCnhoHhWHOPxu6hbzJUQggfLgOSkvhwg=",
"h1:Tjo+Er9ets5YrTRIdP9LBmi4p89nL/W+A7r8a1MM9nI=",
"h1:XIwT+AWvks1LTytePM9zls+O8ItxoqCfPOgHwuH9ivQ=",
"h1:aOXn/zuM1+5GGy/SSRx8q4EYCSTFE9Tr0twHPIf5/KE=",
"h1:lb+YcuZ4guYd8zE51vgSnDsRAD9IV00Z15l1i1X52s8=",
"h1:pYwNXGjfXA2rUEmotGMLWgmavT9D2rdHnV3TpuIK3ko=",
"h1:q1qrnPq6KkljwBrugCwzb7f0SVP4Lzkfh+EOLARY9V8=",
"h1:v9sL4cZLTV5Gu2004DDyy7209gT0JmudBCAD0WCr/JE=",
"zh:00be2a6adc76615a368491c7a026098103b6286deb31e3cfb037365dd39f095f",
"zh:05bd072e6119f7a5abff05c6064001f745473119a956586cf77ae843cf55d666",
"zh:228bbe61345c4e8e0bc6b698b4b9652abff65662ee72ede2aecb4c3efb91b243",
"zh:2948aeefe71ba041c94082cf931ecc95510d93af0a61d0a287880f5b9d24b11a",
"zh:5dfc2c5e95843ca54957212ee3ecb7ff06f2cf60bfd6ca278b5249fd70ac18f5",
"zh:69922cb45559b0b0544b9c2d31ed2d0fac9121faa75bc2f523484785b45d8e2b",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:9d50271a09ee01a7105c06e582c52743a3baaf46f298d52bfc9e64cd7bfaa712",
"zh:a1e12d1c3472d457140de0e8b77a4b09e5cdcd3e2f6c0be0fe0dae0526d368db",
"zh:ad638e2c91490367d55ec6fe46ee34a9f7c151ca6e3cc52e5bad9f358e77f1aa",
"zh:cc4c496f2c594994a9d966f7ebe00a797eca9b924ac1bbe5aef26ec83ec7f833",
"zh:e74d5a3695deb38c2858d1c99c424495900e9b298ca8961c0a2fc1b3714c4c77",
"zh:f4b6efa4c2b4c85c92171dc0824dbf42af9dde5250131494de803e0b9fe1ea3c",
"zh:9d83a0cbf72327286f7dbd63cd4af89059c648163fe6ed21b1df768e0518d445",
"zh:a8e1982945822c7d7aaa6ba8602c7247d1a3fad15d612f30eb323491a637bf8d",
"zh:c6d41ebd69ddb23e3dad49a0ebf1da5a9c7d8706a4f55d953115d371f407928b",
"zh:d03e5442b12846c2737f099d30cd23d9f85a0c6d65437ccb44819f9a6c4e1d7f",
"zh:d446f2e1186b35037aea03b0e27d8b032d2f069f194f84b3f0e2907b3a79a955",
"zh:e4d7549a4c856524e01f3dd4d69f57119ea205f7a0fa38dcfe154475b4ae9258",
"zh:e64b8915cb9686f85e77115bd674f2faf4f29880688067d7d0f1376566fdb3b0",
"zh:f046efdc55e6385cdd69baaa06a929bef9fe6809d373b0d2d6c7df8f8c23eddc",
]
}

View File

@@ -5,7 +5,7 @@ terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.44.0"
version = "4.45.0"
}
}
}

View File

@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.44.0"
constraints = "4.44.0"
version = "4.45.0"
constraints = "4.45.0"
hashes = [
"h1:2kgcFIKdPgw/22FoLI+54G2+Np3L0np8ost6e8VwAhU=",
"h1:5FQNWKXde8kkfEJHeu5yBaC0NxCzeOKs2K0QMGTicAQ=",
"h1:8rq9U72Ieus2zn1M1FVKgEnEO2f+ZFx/ISMefIEt6kc=",
"h1:MeMGdavako/OPTU/qAgKRIQKD49x9tn4PGrOTWi9tFE=",
"h1:PIP4W0AHpcV+jnKMlZmNd6MtfXMJlKjBdR2DYOX8rTs=",
"h1:TSWZWvxliZCajkWOq5wOSsB6TJdu3nhhaaAcFL6aBdM=",
"h1:VKuCmJyi+i9UlIHl2ezQkmGZgZMm8E+WHkxTheDGcFc=",
"h1:WL/GOSfwJuTfyGnl17hXxBA24Pe+pG5o6ONKfGdAesM=",
"h1:XicUpPrAY/QJvE3qncz/LtAfeS43fXgI5lihOBmWzpI=",
"h1:YftzVnHzmOxfK9an5wzHnB7kLAEMzoNnEgRffntMIFI=",
"h1:ZQrgBiB//NLYh3K6gOT1nJp5ezBqUQJ1Qx5eTpMpBB4=",
"h1:cRV923M29H/H3NfvlVGsGkvyn8P7ovsMU5BNb9U1d+o=",
"h1:qivroEJiR4Vycmc4E4DherPkBCAm4xfet2Sr87uIXhY=",
"h1:z2119TMCuS7zEYg2oDYff5EnHWtYSVv0mcOJ25wl3i8=",
"zh:0cae95e8c9d2d979669712745251dcf5720cee2a59bb81d8ad2c2dcf0e6e0c7a",
"zh:1220aee9549e7938648f6a36237929ead0de8244c6a00f8e8cded559f4b65a2f",
"zh:23ae1862e5fe5b583b8ec2c96f80a5ba0e3883be8e1169a0484a45106cc238ce",
"zh:3034654c6f34e419c53dcd6ea558b715e1150fbcc70c93209c5ee88a03025072",
"zh:3b64a66f3ddeb04345511262ad9376eb3c26e0683a78f47a3fd7f5e71f3f7e27",
"zh:4b29435e1e8f970b92bb38eca52820f7a8362c16235334aef9a83be32bd00094",
"zh:4f8fe69db7f54bce0e78a4c671aa5db20515114626035051f387d9833f4a5a91",
"zh:86776bfbdabd2095975be9b3ca999c2f47ca5194ece6c58c69130ccfa2e3c97d",
"h1:/CGpnYMkLRDmqn4iAsh/jg7ELZ6QExUw03VdjKZyK5M=",
"h1:82C/ryqwQvxhBINYOOyF5ZzPW/k4zJ/RYT13eCdPgEc=",
"h1:8Wu1D7ZwbLGdHakLRAzoAJ5VqZ8I14qzkPv1OGNfIlg=",
"h1:CVq0CAibeueOuiNk0UQtwZvMLMof33n1BgskFPOymrk=",
"h1:FSS5Kq+L+CX1zARy8PhaF8edBFNgsLtds4Uo8MwJiK8=",
"h1:L4qsorLII7f8xSFmv6JOoWfLWDunWQEpK964Bxk7mtM=",
"h1:StO3PV5PDskSCnhoHhWHOPxu6hbzJUQggfLgOSkvhwg=",
"h1:Tjo+Er9ets5YrTRIdP9LBmi4p89nL/W+A7r8a1MM9nI=",
"h1:XIwT+AWvks1LTytePM9zls+O8ItxoqCfPOgHwuH9ivQ=",
"h1:aOXn/zuM1+5GGy/SSRx8q4EYCSTFE9Tr0twHPIf5/KE=",
"h1:lb+YcuZ4guYd8zE51vgSnDsRAD9IV00Z15l1i1X52s8=",
"h1:pYwNXGjfXA2rUEmotGMLWgmavT9D2rdHnV3TpuIK3ko=",
"h1:q1qrnPq6KkljwBrugCwzb7f0SVP4Lzkfh+EOLARY9V8=",
"h1:v9sL4cZLTV5Gu2004DDyy7209gT0JmudBCAD0WCr/JE=",
"zh:00be2a6adc76615a368491c7a026098103b6286deb31e3cfb037365dd39f095f",
"zh:05bd072e6119f7a5abff05c6064001f745473119a956586cf77ae843cf55d666",
"zh:228bbe61345c4e8e0bc6b698b4b9652abff65662ee72ede2aecb4c3efb91b243",
"zh:2948aeefe71ba041c94082cf931ecc95510d93af0a61d0a287880f5b9d24b11a",
"zh:5dfc2c5e95843ca54957212ee3ecb7ff06f2cf60bfd6ca278b5249fd70ac18f5",
"zh:69922cb45559b0b0544b9c2d31ed2d0fac9121faa75bc2f523484785b45d8e2b",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:9d50271a09ee01a7105c06e582c52743a3baaf46f298d52bfc9e64cd7bfaa712",
"zh:a1e12d1c3472d457140de0e8b77a4b09e5cdcd3e2f6c0be0fe0dae0526d368db",
"zh:ad638e2c91490367d55ec6fe46ee34a9f7c151ca6e3cc52e5bad9f358e77f1aa",
"zh:cc4c496f2c594994a9d966f7ebe00a797eca9b924ac1bbe5aef26ec83ec7f833",
"zh:e74d5a3695deb38c2858d1c99c424495900e9b298ca8961c0a2fc1b3714c4c77",
"zh:f4b6efa4c2b4c85c92171dc0824dbf42af9dde5250131494de803e0b9fe1ea3c",
"zh:9d83a0cbf72327286f7dbd63cd4af89059c648163fe6ed21b1df768e0518d445",
"zh:a8e1982945822c7d7aaa6ba8602c7247d1a3fad15d612f30eb323491a637bf8d",
"zh:c6d41ebd69ddb23e3dad49a0ebf1da5a9c7d8706a4f55d953115d371f407928b",
"zh:d03e5442b12846c2737f099d30cd23d9f85a0c6d65437ccb44819f9a6c4e1d7f",
"zh:d446f2e1186b35037aea03b0e27d8b032d2f069f194f84b3f0e2907b3a79a955",
"zh:e4d7549a4c856524e01f3dd4d69f57119ea205f7a0fa38dcfe154475b4ae9258",
"zh:e64b8915cb9686f85e77115bd674f2faf4f29880688067d7d0f1376566fdb3b0",
"zh:f046efdc55e6385cdd69baaa06a929bef9fe6809d373b0d2d6c7df8f8c23eddc",
]
}

View File

@@ -5,7 +5,7 @@ terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.44.0"
version = "4.45.0"
}
}
}

View File

@@ -103,7 +103,7 @@ services:
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
image: redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
healthcheck:
test: redis-cli ping || exit 1
@@ -143,7 +143,7 @@ services:
'wal_compression=on',
]
# set IMMICH_METRICS=true in .env to enable metrics
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
# immich-prometheus:
# container_name: immich_prometheus
# ports:

View File

@@ -47,7 +47,7 @@ services:
redis:
container_name: immich_redis
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
image: redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
healthcheck:
test: redis-cli ping || exit 1
restart: always
@@ -89,12 +89,12 @@ services:
]
restart: always
# set IMMICH_METRICS=true in .env to enable metrics
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
immich-prometheus:
container_name: immich_prometheus
ports:
- 9090:9090
image: prom/prometheus@sha256:378f4e03703557d1c6419e6caccf922f96e6d88a530f7431d66a4c4f4b1000fe
image: prom/prometheus@sha256:3b9b2a15d376334da8c286d995777d3b9315aa666d2311170ada6059a517b74f
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
@@ -106,7 +106,7 @@ services:
command: ['./run.sh', '-disable-reporting']
ports:
- 3000:3000
image: grafana/grafana:11.2.2-ubuntu@sha256:2bef00403c18d27919ff19d64fd6253fa713b3880304e92f69109e14221ac843
image: grafana/grafana:11.3.0-ubuntu@sha256:51587e148ac0214d7938e7f3fe8512182e4eb6141892a3ffb88bba1901b49285
volumes:
- grafana-data:/var/lib/grafana

View File

@@ -48,7 +48,7 @@ services:
redis:
container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
healthcheck:
test: redis-cli ping || exit 1
restart: always

View File

@@ -1 +1 @@
20.18.0
22.11.0

View File

@@ -15,12 +15,21 @@ Immich saves [file paths in the database](https://github.com/immich-app/immich/d
Refer to the official [postgres documentation](https://www.postgresql.org/docs/current/backup.html) for details about backing up and restoring a postgres database.
:::
The recommended way to backup and restore the Immich database is to use the `pg_dumpall` command. When restoring, you need to delete the `DB_DATA_LOCATION` folder (if it exists) to reset the database.
:::caution
It is not recommended to directly backup the `DB_DATA_LOCATION` folder. Doing so while the database is running can lead to a corrupted backup that cannot be restored.
:::
### Automatic Database Backups
Immich will automatically create database backups by default. The backups are stored in `UPLOAD_LOCATION/backups`.
You can adjust the schedule and amount of kept backups in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup).
By default, Immich will keep the last 14 backups and create a new backup every day at 2:00 AM.
#### Restoring
We hope to make restoring simpler in future versions, for now you can find the backups in the `UPLOAD_LOCATION/backups` folder on your host.
Then please follow the steps in the following section for restoring the database.
### Manual Backup and Restore
<Tabs>
@@ -49,7 +58,7 @@ docker compose up -d # Start remainder of Immich apps
<TabItem value="Windows system (PowerShell)" label="Windows system (PowerShell)">
```powershell title='Backup'
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | Set-Content -Encoding utf8 "C:\path\to\backup\dump.sql"
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres))
```
```powershell title='Restore'
@@ -68,53 +77,10 @@ docker compose up -d # Start remainder of Immich apps
</TabItem>
</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.).
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.
:::tip
Some deployment methods make it difficult to start the database without also starting the server or microservices. In these cases, you may set the environmental variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Note that both the server and microservices must have this variable set to prevent the migrations from running. Be sure to remove this variable and restart the services after the database is restored.
:::
### Automatic Database Backups
The database dumps can also be automated (using [this image](https://github.com/prodrigestivill/docker-postgres-backup-local)) by editing the docker compose file to match the following:
```yaml
services:
...
backup:
container_name: immich_db_dumper
image: prodrigestivill/postgres-backup-local:14
restart: always
env_file:
- .env
environment:
POSTGRES_HOST: database
POSTGRES_CLUSTER: 'TRUE'
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE_NAME}
SCHEDULE: "@daily"
POSTGRES_EXTRA_OPTS: '--clean --if-exists'
BACKUP_DIR: /db_dumps
volumes:
- ./db_dumps:/db_dumps
depends_on:
- database
```
Then you can restore with the same command but pointed at the latest dump.
```bash title='Automated Restore'
# Be sure to check the username if you changed it from default
gunzip < db_dumps/last/immich-latest.sql.gz \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --username=postgres
```
:::note
If you see the error `ERROR: type "earth" does not exist`, or you have problems with Reverse Geocoding after a restore, add the following `sed` fragment to your restore command.
Example: `gunzip < "/path/to/backup/dump.sql.gz" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | docker exec -i immich_postgres psql --username=postgres`
Some deployment methods make it difficult to start the database without also starting the server. In these cases, you may set the environment variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Be sure to remove this variable and restart the services after the database is restored.
:::
## Filesystem

View File

@@ -40,6 +40,26 @@ server {
}
```
#### Compatibility with Let's Encrypt
In the event that your nginx configuration includes a section for Let's Encrypt, it's likely that you have a segment similar to the following:
```nginx
location ~ /.well-known {
...
}
```
This particular `location` directive can inadvertently prevent mobile clients from reaching the `/.well-known/immich` path, which is crucial for discovery. Usual error message for this case is: "Your app major version is not compatible with the server". To remedy this, you should introduce an additional location block specifically for this path, ensuring that requests are correctly proxied to the Immich server:
```nginx
location = /.well-known/immich {
proxy_pass http://<backend_url>:2283;
}
```
By doing so, you'll maintain the functionality of Let's Encrypt while allowing mobile clients to access the necessary Immich path without obstruction.
### Caddy example config
As an alternative to nginx, you can also use [Caddy](https://caddyserver.com/) as a reverse proxy (with automatic HTTPS configuration). Below is an example config.

View File

@@ -3,7 +3,7 @@
## Folder checks
:::info
The folders considered for these checks include: `upload/`, `library/`, `thumbs/`, `encoded-video/`, `profile/`
The folders considered for these checks include: `upload/`, `library/`, `thumbs/`, `encoded-video/`, `profile/`, `backups/`
:::
When Immich starts, it performs a series of checks in order to validate that it can read and write files to the volume mounts used by the storage system. If it cannot perform all the required operations, it will fail to start. The checks include:
@@ -40,7 +40,9 @@ The above error messages show that the server has previously (successfully) writ
### Ignoring the checks
The checks are designed to catch common problems that we have seen users have in the past, but if you want to disable them you can set the following environment variable:
:::warning
The checks are designed to catch common problems that we have seen users have in the past, and often indicate there's something wrong that you should solve. If you know what you're doing and you want to disable them you can set the following environment variable:
:::
```
IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true

View File

@@ -1,5 +1,9 @@
# PR Checklist
A minimal devcontainer is supplied with this repository. All commands can be executed directly inside this container to avoid tedious installation of the environment.
:::warning
The provided devcontainer isn't complete at the moment. At least all dockerized steps in the Makefile won't work (`make dev`, ....). Feel free to contribute!
:::
When contributing code through a pull request, please check the following:
## Web Checks

View File

@@ -76,7 +76,7 @@ Setting these in the IDE give a better developer experience, auto-formatting cod
### Dart Code Metrics
The mobile app uses DCM (Dart Code Metrics) for linting and metrics calculation. Please refer to the [Getting Started](https://dcm.dev/docs/getting-started/#installation) page for more information on setting up DCM
The mobile app uses DCM (Dart Code Metrics) for linting and metrics calculation. Please refer to the [Getting Started](https://dcm.dev/docs/) page for more information on setting up DCM
Note: Activating the license is not required.

View File

@@ -1,7 +1,7 @@
# Hardware Transcoding [Experimental]
This feature allows you to use a GPU to accelerate transcoding and reduce CPU load.
Note that hardware transcoding is much less efficient for file sizes.
Note that hardware transcoding produces significantly larger videos than software transcoding with similar settings, typically with lower quality. Using slow presets and preferring more efficient codecs can narrow this gap.
As this is a new feature, it is still experimental and may not work on all systems.
:::info

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -149,6 +149,22 @@ If you get an error here, please rename the other external library to something
Within seconds, the assets from the old-pics and videos folders should show up in the main timeline.
### Folder view
:::info
This feature also exists for assets uploaded other than through external libraries.
:::tip
You can use the storage template migration feature for the best experience with uploaded assets in this view.
:::
You can browse your photos and videos by folder like in a file explorer.
Enable this feature from the Users Settings > Features > Folders.
The UI is currently only available for the web; mobile will come in a subsequent release.
<img src={require('./img/folder-view.png').default} width="75%" title='Folder-view' />
### Set Custom Scan Interval
:::note

View File

@@ -27,3 +27,39 @@ The beta release channel allows users to test upcoming changes before they are o
:::info
You can enable automatic backup on supported devices. For more information see [Automatic Backup](/docs/features/automatic-backup.md).
:::
## Album Sync
You can sync or mirror an album from your phone to the Immich server on your account. For example, if you select Recents, Camera and Videos album for backup, the corresponding album with the same name will be created on the server. Once the assets from those albums are uploaded, they will be put into the target albums automatically.
### Album Synchronization Highlights
- **One-Way Sync:** Synchronization is one-way, from the device to the server.
- **Name Matching:** If an album on the server has the same name as the album on the device, images from the device will be merged with the existing images in the server album.
- **Shared Albums:** If the matching album on the server is shared, the new photos merged into the album will also be shared.
- **Album Structure:** When an album is created for the first time, its structure is based on the initial state. Future updates made on the phone (such as deleting or repositioning photos) will not be reflected in Immich.
- **User-Specific Sync:** Album synchronization is unique to each server user and does not sync between different users or partners.
- **Mobile-Only Feature:** Album synchronization is currently only available on mobile. For similar options on a computer, refer to [Libraries](/docs/features/libraries) for further details.
### Synchronizing albums from the past
Albums can be synchronized to the server even if they did not exist on the server before. In order to apply this setting you have to:
Enter the cloud on the top right -> cog wheel on the top right -> select the sync option under Sync albums.
:::info Sync albums delete/move photos
If you delete/move photos in the local album on your device, it will not be reflected in the album on the server **even if** you click Sync albums
It will only reflect files you add.
:::
If the same asset is in more than one album it will only sync to the first album it's in, after that it won't sync again even if the user clicks sync albums manually.
To overcome this limitation, the files must be removed from the blacklist by
App settings -> Advanced -> Duplicate Assets -> Clear
:::info
Cleaning duplicate assets from the list will cause all the previously uploaded duplicate files to be re-uploaded, the files will not actually be uploaded and will be rejected on the server side (due to duplication) but will be synchronized to the album and at the end will be added to the black list again at the end of the synchronization.
:::

View File

@@ -1,15 +1,15 @@
# Files Custom Locations
This guide explains storing generated and raw files with docker's volume mount in different locations.
This guide explains how to store generated and raw files with docker's volume mount in different locations.
:::caution Backup
It is important to remember to update the backup settings after following the guide to back up the new backup paths if using automatic backup tools, especially `profile/`.
:::
In our `.env` file, we will define variables that will help us in the future when we want to move to a more advanced server in the future
In our `.env` file, we will define variables that will help us in the future when we want to move to a more advanced server
```diff title=".env"
# You can find documentation for all the supported env variables [here](/docs/install/environment-variables)
# You can find documentation for all the supported environment variables [here](/docs/install/environment-variables)
# Custom location where your uploaded, thumbnails, and transcoded video files are stored
- UPLOAD_LOCATION=./library
@@ -17,10 +17,11 @@ In our `.env` file, we will define variables that will help us in the future whe
+ THUMB_LOCATION=/custom/path/immich/thumbs
+ ENCODED_VIDEO_LOCATION=/custom/path/immich/encoded-video
+ PROFILE_LOCATION=/custom/path/immich/profile
+ BACKUP_LOCATION=/custom/path/immich/backups
...
```
After defining the locations for these files, we will edit the `docker-compose.yml` file accordingly and add the new variables to the `immich-server` container.
After defining the locations of these files, we will edit the `docker-compose.yml` file accordingly and add the new variables to the `immich-server` container.
```diff title="docker-compose.yml"
services:
@@ -30,6 +31,7 @@ services:
+ - ${THUMB_LOCATION}:/usr/src/app/upload/thumbs
+ - ${ENCODED_VIDEO_LOCATION}:/usr/src/app/upload/encoded-video
+ - ${PROFILE_LOCATION}:/usr/src/app/upload/profile
+ - ${BACKUP_LOCATION}:/usr/src/app/upload/backups
- /etc/localtime:/etc/localtime:ro
```
@@ -41,12 +43,11 @@ docker compose up -d
:::note
Because of the underlying properties of docker bind mounts, it is not recommended to mount the `upload/` and `library/` folders as separate bind mounts if they are on the same device.
For this reason, we mount the HDD or network storage to `/usr/src/app/upload` and then mount the folders we want quick access to below this folder.
For this reason, we mount the HDD or the network storage (NAS) to `/usr/src/app/upload` and then mount the folders we want to access under that folder.
The `thumbs/` folder contains both the small thumbnails shown in the timeline, and the larger previews shown when clicking into an image. These cannot be split up.
The `thumbs/` folder contains both the small thumbnails displayed in the timeline and the larger previews shown when clicking into an image. These cannot be separated.
The storage metrics of the Immich server will track the storage available at `UPLOAD_LOCATION`,
so the administrator should setup some kind of monitoring to make sure the SSD does not run out of space. The `profile/` folder is much smaller, typically less than 1 MB.
The storage metrics of the Immich server will track available storage at `UPLOAD_LOCATION`, so the administrator must set up some sort of monitoring to ensure the storage does not run out of space. The `profile/` folder is much smaller, usually less than 1 MB.
:::
Thanks to [Jrasm91](https://github.com/immich-app/immich/discussions/2110#discussioncomment-5477767) for writing the guide.

View File

@@ -98,6 +98,10 @@ SELECT * FROM "move_history";
SELECT * FROM "users";
```
```sql title="Get owner info from asset ID"
SELECT "users".* FROM "users" JOIN "assets" ON "users"."id" = "assets"."ownerId" WHERE "assets"."id" = 'fa310b01-2f26-4b7a-9042-d578226e021f';
```
## System Config
```sql title="Custom settings"

View File

@@ -6,6 +6,15 @@ This script assumes you have a second hard drive connected to your server for on
The database is saved to your Immich upload folder in the `database-backup` subdirectory. The database is then backed up and versioned with your assets by Borg. This ensures that the database backup is in sync with your assets in every snapshot.
:::info
This script makes backups of your database along with your photo/video library. This is redundant with the [automatic database backup tool](https://immich.app/docs/administration/backup-and-restore#automatic-database-backups) built into Immich. Using this script to backup your database has two advantages over the built-in backup tool:
- This script uses storage more efficiently by versioning your backups instead of making multiple copies.
- The database backups are performed at the same time as the library backup, ensuring that the backups of your database and the library are always in sync.
If you are using this script, it is therefore safe to turn off the built-in automatic database backups from your admin panel to save storage space.
:::
### Prerequisites
- Borg needs to be installed on your server as well as the remote machine. You can find instructions to install Borg [here](https://borgbackup.readthedocs.io/en/latest/installation.html).

View File

@@ -26,7 +26,6 @@ The default configuration looks like this:
"bframes": -1,
"refs": 0,
"gopSize": 0,
"npl": 0,
"temporalAQ": false,
"cqMode": "auto",
"twoPass": false,
@@ -36,6 +35,13 @@ The default configuration looks like this:
"accel": "disabled",
"accelDecode": false
},
"backup": {
"database": {
"enabled": true,
"cronExpression": "0 02 * * *",
"keepLastAmount": 14
}
},
"job": {
"backgroundTask": {
"concurrency": 5

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -8,7 +8,7 @@ Hardware and software requirements for Immich:
## Software
- [Docker](https://docs.docker.com/get-docker/)
- [Docker](https://docs.docker.com/engine/install/)
- [Docker Compose](https://docs.docker.com/compose/install/)
:::note

View File

@@ -7,7 +7,9 @@ sidebar_position: 80
:::note
This is a community contribution and not officially supported by the Immich team, but included here for convenience.
**Please report issues to the corresponding [Github Repository](https://github.com/truenas/charts/tree/master/community/immich).**
Community support can be found in the dedicated channel on the [Discord Server](https://discord.immich.app/).
**Please report app issues to the corresponding [Github Repository](https://github.com/truenas/charts/tree/master/community/immich).**
:::
Immich can easily be installed on TrueNAS SCALE via the **Community** train application.
@@ -20,18 +22,26 @@ TrueNAS SCALE makes installing and updating Immich easy, but you must use the Im
The Immich app in TrueNAS SCALE installs, completes the initial configuration, then starts the Immich web portal.
When updates become available, SCALE alerts and provides easy updates.
Before installing the Immich app in SCALE, review the [Environment Variables](/docs/install/environment-variables.md) documentation to see if you want to configure any during installation.
You can configure environment variables at any time after deploying the application.
Before installing the Immich app in SCALE, review the [Environment Variables](#environment-variables) documentation to see if you want to configure any during installation.
You may also configure environment variables at any time after deploying the application.
You can allow SCALE to create the datasets Immich requires automatically during app installation.
Or before beginning app installation, [create the datasets](https://www.truenas.com/docs/scale/scaletutorials/storage/datasets/datasetsscale/) to use in the **Storage Configuration** section during installation.
Immich requires seven datasets: **library**, **pgBackup**, **pgData**, **profile**, **thumbs**, **uploads**, and **video**.
You can organize these as one parent with seven child datasets, for example `mnt/tank/immich/library`, `mnt/tank/immich/pgBackup`, and so on.
### Setting up Storage Datasets
Before beginning app installation, [create the datasets](https://www.truenas.com/docs/scale/scaletutorials/storage/datasets/datasetsscale/) to use in the **Storage Configuration** section during installation.
Immich requires seven datasets: `library`, `upload`, `thumbs`, `profile`, `video`, `backups`, and `pgData`.
You can organize these as one parent with seven child datasets, for example `/mnt/tank/immich/library`, `/mnt/tank/immich/upload`, and so on.
<img
src={require('./img/truenas12.png').default}
width="30%"
alt="Immich App Widget"
className="border rounded-xl"
/>
:::info Permissions
The **pgData** dataset must be owned by the user `netdata` (UID 999) for postgres to start. The other datasets must be owned by the user `root` (UID 0) or a group that includes the user `root` (UID 0) for immich to have the necessary permissions.
The **library** dataset must have [ACL mode](https://www.truenas.com/docs/core/coretutorials/storage/pools/permissions/#access-control-lists) set to `Passthrough` if you plan on using a [storage template](/docs/administration/storage-template.mdx) and the dataset is configured for network sharing (its ACL type is set to `SMB/NFSv4`). When the template is applied and files need to be moved from **uploads** to **library**, immich performs `chmod` internally and needs to be allowed to execute the command.
If the **library** dataset uses ACL it must have [ACL mode](https://www.truenas.com/docs/core/coretutorials/storage/pools/permissions/#access-control-lists) set to `Passthrough` if you plan on using a [storage template](/docs/administration/storage-template.mdx) and the dataset is configured for network sharing (its ACL type is set to `SMB/NFSv4`). When the template is applied and files need to be moved from **upload** to **library**, immich performs `chmod` internally and needs to be allowed to execute the command. [More info.](https://github.com/immich-app/immich/pull/13017)
:::
## Installing the Immich Application
@@ -47,6 +57,8 @@ className="border rounded-xl"
Click on the widget to open the **Immich** application details screen.
<br/><br/>
<img
src={require('./img/truenas02.png').default}
width="100%"
@@ -56,9 +68,13 @@ className="border rounded-xl"
Click **Install** to open the Immich application configuration screen.
<br/><br/>
Application configuration settings are presented in several sections, each explained below.
To find specific fields click in the **Search Input Fields** search field, scroll down to a particular section or click on the section heading on the navigation area in the upper-right corner.
### Application Name and Version
<img
src={require('./img/truenas03.png').default}
width="100%"
@@ -66,21 +82,123 @@ alt="Install Immich Screen"
className="border rounded-xl"
/>
Accept the default values in **Application Name** and **Version**.
Accept the default value or enter a name in **Application Name** field.
In most cases use the default name, but if adding a second deployment of the application you must change this name.
Accept the default version number in **Version**.
When a new version becomes available, the application has an update badge.
The **Installed Applications** screen shows the option to update applications.
### Immich Configuration
<img
src={require('./img/truenas05.png').default}
width="40%"
alt="Configuration Settings"
className="border rounded-xl"
/>
Accept the default value in **Timezone** or change to match your local timezone.
**Timezone** is only used by the Immich `exiftool` microservice if it cannot be determined from the image metadata.
Accept the default port in **Web Port**.
Untick **Enable Machine Learning** if you will not use face recognition, image search, and smart duplicate detection.
Accept the default option or select the **Machine Learning Image Type** for your hardware based on the [Hardware-Accelerated Machine Learning Supported Backends](/docs/features/ml-hardware-acceleration.md#supported-backends).
Immich's default is `postgres` but you should consider setting the **Database Password** to a custom value using only the characters `A-Za-z0-9`.
The **Redis Password** should be set to a custom value using only the characters `A-Za-z0-9`.
Accept the **Log Level** default of **Log**.
Leave **Hugging Face Endpoint** blank. (This is for downloading ML models from a different source.)
Leave **Additional Environment Variables** blank or see [Environment Variables](#environment-variables) to set before installing.
### Network Configuration
<img
src={require('./img/truenas06.png').default}
width="40%"
alt="Networking Settings"
className="border rounded-xl"
/>
Accept the default port `30041` in **WebUI Port** or enter a custom port number.
:::info Allowed Port Numbers
Only numbers within the range 9000-65535 may be used on SCALE versions below TrueNAS Scale 24.10 Electric Eel.
Regardless of version, to avoid port conflicts, don't use [ports on this list](https://www.truenas.com/docs/references/defaultports/).
:::
### Storage Configuration
Immich requires seven storage datasets.
You can allow SCALE to create them for you, or use the dataset(s) created in [First Steps](#first-steps).
Select the storage options you want to use for **Immich Uploads Storage**, **Immich Library Storage**, **Immich Thumbs Storage**, **Immich Profile Storage**, **Immich Video Storage**, **Immich Postgres Data Storage**, **Immich Postgres Backup Storage**.
Select **ixVolume (dataset created automatically by the system)** in **Type** to let SCALE create the dataset or select **Host Path** to use the existing datasets created on the system.
Accept the defaults in Resources or change the CPU and memory limits to suit your use case.
<img
src={require('./img/truenas07.png').default}
width="20%"
alt="Configure Storage ixVolumes"
className="border rounded-xl"
/>
Click **Install**.
:::note Default Setting (Not recommended)
The default setting for datasets is **ixVolume (dataset created automatically by the system)** but this results in your data being harder to access manually and can result in data loss if you delete the immich app. (Not recommended)
:::
For each Storage option select **Host Path (Path that already exists on the system)** and then select the matching dataset [created before installing the app](#setting-up-storage-datasets): **Immich Library Storage**: `library`, **Immich Uploads Storage**: `upload`, **Immich Thumbs Storage**: `thumbs`, **Immich Profile Storage**: `profile`, **Immich Video Storage**: `video`, **Immich Backups Storage**: `backups`, **Postgres Data Storage**: `pgData`.
<img
src={require('./img/truenas08.png').default}
width="40%"
alt="Configure Storage Host Paths"
className="border rounded-xl"
/>
The image above has example values.
<br/>
### Additional Storage [(External Libraries)](/docs/features/libraries)
<img
src={require('./img/truenas10.png').default}
width="40%"
alt="Configure Storage Host Paths"
className="border rounded-xl"
/>
You may configure [External Libraries](/docs/features/libraries) by mounting them using **Additional Storage**.
The **Mount Path** is the loaction you will need to copy and paste into the External Library settings within Immich.
The **Host Path** is the location on the TrueNAS SCALE server where your external library is located.
<!-- A section for Labels would go here but I don't know what they do. -->
### Resources Configuration
<img
src={require('./img/truenas09.png').default}
width="40%"
alt="Resource Limits"
className="border rounded-xl"
/>
Accept the default **CPU** limit of `2` threads or specify the number of threads (CPUs with Multi-/Hyper-threading have 2 threads per core).
Accept the default **Memory** limit of `4096` MB or specify the number of MB of RAM. If you're using Machine Learning you should probably set this above 8000 MB.
:::info Older SCALE Versions
Before TrueNAS SCALE version 24.10 Electric Eel:
The **CPU** value was specified in a different format with a default of `4000m` which is 4 threads.
The **Memory** value was specified in a different format with a default of `8Gi` which is 8 GiB of RAM. The value was specified in bytes or a number with a measurement suffix. Examples: `129M`, `123Mi`, `1000000000`
:::
Enable **GPU Configuration** options if you have a GPU that you will use for [Hardware Transcoding](/docs/features/hardware-transcoding) and/or [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md). More info: [GPU Passtrough Docs for TrueNAS Apps](https://www.truenas.com/docs/truenasapps/#gpu-passthrough)
### Install
Finally, click **Install**.
The system opens the **Installed Applications** screen with the Immich app in the **Deploying** state.
When the installation completes it changes to **Running**.
@@ -97,102 +215,41 @@ Click **Web Portal** on the **Application Info** widget to open the Immich web i
For more information on how to use the application once installed, please refer to the [Post Install](/docs/install/post-install.mdx) guide.
:::
## Editing Environment Variables
## Edit App Settings
Go to the **Installed Applications** screen and select Immich from the list of installed applications.
Click **Edit** on the **Application Info** widget to open the **Edit Immich** screen.
The settings on the edit screen are the same as on the install screen.
You cannot edit **Storage Configuration** paths after the initial app install.
- Go to the **Installed Applications** screen and select Immich from the list of installed applications.
- Click **Edit** on the **Application Info** widget to open the **Edit Immich** screen.
- Change any settings you would like to change.
- The settings on the edit screen are the same as on the install screen.
- Click **Update** at the very bottom of the page to save changes.
- TrueNAS automatically updates, recreates, and redeploys the Immich container with the updated settings.
Click **Update** to save changes.
TrueNAS automatically updates, recreates, and redeploys the Immich container with the updated environment variables.
## Environment Variables
You can set [Environment Variables](/docs/install/environment-variables) by clicking **Add** on the **Additional Environment Variables** option and filling in the **Name** and **Value**.
<img
src={require('./img/truenas11.png').default}
width="40%"
alt="Environment Variables"
className="border rounded-xl"
/>
:::info
Some Environment Variables are not available for the TrueNAS SCALE app. This is mainly because they can be configured through GUI options in the [Edit Immich screen](#edit-app-settings).
Some examples are: `IMMICH_VERSION`, `UPLOAD_LOCATION`, `DB_DATA_LOCATION`, `TZ`, `IMMICH_LOG_LEVEL`, `DB_PASSWORD`, `REDIS_PASSWORD`.
:::
## Updating the App
When updates become available, SCALE alerts and provides easy updates.
To update the app to the latest version, click **Update** on the **Application Info** widget from the **Installed Applications** screen.
To update the app to the latest version:
Update opens an update window for the application that includes two selectable options, Images (to be updated) and Changelog. Click on the down arrow to see the options available for each.
Click **Upgrade** to begin the process and open a counter dialog that shows the upgrade progress. When complete, the update badge and buttons disappear and the application Update state on the Installed screen changes from Update Available to Up to date.
## Understanding Immich Settings in TrueNAS SCALE
Accept the default value or enter a name in **Application Name** field.
In most cases use the default name, but if adding a second deployment of the application you must change this name.
Accept the default version number in **Version**.
When a new version becomes available, the application has an update badge.
The **Installed Applications** screen shows the option to update applications.
### Immich Configuration Settings
You can accept the defaults in the **Immich Configuration** settings, or enter the settings you want to use.
<img
src={require('./img/truenas05.png').default}
width="100%"
alt="Configuration Settings"
className="border rounded-xl"
/>
Accept the default setting in **Timezone** or change to match your local timezone.
**Timezone** is only used by the Immich `exiftool` microservice if it cannot be determined from the image metadata.
You can enter a **Public Login Message** to display on the login page, or leave it blank.
### Networking Settings
Accept the default port numbers in **Web Port**.
The SCALE Immich app listens on port **30041**.
Refer to the TrueNAS [default port list](https://www.truenas.com/docs/references/defaultports/) for a list of assigned port numbers.
To change the port numbers, enter a number within the range 9000-65535.
<img
src={require('./img/truenas06.png').default}
width="100%"
alt="Networking Settings"
className="border rounded-xl"
/>
### Storage Settings
You can install Immich using the default setting **ixVolume (dataset created automatically by the system)** or use the host path option with datasets [created before installing the app](#first-steps).
<img
src={require('./img/truenas07.png').default}
width="100%"
alt="Configure Storage ixVolumes"
className="border rounded-xl"
/>
Select **Host Path (Path that already exists on the system)** to browse to and select the datasets.
<img
src={require('./img/truenas08.png').default}
width="100%"
alt="Configure Storage Host Paths"
className="border rounded-xl"
/>
### Resource Configuration Settings
Accept the default values in **Resources Configuration** or enter new CPU and memory values
By default, this application is limited to use no more than 4 CPU cores and 8 Gigabytes available memory. The application might use considerably less system resources.
<img
src={require('./img/truenas09.png').default}
width="100%"
alt="Resource Limits"
className="border rounded-xl"
/>
To customize the CPU and memory allocated to the container Immich uses, enter new CPU values as a plain integer value followed by the suffix m (milli).
Default is 4000m.
Accept the default value 8Gi allocated memory or enter a new limit in bytes.
Enter a plain integer followed by the measurement suffix, for example 129M or 123Mi.
Systems with compatible GPU(s) display devices in **GPU Configuration**.
See [Managing GPUs](https://www.truenas.com/docs/scale/scaletutorials/systemsettings/advanced/managegpuscale/) for more information about allocating isolated GPU devices in TrueNAS SCALE.
- Go to the **Installed Applications** screen and select Immich from the list of installed applications.
- Click **Update** on the **Application Info** widget from the **Installed Applications** screen.
- This opens an update window with some options
- You may select an Image update too.
- You may view the Changelog.
- Click **Upgrade** to begin the process and open a counter dialog that shows the upgrade progress.
- When complete, the update badge and buttons disappear and the application Update state on the Installed screen changes from Update Available to Up to date.

View File

@@ -3006,9 +3006,10 @@
}
},
"node_modules/@mdx-js/react": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz",
"integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz",
"integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==",
"license": "MIT",
"dependencies": {
"@types/mdx": "^2.0.0"
},

View File

@@ -56,6 +56,6 @@
"node": ">=20"
},
"volta": {
"node": "20.18.0"
"node": "22.11.0"
}
}

View File

@@ -35,19 +35,24 @@ const guides: CommunityGuidesProps[] = [
},
{
title: 'Google Photos import + albums',
description: 'Import your Google Photos files into Immich and add your 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',
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',
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',
},
];
function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element {

View File

@@ -83,6 +83,12 @@ const projects: CommunityProjectProps[] = [
description: 'Power tools for organizing your immich library.',
url: 'https://github.com/varun-raj/immich-power-tools',
},
{
title: 'Immich Public Proxy',
description:
'Share your Immich photos and albums in a safe way without exposing your Immich instance to the public.',
url: 'https://github.com/alangrainger/immich-public-proxy',
},
];
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {

View File

@@ -49,7 +49,7 @@ export function Timeline({ items }: Props): JSX.Element {
<div className="flex flex-col flex-grow justify-between gap-2">
<div className="flex gap-2 items-center">
{cardIcon === 'immich' ? (
<img src="img/immich-logo.svg" height="30" className="rounded-none" />
<img src="/img/immich-logo.svg" height="30" className="rounded-none" />
) : (
<Icon path={cardIcon} size={1} color={item.iconColor} />
)}

View File

@@ -74,12 +74,14 @@ import {
mdiFaceRecognition,
mdiVideo,
mdiWeb,
mdiDatabaseOutline,
} from '@mdi/js';
import Layout from '@theme/Layout';
import React from 'react';
import { Item, Timeline } from '../components/timeline';
const releases = {
'v1.120.0': new Date(2024, 10, 6),
'v1.114.0': new Date(2024, 8, 6),
'v1.113.0': new Date(2024, 7, 30),
'v1.112.0': new Date(2024, 7, 14),
@@ -151,6 +153,9 @@ const weirdTags = {
'v1.2.0': 'v0.2-dev ',
};
const title = 'Roadmap';
const description = 'A list of future plans and goals, as well as past achievements and milestones.';
const withLanguage = (date: Date) => (language: string) => date.toLocaleDateString(language);
type Base = { icon: string; iconColor?: React.CSSProperties['color']; title: string; description: string };
@@ -175,6 +180,38 @@ const withRelease = ({
};
const roadmap: Item[] = [
{
done: false,
icon: mdiFlash,
iconColor: 'gold',
title: 'Workflows',
description: 'Automate tasks with workflows',
getDateLabel: () => 'Planned for 2025',
},
{
done: false,
icon: mdiTableKey,
iconColor: 'gray',
title: 'Fine grained access controls',
description: 'Granular access controls for users and api keys',
getDateLabel: () => 'Planned for 2025',
},
{
done: false,
icon: mdiImageEdit,
iconColor: 'rebeccapurple',
title: 'Basic editor',
description: 'Basic photo editing capabilities',
getDateLabel: () => 'Planned for 2025',
},
{
done: false,
icon: mdiRocketLaunch,
iconColor: 'indianred',
title: 'Stable release',
description: 'Immich goes stable',
getDateLabel: () => 'Planned for early 2025',
},
{
done: false,
icon: mdiLockOutline,
@@ -183,14 +220,6 @@ const roadmap: Item[] = [
description: 'Private assets with extra protections',
getDateLabel: () => 'Planned for 2024',
},
{
done: false,
icon: mdiRocketLaunch,
iconColor: 'indianred',
title: 'Stable release',
description: 'Immich goes stable',
getDateLabel: () => 'Planned for 2024',
},
{
done: false,
icon: mdiCloudUploadOutline,
@@ -199,30 +228,6 @@ const roadmap: Item[] = [
description: 'Rework background backups to be more reliable',
getDateLabel: () => 'Planned for 2024',
},
{
done: false,
icon: mdiImageEdit,
iconColor: 'rebeccapurple',
title: 'Basic editor',
description: 'Basic photo editing capabilities',
getDateLabel: () => 'Planned for 2024',
},
{
done: false,
icon: mdiFlash,
iconColor: 'gold',
title: 'Workflows',
description: 'Automate tasks with workflows',
getDateLabel: () => 'Planned for 2024',
},
{
done: false,
icon: mdiTableKey,
iconColor: 'gray',
title: 'Fine grained access controls',
description: 'Granular access controls for users and api keys',
getDateLabel: () => 'Planned for 2024',
},
{
done: false,
icon: mdiCameraBurst,
@@ -234,6 +239,20 @@ const roadmap: Item[] = [
];
const milestones: Item[] = [
withRelease({
icon: mdiDatabaseOutline,
iconColor: 'brown',
title: 'Automatic database backups',
description: 'Database backups are now integrated into the Immich server',
release: 'v1.120.0',
}),
{
icon: mdiStar,
iconColor: 'gold',
title: '50,000 Stars',
description: 'Reached 50K Stars on GitHub!',
getDateLabel: withLanguage(new Date(2024, 10, 1)),
},
withRelease({
icon: mdiFaceRecognition,
title: 'Metadata Face Import',
@@ -853,14 +872,12 @@ const milestones: Item[] = [
export default function MilestonePage(): JSX.Element {
return (
<Layout title="Milestones" description="History of Immich">
<Layout title={title} description={description}>
<section className="my-8">
<h1 className="md:text-6xl text-center mb-10 text-immich-primary dark:text-immich-dark-primary px-2">
Roadmap
{title}
</h1>
<p className="text-center text-xl px-2">
A list of future plans and goals, as well as past achievements and milestones.
</p>
<p className="text-center text-xl px-2">{description}</p>
<div className="flex justify-around mt-8 w-full max-w-full">
<Timeline items={[...roadmap, ...milestones]} />
</div>

View File

@@ -1,4 +1,20 @@
[
{
"label": "v1.120.2",
"url": "https://v1.120.2.archive.immich.app"
},
{
"label": "v1.120.1",
"url": "https://v1.120.1.archive.immich.app"
},
{
"label": "v1.120.0",
"url": "https://v1.120.0.archive.immich.app"
},
{
"label": "v1.119.1",
"url": "https://v1.119.1.archive.immich.app"
},
{
"label": "v1.119.0",
"url": "https://v1.119.0.archive.immich.app"

View File

@@ -1 +1 @@
20.18.0
22.11.0

View File

@@ -19,7 +19,7 @@ services:
- DB_PASSWORD=postgres
- DB_DATABASE_NAME=immich
- IMMICH_MACHINE_LEARNING_ENABLED=false
- IMMICH_METRICS=true
- IMMICH_TELEMETRY_INCLUDE=all
- IMMICH_ENV=testing
- IMMICH_PORT=2285
- IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true
@@ -34,7 +34,7 @@ services:
- 2285:2285
redis:
image: redis:6.2-alpine@sha256:2ba50e1ac3a0ea17b736ce9db2b0a9f6f8b85d4c27d5f5accc6a416d8f42c6d5
image: redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
database:
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0

652
e2e/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "1.119.0",
"version": "1.120.2",
"description": "",
"main": "index.js",
"type": "module",
@@ -25,7 +25,7 @@
"@immich/sdk": "file:../open-api/typescript-sdk",
"@playwright/test": "^1.44.1",
"@types/luxon": "^3.4.2",
"@types/node": "^20.16.12",
"@types/node": "^22.9.0",
"@types/oidc-provider": "^8.5.1",
"@types/pg": "^8.11.0",
"@types/pngjs": "^6.0.4",
@@ -53,6 +53,6 @@
"vitest": "^2.0.5"
},
"volta": {
"node": "20.18.0"
"node": "22.11.0"
}
}

View File

@@ -1148,6 +1148,78 @@ describe('/asset', () => {
},
},
},
{
input: 'formats/raw/Canon/PowerShot_G12.CR2',
expected: {
type: AssetTypeEnum.Image,
originalFileName: 'PowerShot_G12.CR2',
fileCreatedAt: '2015-12-27T09:55:40.000Z',
exifInfo: {
make: 'Canon',
model: 'Canon PowerShot G12',
exifImageHeight: 2736,
exifImageWidth: 3648,
exposureTime: '1/1000',
fNumber: 4,
focalLength: 18.098,
iso: 80,
lensModel: null,
fileSizeInByte: 11_113_617,
dateTimeOriginal: '2015-12-27T09:55:40.000Z',
latitude: null,
longitude: null,
orientation: '1',
},
},
},
{
input: 'formats/raw/Fujifilm/X100V_compressed.RAF',
expected: {
type: AssetTypeEnum.Image,
originalFileName: 'X100V_compressed.RAF',
fileCreatedAt: '2024-10-12T21:01:01.000Z',
exifInfo: {
make: 'FUJIFILM',
model: 'X100V',
exifImageHeight: 4160,
exifImageWidth: 6240,
exposureTime: '1/4000',
fNumber: 16,
focalLength: 23,
iso: 160,
lensModel: null,
fileSizeInByte: 13_551_312,
dateTimeOriginal: '2024-10-12T21:01:01.000Z',
latitude: null,
longitude: null,
orientation: '6',
},
},
},
{
input: 'formats/raw/Ricoh/GR3/Ricoh_GR3-450.DNG',
expected: {
type: AssetTypeEnum.Image,
originalFileName: 'Ricoh_GR3-450.DNG',
fileCreatedAt: '2024-06-08T13:48:39.000Z',
exifInfo: {
dateTimeOriginal: '2024-06-08T13:48:39.000Z',
exifImageHeight: 4064,
exifImageWidth: 6112,
exposureTime: '1/400',
fNumber: 5,
fileSizeInByte: 31_175_472,
focalLength: 18.3,
iso: 100,
latitude: 36.613_24,
lensModel: 'GR LENS 18.3mm F2.8',
longitude: -121.897_85,
make: 'RICOH IMAGING COMPANY, LTD.',
model: 'RICOH GR III',
orientation: '1',
},
},
},
];
it(`should upload and generate a thumbnail for different file types`, async () => {

View File

@@ -473,10 +473,7 @@ describe('/search', () => {
.get('/search/explore')
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
expect(body).toEqual([
{ fieldName: 'exifInfo.city', items: [] },
{ fieldName: 'smartInfo.tags', items: [] },
]);
expect(body).toEqual([{ fieldName: 'exifInfo.city', items: [] }]);
});
});

View File

@@ -163,11 +163,15 @@ describe('/server', () => {
expect(body).toEqual({
photos: 0,
usage: 0,
usagePhotos: 0,
usageVideos: 0,
usageByUser: [
{
quotaSizeInBytes: null,
photos: 0,
usage: 0,
usagePhotos: 0,
usageVideos: 0,
userName: 'Immich Admin',
userId: admin.userId,
videos: 0,
@@ -176,6 +180,8 @@ describe('/server', () => {
quotaSizeInBytes: null,
photos: 0,
usage: 0,
usagePhotos: 0,
usageVideos: 0,
userName: 'User 1',
userId: nonAdmin.userId,
videos: 0,

View File

@@ -103,7 +103,7 @@ describe(`immich upload`, () => {
describe(`immich upload /path/to/file.jpg`, () => {
it('should upload a single file', async () => {
const { stderr, stdout, exitCode } = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
);
@@ -126,7 +126,7 @@ describe(`immich upload`, () => {
const expectedCount = Object.entries(files).filter((entry) => entry[1]).length;
const { stderr, stdout, exitCode } = await immichCli(['upload', ...commandLine]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining(`Successfully uploaded ${expectedCount} new asset`)]),
);
@@ -154,7 +154,7 @@ describe(`immich upload`, () => {
cpSync(`${testAssetDir}/albums/nature/silver_fir.jpg`, testPaths[1]);
const { stderr, stdout, exitCode } = await immichCli(['upload', ...testPaths]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Successfully uploaded 2 new assets')]),
);
@@ -169,7 +169,7 @@ describe(`immich upload`, () => {
it('should skip a duplicate file', async () => {
const first = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
expect(first.stderr).toBe('');
expect(first.stderr).toContain('{message}');
expect(first.stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
);
@@ -179,7 +179,7 @@ describe(`immich upload`, () => {
expect(assets.total).toBe(1);
const second = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
expect(second.stderr).toBe('');
expect(second.stderr).toContain('{message}');
expect(second.stdout.split('\n')).toEqual(
expect.arrayContaining([
expect.stringContaining('Found 0 new files and 1 duplicate'),
@@ -205,7 +205,7 @@ describe(`immich upload`, () => {
`${testAssetDir}/albums/nature/silver_fir.jpg`,
'--dry-run',
]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Would have uploaded 1 asset')]),
);
@@ -217,7 +217,7 @@ describe(`immich upload`, () => {
it('dry run should handle duplicates', async () => {
const first = await immichCli(['upload', `${testAssetDir}/albums/nature/silver_fir.jpg`]);
expect(first.stderr).toBe('');
expect(first.stderr).toContain('{message}');
expect(first.stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Successfully uploaded 1 new asset')]),
);
@@ -227,7 +227,7 @@ describe(`immich upload`, () => {
expect(assets.total).toBe(1);
const second = await immichCli(['upload', `${testAssetDir}/albums/nature/`, '--dry-run']);
expect(second.stderr).toBe('');
expect(second.stderr).toContain('{message}');
expect(second.stdout.split('\n')).toEqual(
expect.arrayContaining([
expect.stringContaining('Found 8 new files and 1 duplicate'),
@@ -241,7 +241,7 @@ describe(`immich upload`, () => {
describe('immich upload --recursive', () => {
it('should upload a folder recursively', async () => {
const { stderr, stdout, exitCode } = await immichCli(['upload', `${testAssetDir}/albums/nature/`, '--recursive']);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Successfully uploaded 9 new assets')]),
);
@@ -267,7 +267,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Successfully updated 9 assets'),
]),
);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(exitCode).toBe(0);
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -283,7 +283,7 @@ describe(`immich upload`, () => {
expect(response1.stdout.split('\n')).toEqual(
expect.arrayContaining([expect.stringContaining('Successfully uploaded 9 new assets')]),
);
expect(response1.stderr).toBe('');
expect(response1.stderr).toContain('{message}');
expect(response1.exitCode).toBe(0);
const assets1 = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -299,7 +299,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Successfully updated 9 assets'),
]),
);
expect(response2.stderr).toBe('');
expect(response2.stderr).toContain('{message}');
expect(response2.exitCode).toBe(0);
const assets2 = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -325,7 +325,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Would have updated albums of 9 assets'),
]),
);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(exitCode).toBe(0);
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -351,7 +351,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Successfully updated 9 assets'),
]),
);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(exitCode).toBe(0);
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -377,7 +377,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Would have updated albums of 9 assets'),
]),
);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(exitCode).toBe(0);
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -408,7 +408,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Deleting assets that have been uploaded'),
]),
);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(exitCode).toBe(0);
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -434,7 +434,7 @@ describe(`immich upload`, () => {
expect.stringContaining('Would have deleted 9 local assets'),
]),
);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(exitCode).toBe(0);
const assets = await getAssetStatistics({}, { headers: asKeyAuth(key) });
@@ -493,7 +493,7 @@ describe(`immich upload`, () => {
'2',
]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([
'Found 9 new files and 0 duplicates',
@@ -534,7 +534,7 @@ describe(`immich upload`, () => {
'silver_fir.jpg',
]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([
'Found 8 new files and 0 duplicates',
@@ -555,7 +555,7 @@ describe(`immich upload`, () => {
'!(*_*_*).jpg',
]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([
'Found 1 new files and 0 duplicates',
@@ -577,7 +577,7 @@ describe(`immich upload`, () => {
'--dry-run',
]);
expect(stderr).toBe('');
expect(stderr).toContain('{message}');
expect(stdout.split('\n')).toEqual(
expect.arrayContaining([
'Found 8 new files and 0 duplicates',

View File

@@ -9,9 +9,11 @@ describe(`immich-admin`, () => {
describe('list-users', () => {
it('should list the admin user', async () => {
const { stdout, stderr, exitCode } = await immichAdmin(['list-users']).promise;
const { stdout, exitCode } = await immichAdmin(['list-users']).promise;
expect(exitCode).toBe(0);
expect(stderr).toBe('');
// TODO: Vitest needs upgrade to Node 22.x to fix the failed check
// expect(stderr).toBe('');
expect(stdout).toContain("email: 'admin@immich.cloud'");
expect(stdout).toContain("name: 'Immich Admin'");
});
@@ -29,9 +31,10 @@ describe(`immich-admin`, () => {
}
});
const { stderr, stdout, exitCode } = await promise;
const { stdout, exitCode } = await promise;
expect(exitCode).toBe(0);
expect(stderr).toBe('');
// TODO: Vitest needs upgrade to Node 22.x to fix the failed check
// expect(stderr).toBe('');
expect(stdout).toContain('The admin password has been updated to:');
});
});

View File

@@ -11,6 +11,7 @@ import {
PersonCreateDto,
SharedLinkCreateDto,
UserAdminCreateDto,
UserPreferencesUpdateDto,
ValidateLibraryDto,
checkExistingAssets,
createAlbum,
@@ -19,6 +20,7 @@ import {
createPartner,
createPerson,
createSharedLink,
createStack,
createUserAdmin,
deleteAssets,
getAllJobsStatus,
@@ -28,10 +30,13 @@ import {
searchMetadata,
setBaseUrl,
signUpAdmin,
tagAssets,
updateAdminOnboarding,
updateAlbumUser,
updateAssets,
updateConfig,
updateMyPreferences,
upsertTags,
validate,
} from '@immich/sdk';
import { BrowserContext } from '@playwright/test';
@@ -444,6 +449,18 @@ export const utils = {
createPartner: (accessToken: string, id: string) => createPartner({ id }, { headers: asBearerAuth(accessToken) }),
updateMyPreferences: (accessToken: string, userPreferencesUpdateDto: UserPreferencesUpdateDto) =>
updateMyPreferences({ userPreferencesUpdateDto }, { headers: asBearerAuth(accessToken) }),
createStack: (accessToken: string, assetIds: string[]) =>
createStack({ stackCreateDto: { assetIds } }, { headers: asBearerAuth(accessToken) }),
upsertTags: (accessToken: string, tags: string[]) =>
upsertTags({ tagUpsertDto: { tags } }, { headers: asBearerAuth(accessToken) }),
tagAssets: (accessToken: string, tagId: string, assetIds: string[]) =>
tagAssets({ id: tagId, bulkIdsDto: { ids: assetIds } }, { headers: asBearerAuth(accessToken) }),
setAuthCookies: async (context: BrowserContext, accessToken: string, domain = '127.0.0.1') =>
await context.addCookies([
{

View File

@@ -0,0 +1,66 @@
import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk';
import { expect, Page, test } from '@playwright/test';
import { utils } from 'src/utils';
async function ensureDetailPanelVisible(page: Page) {
await page.waitForSelector('#immich-asset-viewer');
const isVisible = await page.locator('#detail-panel').isVisible();
if (!isVisible) {
await page.keyboard.press('i');
await page.waitForSelector('#detail-panel');
}
}
test.describe('Asset Viewer stack', () => {
let admin: LoginResponseDto;
let assetOne: AssetMediaResponseDto;
let assetTwo: AssetMediaResponseDto;
test.beforeAll(async () => {
utils.initSdk();
await utils.resetDatabase();
admin = await utils.adminSetup();
await utils.updateMyPreferences(admin.accessToken, { tags: { enabled: true } });
assetOne = await utils.createAsset(admin.accessToken);
assetTwo = await utils.createAsset(admin.accessToken);
await utils.createStack(admin.accessToken, [assetOne.id, assetTwo.id]);
const tags = await utils.upsertTags(admin.accessToken, ['test/1', 'test/2']);
const tagOne = tags.find((tag) => tag.value === 'test/1')!;
const tagTwo = tags.find((tag) => tag.value === 'test/2')!;
await utils.tagAssets(admin.accessToken, tagOne.id, [assetOne.id]);
await utils.tagAssets(admin.accessToken, tagTwo.id, [assetTwo.id]);
});
test('stack slideshow is visible', async ({ page, context }) => {
await utils.setAuthCookies(context, admin.accessToken);
await page.goto(`/photos/${assetOne.id}`);
const stackAssets = page.locator('#stack-slideshow [data-asset]');
await expect(stackAssets.first()).toBeVisible();
await expect(stackAssets.nth(1)).toBeVisible();
});
test('tags of primary asset are visible', async ({ page, context }) => {
await utils.setAuthCookies(context, admin.accessToken);
await page.goto(`/photos/${assetOne.id}`);
await ensureDetailPanelVisible(page);
const tags = page.getByTestId('detail-panel-tags').getByRole('link');
await expect(tags.first()).toHaveText('test/1');
});
test('tags of second asset are visible', async ({ page, context }) => {
await utils.setAuthCookies(context, admin.accessToken);
await page.goto(`/photos/${assetOne.id}`);
await ensureDetailPanelVisible(page);
const stackAssets = page.locator('#stack-slideshow [data-asset]');
await stackAssets.nth(1).click();
const tags = page.getByTestId('detail-panel-tags').getByRole('link');
await expect(tags.first()).toHaveText('test/2');
});
});

View File

@@ -1 +1,32 @@
{}
{
"about": "Пра праграму",
"account": "Уліковы запіс",
"account_settings": "Налады акаўнта",
"acknowledge": "Пацвердзіць",
"action": "Дзеянне",
"actions": "Дзеянні",
"active": "Актыўны",
"activity": "Актыўнасць",
"activity_changed": "Актыўнасць {enabled, select, true {уключана} other {адключана}}",
"add": "Дадаць",
"add_a_description": "Дадаць апісанне",
"add_a_location": "Дадаць месца",
"add_a_name": "Дадаць імя",
"add_a_title": "Дадаць загаловак",
"add_exclusion_pattern": "Дадаць шаблон выключэння",
"add_import_path": "Дадаць шлях імпарту",
"add_location": "Дадайце месца",
"add_more_users": "Дадаць больш карыстальнікаў",
"add_partner": "Дадаць партнёра",
"add_path": "Дадаць шлях",
"add_photos": "Дадаць фота",
"add_to": "Дадаць у...",
"add_to_album": "Дадаць у альбом",
"add_to_shared_album": "Дадаць у агульны альбом",
"added_to_archive": "Дададзена ў архіў",
"added_to_favorites": "Дададзена ў абраныя",
"added_to_favorites_count": "Дададзена {count, number} да абранага",
"admin": {
"add_exclusion_pattern_description": "Дадайце шаблоны выключэнняў. Падтрымліваецца выкарыстанне сімвалаў * , ** і ?. Каб ігнараваць усе файлы ў любой дырэкторыі з назвай \"Raw\", выкарыстоўвайце \"**/Raw/**\". Каб ігнараваць усе файлы, якія заканчваюцца на \".tif\", выкарыстоўвайце \"**/.tif\". Каб ігнараваць абсолютны шлях, выкарыстоўвайце \"/path/to/ignore/**\"."
}
}

View File

@@ -874,7 +874,7 @@
"loop_videos_description": "Habilita la reproducció en bucle del vídeo en els detalls.",
"main_branch_warning": "Esteu usant una versió de desenvolupaent. Recomanem fer servir una versió publicada!",
"make": "Fabricant",
"manage_shared_links": "Spravovat sdílené odkazy",
"manage_shared_links": "Administrar enllaços compartits",
"manage_sharing_with_partners": "Gestiona la compartició amb els companys",
"manage_the_app_settings": "Gestioneu la configuració de l'aplicació",
"manage_your_account": "Gestiona el teu compte",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Opravdu chcete zakázat všechny metody přihlášení? Přihlašování bude úplně zakázáno.",
"authentication_settings_reenable": "Pro opětovné povolení použijte příkaz <link>Příkaz serveru</link>.",
"background_task_job": "Úkoly na pozadí",
"backup_database": "Zálohování databáze",
"backup_database_enable_description": "Povolit zálohování databáze",
"backup_keep_last_amount": "Počet předchozích záloh k uchování",
"backup_settings": "Nastavení zálohování",
"backup_settings_description": "Spravovat nastavení zálohování databáze",
"check_all": "Vše zkontrolovat",
"cleared_jobs": "Hotové úlohy pro: {job}",
"config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Opravdu chcete znovu zpracovat všechny obličeje? Tím se vymažou i pojmenované osoby.",
"confirm_user_password_reset": "Opravdu chcete obnovit heslo uživatele {user}?",
"create_job": "Vytvořit úlohu",
"cron_expression": "Výraz cron",
"cron_expression_description": "Nastavte interval prohledávání pomocí cron formátu. Další informace naleznete např. v <link>Crontab Guru</link>",
"cron_expression_presets": "Předvolby výrazů cron",
"crontab_guru": "Crontab Guru",
"disable_login": "Zakázat přihlášení",
"disabled": "Zakázáno",

View File

@@ -33,6 +33,11 @@
"authentication_settings_disable_all": "Er du sikker på at du vil deaktivere alle loginmuligheder? Login vil blive helt deaktiveret.",
"authentication_settings_reenable": "Brug en <link>server-kommando</link> for at genaktivere.",
"background_task_job": "Baggrundsopgaver",
"backup_database": "Backup Database",
"backup_database_enable_description": "Slå database-backup til",
"backup_keep_last_amount": "Mængde af tidligere backups, der skal gemmes",
"backup_settings": "Backup-indstillinger",
"backup_settings_description": "Administrer backupindstillinger for database",
"check_all": "Tjek Alle",
"cleared_jobs": "Ryddet jobs til: {job}",
"config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil",
@@ -41,6 +46,7 @@
"confirm_email_below": "For at bekræfte, skriv \"{email}\" herunder",
"confirm_reprocess_all_faces": "Er du sikker på, at du vil genbehandle alle ansigter? Dette vil også rydde navngivne personer.",
"confirm_user_password_reset": "Er du sikker på, at du vil nulstille {user}s adgangskode?",
"create_job": "Opret job",
"crontab_guru": "Crontab Guru",
"disable_login": "Deaktiver login",
"disabled": "",
@@ -54,21 +60,27 @@
"failed_job_command": "Kommando {command} mislykkedes for job: {job}",
"force_delete_user_warning": "ADVARSEL: Dette vil øjeblikkeligt fjerne brugeren og alle Billeder/Videoer. Dette kan ikke fortrydes, og filerne kan ikke gendannes.",
"forcing_refresh_library_files": "Tvinger genopfriskning af alle biblioteksfiler",
"image_format": "Format",
"image_format_description": "WebP producerer mindre filer end JPEG, men er langsommere at komprimere.",
"image_prefer_embedded_preview": "Foretræk indlejret forhåndsvisning",
"image_prefer_embedded_preview_setting_description": "Brug indlejrede forhåndsvisninger i RAW fotos som input til billedbehandling, når det er tilgængeligt. Dette kan give mere nøjagtige farver for nogle billeder, men kvaliteten af forhåndsvisningen er kameraafhængig, og billedet kan have flere komprimeringsartefakter.",
"image_prefer_wide_gamut": "Foretrækker bred farveskala",
"image_prefer_wide_gamut_setting_description": "Brug Display P3 til miniaturebilleder. Dette bevarer billeder med brede farveskalaers dynamik bedre, men billeder kan komme til at se anderledes ud på gamle enheder med en gammel browserversion. sRGB-billeder bliver beholdt som sRGB for at undgå farveskift.",
"image_preview_description": "Mellemstørrelse billede med fjernet metadata, der bruges, når du ser en enkelt mediefil og til machine learning",
"image_preview_format": "Forhåndsvisningsformat",
"image_preview_quality_description": "Kvalitet af forhåndsvisning fra 1-100. Højere er bedre, men producerer større filer og kan reducere apprespons. Valg af en lav værdi kan påvirke kvaliteten af machine learning.",
"image_preview_resolution": "Forhåndsvisnings opløsning",
"image_preview_resolution_description": "Bliver brugt når et enkelt billede betragtes og ved maskinlæring. Højere opløsninger kan bevare flere detaljer, men tager længere tid at indkode, har større filstørrelser, og kan gøre appoplevelsen sløvere.",
"image_preview_title": "Indstillinger for forhåndsvisning",
"image_quality": "Kvalitet",
"image_quality_description": "Billedkvalitet fra 1-100. Højere er bedre for kvaliteten, men producerer større filer. Denne indstilling påvirker forhåndsvisningen og miniaturebillederne.",
"image_resolution": "Opløsning",
"image_settings": "Billedindstillinger",
"image_settings_description": "Administrer kvaliteten og opløsningen af genererede billeder",
"image_thumbnail_format": "Miniatureformat",
"image_thumbnail_resolution": "Miniature opløsning",
"image_thumbnail_resolution_description": "Bruges ved visning af grupper af billeder (hovedtidslinje, albumvisning osv.). Højere opløsninger kan bevare flere detaljer, men det tager længere tid at kode, har større filstørrelser og kan reducere appens reaktionsevne.",
"image_thumbnail_title": "Thumbnail-indstillinger",
"job_concurrency": "{job} samtidighed",
"job_not_concurrency_safe": "Denne opgave er ikke sikker at køre samtidigt med andre.",
"job_settings": "Jobindstillinger",
@@ -198,6 +210,7 @@
"password_settings": "Adgangskodelogin",
"password_settings_description": "Administrer indstillinger for adgangskodelogin",
"paths_validated_successfully": "Alle stier valideret med succes",
"person_cleanup_job": "Person-oprydning",
"quota_size_gib": "Kvotestørrelse (GiB)",
"refreshing_all_libraries": "Opdaterer alle biblioteker",
"registration": "Administratorregistrering",
@@ -209,6 +222,7 @@
"require_password_change_on_login": "Kræv at brugeren skifter adgangskode ved første login",
"reset_settings_to_default": "Nulstil indstillingerne til standard",
"reset_settings_to_recent_saved": "Nulstil indstillinger til de senest gemte indstillinger",
"scanning_library": "Scanner bibliotek",
"scanning_library_for_changed_files": "Skanner bibliotek efter ændrede filer",
"scanning_library_for_new_files": "Skanner bibliotek efter nye filer",
"send_welcome_email": "Send velkomst-email",
@@ -312,6 +326,7 @@
"trash_settings_description": "Administrér skraldeindstillinger",
"untracked_files": "Utrackede filer",
"untracked_files_description": "Applikationen holder ikke styr på disse filer. De kan være resultatet af mislykkede flytninger, afbrudte uploads eller være efterladt på grund af en fejl",
"user_cleanup_job": "Bruger-oprydning",
"user_delete_delay": "<b>{user}</b>'s konto og mediefiler vil blive planlagt til permanent sletning om {delay, plural, one {# dag} other {# dage}}.",
"user_delete_delay_settings": "Slet forsinkelse",
"user_delete_delay_settings_description": "Antal dage efter fjernelse for permanent at slette en brugers konto og mediefiler. Opgaven for sletning af brugere kører ved midnat for at tjekke efter brugere, der er klar til sletning. Ændringer i denne indstilling vil blive evalueret ved næste udførelse.",
@@ -356,6 +371,7 @@
"album_updated_setting_description": "Modtag en emailnotifikation når et delt album får nye mediefiler",
"album_user_left": "Forlod {album}",
"album_user_removed": "Fjernede {user}",
"album_with_link_access": "Lad alle med linket se billeder og personer i dette album.",
"albums": "Albummer",
"albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Albummer}}",
"all": "Alt",
@@ -378,7 +394,17 @@
"archive_size": "Arkiv størelse",
"archive_size_description": "Konfigurer arkivstørrelsen for downloads (i GiB)",
"archived": "Arkiveret",
"are_these_the_same_person": "Er disse den samme person?",
"are_you_sure_to_do_this": "Er du sikker på, at du vil gøre det her?",
"asset_added_to_album": "Tilføjet til album",
"asset_adding_to_album": "Tilføjer til album...",
"asset_description_updated": "Mediefilsbeskrivelse er blevet opdateret",
"asset_filename_is_offline": "Mediefil {filename} er offline",
"asset_offline": "Mediefil offline",
"asset_offline_description": "Denne eksterne mediefil kan ikke længere findes på drevet. Kontakt venligst din Immich-administrator for hjælp.",
"asset_skipped": "Sprunget over",
"asset_uploaded": "Uploaded",
"asset_uploading": "Uploader...",
"assets": "elementer",
"authorized_devices": "Tilladte enheder",
"back": "Tilbage",
@@ -389,6 +415,7 @@
"build_image": "Byggefil",
"bulk_delete_duplicates_confirmation": "Er du sikker på, at du vil slette alle {count, plural, one {# duplicate asset} other {# duplicate assets}}? Dette vil beholde den største fil i hver gruppe og slette alle dubletter. Denne handling kan ikke fortrydes!",
"bulk_keep_duplicates_confirmation": "Er du sikker på, at du vil beholde {count, plural, one {# duplicate asset} other {# duplicate assets}}? Dette vil løse alle dubletgrupper uden at slette noget.",
"buy": "Køb Immich",
"camera": "Kamera",
"camera_brand": "Kameramærke",
"camera_model": "Kameramodel",
@@ -425,7 +452,9 @@
"collapse_all": "Klap alle sammen",
"color": "Farve",
"color_theme": "Farvetema",
"comment_deleted": "Kommentar slettet",
"comment_options": "Kommentarindstillinger",
"comments_and_likes": "Kommentarer og likes",
"comments_are_disabled": "Kommentarer er slået fra",
"confirm": "Bekræft",
"confirm_admin_password": "Bekræft administratoradgangskode",
@@ -481,6 +510,7 @@
"direction": "Retning",
"disabled": "Deaktiveret",
"disallow_edits": "Deaktivér redigeringer",
"discord": "Discord",
"discover": "Opdag",
"dismiss_all_errors": "Afvis alle fejl",
"dismiss_error": "Afvis fejl",
@@ -488,6 +518,7 @@
"display_order": "Display-rækkefølge",
"display_original_photos": "Vis originale billeder",
"display_original_photos_setting_description": "Foretræk at vise det originale billede frem for miniaturebilleder når den originale fil er web-kompatibelt. Dette kan gøre billedvisning langsommere.",
"do_not_show_again": "Vis ikke denne besked igen",
"done": "Færdig",
"download": "Hent",
"download_settings": "Download",
@@ -502,6 +533,7 @@
"months": "{months, plural, one {måned} other {{months, number} måneder}}",
"years": "{years, plural, one {år} other {{years, number} år}}"
},
"edit": "Rediger",
"edit_album": "Redigér album",
"edit_avatar": "Redigér avatar",
"edit_date": "Redigér dato",
@@ -519,6 +551,9 @@
"edit_user": "Redigér bruger",
"edited": "Redigeret",
"editor": "Redaktør",
"editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt",
"editor_close_without_save_title": "Luk editor?",
"editor_crop_tool_h2_rotation": "Rotation",
"email": "E-mail",
"empty": "",
"empty_album": "Tomt album",
@@ -528,12 +563,30 @@
"end_date": "Slutdato",
"error": "Fejl",
"error_loading_image": "Fejl ved indlæsning af billede",
"error_title": "Fejl - Noget gik galt",
"errors": {
"cannot_navigate_next_asset": "Kan ikke navigere til næste mediefil",
"cannot_navigate_previous_asset": "Kan ikke navigere til forrige mediefil",
"cleared_jobs": "Ryddede opgaver for: {job}",
"error_adding_assets_to_album": "Fejl i tilføjelse af mediefiler til album",
"error_adding_users_to_album": "Fejl i tilføjelse af brugere til album",
"error_deleting_shared_user": "Fejl i sletning af delt bruger",
"error_downloading": "Fejl i download af {filename}",
"error_hiding_buy_button": "Fejl i skjulning af køb-knap",
"error_removing_assets_from_album": "Fejl i fjernelse af mediefiler fra album. Tjek konsol for flere detaljer",
"exclusion_pattern_already_exists": "Denne udelukkelsesmønster findes allerede.",
"failed_job_command": "Kommando {command} slog fejl for opgave: {job}",
"failed_to_create_album": "Oprettelse af album mislykkedes",
"failed_to_create_shared_link": "Oprettelse af delt link mislykkedes",
"failed_to_edit_shared_link": "Redigering af delt link mislykkedes",
"failed_to_load_asset": "Indlæsning af mediefil mislykkedes",
"failed_to_load_assets": "Indlæsning af mediefiler mislykkedes",
"failed_to_load_people": "Indlæsning af personer mislykkedes",
"failed_to_remove_product_key": "Fjernelse af produktnøgle mislykkedes",
"import_path_already_exists": "Denne importsti findes allerede.",
"incorrect_email_or_password": "Forkert email eller kodeord",
"paths_validation_failed": "{paths, plural, one {# sti} other {# stier}} slog fejl ved validering",
"profile_picture_transparent_pixels": "Profilbilleder kan ikke have gennemsigtige pixels. Zoom venligst ind og/eller flyt billedet.",
"quota_higher_than_disk_size": "Du har sat en kvote der er større end disken",
"repair_unable_to_check_items": "Kunne ikke tjekke {count, select, one {element} other {elementer}}",
"unable_to_add_album_users": "Ikke i stand til at tilføje brugere til album",
@@ -554,6 +607,7 @@
"unable_to_create_user": "Ikke i stand til at oprette bruger",
"unable_to_delete_album": "Ikke i stand til at slette album",
"unable_to_delete_asset": "Kan ikke slette mediefil",
"unable_to_delete_assets": "Fejl i sletning af mediefiler",
"unable_to_delete_exclusion_pattern": "Kunne ikke slette udelukkelsesmønster",
"unable_to_delete_import_path": "Kunne ikke slette importsti",
"unable_to_delete_shared_link": "Kunne ikke slette delt link",
@@ -606,10 +660,12 @@
"every_night_at_midnight": "",
"every_night_at_twoam": "",
"every_six_hours": "",
"exif": "Exif",
"exit_slideshow": "Forlad slideshow",
"expand_all": "Udvid alle",
"expire_after": "Udløb efter",
"expired": "Udløbet",
"expires_date": "Udløber {date}",
"explore": "Udforsk",
"export": "Eksportér",
"export_as_json": "Eksportér som JSON",
@@ -623,6 +679,8 @@
"feature": "",
"feature_photo_updated": "Forsidebillede uploadet",
"featurecollection": "",
"features": "Funktioner",
"features_setting_description": "Administrer app-funktioner",
"file_name": "Filnavn",
"file_name_or_extension": "Filnavn eller filtype",
"filename": "Filnavn",
@@ -631,6 +689,7 @@
"filter_people": "Filtrér personer",
"find_them_fast": "Find dem hurtigt med søgning via navn",
"fix_incorrect_match": "Fix forkert match",
"folders": "Mapper",
"force_re-scan_library_files": "Tving genskanning af alle biblioteksfiler",
"forward": "Fremad",
"general": "Generel",
@@ -640,10 +699,15 @@
"go_to_search": "Gå til søgning",
"go_to_share_page": "Gå til delingsside",
"group_albums_by": "Gruppér albummer efter...",
"group_no": "Ingen gruppering",
"has_quota": "Har kvote",
"hi_user": "Hej {name} ({email})",
"hide_all_people": "Skjul alle personer",
"hide_gallery": "Gem galleri",
"hide_named_person": "Skjul person {name}",
"hide_password": "Gem adgangskode",
"hide_person": "Gem person",
"hide_unnamed_people": "Skjul unavngivne personer",
"host": "Host",
"hour": "Time",
"image": "Billede",
@@ -669,10 +733,12 @@
"job_settings_description": "",
"jobs": "Opgaver",
"keep": "Behold",
"keep_all": "Behold alle",
"keyboard_shortcuts": "Tastaturgenveje",
"language": "Sprog",
"language_setting_description": "Vælg dit foretrukne sprog",
"last_seen": "Sidst set",
"latest_version": "Seneste version",
"leave": "Forlad",
"let_others_respond": "Lad andre svare",
"level": "Niveau",
@@ -687,7 +753,12 @@
"loading_search_results_failed": "At loade søgeresultater slog fejl",
"log_out": "Log ud",
"log_out_all_devices": "Log ud af alle enheder",
"logged_out_all_devices": "Logget ud af alle enheder",
"logged_out_device": "Logget ud af enhed",
"login": "Log ind",
"login_has_been_disabled": "Login er blevet deaktiveret.",
"logout_all_device_confirmation": "Er du sikker på, at du vil logge ud af alle enheder?",
"logout_this_device_confirmation": "Er du sikker på, at du vil logge denne enhed ud?",
"look": "Kig",
"loop_videos": "Gentag videoer",
"loop_videos_description": "Aktivér for at genafspille videoer automatisk i detaljeret visning.",
@@ -721,15 +792,19 @@
"name": "Navn",
"name_or_nickname": "Navn eller kælenavn",
"never": "aldrig",
"new_album": "Nyt album",
"new_api_key": "Ny API-nøgle",
"new_password": "Ny adgangskode",
"new_person": "Ny person",
"new_user_created": "Ny bruger oprettet",
"new_version_available": "NY VERSION TILGÆNGELIG",
"newest_first": "Nyeste først",
"next": "Næste",
"next_memory": "Næste minde",
"no": "Nej",
"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_yet": "Det ser ud til, at du ikke har nogen album endnu.",
"no_archived_assets_message": "Arkivér billeder og fotos for at gemme dem væk fra dit Billed-view",
"no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE",
"no_duplicates_found": "Ingen duplikater fundet.",
@@ -740,6 +815,7 @@
"no_name": "Intet navn",
"no_places": "Ingen steder",
"no_results": "Ingen resultater",
"no_results_description": "Prøv et synonym eller et mere generelt søgeord",
"no_shared_albums_message": "Opret et album for at dele billeder og videoer med personer i dit netværk",
"not_in_any_album": "Ikke i noget album",
"note_apply_storage_label_to_previously_uploaded assets": "Bemærk: For at anvende Lagringsmærkat på tidligere uploadede medier, kør",
@@ -749,17 +825,24 @@
"notifications": "Notifikationer",
"notifications_setting_description": "Administrér notifikationer",
"oauth": "OAuth",
"official_immich_resources": "Officielle Immich-ressourcer",
"offline": "Offline",
"offline_paths": "Offline-stier",
"offline_paths_description": "Disse resultater kan være på grund af manuel sletning af filer, som ikke er en del af et eksternt bibliotek.",
"ok": "Ok",
"oldest_first": "Ældste først",
"onboarding_privacy_description": "Følgende (valgfrie) funktioner er afhængige af eksterne tjenester, og kan til enhver tid deaktiveres i administrationsindstillingerne.",
"onboarding_welcome_user": "Velkommen, {user}",
"online": "Online",
"only_favorites": "Kun favoritter",
"only_refreshes_modified_files": "Kun genopfrisk ændrede filer",
"open_in_map_view": "Åben i kortvisning",
"open_in_openstreetmap": "Åben i OpenStreetMap",
"open_the_search_filters": "Åbn søgefiltre",
"options": "Handlinger",
"or": "eller",
"organize_your_library": "Organisér dit bibliotek",
"original": "original",
"other": "Andet",
"other_devices": "Andre enheder",
"other_variables": "Andre variable",
@@ -792,6 +875,7 @@
"permanent_deletion_warning_setting_description": "Vis en advarsel, når medier slettes permanent",
"permanently_delete": "Slet permanent",
"permanently_deleted_asset": "Permanent slettet medie",
"person": "Person",
"photos": "Billeder",
"photos_count": "{count, plural, one {{count, number} Billede} other {{count, number} Billeder}}",
"photos_from_previous_years": "Billeder fra tidligere år",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Bist du sicher, dass du alle Anmeldemethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.",
"authentication_settings_reenable": "Nutze einen <link>Server-Befehl</link> zur Reaktivierung.",
"background_task_job": "Hintergrund-Aufgaben",
"backup_database": "Datenbank sichern",
"backup_database_enable_description": "Sicherung der Datenbank aktivieren",
"backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen",
"backup_settings": "Datensicherungs-Einstellungen",
"backup_settings_description": "Datensicherungs-Einstellungen verwalten",
"check_all": "Alle überprüfen",
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
"config_set_by_file": "Ist derzeit in einer Konfigurationsdatei festgelegt",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Bist du sicher, dass du alle Gesichter erneut verarbeiten möchtest? Dies löscht auch alle bereits benannten Personen.",
"confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?",
"create_job": "Aufgabe erstellen",
"cron_expression": "Cron-Ausdruck",
"cron_expression_description": "Stellen Sie das Scanintervall im Cron-Format ein. Weitere Informationen finden Sie beispielsweise unter <link>Crontab Guru</link>",
"cron_expression_presets": "Cron-Ausdruck-Vorlagen",
"crontab_guru": "Crontab Guru",
"disable_login": "Login deaktvieren",
"disabled": "Deaktiviert",
@@ -592,7 +600,7 @@
"editor_close_without_save_prompt": "Die Änderungen werden nicht gespeichert",
"editor_close_without_save_title": "Editor schließen?",
"editor_crop_tool_h2_aspect_ratios": "Seitenverhältnisse",
"editor_crop_tool_h2_rotation": "Rotation",
"editor_crop_tool_h2_rotation": "Drehung",
"email": "E-Mail",
"empty": "Leer",
"empty_album": "Leeres Album",
@@ -1187,7 +1195,7 @@
"select_library_owner": "Bibliotheksbesitzer auswählen",
"select_new_face": "Neues Gesicht auswählen",
"select_photos": "Fotos auswählen",
"select_trash_all": "Alle Löschen",
"select_trash_all": "Alle löschen",
"selected": "Ausgewählt",
"selected_count": "{count, plural, other {# ausgewählt}}",
"send_message": "Nachricht senden",
@@ -1304,21 +1312,21 @@
"to_login": "Anmelden",
"to_parent": "Gehe zum Übergeordneten",
"to_root": "Zur Wurzel",
"to_trash": "Zum Papierkorb verschieben",
"to_trash": "In den Papierkorb verschieben",
"toggle_settings": "Einstellungen umschalten",
"toggle_theme": "Dunkles Theme umschalten",
"toggle_visibility": "Sichtbarkeit umschalten",
"total_usage": "Gesamtnutzung",
"trash": "Papierkorb",
"trash_all": "Alles in den Papierkorb",
"trash_all": "Alle löschen",
"trash_count": "Papierkorb {count, number}",
"trash_delete_asset": "Datei löschen/in den Papierkorb verschieben",
"trash_no_results_message": "Gelöschte Fotos und Videos werden hier angezeigt.",
"trashed_items_will_be_permanently_deleted_after": "Gelöschte Objekte werden nach {days, plural, one {# Tag} other {# Tagen}} endgültig gelöscht.",
"type": "Typ",
"unarchive": "Unarchivieren",
"unarchive": "Entarchivieren",
"unarchived": "Unarchiviert",
"unarchived_count": "{count, plural, other {# Entarchiviert}}",
"unarchived_count": "{count, plural, other {# entarchiviert}}",
"unfavorite": "Entfavorisieren",
"unhide_person": "Person einblenden",
"unknown": "Unbekannt",
@@ -1330,7 +1338,7 @@
"unlinked_oauth_account": "Nicht verknüpftes OAuth-Konto",
"unnamed_album": "Unbenanntes Album",
"unnamed_album_delete_confirmation": "Bist du sicher, dass du dieses Album löschen willst?",
"unnamed_share": "Unbenannte Teilung",
"unnamed_share": "Unbenannte Freigabe",
"unsaved_change": "Ungespeicherte Änderung",
"unselect_all": "Alles abwählen",
"unselect_all_duplicates": "Alle Duplikate abwählen",
@@ -1342,7 +1350,7 @@
"updated_password": "Passwort aktualisiert",
"upload": "Hochladen",
"upload_concurrency": "Parallelität beim Hochladen",
"upload_errors": "Hochladen abgeschlossen mit {count, plural, one {# Fehler} other {# Fehlern}}, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.",
"upload_errors": "Hochladen mit {count, plural, one {# Fehler} other {# Fehlern}} abgeschlossen, aktualisiere die Seite, um neu hochgeladene Dateien zu sehen.",
"upload_progress": "{remaining, number} verbleibend - {processed, number}/{total, number} verarbeitet",
"upload_skipped_duplicates": "{count, plural, one {# doppelte Datei} other {# doppelte Dateien}} ausgelassen",
"upload_status_duplicates": "Duplikate",
@@ -1387,7 +1395,7 @@
"view_stack": "Stapel anzeigen",
"viewer": "Zuschauer",
"visibility_changed": "Sichtbarkeit für {count, plural, one {# Person} other {# Personen}} geändert",
"waiting": "Warte",
"waiting": "Wartend",
"warning": "Warnung",
"week": "Woche",
"welcome": "Willkommen",

View File

@@ -5,7 +5,7 @@
"acknowledge": "Έλαβα γνώση",
"action": "Ενέργεια",
"actions": "Ενέργειες",
"active": "Ενεργά",
"active": "Ενεργές",
"activity": "Δραστηριότητα",
"activity_changed": "Η δραστηριότητα είναι {enabled, select, true {ενεργοποιημένη} other {απενεργοποιημένη}}",
"add": "Προσθήκη",
@@ -13,52 +13,52 @@
"add_a_location": "Προσθήκη μιας τοποθεσίας",
"add_a_name": "Προσθήκη ονόματος",
"add_a_title": "Προσθήκη τίτλου",
"add_exclusion_pattern": "Προσθήκη προτύπου αποκλεισμού",
"add_import_path": "Προσθήκη διαδρομής εισαγωγής",
"add_exclusion_pattern": "Προσθήκη μοτίβου αποκλεισμού",
"add_import_path": "Προσθήκη μονοπατιού εισαγωγής",
"add_location": "Προσθήκη τοποθεσίας",
"add_more_users": "Προσθήκη επιπλέον χρηστών",
"add_partner": "Προσθήκη συνεργάτη",
"add_path": "Προσθήκη διαδρομής",
"add_partner": "Προσθήκη συντρόφου",
"add_path": "Προσθήκη μονοπατιού",
"add_photos": "Προσθήκη φωτογραφιών",
"add_to": "Προσθήκη σε...",
"add_to_album": "Προσθήκη σε άλμπουμ",
"add_to_shared_album": "Προσθήκη σε κοινόχρηστο άλμπουμ",
"added_to_archive": "Αρχειοθέτηση",
"added_to_favorites": "Προστέθηκε στα αγαπημένα",
"added_to_archive": "Έγινε αρχειοθέτηση",
"added_to_favorites": "Έγινε προσθήκη στα αγαπημένα",
"added_to_favorites_count": "Προστέθηκαν {count, number} στα αγαπημένα",
"admin": {
"add_exclusion_pattern_description": "Προσθέστε πρότυπα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί μία απόλυτη διαδρομή, χρησιμοποιήστε \"/path/to/ignore/**\".",
"asset_offline_description": "Αυτό το στοιχείο εξωτερικής βιβλιοθήκης δε βρίσκεται πλέον στο δίσκο και έχει μεταφερθεί στα σκουπίδια. Εάν το αρχείο έχει μετακινηθεί εντός της βιβλιοθήκης, ελέγξτε το χρονοδιάγραμμα σας για το νέο αντίστοιχο στοιχείο. Για να επαναφέρετε αυτό το στοιχείο, βεβαιωθείτε ότι το παρακάτω μονοπάτι αρχείου είναι προσβάσιμο από το Immich και ότι μπορεί να σαρώσει τη βιβλιοθήκη.",
"add_exclusion_pattern_description": "Προσθέστε μοτίβα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί ένα απόλυτο μονοπάτι, χρησιμοποιήστε \"/path/to/ignore/**\".",
"asset_offline_description": "Αυτό το στοιχείο εξωτερικής βιβλιοθήκης δε βρίσκεται πλέον στο δίσκο και έχει μεταφερθεί στα απορρίμματα. Εάν το αρχείο έχει μετακινηθεί εντός της βιβλιοθήκης, ελέγξτε το χρονολόγιο φωτογραφιών σας για το νέο αντίστοιχο στοιχείο. Για να επαναφέρετε αυτό το στοιχείο, βεβαιωθείτε ότι το παρακάτω μονοπάτι αρχείου είναι προσβάσιμο από το Immich και σαρώστε τη βιβλιοθήκη.",
"authentication_settings": "Ρυθμίσεις ελέγχου ταυτότητας",
"authentication_settings_description": "Διαχείριση κωδικού πρόσβασης, OAuth και άλλες ρυθμίσεις ελέγχου ταυτότητας",
"authentication_settings_disable_all": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε όλες τις μεθόδους σύνδεσης; Η σύνδεση θα απενεργοποιηθεί πλήρως.",
"authentication_settings_reenable": "Για να επαναενεργοποιηθεί, χρησιμοποιήστε μία <link>Server Command</link>.",
"authentication_settings_reenable": "Για επαναενεργοποίηση, χρησιμοποιήστε μία <link>Εντολή Διακομηστή</link>.",
"background_task_job": "Εργασίες Παρασκηνίου",
"check_all": "Έλεγχος Όλων",
"cleared_jobs": "Εκκαθάριση εργασιών για: {job}",
"config_set_by_file": "Η διαμόρφωση γίνεται προς το παρόν από ένα αρχείο config",
"cleared_jobs": "Εκκαθαρίστηκαν εργασίες για: {job}",
"config_set_by_file": "Η παραμετροποίηση γίνεται προς το παρόν από ένα αρχείο παραμέτρων",
"confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};",
"confirm_delete_library_assets": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτή τη βιβλιοθήκη; Αυτό θα διαγράψει τα {count, plural, one {# contained asset} other {all # contained assets}} από το Immich και δεν μπορεί να αναιρεθεί. Τα αρχεία θα παραμείνουν στον δίσκο.",
"confirm_delete_library_assets": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη βιβλιοθήκη; Αυτό θα διαγράψει τα {count, plural, one {# contained asset} other {all # contained assets}} από το Immich και δεν μπορεί να αναιρεθεί. Τα αρχεία θα παραμείνουν στον δίσκο.",
"confirm_email_below": "Για επιβεβαίωση, πληκτρολογήστε \"{email}\" παρακάτω",
"confirm_reprocess_all_faces": "Είστε βέβαιοι ότι θέλετε να επεξεργαστείτε ξανά όλα τα πρόσωπα; Αυτό θα διαγράψει επίσης άτομα με όνομα.",
"confirm_user_password_reset": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη {user};",
"create_job": "Δημιουργία εργασίας",
"disable_login": "Απενεργοποίηση σύνδεσης κατά την είσοδο",
"duplicate_detection_job_description": "Εκτελέστε τη εκμάθηση μηχανής σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση",
"exclusion_pattern_description": "Τα πρότυπα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία κκαι φακέλους όσο σαρώνεται η βιβλιοθήκη. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισαγάγετε, όπως αρχεία RAW.",
"disable_login": "Απενεργοποίηση σύνδεσης",
"duplicate_detection_job_description": "Εκτελέστε μηχανική μάθηση σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση",
"exclusion_pattern_description": "Τα μοτίβα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία και φακέλους κατά τη σάρωση της βιβλιοθήκης σας. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισάγετε, όπως αρχεία RAW.",
"external_library_created_at": "Εξωτερική βιβλιοθήκη (δημιουργήθηκε {date})",
"external_library_management": "Διαχείριση Εξωτερικών Βιβλιοθηκών",
"face_detection": "Αναγνώριση προσώπου",
"face_detection_description": "Εντοπίστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική εκμάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Ανανέωση\" επεξεργάζεται εκ νέου όλα τα στοιχεία και η επιλογή \"Επαναφορά\", επιπλέον επαναφέρει ολα τα δεδομένα προσώπου. Η επιλογή \"Όσα Λείπουν\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.",
"facial_recognition_job_description": "Ομαδοποιήστε εντοπισμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση προσώπου. Η επιλογή \"Επαναφορά\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Όσα Λείπουν\" ομαδοποιεί πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.",
"failed_job_command": "Η Εντολή {command} απέτυχε για την εργασία: {job}",
"face_detection": "Ανίχνευση προσώπου",
"face_detection_description": "Ανιχνεύστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική μάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Ανανέωση\" επεξεργάζεται εκ νέου όλα τα στοιχεία. Η επιλογή \"Επαναφορά\", επιπλέον εκκαθαρίζει όλα τα δεδομένα προσώπου. Η επιλογή \"Ελλείποντα\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.",
"facial_recognition_job_description": "Ομαδοποιήστε ανιχνευμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση Προσώπου. Η επιλογή \"Επαναφορά\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Ελλείποντα\" βάζει στην ουρά για ομαδοποίηση πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.",
"failed_job_command": "Η εντολή {command} απέτυχε για την εργασία: {job}",
"force_delete_user_warning": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό θα αφαιρέσει άμεσα το χρήστη και όλα τα στοιχεία. Αυτό δεν μπορεί να αναιρεθεί και τα αρχεία δεν μπορούν να ανακτηθούν.",
"forcing_refresh_library_files": "Επιβολή ανανέωσης όλων των αρχείων της βιβλιοθήκης",
"image_format": "Μορφή",
"image_format_description": "Η μορφή WebP παράγει μικρότερα αρχεία από τη μορφή JPEG, αλλά είναι πιο αργή στην κωδικοποίηση.",
"image_prefer_embedded_preview": "Προτίμηση ενσωματωμένης προεπισκόπησης",
"image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως εισαγωγή στην επεξεργασία εικόνας όταν είναι διαθέσιμο. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρωματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερα μπιμπίκια λόγω συμπίεσης.",
"image_prefer_wide_gamut": "Προτίμηση ευρείας γκάμας",
"image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως είσοδο για την επεξεργασία εικόνας όταν είναι διαθέσιμες. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρώματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερες αλλοιώσεις στην εικόνα λόγω συμπίεσης.",
"image_prefer_wide_gamut": "Προτίμηση ευρέος φάσματος",
"image_prefer_wide_gamut_setting_description": "Χρησιμοποιήστε Display P3 για τις μικρογραφίες. Αυτό διατηρεί την ζωντάνια των χρωμάτων σε εικόνες μεγάλου χρωματικού εύρους, αλλά ενδέχεται να εμφανίζονται αλλιώς σε παλαιότερες συσκευές με παλαιότερες εκδόσεις περιηγητών. Οι εικόνες sRGB μένουν ως έχουν για να αποφευχθούν χρωματικές αλλαγές.",
"image_preview_description": "Μεσαίου μεγέθους εικόνες, χωρίς μεταδεδομένα, οι οποίες χρησιμοποιύνται όταν γίνεται θέαση ενός αντικειμένου και για μηχανική μάθηση",
"image_preview_format": "Μορφή προεπισκόπησης",
@@ -644,7 +644,7 @@
"warning": "Προειδοποίηση",
"week": "Εβδομάδα",
"welcome": "Καλωσορίσατε",
"welcome_to_immich": "Καλωσορίσατε στο immich",
"welcome_to_immich": "Καλωσορίσατε στο Ιmmich",
"year": "Έτος",
"years_ago": "πριν από {years, plural, one {# χρόνο} other {# χρόνια}}",
"yes": "Ναι",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Are you sure you want to disable all login methods? Login will be completely disabled.",
"authentication_settings_reenable": "To re-enable, use a <link>Server Command</link>.",
"background_task_job": "Background Tasks",
"backup_database": "Backup Database",
"backup_database_enable_description": "Enable database backups",
"backup_keep_last_amount": "Amount of previous backups to keep",
"backup_settings": "Backup Settings",
"backup_settings_description": "Manage database backup settings",
"check_all": "Check All",
"cleared_jobs": "Cleared jobs for: {job}",
"config_set_by_file": "Config is currently set by a config file",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Are you sure you want to reprocess all faces? This will also clear named people.",
"confirm_user_password_reset": "Are you sure you want to reset {user}'s password?",
"create_job": "Create job",
"cron_expression": "Cron expression",
"cron_expression_description": "Set the scanning interval using the cron format. For more information please refer to e.g. <link>Crontab Guru</link>",
"cron_expression_presets": "Cron expression presets",
"disable_login": "Disable login",
"duplicate_detection_job_description": "Run machine learning on assets to detect similar images. Relies on Smart Search",
"exclusion_pattern_description": "Exclusion patterns lets you ignore files and folders when scanning your library. This is useful if you have folders that contain files you don't want to import, such as RAW files.",
@@ -80,9 +88,6 @@
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
"jobs_failed": "{jobCount, plural, other {# failed}}",
"library_created": "Created library: {library}",
"library_cron_expression": "Cron expression",
"library_cron_expression_description": "Set the scanning interval using the cron format. For more information please refer to e.g. <link>Crontab Guru</link>",
"library_cron_expression_presets": "Cron expression presets",
"library_deleted": "Library deleted",
"library_import_path_description": "Specify a folder to import. This folder, including subfolders, will be scanned for images and videos.",
"library_scanning": "Periodic Scanning",
@@ -300,8 +305,6 @@
"transcoding_threads_description": "Higher values lead to faster encoding, but leave less room for the server to process other tasks while active. This value should not be more than the number of CPU cores. Maximizes utilization if set to 0.",
"transcoding_tone_mapping": "Tone-mapping",
"transcoding_tone_mapping_description": "Attempts to preserve the appearance of HDR videos when converted to SDR. Each algorithm makes different tradeoffs for color, detail and brightness. Hable preserves detail, Mobius preserves color, and Reinhard preserves brightness.",
"transcoding_tone_mapping_npl": "Tone-mapping NPL",
"transcoding_tone_mapping_npl_description": "Colors will be adjusted to look normal for a display of this brightness. Counter-intuitively, lower values increase the brightness of the video and vice versa since it compensates for the brightness of the display. 0 sets this value automatically.",
"transcoding_transcode_policy": "Transcode policy",
"transcoding_transcode_policy_description": "Policy for when a video should be transcoded. HDR videos will always be transcoded (except if transcoding is disabled).",
"transcoding_two_pass_encoding": "Two-pass encoding",
@@ -1280,7 +1283,7 @@
"variables": "Variables",
"version": "Version",
"version_announcement_closing": "Your friend, Alex",
"version_announcement_message": "Hi friend, there is a new version of the application please take your time to visit the <link>release notes</link> and ensure your <code>docker-compose.yml</code>, and <code>.env</code> setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your application automatically.",
"version_announcement_message": "Hi there! A new version of Immich is available. Please take some time to read the <link>release notes</link> to ensure your setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your Immich instance automatically.",
"version_history": "Version History",
"version_history_item": "Installed {version} on {date}",
"video": "Video",
@@ -1302,7 +1305,7 @@
"warning": "Warning",
"week": "Week",
"welcome": "Welcome",
"welcome_to_immich": "Welcome to immich",
"welcome_to_immich": "Welcome to Immich",
"year": "Year",
"years_ago": "{years, plural, one {# year} other {# years}} ago",
"yes": "Yes",

View File

@@ -7,50 +7,58 @@
"actions": "Acciones",
"active": "Activo",
"activity": "Actividad",
"activity_changed": "La actividad {enabled, select, true {activada} other {desactivada}}",
"add": "Añadir",
"add_a_description": "Añadir una descripción",
"add_a_location": "Añadir una ubicación",
"add_a_name": "Añadir un nombre",
"add_a_title": "Añadir un título",
"add_exclusion_pattern": "Añadir patrón de exclusión",
"add_import_path": "Añadir ruta de importación",
"add_location": "Añadir ubicación",
"add_more_users": "Añadir más usuarios",
"add_partner": "Añadir invitado",
"add_path": "Añadir ruta",
"add_photos": "Añadir fotos",
"add_to": "Añadir a...",
"add_to_album": "Añadir a un álbum",
"add_to_shared_album": "Añadir a un álbum compartido",
"added_to_archive": "Archivar",
"added_to_favorites": "Añadido a favoritos",
"added_to_favorites_count": "Añadido {count, number} a favoritos",
"activity_changed": "La actividad está {enabled, select, true {activada} other {desactivada}}",
"add": "Agregar",
"add_a_description": "Agregar descripción",
"add_a_location": "Agregar ubicación",
"add_a_name": "Agregar nombre",
"add_a_title": "Agregar título",
"add_exclusion_pattern": "Agregar patrón de exclusión",
"add_import_path": "Agregar ruta de importación",
"add_location": "Agregar ubicación",
"add_more_users": "Agregar más usuarios",
"add_partner": "Agregar invitado",
"add_path": "Agregar ruta",
"add_photos": "Agregar fotos",
"add_to": "Agregar a...",
"add_to_album": "Agregar a un álbum",
"add_to_shared_album": "Agregar a un álbum compartido",
"added_to_archive": "Archivado",
"added_to_favorites": "Agregado a favoritos",
"added_to_favorites_count": "Agregado {count, number} a favoritos",
"admin": {
"add_exclusion_pattern_description": "Añade patrones de exclusión. Puedes utilizar los caracteres *, ** y ? (globbing). Para ignorar los archivos en cualquier ruta llamada \"Raw\", utiliza \"**/Raw/**\". Para ignorar todos los archivos que terminan en \".tif\", utiliza \"**/*.tif\". Para ignorar una ruta desde la raíz, utiliza \"/carpeta/a/ignorar/**\".",
"asset_offline_description": "Este elemento de biblioteca externa ya no está en el disco y se ha movido a la papelera. Si el archivo se ha movido dentro de la biblioteca, consulte la línea de tiempo para encontrar un nuevo elemento coincidente. Para restaurar este elemento, asegúrese de que Immich pueda acceder a la ruta del archivo siguiente y busque en la biblioteca.",
"authentication_settings": "Configuración de autenticación",
"authentication_settings_description": "Gestionar clave, Oauth y otros configuraciones de autenticación",
"authentication_settings_disable_all": "¿Estás seguro de que deseas desactivar todos los métodos de inicio de sesión? Se desactivará el inicio de sesión.",
"authentication_settings_reenable": "Para volver a habilitar, utilice un <link> Comando del servidor </link> .",
"add_exclusion_pattern_description": "Agrega patrones de exclusión. Puedes utilizar los caracteres *, ** y ? (globbing). Para ignorar todos los archivos en cualquier directorio llamado \"Raw\", utiliza \"**/Raw/**\". Para ignorar todos los archivos que terminan en \".tif\", utiliza \"**/*.tif\". Para ignorar una ruta absoluta, utiliza \"/carpeta/a/ignorar/**\".",
"asset_offline_description": "Este recurso externo de la biblioteca ya no se encuentra en el disco y se ha movido a la papelera. Si el archivo se movió dentro de la biblioteca, comprueba la línea de tiempo para el nuevo recurso correspondiente. Para restaurar este recurso, asegúrate de que Immich puede acceder a la siguiente ruta de archivo y escanear la biblioteca.",
"authentication_settings": "Parámetros de autenticación",
"authentication_settings_description": "Gestionar contraseñas, OAuth y otros parámetros de autenticación",
"authentication_settings_disable_all": "¿Está seguro de que deseas desactivar todos los métodos de inicio de sesión? El inicio de sesión se desactivará por completo.",
"authentication_settings_reenable": "Para volver a activarlo, utiliza un <link> Comando del servidor </link>.",
"background_task_job": "Tareas en segundo plano",
"check_all": "Comprobar todo",
"cleared_jobs": "Trabajos realizados para: {job}",
"config_set_by_file": "La configuración está fijada actualmente en base a un archivo",
"backup_database": "Respaldar base de datos",
"backup_database_enable_description": "Activar respaldo de base de datos",
"backup_keep_last_amount": "Cantidad de respaldos previos a mantener",
"backup_settings": "Ajustes de respaldo",
"backup_settings_description": "Administrar configuración de respaldo de base de datos",
"check_all": "Verificar todo",
"cleared_jobs": "Trabajos borrados para: {job}",
"config_set_by_file": "La configuración está definida por un archivo de configuración",
"confirm_delete_library": "¿Estás seguro de que quieres eliminar la biblioteca {library}?",
"confirm_delete_library_assets": "¿Estás seguro de que quieras eliminar esta biblioteca? Esto eliminará los {count, plural, one {# contained asset} other {all # contained assets}} elementos en Immich y no puede deshacerse. Los archivos permanecerán en tu almacenamiento.",
"confirm_email_below": "Para confirmar, escribe \"{email}\" debajo",
"confirm_reprocess_all_faces": "¿Estás seguro de que quieres volver a procesar todas las caras? Esto también eliminará las personas a las que le hayas asignado nombre.",
"confirm_user_password_reset": "¿Estás seguro de que quieres resetear la contraseña de {user}?",
"confirm_email_below": "Para confirmar, escribe \"{email}\" a continuación",
"confirm_reprocess_all_faces": "¿Estás seguro de que deseas reprocesar todas las caras? Esto borrará a todas las personas que nombraste.",
"confirm_user_password_reset": "¿Estás seguro de que quieres restablecer la contraseña de {user}?",
"create_job": "Crear trabajo",
"cron_expression": "Expresión CRON",
"cron_expression_description": "Establece el intervalo de escaneo utilizando el formato CRON. Para más información puede consultar, por ejemplo, <link> Crontab Guru</link>",
"cron_expression_presets": "Valores predefinidos de expresión cron",
"crontab_guru": "Crontab Guru",
"disable_login": "Deshabilitar inicio de sesión",
"disabled": "Deshabilitado",
"duplicate_detection_job_description": "Lanza el aprendizaje automático para detectar imágenes similares. Necesita que esté activa la Búsqueda Inteligente",
"exclusion_pattern_description": "Los patrones de exclusión te permiten ignorar archivos y carpetas al escanear tu biblioteca. Esto es útil hay carpetas que contienen archivos que no quieres importar (por ejemplo los ficheros RAW).",
"external_library_created_at": "Biblioteca externa (creado el {date})",
"duplicate_detection_job_description": "Ejecuta aprendizaje automático sobre los activos para detectar imágenes similares. Se basa en la búsqueda inteligente",
"exclusion_pattern_description": "Los patrones de exclusión te permiten ignorar archivos y carpetas al escanear tu biblioteca. Esto es útil si tienes carpetas que contienen archivos que no deseas importar, como archivos RAW.",
"external_library_created_at": "Biblioteca externa (creada el {date})",
"external_library_management": "Gestión de bibliotecas externas",
"face_detection": "Detección de caras",
"face_detection": "Detección de rostros",
"face_detection_description": "Detectar las caras en los activos mediante aprendizaje automático. En el caso de los vídeos, solo se tiene en cuenta la miniatura. \"Actualizar\" (re)procesar todos los activos. \"Restablecer\" borra además todos los datos de caras actuales. \"Falta\" pone en cola los activos que aún no se han procesado. Los rostros detectados se pondrán en cola para el reconocimiento facial una vez finalizada la detección facial, agrupándolos en personas existentes o nuevas.",
"facial_recognition_job_description": "Agrupa los rostros detectados en personas. Este paso se ejecuta una vez finalizada la detección de caras. \"Restablecer\" (re)agrupa todas las caras. \"Falta\" pone en cola los rostros que no tienen asignada una persona.",
"failed_job_command": "El comando {command} ha fallado para la tarea: {job}",
@@ -278,7 +286,7 @@
"transcoding_audio_codec": "Codec de audio",
"transcoding_audio_codec_description": "Opus es la opción de mayor calidad, pero tiene menor compatibilidad con dispositivos o software antiguos.",
"transcoding_bitrate_description": "Vídeos con una tasa de bits superior a la máxima o que no están en un formato aceptado",
"transcoding_codecs_learn_more": "Para obtener más información sobre la terminología utilizada aquí, consulte la documentación de FFmpeg para <h264-link>H.264 codec</h264-link>, <hevc-link>HEVC codec</hevc-link> y <vp9-link>VP9 codec</vp9-link>.",
"transcoding_codecs_learn_more": "Para obtener más información sobre la terminología utilizada aquí, consulte la documentación de FFmpeg sobre los codecs <h264-link>H.264</h264-link>, <hevc-link>HEVC</hevc-link> y <vp9-link>VP9</vp9-link>.",
"transcoding_constant_quality_mode": "Modo de calidad constante",
"transcoding_constant_quality_mode_description": "ICQ es mejor que CQP, pero algunos dispositivos de aceleración de hardware no admiten este modo. Al configurar esta opción, se preferirá el modo especificado cuando se utilice codificación basada en calidad. NVENC lo ignora porque no es compatible con ICQ.",
"transcoding_constant_rate_factor": "Factor de tasa constante (-crf)",
@@ -417,7 +425,7 @@
"assets_added_to_name_count": "Añadido {count, plural, one {# asset} other {# assets}} a {hasName, select, true {<b>{name}</b>} other {new album}}",
"assets_count": "{count, plural, one {# activo} other {# activos}}",
"assets_moved_to_trash": "Se movió {count, plural, one {# activo} other {# activos}} a la papelera",
"assets_moved_to_trash_count": "Movido {count, plural, one {# elemento} other {# elementos}} a la papelera",
"assets_moved_to_trash_count": "{count, plural, one {# elemento movido} other {# elementos movidos}} a la papelera",
"assets_permanently_deleted_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}",
"assets_removed_count": "Eliminado {count, plural, one {# elemento} other {# elementos}}",
"assets_restore_confirmation": "¿Estás seguro de que quieres restaurar todos tus activos eliminados? ¡No puede deshacer esta acción! Tenga en cuenta que los archivos sin conexión no se pueden restaurar de esta manera.",
@@ -433,7 +441,7 @@
"blurred_background": "Fondo borroso",
"bugs_and_feature_requests": "Errores y solicitudes de funciones",
"build": "Compilación",
"build_image": "Construir Imagen",
"build_image": "Imagen",
"bulk_delete_duplicates_confirmation": "¿Estás seguro de que deseas eliminar de forma masiva {count, plural, one {# elemento duplicado} other {# elementos duplicados}}? Esto mantendrá el activo más grande de cada grupo y eliminará permanentemente todos los demás duplicados. ¡Esta acción no se puede deshacer!",
"bulk_keep_duplicates_confirmation": "¿Estas seguro de que desea mantener {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto resolverá todos los grupos duplicados sin borrar nada.",
"bulk_trash_duplicates_confirmation": "¿Estas seguro de que desea eliminar masivamente {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto mantendrá el archivo más grande de cada grupo y eliminará todos los demás duplicados.",
@@ -452,7 +460,7 @@
"cant_search_places": "No se pueden buscar lugares",
"change_date": "Cambiar fecha",
"change_expiration_time": "Cambiar fecha de caducidad",
"change_location": "Cambiar localización",
"change_location": "Cambiar ubicación",
"change_name": "Cambiar nombre",
"change_name_successfully": "Nombre cambiado correctamente",
"change_password": "Cambiar Contraseña",
@@ -950,7 +958,7 @@
"no_results": "Sin resultados",
"no_results_description": "Pruebe con un sinónimo o una palabra clave más general",
"no_shared_albums_message": "Crea un álbum para compartir fotos y vídeos con personas de tu red",
"not_in_any_album": "Nada en ningún álbum",
"not_in_any_album": "Sin álbum",
"note_apply_storage_label_to_previously_uploaded assets": "Nota: Para aplicar la etiqueta de almacenamiento a los archivos cargados previamente, ejecute el",
"note_unlimited_quota": "Nota: Ingrese 0 para cuota ilimitada",
"notes": "Notas",
@@ -1023,7 +1031,7 @@
"photo_shared_all_users": "Parece que compartiste tus fotos con todos los usuarios o no tienes ningún usuario con quien compartirlas.",
"photos": "Fotos",
"photos_and_videos": "Fotos y Videos",
"photos_count": "{count, plural, one {{count, number} foto} other {{count, number} fotos}}",
"photos_count": "{count, plural, one {{count, number} Foto} other {{count, number} Fotos}}",
"photos_from_previous_years": "Fotos de años anteriores",
"pick_a_location": "Elige una ubicación",
"place": "Lugar",
@@ -1093,8 +1101,8 @@
"recent_searches": "Búsquedas recientes",
"refresh": "Actualizar",
"refresh_encoded_videos": "Recargar los vídeos codificados",
"refresh_faces": "Refrescar caras",
"refresh_metadata": "Recargar los metadatos",
"refresh_faces": "Actualizar caras",
"refresh_metadata": "Recargar metadatos",
"refresh_thumbnails": "Recargar miniaturas",
"refreshed": "Recargado",
"refreshes_every_file": "Recargar todos los archivos nuevos y existentes",
@@ -1183,11 +1191,11 @@
"select_face": "Seleccionar cara",
"select_featured_photo": "Seleccionar foto principal",
"select_from_computer": "Seleccionar desde el PC",
"select_keep_all": "Mantener toda la selección",
"select_keep_all": "Conservar todo",
"select_library_owner": "Seleccionar propietario de la biblioteca",
"select_new_face": "Seleccionar nueva cara",
"select_photos": "Seleccionar Fotos",
"select_trash_all": "Enviar la selección a la papelera",
"select_trash_all": "Descartar todo",
"selected": "Seleccionado",
"selected_count": "{count, plural, one {# seleccionado} other {# seleccionados}}",
"send_message": "Enviar mensaje",
@@ -1195,7 +1203,7 @@
"server": "Servidor",
"server_offline": "Servidor desconectado",
"server_online": "Servidor en línea",
"server_stats": "Estadísticas Servidor",
"server_stats": "Estadísticas del servidor",
"server_version": "Versión del servidor",
"set": "Establecer",
"set_as_album_cover": "Establecer portada del álbum",
@@ -1256,7 +1264,7 @@
"sort_oldest": "Foto más antigua",
"sort_recent": "Foto más reciente",
"sort_title": "Título",
"source": "Fuente",
"source": "Origen",
"stack": "Apilar",
"stack_duplicates": "Apilar duplicados",
"stack_select_one_photo": "Selecciona una imagen principal para la pila",
@@ -1304,14 +1312,14 @@
"to_login": "Iniciar Sesión",
"to_parent": "Ir a los padres",
"to_root": "Para root",
"to_trash": "Papelera",
"to_trash": "Descartar",
"toggle_settings": "Alternar ajustes",
"toggle_theme": "Alternar tema oscuro",
"toggle_visibility": "Alternar visibilidad",
"total_usage": "Uso total",
"trash": "Papelera",
"trash_all": "Enviar todo a la papelera",
"trash_count": "Papelera {count, number}",
"trash_all": "Descartar todo",
"trash_count": "Descartar {count, number}",
"trash_delete_asset": "Borrar/Eliminar archivo",
"trash_no_results_message": "Las fotos y videos que se envíen a la papelera aparecerán aquí.",
"trashed_items_will_be_permanently_deleted_after": "Los elementos en la papelera serán eliminados permanentemente tras {days, plural, one {# día} other {# días}}.",
@@ -1391,7 +1399,7 @@
"warning": "Advertencia",
"week": "Semana",
"welcome": "Bienvenido",
"welcome_to_immich": "Bienvenido a immich",
"welcome_to_immich": "Bienvenido a Immich",
"year": "Año",
"years_ago": "Hace {years, plural, one {# año} other {# años}}",
"yes": "Sí",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Kas oled kindel, et soovid kõik sisselogimismeetodid välja lülitada? Sisselogimine lülitatakse täielikult välja.",
"authentication_settings_reenable": "Et taas lubada, kasuta <link>serveri käsku</link>.",
"background_task_job": "Tausttegumid",
"backup_database": "Varunda andmebaas",
"backup_database_enable_description": "Luba andmebaasi varundamine",
"backup_keep_last_amount": "Varukoopiate arv, mida alles hoida",
"backup_settings": "Varundamise seaded",
"backup_settings_description": "Halda andmebaasi varundamise seadeid",
"check_all": "Märgi kõik",
"cleared_jobs": "Tööted eemaldatud: {job}",
"config_set_by_file": "Konfiguratsioon on määratud konfifaili abil",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Kas oled kindel, et soovid kõik näod uuesti töödelda? See eemaldab kõik nimega isikud.",
"confirm_user_password_reset": "Kas oled kindel, et soovid kasutaja {user} parooli lähtestada?",
"create_job": "Lisa tööde",
"cron_expression": "Cron avaldis",
"cron_expression_description": "Sea skaneerimise intervall cron formaadis. Rohkema info jaoks vaata nt. <link>Crontab Guru</link>",
"cron_expression_presets": "Eelseadistatud cron avaldised",
"disable_login": "Keela sisselogimine",
"duplicate_detection_job_description": "Rakenda üksustele masinõpet, et leida sarnaseid pilte. Kasutab nutiotsingut",
"exclusion_pattern_description": "Välistamismustrid võimaldavad ignoreerida faile ja kaustu kogu skaneerimisel. See on kasulik, kui sul on kaustu, mis sisaldavad faile, mida sa ei soovi importida, nagu RAW failid.",
@@ -561,7 +569,7 @@
"edit_exclusion_pattern": "Muuda välistamismustrit",
"edit_faces": "Muuda nägusid",
"edit_import_path": "Muuda imporditeed",
"edit_import_paths": "Muud imporditeid",
"edit_import_paths": "Muuda imporditeid",
"edit_key": "Muuda võtit",
"edit_link": "Muuda linki",
"edit_location": "Muuda asukohta",
@@ -1116,6 +1124,7 @@
"server_online": "Server ühendatud",
"server_stats": "Serveri statistika",
"server_version": "Serveri versioon",
"set": "Määra",
"set_as_album_cover": "Sea albumi kaanepildiks",
"set_as_profile_picture": "Sea profiilipildiks",
"set_date_of_birth": "Määra sünnikuupäev",

View File

@@ -17,7 +17,7 @@
"add_import_path": "Lisää tuontipolku",
"add_location": "Lisää sijainti",
"add_more_users": "Lisää käyttäjiä",
"add_partner": "Lisää kaveri",
"add_partner": "Lisää kumppani",
"add_path": "Lisää polku",
"add_photos": "Lisää kuvia",
"add_to": "Lisää...",
@@ -47,10 +47,10 @@
"disable_login": "Poista kirjautuminen käytöstä",
"disabled": "Ei käytössä",
"duplicate_detection_job_description": "Tunnista samankaltaiset kuvat käyttäen koneoppimista. Tukeutuu Smart Search:iin",
"exclusion_pattern_description": "Poissulkevat määritteet mahdollistavat tiettyjen tiedostojen ja kansioiden jättämisen pois kirjastoasi skannatessa. Tästä on hyötyä jos kansiot sisältävät tiedostoja mitä et halua tuoda, kuten RAW-tiedostot.",
"exclusion_pattern_description": "Poissulkemismallit mahdollistavat tiettyjen tiedostojen ja kansioiden jättämisen pois kirjastoasi skannatessa. Tästä on hyötyä jos kansiot sisältävät tiedostoja mitä et halua tuoda, kuten RAW-tiedostot.",
"external_library_created_at": "Ulkoinen kirjasto (luotu {date})",
"external_library_management": "Ulkoisen kirjaston hallinta",
"face_detection": "Kasvojen haitseminen",
"face_detection": "Kasvojen havaitseminen",
"face_detection_description": "Tunnista sisällön kasvoja käyttäen koneoppimista. Videoiden osalta vain pikkukuva tunnistetaan. \"Päivitä\" (uudelleen)prosessoi koko sisällön.\"Nollaa\" lisäksi puhdistaa kaiken kasvo-datan. \"Puuttuvat\" prosessoi sisällön, jota ei vielä ole käyty läpi. Havaitut kasvot ryhmitellään jo tunnistettujen kanssa, tai lisätään uusina henkilöinä.",
"facial_recognition_job_description": "Ryhmitä havaitut kasvot henkilöihin. Tämä vaihe suoritetaan, kun kasvot on ensin havaittu. \"Nollaus\" (uudelleen-)ryhmittelee kaikki kasvot. \"Puuttuvat\" vain ne, joille ei ole määritetty henkilöä.",
"failed_job_command": "Komento {command} epäonnistui työlle {job}",
@@ -67,20 +67,20 @@
"image_preview_quality_description": "Esikatselulaatu 1-100. Korkeampi arvo on parempi, mutta tuottaa suurempia tiedostoja ja voi heikentää sovelluksen reagointikykyä. Matalan arvon asettaminen voi vaikuttaa koneoppimisen laatuun.",
"image_preview_resolution": "Esikatselun resoluutio",
"image_preview_resolution_description": "Käytetään kun katsellaan yksittäisiä kuvia, tai koneoppimiseen. Suurempi resoluutio voi säilyttää paremmin yksityiskohtia. Tosin koodaus kestää kauemmin, tiedostokoko kasvaa, ja se saattaa hidastaa sovelluksen responsiivisuutta.",
"image_preview_title": "Esikatselu asetukset",
"image_preview_title": "Esikatselun asetukset",
"image_quality": "Laatu",
"image_quality_description": "Kuvan laatu välillä 1-100. Suurempi arvo on paremman laatuinen, mutta tuottaa kookkaampia tiedostoja. Tämä asetus vaikuttaa esikatselu- ja pikkukuviin.",
"image_resolution": "Resoluutio",
"image_resolution_description": "Korkeammat resoluutiot voivat säilyttää enemmän yksityiskohtia, mutta niiden koodaus kestää kauemmin, tiedostokoot ovat suurempia ja ne voivat heikentää sovelluksen reagointikykyä.",
"image_settings": "Kuva-asetukset",
"image_settings_description": "Hallitse luotujen kuvien laatua ja resolutiota",
"image_settings_description": "Hallitse luotujen kuvien laatua ja resoluutiota",
"image_thumbnail_description": "Pieni pikkukuva, josta metatiedot on poistettu, käytetään valokuvaryhmien katseluun, kuten pääaikajanalla",
"image_thumbnail_format": "Pikkukuvien muoto",
"image_thumbnail_quality_description": "Pikkukuvan laatu 1-100. Korkeampi arvo on parempi, mutta tuottaa suurempia tiedostoja ja voi heikentää sovelluksen reagointikykyä.",
"image_thumbnail_resolution": "Pikkukuvien resoluutio",
"image_thumbnail_resolution_description": "Käytetään katsottaessa useita kuvia kerralla (aikajana, albuminäkymä, jne.) Korkeampi resoluutio antaa enemmän yksityiskohtia, mutta niiden luonti kestää kauemmin, tiedostokoot ovat isompia ja voivat heikentää sovelluksen responsiivisuutta.",
"image_thumbnail_title": "Pikkukuva-asetukset",
"job_concurrency": "{job} yhtäaikaisuus",
"job_concurrency": "Tehtävän \"{job}\" samanaikaisuus",
"job_created": "Tehtävä luotu",
"job_not_concurrency_safe": "Tätä tehtävää ei ole turvallista ajaa yhtäaikaisesti.",
"job_settings": "Tehtävän asetukset",
@@ -111,7 +111,7 @@
"machine_learning_duplicate_detection": "Kaksoiskappaleiden tunnistus",
"machine_learning_duplicate_detection_enabled": "Ota käyttöön kaksoiskappaleiden tunnistus",
"machine_learning_duplicate_detection_enabled_description": "Jos ei käytössä, täsmälleen samojen aineistojen kaksoiskappaleet tullaan silti poistamaan.",
"machine_learning_duplicate_detection_setting_description": "Etsi todennäköisiä kaksoiskappaleita CLIP upotuksien avulla",
"machine_learning_duplicate_detection_setting_description": "Etsi todennäköisiä kaksoiskappaleita CLIP-upotuksien avulla",
"machine_learning_enabled": "Ota käyttöön koneoppiminen",
"machine_learning_enabled_description": "Jos poistettu käytöstä, kaikki koneoppimistoiminnot ovat pois käytöstä riippumatta alla olevista asetuksista.",
"machine_learning_facial_recognition": "Kasvojen tunnistus",
@@ -131,7 +131,7 @@
"machine_learning_settings": "Koneoppimisen asetukset",
"machine_learning_settings_description": "Koneoppimisen ominaisuudet ja asetukset",
"machine_learning_smart_search": "Älykäs etsintä",
"machine_learning_smart_search_description": "Etsi kuvia merkityksellisemmin käyttäen CLIP upotuksia",
"machine_learning_smart_search_description": "Etsi kuvia merkityksellisemmin käyttäen CLIP-upotuksia",
"machine_learning_smart_search_enabled": "Ota käyttöön älykäs haku",
"machine_learning_smart_search_enabled_description": "Jos ei käytössä, kuvia ei koodata älykkäälle etsinnälle.",
"machine_learning_url_description": "Koneoppimispalvelimen URL",
@@ -139,17 +139,17 @@
"manage_log_settings": "Hallitse lokien asetuksia",
"map_dark_style": "Tumma teema",
"map_enable_description": "Ota käyttöön karttatoiminnot",
"map_gps_settings": "Kartta & GPS- asetukset",
"map_gps_settings_description": "Hallitse Kartan & GPS (Käänteinen Geokoodaus) Asetuksia",
"map_implications": "Kartta -ominaisuus käyttää ulkoista karttapalvelua",
"map_gps_settings": "Kartta- ja GPS-asetukset",
"map_gps_settings_description": "Hallitse kartan ja GPS:n (käänteisen geokoodauksen) asetuksia",
"map_implications": "Karttaominaisuus käyttää ulkoista karttapalvelua (tiles.immich.cloud)",
"map_light_style": "Vaalea teema",
"map_manage_reverse_geocoding_settings": "Hallitse <link>käänteisen geokoodauksen</link> asetuksia",
"map_reverse_geocoding": "Käänteinen Geokoodaus",
"map_reverse_geocoding_enable_description": "Ota käyttöön osoitteiden poiminta karttakoordinaateista",
"map_reverse_geocoding_settings": "Käänteisen Geokoodauksen asetukset",
"map_reverse_geocoding_settings": "Käänteisen geokoodauksen asetukset",
"map_settings": "Kartta",
"map_settings_description": "Hallitse kartan asetuksia",
"map_style_description": "style.json -karttateeman URL",
"map_style_description": "style.json-karttateeman URL",
"metadata_extraction_job": "Kerää metadata",
"metadata_extraction_job_description": "Poimi metatiedot aineistoista, kuten GPS, kasvot ja resoluutio",
"metadata_faces_import_setting": "Ota käyttöön kasvojen tuonti",
@@ -164,10 +164,10 @@
"note_cannot_be_changed_later": "Huom: Tätä ei voi enää myöhemmin vaihtaa!",
"note_unlimited_quota": "Huom: Määritä 0 rajoittamattomaksi kiintiöksi",
"notification_email_from_address": "Lähettäjän osoite",
"notification_email_from_address_description": "Lähettäjän sähköpostiosoite. Esimerkiksi \"Immich Kuvapalvelin <noreply@example.com>\"",
"notification_email_from_address_description": "Lähettäjän sähköpostiosoite. Esimerkiksi \"Immich-kuvapalvelin <noreply@example.com>\"",
"notification_email_host_description": "Sähköpostipalvelin (esim. smtp.immich.app)",
"notification_email_ignore_certificate_errors": "Älä huomioi sertifikaattivirheitä",
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS sertifikaattien validointivirheitä (ei suositeltu)",
"notification_email_ignore_certificate_errors": "Älä huomioi varmennevirheitä",
"notification_email_ignore_certificate_errors_description": "Älä huomioi TLS-varmenteiden validointivirheitä (ei suositeltu)",
"notification_email_password_description": "Sähköpostipalvelimen salasana",
"notification_email_port_description": "Sähköpostipalvelimen portti (esim. 25, 465, tai 587)",
"notification_email_sent_test_email_button": "Lähetä testaussähköposti ja tallenna",
@@ -180,13 +180,13 @@
"notification_settings": "Ilmoitusasetukset",
"notification_settings_description": "Hallitse ilmoitusasetuksia, myös sähköpostin",
"oauth_auto_launch": "Automaattinen käynnistys",
"oauth_auto_launch_description": "Aloita OAuth kirjautuminen heti kun saavutaan kirjautumissivulle",
"oauth_auto_launch_description": "Aloita OAuth-kirjautumisvuo heti kun saavutaan kirjautumissivulle",
"oauth_auto_register": "Automaattinen rekisteröinti",
"oauth_auto_register_description": "Rekisteröi uudet OAuth:lla kirjautuvat käyttäjät automaattisesti",
"oauth_button_text": "Painikkeen teksti",
"oauth_client_id": "Client ID",
"oauth_client_secret": "Client Secret",
"oauth_enable_description": "Kirjaudu käyttäen OAuth:ia",
"oauth_enable_description": "Kirjaudu käyttäen OAuthia",
"oauth_issuer_url": "Toimitsijan URL",
"oauth_mobile_redirect_uri": "Mobiilin uudellenohjaus-URI",
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
@@ -195,7 +195,7 @@
"oauth_profile_signing_algorithm_description": "Algoritmi, jota käytetään käyttäjäprofiilin allekirjoittamiseen.",
"oauth_scope": "Skooppi (Scope)",
"oauth_settings": "OAuth",
"oauth_settings_description": "Hallitse OAuth kirjautumisen asetuksia",
"oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia",
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
"oauth_signing_algorithm": "Allekirjoitusalgoritmi",
"oauth_storage_label_claim": "Tallennustilan nimikkeen valtuutusväittämä (claim)",
@@ -241,7 +241,7 @@
"storage_template_date_time_sample": "Esimerkki päivämäärä {date}",
"storage_template_enable_description": "Ota käyttöön tallennustilan mallit",
"storage_template_hash_verification_enabled": "Tarkistussumman varmennus käytössä",
"storage_template_hash_verification_enabled_description": "Ottaa käyttöön varmistussummien laskennan. Älä poista käytöstä jollet ole aivan varma seurauksista",
"storage_template_hash_verification_enabled_description": "Ottaa käyttöön tarkistussummien laskennan. Älä poista käytöstä, ellet ole aivan varma seurauksista",
"storage_template_migration": "Tallennustilan mallien migraatio",
"storage_template_migration_description": "Käytä nykyistä <link>{template}a</link> aikaisemmin lähetettyihin kohteisiin",
"storage_template_migration_info": "Malli vaikuttaa vain uusiin kohteisiin. Käyttääksesi mallia jo olemassa oleviin kohteisiin, aja <link>{job}</link>.",
@@ -255,7 +255,7 @@
"system_settings": "Järjestelmäasetukset",
"tag_cleanup_job": "Merkintäpuhdistus",
"theme_custom_css_settings": "Mukautettu CSS",
"theme_custom_css_settings_description": "Kustomoi Immichin ulkoasua Cascading Style Sheets:llä.",
"theme_custom_css_settings_description": "Mukauta Immichin ulkoasua CSS:llä.",
"theme_settings": "Teeman asetukset",
"theme_settings_description": "Kustomoi Immichin web-käyttöliittymää",
"these_files_matched_by_checksum": "Näillä tiedostoilla on yhteinen tarkistussumma",
@@ -278,7 +278,7 @@
"transcoding_audio_codec": "Äänikoodekki",
"transcoding_audio_codec_description": "Opus on paras laadultaan, mutta ei välttämättä ole yhteensopiva vanhempien laitteiden tai sovellusten kanssa.",
"transcoding_bitrate_description": "Videot, jotka ylittävät enimmäisbittinopeuden tai eivät ole hyväksytyssä muodossa",
"transcoding_codecs_learn_more": "Oppiaksesi lisää tässä käytetystä terminologiasta, tutustu FFmpeg- dokumentaatioon <h264-link>H.264 koodaaja</h264-link>, <hevc-link>HEVC koodaaja</hevc-link> sekä <vp9-link>VP9 koodaaja</vp9-link>.",
"transcoding_codecs_learn_more": "Oppiaksesi lisää käytetystä terminologiasta, tutustu FFmpeg-dokumentaatioon: <h264-link>H.264-koodaaja</h264-link>, <hevc-link>HEVC-koodaaja</hevc-link> ja <vp9-link>VP9-koodaaja</vp9-link>.",
"transcoding_constant_quality_mode": "Tasaisen laadun tyyppi",
"transcoding_constant_quality_mode_description": "ICQ on parempi kuin CQP, mutta jotkut laitteistokiihdyttimet eivät tue sitä. Tätä asetusta käytetään oletuksena laatuun pohjautuvissa muunnoksissa, paitsi NVENC mikä ei tue ICQ:ta.",
"transcoding_constant_rate_factor": "Vakionopeustekijä",
@@ -323,7 +323,7 @@
"transcoding_video_codec_description": "VP9 on tehokkain ja web-yhteensopiva, mutta muuntaminen kestää kauemmin. HEVC suoriutuu yhtäläisesti, mutta ei ole ihan yhtä yhteensopiva. H.264 on hyvin yhteensopiva ja nopea muuntaa, mutta tuottaa paljon suurempia tiedostoja. AV1 on kaikkein tehokkain koodekki, mutta vanhemmat laitteet eivät sitä tue.",
"trash_enabled_description": "Ota käyttöön roskakori",
"trash_number_of_days": "Päivien lukumäärä",
"trash_number_of_days_description": "Montako päivää aineistoja pidetään roskakorissa ennen pysyvää poistamista",
"trash_number_of_days_description": "Kuinka monta päivää aineistoja pidetään roskakorissa ennen pysyvää poistamista",
"trash_settings": "Roskakorin asetukset",
"trash_settings_description": "Hallitse roskakoriasetuksia",
"untracked_files": "Tiedostot joita ei seurata",
@@ -331,7 +331,7 @@
"user_cleanup_job": "Käyttäjien puhdistus",
"user_delete_delay": "Käyttäjän <b>{user}</b> tili ja aineistot aikataulutetaan poistettavaksi ajan kuluttua: {delay, plural, one {# day} other {# days}}.",
"user_delete_delay_settings": "Poiston viive",
"user_delete_delay_settings_description": "Montako päivää poistamisen jälkeen käyttäjä ja hänen aineistonsa poistetaan pysyvästi. Joka keskiyö käydään läpi poistetuiksi merkityt käyttäjät. Tämä muutos astuu voimaan seuraavalla ajokerralla.",
"user_delete_delay_settings_description": "Kuinka monta päivää poistamisen jälkeen käyttäjä ja hänen aineistonsa poistetaan pysyvästi. Joka keskiyö käydään läpi poistettavaksi merkityt käyttäjät. Tämä muutos astuu voimaan seuraavalla ajokerralla.",
"user_delete_immediately": "<b>{user}</b>:n tili ja sen kohteet on ajastettu poistettavaksi <b>heti</b>.",
"user_delete_immediately_checkbox": "Aseta tili ja sen kohteet jonoon välitöntä poistoa varten",
"user_management": "Käyttäjien hallinta",
@@ -343,7 +343,7 @@
"user_settings_description": "Hallitse käyttäjäasetuksia",
"user_successfully_removed": "Käyttäjä {email} on poistettu.",
"version_check_enabled_description": "Ota käyttöön versiotarkastus",
"version_check_implications": "Versiontarkistus vaatii säännöllisen yhteyden github.com:iin",
"version_check_implications": "Versiotarkistus vaatii säännöllisen yhteyden github.comiin",
"version_check_settings": "Versiotarkistus",
"version_check_settings_description": "Ota käyttöön ilmoitukset, kun uusi versio on saatavilla",
"video_conversion_job": "Transkoodaa videot",
@@ -424,7 +424,7 @@
"assets_restored_count": "{count, plural, one {# media} other {# mediaa}} palautettu",
"assets_trashed_count": "{count, plural, one {# media} other {# mediaa}} siirretty roskakoriin",
"assets_were_part_of_album_count": "{count, plural, one {Media oli} other {Mediat olivat}} jo albumissa",
"authorized_devices": "Auktorisoidut laitteet",
"authorized_devices": "Valtuutetut laitteet",
"back": "Takaisin",
"back_close_deselect": "Palaa, sulje tai poista valinnat",
"backward": "Taaksepäin",
@@ -507,7 +507,7 @@
"create_new_person_hint": "Määritä valitut mediat uudelle henkilölle",
"create_new_user": "Luo uusi käyttäjä",
"create_tag": "Luo tunniste",
"create_tag_description": "Luo uusi tunniste. Sisäkkäisiä tunnisteita varten, syötä tunnisteen täydellinen polku kauttaviiva mukaanluettuna.",
"create_tag_description": "Luo uusi tunniste. Sisäkkäisiä tunnisteita varten syötä tunnisteen täydellinen polku kauttaviivat mukaan luettuna.",
"create_user": "Luo käyttäjä",
"created": "Luotu",
"current_device": "Nykyinen laite",
@@ -532,7 +532,7 @@
"delete_link": "Poista linkki",
"delete_shared_link": "Poista jaettu linkki",
"delete_tag": "Poista tunniste",
"delete_tag_confirmation_prompt": "Haluatko varmasti poistaa {tagName}-tunnisteen?",
"delete_tag_confirmation_prompt": "Haluatko varmasti poistaa tunnisteen {tagName}?",
"delete_user": "Poista käyttäjä",
"deleted_shared_link": "Jaettu linkki poistettu",
"deletes_missing_assets": "Poistaa levyltä puuttuvat resurssit",
@@ -644,7 +644,7 @@
"unable_to_add_album_users": "Käyttäjiä ei voi lisätä albumiin",
"unable_to_add_assets_to_shared_link": "Medioiden lisääminen jaettuun linkkiin epäonnistui",
"unable_to_add_comment": "Kommentin lisääminen epäonnistui",
"unable_to_add_exclusion_pattern": "Ei voida lisätä poissulkuohjetta",
"unable_to_add_exclusion_pattern": "Ei voida lisätä poissulkemismallia",
"unable_to_add_import_path": "Tuontipolkua ei voitu lisätä",
"unable_to_add_partners": "Kumppaneita ei voitu lisätä",
"unable_to_add_remove_archive": "Ei voida {archived, select, true {poistaa kohdetta arkistosta} other {lisätä kohdetta arkistoon}}",
@@ -669,12 +669,12 @@
"unable_to_delete_album": "Albumin poistaminen epäonnistui",
"unable_to_delete_asset": "Kohteen poistaminen epäonnistui",
"unable_to_delete_assets": "Virhe kohteen poistamisessa",
"unable_to_delete_exclusion_pattern": "Ei voida poistaa poissulkuohjetta",
"unable_to_delete_exclusion_pattern": "Ei voida poistaa poissulkemismallia",
"unable_to_delete_import_path": "Tuontipolkua ei voitu poistaa",
"unable_to_delete_shared_link": "Jaetun linkin poistaminen epäonnistui",
"unable_to_delete_user": "Käyttäjän poistaminen epäonnistui",
"unable_to_download_files": "Tiedostojen lataaminen epäonnistui",
"unable_to_edit_exclusion_pattern": "Ei voida muokata poissulkuohjetta",
"unable_to_edit_exclusion_pattern": "Ei voida muokata poissulkemismallia",
"unable_to_edit_import_path": "Tuontipolkua ei voitu muokata",
"unable_to_empty_trash": "Roskakorin tyhjentäminen epäonnistui",
"unable_to_enter_fullscreen": "Koko ruudun tilaan siirtyminen epäonnistui",
@@ -745,7 +745,7 @@
"expired": "Voimassaolo päättynyt",
"expires_date": "Vanhenee {date}",
"explore": "Tutki",
"explorer": "Tutkija",
"explorer": "Selain",
"export": "Vie",
"export_as_json": "Vie JSON-muodossa",
"extension": "Tiedostopääte",
@@ -805,8 +805,8 @@
"image_alt_text_date_place_3_people": "{isVideo, select, true {Video} other {Kuva}} otettu {city}ssä, {country}ssä {person1}n, {person2}n ja {person3}n kanssa {date}",
"image_alt_text_date_place_4_or_more_people": "{isVideo, select, true {Video} other {Kuva}} otettu {city}ssä, {country}ssä {person1}n, {person2}n ja {additionalCount, number} muun kanssa {date}",
"img": "",
"immich_logo": "Immich Logo",
"immich_web_interface": "Immich verkkoliittymä",
"immich_logo": "Immich-logo",
"immich_web_interface": "Immich-verkkokäyttöliittymä",
"import_from_json": "Tuo JSON-tiedostosta",
"import_path": "Tuontipolku",
"in_albums": "{count, plural, one {# Albumissa} other {# albumissa}}",
@@ -873,7 +873,7 @@
"manage_your_devices": "Hallitse sisäänkirjautuneita laitteitasi",
"manage_your_oauth_connection": "Hallitse OAuth-yhteyttäsi",
"map": "Kartta",
"map_marker_for_images": "Karttamarkerointi kuville, jotka on otettu {city}ssä, {country}ssä",
"map_marker_for_images": "Karttamarkerointi kuville, jotka on otettu kaupungissa {city}, maassa {country}",
"map_marker_with_image": "Karttamarkerointi kuvalla",
"map_settings": "Kartta-asetukset",
"matches": "Osumia",
@@ -901,7 +901,7 @@
"name_or_nickname": "Nimi tai lempinimi",
"never": "ei koskaan",
"new_album": "Uusi Albumi",
"new_api_key": "Uusi API Key",
"new_api_key": "Uusi API-avain",
"new_password": "Uusi salasana",
"new_person": "Uusi henkilö",
"new_user_created": "Uusi käyttäjä lisätty",
@@ -929,7 +929,7 @@
"note_apply_storage_label_to_previously_uploaded assets": "Huom: Jotta voit soveltaa tallennustunnistetta aiemmin ladattuihin kohteisiin, suorita",
"note_unlimited_quota": "Huomio: Syötä 0 rajoittamatonta kiintiötä varten",
"notes": "Muistiinpanot",
"notification_toggle_setting_description": "Ota sähköpostilmoitukset käyttöön",
"notification_toggle_setting_description": "Ota sähköposti-ilmoitukset käyttöön",
"notifications": "Ilmoitukset",
"notifications_setting_description": "Hallitse ilmoituksia",
"oauth": "OAuth",
@@ -1041,7 +1041,7 @@
"purchase_panel_info_1": "Immichin rakentaminen vie paljon aikaa ja vaivannäköä, ja meillä on kokopäiväisiä insinöörejä työskentelemässä sen parissa, jotta voimme tehdä siitä mahdollisimman hyvän. Missiomme on, että avoimen lähdekoodin ohjelmistosta ja eettisistä liiketoimintakäytännöistä tulee kestävä tulonlähde kehittäjille, sekä luoda yksityisyyttä kunnioittava ekosysteemi, jossa on todellisia vaihtoehtoja hyväksikäyttöön perustuville pilvipalveluille.",
"purchase_panel_info_2": "Koska olemme sitoutuneet siihen, ettemme lisää maksumuuria, tämä osto ei anna sinulle mitään lisäominaisuuksia Immichissa. Luotamme kaltaisiisi käyttäjiin tukeaksemme Immichin jatkuvaa kehittämistä.",
"purchase_panel_title": "Tue projektia",
"purchase_per_server": "Per serveri",
"purchase_per_server": "Per palvelin",
"purchase_per_user": "Per käyttäjä",
"purchase_remove_product_key": "Poista Tuoteavain",
"purchase_remove_product_key_prompt": "Haluatko varmasti poistaa tuoteavaimen?",
@@ -1049,13 +1049,13 @@
"purchase_remove_server_product_key_prompt": "Haluatko varmasti poistaa palvelimen tuoteavaimen?",
"purchase_server_description_1": "Koko palvelimelle",
"purchase_server_description_2": "Tukijan tila",
"purchase_server_title": "Serveri",
"purchase_server_title": "Palvelin",
"purchase_settings_server_activated": "Palvelimen tuoteavainta hallinnoi ylläpitäjä",
"range": "",
"rating": "Tähtiarvostelu",
"rating_clear": "Tyhjennä arvostelu",
"rating_count": "{count, plural, one {# tähti} other {# tähteä}}",
"rating_description": "Näytä EXIF-arvosana tiedot-paneelissa",
"rating_description": "Näytä EXIF-arvosana lisätietopaneelissa",
"raw": "",
"reaction_options": "Reaktioasetukset",
"read_changelog": "Lue muutosloki",
@@ -1086,7 +1086,7 @@
"remove_from_favorites": "Poista suosikeista",
"remove_from_shared_link": "Poista jakolinkistä",
"remove_user": "Poista käyttäjä",
"removed_api_key": "API Key {name} poistettu",
"removed_api_key": "API-avain {name} poistettu",
"removed_from_archive": "Poistettu arkistosta",
"removed_from_favorites": "Poistettu suosikeista",
"removed_from_favorites_count": "{count, plural, other {Poistettu #}} suosikeista",
@@ -1116,7 +1116,7 @@
"role_editor": "Editori",
"role_viewer": "Toistin",
"save": "Tallenna",
"saved_api_key": "API Key tallennettu",
"saved_api_key": "API-avain tallennettu",
"saved_profile": "Profiili tallennettu",
"saved_settings": "Asetukset tallennettu",
"say_something": "Sano jotain",
@@ -1143,7 +1143,7 @@
"search_places": "Etsi paikkoja",
"search_settings": "Hakuasetukset",
"search_state": "Etsi tilaa...",
"search_tags": "Haku tageja...",
"search_tags": "Etsi tunnisteita...",
"search_timezone": "Etsi aikavyöhyke...",
"search_type": "Etsinnän tyyppi",
"search_your_photos": "Etsi kuvia",
@@ -1167,8 +1167,8 @@
"send_message": "Lähetä viesti",
"send_welcome_email": "Lähetä tervetuloviesti",
"server": "Palvelin",
"server_offline": "Serveri Offline-tilassa",
"server_online": "Palvelin on linjalla",
"server_offline": "Palvelin Offline-tilassa",
"server_online": "Palvelin Online-tilassa",
"server_stats": "Palvelimen tilastot",
"server_version": "Palvelimen versio",
"set": "Aseta",
@@ -1184,11 +1184,11 @@
"shared_by": "Jakanut",
"shared_by_user": "Käyttäjän {user} jakama",
"shared_by_you": "Sinun jakamasi",
"shared_from_partner": "{partner}n kuvia",
"shared_from_partner": "Kumppanin {partner} kuvia",
"shared_link_options": "Jaetun linkin vaihtoehdot",
"shared_links": "Jaetut linkit",
"shared_photos_and_videos_count": "{assetCount, plural, other {# jaettua kuvaa ja videota.}}",
"shared_with_partner": "Jaa {partner} kanssa",
"shared_with_partner": "Jaa kumppanin {partner} kanssa",
"sharing": "Jakaminen",
"sharing_enter_password": "Nähdäksesi sivun sinun tulee antaa salasana.",
"sharing_sidebar_description": "Näytä jakamislinkki sivupalkissa",
@@ -1220,7 +1220,7 @@
"size": "Koko",
"skip_to_content": "Siirry sisältöön",
"skip_to_folders": "Siirry kansioihin",
"skip_to_tags": "Siirry tageihin",
"skip_to_tags": "Siirry tunnisteisiin",
"slideshow": "Diaesitys",
"slideshow_settings": "Diaesityksen asetukset",
"sort_albums_by": "Järjestä albumit...",
@@ -1230,7 +1230,7 @@
"sort_oldest": "Vanhin kuva",
"sort_recent": "Tuorein kuva",
"sort_title": "Otsikko",
"source": "Lähde",
"source": "Lähdekoodi",
"stack": "Pinoa",
"stack_duplicates": "Pinoa kaksoiskappaleet",
"stack_select_one_photo": "Valitse yksi pääkuva pinolle",
@@ -1238,7 +1238,7 @@
"stacked_assets_count": "Pinottu {count, plural, one {# media} other {# mediaa}}",
"stacktrace": "Vianetsintätiedot",
"start": "Aloita",
"start_date": "Alkupäivämäärä",
"start_date": "Alkupäivä",
"state": "Maakunta/osavaltio",
"status": "Tila",
"stop_motion_photo": "Pysäytä liikkuva kuva",
@@ -1256,14 +1256,14 @@
"support_third_party_description": "Immich-asennuksesi on pakattu kolmannen osapuolen toimesta. Kohtaamasi ongelmat saattavat johtua tästä paketista, joten ilmoita niistä ensisijaisesti heille alla olevien linkkien kautta.",
"swap_merge_direction": "Käännä yhdistämissuunta",
"sync": "Synkronoi",
"tag": "Tagi",
"tag_assets": "Merkitse kohde",
"tag": "Lisää tunniste",
"tag_assets": "Lisää tunnisteita",
"tag_created": "Luotu tunniste: {tag}",
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tagiotsikoiden mukaan",
"tag_feature_description": "Selaa valokuvia ja videoita, jotka on ryhmitelty loogisten tunnisteotsikoiden mukaan",
"tag_not_found_question": "Etkö löydä tunnistetta? <link> Luo uusi tunniste </link>",
"tag_updated": "Päivitetty tunniste: {tag}",
"tagged_assets": "Tunnistettu {count, plural, one {# kohde} other {# kohdetta}}",
"tags": "Tagit",
"tags": "Tunnisteet",
"template": "Template",
"theme": "Teema",
"theme_selection": "Teeman valinta",

1
i18n/fil.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Êtes-vous sûr de vouloir désactiver toutes les méthodes de connexion? La connexion sera complètement désactivée.",
"authentication_settings_reenable": "Pour réactiver, utilisez une <link>Commande Serveur</link>.",
"background_task_job": "Tâches de fond",
"backup_database": "Sauvegarde de la base de données",
"backup_database_enable_description": "Activer la sauvegarde",
"backup_keep_last_amount": "Nombre de sauvegardes à conserver",
"backup_settings": "Paramètres de la sauvegarde",
"backup_settings_description": "Gérer les paramètres de la sauvegarde",
"check_all": "Vérifier tout",
"cleared_jobs": "Tâches supprimées pour: {job}",
"config_set_by_file": "La configuration est actuellement définie par un fichier de configuration",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Êtes-vous sûr de vouloir retraiter tous les visages? Cela effacera également les personnes déjà identifiées.",
"confirm_user_password_reset": "Êtes-vous sûr de vouloir réinitialiser le mot de passe de {user}?",
"create_job": "Créer une tâche",
"cron_expression": "Expression cron",
"cron_expression_description": "Définir l'intervalle d'analyse à l'aide d'une expression cron. Pour plus d'informations, voir <link>Crontab Guru</link>",
"cron_expression_presets": "Préréglages expression cron",
"crontab_guru": "Générateur de règles Cron",
"disable_login": "Désactiver la connexion",
"disabled": "Désactivé",

View File

@@ -433,7 +433,7 @@
"blurred_background": "רקע מטושטש",
"bugs_and_feature_requests": "באגים & בקשות לתכונות",
"build": "Build",
"build_image": "Build Image",
"build_image": "בניית Image",
"bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!",
"bulk_keep_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להשאיר {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה יפתור את כל הקבוצות הכפולות מבלי למחוק דבר.",
"bulk_trash_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להעביר לאשפה בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הגדול ביותר של כל קבוצה ויעביר לאשפה את כל שאר הכפילויות.",
@@ -1391,7 +1391,7 @@
"warning": "אזהרה",
"week": "שבוע",
"welcome": "ברוכים הבאים",
"welcome_to_immich": "ברוכים הבאים אל immich",
"welcome_to_immich": "ברוכים הבאים לimmich",
"year": "שנה",
"years_ago": "לפני {years, plural, one {שנה #} other {# שנים}}",
"yes": "כן",

View File

@@ -28,6 +28,7 @@
"added_to_favorites_count": "Dodano {count, number} u omiljeno",
"admin": {
"add_exclusion_pattern_description": "Dodajte uzorke izuzimanja. Globiranje pomoću *, ** i ? je podržano. Za ignoriranje svih datoteka u bilo kojem direktoriju pod nazivom \"Raw\", koristite \"**/Raw/**\". Da biste zanemarili sve datoteke koje završavaju na \".tif\", koristite \"**/*.tif\". Da biste zanemarili apsolutni put, koristite \"/path/to/ignore/**\".",
"asset_offline_description": "Ovo sredstvo vanjske knjižnice više nije pronađeno na disku i premješteno je u smeće. Ako je datoteka premještena unutar biblioteke, provjerite svoju vremensku traku za novo odgovarajuće sredstvo. Da biste vratili ovo sredstvo, provjerite može li Immich pristupiti donjoj stazi datoteke i skenirajte biblioteku.",
"authentication_settings": "Postavke autentikacije",
"authentication_settings_description": "Uredi lozinku, OAuth, i druge postavke autentikacije",
"authentication_settings_disable_all": "Jeste li sigurni da želite onemogućenit sve načine prijave? Prijava će biti potpuno onemogućena.",
@@ -54,12 +55,15 @@
"failed_job_command": "Naredba {command} nije uspjela za posao: {job}",
"force_delete_user_warning": "UPOZORENJE: Ovo će odmah ukloniti korisnika i sve pripadajuće podatke. Ovo se ne može poništiti i datoteke se ne mogu vratiti.",
"forcing_refresh_library_files": "Prisilno osvježavanje svih datoteka knjižnice",
"image_format": "Format",
"image_format_description": "WebP proizvodi manje datoteke od JPEG-a, ali se sporije kodira.",
"image_prefer_embedded_preview": "Preferiraj ugrađeni pregled",
"image_prefer_embedded_preview_setting_description": "Koristite ugrađene preglede u RAW fotografije kao ulaz za obradu slike kada su dostupni. To može proizvesti preciznije boje za neke slike, ali kvaliteta pregleda ovisi o kameri i slika može imati više artefakata kompresije.",
"image_prefer_wide_gamut": "Preferirajte široku gamu",
"image_prefer_wide_gamut_setting_description": "Koristite Display P3 za sličice. Ovo bolje čuva živost slika sa širokim prostorima boja, ali slike mogu izgledati drugačije na starim uređajima sa starom verzijom preglednika. sRGB slike čuvaju se kao sRGB kako bi se izbjegle promjene boja.",
"image_preview_description": "Slika srednje veličine s ogoljenim metapodacima, koristi se prilikom pregledavanja jednog sredstva i za strojno učenje",
"image_preview_format": "Format pregleda",
"image_preview_quality_description": "Kvaliteta pregleda od 1-100. Više je bolje, ali proizvodi veće datoteke i može smanjiti odziv aplikacije. Postavljanje niske vrijednosti može utjecati na kvalitetu strojnog učenja.",
"image_preview_resolution": "Razlučivost pregleda",
"image_preview_resolution_description": "Koristi se pri gledanju jedne fotografije i za strojno učenje. Veće razlučivosti mogu sačuvati više detalja, ali trebaju dulje za kodiranje, imaju veće veličine datoteka i mogu smanjiti odaziv aplikacije.",
"image_quality": "Kvaliteta",
@@ -525,6 +529,7 @@
"direction": "Smjer",
"disabled": "Onemogućeno",
"disallow_edits": "Zabrani izmjene",
"discord": "Discord",
"discover": "Otkrij",
"dismiss_all_errors": "Odbaci sve pogreške",
"dismiss_error": "Odbaci pogrešku",
@@ -533,6 +538,7 @@
"display_original_photos": "Prikaz originalnih fotografija",
"display_original_photos_setting_description": "Radije prikažite izvornu fotografiju kada gledate materijal umjesto sličica kada je izvorni materijal kompatibilan s webom. To može rezultirati sporijim brzinama prikaza fotografija.",
"do_not_show_again": "Ne prikazuj više ovu poruku",
"documentation": "Dokumentacija",
"done": "Gotovo",
"download": "Preuzmi",
"download_include_embedded_motion_videos": "Ugrađeni videozapisi",
@@ -1078,6 +1084,7 @@
"say_something": "Reci nešto",
"scan_all_libraries": "Skeniraj sve Knjižnice",
"scan_all_library_files": "Ponovno skenirajte sve datoteke Knjižnice",
"scan_library": "Skeniraj",
"scan_new_library_files": "Skeniraj nove datoteke Knjižnice",
"scan_settings": "Postavke skeniranja",
"scanning_for_album": "Skeniranje albuma...",
@@ -1098,49 +1105,56 @@
"search_places": "Traži mjesta",
"search_settings": "Postavke pretraživanja",
"search_state": "",
"search_timezone": "",
"search_timezone": "Pretraži vremenske zone",
"search_type": "",
"search_your_photos": "",
"searching_locales": "",
"second": "",
"select_album_cover": "",
"select_all": "",
"select_all": "Odaberi sve",
"select_all_duplicates": "Odaberi sve duplikate",
"select_avatar_color": "",
"select_face": "",
"select_face": "Odaberi lice",
"select_featured_photo": "",
"select_keep_all": "",
"select_library_owner": "",
"select_new_face": "",
"select_photos": "",
"select_trash_all": "",
"selected": "",
"selected": "Odabrano",
"send_message": "",
"send_welcome_email": "",
"send_welcome_email": "Pošalji email dobrodošlice",
"server": "",
"server_stats": "",
"set": "",
"server_offline": "Server izvan mreže",
"server_online": "Server na mreži",
"server_stats": "Statistike servera",
"server_version": "Verzija servera",
"set": "Postavi",
"set_as_album_cover": "",
"set_as_profile_picture": "",
"set_date_of_birth": "",
"set_profile_picture": "",
"set_as_profile_picture": "Postavi kao profilnu sliku",
"set_date_of_birth": "Postavi datum rođenja",
"set_profile_picture": "Postavi profilnu sliku",
"set_slideshow_to_fullscreen": "",
"settings": "",
"settings_saved": "",
"share": "",
"shared": "",
"shared_by": "",
"shared_by_you": "",
"shared_from_partner": "",
"settings": "Postavke",
"settings_saved": "Postavke su spremljene",
"share": "Podijeli",
"shared": "Podijeljeno",
"shared_by": "Podijelio",
"shared_by_user": "Podijelio {user}",
"shared_by_you": "Podijelili vi",
"shared_from_partner": "Fotografije od {partner}",
"shared_links": "",
"shared_with_partner": "",
"sharing": "",
"sharing_sidebar_description": "",
"show_album_options": "",
"show_and_hide_people": "",
"show_file_location": "",
"show_gallery": "",
"show_hidden_people": "",
"show_in_timeline": "",
"show_albums": "Prikaži albume",
"show_all_people": "Prikaži sve osobe",
"show_and_hide_people": "Prikaži i sakrij osobe",
"show_file_location": "Pokaži mjesto datoteke",
"show_gallery": "Prikaži galeriju",
"show_hidden_people": "Prikaži skrivene osobe",
"show_in_timeline": "Prikaži na vremenskoj crti",
"show_in_timeline_setting_description": "",
"show_keyboard_shortcuts": "",
"show_metadata": "",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Biztosan letiltod az összes bejelentkezési módot? A bejelentkezés teljesen le lesz tiltva.",
"authentication_settings_reenable": "Az újbóli engedélyezéshez használj egy<link>Szerver Parancsot</link>.",
"background_task_job": "Háttérfeladatok",
"backup_database": "Tartalék Adatbázis",
"backup_database_enable_description": "Adatbázis biztonsági mentések engedélyezése",
"backup_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma",
"backup_settings": "Biztonsági mentés beállításai",
"backup_settings_description": "Adatbázis mentési beállításainak kezelése",
"check_all": "Összes Kipiálása",
"cleared_jobs": "{job}: feladatai törölve",
"config_set_by_file": "A konfigurációt jelenleg egy konfigurációs fájl állítja be",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Biztos vagy benne, hogy újra fel szeretnéd dolgozni az összes arcot? Ez a már elnevezett személyeket is törli.",
"confirm_user_password_reset": "Biztosan vissza szeretnéd állítani {user} jelszavát?",
"create_job": "Feladat létrehozása",
"cron_expression": "Cron kifejezés",
"cron_expression_description": "A beolvasási időköz beállítása a cron formátummal. További információért lásd pl. <link>Crontab Guru</link>",
"cron_expression_presets": "Cron kifejezés előbeállítások",
"crontab_guru": "Crontab Guru",
"disable_login": "Belépés letiltása",
"disabled": "Letiltva",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Anda yakin untuk menonaktifkan semua cara login? Login akan dinonaktikan secara menyeluruh.",
"authentication_settings_reenable": "Untuk mengaktifkan ulang, gunakan <link>Perintah Server</link>.",
"background_task_job": "Tugas Latar Belakang",
"backup_database": "Basis Data Cadangan",
"backup_database_enable_description": "Aktifkan pencadangan basis data",
"backup_keep_last_amount": "Jumlah cadangan untuk disimpan",
"backup_settings": "Pengaturan Pencadangan",
"backup_settings_description": "Kelola pengaturan pencadangan basis data",
"check_all": "Periksa Semua",
"cleared_jobs": "Tugas terselesaikan untuk: {job}",
"config_set_by_file": "Konfigurasi saat ini ditetapkan oleh berkas konfigurasi",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Apakah Anda yakin ingin memproses semua wajah? Ini juga akan menghapus nama orang.",
"confirm_user_password_reset": "Apakah Anda yakin ingin mengatur ulang kata sandi {user}?",
"create_job": "Buat tugas",
"cron_expression": "Ekspresi cron",
"cron_expression_description": "Tetapkan interval pemindaian menggunakan format cron. Untuk informasi lebih lanjut, silakan merujuk misalnya ke <link>Crontab Guru</link>",
"cron_expression_presets": "Prasetel ekspresi cron",
"disable_login": "Nonaktifkan log masuk",
"duplicate_detection_job_description": "Jalankan pembelajaran mesin pada aset untuk mendeteksi gambar yang serupa. Bergantung pada Pencarian Pintar",
"exclusion_pattern_description": "Pola pengecualian memungkinkan Anda mengabaikan berkas dan folder ketika memindai pustaka Anda. Ini berguna jika Anda memiliki folder yang berisi berkas yang tidak ingin diimpor, seperti berkas RAW.",
@@ -1360,7 +1368,7 @@
"warning": "Peringatan",
"week": "Pekan",
"welcome": "Selamat datang",
"welcome_to_immich": "Selamat datang di immich",
"welcome_to_immich": "Selamat datang di Immich",
"year": "Tahun",
"years_ago": "{years, plural, one {# tahun} other {# tahun}} yang lalu",
"yes": "Ya",

View File

@@ -1390,7 +1390,7 @@
"warning": "Attenzione",
"week": "Settimana",
"welcome": "Benvenuto",
"welcome_to_immich": "Benvenuto in immich",
"welcome_to_immich": "Benvenuto in Immich",
"year": "Anno",
"years_ago": "{years, plural, one {# anno} other {# anni}} fa",
"yes": "Si",

View File

@@ -23,17 +23,22 @@
"add_to": "앨범에 추가...",
"add_to_album": "앨범에 추가",
"add_to_shared_album": "공유 앨범에 추가",
"added_to_archive": "보관함으로 이동되었습니다.",
"added_to_archive": "보관함에 추가되었습니다.",
"added_to_favorites": "즐겨찾기에 추가되었습니다.",
"added_to_favorites_count": "즐겨찾기에 항목 {count, number}개 추가됨",
"admin": {
"add_exclusion_pattern_description": "규칙에 *, ** 및 ? 를 사용할 수 있습니다. \"Raw\" 디렉터리의 모든 파일을 제외하려면 **/Raw/**를, \".tif\"로 끝나는 파일을 제외하려면 **/*.tif를 사용합니다. 절대 경로/path/to/ignore/** 와 같은 방식으로 사용하세요.",
"asset_offline_description": "외부 라이브러리 항목을 디스크에서 찾을 수 없어 휴지통으로 이동되었습니다. 라이브러리 내에서 파일이 이동된 경우 해당하는 새 항목을 타임라인에서 확인하세요. 이 항목을 복원하려면 파일 경로에 Immich가 접근할 수 있는지 확인한 후, 라이브러리 스캔을 진행하세요.",
"add_exclusion_pattern_description": "규칙에 *, ** 및 ? 를 사용할 수 있습니다. 이름이 \"Raw\" 디렉터리의 모든 파일을 제외하려면 \"**/Raw/**\"를, \".tif\"로 끝나는 모든 파일을 제외하려면 \"**/*.tif\"를 사용하고, 절대 경로의 경우 \"/path/to/ignore/**\"와 같은 방식으로 사용합니다.",
"asset_offline_description": "외부 라이브러리에 포함된 이 항목을 디스크에서 더이상 찾을 수 없어 휴지통으로 이동되었습니다. 파일이 라이브러리 내에서 이동된 경우 타임라인에서 새로 연결된 항목을 확인하세요. 이 항목을 복원하려면 아래 파일 경로에 Immich가 접근할 수 있는지 확인하고 라이브러리 스캔을 진행하세요.",
"authentication_settings": "인증 설정",
"authentication_settings_description": "비밀번호, OAuth 및 기타 인증 설정 관리",
"authentication_settings_disable_all": "로그인 기능을 모두 비활성화하시겠습니까? 로그인하지 않아도 서버에 접근할 수 있습니다.",
"authentication_settings_reenable": "다시 활성화하려면 <link>서버 커맨드</link>를 사용하세요.",
"background_task_job": "백그라운드 작업",
"backup_database": "데이터베이스 백업",
"backup_database_enable_description": "데이터베이스 백업 활성화",
"backup_keep_last_amount": "보관할 백업의 개수",
"backup_settings": "백업 설정",
"backup_settings_description": "데이터베이스 백업 설정 관리",
"check_all": "모두 확인",
"cleared_jobs": "작업 중단: {job}",
"config_set_by_file": "현재 설정은 구성 파일에 의해 관리됩니다.",
@@ -43,28 +48,31 @@
"confirm_reprocess_all_faces": "모든 얼굴을 다시 처리하시겠습니까? 이름이 지정된 인물을 포함한 모든 인물이 삭제됩니다.",
"confirm_user_password_reset": "{user}님의 비밀번호를 재설정하시겠습니까?",
"create_job": "작업 생성",
"cron_expression": "Cron 표현식",
"cron_expression_description": "Cron 형식을 사용하여 스캔 주기를 설정합니다. 자세한 내용과 예시는 <link>Crontab Guru</link>를 참조하세요.",
"cron_expression_presets": "Cron 표현식 사전 설정",
"crontab_guru": "Crontab Guru",
"disable_login": "로그인 비활성화",
"disabled": "비활성화",
"duplicate_detection_job_description": "기계 학습을 통해 유사한 이미지를 감지합니다. 스마트 검색이 활성화되어 있어야 합니다.",
"exclusion_pattern_description": "제외 규칙을 사용하 스캔 특정 파일과 폴더를 제외할 수 있습니다. 가져오고 싶지 않 파일(RAW 파일 등)이 존재하는 경우 유용합니다.",
"exclusion_pattern_description": "제외 규칙을 사용하여 라이브러리 스캔 특정 파일과 폴더를 제외할 수 있습니다. 폴더에 원하지 않 파일(RAW 파일 등)이 존재하는 경우 유용합니다.",
"external_library_created_at": "외부 라이브러리 ({date}에 생성됨)",
"external_library_management": "외부 라이브러리 관리",
"face_detection": "얼굴 감지",
"face_detection_description": "기계 학습을 통해 항목에 존재하는 얼굴을 감지합니다. 동영상의 경우 섬네일만 사용합니다. \"새로고침\"은 이미 처리된 항목을 포함한 모든 항목 다시 처리합니다. \"초기화\"는 모든 얼굴 데이터를 삭제합니다. \"누락\"은 처리되지 않은 항목을 대기열에 추가합니다. 얼굴 감지 작업이 완료된 후 얼굴 인식 작업 진행하여 얼굴을 기존 인물이나 새 인물로 그룹화합니다.",
"facial_recognition_job_description": "감지된 얼굴을 인물로 그룹화합니다. 이 작업은 얼굴 감지 작업이 완료된 후 진행됩니다. \"초기화\"는 모든 얼굴의 그룹화를 다시 진행합니다. \"누락\"은 그룹화가 완료되지 않은 얼굴을 대기열에 추가합니다.",
"face_detection_description": "기계 학습을 통해 항목에 존재하는 얼굴을 감지합니다. 동영상의 경우 섬네일만 사용합니다. \"새로고침\"은 이미 처리된 항목을 포함한 모든 항목 다시 처리합니다. \"초기화\"는 모든 얼굴 데이터를 삭제합니다. \"누락\"은 처리되지 않은 항목을 대기열에 추가합니다. 얼굴 감지 작업이 완료되면 얼굴 인식 작업 진행되어 감지된 얼굴을 기존 인물이나 새 인물로 그룹화합니다.",
"facial_recognition_job_description": "감지된 얼굴을 인물로 그룹화합니다. 이 작업은 얼굴 감지 작업이 완료된 후 진행됩니다. \"초기화\"는 모든 얼굴의 그룹화를 다시 진행합니다. \"누락\"은 그룹화되지 않은 얼굴을 대기열에 추가합니다.",
"failed_job_command": "{job} 작업에서 {command} 실패",
"force_delete_user_warning": "경고: 사용자 및 사용자가 업로드한 모든 항목이 즉시 삭제됩니다. 이 작업은 되돌릴 수 없으며 파일을 복구할 수 없습니다.",
"forcing_refresh_library_files": "모든 파일을 다시 스캔하는 중...",
"forcing_refresh_library_files": "라이브러리의 모든 파일을 다시 스캔하는 중...",
"image_format": "형식",
"image_format_description": "WebP는 JPEG보다 파일 크기가 작지만 변환에 더 많은 시간이 소요됩니다.",
"image_prefer_embedded_preview": "포함된 미리 보기 선호",
"image_prefer_embedded_preview_setting_description": "가능한 경우 이미지 처리 시 RAW 사진에 포함된 미리 보기를 사용합니다. 포함된 미리 보기는 카메라에서 생성된 것으로 카메라마다 품질이 다릅니다. 일부 이미지의 경우 더 정확한 색상이 표현될 수 있지만 반대로 더 많은 아티팩트가 있을 수도 있습니다.",
"image_prefer_wide_gamut": "넓은 색 영역 선호",
"image_prefer_wide_gamut_setting_description": "섬네일 이미지에 Display P3을 사용합니다. 많은 색상을 표현할 수 있어 더 정확한 표현이 가능하지만, 오래된 브라우저를 사용하는 경우 이미지가 다르게 보일 수 있습니다. 색상 왜곡을 방지하기 위해 sRGB 이미지는 이 설정이 적용되지 않습니다.",
"image_preview_description": "메타데이터를 제거한 중간 크기 이미지, 한장씩 볼때나 기계학습에 사용됨",
"image_preview_description": "메타데이터를 제거한 중간 크기 이미지, 단일 항목을 보는 경우 및 기계 학습에 사용됨",
"image_preview_format": "미리 보기 형식",
"image_preview_quality_description": "1부터 100 사이의 미리보기 품질. 값이 높을수록 좋지만 파일 크기가 커져 앱의 반응성이 떨어질 수 있습니다. 또한 값이 낮으면 기계 학습의 품질이 떨어질 수 있습니다.",
"image_preview_quality_description": "1부터 100 사이의 미리보기 품질. 값이 높을수록 좋지만 파일 크기가 커져 앱의 반응성이 떨어질 수 있으며, 값이 낮으면 기계 학습의 품질이 떨어질 수 있습니다.",
"image_preview_resolution": "미리 보기 해상도",
"image_preview_resolution_description": "사진을 보거나 기계 학습을 실행할 때 사용되는 사진의 해상도를 설정합니다. 높은 해상도를 선택하면 세부 묘사의 손실을 최소화할 수 있지만, 인코딩 시간과 파일 크기가 증가하여 앱의 반응 속도가 느려질 수 있습니다.",
"image_preview_title": "미리보기 설정",
@@ -102,38 +110,38 @@
"library_tasks_description": "라이브러리 구성 및 확인 작업 수행",
"library_watching_enable_description": "외부 라이브러리의 파일 변경 감시",
"library_watching_settings": "라이브러리 감시 (실험 기능)",
"library_watching_settings_description": "변경된 파일을 자동으로 감지",
"logging_enable_description": "로 활성화",
"logging_level_description": "로깅이 활성화된 경우 사용할 로그 레벨을 선택합니다.",
"logging_settings": "로",
"library_watching_settings_description": "파일 변겅을 자동으로 감지",
"logging_enable_description": "로그 기록 활성화",
"logging_level_description": "활성화된 경우 사용할 로그 레벨을 선택합니다.",
"logging_settings": "로그 설정",
"machine_learning_clip_model": "CLIP 모델",
"machine_learning_clip_model_description": "CLIP 모델의 종류는 <link>이곳</link>을 참조하세요. 한국어로 검색하려면 Multilingual CLIP 모델을 선택하세요. 변경 후 모든 항목에 대한 스마트 검색 작업을 다시 진행해야 합니다.",
"machine_learning_clip_model_description": "CLIP 모델의 종류는 <link>이곳</link>을 참조하세요. 한국어 등 다국어 검색을 사용하려면 Multilingual CLIP 모델을 선택하세요. 모델을 변경 후 모든 항목에 대한 스마트 검색 작업을 다시 진행해야 합니다.",
"machine_learning_duplicate_detection": "비슷한 항목 감지",
"machine_learning_duplicate_detection_enabled": "비슷한 항목 감지 활성화",
"machine_learning_duplicate_detection_enabled_description": "비활성화된 경우에도 완전히 일치하는 항목은 여전히 감지됩니다.",
"machine_learning_duplicate_detection_enabled_description": "비활성화된 경우에도 완전히 동일한 항목은 중복 제거됩니다.",
"machine_learning_duplicate_detection_setting_description": "CLIP 임베딩을 사용하여 비슷한 항목 찾기",
"machine_learning_enabled": "기계 학습 활성화",
"machine_learning_enabled_description": "비활성화하는 경우 기계 학습 설정 여부와 관계없이 모든 기계 학습 기능이 비활성화됩니다.",
"machine_learning_enabled_description": "비활성화 경우 아래 설정 여부와 관계없이 모든 기계 학습 기능이 비활성화됩니다.",
"machine_learning_facial_recognition": "얼굴 인식",
"machine_learning_facial_recognition_description": "이미지에서 얼굴 감지, 인식 및 그룹화",
"machine_learning_facial_recognition_model": "얼굴 인식 모델",
"machine_learning_facial_recognition_model_description": "크기에 따라 내림차순으로 나열됩니다. 크기가 큰 모델은 느리고 메모리를 많이 사용하지만 더 나은 결과를 생성합니다. 변경 후 모든 항목의 얼굴 감지 작업을 다시 진행해야 합니다.",
"machine_learning_facial_recognition_model_description": "크기에 따라 내림차순으로 나열됩니다. 크기가 큰 모델은 느리고 메모리를 많이 사용하지만 더 나은 결과를 보입니다. 모델을 변경한 이후 모든 항목의 얼굴 감지 작업을 다시 진행해야 합니다.",
"machine_learning_facial_recognition_setting": "얼굴 인식 활성화",
"machine_learning_facial_recognition_setting_description": "비활성화된 경우 이미지에서 얼굴 인식을 진행하지 않으며, 탐색 페이지에 인물 목록이 표시되지 않습니다.",
"machine_learning_max_detection_distance": "최대 감지 거리",
"machine_learning_max_detection_distance_description": "두 이미지를 유사한 이미지로 간주하는 거리의 최댓값을 0.001에서 0.1 사이로 설정합니다. 값이 높으면 민감도가 낮아져 유사한 이미지로 감지하는 비율이 높아지나, 잘못된 결과를 보일 수 있습니다.",
"machine_learning_max_recognition_distance": "최대 인식 거리",
"machine_learning_max_recognition_distance_description": "두 얼굴을 동일한 인물로 판단하는 거리의 최댓값을 0에서 2 사이로 설정합니다. 이 값을 낮추면 다른 인물을 동일한 인물로 판단하는 것을 방지할 수 있고, 값을 높이면 동일한 인물을 다른 인물로 판단하는 것을 방지할 수 있습니다. 두 인물을 병합하는 것이 하나의 인물을 둘로 나누는 것보다 쉽기에, 가능한 낮은 임계값을 사용하세요.",
"machine_learning_min_detection_score": "최소 탐지 점수",
"machine_learning_min_detection_score_description": "감지된 얼굴의 최소 신뢰 점수를 0에서 1 사이로 설정합니다. 값이 낮으면 많은 얼굴을 감지하지만 잘못된 결과를 보일 수 있습니다.",
"machine_learning_max_recognition_distance_description": "두 얼굴을 동일인으로 인식하는 거리의 최댓값을 0에서 2 사이로 설정합니다. 이 값을 낮추면 다른 인물을 동일인으로 인식하는 것을 방지할 수 있고, 값을 높이면 동일을 다른 인물로 인식하는 것을 방지할 수 있습니다. 두 인물을 병합하는 것이 인물을 두 명으로 분리하는 것보다 쉬우므로, 가능한 낮은 임계값을 사용하세요.",
"machine_learning_min_detection_score": "최소 신뢰도 점수",
"machine_learning_min_detection_score_description": "감지된 얼굴의 최소 신뢰 점수를 0에서 1 사이로 설정합니다. 값이 낮으면 많은 얼굴을 감지하지만 잘못된 결과를 보일 수 있습니다.",
"machine_learning_min_recognized_faces": "최소 인식 얼굴",
"machine_learning_min_recognized_faces_description": "얼굴을 인식하여 인물을 생성하기 위한 최소 인식 얼굴 수 설정합니다. 값이 높으면 얼굴 인식이 정확해지지만, 감지된 얼굴이 인물로 그룹화되지 않을 가능성이 증가합니다.",
"machine_learning_min_recognized_faces_description": "인물을 생성하기 위 인식 얼굴 수의 최솟값을 설정합니다. 값이 높으면 얼굴 인식이 정확해지지만 감지된 얼굴이 인물에 할당되지 않을 가능성이 증가합니다.",
"machine_learning_settings": "기계 학습 설정",
"machine_learning_settings_description": "기계 학습 기능 및 설정 관리",
"machine_learning_smart_search": "스마트 검색",
"machine_learning_smart_search_description": "CLIP 임베딩 사용하여 이미지 자연어 검색 지원",
"machine_learning_smart_search_description": "CLIP 임베딩으로 자연어를 사용하여 이미지 검색",
"machine_learning_smart_search_enabled": "스마트 검색 활성화",
"machine_learning_smart_search_enabled_description": "비활성화 스마트 검색을 위한 이미지 처리를 진행하지 않습니다.",
"machine_learning_smart_search_enabled_description": "비활성화된 경우 스마트 검색을 위한 이미지 처리를 진행하지 않습니다.",
"machine_learning_url_description": "기계 학습 서버 URL",
"manage_concurrency": "동시성 관리",
"manage_log_settings": "로그 설정 관리",
@@ -141,7 +149,7 @@
"map_enable_description": "지도 기능 활성화",
"map_gps_settings": "지도 및 GPS 설정",
"map_gps_settings_description": "지도 및 GPS (역지오코딩) 설정 관리",
"map_implications": "지도 기능은 외부 타일 서비스(tiles.immich.clou를 사용합니다.",
"map_implications": "지도 기능은 외부 타일 서비스(tiles.immich.cloud)에 의존합니다.",
"map_light_style": "라이트 스타일",
"map_manage_reverse_geocoding_settings": "<link>역지오코딩</link> 설정 관리",
"map_reverse_geocoding": "역지오코딩",
@@ -162,7 +170,7 @@
"no_pattern_added": "추가된 규칙 없음",
"note_apply_storage_label_previous_assets": "참고: 이전에 업로드한 항목에도 스토리지 레이블을 적용하려면 다음을 실행합니다,",
"note_cannot_be_changed_later": "주의: 추후 변경할 수 없습니다!",
"note_unlimited_quota": "참고: 할당량을 설정하지 않으려면 0을 입력하세요.",
"note_unlimited_quota": "참고: 무제한 할당량의 경우 0을 입력하세요.",
"notification_email_from_address": "보낸 사람 이메일",
"notification_email_from_address_description": "보낸 사람의 이메일 주소, 예: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "이메일 서버의 호스트 (예: smtp.immich.app)",
@@ -190,7 +198,7 @@
"oauth_issuer_url": "발급자 URL",
"oauth_mobile_redirect_uri": "모바일 리다이렉트 URI",
"oauth_mobile_redirect_uri_override": "모바일 리다이렉트 URI 재정의",
"oauth_mobile_redirect_uri_override_description": "OAuth 공급자가 '{callback}' 과 같은 모바일 URI를 제공하지 않는 경우 활성화하세요.",
"oauth_mobile_redirect_uri_override_description": "OAuth 공급자가 '{callback}'과 같은 모바일 URI를 제공하지 않는 경우 활성화하세요.",
"oauth_profile_signing_algorithm": "사용자 정보 서명 알고리즘",
"oauth_profile_signing_algorithm_description": "사용자 정보 서명에 사용되는 알고리즘을 선택합니다.",
"oauth_scope": "스코프",
@@ -203,7 +211,7 @@
"oauth_storage_quota_claim": "스토리지 할당량 선택",
"oauth_storage_quota_claim_description": "스토리지 할당량을 사용자가 입력한 값으로 자동 설정합니다.",
"oauth_storage_quota_default": "스토리지 할당량 기본값 (GiB)",
"oauth_storage_quota_default_description": "입력하지 않은 경우 사용할 GiB 단위의 기본 할당량 (할당량을 설정하지 않으려면 0 입력)",
"oauth_storage_quota_default_description": "입력하지 않은 경우 사용할 GiB 단위의 기본 할당량 (무제한 할당량의 경우 0 입력)",
"offline_paths": "누락된 파일",
"offline_paths_description": "외부 라이브러리의 항목이 아닌 파일을 수동으로 삭제한 경우 발생할 수 있습니다.",
"password_enable_description": "이메일과 비밀번호로 로그인",
@@ -213,11 +221,11 @@
"person_cleanup_job": "인물 정리",
"quota_size_gib": "할당량 (GiB)",
"refreshing_all_libraries": "모든 라이브러리 다시 스캔 중...",
"registration": "관리자 가입",
"registration_description": "첫 번째 사용자이기 때문에 관리자로 지정되었습니다. 관리 작업 및 사용자 생성이 가능합니다.",
"registration": "관리자 계정 생성",
"registration_description": "첫 번째로 생성되는 사용자는 관리자 권한을 부여받으며, 관리 및 사용자 생성이 가능합니다.",
"removing_deleted_files": "누락된 파일을 제거하는 중...",
"repair_all": "모두 수리",
"repair_matched_items": "동일 항목 {count, plural, one {#개} other {#개}}를 확인했습니다.",
"repair_matched_items": "동일 항목 {count, plural, one {#개} other {#개}}를 확인했습니다.",
"repaired_items": "항목 {count, plural, one {#개} other {#개}}를 수리했습니다.",
"require_password_change_on_login": "첫 로그인 시 비밀번호 변경 요구",
"reset_settings_to_default": "설정을 기본값으로 복원",
@@ -232,10 +240,10 @@
"server_settings": "서버 설정",
"server_settings_description": "서버 설정 관리",
"server_welcome_message": "환영 메시지",
"server_welcome_message_description": "로그인 페이지에 표시되는 메시지를 설정합니다.",
"server_welcome_message_description": "로그인 페이지에 표시되는 메시지니다.",
"sidecar_job": "사이드카 메타데이터",
"sidecar_job_description": "파일 시스템에서 사이드카 메타데이터 파일 탐색 및 동기화",
"slideshow_duration_description": " 사진 표시 초 단위의 시간",
"slideshow_duration_description": "개별 사진 표시되는 초 단위의 시간",
"smart_search_job_description": "기계 학습을 진행하여 스마트 검색 기능 지원",
"storage_template_date_time_description": "항목이 생성된 날짜의 타임스탬프를 날짜 및 시간 정보로 사용합니다.",
"storage_template_date_time_sample": "시간 형식 예: {date}",
@@ -258,7 +266,7 @@
"theme_custom_css_settings_description": "Immich에 적용할 사용자 정의 CSS(Cascading Style Sheets) 설정",
"theme_settings": "테마 설정",
"theme_settings_description": "Immich 웹 인터페이스 사용자 정의",
"these_files_matched_by_checksum": "동일한 체크섬을 가진 파일 목록입니다.",
"these_files_matched_by_checksum": "체크섬이 동일한 파일 목록입니다.",
"thumbnail_generation_job": "섬네일 생성",
"thumbnail_generation_job_description": "각 항목에 대한 큰 섬네일, 작은 섬네일, 흐린 섬네일 및 인물 섬네일 생성",
"transcode_policy_description": "",
@@ -278,7 +286,7 @@
"transcoding_audio_codec": "오디오 코덱",
"transcoding_audio_codec_description": "Opus는 가장 좋은 품질의 옵션이지만 기기 및 소프트웨어가 오래된 경우 호환되지 않을 수 있습니다.",
"transcoding_bitrate_description": "최대 비트레이트를 초과하는 동영상 또는 허용되지 않는 형식의 동영상",
"transcoding_codecs_learn_more": "이곳에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 <h264-link>H.264 코덱</h264-link>, <hevc-link>HEVC 코덱</hevc-link> 및 <vp9-link>VP9 코덱</vp9-link>을 참조하세요.",
"transcoding_codecs_learn_more": "여기에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 <h264-link>H.264 코덱</h264-link>, <hevc-link>HEVC 코덱</hevc-link> 및 <vp9-link>VP9 코덱</vp9-link> 항목을 참조하세요.",
"transcoding_constant_quality_mode": "Constant quality mode",
"transcoding_constant_quality_mode_description": "ICQ는 CQP보다 나은 성능을 보이나 일부 기기의 하드웨어 가속에서 지원되지 않을 수 있습니다. 이 옵션을 설정하면 품질 기반 인코딩 시 지정된 모드를 우선적으로 사용합니다. NVENC에서는 ICQ를 지원하지 않아 이 설정이 적용되지 않습니다.",
"transcoding_constant_rate_factor": "Constant rate factor (-crf)",
@@ -343,7 +351,7 @@
"user_settings_description": "사용자 설정 관리",
"user_successfully_removed": "{email}이(가) 성공적으로 제거되었습니다.",
"version_check_enabled_description": "버전 확인 활성화",
"version_check_implications": "버전 확인 기능은 주기적으로 github.com에 요청을 보니다.",
"version_check_implications": "주기적으로 github.com에 요청을 보내 최신 버전을 확인합니다.",
"version_check_settings": "버전 확인",
"version_check_settings_description": "최신 버전 알림 설정 관리",
"video_conversion_job": "동영상 트랜스코드",
@@ -358,10 +366,10 @@
"age_years": "{years, plural, other {#세}}",
"album_added": "공유 앨범 초대",
"album_added_notification_setting_description": "공유 앨범으로 초대를 받은 경우 이메일 알림 받기",
"album_cover_updated": "앨범 커버를 변경했습니다.",
"album_cover_updated": "앨범 커버 업데이트됨",
"album_delete_confirmation": "{album} 앨범을 삭제하시겠습니까?",
"album_delete_confirmation_description": "이 앨범을 공유한 경우 다른 사용자가 더 이상 앨범에 접근할 수 없습니다.",
"album_info_updated": "앨범 정보가 수정되었습니다.",
"album_info_updated": "앨범 정보 업데이트됨",
"album_leave": "앨범에서 나가시겠습니까?",
"album_leave_confirmation": "{album} 앨범에서 나가시겠습니까?",
"album_name": "앨범 이름",
@@ -371,8 +379,8 @@
"album_share_no_users": "이미 모든 사용자와 앨범을 공유 중이거나 다른 사용자가 없는 것 같습니다.",
"album_updated": "항목 추가 알림",
"album_updated_setting_description": "공유 앨범에 항목이 추가된 경우 이메일 알림 받기",
"album_user_left": "{album} 앨범에서 나왔습니다.",
"album_user_removed": "{user}님을 앨범에서 제거했습니다.",
"album_user_left": "{album} 앨범에서 나",
"album_user_removed": "{user}님을 앨범에서 제거",
"album_with_link_access": "링크가 있는 경우 누구나 이 앨범의 사진과 인물을 볼 수 있습니다.",
"albums": "앨범",
"albums_count": "앨범 {count, plural, one {{count, number}개} other {{count, number}개}}",
@@ -386,7 +394,7 @@
"allow_public_user_to_upload": "모든 사용자의 업로드 허용",
"anti_clockwise": "반시계 방향",
"api_key": "API 키",
"api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사세요.",
"api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사해주세요.",
"api_key_empty": "키 이름은 비어 있을 수 없습니다.",
"api_keys": "API 키",
"app_settings": "앱 설정",
@@ -401,9 +409,9 @@
"are_you_sure_to_do_this": "계속 진행하시겠습니까?",
"asset_added_to_album": "앨범에 추가되었습니다.",
"asset_adding_to_album": "앨범에 추가 중...",
"asset_description_updated": "설명이 변경되었습니다.",
"asset_filename_is_offline": "{filename} 항목 누락되었습니다.",
"asset_has_unassigned_faces": "항목에 알 수 없는 인물이 있습니다.",
"asset_description_updated": "항목의 설명이 업데이트되었습니다.",
"asset_filename_is_offline": "{filename} 항목 누락",
"asset_has_unassigned_faces": "항목에 할당되지 않은 얼굴이 있음",
"asset_hashing": "해시 확인 중...",
"asset_offline": "누락된 항목",
"asset_offline_description": "디스크에서 항목을 더이상 찾을 수 없습니다. 서버 관리자에게 연락하여 도움을 받으세요.",
@@ -458,7 +466,7 @@
"change_password": "비밀번호 변경",
"change_password_description": "첫 로그인이거나 비밀번호가 초기화되어 비밀번호를 설정해야 합니다. 아래에 새 비밀번호를 입력하세요.",
"change_your_password": "비밀번호 변경",
"changed_visibility_successfully": "숨김 여부가 성공적으로 변경되었습니다.",
"changed_visibility_successfully": "표시 여부가 성공적으로 변경되었습니다.",
"check_all": "모두 확인",
"check_logs": "로그 확인",
"choose_matching_people_to_merge": "병합할 인물 선택",
@@ -549,7 +557,7 @@
"display_order": "표시 순서",
"display_original_photos": "원본 이미지 표시",
"display_original_photos_setting_description": "원본 사진이 웹과 호환되는 경우 섬네일 대신 원본을 표시합니다. 사진이 표시되는 속도가 느려질 수 있습니다.",
"do_not_show_again": "다시 표시하지 않음",
"do_not_show_again": "이 메시지를 다시 표시하지 않음",
"documentation": "문서",
"done": "완료",
"download": "다운로드",
@@ -572,24 +580,24 @@
},
"edit": "편집",
"edit_album": "앨범 수정",
"edit_avatar": "프로필 편집",
"edit_avatar": "프로필 수정",
"edit_date": "날짜 변경",
"edit_date_and_time": "날짜 및 시간 변경",
"edit_exclusion_pattern": "제외 규칙 편집",
"edit_faces": "인물 변경",
"edit_import_path": "가져올 경로 편집",
"edit_import_paths": "가져올 경로 편집",
"edit_exclusion_pattern": "제외 규칙 수정",
"edit_faces": "얼굴 수정",
"edit_import_path": "가져올 경로 수정",
"edit_import_paths": "가져올 경로 수정",
"edit_key": "키 수정",
"edit_link": "링크 편집",
"edit_link": "링크 수정",
"edit_location": "위치 변경",
"edit_name": "이름 변경",
"edit_people": "인물 변경",
"edit_tag": "태그 편집",
"edit_people": "인물 수정",
"edit_tag": "태그 수정",
"edit_title": "제목 변경",
"edit_user": "사용자 수정",
"edited": "펀집되었습니다.",
"edited": "공유 링크가 수정되었습니다.",
"editor": "편집자",
"editor_close_without_save_prompt": "변경 사항이 반영되지 않습니다.",
"editor_close_without_save_prompt": "변경 사항이 저장되지 않습니다.",
"editor_close_without_save_title": "편집을 종료하시겠습니까?",
"editor_crop_tool_h2_aspect_ratios": "종횡비",
"editor_crop_tool_h2_rotation": "회전",
@@ -597,41 +605,41 @@
"empty": "",
"empty_album": "",
"empty_trash": "휴지통 비우기",
"empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 제됩니다. 이 작업은 되돌릴 수 없습니다!",
"empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 제됩니다. 이 작업은 되돌릴 수 없습니다!",
"enable": "활성화",
"enabled": "활성화됨",
"end_date": "종료일",
"error": "오류",
"error_loading_image": "사진을 불러오는 중 문제가 발생했습니다.",
"error_loading_image": "이미지 로드 오류",
"error_title": "오류 - 문제가 발생했습니다",
"errors": {
"cannot_navigate_next_asset": "다음 항목으로 이동할 수 없습니다.",
"cannot_navigate_previous_asset": "이전 항목으로 이동할 수 없습니다.",
"cant_apply_changes": "변경 사항을 적용할 수 없습니다.",
"cant_change_activity": "활동을 {enabled, select, true {비활성화} other {활성화}}할 수 없습니다.",
"cant_change_asset_favorite": "즐겨찾기 상태를 변경할 수 없습니다.",
"cant_change_asset_favorite": "즐겨찾기에 추가/제거할 수 없습니다.",
"cant_change_metadata_assets_count": "항목 {count, plural, one {#개} other {#개}}의 메타데이터를 변경할 수 없습니다.",
"cant_get_faces": "얼굴을 불러올 수 없습니다.",
"cant_get_number_of_comments": "댓글의 개수를 불러올 수 없습니다.",
"cant_search_people": "인물을 검색할 수 없습니다.",
"cant_search_places": "장소를 검색할 수 없습니다.",
"cant_get_faces": "얼굴을 불러올 수 없",
"cant_get_number_of_comments": "댓글 수를 불러올 수 없",
"cant_search_people": "인물을 검색할 수 없",
"cant_search_places": "장소를 검색할 수 없",
"cleared_jobs": "{job} 작업 중단됨",
"error_adding_assets_to_album": "앨범에 항목을 추가하문제가 발생했습니다.",
"error_adding_users_to_album": "앨범에 사용자를 추가하문제가 발생했습니다.",
"error_deleting_shared_user": "공유 사용자를 제거하문제가 발생했습니다.",
"error_downloading": "{filename} 다운로드 중 문제가 발생했습니다.",
"error_hiding_buy_button": "구매 버튼을 숨기문제가 발생했습니다.",
"error_removing_assets_from_album": "앨범에서 항목을 제거하문제가 발생했습니다. 콘솔에서 세부 정보를 확인하세요.",
"error_selecting_all_assets": "모든 항목을 선택하문제가 발생했습니다.",
"error_adding_assets_to_album": "앨범에 항목을 추가하오류가 발생했습니다.",
"error_adding_users_to_album": "앨범에 사용자를 추가하오류가 발생했습니다.",
"error_deleting_shared_user": "공유 사용자를 제거하오류가 발생했습니다.",
"error_downloading": "{filename} 다운로드 오류",
"error_hiding_buy_button": "구매 버튼을 숨기오류가 발생했습니다.",
"error_removing_assets_from_album": "앨범에서 항목을 제거하오류가 발생했습니다. 콘솔에서 세부 정보를 확인하세요.",
"error_selecting_all_assets": "모든 항목을 선택하오류가 발생했습니다.",
"exclusion_pattern_already_exists": "이 제외 규칙은 이미 존재합니다.",
"failed_job_command": "{job} 작업 {command} 실패",
"failed_to_create_album": "앨범을 생성하지 못했습니다.",
"failed_to_create_shared_link": "공유 링크를 생성하지 못했습니다.",
"failed_to_edit_shared_link": "공유 링크를 편집하지 못했습니다.",
"failed_to_get_people": "인물을 불러오지 못했습니다.",
"failed_to_load_asset": "항목을 불러오지 못했습니다.",
"failed_to_load_assets": "항목을 불러오지 못했습니다.",
"failed_to_load_people": "인물을 불러오지 못했습니다.",
"failed_to_edit_shared_link": "공유 링크를 수정하지 못했습니다.",
"failed_to_get_people": "인물 로드 실패",
"failed_to_load_asset": "항목 로드 실패",
"failed_to_load_assets": "항목 로드 실패",
"failed_to_load_people": "인물 로드 실패",
"failed_to_remove_product_key": "제품 키를 제거하지 못했습니다.",
"failed_to_stack_assets": "스택을 만들지 못했습니다.",
"failed_to_unstack_assets": "스택을 해제하지 못했습니다.",
@@ -652,14 +660,14 @@
"unable_to_archive_unarchive": "{archived, select, true {보관함으로 항목을 이동할} other {보관함에서 항목을 제거할}} 수 없습니다.",
"unable_to_change_album_user_role": "사용자의 역할을 변경할 수 없습니다.",
"unable_to_change_date": "날짜를 변경할 수 없습니다.",
"unable_to_change_favorite": "즐겨찾기 상태를 변경할 수 없습니다.",
"unable_to_change_favorite": "즐겨찾기에 추가/제거할 수 없습니다.",
"unable_to_change_location": "위치를 변경할 수 없습니다.",
"unable_to_change_password": "비밀번호를 변경할 수 없습니다.",
"unable_to_change_visibility": "인물 {count, plural, one {#명} other {#명}}의 숨김 여부를 변경할 수 없습니다.",
"unable_to_change_visibility": "인물 {count, plural, one {#명} other {#명}}의 표시 여부를 변경할 수 없",
"unable_to_check_item": "",
"unable_to_check_items": "",
"unable_to_complete_oauth_login": "OAuth 로그인을 완료할 수 없습니다.",
"unable_to_connect": "연결할 수 없습니다.",
"unable_to_connect": "연결할 수 없",
"unable_to_connect_to_server": "서버에 연결할 수 없습니다.",
"unable_to_copy_to_clipboard": "클립보드에 복사할 수 없습니다. https를 통해 접속 중인지 확인하세요.",
"unable_to_create_admin_account": "관리자 계정을 생성할 수 없습니다.",
@@ -668,18 +676,18 @@
"unable_to_create_user": "사용자를 생성할 수 없습니다.",
"unable_to_delete_album": "앨범을 삭제할 수 없습니다.",
"unable_to_delete_asset": "항목을 삭제할 수 없습니다.",
"unable_to_delete_assets": "항목 삭제하는문제가 발생했습니다.",
"unable_to_delete_assets": "항목 삭제 중 오류 발생",
"unable_to_delete_exclusion_pattern": "제외 규칙을 삭제할 수 없습니다.",
"unable_to_delete_import_path": "가져 경로를 삭제할 수 없습니다.",
"unable_to_delete_import_path": "가져오기 경로를 삭제할 수 없습니다.",
"unable_to_delete_shared_link": "공유 링크를 삭제할 수 없습니다.",
"unable_to_delete_user": "사용자를 삭제할 수 없습니다.",
"unable_to_download_files": "파일을 다운로드할 수 없습니다.",
"unable_to_edit_exclusion_pattern": "제외 규칙을 편집할 수 없습니다.",
"unable_to_edit_import_path": "가져 경로를 편집할 수 없습니다.",
"unable_to_edit_exclusion_pattern": "제외 규칙을 수정할 수 없습니다.",
"unable_to_edit_import_path": "가져오기 경로를 수정할 수 없습니다.",
"unable_to_empty_trash": "휴지통을 비울 수 없습니다.",
"unable_to_enter_fullscreen": "전체 화면으로 전환할 수 없습니다.",
"unable_to_exit_fullscreen": "전체 화면을 종료할 수 없습니다.",
"unable_to_get_comments_number": "댓글의 개수를 불러올 수 없습니다.",
"unable_to_exit_fullscreen": "전체 화면에서 나갈 수 없습니다.",
"unable_to_get_comments_number": "댓글 수를 불러올 수 없습니다.",
"unable_to_get_shared_link": "공유 링크를 불러오지 못했습니다.",
"unable_to_hide_person": "인물을 숨길 수 없습니다.",
"unable_to_link_motion_video": "모션 비디오를 연결할 수 없습니다",
@@ -692,7 +700,7 @@
"unable_to_log_out_device": "기기에서 로그아웃할 수 없습니다.",
"unable_to_login_with_oauth": "OAuth로 로그인할 수 없습니다.",
"unable_to_play_video": "동영상을 재생할 수 없습니다.",
"unable_to_reassign_assets_existing_person": "항목을 {name, select, null {다른 인물에} other {#에}} 할당할 수 없습니다.",
"unable_to_reassign_assets_existing_person": "항목을 {name, select, null {다른 인물에} other {{name}에게}} 할당할 수 없습니다.",
"unable_to_reassign_assets_new_person": "항목을 새 인물에 할당할 수 없습니다.",
"unable_to_refresh_user": "사용자를 새로 고칠 수 없습니다.",
"unable_to_remove_album_users": "앨범에서 사용자를 제거할 수 없습니다.",
@@ -708,7 +716,7 @@
"unable_to_reset_password": "비밀번호를 초기화할 수 없습니다.",
"unable_to_resolve_duplicate": "비슷한 항목을 처리할 수 없습니다.",
"unable_to_restore_assets": "항목을 복원할 수 없습니다.",
"unable_to_restore_trash": "휴지통을 복원할 수 없습니다.",
"unable_to_restore_trash": "휴지통에서 항목을 복원할 수 없",
"unable_to_restore_user": "사용자 삭제를 취소할 수 없습니다.",
"unable_to_save_album": "앨범을 저장할 수 없습니다.",
"unable_to_save_api_key": "API 키를 수정할 수 없습니다.",
@@ -721,7 +729,7 @@
"unable_to_set_feature_photo": "대표 사진을 지정할 수 없습니다.",
"unable_to_set_profile_picture": "프로필 사진을 설정할 수 없습니다.",
"unable_to_submit_job": "작업을 수행할 수 없습니다.",
"unable_to_trash_asset": "휴지통으로 이동할 수 없습니다.",
"unable_to_trash_asset": "휴지통으로 항목을 이동할 수 없",
"unable_to_unlink_account": "계정 연결을 해제할 수 없습니다.",
"unable_to_unlink_motion_video": "모션 비디오 연결을 해제할 수 없습니다.",
"unable_to_update_album_cover": "앨범 커버를 변경할 수 없습니다.",
@@ -729,7 +737,7 @@
"unable_to_update_library": "라이브러리를 업데이트할 수 없습니다.",
"unable_to_update_location": "위치를 변경할 수 없습니다.",
"unable_to_update_settings": "설정을 변경할 수 없습니다.",
"unable_to_update_timeline_display_status": "타임라인 표시 설정을 변경할 수 없습니다.",
"unable_to_update_timeline_display_status": "타임라인 표시 여부를 변경할 수 없습니다.",
"unable_to_update_user": "사용자를 업데이트할 수 없습니다.",
"unable_to_upload_file": "파일을 업로드할 수 없습니다."
},
@@ -753,10 +761,10 @@
"face_unassigned": "알 수 없음",
"failed_to_get_people": "인물 불러오기 실패",
"favorite": "즐겨찾기",
"favorite_or_unfavorite_photo": "즐겨찾기 추가제거",
"favorite_or_unfavorite_photo": "즐겨찾기 추가/제거",
"favorites": "즐겨찾기",
"feature": "",
"feature_photo_updated": "대표 사진이 설정되었습니다.",
"feature_photo_updated": "대표 사진 업데이트됨",
"featurecollection": "",
"features": "기능",
"features_setting_description": "앱 기능 관리",
@@ -852,6 +860,7 @@
"license_failed_activation": "라이선스를 활성화하지 못했습니다. 이메일로 발송된 키를 정확히 입력했는지 확인하세요!",
"light": "라이트",
"like_deleted": "좋아요가 삭제되었습니다.",
"link_motion_video": "모션 비디오 링크",
"link_options": "링크 옵션",
"link_to_oauth": "OAuth에 연결",
"linked_oauth_account": "OAuth 계정이 연결되었습니다.",
@@ -869,7 +878,8 @@
"longitude": "경도",
"look": "보기",
"loop_videos": "동영상 반복",
"loop_videos_description": "상세 보기에서 동영상을 자동으로 반복 재생합니다.",
"loop_videos_description": "상세 보기에서 자동으로 동영상을 반복 재생합니다.",
"main_branch_warning": "현재 개발 버전을 사용 중입니다. 정식 버전을 사용하는 것을 강력히 권장합니다!",
"make": "제조사",
"manage_shared_links": "공유 링크 관리",
"manage_sharing_with_partners": "파트너와 공유 관리",
@@ -891,10 +901,10 @@
"menu": "메뉴",
"merge": "병합",
"merge_people": "인물 병합",
"merge_people_limit": "한 번에 최대 5개의 얼굴만 병합할 수 있습니다.",
"merge_people_limit": "한 번에 최대 5개의 얼굴만 합칠 수 있습니다.",
"merge_people_prompt": "인물들을 병합하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"merge_people_successfully": "인물을 성공적으로 병합했습니다.",
"merged_people_count": "인물 {count, plural, one {#명} other {#명}}을 병합했습니다.",
"merge_people_successfully": "인물을 성공적으로 합쳤습니다.",
"merged_people_count": "인물 {count, plural, one {#명} other {#명}}을 합쳤습니다.",
"minimize": "최소화",
"minute": "분",
"missing": "누락",
@@ -920,12 +930,12 @@
"no_albums_with_name_yet": "아직 해당하는 이름의 앨범이 없는 것 같습니다.",
"no_albums_yet": "아직 앨범이 없는 것 같습니다.",
"no_archived_assets_message": "사진과 동영상을 보관함으로 이동하여 목록에서 숨기기",
"no_assets_message": "이곳을 클릭하여 첫 이미지를 업로드하세요",
"no_assets_message": "여기를 클릭하여 첫 사진을 업로드하세요.",
"no_duplicates_found": "비슷한 항목을 찾을 수 없습니다.",
"no_exif_info_available": "EXIF 정보 없음",
"no_explore_results_message": "더 많은 사진을 업로드하여 탐색 기능을 사용하세요.",
"no_favorites_message": "즐겨찾기에 좋아하는 사진과 동영상을 추가하기",
"no_libraries_message": "외부 라이브러리를 생성하여 사진과 동영상 가져오기",
"no_libraries_message": "외부 라이브러리를 생성하여 기존 사진과 동영상을 확인하세요.",
"no_name": "이름 없음",
"no_places": "장소 없음",
"no_results": "결과가 없습니다.",
@@ -952,9 +962,9 @@
"onboarding_welcome_description": "몇 가지 일반적인 설정을 진행하겠습니다.",
"onboarding_welcome_user": "{user}님, 환영합니다",
"online": "온라인",
"only_favorites": "즐겨찾기만 표시",
"only_favorites": "즐겨찾기만",
"only_refreshes_modified_files": "변경된 파일만 다시 스캔",
"open_in_map_view": "지도 에서 기",
"open_in_map_view": "지도 보기에서 기",
"open_in_openstreetmap": "OpenStreetMap에서 열기",
"open_the_search_filters": "검색 필터 열기",
"options": "옵션",
@@ -988,7 +998,7 @@
"paused": "일시 정지됨",
"pending": "진행 중",
"people": "인물",
"people_edits_count": "인물 {count, plural, one {#명} other {#명}}을 변경했습니다.",
"people_edits_count": "인물 {count, plural, one {#명} other {#명}}을 수정했습니다.",
"people_feature_description": "사진 및 동영상을 인물 그룹별로 탐색",
"people_sidebar_description": "사이드바에 인물 링크 표시",
"perform_library_tasks": "",
@@ -1022,7 +1032,7 @@
"previous_memory": "이전 추억",
"previous_or_next_photo": "이전 또는 다음 이미지로",
"primary": "주요",
"privacy": "프라이버시",
"privacy": "개인 정보",
"profile_image_of_user": "{user}님의 프로필 이미지",
"profile_picture_set": "프로필 사진이 설정되었습니다.",
"public_album": "공개 앨범",
@@ -1040,7 +1050,7 @@
"purchase_button_select": "선택",
"purchase_failed_activation": "등록하지 못했습니다. 이메일로 전송된 키를 정확히 입력했는지 확인하세요!",
"purchase_individual_description_1": "개인 사용자용",
"purchase_individual_description_2": "서포터 배지 및 표시",
"purchase_individual_description_2": "서포터 배지",
"purchase_individual_title": "개인",
"purchase_input_suggestion": "제품 키를 보유하고 있나요? 아래에 제품 키를 입력하세요.",
"purchase_license_subtitle": "Immich를 구매하여 지속적인 개발에 도움을 주세요.",
@@ -1056,21 +1066,21 @@
"purchase_remove_server_product_key": "서버 제품 키 제거",
"purchase_remove_server_product_key_prompt": "서버 제품 키를 제거하시겠습니까?",
"purchase_server_description_1": "서버 전체에 적용",
"purchase_server_description_2": "서포터 배지 및 표시",
"purchase_server_description_2": "서포터 배지",
"purchase_server_title": "서버",
"purchase_settings_server_activated": "서버 제품 키는 관리자가 관리합니다.",
"range": "",
"rating": "등급",
"rating_clear": "등급 초기화",
"rating_count": "{count, plural, one {#점} other {#점}}",
"rating_description": "상세 정보에 EXIF 등급 정보 표시",
"rating_description": "상세 정보 패널에 EXIF 등급 태그 표시",
"raw": "",
"reaction_options": "반응 옵션",
"read_changelog": "변경 사항 보기",
"reassign": "다시 할당",
"reassigned_assets_to_existing_person": "항목 {count, plural, one {#개} other {#개}}가 {name, select, null {다른 인물에} other {{name}에}} 할당되었습니다.",
"reassigned_assets_to_new_person": "항목 {count, plural, one {#개} other {#개}}가 새 인물에 할당되었습니다.",
"reassing_hint": "선택한 항목의 인물 변경",
"reassing_hint": "기존 인물에 선택한 항목 할당",
"recent": "최근",
"recent_searches": "최근 검색",
"refresh": "새로고침",
@@ -1081,8 +1091,8 @@
"refreshed": "새로고침이 완료되었습니다.",
"refreshes_every_file": "기존 파일 및 새 파일 스캔",
"refreshing_encoded_video": "인코딩을 다시 진행하는 중...",
"refreshing_faces": "얼굴 새로고침 중",
"refreshing_metadata": "메타데이터를 갱신하는 중...",
"refreshing_faces": "얼굴 새로고침 중...",
"refreshing_metadata": "메타데이터를 새로 고치는 중...",
"regenerating_thumbnails": "섬네일을 다시 생성하는 중...",
"remove": "제거",
"remove_assets_album_confirmation": "앨범에서 항목 {count, plural, one {#개} other {#개}}를 제거하시겠습니까?",
@@ -1101,14 +1111,14 @@
"removed_tagged_assets": "항목 {count, plural, one {#개} other {#개}}에서 태그를 제거함",
"rename": "이름 바꾸기",
"repair": "수리",
"repair_no_results_message": "추적되지 않거나 누락된 파일이 이곳에 표시됩니다.",
"repair_no_results_message": "추적되지 않거나 누락된 파일이 여기에 표시됩니다.",
"replace_with_upload": "파일 바꾸기",
"repository": "리포지터리",
"require_password": "비밀번호 필요",
"require_user_to_change_password_on_first_login": "사용자가 처음 로그인할 때 비밀번호를 변경하도록 요구",
"reset": "초기화",
"reset_password": "비밀번호 재설정",
"reset_people_visibility": "인물 숨김 여부 초기화",
"reset_people_visibility": "인물 표시 여부 초기화",
"reset_settings_to_default": "",
"reset_to_default": "기본값으로 복원",
"resolve_duplicates": "비슷한 항목 확인",
@@ -1207,12 +1217,12 @@
"show_and_hide_people": "인물 숨기기",
"show_file_location": "파일 위치 표시",
"show_gallery": "갤러리 표시",
"show_hidden_people": "숨 인물 표시",
"show_hidden_people": "숨겨진 인물 표시",
"show_in_timeline": "타임라인에 표시",
"show_in_timeline_setting_description": "이 사용자의 사진 동영상을 타임라인에 표시",
"show_in_timeline_setting_description": "타임라인에 이 사용자의 사진 동영상을 표시",
"show_keyboard_shortcuts": "키보드 단축키 표시",
"show_metadata": "메타데이터 표시",
"show_or_hide_info": "정보 표시숨기기",
"show_or_hide_info": "정보 표시/숨기기",
"show_password": "비밀번호 표시",
"show_person_options": "인물 옵션 표시",
"show_progress_bar": "진행 표시줄 표시",
@@ -1222,7 +1232,7 @@
"show_supporter_badge_description": "서포터 배지 표시",
"shuffle": "셔플",
"sidebar": "사이드바",
"sidebar_display_description": " 링크를 사이드바에 표시",
"sidebar_display_description": "보기 링크를 사이드바에 표시",
"sign_out": "로그아웃",
"sign_up": "로그인",
"size": "크기",
@@ -1243,7 +1253,7 @@
"stack_duplicates": "비슷한 항목 스택",
"stack_select_one_photo": "스택의 대표 사진 선택",
"stack_selected_photos": "선택한 이미지 스택",
"stacked_assets_count": "항목 {count, plural, one {#개} other {#개}} 스택을 만들었습니다.",
"stacked_assets_count": "항목 {count, plural, one {#개} other {#개}} 스택",
"stacktrace": "스택 추적",
"start": "시작",
"start_date": "시작일",
@@ -1266,10 +1276,10 @@
"sync": "동기화",
"tag": "태그",
"tag_assets": "항목 태그",
"tag_created": "{tag} 태그가 생성되었습니다.",
"tag_created": "태그 생성됨: {tag}",
"tag_feature_description": "사진 및 동영상을 주제별 그룹화된 태그로 탐색",
"tag_not_found_question": "태그를 찾을 수 없나요? <link>새 태그를 생성하세요.</link>",
"tag_updated": "{tag} 태그를 수정했습니다.",
"tag_updated": "태그 업데이트됨: {tag}",
"tagged_assets": "항목 {count, plural, one {#개} other {#개}}에 태그를 적용함",
"tags": "태그",
"template": "템플릿",
@@ -1295,7 +1305,7 @@
"trash_all": "모두 삭제",
"trash_count": "{count, number}개 삭제",
"trash_delete_asset": "휴지통 이동/삭제",
"trash_no_results_message": "휴지통으로 이동된 항목이 이곳에 표시됩니다.",
"trash_no_results_message": "삭제된 사진과 동영상이 여기에 표시됩니다.",
"trashed_items_will_be_permanently_deleted_after": "휴지통으로 이동된 항목은 {days, plural, one {#일} other {#일}} 후 영구적으로 삭제됩니다.",
"type": "형식",
"unarchive": "보관함에서 제거",
@@ -1307,6 +1317,7 @@
"unknown_album": "",
"unknown_year": "알 수 없는 연도",
"unlimited": "무제한",
"unlink_motion_video": "모션 비디오 링크 해제",
"unlink_oauth": "OAuth 연결 해제",
"unlinked_oauth_account": "OAuth 계정 연결이 해제되었습니다.",
"unnamed_album": "이름 없는 앨범",
@@ -1323,7 +1334,7 @@
"updated_password": "비밀번호가 변경되었습니다.",
"upload": "업로드",
"upload_concurrency": "업로드 동시성",
"upload_errors": "업로드가 완료되었습니다. 항목 {count, plural, one {#개} other {#개}} 업로드하지 못했습니다. 업로드된 항목을 보려면 페이지를 새로고침하세요.",
"upload_errors": "업로드가 완료되었습니다. 항목 {count, plural, one {#개} other {#개}} 업로드하지 못했습니다. 업로드된 항목을 보려면 페이지를 새로고침하세요.",
"upload_progress": "전체 {total, number}개 중 {processed, number}개 완료, {remaining, number}개 대기 중",
"upload_skipped_duplicates": "동일한 항목 {count, plural, one {#개} other {#개}}를 건너뛰었습니다.",
"upload_status_duplicates": "중복",
@@ -1348,8 +1359,8 @@
"version": "버전",
"version_announcement_closing": "당신의 친구, Alex가",
"version_announcement_message": "안녕하세요, 새 버전의 Immich를 사용할 수 있습니다. 자세한 내용은 <link>릴리스 노트</link>를 참조하세요. WatchTower 등의 자동 업데이트 기능을 사용하는 경우 의도하지 않은 동작을 방지하기 위해 <code>docker-compose.yml</code> 및 <code>.env</code> 구성이 최신인지 확인하세요.",
"version_history": "버전 히스토리",
"version_history_item": "버전 {version}, {date} 설치",
"version_history": "버전 기록",
"version_history_item": "{date} 버전 {version} 설치",
"video": "동영상",
"video_hover_setting": "마우스 오버 재생",
"video_hover_setting_description": "마우스를 동영상 위에 올리면 재생이 시작됩니다. 비활성화된 경우에도 재생 아이콘에 마우스를 올리면 재생이 시작됩니다.",
@@ -1360,12 +1371,12 @@
"view_all": "모두 보기",
"view_all_users": "모든 사용자 보기",
"view_in_timeline": "타임라인에서 보기",
"view_links": "링크 보기",
"view_links": "링크 확인",
"view_next_asset": "다음 항목 보기",
"view_previous_asset": "이전 항목 보기",
"view_stack": "스택 보기",
"viewer": "뷰어",
"visibility_changed": "인물 {count, plural, one {#명} other {#명}}의 숨김 여부가 변경되었습니다.",
"visibility_changed": "인물 {count, plural, one {#명} other {#명}}의 표시 여부가 변경",
"waiting": "대기",
"warning": "경고",
"week": "주",
@@ -1375,5 +1386,5 @@
"years_ago": "{years, plural, one {#년} other {#년}} 전",
"yes": "네",
"you_dont_have_any_shared_links": "생성한 공유 링크가 없습니다.",
"zoom_image": "확대"
"zoom_image": "이미지 확대"
}

View File

@@ -50,6 +50,7 @@
"failed_job_command": "Darbo {job} komanda {command} nepavyko",
"force_delete_user_warning": "ĮSPĖJIMAS: Šis veiksmas iš karto pašalins naudotoją ir visą jo informaciją. Šis žingsnis nesugrąžinamas ir failų nebus galima atkurti.",
"forcing_refresh_library_files": "Priverstinai atnaujinami visi failai bilbiotekoje",
"image_format": "Formatas",
"image_format_description": "WebP sukuria mažesnius failus nei JPEG, bet lėčiau juos apdoroja.",
"image_prefer_embedded_preview": "Pageidautinai rodyti įterptą peržiūrą",
"image_prefer_embedded_preview_setting_description": "",
@@ -60,6 +61,7 @@
"image_preview_resolution_description": "Naudojama peržiūrint vieną nuotrauką ir mašininiam mokymui. Didesnė rezoliucija gali išsaugoti daugiau detalių, bet ilgiau užtrukti apdoroti ir sumažinti programos greitumą.",
"image_quality": "Kokybė",
"image_quality_description": "Vaizdo kokybė nuo 1 iki 100. Aukštesnė kokybė yra geresnė, tačiau sukuriami didesni failai. Ši parinktis turi įtakos peržiūros ir miniatiūrų vaizdams.",
"image_resolution": "Rezoliucija",
"image_settings": "Nuotraukos nustatymai",
"image_settings_description": "Keisti sugeneruotų nuotraukų kokybę ir rezoliuciją",
"image_thumbnail_format": "Miniatūros formatas",
@@ -119,7 +121,7 @@
"manage_concurrency": "Tvarkyti lygiagretumą",
"manage_log_settings": "",
"map_dark_style": "Tamsioji tema",
"map_enable_description": "",
"map_enable_description": "Įgalinti žemėlapio funkcijas",
"map_gps_settings": "Žemėlapio ir GPS nustatymai",
"map_gps_settings_description": "Tvarkyti žemėlapio ir GPS (atvirkštinio geokodavimo) nustatymus",
"map_light_style": "Šviesioji tema",
@@ -132,9 +134,13 @@
"map_style_description": "",
"metadata_extraction_job": "Metaduomenų nuskaitymas",
"metadata_extraction_job_description": "Kiekvieno bibliotekos elemento metaduomenų nuskaitymas, tokių kaip GPS koordinatės, veidai ar rezoliucija",
"metadata_settings": "Metaduomenų nustatymai",
"metadata_settings_description": "Tvarkyti metaduomenų nustatymus",
"migration_job": "Migracija",
"migration_job_description": "",
"no_paths_added": "Keliai nepridėti",
"no_pattern_added": "Šablonas nepridėtas",
"note_cannot_be_changed_later": "PASTABA: Vėliau to pakeisti negalima!",
"notification_email_from_address": "",
"notification_email_from_address_description": "",
"notification_email_host_description": "",
@@ -148,7 +154,7 @@
"notification_email_test_email_failed": "Nepavyko išsiųsti bandomojo el. laiško, patikrinkite savo nustatymus",
"notification_email_test_email_sent": "Bandomasis el. laiškas buvo išsiųstas į {email}. Patikrinkite savo pašto dėžutę.",
"notification_email_username_description": "",
"notification_enable_email_notifications": "",
"notification_enable_email_notifications": "Įgalinti el. pašto pranešimus",
"notification_settings": "Pranešimų nustatymai",
"notification_settings_description": "Tvarkyti pranešimų nustatymus, įskaitant el. pašto",
"oauth_auto_launch": "Paleisti automatiškai",
@@ -179,15 +185,18 @@
"password_settings_description": "Tvarkyti prisijungimo slaptažodžiu nustatymus",
"paths_validated_successfully": "Visi keliai patvirtinti sėkmingai",
"refreshing_all_libraries": "Perkraunamos visos bibliotekos",
"registration": "Administratoriaus registracija",
"registration_description": "Kadangi esate pirmasis šio sistemos naudotojas, jums bus priskirta administratoriaus rolė, ir būsite atsakingas už administracines užduotis ir papildomų naudotojų kūrimą.",
"repair_all": "Pataisyti visus",
"require_password_change_on_login": "Reikalauti, kad naudotojas pasikeistų slaptažodį po pirmojo prisijungimo",
"reset_settings_to_default": "Atstatyti nustatymus į numatytuosius",
"reset_settings_to_recent_saved": "Nustatymų atstatymas į neseniai išsaugotus nustatymus",
"send_welcome_email": "Siųsti sveikinimo el. laišką",
"server_external_domain_settings": "Išorinis domenas",
"server_external_domain_settings_description": "",
"server_settings": "Serverio nustatymai",
"server_settings_description": "Tvarkyti serverio nustatymus",
"server_welcome_message": "",
"server_welcome_message": "Sveikinimo pranešimas",
"server_welcome_message_description": "Žinutė, rodoma prisijungimo puslapyje.",
"sidecar_job_description": "",
"slideshow_duration_description": "",
@@ -200,7 +209,7 @@
"storage_template_settings_description": "",
"system_settings": "Sistemos nustatymai",
"tag_cleanup_job": "Žymų išvalymas",
"theme_custom_css_settings": "",
"theme_custom_css_settings": "Individualizuotas CSS",
"theme_custom_css_settings_description": "",
"theme_settings": "Temos nustatymai",
"theme_settings_description": "",
@@ -227,9 +236,9 @@
"transcoding_constant_rate_factor": "",
"transcoding_constant_rate_factor_description": "",
"transcoding_disabled_description": "",
"transcoding_hardware_acceleration": "",
"transcoding_hardware_acceleration": "Techninės įrangos spartinimas",
"transcoding_hardware_acceleration_description": "",
"transcoding_hardware_decoding": "",
"transcoding_hardware_decoding": "Aparatinis dekodavimas",
"transcoding_hardware_decoding_setting_description": "",
"transcoding_hevc_codec": "HEVC kodekas",
"transcoding_max_b_frames": "",
@@ -249,7 +258,7 @@
"transcoding_settings": "",
"transcoding_settings_description": "",
"transcoding_target_resolution": "",
"transcoding_target_resolution_description": "",
"transcoding_target_resolution_description": "Didesnės skiriamosios gebos gali išsaugoti daugiau detalių, tačiau jas koduoti užtrunka ilgiau, failų dydžiai yra didesni ir gali sumažėti programos jautrumas.",
"transcoding_temporal_aq": "",
"transcoding_temporal_aq_description": "",
"transcoding_threads": "",
@@ -263,7 +272,7 @@
"transcoding_two_pass_encoding_setting_description": "",
"transcoding_video_codec": "Video kodekas",
"transcoding_video_codec_description": "",
"trash_enabled_description": "",
"trash_enabled_description": "Įgalinti šiukšliadėžės funkcijas",
"trash_number_of_days": "Dienų skaičius",
"trash_number_of_days_description": "",
"trash_settings": "Šiukšliadėžės nustatymai",
@@ -1050,8 +1059,10 @@
"unknown_year": "Nežinomi metai",
"unlink_oauth": "",
"unlinked_oauth_account": "",
"unnamed_album_delete_confirmation": "Ar tikrai norite ištrinti šį albumą?",
"unsaved_change": "Neišsaugoti pakeitimai",
"unselect_all": "",
"unselect_all_duplicates": "Atžymėti visus dublikatus",
"unstack": "Išgrupuoti",
"unstacked_assets_count": "{count, plural, one {Išgrupuotas # elementas} few {Išgrupuoti # elementai} other {Išgrupuota # elementų}}",
"up_next": "",
@@ -1062,7 +1073,7 @@
"upload_status_duplicates": "Dublikatai",
"upload_status_errors": "Klaidos",
"upload_status_uploaded": "Įkelta",
"url": "",
"url": "URL",
"usage": "",
"user": "Naudotojas",
"user_id": "Naudotojo ID",
@@ -1070,19 +1081,19 @@
"username": "Naudotojo vardas",
"users": "Naudotojai",
"utilities": "Priemonės",
"validate": "",
"validate": "Validuoti",
"variables": "Kintamieji",
"version": "Versija",
"version_announcement_closing": "Tavo draugas, Alex",
"version_history": "Versijų istorija",
"version_history_item": "Versija {version} įdiegta {date}",
"video": "Vaizdo įrašas",
"video_hover_setting_description": "",
"video_hover_setting_description": "Atkurti vaizdo įrašo miniatiūrą, kai pelė užvedama ant elemento. Net ir išjungus, atkūrimą galima pradėti užvedus pelės žymeklį ant atkūrimo piktogramos.",
"videos": "Video",
"videos_count": "{count, plural, one {# vaizdo įrašas} few {# vaizdo įrašai} other {# vaizdo įrašų}}",
"view": "Rodyti",
"view_album": "Rodyti albumą",
"view_all": "",
"view_all": "Peržiūrėti viską",
"view_all_users": "Peržiūrėti visus naudotojus",
"view_links": "Rodyti nuorodas",
"view_next_asset": "",
@@ -1092,7 +1103,7 @@
"waiting": "Laukiama",
"warning": "Įspėjimas",
"week": "Savaitė",
"welcome_to_immich": "",
"welcome_to_immich": "Sveiki atvykę į Immich",
"year": "Metai",
"yes": "Taip",
"zoom_image": "Priartinti vaizdą"

View File

@@ -2,7 +2,7 @@
"about": "Par",
"account": "Konts",
"account_settings": "Konta iestatījumi",
"acknowledge": "Atzīt",
"acknowledge": "Pieņemt",
"action": "Darbība",
"actions": "Darbības",
"active": "Aktīvs",
@@ -446,6 +446,7 @@
"error": "",
"error_loading_image": "",
"errors": {
"cant_get_faces": "Nevar iegūt sejas",
"cant_search_people": "Neizdevās veikt peronu meklēšanu",
"failed_to_create_album": "Neizdevās izveidot albumu",
"unable_to_add_album_users": "",
@@ -715,16 +716,26 @@
"primary": "",
"profile_picture_set": "",
"public_share": "",
"purchase_button_never_show_again": "Nekad vairs nerādīt",
"purchase_button_reminder": "Atgādināt man pēc 30 dienām",
"purchase_button_remove_key": "Noņemt atslēgu",
"purchase_button_select": "Izvēlēties",
"purchase_individual_description_2": "Atbalstītāja statuss",
"purchase_panel_title": "Atbalstīt projektu",
"purchase_remove_product_key": "Noņemt produkta atslēgu",
"purchase_server_description_1": "Visam serverim",
"purchase_server_description_2": "Atbalstītāja statuss",
"purchase_server_title": "Serveris",
"range": "",
"raw": "",
"reaction_options": "",
"read_changelog": "",
"read_changelog": "Lasīt izmaiņu sarakstu",
"recent": "",
"recent_searches": "",
"refresh": "",
"refreshed": "",
"refreshes_every_file": "",
"remove": "",
"remove": "Noņemt",
"remove_deleted_assets": "",
"remove_from_album": "Noņemt no albuma",
"remove_from_favorites": "Noņemt no izlases",
@@ -734,9 +745,9 @@
"removed_from_archive": "Noņēma no arhīva",
"removed_from_favorites": "Noņēma no izlases",
"rename": "Pārsaukt",
"repair": "",
"repair": "Remonts",
"repair_no_results_message": "",
"replace_with_upload": "",
"replace_with_upload": "Aizstāt ar augšupielādi",
"require_password": "",
"require_user_to_change_password_on_first_login": "Pieprasīt lietotājam mainīt paroli pēc pirmās pieteikšanās",
"reset": "",
@@ -764,8 +775,9 @@
"scan_new_library_files": "",
"scan_settings": "",
"search": "Meklēt",
"search_albums": "",
"search_albums": "Meklēt albumus",
"search_by_context": "",
"search_by_filename_example": "piemēram, IMG_1234.JPG vai PNG",
"search_camera_make": "",
"search_camera_model": "",
"search_city": "",
@@ -780,7 +792,7 @@
"search_type": "",
"search_your_photos": "Meklēt Jūsu fotoattēlus",
"searching_locales": "",
"second": "",
"second": "Sekunde",
"select_album_cover": "Izvēlieties albuma vāciņu",
"select_all": "",
"select_all_duplicates": "Atlasīt visus dublikātus",
@@ -795,6 +807,7 @@
"server": "",
"server_online": "Serveris tiešsaistē",
"server_stats": "Servera statistika",
"server_version": "Servera versija",
"set": "",
"set_as_album_cover": "",
"set_as_profile_picture": "",
@@ -810,10 +823,13 @@
"shared_links": "Kopīgotās saites",
"sharing": "Kopīgošana",
"sharing_sidebar_description": "",
"show_album_options": "",
"show_file_location": "",
"show_gallery": "",
"show_hidden_people": "",
"show_album_options": "Rādīt albuma iespējas",
"show_albums": "Rādīt albumus",
"show_all_people": "Rādīt visus cilvēkus",
"show_and_hide_people": "Rādīt un slēpt cilvēkus",
"show_file_location": "Rādīt faila atrašanās vietu",
"show_gallery": "Rādīt galeriju",
"show_hidden_people": "Rādīt paslēptos cilvēkus",
"show_in_timeline": "",
"show_in_timeline_setting_description": "",
"show_keyboard_shortcuts": "",
@@ -823,9 +839,11 @@
"show_person_options": "",
"show_progress_bar": "",
"show_search_options": "",
"show_supporter_badge": "Atbalstītāja nozīmīte",
"show_supporter_badge_description": "Rādīt atbalstītāja nozīmīti",
"shuffle": "",
"sign_up": "",
"size": "",
"size": "Izmērs",
"skip_to_content": "",
"slideshow": "Slīdrāde",
"slideshow_settings": "Slīdrādes iestatījumi",
@@ -854,7 +872,7 @@
"support": "Atbalsts",
"support_and_feedback": "Atbalsts un atsauksmes",
"swap_merge_direction": "",
"sync": "",
"sync": "Sinhronizēt",
"template": "",
"theme": "Dizains",
"theme_selection": "",

View File

@@ -31,6 +31,92 @@
"asset_offline_description": "Aset pustaka luaran ini tidak lagi ditemui pada cakera dan telah dialihkan ke sampah. Jika fail telah dialihkan dalam pustaka, semak garis masa anda untuk aset baharu yang sepadan. Untuk memulihkan aset ini, sila pastikan bahawa laluan fail di bawah boleh diakses oleh Immich dan mengimbas pustaka.",
"authentication_settings": "Tetapan Pengesahan",
"authentication_settings_description": "Urus kata laluan, OAuth dan tetapan pengesahan lain",
"authentication_settings_disable_all": "Adakah anda pasti mahu melumpuhkan semua kaedah log masuk? Log masuk akan dilumpuhkan sepenuhnya."
"authentication_settings_disable_all": "Adakah anda pasti mahu melumpuhkan semua kaedah log masuk? Log masuk akan dilumpuhkan sepenuhnya.",
"authentication_settings_reenable": "Untuk menghidupkan semula, guna <link>Arahan Pelayan</link>.",
"background_task_job": "Tugas Latar Belakang",
"check_all": "Tanda Semua",
"cleared_jobs": "Kerja telah dibersihkan untuk: {job}",
"config_set_by_file": "Konfigurasi kini ditetapkan oleh fail konfigurasi",
"confirm_delete_library": "Adakah anda pasti mahu memadamkan {library}?",
"confirm_delete_library_assets": "Adakah anda pasti mahu memadamkan pustaka ini? Ini akan memadam {count, plural, one {# aset yang terkandung} other {semua # aset yang terkandung}} daripada Immich dan tidak boleh dibuat asal. Fail akan kekal pada disk.",
"confirm_email_below": "Untuk mengesahkan, sila taip \"{email}\" dibawah",
"confirm_reprocess_all_faces": "Adakah anda pasti mahu memproses semula semua wajah? Ini juga akan membersihkan orang bernama.",
"confirm_user_password_reset": "Adakah anda pasti mahu menetapkan semula kata laluan {user}?",
"create_job": "Cipta tugas",
"disable_login": "Lumpuhkan fungsi log masuk",
"duplicate_detection_job_description": "Jalankan pembelajaran mesin pada aset untuk mengesan imej yang serupa. Bergantung pada Carian Pintar",
"exclusion_pattern_description": "Corak pengecualian membolehkan anda mengabaikan fail dan folder semasa mengimbas pustaka anda. Ini berguna jika anda mempunyai folder yang mengandungi fail yang anda tidak mahu import, seperti fail RAW.",
"external_library_created_at": "Pustaka luaran (dicipta pada {date})",
"external_library_management": "Pengurusan Perpustakaan Luar",
"face_detection": "Pengesanan wajah",
"face_detection_description": "Kesan wajah dalam aset menggunakan pembelajaran mesin. Untuk video, hanya lakaran kecil dipertimbangkan. \"Segar Semula\" memproses semula semua aset. \"Tetapkan Semula\" juga mengosongkan semua data wajah semasa. \"Hilang\" baris gilir aset yang belum diproses lagi. Wajah yang dikesan akan beratur untuk Pengecaman Wajah selepas Pengesanan Wajah selesai, menghimpunkannya kepada orang sedia ada atau baharu.",
"facial_recognition_job_description": "Kumpulan wajah yang dikesan ke dalam orang. Langkah ini dijalankan selepas Pengesanan Wajah selesai. \"Tetapkan semula\" mengelompokkan semula semua wajah. \"Hilang\" jalankan proses pada wajah yang tidak mempunyai orang yang ditetapkan.",
"failed_job_command": "Perintah {command} gagal untuk kerja: {job}",
"force_delete_user_warning": "AMARAN: Ini akan mengalih keluar pengguna dan semua aset dengan serta-merta. Ia tidak boleh dibuat asal dan fail tidak boleh dipulihkan.",
"forcing_refresh_library_files": "Memaksa muat semula semua fail perpustakaan",
"image_format": "Format",
"image_format_description": "WebP menghasilkan fail yang lebih kecil daripada JPEG, tetapi lebih perlahan untuk mengekod.",
"image_prefer_embedded_preview": "Cadangkan pratonton terbenam",
"image_prefer_embedded_preview_setting_description": "Gunakan pratonton terbenam dalam foto RAW sebagai input kepada pemprosesan imej apabila tersedia. Cara ini boleh menghasilkan warna yang lebih tepat untuk sesetengah imej, tetapi kualiti pratonton bergantung pada kamera dan imej mungkin mempunyai lebih banyak artifak mampatan.",
"image_prefer_wide_gamut": "Cadangkan warna gamut yang luas",
"image_prefer_wide_gamut_setting_description": "Gunakan Paparan P3 untuk lakaran kenit. Ini lebih baik mengekalkan kerancakan imej dengan ruang warna yang luas, tetapi imej mungkin kelihatan berbeza pada peranti lama dengan versi penyemak imbas lama. Imej sRGB disimpan sebagai sRGB untuk mengelakkan peralihan warna.",
"image_preview_description": "Imej bersaiz sederhana dengan metadata yang dilucutkan, digunakan semasa melihat aset tunggal dan untuk pembelajaran mesin",
"image_preview_quality_description": "Kualiti pratonton dari 1-100. Lebih tinggi adalah lebih baik, tetapi menghasilkan fail yang lebih besar dan boleh mengurangkan responsif apl. Menetapkan nilai yang rendah boleh menjejaskan kualiti pembelajaran mesin.",
"image_preview_title": "Tetapan Pratonton",
"image_quality": "Kualiti",
"image_resolution": "Resolusi",
"image_resolution_description": "Resolusi yang lebih tinggi boleh meningkatkan ketajaman imej tetapi mengambil masa yang lebih lama untuk mengekod, mempunyai saiz fail yang lebih besar dan boleh mengurangkan responsif apl.",
"image_settings": "Tetapan Imej",
"image_settings_description": "Urus kualiti dan resolusi imej yang dihasilkan",
"image_thumbnail_description": "Lakaran kecil dengan metadata yang dilucutkan, digunakan semasa melihat kumpulan foto seperti garis masa utama",
"image_thumbnail_quality_description": "Kualiti lakaran kenit daripada 1-100. Lebih tinggi adalah lebih baik, tetapi menghasilkan fail yang lebih besar dan boleh mengurangkan responsif apl.",
"image_thumbnail_title": "Tetapan Lakaran Kenit",
"job_concurrency": "Konkurensi {job}",
"job_created": "Tugas yang dicipta",
"job_not_concurrency_safe": "Konkurensi tugas ini tidak selamat.",
"job_settings": "Tetapan Tugas",
"job_settings_description": "Urus konkurensi tugas",
"job_status": "Status Tugasan",
"jobs_delayed": "{jobCount, plural, other {# tertangguh}}",
"jobs_failed": "{jobCount, plural, other {# gagal}}",
"library_created": "Pustaka dicipta: {library}",
"library_cron_expression": "Ungkapan Cron",
"library_cron_expression_description": "Tetapkan selang pengimbasan menggunakan format cron. Untuk maklumat lanjut sila rujuk cth. <link>Crontab Guru</link>",
"library_cron_expression_presets": "Pratetap ungkapan Cron",
"library_deleted": "Pustaka dipadamkan",
"library_import_path_description": "Tentukan folder untuk diimport. Folder ini, termasuk subfolder, akan diimbas untuk imej dan video.",
"library_scanning": "Pengimbasan Berkala",
"library_scanning_description": "Konfigurasikan pengimbasan perpustakaan berkala",
"library_scanning_enable_description": "Dayakan pengimbasan perpustakaan berkala",
"library_settings": "Perpustakaan Luaran",
"library_settings_description": "Urus tetapan perpustakaan luaran",
"library_tasks_description": "Laksanakan tugas perpustakaan",
"library_watching_enable_description": "Perhatikan perpustakaan luaran untuk perubahan fail",
"library_watching_settings": "Perhati perpustakaan (EKSPERIMEN)",
"library_watching_settings_description": "Perhati fail yang diubah secara automatik",
"logging_enable_description": "Dayakan pengelogan",
"logging_level_description": "Apabila didayakan, tahap log yang hendak digunakan.",
"logging_settings": "Log",
"machine_learning_clip_model": "Model CLIP",
"machine_learning_clip_model_description": "Nama model CLIP disenaraikan <link>di sini</link>. Ambil perhatian bahawa anda mesti menjalankan semula tugas 'Carian Pintar' untuk semua imej selepas menukar model.",
"machine_learning_duplicate_detection": "Pengesanan Pendua",
"machine_learning_duplicate_detection_enabled": "Dayakan pengesanan pendua",
"machine_learning_duplicate_detection_enabled_description": "Jika dilumpuhkan, aset yang betul-betul serupa masih akan dinyahduakan.",
"machine_learning_duplicate_detection_setting_description": "Gunakan pembenaman CLIP untuk mencari kemungkinan pendua",
"machine_learning_enabled": "Dayakan pembelajaran mesin",
"machine_learning_enabled_description": "Jika dilumpuhkan, semua ciri Pembelajaran Mesin akan dilumpuhkan tanpa mengira tetapan di bawah.",
"machine_learning_facial_recognition": "Pengecaman Wajah",
"machine_learning_facial_recognition_description": "Mengesan, mengecam dan mengumpulkan wajah dalam imej",
"machine_learning_facial_recognition_model": "Model pengecaman wajah",
"machine_learning_facial_recognition_model_description": "Model disenaraikan dalam susunan saiz menurun. Model yang lebih besar adalah lebih perlahan dan menggunakan lebih banyak memori, tetapi menghasilkan hasil yang lebih baik. Ambil perhatian bahawa anda mesti menjalankan semula kerja Pengesanan Wajah untuk semua imej apabila menukar model.",
"machine_learning_facial_recognition_setting": "Dayakan pengecaman wajah",
"machine_learning_facial_recognition_setting_description": "Jika dilumpuhkan, imej tidak akan dikodkan untuk pengecaman wajah dan tidak akan mengisi bahagian Orang dalam halaman Teroka.",
"machine_learning_max_detection_distance": "Jarak pengesanan maksimum",
"machine_learning_max_detection_distance_description": "Jarak maksimum antara dua imej untuk menganggapnya sebagai pendua, antara 0.001-0.1. Nilai yang lebih tinggi akan mengesan lebih banyak pendua, tetapi mungkin menghasilkan positif palsu.",
"machine_learning_max_recognition_distance": "Jarak pengecaman maksimum",
"machine_learning_max_recognition_distance_description": "Jarak maksimum antara dua muka untuk dianggap sebagai orang yang sama, antara 0-2. Menurunkan ini boleh menghalang pelabelan dua orang sebagai orang yang sama, manakala menaikkannya boleh menghalang pelabelan orang yang sama sebagai dua orang yang berbeza. Ambil perhatian bahawa adalah lebih mudah untuk menggabungkan dua orang daripada membelah satu orang kepada dua, jadi silap pada bahagian ambang yang lebih rendah apabila boleh.",
"machine_learning_min_detection_score": "Skor pengesanan minimum",
"machine_learning_min_detection_score_description": "Skor keyakinan minimum untuk wajah dikesan dari 0-1. Nilai yang lebih rendah akan mengesan lebih banyak muka tetapi mungkin menghasilkan positif palsu.",
"machine_learning_min_recognized_faces": "Minimum mengenali wajah"
}
}

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Weet je zeker dat je alle inlogmethoden wilt uitschakelen? Inloggen zal volledig worden uitgeschakeld.",
"authentication_settings_reenable": "Gebruik een <link>servercommando</link> om opnieuw in te schakelen.",
"background_task_job": "Achtergrondtaken",
"backup_database": "Backup Database",
"backup_database_enable_description": "Database back-ups activeren",
"backup_keep_last_amount": "Maximaal aantal back-ups om te bewaren",
"backup_settings": "Back-up instellingen",
"backup_settings_description": "Database back-up instellingen beheren",
"check_all": "Controleer het logboek",
"cleared_jobs": "Taken gewist voor: {job}",
"config_set_by_file": "Instellingen worden momenteel beheerd door een configuratiebestand",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Weet je zeker dat je alle gezichten opnieuw wilt verwerken? Hiermee worden ook alle mensen gewist.",
"confirm_user_password_reset": "Weet u zeker dat je het wachtwoord van {user} wilt resetten?",
"create_job": "Taak maken",
"cron_expression": "Cron expressie",
"cron_expression_description": "Stel de scaninterval in met het cron-formaat. Voor meer informatie kun je kijken naar bijvoorbeeld <link>Crontab Guru</link>",
"cron_expression_presets": "Cron-expressie presets",
"crontab_guru": "Crontab Guru",
"disable_login": "Inloggen uitschakelen",
"disabled": "Uitgeschakeld",

1
i18n/nn.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Czy jesteś pewny, że chcesz wyłączyć wszystkie metody logowania? Logowanie będzie całkowicie wyłączone.",
"authentication_settings_reenable": "Aby ponownie włączyć, użyj <link>Polecenia serwera</link>.",
"background_task_job": "Zadania w Tle",
"backup_database": "Kopia zapasowa bazy danych",
"backup_database_enable_description": "Włącz kopię zapasową bazy danych",
"backup_keep_last_amount": "Ile poprzednich kopii zapasowych przechowywać",
"backup_settings": "Ustawienia kopii zapasowej",
"backup_settings_description": "Zarządzaj ustawieniami kopii zapasowej bazy dnaych",
"check_all": "Zaznacz Wszystko",
"cleared_jobs": "Usunięto zadania dla: {job}",
"config_set_by_file": "Konfiguracja pochodzi z pliku konfiguracyjnego",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Czy na pewno chcesz ponownie przetworzyć wszystkie twarze? Spowoduje to utratę nazwanych osób.",
"confirm_user_password_reset": "Czy na pewno chcesz zresetować hasło użytkownika {user}?",
"create_job": "Utwórz zadanie",
"cron_expression": "Wyrażenie Cron",
"cron_expression_description": "Ustaw intwerwał skanowania przy pomocy formatu Cron'a. Po więcej informacji na temat formatu Cron zobacz . <link>Crontab Guru</link>",
"cron_expression_presets": "Predefiniowane wyrażenia Cron'a",
"crontab_guru": "Crontab Guru",
"disable_login": "Wyłącz logowanie",
"disabled": "Wyłączone",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Tem a certeza que deseja desativar todos os métodos de início de sessão? O início de sessão será completamente desativado.",
"authentication_settings_reenable": "Para reativar, use um <link>Comando de servidor</link>.",
"background_task_job": "Tarefas em segundo plano",
"backup_database": "Cópia de Segurança da Base de Dados",
"backup_database_enable_description": "Ativar cópias de segurança da base de dados",
"backup_keep_last_amount": "Quantidade de cópias de segurança anteriores a manter",
"backup_settings": "Definições de Cópia de Segurança",
"backup_settings_description": "Gerir definições de cópia de segurança da base de dados",
"check_all": "Selecionar Tudo",
"cleared_jobs": "Eliminadas as tarefas de: {job}",
"config_set_by_file": "A configuração está atualmente definida por um ficheiro de configuração",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Tem a certeza de que deseja reprocessar todos os rostos? Isto também limpará os nomes das pessoas.",
"confirm_user_password_reset": "Tem a certeza de que deseja redefinir a palavra-passe de {user}?",
"create_job": "Criar tarefa",
"cron_expression": "Expressão Cron",
"cron_expression_description": "Definir o intervalo de análise utilizando o formato Cron. Para mais informações, por favor veja o <link>Crontab Guru</link>",
"cron_expression_presets": "Predefinições das expressões Cron",
"crontab_guru": "Guru do Crontab",
"disable_login": "Desativar inicio de sessão",
"disabled": "",

View File

@@ -910,10 +910,10 @@
"menu": "Menu",
"merge": "Mesclar",
"merge_people": "Mesclar pessoas",
"merge_people_limit": "Só é possível combinar até 5 rostos de uma só vez",
"merge_people_limit": "Só é possível mesclar até 5 pessoas de uma só vez",
"merge_people_prompt": "Tem certeza que deseja mesclar estas pessoas? Esta ação é irreversível.",
"merge_people_successfully": "Pessoas mescladas com sucesso",
"merged_people_count": "{count, plural, one {# pessoa foi combinada} other {# pessoas foram combinadas}}",
"merged_people_count": "{count, plural, one {# pessoa foi mesclada} other {# pessoas foram mescladas}}",
"minimize": "Minimizar",
"minute": "Minuto",
"missing": "Faltando",
@@ -1294,7 +1294,7 @@
"theme": "Tema",
"theme_selection": "Selecionar tema",
"theme_selection_description": "Defina automaticamente o tema como claro ou escuro com base na preferência do sistema do seu navegador",
"they_will_be_merged_together": "Eles serão combinados",
"they_will_be_merged_together": "Eles serão mesclados",
"third_party_resources": "Recursos de terceiros",
"time_based_memories": "Memórias baseada no tempo",
"timezone": "Fuso horário",

View File

@@ -28,6 +28,7 @@
"added_to_favorites_count": "Adăugat {count, number} la favorite",
"admin": {
"add_exclusion_pattern_description": "Adăugați modele de excludere. Globing folosind *, ** și ? este suportat. Pentru a ignora toate fișierele din orice director numit „Raw”, utilizați „**/Raw/**”. Pentru a ignora toate fișierele care se termină în „.tif”, utilizați „**/*.tif”. Pentru a ignora o cale absolută, utilizați „/path/to/ignore/**”.",
"asset_offline_description": "Acest material din biblioteca externă nu se mai găsește pe disc și a fost mutat în coșul de gunoi. Dacă fișierul a fost mutat în bibliotecă, verificați cronologia pentru noul material corespunzător. Pentru a restabili acest material, asigurați-vă că calea fișierului de mai jos poate fi accesată de Immich și scanați biblioteca.",
"authentication_settings": "Setări de autentificare",
"authentication_settings_description": "Gestionează parola, OAuth și alte setări de autentificare",
"authentication_settings_disable_all": "Ești sigur că vrei sa dezactivezi toate metodele de autentificare? Autentificarea va fi complet dezactivată.",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Вы уверены, что хотите отключить все методы входа? Вход будет полностью отключен.",
"authentication_settings_reenable": "Чтобы снова включить, используйте <link>Команда Сервера</link>.",
"background_task_job": "Фоновые задачи",
"backup_database": "Резервное копирование базы данных",
"backup_database_enable_description": "Включить резервное копирование базы данных",
"backup_keep_last_amount": "Количество хранимых резервных копий",
"backup_settings": "Настройки резервного копирования",
"backup_settings_description": "Управление настройками резервного копирования базы данных",
"check_all": "Проверить все",
"cleared_jobs": "Очищены задачи для: {job}",
"config_set_by_file": "Настроено с помощью файла конфигурации",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Вы уверены, что хотите повторно определить все лица? Будут также удалены имена со всех лиц.",
"confirm_user_password_reset": "Вы уверены, что хотите сбросить пароль пользователя {user}?",
"create_job": "Создать задание",
"cron_expression": "Выражение cron",
"cron_expression_description": "Задайте интервал сканирований в формате cron. Для получения дополнительной информации, ознакомьтесь с <link>Crontab Guru</link>",
"cron_expression_presets": "Предустановки выражений cron",
"crontab_guru": "Crontab Guru",
"disable_login": "Отключить вход",
"disabled": "Выключено",
@@ -228,7 +236,7 @@
"search_jobs": "Поиск заданий...",
"send_welcome_email": "Отправить приветственное письмо",
"server_external_domain_settings": "Внешний домен",
"server_external_domain_settings_description": "Домен для общедоступных ссылок, включая http(s)://",
"server_external_domain_settings_description": "Домен для публичных ссылок, включая http(s)://",
"server_settings": "Настройки сервера",
"server_settings_description": "Управление настройками сервера",
"server_welcome_message": "Приветственное сообщение",
@@ -530,11 +538,11 @@
"delete_key": "Удалить ключ",
"delete_library": "Удалить библиотеку",
"delete_link": "Удалить ссылку",
"delete_shared_link": "Удалить общую ссылку",
"delete_shared_link": "Удалить публичную ссылку",
"delete_tag": "Удалить тег",
"delete_tag_confirmation_prompt": "Вы уверены, что хотите удалить тег {tagName}?",
"delete_user": "Удалить пользователя",
"deleted_shared_link": "Удалена публичная ссылка",
"deleted_shared_link": "Публичная ссылка удалена",
"deletes_missing_assets": "Удаляет объекты, отсутствующие на диске",
"description": "Описание",
"details": "Подробности",
@@ -626,8 +634,8 @@
"exclusion_pattern_already_exists": "Такая модель исключения уже существует.",
"failed_job_command": "Команда {command} не выполнена для задачи: {job}",
"failed_to_create_album": "Не удалось создать альбом",
"failed_to_create_shared_link": "Не удалось создать общую ссылку",
"failed_to_edit_shared_link": "Не удалось изменить общую ссылку",
"failed_to_create_shared_link": "Не удалось создать публичную ссылку",
"failed_to_edit_shared_link": "Не удалось изменить публичную ссылку",
"failed_to_get_people": "Не удалось получить информацию о людях",
"failed_to_load_asset": "Ошибка загрузки объекта",
"failed_to_load_assets": "Ошибка загрузки объектов",
@@ -642,7 +650,7 @@
"quota_higher_than_disk_size": "Вы установили квоту, превышающую размер диска",
"repair_unable_to_check_items": "Невозможно проверить {count, select, one {элемент} other {элементы}}",
"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_exclusion_pattern": "Невозможно добавить шаблон исключения",
"unable_to_add_import_path": "Не удается добавить путь импорта",
@@ -671,7 +679,7 @@
"unable_to_delete_assets": "Ошибка при удалении ресурсов",
"unable_to_delete_exclusion_pattern": "Не удается удалить шаблон исключения",
"unable_to_delete_import_path": "Не удается удалить путь импорта",
"unable_to_delete_shared_link": "Не удается удалить общую ссылку",
"unable_to_delete_shared_link": "Не удалось удалить публичную ссылку",
"unable_to_delete_user": "Не удается удалить пользователя",
"unable_to_download_files": "Невозможно скачать файлы",
"unable_to_edit_exclusion_pattern": "Невозможно отредактировать шаблон исключения",
@@ -680,7 +688,7 @@
"unable_to_enter_fullscreen": "Не удается войти в полноэкранный режим",
"unable_to_exit_fullscreen": "Не удается выйти из полноэкранного режима",
"unable_to_get_comments_number": "Не удалось получить количество комментариев",
"unable_to_get_shared_link": "Не удалось получить общую ссылку",
"unable_to_get_shared_link": "Не удалось получить публичную ссылку",
"unable_to_hide_person": "Невозможно скрыть персону",
"unable_to_link_motion_video": "Не удается связать движущееся видео",
"unable_to_link_oauth_account": "Не удается связать учетную запись OAuth",
@@ -697,7 +705,7 @@
"unable_to_refresh_user": "Невозможно обновить пользователя",
"unable_to_remove_album_users": "Не удалось удалить пользователей из альбома",
"unable_to_remove_api_key": "Не удается удалить ключ API",
"unable_to_remove_assets_from_shared_link": "Невозможно удалить объекты из общей ссылки",
"unable_to_remove_assets_from_shared_link": "Невозможно удалить объекты из публичной ссылки",
"unable_to_remove_comment": "",
"unable_to_remove_deleted_assets": "Не удается удалить автономные файлы",
"unable_to_remove_library": "Не удается удалить библиотеку",
@@ -771,7 +779,7 @@
"folders": "Папки",
"folders_feature_description": "Просмотр папок с фотографиями и видео в файловой системе",
"force_re-scan_library_files": "Принудительное повторное сканирование всех файлов библиотеки",
"forward": "Переслать",
"forward": "Вперёд",
"general": "Общие",
"get_help": "Получить помощь",
"getting_started": "Приступая к работе",
@@ -890,7 +898,7 @@
"loop_videos_description": "Включить циклическое воспроизведение видео.",
"main_branch_warning": "Вы используете версию для разработки; мы настоятельно рекомендуем использовать релизную версию!",
"make": "Производитель",
"manage_shared_links": "Управление общими ссылками",
"manage_shared_links": "Управление публичными ссылками",
"manage_sharing_with_partners": "Управление обменом информацией с партнерами. Эта функция позволяет вашему партнеру видеть ваши фотографии и видеозаписи, кроме тех, которые находятся в Архиве и Корзине",
"manage_the_app_settings": "Управление настройками приложения",
"manage_your_account": "Управление учётной записью",
@@ -1104,13 +1112,13 @@
"regenerating_thumbnails": "Восстановление миниатюр",
"remove": "Удалить",
"remove_assets_album_confirmation": "Вы уверены, что хотите удалить {count, plural, one {# объект} few {# объекта} many {# объектов} other {# объектов}} из альбома?",
"remove_assets_shared_link_confirmation": "Вы уверены, что хотите удалить {count, plural, one {# объект} few {# объекта} many {# объектов} other {# объектов}} из этого общего доступа?",
"remove_assets_shared_link_confirmation": "Вы уверены, что хотите удалить {count, plural, one {# объект} few {# объекта} many {# объектов} other {# объектов}} из этой публичной ссылки?",
"remove_assets_title": "Удалить объекты?",
"remove_custom_date_range": "Удалить пользовательский диапазон дат",
"remove_deleted_assets": "Удаление автономных файлов",
"remove_from_album": "Удалить из альбома",
"remove_from_favorites": "Удалить из избранного",
"remove_from_shared_link": "Удалить из общей ссылки",
"remove_from_shared_link": "Удалить из публичной ссылки",
"remove_user": "Удалить пользователя",
"removed_api_key": "Удален ключ API: {name}",
"removed_from_archive": "Удален из архива",
@@ -1211,8 +1219,8 @@
"shared_by_user": "Владелец: {user}",
"shared_by_you": "Вы поделились",
"shared_from_partner": "Фото от {partner}",
"shared_link_options": "Параметры общих ссылок",
"shared_links": "Общие ссылки",
"shared_link_options": "Параметры публичных ссылок",
"shared_links": "Публичные ссылки",
"shared_photos_and_videos_count": "{assetCount, plural, other {# фото и видео.}}",
"shared_with_partner": "Совместно с {partner}",
"sharing": "Общие",
@@ -1391,10 +1399,10 @@
"warning": "Предупреждение",
"week": "Неделя",
"welcome": "Добро пожаловать",
"welcome_to_immich": "Добро пожаловать в immich",
"welcome_to_immich": "Добро пожаловать в Immich",
"year": "Год",
"years_ago": "{years, plural, one {# год} few {# года} many {# лет} other {# года}} назад",
"yes": "Да",
"you_dont_have_any_shared_links": "У вас нет общих ссылок",
"zoom_image": "Увеличить"
"you_dont_have_any_shared_links": "У вас нет публичных ссылок",
"zoom_image": "Приблизить"
}

View File

@@ -38,6 +38,7 @@
"cleared_jobs": "Hotové úlohy pre: {job}",
"config_set_by_file": "Konfigurácia je v súčasnosti nastavená konfiguračným súborom",
"confirm_delete_library": "Naozaj chcete vymazať knižnicu {library}?",
"confirm_delete_library_assets": "Ste si isti, že chcete vymazať túto knižnicu? Tato operácia nenávratne odstráni {count, plural, one {# contained asset} other {all # contained assets}} súborov z Immich. Súbory sa budu ponechané na disku.",
"confirm_email_below": "Pre potvrdenie zadajte \"{email}\" nižšie",
"confirm_reprocess_all_faces": "Naozaj chcete spracovať všetky tváre znova? Tento proces vymaže pomenovaných ľudí.",
"confirm_user_password_reset": "Naozaj chcete resetovať heslo pre {user}?",
@@ -130,18 +131,21 @@
"machine_learning_settings": "Nastavenia strojového učenia",
"machine_learning_settings_description": "Spravovať funkcie a nastavenia strojového učenia",
"machine_learning_smart_search": "Inteligentné vyhľadávanie",
"machine_learning_smart_search_description": "",
"machine_learning_smart_search_description": "Významove vyhladavanie v obrázkoch pomocou CLIP vzorov",
"machine_learning_smart_search_enabled": "Povoliť inteligentné vyhľadávanie",
"machine_learning_smart_search_enabled_description": "",
"machine_learning_smart_search_enabled_description": "Ak je vypnuté, obrázky nebudú spracované pre inteligentné vyhľadávanie.",
"machine_learning_url_description": "URL adresa servera pre strojové učenie",
"manage_concurrency": "Správa súbežnosti",
"manage_log_settings": "Spravovať nastavenia logovania",
"map_dark_style": "Tmavý štýl",
"map_enable_description": "Povoliť funkcie mapy",
"map_gps_settings": "Nastavenia Mapy & GPS",
"map_gps_settings_description": "Sprava Mapovych a GPS (Reverzne Geokodovanie) Nastavení",
"map_implications": "Táto funkčnosť sa spolieha na externý servis spracovania mapových dlaždíc (tiles.immich.cloud)",
"map_light_style": "Svetlý štýl",
"map_reverse_geocoding": "",
"map_reverse_geocoding": "Reverzné Geokódovanie",
"map_reverse_geocoding_enable_description": "Povoliť reverzné geokódovanie",
"map_reverse_geocoding_settings": "",
"map_reverse_geocoding_settings": "Nastavenia reverzného geokódovania",
"map_settings": "Mapa",
"map_settings_description": "Spravovať nastavenia mapy",
"map_style_description": "",
@@ -152,12 +156,13 @@
"metadata_settings_description": "Spravovať nastavenia metadát",
"migration_job": "Migrácia",
"migration_job_description": "",
"note_unlimited_quota": "Poznámka: Použite 0 pre neobmedzený limit",
"notification_email_from_address": "Z adresy",
"notification_email_from_address_description": "",
"notification_email_host_description": "",
"notification_email_from_address_description": "E-mailová adresa odosielateľa, príklad: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Adresa emailového serveru (príklad: smtp.immich.app)",
"notification_email_ignore_certificate_errors": "Ignorovať chyby certifikátu",
"notification_email_ignore_certificate_errors_description": "",
"notification_email_password_description": "",
"notification_email_ignore_certificate_errors_description": "Ignorovať chyby pri overení TLS certifikátu (neodporúča sa)",
"notification_email_password_description": "Heslo pre komunikáciu s emailovým serverom",
"notification_email_port_description": "Porty e-mailového servera (napr. 25, 465, alebo 587)",
"notification_email_sent_test_email_button": "Odoslať testovací e-mail a uložiť",
"notification_email_setting_description": "Nastavenie pre odosielanie e-mailových upozornení",
@@ -168,11 +173,11 @@
"notification_enable_email_notifications": "Povoliť e-mailové upozornenia",
"notification_settings": "Nastavenia upozornení",
"notification_settings_description": "Spravovať nastavenia upozornení, vrátane emailu",
"oauth_auto_launch": "",
"oauth_auto_launch_description": "",
"oauth_auto_register": "",
"oauth_auto_register_description": "",
"oauth_button_text": "",
"oauth_auto_launch": "Automatické spustenie",
"oauth_auto_launch_description": "Automatické spustenie OAuth prihlásenia, pri otvorení prihlasovacej stránky",
"oauth_auto_register": "Automatická regristrácia",
"oauth_auto_register_description": "Automatické zaregistrovanie nového požívateľa pri prihlásení pomocou OAuth",
"oauth_button_text": "Text tlačítka",
"oauth_client_id": "Client ID",
"oauth_client_secret": "Client Secret",
"oauth_enable_description": "Prihlásiť sa pomocou OAuth",
@@ -183,32 +188,37 @@
"oauth_scope": "",
"oauth_settings": "OAuth",
"oauth_settings_description": "Spravovať nastavenia prihlásenia OAuth",
"oauth_settings_more_details": "Pre viac informácii o tejto funkcii, prejdite na <link>docs</link>.",
"oauth_signing_algorithm": "",
"oauth_storage_label_claim": "",
"oauth_storage_label_claim_description": "",
"oauth_storage_quota_claim": "",
"oauth_storage_quota_claim_description": "",
"oauth_storage_quota_default": "",
"oauth_storage_quota_default": "Predvolený limit úložiska (GiB)",
"oauth_storage_quota_default_description": "",
"password_enable_description": "Prihlásiť sa pomocou emailu a hesla",
"password_settings": "Prihlásenie cez heslo",
"password_settings_description": "Spravovať nastavenia prihlásenia cez heslo",
"refreshing_all_libraries": "Obnovujú sa všetky knižnice",
"registration": "Registrácia administrátora",
"registration_description": "Keďže ste prvým používateľom v systéme, budú vám pridelené správcovské práva na vykonávanie všetkých úloh a vrátane tvorby nových používateľov.",
"repair_all": "Opraviť Všetko",
"repair_matched_items": "Zhody {count, plural, one {# item} other {# items}}",
"repaired_items": "Opravených {count, plural, one {# item} other {# items}}",
"require_password_change_on_login": "Vyžadovať od používateľa zmenu hesla pri prvom prihlásení",
"reset_settings_to_default": "Obnoviť pôvodné nastavenia",
"reset_settings_to_recent_saved": "Obnoviť naposledy uložené nastavenia",
"scanning_library": "Knižnica sa skenuje",
"search_jobs": "Vyhľadať úlohy...",
"send_welcome_email": "Odoslať uvítací e-mail",
"server_external_domain_settings": "Externá doména",
"server_external_domain_settings_description": "",
"server_external_domain_settings_description": "Verejná doména pre zdieľané odkazy, vrátane http(s)://",
"server_settings": "Nastavenia servera",
"server_settings_description": "Spravovať nastavenia servera",
"server_welcome_message": "Uvítacia správa",
"server_welcome_message_description": "Správa, ktorá sa zobrazí na prihlasovacej stránke.",
"sidecar_job_description": "",
"slideshow_duration_description": "",
"slideshow_duration_description": "Čas zobrazenia obrázku v sekundách",
"smart_search_job_description": "",
"storage_template_enable_description": "",
"storage_template_hash_verification_enabled": "",
@@ -384,7 +394,7 @@
"confirm": "Potvrdiť",
"confirm_admin_password": "Potvrdiť Administrátorské Heslo",
"confirm_delete_shared_link": "Ste si istý, že chcete odstrániť tento zdieľaný odkaz?",
"confirm_password": "Potvrďiť heslo",
"confirm_password": "Potvrdiť heslo",
"contain": "",
"context": "Kontext",
"continue": "Pokračovať",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Да ли сте сигурни да желите да oneмогућите све методе пријављивања? Пријава ће бити потпуно oneмогућена.",
"authentication_settings_reenable": "Да бисте поново омогућили, користите <link>команду сервера</link>.",
"background_task_job": "Позадински задаци",
"backup_database": "Резервна копија базе података",
"backup_database_enable_description": "Омогућите резервне копије базе података",
"backup_keep_last_amount": "Количина претходних резервних копија за чување",
"backup_settings": "Подешавања резервне копије",
"backup_settings_description": "Управљајте поставкама резервне копије базе података",
"check_all": "Провери све",
"cleared_jobs": "Очишћени послови за {job}",
"config_set_by_file": "Конфигурацију тренутно поставља конфигурациони фајл",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Да ли сте сигурни да желите да поново обрадите сва лица? Ово ће такође обрисати именоване особе.",
"confirm_user_password_reset": "Да ли сте сигурни да желите да ресетујете лозинку корисника {user}?",
"create_job": "Креирајте посао",
"cron_expression": "Cron израз (expression)",
"cron_expression_description": "Подесите интервал скенирања користећи cron формат. За више информација погледајте нпр. <link>Crontab Guru</link>",
"cron_expression_presets": "Предефинисана подешавања Cron израза (expression)",
"crontab_guru": "Guru servisnih zadataka",
"disable_login": "oneмогући пријаву",
"disabled": "",
@@ -432,7 +440,7 @@
"birthdate_set_description": "Датум рођења се користи да би се израчунале године ове особе у добу одређене фотографије.",
"blurred_background": "Замућена позадина",
"bugs_and_feature_requests": "Грешке и захтеви за функције",
"build": "Build",
"build": "Под-верзија (Build)",
"build_image": "Сагради (Буилд) имаге",
"bulk_delete_duplicates_confirmation": "Да ли сте сигурни да желите групно да избришете {count, plural, one {# дуплиран елеменат} few {# дуплирана елемента} other {# дуплираних елемената}}? Ово ће задржати највеће средство сваке групе и трајно избрисати све друге дупликате. Не можете поништити ову радњу!",
"bulk_keep_duplicates_confirmation": "Да ли сте сигурни да желите да задржите {count, plural, one {1 дуплирану датотеку} few {# дуплиране датотеке} other {# дуплираних датотека}}? Ово ће решити све дуплиране групе без брисања било чега.",
@@ -1391,7 +1399,7 @@
"warning": "Упозорење",
"week": "Недеља",
"welcome": "Добродошли",
"welcome_to_immich": "Добродошли у immich",
"welcome_to_immich": "Добродошли у Имич (Immich)",
"year": "Година",
"years_ago": "пре {years, plural, one {# године} other {# година}}",
"yes": "Да",

View File

@@ -34,6 +34,11 @@
"authentication_settings_disable_all": "Da li ste sigurni da želite da onemogućite sve metode prijavljivanja? Prijava će biti potpuno onemogućena.",
"authentication_settings_reenable": "Da biste ponovo omogućili, koristite <link>komandu servera</link>.",
"background_task_job": "Pozadinski zadaci",
"backup_database": "Rezervna kopija baze podataka",
"backup_database_enable_description": "Omogućite rezervne kopije baze podataka",
"backup_keep_last_amount": "Količina prethodnih rezervnih kopija za čuvanje",
"backup_settings": "Podešavanja rezervne kopije",
"backup_settings_description": "Upravljajte postavkama rezervne kopije baze podataka",
"check_all": "Proveri sve",
"cleared_jobs": "Očišćeni poslovi za: {job}",
"config_set_by_file": "Konfiguraciju trenutno postavlja konfiguracioni fajl",
@@ -43,6 +48,9 @@
"confirm_reprocess_all_faces": "Da li ste sigurni da želite da ponovo obradite sva lica? Ovo će takođe obrisati imenovane osobe.",
"confirm_user_password_reset": "Da li ste sigurni da želite da resetujete lozinku korisnika {user}?",
"create_job": "Kreirajte posao",
"cron_expression": "Cron izraz (expression)",
"cron_expression_description": "Podesite interval skeniranja koristeći cron format. Za više informacija pogledajte npr. <link>Crontab Guru</link>",
"cron_expression_presets": "Predefinisana podešavanja Cron izraza (expression)",
"crontab_guru": "Guru servisnih zadataka",
"disable_login": "Onemogući prijavu",
"disabled": "",
@@ -432,7 +440,7 @@
"birthdate_set_description": "Datum rođenja se koristi da bi se izračunale godine ove osobe u dobu određene fotografije.",
"blurred_background": "Zamućena pozadina",
"bugs_and_feature_requests": "Greške (bugs) i zahtevi za funkcije",
"build": "Build",
"build": "Pod-verzija (Build)",
"build_image": "Sagradi (Build) image",
"bulk_delete_duplicates_confirmation": "Da li ste sigurni da želite grupno da izbrišete {count, plural, one {# dupliran elemenat} few {# duplirana elementa} other {# dupliranih elemenata}}? Ovo će zadržati najveće sredstvo svake grupe i trajno izbrisati sve druge duplikate. Ne možete poništiti ovu radnju!",
"bulk_keep_duplicates_confirmation": "Da li ste sigurni da želite da zadržite {count, plural, one {1 dupliranu datoteku} few {# duplirane datoteke} other {# dupliranih datoteka}}? Ovo će rešiti sve duplirane grupe bez brisanja bilo čega.",

View File

@@ -34,6 +34,9 @@
"authentication_settings_disable_all": "Är du säker på att du vill inaktivera alla inloggningsmetoder? Inloggning kommer att helt inaktiveras.",
"authentication_settings_reenable": "För att återaktivera, använd <link>Server Command</link>.",
"background_task_job": "Bakgrundsaktiviteter",
"backup_database": "Databassäkerhetskopia",
"backup_database_enable_description": "Slå på säkerhetskopia",
"backup_keep_last_amount": "Antal säkerhetskopior att behålla",
"check_all": "Välj alla",
"cleared_jobs": "Rensade jobben för:{job}",
"config_set_by_file": "Konfigurationen är satt av en konfigurationsfil",
@@ -43,6 +46,8 @@
"confirm_reprocess_all_faces": "Är du säker på att du vill återprocessa alla ansikten? Detta kommer också rensa namngivna personer.",
"confirm_user_password_reset": "Är du säker på att du vill återställa {user}s lösenord?",
"create_job": "Skapa jobb",
"cron_expression": "Cron uttryck",
"cron_expression_description": "Sätt skanningsintervall genom att använda cron format. För mer information se <link>Crontab Guru</link>",
"crontab_guru": "Crontab-guru",
"disable_login": "Inaktivera inloggning",
"disabled": "Inaktiverad",
@@ -311,7 +316,7 @@
"transcoding_temporal_aq_description": "Gäller endast NVENC. Ökar kvaliteten på scener med hög detaljrikedom och låg rörelse. Kanske inte är kompatibel med äldre enheter.",
"transcoding_threads": "Trådar",
"transcoding_threads_description": "Högre värden leder till snabbare kodning, men lämnar mindre utrymme för servern att bearbeta andra uppgifter medan den är aktiv. Detta värde bör inte vara mer än antalet CPU-kärnor. Maximerar användningen om den är inställd på 0.",
"transcoding_tone_mapping": "",
"transcoding_tone_mapping": "Ton mappning",
"transcoding_tone_mapping_description": "Försöker att bevara utseendet på HDR-videor när de konverteras till SDR. Varje algoritm gör olika avvägningar för färg, detaljer och ljusstyrka. Hable bevarar detaljer, Mobius bevarar färg och Reinhard bevarar ljusstyrkan.",
"transcoding_tone_mapping_npl": "",
"transcoding_tone_mapping_npl_description": "Färgerna kommer att justeras för att se normala ut för en visning av denna ljusstyrka. Kontraintuitivt ökar lägre värden videons ljusstyrka och vice versa eftersom det kompenserar för skärmens ljusstyrka. 0 ställer in detta värde automatiskt.",
@@ -536,6 +541,7 @@
"direction": "Riktning",
"disabled": "Inaktiverad",
"disallow_edits": "Tillåt inte redigeringar",
"discord": "Discord",
"discover": "Upptäck",
"dismiss_all_errors": "Avvisa alla fel",
"dismiss_error": "Avvisa fel",
@@ -673,23 +679,31 @@
"unable_to_empty_trash": "Kunde inte tömma papperskorgen",
"unable_to_enter_fullscreen": "Kunde inte växla till fullskärm",
"unable_to_exit_fullscreen": "Kunde inte avsluta fullskärm",
"unable_to_get_comments_number": "Det gick inte att hämta antalet kommentarer",
"unable_to_get_shared_link": "Det gick inte att hämta delad länk",
"unable_to_hide_person": "Det går inte att dölja personen",
"unable_to_link_motion_video": "Det går inte att länka rörlig video",
"unable_to_link_oauth_account": "Det gick inte att länka OAuth-kontot",
"unable_to_load_album": "Det gick inte att ladda albumet",
"unable_to_load_asset_activity": "",
"unable_to_load_items": "",
"unable_to_load_liked_status": "",
"unable_to_load_items": "Kunde inte ladda objekt",
"unable_to_load_liked_status": "kunde inte ladda gillade status",
"unable_to_log_out_all_devices": "Det gick inte att logga ut alla enheter",
"unable_to_log_out_device": "Det gick inte att logga ut enheten",
"unable_to_login_with_oauth": "Det gick inte att logga in med OAuth",
"unable_to_play_video": "Kunde inte spela upp video",
"unable_to_refresh_user": "",
"unable_to_remove_album_users": "",
"unable_to_reassign_assets_new_person": "Kunde inte tilldela objekt till en annan person",
"unable_to_refresh_user": "Kunde inte ladda om användaren",
"unable_to_remove_album_users": "Kunde inte ta bort personen från albumet",
"unable_to_remove_api_key": "Det gick inte att ta bort API Keyet",
"unable_to_remove_assets_from_shared_link": "Kunde inte ta bort objekt från delade länkar",
"unable_to_remove_comment": "",
"unable_to_remove_deleted_assets": "Kunde inte ta bort offline filer",
"unable_to_remove_library": "Kunde inte ta bort bibliotek",
"unable_to_remove_partner": "Kunde inte ta bort partner",
"unable_to_remove_reaction": "Kunde inte ta bort reaktion",
"unable_to_remove_user": "",
"unable_to_repair_items": "",
"unable_to_repair_items": "kunde inte reparera objekt",
"unable_to_reset_password": "Kunde inte återställa lösenord",
"unable_to_resolve_duplicate": "",
"unable_to_restore_assets": "",
@@ -1088,6 +1102,7 @@
"view_album": "Visa Album",
"view_all": "Visa alla",
"view_all_users": "Visa alla användare",
"view_in_timeline": "Visa i tidslinjen",
"view_links": "Visa länkar",
"view_next_asset": "Visa nästa objekt",
"view_previous_asset": "Visa föregående objekt",

File diff suppressed because it is too large Load Diff

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