Compare commits

...

87 Commits

Author SHA1 Message Date
midzelis
19f276b543 feat: socket.io redis->postgres socket.io, add broadcastchannel option 2026-02-14 18:50:30 +00:00
Min Idzelis
2c9d69865c fix: e2e exit 135 (#26214) 2026-02-14 12:51:54 -05:00
bo0tzz
72cefcabaf chore: discourage LLM-generated PRs (#26211)
* chore: discourage LLM-generated PRs

* chore: add reading CONTRIBUTING.md to PR checklist

* chore: workflow to close LLM-generated PRs
2026-02-14 10:40:27 -06:00
Xantin
2fb9f84b56 refactor(i18n): Follow IETF standard (#26171)
* refactor(18n):  Follow IETF standard

Rename zh_SIMPLIFIED to zh_Hans

Makes it easier to merge #21337

* fix(web): zh_SIMPLIFIED -> zh_Hans
2026-02-13 18:47:41 +01:00
Weblate (bot)
434ded92f5 chore(web): update translations (#26167)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
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/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ga/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
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/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/yue_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translation: Immich/immich

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Happy <59247878+happy2452354@users.noreply.github.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Kuba <kubaant@gmail.com>
Co-authored-by: Matjaž T. <matjaz@moj-svet.si>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Ulices <hasecilu@tuta.io>
Co-authored-by: Yu-Hsuan Liao <EMC521@outlook.com>
Co-authored-by: albanobattistella <albano_battistella@hotmail.com>
Co-authored-by: jcreusand <joan.creusandreu@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Óscar Fernández Díaz <42654671+oscfdezdz@users.noreply.github.com>
2026-02-13 17:45:35 +00:00
agent-steven
bc7a1c838c fix(web): add checkerboard background for transparent images (#26091)
Co-authored-by: steven94kr <rlgns98kr@gmail.com>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2026-02-13 17:18:44 +00:00
Daniel Dietzler
7cb355279e chore: remove asset stubs (#26187) 2026-02-13 11:00:31 -05:00
Nykri
ecb09501a5 feat(cli): change progress bar to display file size (#23328)
* Change progress bar to display file size

* Solved lint errors
2026-02-13 10:22:00 -05:00
Michel Heusschen
34eb2e1410 fix(web): timeline multi select group state (#26180) 2026-02-13 08:34:15 -05:00
shenlong
2d6580acd8 feat(mobile): dynamic layout in new timeline (#23837)
* feat(mobile): dynamic layout in new timeline

* simplify _buildAssetRow

* auto dynamic mode on smaller column count

* auto layout on smaller tiles

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-13 09:15:42 +05:30
Yaros
9aa3fe82c1 fix(mobile): inconsistent query for people (#24437)
* fix(mobile): inconsistent query for people

* refactor: implement suggestions

* refactor: refactored query impl suggestions
2026-02-13 09:13:21 +05:30
Arne Schwarck
66733eb4c0 feat: add people deeplink (#25686)
* Change path prefix from '/memories/' to '/people/'

Updated the AndroidManifest.xml to change the path prefix from '/memories/' to '/people/'.
Memories is anyway wrong and was replaced by /memory
and now the people path completes the known deeplinks.

* Add regex for people deep link handling

Add regex for people deep link handling

* Add deep link handling for 'people' route

* fix: missing person route builder method

---------

Co-authored-by: bwees <brandonwees@gmail.com>
2026-02-13 09:13:04 +05:30
Thomas
e5156df4f1 fix(mobile): hide latest version warnings (#26036)
The latest version is already hidden in the server info widget if
disabled (https://github.com/immich-app/immich/pull/25691), however I
did not realise there are more places where this warning is shown. This
hides the warning everywhere, and cleans up the code a bit.
2026-02-13 08:15:25 +05:30
Jason Rasmussen
8ef4e4d452 feat: schema-check (#25904) 2026-02-12 17:59:00 -05:00
Christos Longros
7413356a2f fix: clarify external domain translation (#26009)
* fix: clarify external domain setting is used for emails too (#24950)

* Update i18n/en.json

Co-authored-by: Jason Rasmussen <jason@rasm.me>

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-12 14:01:51 -05:00
Jason Rasmussen
5bf4e9595c refactor: purchase store (#25734) 2026-02-12 13:32:17 -05:00
renovate[bot]
6c0c4b3dda chore(deps): update docker.io/valkey/valkey:9 docker digest to 930b414 (#26087)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-12 12:36:46 -05:00
Yaros
206a208410 feat(web): change link expiration logic & presets (#26064)
* feat(web): link expiration presets

* refactor: implement suggestions

* chore: remove createdAt prop

* fix: tests

* fix: button keys
2026-02-12 18:27:49 +01:00
Jason Rasmussen
72cef8b94b feat: shared link login (#25678) 2026-02-12 12:08:38 -05:00
Jason Rasmussen
81c93101a0 feat: verify permissions (#25647) 2026-02-12 12:08:20 -05:00
Christos Longros
b06c21325e fix(mobile): prevent nav bar label text wrapping (#26011)
* fix(mobile): prevent nav bar label text wrapping (#25921)

* chore: fix format

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-12 16:57:03 +00:00
Bastian Köcher
730b770e67 fix(mobile): timeline orientation & foldable phones handling (#25088)
* [mobile]: Fix timeline handling on foldable phones + ensuring that images are not cut off

This fixes the handling of unfolding the phone while having the application opened. So,
the timeline is correctly rescaled and the current position is kept.
Besides that it fixes a bug with the ordering which lead to images being "cut off" at the right side
of the screen.

* refactor + cleanup

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-12 22:20:00 +05:30
Michel Heusschen
b85f6f3fce fix(web): add missing @immich/ui translations (#26143) 2026-02-12 16:42:35 +00:00
Min Idzelis
81f592ca52 feat: remove Cache API, rework preload(), cancel() and fetch() (#25289)
* feat: remove Cache API, rework preload(), cancel() and fetch()

perf - replace broadcast channel with direct postMessage

* remove sw response handling

* review comments
2026-02-12 11:25:20 -05:00
renovate[bot]
a62e8ed179 fix(deps): update typescript-projects (#25549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-02-12 16:24:04 +00:00
Michel Heusschen
1cf3a80840 fix(web): show correct assets in memory gallery (#26157) 2026-02-12 11:17:09 -05:00
Klenner Martins Barros
9f6dbf710c fix(web): improve api key modal responsiveness (#26151) 2026-02-12 17:13:09 +01:00
Michel Heusschen
f207f99e86 fix(web): prevent event manager from throwing error (#26156) 2026-02-12 11:09:15 -05:00
Thomas
0d35231dfd chore(mobile): cleanup server storage info (#26038)
The server storage info has a lot of whitespace due to the ListTile.
Converting it to be inline makes the styling appear more intentional.

There are also a few semantically relevant list items in the app bar
dialog which have been grouped together.
2026-02-12 21:09:55 +05:30
shenlong
675bbf3ac3 chore: remove unused key and fix casing for recent_albums (#24691)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-12 16:06:22 +01:00
Weblate (bot)
c45450b6ac chore(web): update translations (#26118)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Anton Palmqvist <apq@users.noreply.hosted.weblate.org>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Rishi <rishikesh.200@gmail.com>
Co-authored-by: TV Box <realceday.tvbox@gmail.com>
Co-authored-by: Vivek M <vivekmalhotra004@gmail.com>
Co-authored-by: WellsTsai <dan50907@gmail.com>
Co-authored-by: czlevi7 <czlevi7@gmail.com>
Co-authored-by: jässin <aouanijassin@gmail.com>
Co-authored-by: muziqaz <muziqaz@users.noreply.hosted.weblate.org>
Co-authored-by: pyccl <changcongliang@163.com>
2026-02-12 15:02:07 +00:00
renovate[bot]
fea6e8d9f3 chore(deps): update dependency python-multipart to v0.0.22 [security] (#25559) 2026-02-12 09:32:59 -05:00
renovate[bot]
27ebbab1d9 fix(deps): update dependency pillow to v12 [security] (#26142) 2026-02-12 09:32:17 -05:00
renovate[bot]
4647ecf2ea chore(deps): update machine-learning (#25067) 2026-02-12 09:31:13 -05:00
shenlong
78c8f1d5a9 chore: add indexes for foreign keys (#25925)
* chore: add indexes for foreign keys

* update idx_asset_face_person_id index

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-12 19:58:31 +05:30
shenlong
ec4de54ea2 fix: null local date time in timeline queries (#26133)
* fix: null local date time in timeline queries

* refactor effectiveCreatedAt

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-12 19:58:00 +05:30
Peter Ombodi
420cd5193b fix(mobile): Login routing on Splash screen (#26128)
* fix(mobile): fix Login routing on Splash screen

* fix(mobile): remove _duplicateGuard from the LoginRoute
revert changes in splash_screen

---------

Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com>
2026-02-12 19:57:43 +05:30
Daniel Dietzler
7e0356e227 refactor: more small tests (#26159) 2026-02-12 08:34:32 -05:00
Michel Heusschen
913904f418 fix(web): escape shortcut handling (#26096) 2026-02-11 18:55:28 +01:00
Daniel Dietzler
e54678e0d6 refactor: small tests (#26141) 2026-02-11 11:49:00 -05:00
Daniel Dietzler
222c90b7b7 chore: remove album stubs (#26130) 2026-02-11 09:12:46 -05:00
Michel Heusschen
1c1a000c78 fix(web): use locale for date picker (#26125) 2026-02-11 11:39:30 +01:00
Jason Rasmussen
458d5f0f8f fix: ignore checksum constraint error when logging (#26113) 2026-02-10 20:43:55 +00:00
Jason Rasmussen
4c948647fc chore: asset-job medium tests (#26111) 2026-02-10 13:41:40 -05:00
github-actions
3be8e265cd chore: version v2.5.6 2026-02-10 18:24:40 +00:00
Weblate (bot)
e3c4e0197a chore(web): update translations (#25947)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de_CH/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/eo/
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/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ga/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
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/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ka/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/kn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
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/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sq/
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/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/yue_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Adam Havránek <adamhavra@seznam.cz>
Co-authored-by: Ahmed Khaleel Shihab <ahmed91shihab@gmail.com>
Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Arif Budiman <arifpedia@gmail.com>
Co-authored-by: Arnie97 <arnie97@gmail.com>
Co-authored-by: David Krizak <lavidk@icloud.com>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Gautam Pai <gautam.gp4207@gmail.com>
Co-authored-by: Gilgalard Elendil <Gilgalard11@gmail.com>
Co-authored-by: Gisle-Andre Larsen <gisleandre@hotmail.com>
Co-authored-by: Guillaume Petit <gpetit@edelzone.fr>
Co-authored-by: Guillermo Ramos Santos <guillermo.ramosantos@gmail.com>
Co-authored-by: HackingAll <hacking.all.YT@gmail.com>
Co-authored-by: Hans Cats <hanscats@gmail.com>
Co-authored-by: Happy <59247878+happy2452354@users.noreply.github.com>
Co-authored-by: Haru Ijima <haruijimakun@gmail.com>
Co-authored-by: Hurricane_32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Ivan Dimitrov <idimitrov08@gmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Julius Lehmann <julius.lehmann.privat@gmail.com>
Co-authored-by: Luuk Heijnen <luukheijnen1@gmail.com>
Co-authored-by: MarcSerraPeralta <marcserraperalta@gmail.com>
Co-authored-by: Masani Amin Yasin <langugetranslategay.taps663@silomails.com>
Co-authored-by: Matjaž T. <matjaz@moj-svet.si>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Olaf Nielsen <solluh@mail.de>
Co-authored-by: Oleksandr Yurov <oyurov@icloud.com>
Co-authored-by: Philipp Frauenfelder <philipp.frauenfelder@gmail.com>
Co-authored-by: Reetryyy <kaxa.kikalishvili.kk@gmail.com>
Co-authored-by: Romo <romo@romo.al>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Skanda <skillwiz94@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TV Box <realceday.tvbox@gmail.com>
Co-authored-by: Tage Lauritsen <tage@tunenet.dk>
Co-authored-by: Tim Morley <weblate.3919org@timsk.org>
Co-authored-by: Ulices <hasecilu@tuta.io>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: Veerasak Kritsanapraphan <veerasak.kritsanapraphan@gmail.com>
Co-authored-by: albanobattistella <albano_battistella@hotmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: dvbthien <dvbthien@users.noreply.hosted.weblate.org>
Co-authored-by: ea stanley <hang4ea@gmail.com>
Co-authored-by: muziqaz <muziqaz@users.noreply.hosted.weblate.org>
Co-authored-by: nobo73 <noboru.tanaka@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Óscar Fernández Díaz <42654671+oscfdezdz@users.noreply.github.com>
2026-02-10 18:22:41 +00:00
Nicolò Maria Semprini
1ddb8f0667 feat: jxl browser support detection (#25599) 2026-02-10 12:49:09 -05:00
Alex
adfb003d03 fix: local date time group fall back (#26110)
* fix: local date time group fall back

* remove else clause
2026-02-10 11:47:13 -06:00
Brandon Wees
8c8b11f80c fix: person thumbnail generation on edited assets (#26112)
* fix: person thumbnail generation on edited assets

* chore: sql sync
2026-02-10 11:38:43 -06:00
Claudio
90d554947f docs: update ml-hardware-acceleration.md (#25755)
Update ml-hardware-acceleration.md

Invert the lines about editing the docker-compose.yml file to have users add the tag to the image first, then uncomment the extends section. This should help users follow the instructions as they flow through the YAML file.
2026-02-10 12:28:21 -05:00
Paul Makles
caeba5063b refactor(server): move database restores code into a service (#25918)
* fix(server): use provided database name/username for restore & ensure name is not mangled

fixes #25633

Signed-off-by: izzy <me@insrt.uk>

* chore: add db switch back but with comments

Signed-off-by: izzy <me@insrt.uk>

* refactor: no need to restore database since it's not technically possible
chore: late fallback for username in parameter builder

Signed-off-by: izzy <me@insrt.uk>

* chore: type fix

Signed-off-by: izzy <me@insrt.uk>

* refactor: move db backup code into service

* test: check SQL sent to psql

* chore: remove todo

Signed-off-by: izzy <me@insrt.uk>

---------

Signed-off-by: izzy <me@insrt.uk>
2026-02-10 12:12:27 -05:00
Matthew Momjian
280174026f feat(deployment): rootless compose file (#25931)
rootless deployment
2026-02-10 12:11:44 -05:00
Michel Heusschen
a9e0fa43fa fix: correctly cancel select all assets (#26067) 2026-02-10 11:47:23 -05:00
Jason Rasmussen
e6e56d75e2 fix(web): refresh text (#26071) 2026-02-10 16:42:03 +00:00
Brandon Wees
0886281dd8 fix: create face exif orientation handling (#26108)
* fix: handle exif orientation when creating face

* chore: tests
2026-02-10 11:30:34 -05:00
renovate[bot]
32dea76a92 chore(deps): update dependency @types/node to ^24.10.11 (#26088)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 11:24:33 -05:00
Min Idzelis
6af534fe4c feat: run maintenance tests in isolation, share containers between all … (#25856)
* feat: run maintance tests in isolation, share containers between all serial test suites

* refactor: organize files

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-10 11:05:06 -05:00
Daniel Dietzler
71fe9192fd chore: metadata extraction date test (#26102) 2026-02-10 10:05:05 -05:00
Mert
7fa6f617f5 fix(server): thumbnail queueing (#26077)
* fix thumbnail queueing

* add bmp

* other isEdited column
2026-02-10 09:04:03 -06:00
Thomas
c3730c8eab chore(mobile): enable high refresh rate in debug builds (#26085)
I'm testing changes to animations and app performance, and noticed it
felt quite sluggish on a 120hz display. It turns out that high refresh
is disabled in debug builds. It's probably a good idea to enable it so
that it more closely mirrors the production build.
2026-02-10 03:51:33 +00:00
Luis Nachtigall
3462fc434e fix: evict image from cache on error during image loading (#26078) 2026-02-09 17:01:10 -05:00
Luis Nachtigall
561469b826 fix(mobile): handle image stream completion when no image is emitted (#25984)
* Fix image cancellation to be stream-scoped instead of widget-scoped

* fix(OneFramePlaceholderImageStreamCompleter): make onLastListenerRemoved callback synchronous with removing the last listener

* fix(OneFrameMultiImageStreamCompleter): remove unnecessary blank line in code

* fix(OneFramePlaceholderImageStreamCompleter): cancel pending requests when only cache listener remains

* fix(OneFrameMultiImageStreamCompleter): ensure onLastListenerRemoved callback is invoked only once
2026-02-09 16:59:29 -05:00
bo0tzz
937bef9a4d fix: run rocm builds on pokedex (#26062)
* fix: run rocm builds on pokedex

* fix: --parallel 48 (#26065)
2026-02-09 15:06:05 -05:00
dolfje
5f18110e97 fix(web): removing a person in an asset, doesn't remove the asset in … (#26068)
* fix(web): removing a person in an asset, doesn't remove the asset in the persons view (without refresh)

* prettier

---------

Co-authored-by: Nikos Verschore <nikos@uwsoftware.be>
2026-02-09 11:51:02 -06:00
Alex
57485023ae fix: free up space using small batch size to reliably work on Android (#26047)
* fix: free up space delete in small batch

* fix: free up space delete in small batch
2026-02-09 11:48:55 -06:00
Michel Heusschen
8a9b541dd0 fix: slideshow setting dropdown overflow (#26066) 2026-02-09 09:28:47 -06:00
Justin Xiao
25be5fc22d fix(web): prevent context menu from overflowing viewport (#26041)
* fix(web): prevent context menu from overflowing viewport

The context menu used `max-h-dvh` (100% viewport height) as its max height,
but did not account for the menu's top position. When the menu opens at
y > 0, its bottom extends beyond the viewport.

Compute `maxHeight` dynamically based on the menu's top position and apply
it as an inline style, so the menu always fits within the viewport and
scrolls when content exceeds the available space.

* fix: linting

* fix: overflow

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-09 09:26:25 -06:00
Alex
906c38273f fix: profile dialog auto dismiss after opening on iPad (#26046) 2026-02-08 17:30:57 -06:00
Alex
10b2bf7970 fix: iOS slow start (#26043) 2026-02-08 16:28:51 -06:00
Kolin
7cf8a9936a fix(web): display storage unit next to value instead of absolute positioning in admin user page (#25985)
* fix(web): display storage unit next to value instead of absolute positioning in admin user page

* chore: styling

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2026-02-08 17:22:42 +00:00
Michel Heusschen
59c4a49ffd fix: scroll jump when opening show & hide people (#25932) 2026-02-08 11:19:35 -06:00
Yaros
00486cbcc8 fix(web): toast fixed location (#25966)
fix: toast fixed location
2026-02-08 11:15:09 -06:00
Michel Heusschen
b524d7b6fd fix: reduce queue graph jitter and include paused count (#26023)
fix: reduce queue graph jitter and show paused count
2026-02-08 11:03:59 -06:00
Michel Heusschen
5b705cb723 fix: improve albums page load time on firefox (#26025) 2026-02-08 11:03:17 -06:00
Luis Nachtigall
354dd3cc3c feat(mobile): enhance album sorting functionality with order handling (#24816)
* feat: enhance album sorting functionality with effective order handling

* mobile: formatting

* test: align album sorting order in unit tests with defaultSortOrder

* test(mobile): add reverse order validation for album sorting

* chore(PR): remove OppositeSortOrder Extension and move it directly into SortOrder enum

* refactor: return sorted list directly in album sorting function

* refactor: remove sort_order_extensions.dart
2026-02-07 10:11:37 +05:30
shenlong
57483a1e7f fix: user profile refetched each time on opening app dialog (#25992)
fix: user profile on opening app dialog

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-07 10:10:17 +05:30
Romo
bcea64875f fix: image and video download complete notification shows "file_name" (#25975)
* fix: image and video download complete notification shows "file_name"

* fix lint

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-02-07 02:56:14 +00:00
Matthew Momjian
84e30abe5d feat(docs): version policy (#25979)
version policy
2026-02-06 20:31:57 -05:00
Jason Rasmussen
e3e243fa2b refactor: tests (#25987) 2026-02-07 00:47:54 +01:00
Jason Rasmussen
b3820c259e refactor: test factories (#25977) 2026-02-06 16:32:50 -05:00
Daniel Dietzler
a356497d96 refactor: album service small tests (#25640) 2026-02-06 08:56:46 -05:00
Michel Heusschen
16fe828913 fix: revert "fix(web): Ensure profile picture is cropped to 1:1 ratio (#25892)" (#25956)
Revert "fix(web): Ensure profile picture is cropped to 1:1 ratio (#25892)"

This reverts commit 3c77c724c5.
2026-02-06 08:21:56 -05:00
Michel Heusschen
211dc3c056 fix: add missing translations for image editor (#25957) 2026-02-06 13:08:24 +01:00
github-actions
ff9052f7f5 chore: version v2.5.5 2026-02-06 03:49:02 +00:00
Aditya Gaurav
999ce34251 fix(web): avoid transparent pixels from rounded-full during profile picture capture (#25950)
The cropContainer has rounded-full class which creates transparent
corners when captured by domtoimage.toBlob(). Override border-radius
and border to 0/none during capture to produce a clean square image.

Co-authored-by: Aditya Gaurav <aditya-ai-architect@users.noreply.github.com>
2026-02-06 03:21:27 +00:00
Vahant Sharma
491ed3d927 fix(cli): suppress startup messages for immich-admin (#25928)
fix(server): suppress startup messages for immich-admin CLI Introduce a log_message() helper function with QUIET flag to suppress informational startup output when running immich-admin. This prevents both shell messages and Node.js WASI experimental warnings from interfering with CLI help output. Fixes: #25909
2026-02-05 18:34:15 -05:00
Jason Rasmussen
94e86c6e76 fix: dedupe version announcement modal (#25946)
fix: version announcement modal
2026-02-05 16:24:10 -05:00
442 changed files with 22261 additions and 10977 deletions

View File

@@ -26,6 +26,7 @@ The `/api/something` endpoint is now `/api/something-else`
## Checklist:
- [ ] I have carefully read CONTRIBUTING.md
- [ ] I have performed a self-review of my own code
- [ ] I have made corresponding changes to the documentation if applicable
- [ ] I have no unrelated changes in the PR.

38
.github/workflows/close-llm-pr.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
name: Close LLM-generated PRs
on:
pull_request:
types: [labeled]
permissions: {}
jobs:
comment_and_close:
runs-on: ubuntu-latest
if: ${{ github.event.label.name == 'llm-generated' }}
permissions:
pull-requests: write
steps:
- name: Comment and close
env:
GH_TOKEN: ${{ github.token }}
NODE_ID: ${{ github.event.pull_request.node_id }}
run: |
gh api graphql \
-f prId="$NODE_ID" \
-f body="Thank you for your interest in contributing to Immich! Unfortunately this PR looks like it was generated using an LLM. As noted in our CONTRIBUTING.md, we request that you don't use LLMs to generate PRs as those are not a good use of maintainer time." \
-f query='
mutation CommentAndClosePR($prId: ID!, $body: String!) {
addComment(input: {
subjectId: $prId,
body: $body
}) {
__typename
}
closePullRequest(input: {
pullRequestId: $prId
}) {
__typename
}
}'

View File

@@ -131,7 +131,7 @@ jobs:
- device: rocm
suffixes: '-rocm'
platforms: linux/amd64
runner-mapping: '{"linux/amd64": "mich"}'
runner-mapping: '{"linux/amd64": "pokedex-giant"}'
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@0477486d82313fba68f7c82c034120a4b8981297 # multi-runner-build-workflow-v2.1.0
permissions:
contents: read

View File

@@ -497,14 +497,15 @@ jobs:
run: npx playwright install chromium --only-shell
if: ${{ !cancelled() }}
- name: Docker build
run: docker compose build
run: docker compose up -d --build --renew-anon-volumes --force-recreate --remove-orphans --wait --wait-timeout 300
if: ${{ !cancelled() }}
- name: Run e2e tests (web)
env:
CI: true
run: npx playwright test --project=chromium
PLAYWRIGHT_DISABLE_WEBSERVER: true
run: npx playwright test --project=web
if: ${{ !cancelled() }}
- name: Archive web results
- name: Archive e2e test (web) results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: success() || failure()
with:
@@ -513,14 +514,37 @@ jobs:
- name: Run ui tests (web)
env:
CI: true
PLAYWRIGHT_DISABLE_WEBSERVER: true
run: npx playwright test --project=ui
if: ${{ !cancelled() }}
- name: Archive ui results
- name: Archive ui test (web) results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: success() || failure()
with:
name: e2e-ui-test-results-${{ matrix.runner }}
path: e2e/playwright-report/
- name: Run maintenance tests
env:
CI: true
PLAYWRIGHT_DISABLE_WEBSERVER: true
run: npx playwright test --project=maintenance
if: ${{ !cancelled() }}
- name: Archive maintenance tests (web) results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: success() || failure()
with:
name: e2e-maintenance-isolated-test-results-${{ matrix.runner }}
path: e2e/playwright-report/
- name: Capture Docker logs
if: always()
run: docker compose logs --no-color > docker-compose-logs.txt
working-directory: ./e2e
- name: Archive Docker logs
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: always()
with:
name: docker-compose-logs-${{ matrix.runner }}
path: e2e/docker-compose-logs.txt
success-check-e2e:
name: End-to-End Tests Success
needs: [e2e-tests-server-cli, e2e-tests-web]

View File

@@ -17,7 +17,7 @@ If you are looking for something to work on, there are discussions and issues wi
## Use of generative AI
We generally discourage PRs entirely generated by an LLM. For any part generated by an LLM, please put extra effort into your self-review. By using generative AI without proper self-review, the time you save ends up being more work we need to put in for proper reviews and code cleanup. Please keep that in mind when submitting code by an LLM. Clearly state the use of LLMs/(generative) AI in your pull request as requested by the template.
We ask you not to open PRs generated with an LLM. We find that code generated like this tends to need a large amount of back-and-forth, which is a very inefficient use of our time. If we want LLM-generated code, it's much faster for us to use an LLM ourselves than to go through an intermediary via a pull request.
## Feature freezes

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.5.4",
"version": "2.5.6",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",
@@ -20,7 +20,7 @@
"@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1",
"@types/node": "^24.10.9",
"@types/node": "^24.10.11",
"@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0",
"cli-progress": "^3.12.0",

View File

@@ -4,6 +4,7 @@ import {
AssetBulkUploadCheckResult,
AssetMediaResponseDto,
AssetMediaStatus,
Permission,
addAssetsToAlbum,
checkBulkUpload,
createAlbum,
@@ -20,13 +21,11 @@ import { Stats, createReadStream } from 'node:fs';
import { stat, unlink } from 'node:fs/promises';
import path, { basename } from 'node:path';
import { Queue } from 'src/queue';
import { BaseOptions, Batcher, authenticate, crawl, sha1 } from 'src/utils';
import { BaseOptions, Batcher, authenticate, crawl, requirePermissions, s, sha1 } from 'src/utils';
const UPLOAD_WATCH_BATCH_SIZE = 100;
const UPLOAD_WATCH_DEBOUNCE_TIME_MS = 10_000;
const s = (count: number) => (count === 1 ? '' : 's');
// TODO figure out why `id` is missing
type AssetBulkUploadCheckResults = Array<AssetBulkUploadCheckResult & { id: string }>;
type Asset = { id: string; filepath: string };
@@ -136,6 +135,7 @@ export const startWatch = async (
export const upload = async (paths: string[], baseOptions: BaseOptions, options: UploadOptionsDto) => {
await authenticate(baseOptions);
await requirePermissions([Permission.AssetUpload]);
const scanFiles = await scan(paths, options);
@@ -180,18 +180,49 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
}
let multiBar: MultiBar | undefined;
let totalSize = 0;
const statsMap = new Map<string, Stats>();
// Calculate total size first
for (const filepath of files) {
const stats = await stat(filepath);
statsMap.set(filepath, stats);
totalSize += stats.size;
}
if (progress) {
multiBar = new MultiBar(
{ format: '{message} | {bar} | {percentage}% | ETA: {eta}s | {value}/{total} assets' },
{
format: '{message} | {bar} | {percentage}% | ETA: {eta_formatted} | {value}/{total}',
formatValue: (v: number, options, type) => {
// Don't format percentage
if (type === 'percentage') {
return v.toString();
}
return byteSize(v).toString();
},
etaBuffer: 100, // Increase samples for ETA calculation
},
Presets.shades_classic,
);
// Ensure we restore cursor on interrupt
process.on('SIGINT', () => {
if (multiBar) {
multiBar.stop();
}
process.exit(0);
});
} else {
console.log(`Received ${files.length} files, hashing...`);
console.log(`Received ${files.length} files (${byteSize(totalSize)}), hashing...`);
}
const hashProgressBar = multiBar?.create(files.length, 0, { message: 'Hashing files ' });
const checkProgressBar = multiBar?.create(files.length, 0, { message: 'Checking for duplicates' });
const hashProgressBar = multiBar?.create(totalSize, 0, {
message: 'Hashing files ',
});
const checkProgressBar = multiBar?.create(totalSize, 0, {
message: 'Checking for duplicates',
});
const newFiles: string[] = [];
const duplicates: Asset[] = [];
@@ -211,7 +242,13 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
}
}
checkProgressBar?.increment(assets.length);
// Update progress based on total size of processed files
let processedSize = 0;
for (const asset of assets) {
const stats = statsMap.get(asset.id);
processedSize += stats?.size || 0;
}
checkProgressBar?.increment(processedSize);
},
{ concurrency, retry: 3 },
);
@@ -221,6 +258,10 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
const queue = new Queue<string, AssetBulkUploadCheckItem[]>(
async (filepath: string): Promise<AssetBulkUploadCheckItem[]> => {
const stats = statsMap.get(filepath);
if (!stats) {
throw new Error(`Stats not found for ${filepath}`);
}
const dto = { id: filepath, checksum: await sha1(filepath) };
results.push(dto);
@@ -231,7 +272,7 @@ export const checkForDuplicates = async (files: string[], { concurrency, skipHas
void checkBulkUploadQueue.push(batch);
}
hashProgressBar?.increment();
hashProgressBar?.increment(stats.size);
return results;
},
{ concurrency, retry: 3 },

View File

@@ -1,7 +1,15 @@
import { getMyUser } from '@immich/sdk';
import { getMyUser, Permission } from '@immich/sdk';
import { existsSync } from 'node:fs';
import { mkdir, unlink } from 'node:fs/promises';
import { BaseOptions, connect, getAuthFilePath, logError, withError, writeAuthFile } from 'src/utils';
import {
BaseOptions,
connect,
getAuthFilePath,
logError,
requirePermissions,
withError,
writeAuthFile,
} from 'src/utils';
export const login = async (url: string, key: string, options: BaseOptions) => {
console.log(`Logging in to ${url}`);
@@ -9,6 +17,7 @@ export const login = async (url: string, key: string, options: BaseOptions) => {
const { configDirectory: configDir } = options;
await connect(url, key);
await requirePermissions([Permission.UserRead]);
const [error, user] = await withError(getMyUser());
if (error) {

View File

@@ -1,8 +1,9 @@
import { getAssetStatistics, getMyUser, getServerVersion, getSupportedMediaTypes } from '@immich/sdk';
import { BaseOptions, authenticate } from 'src/utils';
import { getAssetStatistics, getMyUser, getServerVersion, getSupportedMediaTypes, Permission } from '@immich/sdk';
import { authenticate, BaseOptions, requirePermissions } from 'src/utils';
export const serverInfo = async (options: BaseOptions) => {
const { url } = await authenticate(options);
await requirePermissions([Permission.ServerAbout, Permission.AssetStatistics, Permission.UserRead]);
const [versionInfo, mediaTypes, stats, userInfo] = await Promise.all([
getServerVersion(),

View File

@@ -1,4 +1,4 @@
import { getMyUser, init, isHttpError } from '@immich/sdk';
import { ApiKeyResponseDto, getMyApiKey, getMyUser, init, isHttpError, Permission } from '@immich/sdk';
import { convertPathToPattern, glob } from 'fast-glob';
import { createHash } from 'node:crypto';
import { createReadStream } from 'node:fs';
@@ -34,6 +34,36 @@ export const authenticate = async (options: BaseOptions): Promise<AuthDto> => {
return auth;
};
export const s = (count: number) => (count === 1 ? '' : 's');
let _apiKey: ApiKeyResponseDto;
export const requirePermissions = async (permissions: Permission[]) => {
if (!_apiKey) {
_apiKey = await getMyApiKey();
}
if (_apiKey.permissions.includes(Permission.All)) {
return;
}
const missing: Permission[] = [];
for (const permission of permissions) {
if (!_apiKey.permissions.includes(permission)) {
missing.push(permission);
}
}
if (missing.length > 0) {
const combined = missing.map((permission) => `"${permission}"`).join(', ');
console.log(
`Missing required permission${s(missing.length)}: ${combined}.
Please make sure your API key has the correct permissions.`,
);
process.exit(1);
}
};
export const connect = async (url: string, key: string) => {
const wellKnownUrl = new URL('.well-known/immich', url);
try {

View File

@@ -127,7 +127,7 @@ services:
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:546304417feac0874c3dd576e0952c6bb8f06bb4093ea0c9ca303c73cf458f63
image: docker.io/valkey/valkey:9@sha256:930b41430fb727f533c5982fe509b6f04233e26d0f7354e04de4b0d5c706e44e
healthcheck:
test: redis-cli ping || exit 1

View File

@@ -56,7 +56,7 @@ services:
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:546304417feac0874c3dd576e0952c6bb8f06bb4093ea0c9ca303c73cf458f63
image: docker.io/valkey/valkey:9@sha256:930b41430fb727f533c5982fe509b6f04233e26d0f7354e04de4b0d5c706e44e
healthcheck:
test: redis-cli ping || exit 1
restart: always

View File

@@ -0,0 +1,100 @@
#
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
user: '1000:1000'
security_opt:
- no-new-privileges:true
cap_drop:
- NET_RAW
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
user: '1000:1000'
security_opt:
- no-new-privileges:true
cap_drop:
- NET_RAW
volumes:
- ./ml-model-cache:/cache
- ./ml-dotcache:/.cache
- ./ml-config:/.config
env_file:
- .env
restart: always
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:930b41430fb727f533c5982fe509b6f04233e26d0f7354e04de4b0d5c706e44e
user: '1000:1000'
security_opt:
- no-new-privileges:true
cap_drop:
- NET_RAW
volumes:
- ./redis:/data
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
user: '1000:1000'
security_opt:
- no-new-privileges:true
cap_drop:
- NET_RAW
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
healthcheck:
disable: false
volumes:
model-cache:

View File

@@ -49,7 +49,7 @@ services:
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:546304417feac0874c3dd576e0952c6bb8f06bb4093ea0c9ca303c73cf458f63
image: docker.io/valkey/valkey:9@sha256:930b41430fb727f533c5982fe509b6f04233e26d0f7354e04de4b0d5c706e44e
healthcheck:
test: redis-cli ping || exit 1
restart: always

View File

@@ -402,6 +402,9 @@ To decrease Redis logs, you can add the following line to the `redis:` section o
### How can I run Immich as a non-root user?
You can change the user in the container by setting the `user` argument in `docker-compose.yml` for each service.
[Example docker-compose.yml file](https://github.com/immich-app/immich/blob/main/docker/docker-compose.rootless.yml)
You may need to add mount points or docker volumes for the following internal container paths:
- `immich-machine-learning:/.config`

View File

@@ -86,8 +86,8 @@ You do not need to redo any machine learning jobs after enabling hardware accele
## Setup
1. If you do not already have it, download the latest [`hwaccel.ml.yml`][hw-file] file and ensure it's in the same folder as the `docker-compose.yml`.
2. In the `docker-compose.yml` under `immich-machine-learning`, uncomment the `extends` section and change `cpu` to the appropriate backend.
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, rocm, openvino, rknn] to the `image` section's tag at the end of the line.
2. In `immich-machine-learning`, add one of -[armnn, cuda, rocm, openvino, rknn] to the `image` section's tag at the end of the line.
3. Still in the `docker-compose.yml` under `immich-machine-learning`, uncomment the `extends` section and change `cpu` to the appropriate backend.
4. Redeploy the `immich-machine-learning` container with these updated settings.
### Confirming Device Usage

View File

@@ -66,7 +66,7 @@ Now make sure that the local album is selected in the backup screen (steps 1-2 a
- **Keep on device:** You can choose to restrict removal to `Always keep` **All photos** or **All videos**, regardless of other settings. This setting can hamper freeing up space significantly — with 80 GB of videos and 40 GB photos, selecting `Always keep photos` retains thousands of photos on your device.
2. **Scan & Review:** Before any files are removed, you are presented with a review screen to verify which items will be deleted and how much storage is reclamable.
3. **Deletion:** Confirmed items are moved to your device's native Trash/Recycle Bin.
3. **Deletion:** Confirmed items are moved to your device's native Trash/Recycle Bin. For large queues, Immich processes deletion in batches for stability (`2000` assets per batch on Android, `10000` per batch on iOS).
:::info reclaim storage
To use the reclaimed space right away, you must empty the system/gallery trash manually outside of Immich.

View File

@@ -26,6 +26,16 @@ docker image prune
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
[releases]: https://github.com/immich-app/immich/releases
## Versioning Policy
Immich follows [semantic versioning][semver], which tags releases in the format `<major>.<minor>.<patch>`. We intend for breaking changes to be limited to major version releases.
You can configure your Docker image to point to the current major version by using a metatag, such as `:v2`.
Currently, we have no plans to backport patches to earlier versions. We encourage all users to run the most recent release of Immich.
Switching back to an earlier version, even within the same minor release tag, is not supported.
[semver]: https://semver.org/
## Migrating to VectorChord
:::info

View File

@@ -32,3 +32,7 @@ If you would like to migrate from one media location to another, simply successf
4. Start up Immich
After version `1.136.0`, Immich can detect when a media location has moved and will automatically update the database paths to keep them in sync.
## Schema drift
Schema drift is when the database schema is out of sync with the code. This could be the result of manual database tinkering, issues during a database restore, or something else. Schema drift can lead to data corruption, application bugs, and other unpredictable behavior. Please reconcile the differences as soon as possible. Specifically, missing `CONSTRAINT`s can result in duplicate assets being uploaded, since the server relies on a checksum `CONSTRAINT` to prevent duplicates.

View File

@@ -1,7 +1,7 @@
[
{
"label": "v2.5.4",
"url": "https://docs.v2.5.4.archive.immich.app"
"label": "v2.5.6",
"url": "https://docs.v2.5.6.archive.immich.app"
},
{
"label": "v2.4.1",

View File

@@ -10,6 +10,7 @@ services:
immich-server:
container_name: immich-e2e-server
image: immich-server:latest
shm_size: 128mb
build:
context: ../
dockerfile: server/Dockerfile
@@ -53,6 +54,7 @@ services:
POSTGRES_DB: immich
ports:
- 5435:5432
shm_size: 128mb
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres -d immich']
interval: 1s

View File

@@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "2.5.4",
"version": "2.5.6",
"description": "",
"main": "index.js",
"type": "module",
@@ -27,7 +27,7 @@
"@playwright/test": "^1.44.1",
"@socket.io/component-emitter": "^3.1.2",
"@types/luxon": "^3.4.2",
"@types/node": "^24.10.9",
"@types/node": "^24.10.11",
"@types/pg": "^8.15.1",
"@types/pngjs": "^6.0.4",
"@types/supertest": "^6.0.2",

View File

@@ -14,7 +14,8 @@ export const playwrightDisableWebserver = process.env.PLAYWRIGHT_DISABLE_WEBSERV
process.env.PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS = '1';
const config: PlaywrightTestConfig = {
testDir: './src/web/specs',
testDir: './src/specs/server',
testMatch: /.*\.e2e-spec\.ts/,
fullyParallel: false,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 4 : 0,
@@ -28,54 +29,28 @@ const config: PlaywrightTestConfig = {
},
},
testMatch: /.*\.e2e-spec\.ts/,
workers: process.env.CI ? 4 : Math.round(cpus().length * 0.75),
projects: [
{
name: 'chromium',
name: 'web',
use: { ...devices['Desktop Chrome'] },
testMatch: /.*\.e2e-spec\.ts/,
testDir: './src/specs/web',
workers: 1,
},
{
name: 'ui',
use: { ...devices['Desktop Chrome'] },
testMatch: /.*\.ui-spec\.ts/,
testDir: './src/ui/specs',
fullyParallel: true,
workers: process.env.CI ? 3 : Math.max(1, Math.round(cpus().length * 0.75) - 1),
},
// {
// name: 'firefox',
// use: { ...devices['Desktop Firefox'] },
// },
// {
// name: 'webkit',
// use: { ...devices['Desktop Safari'] },
// },
/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },
/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
{
name: 'maintenance',
use: { ...devices['Desktop Chrome'] },
testDir: './src/specs/maintenance',
workers: 1,
},
],
/* Run your local dev server before starting the tests */

View File

@@ -43,10 +43,10 @@ export const errorDto = {
message: 'Invalid share key',
correlationId: expect.any(String),
},
invalidSharePassword: {
passwordRequired: {
error: 'Unauthorized',
statusCode: 401,
message: 'Invalid password',
message: 'Password required',
correlationId: expect.any(String),
},
badRequest: (message: any = null) => ({

View File

@@ -239,7 +239,7 @@ describe('/shared-links', () => {
const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithPassword.key });
expect(status).toBe(401);
expect(body).toEqual(errorDto.invalidSharePassword);
expect(body).toEqual(errorDto.passwordRequired);
});
it('should get data for correct password protected link', async () => {

View File

@@ -1,9 +1,9 @@
import { faker } from '@faker-js/faker';
import { MemoryType, type MemoryResponseDto, type OnThisDayDto } from '@immich/sdk';
import { DateTime } from 'luxon';
import { toAssetResponseDto } from 'src/generators/timeline/rest-response';
import type { MockTimelineAsset } from 'src/generators/timeline/timeline-config';
import { SeededRandom, selectRandomMultiple } from 'src/generators/timeline/utils';
import { toAssetResponseDto } from 'src/ui/generators/timeline/rest-response';
import type { MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config';
import { SeededRandom, selectRandomMultiple } from 'src/ui/generators/timeline/utils';
export type MemoryConfig = {
id?: string;

View File

@@ -1,5 +1,5 @@
import { generateConsecutiveDays, generateDayAssets } from 'src/generators/timeline/model-objects';
import { SeededRandom, selectRandomDays } from 'src/generators/timeline/utils';
import { generateConsecutiveDays, generateDayAssets } from 'src/ui/generators/timeline/model-objects';
import { SeededRandom, selectRandomDays } from 'src/ui/generators/timeline/utils';
import type { MockTimelineAsset } from './timeline-config';
import { GENERATION_CONSTANTS } from './timeline-config';

View File

@@ -1,5 +1,5 @@
import sharp from 'sharp';
import { SeededRandom } from 'src/generators/timeline/utils';
import { SeededRandom } from 'src/ui/generators/timeline/utils';
export const randomThumbnail = async (seed: string, ratio: number) => {
const height = 235;

View File

@@ -6,7 +6,7 @@ import { faker } from '@faker-js/faker';
import { AssetVisibility } from '@immich/sdk';
import { DateTime } from 'luxon';
import { writeFileSync } from 'node:fs';
import { SeededRandom } from 'src/generators/timeline/utils';
import { SeededRandom } from 'src/ui/generators/timeline/utils';
import type { DayPattern, MonthDistribution } from './distribution-patterns';
import { ASSET_DISTRIBUTION, DAY_DISTRIBUTION } from './distribution-patterns';
import type { MockTimelineAsset, MockTimelineData, SerializedTimelineData, TimelineConfig } from './timeline-config';

View File

@@ -15,7 +15,7 @@ import {
} from '@immich/sdk';
import { DateTime } from 'luxon';
import { signupDto } from 'src/fixtures';
import { parseTimeBucketKey } from 'src/generators/timeline/utils';
import { parseTimeBucketKey } from 'src/ui/generators/timeline/utils';
import type { MockTimelineAsset, MockTimelineData } from './timeline-config';
/**

View File

@@ -1,5 +1,5 @@
import type { AssetVisibility } from '@immich/sdk';
import { DayPattern, MonthDistribution } from 'src/generators/timeline/distribution-patterns';
import { DayPattern, MonthDistribution } from 'src/ui/generators/timeline/distribution-patterns';
// Constants for generation parameters
export const GENERATION_CONSTANTS = {

View File

@@ -1,5 +1,5 @@
import { DateTime } from 'luxon';
import { GENERATION_CONSTANTS, MockTimelineAsset } from 'src/generators/timeline/timeline-config';
import { GENERATION_CONSTANTS, MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config';
/**
* Linear Congruential Generator for deterministic pseudo-random numbers

View File

@@ -10,8 +10,8 @@ import {
randomPreview,
randomThumbnail,
TimelineData,
} from 'src/generators/timeline';
import { sleep } from 'src/web/specs/timeline/utils';
} from 'src/ui/generators/timeline';
import { sleep } from 'src/ui/specs/timeline/utils';
export class TimelineTestContext {
slowBucket = false;

View File

@@ -8,11 +8,11 @@ import {
selectRandom,
TimelineAssetConfig,
TimelineData,
} from 'src/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/mock-network/base-network';
import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network';
} from 'src/ui/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network';
import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network';
import { utils } from 'src/utils';
import { assetViewerUtils } from 'src/web/specs/timeline/utils';
import { assetViewerUtils } from '../timeline/utils';
test.describe.configure({ mode: 'parallel' });
test.describe('asset-viewer', () => {

View File

@@ -1,18 +1,18 @@
import { faker } from '@faker-js/faker';
import type { MemoryResponseDto } from '@immich/sdk';
import { test } from '@playwright/test';
import { generateMemoriesFromTimeline } from 'src/generators/memory';
import { generateMemoriesFromTimeline } from 'src/ui/generators/memory';
import {
Changes,
createDefaultTimelineConfig,
generateTimelineData,
TimelineAssetConfig,
TimelineData,
} from 'src/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/mock-network/base-network';
import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/mock-network/memory-network';
import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network';
import { memoryAssetViewerUtils, memoryGalleryUtils, memoryViewerUtils } from 'src/web/specs/memory/utils';
} from 'src/ui/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network';
import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/ui/mock-network/memory-network';
import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network';
import { memoryAssetViewerUtils, memoryGalleryUtils, memoryViewerUtils } from './utils';
test.describe.configure({ mode: 'parallel' });

View File

@@ -6,10 +6,10 @@ import {
generateTimelineData,
TimelineAssetConfig,
TimelineData,
} from 'src/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/mock-network/base-network';
import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network';
import { assetViewerUtils } from 'src/web/specs/timeline/utils';
} from 'src/ui/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network';
import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network';
import { assetViewerUtils } from '../timeline/utils';
const buildSearchUrl = (assetId: string) => {
const searchQuery = encodeURIComponent(JSON.stringify({ originalFileName: 'test' }));

View File

@@ -12,18 +12,15 @@ import {
selectRandomMultiple,
TimelineAssetConfig,
TimelineData,
} from 'src/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/mock-network/base-network';
import { pageRoutePromise, setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network';
import { utils } from 'src/utils';
} from 'src/ui/generators/timeline';
import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network';
import {
assetViewerUtils,
padYearMonth,
pageUtils,
poll,
thumbnailUtils,
timelineUtils,
} from 'src/web/specs/timeline/utils';
pageRoutePromise,
setupTimelineMockApiRoutes,
TimelineTestContext,
} from 'src/ui/mock-network/timeline-network';
import { utils } from 'src/utils';
import { assetViewerUtils, padYearMonth, pageUtils, poll, thumbnailUtils, timelineUtils } from './utils';
test.describe.configure({ mode: 'parallel' });
test.describe('Timeline', () => {

View File

@@ -1,6 +1,6 @@
import { BrowserContext, expect, Page } from '@playwright/test';
import { DateTime } from 'luxon';
import { TimelineAssetConfig } from 'src/generators/timeline';
import { TimelineAssetConfig } from 'src/ui/generators/timeline';
export const sleep = (ms: number) => {
return new Promise((resolve) => setTimeout(resolve, ms));

View File

@@ -15,7 +15,6 @@
"incremental": true,
"skipLibCheck": true,
"esModuleInterop": true,
"rootDirs": ["src"],
"baseUrl": "./"
},
"include": ["src/**/*.ts"],

View File

@@ -3,14 +3,14 @@ import { defineConfig } from 'vitest/config';
// skip `docker compose up` if `make e2e` was already run
const globalSetup: string[] = [];
try {
await fetch('http://127.0.0.1:2285/api/server-info/ping');
await fetch('http://127.0.0.1:2285/api/server/ping');
} catch {
globalSetup.push('src/setup/docker-compose.ts');
globalSetup.push('src/docker-compose.ts');
}
export default defineConfig({
test: {
include: ['src/{api,cli,immich-admin}/specs/*.e2e-spec.ts'],
include: ['src/specs/server/**/*.e2e-spec.ts'],
globalSetup,
testTimeout: 15_000,
pool: 'threads',

View File

@@ -782,6 +782,8 @@
"client_cert_import": "استيراد",
"client_cert_import_success_msg": "تم استيراد شهادة العميل",
"client_cert_invalid_msg": "ملف شهادة عميل غير صالحة او كلمة سر غير صحيحة",
"client_cert_password_message": "أدخل كلمة المرور الخاصة بهذه الشهادة",
"client_cert_password_title": "كلمة المرور الخاصة بالشهادة",
"client_cert_remove_msg": "تم ازالة شهادة العميل",
"client_cert_subtitle": "يدعم صيغ PKCS12 (.p12, .pfx)فقط. استيراد/ازالة الشهادات متاح فقط قبل تسجيل الدخول",
"client_cert_title": "شهادة مستخدم SSL [تجريبية]",
@@ -995,6 +997,11 @@
"editor_close_without_save_prompt": "لن يتم حفظ التغييرات",
"editor_close_without_save_title": "إغلاق المحرر؟",
"editor_confirm_reset_all_changes": "هل أنت متأكد من إعادة ضبط جميع التغييرات؟",
"editor_discard_edits_confirm": "تجاهل التعديلات",
"editor_discard_edits_prompt": "لديك تعديلات غير محفوظة. هل أنت متأكد من رغبتك في تجاهلها؟",
"editor_discard_edits_title": "تجاهل التعديلات؟",
"editor_edits_applied_error": "فشل تطبيق التعديلات",
"editor_edits_applied_success": "تم تطبيق التعديلات بنجاح",
"editor_flip_horizontal": "اقلب أفقيًا",
"editor_flip_vertical": "اقلب عموديًا",
"editor_orientation": "اتجاه",
@@ -1196,6 +1203,8 @@
"features_in_development": "الميزات قيد التطوير",
"features_setting_description": "إدارة ميزات التطبيق",
"file_name_or_extension": "اسم الملف أو امتداده",
"file_name_text": "أسم الملف",
"file_name_with_value": "اسم الملف: {file_name}",
"file_size": "حجم الملف",
"filename": "اسم الملف",
"filetype": "نوع الملف",
@@ -1604,7 +1613,6 @@
"not_available": "غير متاح",
"not_in_any_album": "ليست في أي ألبوم",
"not_selected": "لم يختار",
"note_apply_storage_label_to_previously_uploaded assets": "ملاحظة: لتطبيق سمة التخزين على المحتويات التي تم رفعها مسبقًا، قم بتشغيل",
"notes": "ملاحظات",
"nothing_here_yet": "لا يوجد شيء هنا بعد",
"notification_permission_dialog_content": "لتمكين الإخطارات ، انتقل إلى الإعدادات و اختار السماح.",
@@ -1806,7 +1814,7 @@
"reassigned_assets_to_new_person": "تمت إعادة تعيين {count, plural, one {# المحتوى} other {# المحتويات}} إلى شخص جديد",
"reassing_hint": "تعيين المحتويات المحددة لشخص موجود",
"recent": "حديث",
"recent-albums": "ألبومات الحديثة",
"recent_albums": "ألبومات الحديثة",
"recent_searches": "عمليات البحث الأخيرة",
"recently_added": "اضيف مؤخرا",
"recently_added_page_title": "أضيف مؤخرا",

View File

@@ -457,7 +457,7 @@
"reassign": "Перапрызначыць",
"reassing_hint": "Прыпісаць выбраныя актывы існуючай асобе",
"recent": "Нядаўні",
"recent-albums": "Нядаўнія альбомы",
"recent_albums": "Нядаўнія альбомы",
"recent_searches": "Нядаўнія пошукі",
"recently_added": "Нядаўна дададзена",
"refresh_faces": "Абнавіць твары",

View File

@@ -272,7 +272,7 @@
"oauth_auto_register": "Автоматична регистрация",
"oauth_auto_register_description": "Автоматично регистриране на нови потребители след влизане с OAuth",
"oauth_button_text": "Текст на бутона",
"oauth_client_secret_description": "Задължително за поверителен клиент или когато PKCE (Proof Key for Code Exchange) не се поддържа за публичен клиент.",
"oauth_client_secret_description": "Задължително за поверителен клиент или когато не се поддържа PKCE (Proof Key for Code Exchange) за публичен клиент.",
"oauth_enable_description": "Влизане с OAuth",
"oauth_mobile_redirect_uri": "URI за мобилно пренасочване",
"oauth_mobile_redirect_uri_override": "URI пренасочване за мобилни устройства",
@@ -572,7 +572,7 @@
"asset_list_layout_sub_title": "Разположение",
"asset_list_settings_subtitle": "Настройки на мрежата на разполагане на снимки",
"asset_list_settings_title": "Разполагане на снимки",
"asset_not_found_on_device_android": "Активът не е намерен на устройството",
"asset_not_found_on_device_android": "Обектът не е намерен на устройството",
"asset_not_found_on_device_ios": "Обектът не е намерен на устройството. Ако използвате iCloud, обектът може да е недостъпен поради повреден файл, съхранен в iCloud",
"asset_not_found_on_icloud": "Обектът не е намерен в iCloud. Обектът може да е недостъпен поради повреден файл, съхранен в iCloud",
"asset_offline": "Елементът е офлайн",
@@ -782,6 +782,8 @@
"client_cert_import": "Импорт",
"client_cert_import_success_msg": "Клиентския сертификат е импортиран",
"client_cert_invalid_msg": "Невалиден сертификат или грешна парола",
"client_cert_password_message": "Въведете парола за този сертификат",
"client_cert_password_title": "Парола за сертификат",
"client_cert_remove_msg": "Клиентския сертификат е премахнат",
"client_cert_subtitle": "Поддържа се само формат PKCS12 (.p12, .pfx). Импорт/премахване на сертификат може само преди вписване в системата",
"client_cert_title": "Клиентски SSL сертификат [ЕКСПЕРИМЕНТАЛНО]",
@@ -995,6 +997,11 @@
"editor_close_without_save_prompt": "Промените няма да бъдат запазени",
"editor_close_without_save_title": "Затваряне на редактора?",
"editor_confirm_reset_all_changes": "Сигурни ли сте, че искате да възстановите всички промени?",
"editor_discard_edits_confirm": "Отхвърли промените",
"editor_discard_edits_prompt": "Имате незапазени промени. Наистина ли искате да ги отхвърлите?",
"editor_discard_edits_title": "Отхвърляме ли промените?",
"editor_edits_applied_error": "Неуспешно прилагане на промените",
"editor_edits_applied_success": "Успешно прилагане на промените",
"editor_flip_horizontal": "Обърни хоризонтално",
"editor_flip_vertical": "Обърни вертикално",
"editor_orientation": "Ориентация",
@@ -1196,6 +1203,8 @@
"features_in_development": "Функции в процес на разработка",
"features_setting_description": "Управление на функциите на приложението",
"file_name_or_extension": "Име на файл или разширение",
"file_name_text": "Имe на файл",
"file_name_with_value": "Име на файл: {file_name}",
"file_size": "Размер на файла",
"filename": "Име на файл",
"filetype": "Тип на файл",
@@ -1604,7 +1613,6 @@
"not_available": "Неналично",
"not_in_any_album": "Не е в никой албум",
"not_selected": "Не е избрано",
"note_apply_storage_label_to_previously_uploaded assets": "Забележка: За да приложите етикета за съхранение към предварително качени активи, стартирайте",
"notes": "Бележки",
"nothing_here_yet": "Засега тук няма нищо",
"notification_permission_dialog_content": "За да включиш известията, отиди в Настройки и избери Разреши.",
@@ -1806,7 +1814,7 @@
"reassigned_assets_to_new_person": "Преназначени {count, plural, one {# елемент} other {# елемента}} на нов човек",
"reassing_hint": "Назначи избраните елементи на съществуващо лице",
"recent": "Скорошни",
"recent-albums": "Скорошни Албуми",
"recent_albums": "Скорошни Албуми",
"recent_searches": "Скорошни търсения",
"recently_added": "Наскоро добавено",
"recently_added_page_title": "Наскоро добавено",
@@ -2072,7 +2080,7 @@
"shared_link_edit_expire_after_option_year": "{count} години",
"shared_link_edit_password_hint": "Въведи парола за достъп до споделен ресурс",
"shared_link_edit_submit_button": "Обнови връзката",
"shared_link_error_server_url_fetch": "Не може да се извлече URL адресът на сървъра",
"shared_link_error_server_url_fetch": "Не може да се извлече url-адресът на сървъра",
"shared_link_expires_day": "Изтича след {count} ден",
"shared_link_expires_days": "Изтича след {count} дни",
"shared_link_expires_hour": "Изтича след {count} час",

View File

@@ -17,7 +17,7 @@
"readonly_mode_enabled": "Mod blo yu no save janjem i on",
"reassigned_assets_to_new_person": "Janjem{count, plural, one {# asset} other {# assets}} blo nu man",
"reassing_hint": "janjem ol sumtin yu bin joos i go blo wan man",
"recent-albums": "album i no old tu mas",
"recent_albums": "album i no old tu mas",
"recent_searches": "lukabout wea i no old tu mas",
"time_based_memories_duration": "hao mus second blo wan wan imij i stap lo scrin.",
"timezone": "taemzon",

View File

@@ -325,7 +325,16 @@
"storage_template_user_label": "<code>{label}</code> হলো ব্যবহারকারীর স্টোরেজ লেবেল (Storage Label)",
"theme_settings_description": "ইমিচ (Immich) ওয়েব ইন্টারফেসের কাস্টমাইজেশন ম্যানেজ করুন",
"thumbnail_generation_job": "থাম্বনেইল তৈরি করুন (Generate Thumbnails)",
"thumbnail_generation_job_description": "প্রতিটি অ্যাসেটের জন্য বড়, ছোট এবং ব্লার (অস্পষ্ট) থাম্বনেইল তৈরি করুন, সেই সাথে প্রতিটি ব্যক্তির জন্যও থাম্বনেইল তৈরি করুন।"
"thumbnail_generation_job_description": "প্রতিটি অ্যাসেটের জন্য বড়, ছোট এবং ব্লার (অস্পষ্ট) থাম্বনেইল তৈরি করুন, সেই সাথে প্রতিটি ব্যক্তির জন্যও থাম্বনেইল তৈরি করুন।",
"transcoding_acceleration_api": "অ্যাক্সিলারেট এপিআই (Acceleration API)",
"transcoding_acceleration_api_description": "ট্রানসকোডিং (transcoding) দ্রুত করার জন্য আপনার ডিভাইসের সাথে যে API ইন্টারঅ্যাক্ট করবে। এই সেটিংসটি 'সাধ্যমতো' (best effort) কাজ করবে: ব্যর্থ হলে এটি পুনরায় সফটওয়্যার ট্রানসকোডিংয়ে ফিরে আসবে। হার্ডওয়্যারের ওপর ভিত্তি করে VP9 কাজ করতেও পারে, আবার নাও করতে পারে।",
"transcoding_acceleration_nvenc": "NVENC (NVIDIA GPU প্রয়োজন)",
"transcoding_acceleration_qsv": "Quick Sync (৭ম প্রজন্মের ইনটেল CPU বা পরবর্তী ভার্সন প্রয়োজন)",
"transcoding_acceleration_rkmpp": "RKMPP (শুধুমাত্র Rockchip SOC-এর জন্য)",
"transcoding_acceleration_vaapi": "VA-API (ভিডিও অ্যাক্সিলারেশন এপিআই)",
"transcoding_accepted_audio_codecs": "গ্রহণযোগ্য অডিও কোডেকসমূহ (Accepted audio codecs)",
"transcoding_accepted_audio_codecs_description": "কোন অডিও কোডেকগুলো ট্রানসকোড করার প্রয়োজন নেই তা নির্বাচন করুন। এটি শুধুমাত্র নির্দিষ্ট ট্রানসকোড পলিসির (transcode policies) জন্য ব্যবহৃত হয়।",
"transcoding_accepted_containers": "গ্রহণযোগ্য কন্টেইনারসমূহ (Accepted containers)"
},
"yes": "হ্যাঁ",
"you_dont_have_any_shared_links": "আপনার কোনো শেয়ার করা লিঙ্ক নেই (You don't have any shared links)",

View File

@@ -311,7 +311,7 @@
"search_jobs": "Cercar treballs…",
"send_welcome_email": "Enviar correu electrònic de benvinguda",
"server_external_domain_settings": "Domini extern",
"server_external_domain_settings_description": "Domini per enllaços públics compartits, incloent http(s)://",
"server_external_domain_settings_description": "Domini utilitzat per a enllaços externs",
"server_public_users": "Usuaris públics",
"server_public_users_description": "Tots els usuaris (nom i correu electrònic) apareixen a la llista a l'afegir un usuari als àlbums compartits. Si es desactiva, la llista només serà disponible pels usuaris administradors.",
"server_settings": "Configuració del servidor",
@@ -782,6 +782,8 @@
"client_cert_import": "Importar",
"client_cert_import_success_msg": "S'ha importat el certificat del client",
"client_cert_invalid_msg": "Fitxer de certificat no vàlid o contrasenya incorrecta",
"client_cert_password_message": "Introdueix la contrasenya per a aquest certificat",
"client_cert_password_title": "Contrasenya del certificat",
"client_cert_remove_msg": "S'ha eliminat el certificat del client",
"client_cert_subtitle": "Només admet el format PKCS12 (.p12, .pfx). La importació/eliminació de certificats només està disponible abans d'iniciar sessió",
"client_cert_title": "Certificat de client SSL",
@@ -792,6 +794,11 @@
"color": "Color",
"color_theme": "Tema de color",
"command": "Ordre",
"command_palette_prompt": "Trobar ràpidament pàgines, accions o comandes",
"command_palette_to_close": "per a tancar",
"command_palette_to_navigate": "per a introduir",
"command_palette_to_select": "per a seleccionar",
"command_palette_to_show_all": "per a mostrar-ho tot",
"comment_deleted": "Comentari esborrat",
"comment_options": "Opcions de comentari",
"comments_and_likes": "Comentaris i agradaments",
@@ -995,6 +1002,11 @@
"editor_close_without_save_prompt": "No es desaran els canvis",
"editor_close_without_save_title": "Tancar l'editor?",
"editor_confirm_reset_all_changes": "Segur que vols reiniciar tots els canvis?",
"editor_discard_edits_confirm": "Descarta les modificacions",
"editor_discard_edits_prompt": "Tens modificacions sense desar. Estàs segur que les vols descartar?",
"editor_discard_edits_title": "Vols descartar les modificacions?",
"editor_edits_applied_error": "No s'han pogut aplicar les modificacions",
"editor_edits_applied_success": "Les modificacions s'han aplicat correctament",
"editor_flip_horizontal": "Capgira horitzontalment",
"editor_flip_vertical": "Capgira verticalment",
"editor_orientation": "Orientació",
@@ -1161,6 +1173,7 @@
"exif_bottom_sheet_people": "PERSONES",
"exif_bottom_sheet_person_add_person": "Afegir nom",
"exit_slideshow": "Surt de la presentació de diapositives",
"expand": "Ampliar-ho",
"expand_all": "Ampliar-ho tot",
"experimental_settings_new_asset_list_subtitle": "Treball en curs",
"experimental_settings_new_asset_list_title": "Habilita la graella de fotos experimental",
@@ -1196,6 +1209,8 @@
"features_in_development": "Funcions en desenvolupament",
"features_setting_description": "Administrar les funcions de l'aplicació",
"file_name_or_extension": "Nom de l'arxiu o extensió",
"file_name_text": "Nom del fitxer",
"file_name_with_value": "Nom del fitxer: {file_name}",
"file_size": "Mida del fitxer",
"filename": "Nom del fitxer",
"filetype": "Tipus d'arxiu",
@@ -1523,7 +1538,7 @@
"mobile_app_download_onboarding_note": "Descarregar la App de mòbil fent servir les seguents opcions",
"model": "Model",
"month": "Mes",
"monthly_title_text_date_format": "MMMM y",
"monthly_title_text_date_format": "MMMM a",
"more": "Més",
"move": "Moure",
"move_down": "Moure cap avall",
@@ -1604,7 +1619,6 @@
"not_available": "N/A",
"not_in_any_album": "En cap àlbum",
"not_selected": "No seleccionat",
"note_apply_storage_label_to_previously_uploaded assets": "Nota: per aplicar l'etiqueta d'emmagatzematge als actius penjats anteriorment, executeu el",
"notes": "Notes",
"nothing_here_yet": "No hi ha res encara",
"notification_permission_dialog_content": "Per activar les notificacions, aneu a Configuració i seleccioneu permet.",
@@ -1634,6 +1648,7 @@
"online": "En línia",
"only_favorites": "Només preferits",
"open": "Obrir",
"open_calendar": "Obrir el calendari",
"open_in_map_view": "Obrir a la vista del mapa",
"open_in_openstreetmap": "Obre a OpenStreetMap",
"open_the_search_filters": "Obriu els filtres de cerca",
@@ -1806,7 +1821,7 @@
"reassigned_assets_to_new_person": "{count, plural, one {S'ha reassignat # recurs} other {S'han reassignat # recursos}} a una persona nova",
"reassing_hint": "Assignar els elements seleccionats a una persona existent",
"recent": "Recent",
"recent-albums": "Àlbums recents",
"recent_albums": "Àlbums recents",
"recent_searches": "Cerques recents",
"recently_added": "Afegit recentment",
"recently_added_page_title": "Afegit recentment",
@@ -2175,6 +2190,7 @@
"support": "Suport",
"support_and_feedback": "Suport i comentaris",
"support_third_party_description": "La vostra instal·lació immich la va empaquetar un tercer. Els problemes que experimenteu poden ser causats per aquest paquet així que, si us plau, plantegeu els poblemes amb ells en primer lloc mitjançant els enllaços següents.",
"supporter": "Contribuïdor",
"swap_merge_direction": "Canvia la direcció d'unió",
"sync": "Sincronitza",
"sync_albums": "Sincronitzar àlbums",

View File

@@ -311,7 +311,7 @@
"search_jobs": "Hledat úlohy…",
"send_welcome_email": "Odeslat uvítací e-mail",
"server_external_domain_settings": "Externí doména",
"server_external_domain_settings_description": "Doména pro veřejně sdílené odkazy, včetně http(s)://",
"server_external_domain_settings_description": "Doména používaná pro externí odkazy",
"server_public_users": "Veřejní uživatelé",
"server_public_users_description": "Všichni uživatelé (jméno a e-mail) jsou uvedeni při přidávání uživatele do sdílených alb. Pokud je tato funkce vypnuta, bude seznam uživatelů dostupný pouze uživatelům z řad správců.",
"server_settings": "Server",
@@ -782,6 +782,8 @@
"client_cert_import": "Importovat",
"client_cert_import_success_msg": "Klientský certifikát je importován",
"client_cert_invalid_msg": "Neplatný soubor certifikátu nebo špatné heslo",
"client_cert_password_message": "Zadejte heslo pro tento certifikát",
"client_cert_password_title": "Heslo certifikátu",
"client_cert_remove_msg": "Klientský certifikát je odstraněn",
"client_cert_subtitle": "Podporuje pouze formát PKCS12 (.p12, .pfx). Import/odstranění certifikátu je možné pouze před přihlášením",
"client_cert_title": "Klientský SSL certifikát [EXPERIMENTÁLNÍ]",
@@ -792,6 +794,11 @@
"color": "Barva",
"color_theme": "Barevný motiv",
"command": "Příkaz",
"command_palette_prompt": "Rychlé vyhledávání stránek, akcí nebo příkazů",
"command_palette_to_close": "zavřít",
"command_palette_to_navigate": "vstoupit",
"command_palette_to_select": "vybrat",
"command_palette_to_show_all": "zobrazit vše",
"comment_deleted": "Komentář odstraněn",
"comment_options": "Možnosti komentáře",
"comments_and_likes": "Komentáře a lajky",
@@ -995,6 +1002,11 @@
"editor_close_without_save_prompt": "Změny nebudou uloženy",
"editor_close_without_save_title": "Zavřít editor?",
"editor_confirm_reset_all_changes": "Opravdu chcete zrušit všechny změny?",
"editor_discard_edits_confirm": "Zrušit úpravy",
"editor_discard_edits_prompt": "Máte neuložené úpravy. Opravdu je chcete smazat?",
"editor_discard_edits_title": "Zrušit úpravy?",
"editor_edits_applied_error": "Nepodařilo se použít úpravy",
"editor_edits_applied_success": "Úpravy byly úspěšně provedeny",
"editor_flip_horizontal": "Otočit vodorovně",
"editor_flip_vertical": "Otočit svisle",
"editor_orientation": "Orientace",
@@ -1161,6 +1173,7 @@
"exif_bottom_sheet_people": "LIDÉ",
"exif_bottom_sheet_person_add_person": "Přidat jméno",
"exit_slideshow": "Ukončit prezentaci",
"expand": "Rozbalit",
"expand_all": "Rozbalit vše",
"experimental_settings_new_asset_list_subtitle": "Zpracovávám",
"experimental_settings_new_asset_list_title": "Povolení experimentální mřížky fotografií",
@@ -1196,6 +1209,8 @@
"features_in_development": "Funkce ve vývoji",
"features_setting_description": "Správa funkcí aplikace",
"file_name_or_extension": "Název nebo přípona souboru",
"file_name_text": "Název souboru",
"file_name_with_value": "Název souboru: {file_name}",
"file_size": "Velikost souboru",
"filename": "Název souboru",
"filetype": "Typ souboru",
@@ -1604,7 +1619,6 @@
"not_available": "Není k dispozici",
"not_in_any_album": "Bez alba",
"not_selected": "Není vybráno",
"note_apply_storage_label_to_previously_uploaded assets": "Upozornění: Chcete-li použít štítek úložiště na dříve nahrané položky, spusťte příkaz",
"notes": "Poznámky",
"nothing_here_yet": "Zatím zde nic není",
"notification_permission_dialog_content": "Chcete-li povolit oznámení, přejděte do nastavení a vyberte možnost povolit.",
@@ -1634,6 +1648,7 @@
"online": "Online",
"only_favorites": "Pouze oblíbené",
"open": "Otevřít",
"open_calendar": "Otevřít kalendář",
"open_in_map_view": "Otevřít v zobrazení mapy",
"open_in_openstreetmap": "Otevřít v OpenStreetMap",
"open_the_search_filters": "Otevřít vyhledávací filtry",
@@ -1806,7 +1821,7 @@
"reassigned_assets_to_new_person": "{count, plural, one {Přeřazena # položka} few {Přeřazeny # položky} other {Přeřazeno # položek}} na novou osobu",
"reassing_hint": "Přiřazení vybraných položek existující osobě",
"recent": "Nedávné",
"recent-albums": "Nedávná alba",
"recent_albums": "Nedávná alba",
"recent_searches": "Nedávná vyhledávání",
"recently_added": "Nedávno přidané",
"recently_added_page_title": "Nedávno přidané",
@@ -2175,6 +2190,7 @@
"support": "Podpora",
"support_and_feedback": "Podpora a zpětná vazba",
"support_third_party_description": "Vaše Immich instalace byla připravena třetí stranou. Problémy, které se u vás vyskytly, mohou být způsobeny tímto balíčkem, proto se na ně obraťte v první řadě pomocí níže uvedených odkazů.",
"supporter": "Podporovatel",
"swap_merge_direction": "Obrátit směr sloučení",
"sync": "Synchronizovat",
"sync_albums": "Synchronizovat alba",

View File

@@ -201,7 +201,7 @@
"maintenance_restore_database_backup_description": "Gendan en tidligere databasetilstand ved hjælp af en sikkerhedskopifil",
"maintenance_settings": "Vedligeholdelse",
"maintenance_settings_description": "Sæt Immich i vedligeholdelsestilstand.",
"maintenance_start": "Start vedligeholdelsestilstand",
"maintenance_start": "Skift til vedligeholdelsestilstand",
"maintenance_start_error": "Vedligeholdelsestilstand kunne ikke startes.",
"maintenance_upload_backup": "Upload databasebackupfil",
"maintenance_upload_backup_error": "Kunne ikke uploade backup, er det en .sql/.sql.gz fil?",
@@ -272,7 +272,7 @@
"oauth_auto_register": "Autoregistrér",
"oauth_auto_register_description": "Registrér automatisk nye brugere efter at have logget ind med OAuth",
"oauth_button_text": "Knaptekst",
"oauth_client_secret_description": "Påkrævet hvis PKCE (Proof Key for Code Exchange) ikke er supporteret af OAuth-udbyderen",
"oauth_client_secret_description": "Påkrævet for en fortrolig klient eller hvis PKCE (Proof Key for Code Exchange) ikke understøttes for en offentlig klient.",
"oauth_enable_description": "Log ind med OAuth",
"oauth_mobile_redirect_uri": "Mobilomdiregerings-URL",
"oauth_mobile_redirect_uri_override": "Tilsidesættelse af mobil omdiregerings-URL",
@@ -383,7 +383,7 @@
"transcoding_hardware_acceleration": "Hardwareacceleration",
"transcoding_hardware_acceleration_description": "Eksperimentel: hurtigere transkodning men kan sænke kvaliteten ved samme bitrate",
"transcoding_hardware_decoding": "Hardware-afkodning",
"transcoding_hardware_decoding_setting_description": "Gælder kun NVENC, QSV og RKMPP. Slår ende-til-ende acceleration til i stedet for kun at accelerere indkodning. Virker måske ikke på alle videoer.",
"transcoding_hardware_decoding_setting_description": "Slår endetilendeacceleration til i stedet for kun at accelerere indkodning. Virker muligvis ikke på alle videoer.",
"transcoding_max_b_frames": "Maksimum B-frames",
"transcoding_max_b_frames_description": "Højere værdier forbedrer kompressionseffektivitet, men kan gøre indkodning langsommere. Er måske ikke kompatibelt med hardware-acceleration på ældre enheder. 0 slår B-frames fra, mens -1 sætter denne værdi automatisk.",
"transcoding_max_bitrate": "Maksimal bitrate",
@@ -537,7 +537,7 @@
"app_bar_signout_dialog_content": "Er du sikker på, du vil logge ud?",
"app_bar_signout_dialog_ok": "Ja",
"app_bar_signout_dialog_title": "Log ud",
"app_download_links": "App Download Links",
"app_download_links": "Links til app download",
"app_settings": "Appindstillinger",
"app_stores": "App Butikker",
"app_update_available": "App opdatering er tilgængelig",
@@ -572,6 +572,9 @@
"asset_list_layout_sub_title": "Udseende",
"asset_list_settings_subtitle": "Indstillinger for billedgitterlayout",
"asset_list_settings_title": "Billedgitter",
"asset_not_found_on_device_android": "Kan ikke finde elementet på enheden",
"asset_not_found_on_device_ios": "Mediet blev ikke fundet på enheden. Hvis du bruger iCloud, kan mediet være utilgængeligt, hvis en fejlagtig fil ligger på iCloud",
"asset_not_found_on_icloud": "Mediet blev ikke fundet på iCloud. Det kan være utilgængeligt, hvis det er en fejlagtig fil, der ligger på iCloud",
"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_restored_successfully": "Elementet blev gendannet succesfuldt",
@@ -763,10 +766,10 @@
"cleanup_found_assets": "Fandt {count} sikkerhedskopierede filer",
"cleanup_found_assets_with_size": "Fundet {count} sikkerhedskopierede objekter ({size})",
"cleanup_icloud_shared_albums_excluded": "iCloud delte albummer er udelukket fra scanningen",
"cleanup_no_assets_found": "Ingen sikkerhedskopierede filer fundet der matcher dine kriterier",
"cleanup_no_assets_found": "Ingen elementer matcher kriterierne ovenfor. Frigiv plads kan kun fjerne elementer, der er sikkerhedskopieret til serveren",
"cleanup_preview_title": "Filer at fjerne ({count})",
"cleanup_step3_description": "Scan efter fotos og videoer, der er blevet sikkerhedskopieret til serveren med den valgte stop-dato og filtermuligheder",
"cleanup_step4_summary": "{count} filer lavet før {date} er i kø for at blive fjernet fra denne enhed",
"cleanup_step3_description": "Skan efter sikkerhedskopierede elementer, som matcher dine dato- og indstillingsvalg.",
"cleanup_step4_summary": "{count, plural, one {element} other {elementer}} oprettet før {date} står til at blive fjernet fra denne enhed. Billeder vil stadig være tilgængelige i Immichappen.",
"cleanup_trash_hint": "For at genvinde lagringsplads helt, skal du åbne din indbyggede galleriapp og tømme papirkurven",
"clear": "Ryd",
"clear_all": "Ryd alle",
@@ -779,6 +782,8 @@
"client_cert_import": "Importer",
"client_cert_import_success_msg": "Klient certifikat er importeret",
"client_cert_invalid_msg": "Invalid certifikat fil eller forkert adgangskode",
"client_cert_password_message": "Skriv kodeord til dette certifikat",
"client_cert_password_title": "Kodeord til certifikat",
"client_cert_remove_msg": "Klient certifikat er fjernet",
"client_cert_subtitle": "Supportere kun PKCS12 (.p12, .pfx) format. Certifikat importering/fjernelse er kun tilgængeligt før login",
"client_cert_title": "SSL Klient Certifikat [EKSPERIMENTAL]",
@@ -864,8 +869,9 @@
"custom_locale": "Brugerdefineret lokale",
"custom_locale_description": "Formatér datoer og tal baseret på sproget og regionen",
"custom_url": "Tilpasset URL",
"cutoff_date_description": "Fjern fotos og videoer ældre end",
"cutoff_day": "{antal, flertal, en {day} andre {days}}",
"cutoff_date_description": "Behold fotos fra den sidste…",
"cutoff_day": "{count, plural, one {dag} other {dage}}",
"cutoff_year": "{count, plural, one {år} other {år}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Mørk",
@@ -919,7 +925,7 @@
"description_input_hint_text": "Tilføj en beskrivelse...",
"description_input_submit_error": "Fejl med at opdatere beskrivelsen. Tjek loggen for flere detaljer",
"deselect_all": "Afmarkér alt",
"details": "DETALJER",
"details": "Detaljer",
"direction": "Retning",
"disable": "Deaktiver",
"disabled": "Deaktiveret",
@@ -991,6 +997,11 @@
"editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt",
"editor_close_without_save_title": "Luk editor?",
"editor_confirm_reset_all_changes": "Er du sikker på, at du vil nulstille alle ændringer?",
"editor_discard_edits_confirm": "Kassér redigeringer",
"editor_discard_edits_prompt": "Du har ikkegemte redigeringer. Er du sikker på, at du vil kassere dem?",
"editor_discard_edits_title": "Kassér ændringer?",
"editor_edits_applied_error": "Kunne ikke gemme redigeringer",
"editor_edits_applied_success": "Redigeringer gemt",
"editor_flip_horizontal": "Vend horisontalt",
"editor_flip_vertical": "Flip vertikal",
"editor_orientation": "Orientering",
@@ -1018,9 +1029,11 @@
"error_loading_albums": "Fejl ved indlæsning af album",
"error_loading_image": "Fejl ved indlæsning af billede",
"error_loading_partners": "Fejl ved indlæsning af partnere: {error}",
"error_retrieving_asset_information": "Fejl ved hentning af objekt-data",
"error_saving_image": "Fejl: {error}",
"error_tag_face_bounding_box": "Fejl ved tagging af ansigt - kan ikke finde koordinator for afgrænsningskasse",
"error_title": "Fejl - Noget gik galt",
"error_while_navigating": "Fejl ved navigering til objekt",
"errors": {
"cannot_navigate_next_asset": "Kan ikke navigere til næste mediefil",
"cannot_navigate_previous_asset": "Kan ikke navigere til forrige mediefil",
@@ -1190,6 +1203,8 @@
"features_in_development": "Funktioner under udvikling",
"features_setting_description": "Administrer app-funktioner",
"file_name_or_extension": "Filnavn eller filtype",
"file_name_text": "Filnavn",
"file_name_with_value": "Filnavn: {file_name}",
"file_size": "Fil størrelse",
"filename": "Filnavn",
"filetype": "Filtype",
@@ -1208,7 +1223,7 @@
"forgot_pin_code_question": "Har du glemt PIN-koden?",
"forward": "Fremad",
"free_up_space": "Frigør plads",
"free_up_space_description": "Flyt sikkerhedskopierede fotos og videoer til din enheds skraldepapir for at frigøre plads. Dine kopier på serveren forbliver sikre",
"free_up_space_description": "Flyt sikkerhedskopierede fotos og videoer til din enheds skraldespand for at frigøre plads. Dine kopier på serveren forbliver sikre.",
"free_up_space_settings_subtitle": "Frigør enhedslagerplads",
"full_path": "Fuld sti: {path}",
"gcast_enabled": "Google Cast",
@@ -1325,9 +1340,15 @@
"json_editor": "JSON editor",
"json_error": "JSON fejl",
"keep": "Behold",
"keep_albums": "Behold albums",
"keep_albums_count": "Beholder {count} {count, plural, one {album} other {albums}}",
"keep_all": "Behold alle",
"keep_description": "Vælg hvad der skal forblive på din enhed efter oprydning af plads.",
"keep_favorites": "Behold favoritter",
"keep_on_device": "Behold på enheden",
"keep_on_device_hint": "Vælg elementer, der skal beholdes på denne enhed",
"keep_this_delete_others": "Behold dette, slet andre",
"keeping": "Beholder: {items}",
"kept_this_deleted_others": "Beholdt denne mediefil og slettede {count, plural, one {# aktiv} other {# aktiver}}",
"keyboard_shortcuts": "Tastaturgenveje",
"language": "Sprog",
@@ -1421,10 +1442,28 @@
"loop_videos_description": "Aktivér for at genafspille videoer automatisk i detaljeret visning.",
"main_branch_warning": "Du bruger en udviklingsversion; vi anbefaler kraftigt at bruge en udgivelsesversion!",
"main_menu": "Hovedmenu",
"maintenance_action_restore": "Genopretter database",
"maintenance_description": "Immich er blevet sat i <link>vedligeholdelsestilstand</link>.",
"maintenance_end": "Afslut vedligeholdelsestilstand",
"maintenance_end_error": "Vedligeholdelsestilstand kunne ikke afsluttes.",
"maintenance_logged_in_as": "Aktuelt logget ind som {user}",
"maintenance_restore_from_backup": "Genskab fra sikkerhedskopi",
"maintenance_restore_library": "Genskab dit bibliotek",
"maintenance_restore_library_confirm": "Hvis dette ser korrekt ud, så fortsæt for at genoprette fra en sikkerhedskopi!",
"maintenance_restore_library_description": "Genopretter database",
"maintenance_restore_library_folder_has_files": "{folder} har {count, plural, one {mappe} other {mapper}}",
"maintenance_restore_library_folder_no_files": "{folder} mangler filer!",
"maintenance_restore_library_folder_pass": "læs- og skrivbar",
"maintenance_restore_library_folder_read_fail": "ikke læsbar",
"maintenance_restore_library_folder_write_fail": "ikke skrivbar",
"maintenance_restore_library_hint_missing_files": "Du mangler måske vigtige filer",
"maintenance_restore_library_hint_regenerate_later": "Du kan genindstille disse senere, i indstillinger",
"maintenance_restore_library_hint_storage_template_missing_files": "Bruger du en lagringsskabelon? Du mangler måske nogle filer",
"maintenance_restore_library_loading": "Indlæser integritetskontroller og heuristikker …",
"maintenance_task_backup": "Laver en backup af den eksisterende database …",
"maintenance_task_migrations": "Kører migration af database…",
"maintenance_task_restore": "Genskaber den valgte backup…",
"maintenance_task_rollback": "Genoprettelse slog fejl, ruller tilbage til genoprettelsespunkt…",
"maintenance_title": "Midlertidigt Utilgængelig",
"make": "Producent",
"manage_geolocation": "Administrer placering",
@@ -1544,7 +1583,7 @@
"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 videoer for at gemme dem væk fra din billedoversigt",
"no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE",
"no_assets_message": "Klik for at uploade dit første foto",
"no_assets_to_show": "Ingen elementer at vise",
"no_cast_devices_found": "Ingen Cast-enheder fundet",
"no_checksum_local": "Ingen checksum tilgængelig kan ikke hente lokale objekter",
@@ -1574,7 +1613,6 @@
"not_available": "ikke tilgængelig",
"not_in_any_album": "Ikke i noget album",
"not_selected": "Ikke valgt",
"note_apply_storage_label_to_previously_uploaded assets": "Bemærk: For at anvende Lagringsmærkat på tidligere uploadede medier, kør opgaven igen",
"notes": "Noter",
"nothing_here_yet": "Intet her endnu",
"notification_permission_dialog_content": "Gå til indstillinger for at slå notifikationer til.",
@@ -1686,7 +1724,7 @@
"photos_from_previous_years": "Billeder fra tidligere år",
"photos_only": "Kun fotos",
"pick_a_location": "Vælg et sted",
"pick_custom_range": "Brugerdefineret periode",
"pick_custom_range": "Brugerdefineret interval",
"pick_date_range": "Vælg et datointerval",
"pin_code_changed_successfully": "Ændring af PIN kode lykkedes",
"pin_code_reset_successfully": "Nulstilling af PIN kode lykkedes",
@@ -1765,6 +1803,7 @@
"rating_clear": "Nulstil vurdering",
"rating_count": "{count, plural, one {# stjerne} other {# stjerner}}",
"rating_description": "Vis EXIF-klassificeringen i infopanelet",
"rating_set": "Vurdering sat til {rating, plural, one {# stjerne} other {# stjerner}}",
"reaction_options": "Reaktionsindstillinger",
"read_changelog": "Læs ændringslog",
"readonly_mode_disabled": "Skrivebeskyttet tilstand deaktiveret",
@@ -1775,7 +1814,7 @@
"reassigned_assets_to_new_person": "Gentildelt {count, plural, one {# aktiv} other {# aktiver}} til en ny person",
"reassing_hint": "Tildel valgte mediefiler til en eksisterende person",
"recent": "For nylig",
"recent-albums": "Seneste albums",
"recent_albums": "Seneste albums",
"recent_searches": "Seneste søgninger",
"recently_added": "Senest tilføjet",
"recently_added_page_title": "Nyligt tilføjet",
@@ -1864,11 +1903,11 @@
"saved_settings": "Gemte indstillinger",
"say_something": "Skriv noget",
"scaffold_body_error_occurred": "Der opstod en fejl",
"scan": "Scan",
"scan": "Skan",
"scan_all_libraries": "Skan alle biblioteker",
"scan_library": "Skan",
"scan_settings": "Skanningsindstillinger",
"scanning": "Scanning",
"scanning": "Skanner",
"scanning_for_album": "Skanner efter albummer...",
"search": "Søg",
"search_albums": "Søg i albummer",
@@ -2041,7 +2080,7 @@
"shared_link_edit_expire_after_option_year": "{count} år",
"shared_link_edit_password_hint": "Indtast kodeordet",
"shared_link_edit_submit_button": "Opdater link",
"shared_link_error_server_url_fetch": "Kan ikke finde server URL",
"shared_link_error_server_url_fetch": "Kan ikke hente server URL",
"shared_link_expires_day": "Udløber om {count} dag",
"shared_link_expires_days": "Udløber om {count} dage",
"shared_link_expires_hour": "Udløber om {count} time",
@@ -2128,7 +2167,7 @@
"start_date_before_end_date": "Startdato skal ligge før slutdato",
"state": "Stat",
"status": "Status",
"stop_casting": "Stop casting",
"stop_casting": "Stop med at caste",
"stop_motion_photo": "Stopmotionbillede",
"stop_photo_sharing": "Stop med at dele dine billeder?",
"stop_photo_sharing_description": "{partner} vil ikke længere kunne tilgå dine billeder.",
@@ -2181,6 +2220,7 @@
"theme_setting_theme_subtitle": "Vælg appens temaindstilling",
"theme_setting_three_stage_loading_subtitle": "Tre-trins indlæsning kan øge ydeevnen, men kan ligeledes føre til højere netværksbelastning",
"theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til",
"then": "Siden",
"they_will_be_merged_together": "De vil blive slået sammen",
"third_party_resources": "Tredjepartsressourcer",
"time": "Tid",
@@ -2265,6 +2305,7 @@
"upload_details": "Upload detaljer",
"upload_dialog_info": "Vil du sikkerhedskopiere de(t) valgte element(er) til serveren?",
"upload_dialog_title": "Upload element",
"upload_error_with_count": "Upload-fejl for {count, plural, one {# objekt} other {# objekter}}",
"upload_errors": "Upload afsluttet med {count, plural, one {# fejl} other {# fejl}}. Opdater siden for at se nye uploadaktiver.",
"upload_finished": "Upload fuldført",
"upload_progress": "Resterende {remaining, number} - Behandlet {processed, number}/{total, number}",

View File

@@ -1,8 +1,8 @@
{
"about": "Über",
"about": "Über Immich",
"account": "Konto",
"account_settings": "Kontoeinstellungen",
"acknowledge": "Bestätigen",
"acknowledge": "Verstanden",
"action": "Aktion",
"action_common_update": "Aktualisieren",
"action_description": "Eine Reihe von Aktionen, die an den gefilterten Assets ausgeführt werden sollen",
@@ -573,8 +573,8 @@
"asset_list_settings_subtitle": "Einstellungen für das Fotogitter-Layout",
"asset_list_settings_title": "Fotogitter",
"asset_not_found_on_device_android": "Datei auf Gerät nicht gefunden",
"asset_not_found_on_device_ios": "Datei auf Gerät nicht gefunden. Wenn Du iCloud verwendest, kann die Datei möglicherweise nicht auffindbar sein aufgrund schlechter Dateispeicherung von iCloud",
"asset_not_found_on_icloud": "Datei in iCloud nicht gefunden. Die Datei kann möglicherweise nicht auffindbar sein aufgrund schlechter Dateispeicherung in iCloud",
"asset_not_found_on_device_ios": "Datei auf Gerät nicht gefunden. Wenn Du iCloud verwendest, kann die Datei möglicherweise aufgrund schlechter Dateispeicherung von iCloud nicht auffindbar sein",
"asset_not_found_on_icloud": "Datei in iCloud nicht gefunden. Die Datei kann möglicherweise aufgrund schlechter Dateispeicherung in iCloud nicht auffindbar sein",
"asset_offline": "Datei offline",
"asset_offline_description": "Diese externe Datei ist nicht mehr auf dem Datenträger vorhanden. Bitte wende dich an deinen Immich-Administrator, um Hilfe zu erhalten.",
"asset_restored_successfully": "Datei erfolgreich wiederhergestellt",
@@ -782,6 +782,8 @@
"client_cert_import": "Importieren",
"client_cert_import_success_msg": "Client Zertifikat wurde importiert",
"client_cert_invalid_msg": "Ungültige Zertifikatsdatei oder falsches Passwort",
"client_cert_password_message": "Passwort für dieses Zertifikat angeben",
"client_cert_password_title": "Passwort des Zertifikats",
"client_cert_remove_msg": "Client Zertifikat wurde entfernt",
"client_cert_subtitle": "Unterstützt nur das PKCS12 (.p12, .pfx) Format. Zertifikatsimporte oder -entfernungen sind nur vor dem Login möglich",
"client_cert_title": "SSL-Client-Zertifikat [Experimentell]",
@@ -995,6 +997,11 @@
"editor_close_without_save_prompt": "Die Änderungen werden nicht gespeichert",
"editor_close_without_save_title": "Editor schließen?",
"editor_confirm_reset_all_changes": "Alle Änderungen zurücksetzen?",
"editor_discard_edits_confirm": "Änderungen verwerfen",
"editor_discard_edits_prompt": "Es liegen ungespeicherte Änderungen vorhanden. Sicher, dass diese verworfen werden sollen?",
"editor_discard_edits_title": "Änderungen verwerfen?",
"editor_edits_applied_error": "Änderungen konnten nicht angewendet werden",
"editor_edits_applied_success": "Änderungen erfolgreich angewendet",
"editor_flip_horizontal": "Horizontal spiegeln",
"editor_flip_vertical": "Vertikal spiegeln",
"editor_orientation": "Ausrichtung",
@@ -1196,6 +1203,8 @@
"features_in_development": "Feature in Entwicklung",
"features_setting_description": "Funktionen der App verwalten",
"file_name_or_extension": "Dateiname oder -erweiterung",
"file_name_text": "Dateiname",
"file_name_with_value": "Dateiname: {file_name}",
"file_size": "Dateigröße",
"filename": "Dateiname",
"filetype": "Dateityp",
@@ -1604,7 +1613,6 @@
"not_available": "N/A",
"not_in_any_album": "In keinem Album",
"not_selected": "Nicht ausgewählt",
"note_apply_storage_label_to_previously_uploaded assets": "Hinweis: Um eine Speicherpfadbezeichnung anzuwenden, starte den",
"notes": "Notizen",
"nothing_here_yet": "Noch nichts hier",
"notification_permission_dialog_content": "Um Benachrichtigungen zu aktivieren, navigiere zu Einstellungen und klicke \"Erlauben\".",
@@ -1806,7 +1814,7 @@
"reassigned_assets_to_new_person": "{count, plural, one {# Datei wurde} other {# Dateien wurden}} einer neuen Person zugewiesen",
"reassing_hint": "Markierte Dateien einer vorhandenen Person zuweisen",
"recent": "Neueste",
"recent-albums": "Neueste Alben",
"recent_albums": "Neueste Alben",
"recent_searches": "Letzte Suchen",
"recently_added": "Kürzlich hinzugefügt",
"recently_added_page_title": "Zuletzt hinzugefügt",
@@ -1904,7 +1912,7 @@
"search": "Suche",
"search_albums": "Album suchen",
"search_by_context": "Suche nach Kontext",
"search_by_description": "Nach Beschreibung suchen",
"search_by_description": "Suche nach Beschreibung",
"search_by_description_example": "Wandern in Sapa",
"search_by_filename": "Suche nach Dateiname oder -erweiterung",
"search_by_filename_example": "z.B. IMG_1234.JPG oder PNG",

View File

@@ -5,12 +5,12 @@
"acknowledge": "Bestätige",
"action": "Aktion",
"action_common_update": "Update",
"action_description": "Eine Reihe von Aktionen, die an den gefilterten Assets ausgeführt werden sollen",
"action_description": "Es paar Aktione, wo a de gfilterete Assets usgführt wärde sölled",
"actions": "Aktione",
"active": "Aktiv",
"active_count": "Aktivi: {count}",
"activity": "Aktivität",
"activity_changed": "Aktivität ist {enabled, select, true {aktiviert} other {deaktiviert}}",
"activity_changed": "Aktivität isch {enabled, select, true {aktiviert} other {deaktiviert}}",
"add": "Hinzuefüegä",
"add_a_description": "Beschriibig hinzuefüege",
"add_a_location": "Standort hinzuefüege",
@@ -18,41 +18,42 @@
"add_a_title": "Titel hinzuefüege",
"add_action": "Aktion hinzuefüege",
"add_action_description": "Aklicke um en Aktion dure zfüehre",
"add_assets": "Assets hinzufüege",
"add_birthday": "Geburtstag hinzuefüege",
"add_endpoint": "Endpunkt hinzuefüge",
"add_exclusion_pattern": "Exklusions muster hinzuefüege",
"add_exclusion_pattern": "Uuschlussmuster hinzuefüege",
"add_filter": "Filter hinzuefüge",
"add_filter_description": "Klicken, um eine Filterbedingung hinzuzufügen",
"add_filter_description": "Klicke, um e Filterbedingig hinzuezfüege",
"add_location": "Standort hinzuefüege",
"add_more_users": "Meh Benutzer hinzuefüege",
"add_partner": "Partner hinzufügen",
"add_partner": "Partner hinzueege",
"add_path": "Pfad hinzuefüege",
"add_photos": "Föteli hinzuefüege",
"add_tag": "Tag hinzufügen",
"add_tag": "Tag hinzueege",
"add_to": "Hinzuefüege zu …",
"add_to_album": "Zum Album hinzuefüege",
"add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt",
"add_to_album_bottom_sheet_already_exists": "Bereits in {album}",
"add_to_album_bottom_sheet_added": "Zu {album} hinzuegegt",
"add_to_album_bottom_sheet_already_exists": "Scho in {album}",
"add_to_album_bottom_sheet_some_local_assets": "Es hend es paar lokali Dateie nöd chöne im Album hinzuegfüegt werde",
"add_to_album_toggle": "Auswahl umschalten für {album}",
"add_to_album_toggle": "Uuswahl umschalte für {album}",
"add_to_albums": "Zu Albe hinzuefüege",
"add_to_albums_count": "Zu Alben hinzufügen ({count})",
"add_to_albums_count": "Zu Albe hinzueege ({count})",
"add_to_bottom_bar": "Hinzuefüege zu",
"add_to_shared_album": "Zum teilte Album hinzuefüege",
"add_upload_to_stack": "Upload zum Stack hinzuefüege",
"add_url": "URL hinzuefüege",
"add_workflow_step": "Workflow-Schritt hinzufügen",
"add_workflow_step": "Workflow-Schritt hinzueege",
"added_to_archive": "Is Archiv verschobe",
"added_to_favorites": "Zu dine Favoritä hinzuegfüegt",
"added_to_favorites_count": "{count, number} zu Favoriten hinzugefügt",
"added_to_favorites_count": "{count, number} zu Favorite hinzuegegt",
"admin": {
"add_exclusion_pattern_description": "Ausschlussmuster hinzufügen. Platzhalter, wie *, **, und ? werden unterstützt. Um alle Dateien in einem Verzeichnis namens „Raw\" zu ignorieren, „**/Raw/**“ verwenden. Um alle Dateien zu ignorieren, die auf „.tif“ enden, „**/*.tif“ verwenden. Um einen absoluten Pfad zu ignorieren, „/pfad/zum/ignorieren/**“ verwenden.",
"add_exclusion_pattern_description": "Uusschlussmuster hinzuefüge. Platzhalter, wie *, **, und ? wärded understützt. Zum all Dateie i eim Verzeichnis namens „Raw\" ignoriere, „**/Raw/**“ verwände. Zum all Dateien ignorieren, wo uf „.tif“ änded, „**/*.tif“ verwände. Zum en absolute Pfad ignoriere, „/pfad/zum/ignoriere/**“ verwände.",
"admin_user": "Admin Benutzer",
"asset_offline_description": "Diese Datei einer externen Bibliothek befindet sich nicht mehr auf der Festplatte und wurde in den Papierkorb verschoben. Falls die Datei innerhalb der Bibliothek verschoben wurde, überprüfe deine Zeitleiste auf die neue entsprechende Datei. Um diese Datei wiederherzustellen, stelle bitte sicher, dass Immich auf den unten stehenden Dateipfad zugreifen kann und scanne die Bibliothek.",
"asset_offline_description": "Die Datei vonere externe Bibliothek isch nümme uf de Festplatte und isch in Papierchorb verschobe worde. Falls die Datei innerhalb vo de Bibliothek verschoben worde isch, überprüf dini Ziitleiste uf die neui entsprechendi Datei. Zum die Datei wiederherstelle, stell bitte sicher, dass Immich uf de unde stehendi Dateipfad chan zuegriife und scann d'Bibliothek.",
"authentication_settings": "Authentifizierigs Iistellige",
"authentication_settings_description": "Passwort, OAuth und anderi Authentifizierigseinstellige verwalte",
"authentication_settings_disable_all": "Bisch sicher, dass du alli Login-Methodä wotsch deaktivierä? S Login isch denn komplett deaktiviert.",
"authentication_settings_reenable": "Nutze einen <link>Server-Befehl</link> zur Reaktivierung.",
"authentication_settings_reenable": "Bruuch ein <link>Server-Befehl</link> zum reaktiviere.",
"background_task_job": "Hintergrund Ufgabä",
"backup_database": "Datenbank-Dump aalege",
"backup_database_enable_description": "Datenbank-Dumps aktiviere",
@@ -72,15 +73,15 @@
"confirm_delete_library_assets": "Bisch sicher, dass du die Bibliothek wotsch lösche? Das löscht {count, plural, one {# enthaltenes Asset} other {alli # enthaltene Assets}} us Immich und chan nöd rückgängig gmacht werde. D Dateie bliibed uf em Dateträger.",
"confirm_email_below": "Zum bestätige bitte \"{email}\" une iitippe",
"confirm_reprocess_all_faces": "Bisch sicher, dass du alli Gsichter neu verarbeite wotsch? Däbii werde au benannti Persone glöscht.",
"confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?",
"confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN-Code von {user} zurücksetzen möchtest?",
"confirm_user_password_reset": "Bisch sicher, dass du s Passwort für {user} möchtisch zruggsetze?",
"confirm_user_pin_code_reset": "Bisch sicher, dass du de PIN-Code vo {user} möchtisch zruggsetze?",
"copy_config_to_clipboard_description": "Kopiere die aktuelle Systemkonfiguration als JSON-Objekt in die Zwischenablage",
"create_job": "Aufgabe erstellen",
"cron_expression": "Cron-Zeitangabe",
"cron_expression_description": "Setze das Scanintervall im Cron-Format. Hilfe mit dem Format bietet dir dabei z. B. der <link>Crontab Guru</link>",
"cron_expression_presets": "Vorlagen für Cron-Ausdruck",
"create_job": "Uufgabe erstelle",
"cron_expression": "Cron-Ziitagabe",
"cron_expression_description": "Setz s Scanintervall im Cron-Format. Hilf mit däm Format bütet z. B. der <link>Crontab Guru</link>",
"cron_expression_presets": "Vorlage für Cron-Uusdruck",
"disable_login": "Login deaktiviere",
"duplicate_detection_job_description": "Diese Aufgabe führt das maschinelle Lernen für jede Datei aus, um Duplikate zu finden. Diese Aufgabe beruht auf der intelligenten Suche",
"duplicate_detection_job_description": "Die Uufgab füehrt s maschinelle Lärne für jedi Datei us, zum Duplikat finde. Die Uufgabe berueht uf de intelligente Suechi",
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen Ihrer Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.",
"export_config_as_json_description": "Lade die aktuelle Systemkonfiguration als JSON-Datei herunter",
"external_libraries_page_description": "Externe Bibliotheksseite für Administratoren",

View File

@@ -104,6 +104,8 @@
"image_preview_description": "Μεσαίου μεγέθους εικόνες, χωρίς μεταδεδομένα, οι οποίες χρησιμοποιούνται στην προβολή ενός αντικειμένου και για μηχανική μάθηση",
"image_preview_quality_description": "Ποιότητα προεπισκόπησης από 1 έως 100. Όσο μεγαλύτερη τιμή τόσο καλύτερη η ποιότητα, αλλά παράγονται μεγαλύτερα αρχεία που ενδέχεται να μειώσουν την ταχύτητα απόκρισης της εφαρμογής. Οι χαμηλές τιμές μπορεί να επηρεάσουν τη ποιότητα της μηχανικής μάθησης.",
"image_preview_title": "Ρυθμίσεις Προεπισκόπισης",
"image_progressive": "Προοδευτικό",
"image_progressive_description": "Προοδευτική κωδικοποίηση εικόνων JPEG για σταδιακή φόρτωση κατά την προβολή. Δεν επηρεάζει τις εικόνες WebP.",
"image_quality": "Ποιότητα",
"image_resolution": "Ανάλυση",
"image_resolution_description": "Υψηλότερες αναλύσεις μπορούν να διατηρήσουν περισσότερες λεπτομέρειες, αλλά χρειάζονται περισσότερο χρόνο να κωδικοποιηθούν, έχουν μεγαλύτερα μεγέθη αρχείων και μπορούν να μειώσουν την απόκριση της εφαρμογής.",
@@ -270,7 +272,7 @@
"oauth_auto_register": "Αυτόματη καταχώρηση",
"oauth_auto_register_description": "Αυτόματη καταχώρηση νέου χρήστη αφού συνδεθεί με OAuth",
"oauth_button_text": "Κείμενο κουμπιού",
"oauth_client_secret_description": "Υποχρεωτικό εαν PKCE (Proof Key for Code Exchange) δεν υποστηρίζεται από τον OAuth πάροχο",
"oauth_client_secret_description": "Απαιτείται για έμπιστο πρόγραμμα πελάτη ή αν δεν υποστηρίζεται PKCE (Proof Key for Code Exchange) σε δημόσιο πρόγραμμα πελάτη.",
"oauth_enable_description": "Σύνδεση με OAuth",
"oauth_mobile_redirect_uri": "URI Ανακατεύθυνσης για κινητά τηλέφωνα",
"oauth_mobile_redirect_uri_override": "Προσπέλαση URI ανακατεύθυνσης για κινητά τηλέφωνα",
@@ -349,7 +351,7 @@
"template_settings": "Πρότυπα ειδοποιήσεων",
"template_settings_description": "Διαχείριση προσαρμοσμένων προτύπων για ειδοποιήσεις",
"theme_custom_css_settings": "Προσαρμοσμένο CSS",
"theme_custom_css_settings_description": "Τα Cascading Style Sheets(CSS) επιτρέπει την προσαρμογή του σχεδιασμού του Immich.",
"theme_custom_css_settings_description": "Τα Cascading Style Sheets επιτρέπει την προσαρμογή του σχεδιασμού του Immich.",
"theme_settings": "Ρυθμίσεις θέματος",
"theme_settings_description": "Διαχείριση της προσαρμογής του ιστότοπου του Immich",
"thumbnail_generation_job": "Δημιουργία Μικρογραφιών",
@@ -449,6 +451,9 @@
"admin_password": "Κωδικός πρόσβασης Διαχειριστή",
"administration": "Διαχείριση",
"advanced": "Για προχωρημένους",
"advanced_settings_clear_image_cache": "Καθαρισμός προσωρινής μνήμης εικόνων",
"advanced_settings_clear_image_cache_error": "Αποτυχία καθαρισμού προσωρινής μνήμης εικόνων",
"advanced_settings_clear_image_cache_success": "Επιτυχής εκκαθάριση {size}",
"advanced_settings_enable_alternate_media_filter_subtitle": "Χρησιμοποιήστε αυτήν την επιλογή για να φιλτράρετε τα μέσα ενημέρωσης κατά τον συγχρονισμό με βάση εναλλακτικά κριτήρια. Δοκιμάστε αυτή τη δυνατότητα μόνο αν έχετε προβλήματα με την εφαρμογή που εντοπίζει όλα τα άλμπουμ.",
"advanced_settings_enable_alternate_media_filter_title": "[ΠΕΙΡΑΜΑΤΙΚΟ] Χρήση εναλλακτικού φίλτρου συγχρονισμού άλμπουμ συσκευής",
"advanced_settings_log_level_title": "Επίπεδο σύνδεσης: {level}",
@@ -512,6 +517,7 @@
"all": "Όλα",
"all_albums": "Όλα τα άλμπουμ",
"all_people": "Όλα τα άτομα",
"all_photos": "Όλες οι φωτογραφίες",
"all_videos": "Όλα τα βίντεο",
"allow_dark_mode": "Επιτρέψτε τη σκοτεινή λειτουργία",
"allow_edits": "Επιτρέψτε τις τροποποιήσεις",
@@ -519,6 +525,9 @@
"allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει",
"allowed": "Επιτρεπόμενο",
"alt_text_qr_code": "Εικόνα κωδικού QR",
"always_keep": "Διατήρηση πάντα",
"always_keep_photos_hint": "Η «Απελευθέρωση χώρου» θα κρατήσει όλες τις φωτογραφίες σε αυτήν τη συσκευή.",
"always_keep_videos_hint": "Η «Απελευθέρωση χώρου» θα κρατήσει όλα τα βίντεο σε αυτήν τη συσκευή.",
"anti_clockwise": "Αντίθετα με τη φορά του ρολογιού",
"api_key": "Κλειδί API",
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
@@ -563,6 +572,9 @@
"asset_list_layout_sub_title": "Διάταξη",
"asset_list_settings_subtitle": "Ρυθμίσεις διάταξης πλέγματος φωτογραφιών",
"asset_list_settings_title": "Πλέγμα φωτογραφιών",
"asset_not_found_on_device_android": "Το στοιχείο δεν βρέθηκε στη συσκευή",
"asset_not_found_on_device_ios": "Το στοιχείο δεν βρέθηκε στη συσκευή. Αν χρησιμοποιείτε iCloud, μπορεί να μην είναι προσβάσιμο λόγω προβληματικού αρχείου που είναι αποθηκευμένο στο iCloud",
"asset_not_found_on_icloud": "Το στοιχείο δεν βρέθηκε στο iCloud. Μπορεί να μην είναι προσβάσιμο λόγω προβληματικού αρχείου που είναι αποθηκευμένο στο iCloud",
"asset_offline": "Αντικείμενο εκτός σύνδεσης",
"asset_offline_description": "Αυτό το εξωτερικό αντικείμενο δεν βρέθηκε πλέον στον δίσκο. Παρακαλώ επικοινωνήστε με τον διαχειριστή του Immich για βοήθεια.",
"asset_restored_successfully": "Το στοιχείο αποκαταστάθηκε με επιτυχία",
@@ -752,11 +764,12 @@
"cleanup_deleted_assets": "Μεταφέρθηκαν {count} αρχεία στον κάδο της συσκευής",
"cleanup_deleting": "Μεταφορά στον κάδο…",
"cleanup_found_assets": "Βρέθηκαν {count} αρχεία που έχουν αντιγραφεί ασφαλώς",
"cleanup_found_assets_with_size": "Βρέθηκαν {count} στοιχεία αντιγράφου ασφαλείας ({size})",
"cleanup_icloud_shared_albums_excluded": "Τα Κοινόχρηστα Άλμπουμ iCloud εξαιρούνται από τη σάρωση",
"cleanup_no_assets_found": "Δεν βρέθηκαν αντίγραφα ασφαλείας στοιχείων που να ταιριάζουν με τα κριτήρια σου",
"cleanup_no_assets_found": "Δεν βρέθηκαν στοιχεία που να ταιριάζουν με τα παραπάνω κριτήρια. Η «Απελευθέρωση χώρου» μπορεί να διαγράψει μόνο τα στοιχεία που έχουν αντιγραφεί ασφαλώς στο διακομιστή",
"cleanup_preview_title": "Στοιχεία προς διαγραφή ({count})",
"cleanup_step3_description": "Σάρωση για φωτογραφίες και βίντεο που έχουν αντιγραφεί στον διακομιστή με την επιλεγμένη ημερομηνία και τα επιλεγμένα φίλτρα",
"cleanup_step4_summary": "{count} αρχεία που δημιουργήθηκαν πριν από {date} έχουν τοποθετηθεί σε σειρά για διαγραφή από τη συσκευή σας",
"cleanup_step3_description": "Σάρωση για στοιχεία που έχουν αντιγραφεί ασφαλώς σύμφωνα με την ημερομηνία και τις ρυθμίσεις διατήρησης.",
"cleanup_step4_summary": "{count} στοιχεία (δημιουργήθηκαν πριν από {date}) προς διαγραφή από τη συσκευή σας. Οι φωτογραφίες θα παραμείνουν προσβάσιμες από την εφαρμογή Immich.",
"cleanup_trash_hint": "Για την πλήρη απελευθέρωση του χώρου αποθήκευσης, ανοίξτε την εφαρμογή φωτογραφιών του συστήματός σας και αδειάστε τον κάδο",
"clear": "Εκκαθάριση",
"clear_all": "Εκκαθάριση όλων",
@@ -769,6 +782,8 @@
"client_cert_import": "Εισαγωγή",
"client_cert_import_success_msg": "Το πιστοποιητικό πελάτη εισάγεται",
"client_cert_invalid_msg": "Μη έγκυρο αρχείο πιστοποιητικού ή λάθος κωδικός πρόσβασης",
"client_cert_password_message": "Εισάγετε τον κωδικό πρόσβασης για αυτό το πιστοποιητικό",
"client_cert_password_title": "Κωδικός πιστοποιητικού",
"client_cert_remove_msg": "Το πιστοποιητικό πελάτη καταργήθηκε",
"client_cert_subtitle": "Υποστηρίζει μόνο τη μορφή PKCS12 (.p12, .pfx). Η εισαγωγή/αφαίρεση πιστοποιητικού είναι διαθέσιμη μόνο πριν από τη σύνδεση",
"client_cert_title": "Πιστοποιητικό SSL πελάτη [ΠΕΙΡΑΜΑΤΙΚΟ]",
@@ -854,7 +869,7 @@
"custom_locale": "Προσαρμοσμένη Τοπική Ρύθμιση",
"custom_locale_description": "Μορφοποιήστε τις ημερομηνίες και τους αριθμούς, σύμφωνα με τη γλώσσα και την περιοχή",
"custom_url": "Προσαρμοσμένη διεύθυνση URL",
"cutoff_date_description": "Διαγραφή φωτογραφιών και βίντεο παλαιότερων από",
"cutoff_date_description": "Διατήρηση φωτογραφιών από τις τελευταίες…",
"cutoff_day": "{count, plural, one {ημέρα} other {ημέρες}}",
"cutoff_year": "{count, plural, one {έτος} other {έτη}}",
"daily_title_text_date": "Ε, MMM dd",
@@ -982,6 +997,11 @@
"editor_close_without_save_prompt": "Αυτές οι αλλαγές δεν θα αποθηκευτούν",
"editor_close_without_save_title": "Κλείσιμο επεξεργαστή;",
"editor_confirm_reset_all_changes": "Είστε σίγουροι ότι θέλετε να επαναφέρετε όλες τις αλλαγές;",
"editor_discard_edits_confirm": "Απόρριψη αλλαγών",
"editor_discard_edits_prompt": "Έχετε μη αποθηκευμένες αλλαγές. Είστε σίγουροι ότι θέλετε να τις απορρίψετε;",
"editor_discard_edits_title": "Απόρριψη αλλαγών;",
"editor_edits_applied_error": "Αποτυχία εφαρμογής αλλαγών",
"editor_edits_applied_success": "Οι αλλαγές εφαρμόστηκαν με επιτυχία",
"editor_flip_horizontal": "Οριζόντια αναστροφή",
"editor_flip_vertical": "Κάθετη αναστροφή",
"editor_orientation": "Προσανατολισμός",
@@ -1006,6 +1026,7 @@
"error_change_sort_album": "Απέτυχε η αλλαγή σειράς του άλμπουμ",
"error_delete_face": "Σφάλμα διαγραφής προσώπου από το στοιχείο",
"error_getting_places": "Σφάλμα κατά την ανάκτηση τοποθεσιών",
"error_loading_albums": "Σφάλμα κατά τη φόρτωση των άλμπουμ",
"error_loading_image": "Σφάλμα κατά τη φόρτωση της εικόνας",
"error_loading_partners": "Σφάλμα κατά τη φόρτωση συνεργατών: {error}",
"error_retrieving_asset_information": "Σφάλμα κατά την ανάκτηση πληροφοριών στοιχείου",
@@ -1182,6 +1203,8 @@
"features_in_development": "Λειτουργίες υπό Ανάπτυξη",
"features_setting_description": "Διαχειριστείτε τα χαρακτηριστικά της εφαρμογής",
"file_name_or_extension": "Όνομα αρχείου ή επέκταση",
"file_name_text": "Όνομα αρχείου",
"file_name_with_value": "Όνομα αρχείου: {file_name}",
"file_size": "Μέγεθος αρχείου",
"filename": "Ονομασία αρχείου",
"filetype": "Τύπος αρχείου",
@@ -1200,7 +1223,7 @@
"forgot_pin_code_question": "Ξεχάσατε το PIN;",
"forward": "Προς τα εμπρός",
"free_up_space": "Απελευθέρωση χώρου",
"free_up_space_description": "Μετακινήστε τις φωτογραφίες και τα βίντεο που έχουν αντιγραφεί στον κάδο της συσκευής σας για να απελευθερώσετε χώρο. Τα αντίγραφά σας στον διακομιστή παραμένουν ασφαλή",
"free_up_space_description": "Μετακινήστε τις φωτογραφίες και τα βίντεο που έχουν αντιγραφεί στον κάδο της συσκευής σας για να απελευθερώσετε χώρο. Τα αντίγραφά σας στο διακομιστή, παραμένουν ασφαλή.",
"free_up_space_settings_subtitle": "Απελευθέρωση χώρου στη συσκευή",
"full_path": "Πλήρης διαδρομή: {path}",
"gcast_enabled": "Μετάδοση περιεχομένου Google Cast",
@@ -1317,9 +1340,15 @@
"json_editor": "Επεξεργαστής JSON",
"json_error": "Σφάλμα JSON",
"keep": "Διατήρηση",
"keep_albums": "Διατήρηση των άλμπουμ",
"keep_albums_count": "Διατηρούνται {count} {count, plural, one {άλμπουμ} other {άλμπουμ}}",
"keep_all": "Διατήρηση Όλων",
"keep_description": "Επιλέξτε τι θα παραμείνει στη συσκευή σας κατά την απελευθέρωση χώρου.",
"keep_favorites": "Διατήρηση αγαπημένων",
"keep_on_device": "Διατήρηση στη συσκευή",
"keep_on_device_hint": "Επιλέξτε τα αντικείμενα που θα κρατήσετε σε αυτήν τη συσκευή",
"keep_this_delete_others": "Διατήρηση αυτού, διαγραφή υπολοίπων",
"keeping": "Διατηρούνται: {items}",
"kept_this_deleted_others": "Διατηρήθηκε αυτό το στοιχείο και διαγράφηκε/καν {count, plural, one {# στοιχείο} other {# στοιχεία}}",
"keyboard_shortcuts": "Συντομεύσεις πληκτρολογίου",
"language": "Γλώσσα",
@@ -1549,6 +1578,7 @@
"next_memory": "Επόμενη ανάμνηση",
"no": "Όχι",
"no_actions_added": "Δεν έχουν προστεθεί ακόμα ενέργειες",
"no_albums_found": "Δεν βρέθηκαν άλμπουμ",
"no_albums_message": "Δημιουργήστε ένα άλμπουμ για να οργανώσετε τις φωτογραφίες και τα βίντεό σας",
"no_albums_with_name_yet": "Φαίνεται ότι δεν έχετε κανένα άλμπουμ με αυτό το όνομα ακόμα.",
"no_albums_yet": "Φαίνεται ότι δεν έχετε κανένα άλμπουμ ακόμα.",
@@ -1578,11 +1608,11 @@
"no_results_description": "Δοκιμάστε ένα συνώνυμο ή πιο γενική λέξη-κλειδί",
"no_shared_albums_message": "Δημιουργήστε ένα άλμπουμ για να μοιράζεστε φωτογραφίες και βίντεο με άτομα στο δίκτυό σας",
"no_uploads_in_progress": "Καμία μεταφόρτωση σε εξέλιξη",
"none": "Κανένα",
"not_allowed": "Δεν επιτρέπεται",
"not_available": "Μ/Δ (Μη Διαθέσιμο)",
"not_in_any_album": "Σε κανένα άλμπουμ",
"not_selected": "Δεν επιλέχθηκε",
"note_apply_storage_label_to_previously_uploaded assets": "Σημείωση: Για να εφαρμόσετε την Ετικέτα Αποθήκευσης σε στοιχεία που έχουν μεταφορτωθεί προηγουμένως, εκτελέστε το",
"notes": "Σημειώσεις",
"nothing_here_yet": "Τίποτα εδώ ακόμα",
"notification_permission_dialog_content": "Για να ενεργοποιήσετε τις ειδοποιήσεις, μεταβείτε στις Ρυθμίσεις και επιλέξτε να επιτρέπεται.",
@@ -1784,7 +1814,7 @@
"reassigned_assets_to_new_person": "Η ανάθεση {count, plural, one {# αρχείου} other {# αρχείων}} σε νέο άτομο",
"reassing_hint": "Ανάθεση των επιλεγμένων στοιχείων σε υπάρχον άτομο",
"recent": "Πρόσφατα",
"recent-albums": "Πρόσφατα άλμπουμ",
"recent_albums": "Πρόσφατα άλμπουμ",
"recent_searches": "Πρόσφατες αναζητήσεις",
"recently_added": "Προστέθηκαν πρόσφατα",
"recently_added_page_title": "Προστέθηκαν Πρόσφατα",
@@ -1907,6 +1937,7 @@
"search_filter_media_type_title": "Επιλέξτε τύπο μέσου",
"search_filter_ocr": "Αναζήτηση κατά OCR",
"search_filter_people_title": "Επιλέξτε άτομα",
"search_filter_star_rating": "Βαθμολογία με αστέρια",
"search_for": "Αναζήτηση για",
"search_for_existing_person": "Αναζήτηση υπάρχοντος ατόμου",
"search_no_more_result": "Δεν υπάρχουν άλλα αποτελέσματα",
@@ -2049,7 +2080,7 @@
"shared_link_edit_expire_after_option_year": "{count} έτος",
"shared_link_edit_password_hint": "Εισαγάγετε τον κωδικό πρόσβασης κοινής χρήσης",
"shared_link_edit_submit_button": "Ενημέρωση συνδέσμου",
"shared_link_error_server_url_fetch": "Δεν είναι δυνατή η ανάκτηση του URL του διακομιστή",
"shared_link_error_server_url_fetch": "Δεν είναι δυνατή η ανάκτηση του url του διακομιστή",
"shared_link_expires_day": "Λήγει σε {count} ημέρα",
"shared_link_expires_days": "Λήγει σε {count} ημέρες",
"shared_link_expires_hour": "Λήγει σε {count} ώρα",
@@ -2111,6 +2142,8 @@
"skip_to_folders": "Παράκαμψη στους φακέλους",
"skip_to_tags": "Παράκαμψη στις ετικέτες",
"slideshow": "Παρουσίαση",
"slideshow_repeat": "Επανάληψη παρουσίασης",
"slideshow_repeat_description": "Εκκίνηση από την αρχή όταν τελειώσει η παρουσίαση",
"slideshow_settings": "Ρυθμίσεις παρουσίασης",
"sort_albums_by": "Ταξινόμηση άλμπουμ κατά...",
"sort_created": "Ημερομηνία Δημιουργίας",
@@ -2272,6 +2305,7 @@
"upload_details": "Λεπτομέρειες μεταφόρτωσης",
"upload_dialog_info": "Θέλετε να αντιγράψετε (κάνετε backup) τα επιλεγμένo(α) στοιχείο(α) στο διακομιστή;",
"upload_dialog_title": "Ανέβασμα στοιχείου",
"upload_error_with_count": "Σφάλμα μεταφόρτωσης για {count, plural, one {# αρχείο} other {# αρχεία}}",
"upload_errors": "Η μεταφόρτωση ολοκληρώθηκε με {count, plural, one {# σφάλμα} other {# σφάλματα}}, ανανεώστε τη σελίδα για να δείτε νέα στοιχεία μεταφόρτωσης.",
"upload_finished": "Ολοκλήρωση μεταφόρτωσης",
"upload_progress": "Απομένουν {remaining, number} - Ολοκληρώθηκαν {processed, number}/{total, number}",

View File

@@ -311,7 +311,7 @@
"search_jobs": "Search jobs…",
"send_welcome_email": "Send welcome email",
"server_external_domain_settings": "External domain",
"server_external_domain_settings_description": "Domain for public shared links, including http(s)://",
"server_external_domain_settings_description": "Domain used for external links",
"server_public_users": "Public Users",
"server_public_users_description": "All users (name and email) are listed when adding a user to shared albums. When disabled, the user list will only be available to admin users.",
"server_settings": "Server Settings",
@@ -794,6 +794,11 @@
"color": "Color",
"color_theme": "Color theme",
"command": "Command",
"command_palette_prompt": "Quickly find pages, actions, or commands",
"command_palette_to_close": "to close",
"command_palette_to_navigate": "to enter",
"command_palette_to_select": "to select",
"command_palette_to_show_all": "to show all",
"comment_deleted": "Comment deleted",
"comment_options": "Comment options",
"comments_and_likes": "Comments & likes",
@@ -997,6 +1002,11 @@
"editor_close_without_save_prompt": "The changes will not be saved",
"editor_close_without_save_title": "Close editor?",
"editor_confirm_reset_all_changes": "Are you sure you want to reset all changes?",
"editor_discard_edits_confirm": "Discard edits",
"editor_discard_edits_prompt": "You have unsaved edits. Are you sure you want to discard them?",
"editor_discard_edits_title": "Discard edits?",
"editor_edits_applied_error": "Failed to apply edits",
"editor_edits_applied_success": "Edits applied successfully",
"editor_flip_horizontal": "Flip horizontal",
"editor_flip_vertical": "Flip vertical",
"editor_orientation": "Orientation",
@@ -1163,6 +1173,7 @@
"exif_bottom_sheet_people": "PEOPLE",
"exif_bottom_sheet_person_add_person": "Add name",
"exit_slideshow": "Exit Slideshow",
"expand": "Expand",
"expand_all": "Expand all",
"experimental_settings_new_asset_list_subtitle": "Work in progress",
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
@@ -1608,7 +1619,6 @@
"not_available": "N/A",
"not_in_any_album": "Not in any album",
"not_selected": "Not selected",
"note_apply_storage_label_to_previously_uploaded assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
"notes": "Notes",
"nothing_here_yet": "Nothing here yet",
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
@@ -1638,6 +1648,7 @@
"online": "Online",
"only_favorites": "Only favorites",
"open": "Open",
"open_calendar": "Open calendar",
"open_in_map_view": "Open in map view",
"open_in_openstreetmap": "Open in OpenStreetMap",
"open_the_search_filters": "Open the search filters",
@@ -1810,7 +1821,7 @@
"reassigned_assets_to_new_person": "Re-assigned {count, plural, one {# asset} other {# assets}} to a new person",
"reassing_hint": "Assign selected assets to an existing person",
"recent": "Recent",
"recent-albums": "Recent albums",
"recent_albums": "Recent albums",
"recent_searches": "Recent searches",
"recently_added": "Recently added",
"recently_added_page_title": "Recently Added",
@@ -2179,6 +2190,7 @@
"support": "Support",
"support_and_feedback": "Support & Feedback",
"support_third_party_description": "Your Immich installation was packaged by a third-party. Issues you experience may be caused by that package, so please raise issues with them in the first instance using the links below.",
"supporter": "Supporter",
"swap_merge_direction": "Swap merge direction",
"sync": "Sync",
"sync_albums": "Sync albums",

View File

@@ -394,15 +394,52 @@
"transcoding_policy": "Politiko de transkodado",
"transcoding_policy_description": "Kriterioj por indiki ĉu video estas transkodita aŭ ne",
"transcoding_preferred_hardware_device": "Preferita aparato",
"transcoding_preferred_hardware_device_description": "Aplikiĝas nur al VAAPI kaj QSV. Indikas la DRI-nodoj uzataj por transkodado per aparato.",
"transcoding_preset_preset": "Antaŭelekto (-preset)",
"transcoding_preset_preset_description": "Rapideco de densigo. Malplia rapideco rezultas je pli malgrandaj dosieroj, kaj plibonigas kvaliton por donita bitrapido. VP9 ignoras rapidecojn pli grandajn ol 'faster'.",
"transcoding_reference_frames": "Referencaj kadroj",
"transcoding_reference_frames_description": "La nombro da apudaj kadroj uzataj dum densigo de iu kadro. Pli granda valoro rezultas je pli bona densigo, sed malpli rapida laboro. Valoro de 0 indikas aŭtomatan agordon.",
"transcoding_required_description": "Nur videoj kun neakceptataj formatoj",
"transcoding_settings": "Agordoj de transkodado de videoj",
"transcoding_settings_description": "Administri transkodadon de videoj",
"transcoding_target_resolution": "Celita distingivo",
"transcoding_target_resolution_description": "Pli alta distingivo konservas pli da detaloj, sed bezonas pli da tempo por kodigi, donas pli grandajn dosierojn, kaj povas kaŭzi malrapidecon ĉe la apo.",
"transcoding_temporal_aq": "Adaptema kvantigo de tempo (AQ)",
"transcoding_temporal_aq_description": "Aplikiĝas nur al NVENC. Adaptema kvantigo de tempo (AQ) plibonigas kvaliton de scenoj kun multe da detaloj kaj malmulte da movado. Eble ne funkcios kun malnovaj aparatoj.",
"transcoding_threads": "Fadenoj",
"transcoding_threads_description": "Pli alta valoro ebligas pli rapidan kodadon, sed dume lasas malpli da servila kapacito por aliaj taskoj. La numero ne estu pli ol la nombro da disponeblaj CPU-kernoj. Valoro de 0 indikas maksimuma uzo de disponeblaj rimedoj.",
"transcoding_tone_mapping": "Mapado de tonoj",
"transcoding_tone_mapping_description": "Klopodas konservi aspekton de HDR-videoj dum transkodigo al SDR. Ĉiu algoritmo faras proprajn kompromisojn pri koloroj, detaloj kaj heleco. Hable konservas detalojn, Mobius konservas kolorojn, kaj Reinhard konservas helecon.",
"transcoding_transcode_policy": "Politiko de transkodado",
"transcoding_transcode_policy_description": "Politiko pri kiam video estos transkodita. HDR-videoj ĉiam estas transkoditaj (krom se transkodado estas malŝaltita).",
"transcoding_two_pass_encoding": "Dupasa kodigo",
"transcoding_two_pass_encoding_setting_description": "Transkodigo per du pasoj por krei pli bone kodigitajn videojn. Kiam eblas uzi maksimuman bitrapidon (bezonate por funkcii kun H.264 kaj kun HEVC), tiu ĉi modo uzas gamon de bitrapidoj surbaze de tiu maksimumo, kaj ignoras CRF. Por VP9, eblas uzi CRF se maksimuma bitrapido estas malŝaltita.",
"transcoding_video_codec": "Videa kodeko",
"transcoding_video_codec_description": "VP9 havas altan rendimenton kaj taŭgas por retumiloj, sed bezonas pli da tempo por kodigi. HEVC donas similajn rezultojn, sed malpli da retumiloj rekonas ĝin. H.264 estas vaste rekonata kaj rapide transkodebla, sed la dosieroj estas multe pli grandaj. AV1 estas la plej efika kodeko sed ne bone funkcias kun pli malnovaj aparatoj.",
"trash_enabled_description": "Ŝalti la rubujon",
"trash_number_of_days": "Nombro da tagoj",
"trash_number_of_days_description": "Kiom da tagoj oni konservu elementojn en la rubujo antaŭ ol forigi ilin por ĉiam",
"trash_settings": "Agordoj pri rubujo",
"trash_settings_description": "Administri agordojn pri rubaĵoj",
"unlink_all_oauth_accounts": "Malligi ĉiujn OAuth-kontojn",
"unlink_all_oauth_accounts_description": "Ne forgesu malligi ĉiujn OAuth-kontojn antaŭ ol migri al nova provizanto.",
"unlink_all_oauth_accounts_prompt": "Ĉu vi certas, ke vi volas malligi ĉiujn OAuth-kontojn? Tio kreos novan OAuth-identigilon por ĉiu uzanto, kaj ne eblos malfari tion.",
"user_cleanup_job": "Purigado de uzantoj",
"user_delete_delay": "La konto de <b>{user}</b> kaj ĝiaj elementoj estos por ĉiam forigitaj post {delay, plural, one {# tago} other {# tagoj}}.",
"user_delete_delay_settings": "Prokrasto de forigo",
"user_delete_delay_settings_description": "Agordas la nombron da tagoj konserviĝos forigita konto de uzanto, antaŭ ol porĉiama forigo. La porĉiama forigo okazas aŭtomate je noktomezo. Ŝanĝoj al tiu ĉi numero ekhavos efikon je venonta noktomezo.",
"user_delete_immediately": "La konto de <b>{user}</b> estos <b>tuj forigita</b> sed eblos dum kelkaj tagoj retrovi ĝin laŭbezone.",
"user_delete_immediately_checkbox": "Envicigi uzanton kaj ties elementojn por tuja forigo",
"user_details": "Detaloj pri uzanto",
"user_management": "Administrado de uzantoj",
"user_password_has_been_reset": "Pasvorto de tiu ĉi uzanto estas restarigita:",
"user_settings_description": "Administri agordojn pri uzantoj"
},
"asset_viewer_settings_subtitle": "Administri agordojn pri vidilo de galerioj",
"backup_setting_subtitle": "Administri agordojn pri fona kaj malfona alŝutado",
"backup_settings_subtitle": "Administri agordojn pri alŝutado",
"cleanup_icloud_shared_albums_excluded": "Dividitaj albumoj ĉe iCloud estas ekskluditaj de la analizado",
"cleanup_step3_description": "Serĉi fotojn kaj videojn kun sekurkopio ĉe la servilo, laŭ la elektita limdato kaj filtriloj",
"cleanup_step3_description": "Serĉi fotojn kaj videojn kun sekurkopio ĉe la servilo, laŭ la elektita limdato kaj filtriloj.",
"download_settings_description": "Administri agordojn pri elŝutado de elementoj",
"edit_exclusion_pattern": "Redakti skemon de ekskludo",
"errors": {

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