Compare commits

..

123 Commits

Author SHA1 Message Date
Hosted Weblate 06b6f16cd6 chore(web): update translations
Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: 12LuA <Luca.strack@gmx.de>
Co-authored-by: AM <alex2539rulez@yahoo.com>
Co-authored-by: Adam Havránek <adamhavra@seznam.cz>
Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Alex <darkstylo@gmail.com>
Co-authored-by: AntonPalmqvist <apq@users.noreply.hosted.weblate.org>
Co-authored-by: Antonio Labate <antoniolabate19@gmail.com>
Co-authored-by: Arif Budiman <arifpedia@gmail.com>
Co-authored-by: Avihai Zarouk <myaulamyau@gmail.com>
Co-authored-by: Bat-Uyanga Batdelger <batuyanga@gmail.com>
Co-authored-by: Benjamin Serec <serec.benjamin@gmail.com>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Calvin Erfmann <calvin.erfmann@pm.me>
Co-authored-by: Carlo Beltrame <weblate@pendantmusic.ch>
Co-authored-by: D S <weblate.2w8z9@slmail.me>
Co-authored-by: David Maneiro <david.maneiro8@gmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: DevServs <bonov@mail.ru>
Co-authored-by: Don't use my name <maxabmeyer@gmail.com>
Co-authored-by: Dusan Hlavaty <dhlavaty@gmail.com>
Co-authored-by: Dániel Gál <galdaniel.school@gmail.com>
Co-authored-by: Elyas Sindi <elyassindi@proton.me>
Co-authored-by: Enric Pagès i Gassull <enricpages@hotmail.com>
Co-authored-by: Filipe Monteiro <pimonteiro@protonmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Frank Paul Silye <frankps@gmail.com>
Co-authored-by: Gnubblz <philipp@phild.de>
Co-authored-by: HackingAll <hacking.all.YT@gmail.com>
Co-authored-by: Hamza Foziljonov <hamza.uztranslator@gmail.com>
Co-authored-by: Happy <59247878+happy2452354@users.noreply.github.com>
Co-authored-by: Haru Ijima <haruijimakun@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hurricane_32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrekhaav@users.noreply.hosted.weblate.org>
Co-authored-by: Iren <iren.biggel@gmail.com>
Co-authored-by: Ivan Dimitrov <idimitrov08@gmail.com>
Co-authored-by: JPar99 <github.wad969@passmail.com>
Co-authored-by: Jarle K. Hopland <jarlekh@gmail.com>
Co-authored-by: Jayson <mrjaysonbulugagao@gmail.com>
Co-authored-by: Jeanré du Plessis <jeanreduplessis2000@gmail.com>
Co-authored-by: Jeppe Nellemann <jepnel@proton.me>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Kristian Franceschini <kristian@kmsfhost.com>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Loonatiq <Loona9422@pm.me>
Co-authored-by: Lorenz Schmid <schmidlorenz@gmx.ch>
Co-authored-by: MSDNicrosoft <i@msdnicrosoft.work>
Co-authored-by: MarcSerraPeralta <marcserraperalta@gmail.com>
Co-authored-by: Marco Janssen <Marco@neverminds.net>
Co-authored-by: Marco Mertel <mertel.marco@gmail.com>
Co-authored-by: Marian Wolf <marian.wolf2008@gmail.com>
Co-authored-by: Matjaž T. <matjaz@moj-svet.si>
Co-authored-by: Matteo Morari <matteo.morari04@gmail.com>
Co-authored-by: Matthias Cramer <matthias.cramer@iway.ch>
Co-authored-by: Maxi Herczegh <maxiherczegh@outlook.com>
Co-authored-by: Maćvej Pažytnykh <ma.pazhitnykh@gmail.com>
Co-authored-by: Mees Frensel <meesfrensel@gmail.com>
Co-authored-by: Melih Ozkan <malihozkan156@gmail.com>
Co-authored-by: Mike Moolenaar <mike.moolenaar@posteo.nl>
Co-authored-by: Mona Lisa <nickwick@users.noreply.hosted.weblate.org>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: NAL <niko.a.leinonen@gmail.com>
Co-authored-by: Oleksandr Yurov <oyurov@icloud.com>
Co-authored-by: Osama <laptooxz@proton.me>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Patrick Raths <piroh1990@gmail.com>
Co-authored-by: Pavlo Sydoriuk <sidopas@gmail.com>
Co-authored-by: Pazystamas <pazystamas@gmail.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Phillip Kang <phillipxkang@gmail.com>
Co-authored-by: Piero Bi <biagini93@ik.me>
Co-authored-by: PilgrimToHyperion <pilgrimtohyperion@gmail.com>
Co-authored-by: Piotr Pazhytnykh <pazhitnykhpetr@gmail.com>
Co-authored-by: PontusÖsterlindh <pontus@osterlindh.com>
Co-authored-by: Raul <raul.plesa@gmail.com>
Co-authored-by: Remco <remco@pander.io>
Co-authored-by: Richiondrugs <riccardocastellano07@gmail.com>
Co-authored-by: Robert Virkus <robert.virkus@enough.de>
Co-authored-by: Sebastian <sebastiankiwidk@gmail.com>
Co-authored-by: Seungbeom Ha <tmdqja75@gmail.com>
Co-authored-by: Shaw <shawyunz@gmail.com>
Co-authored-by: Simone Ognibene <ognibene2001@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: TA <tobi@warsnich.de>
Co-authored-by: Taleh Rzayev <talehji@gmail.com>
Co-authored-by: Tim Morley <weblate.3919org@timsk.org>
Co-authored-by: UDP <udp@users.noreply.hosted.weblate.org>
Co-authored-by: Ulices <hasecilu@tuta.io>
Co-authored-by: User 123456789 <user123456789@users.noreply.hosted.weblate.org>
Co-authored-by: VRADDB <dimitri.debruyne@vanroey.be>
Co-authored-by: Vegard Fladby <vegard@fladby.org>
Co-authored-by: Vishal Ghelani <vishal.ghelani@gmail.com>
Co-authored-by: WellsTsai <dan50907@gmail.com>
Co-authored-by: Yohsi <yohan.simard@proton.me>
Co-authored-by: Yolopix <13918281+y0lopix@users.noreply.github.com>
Co-authored-by: Yusuf Soyipek <yusuf@soyipek.com>
Co-authored-by: Zhigang Wu <wu.zhigang@xuan-ming.net>
Co-authored-by: Zillazapdos <harald.vagle.undheim@icloud.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: arvissidorovs <arvis.sidorovs@gmail.com>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: bosund <bosund@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: daniqss <danielqueijo14@gmail.com>
Co-authored-by: david7xw <davdavid7xw@gmail.com>
Co-authored-by: dkorecko <github@david.korecko.com>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: fascinate722 <fascinate722@gmail.com>
Co-authored-by: guillermo <guillermoremesa@gmail.com>
Co-authored-by: iwonder <iwonder@users.noreply.hosted.weblate.org>
Co-authored-by: jasoisjaso <jaso.bih@gmail.com>
Co-authored-by: jicetus. <jicetus@users.noreply.hosted.weblate.org>
Co-authored-by: jmilovic <krunazajecar@gmail.com>
Co-authored-by: kylo32 <kylo32@gmail.com>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: muziqaz <muziqaz@users.noreply.hosted.weblate.org>
Co-authored-by: on9686 <on9686@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: s0nprem0 <s0nprem0@proton.me>
Co-authored-by: tct123 <tct1234@protonmail.com>
Co-authored-by: traumanndylan <traumanndylan@gmail.com>
Co-authored-by: tvirolai <tuomo.virolainen@rebase.fi>
Co-authored-by: veiskiboi <vesahok@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: x0x0b <42596409+x0x0b@users.noreply.github.com>
Co-authored-by: Сергій Савчук <serge.savchuk@gmail.com>
Co-authored-by: 星 <seirun124@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/immich/immich/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/af/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/az/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/be/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
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/eu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fil/
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/gsw/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
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/ko/
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/mn/
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/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/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uz/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translation: Immich/immich
2026-05-18 10:11:36 +02:00
Yaros 3eb03f7934 chore: update readmes to match main (#28458) 2026-05-17 13:08:27 -05:00
Alex 03ed3daa31 chore: improve mobile slideshow (#28460) 2026-05-17 10:54:21 -05:00
Min Idzelis 02581e81a7 fix(web): work around Chrome HDR image seam lines during zoom (#27715)
Change-Id: Ic5a5b1a476c2af93b465ef23dabc601a6a6a6964

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-16 02:15:24 +00:00
Santo Shakil 3ab3d5cf43 fix(mobile): don't force-unwrap nil localizedTitle in ios getAlbums (#28452)
crashes on ios 26 when a PHAssetCollection returns nil for
localizedTitle. fall back to localIdentifier. ref #28428
2026-05-15 18:12:28 -05:00
Ben Beckford 0ef04d9baa feat(mobile): slideshow view (#28421)
* feat(mobile): slideshow view

* move slideshow settings to metadata store

* remove watch in initState

* wrap progress bar in safearea

* show slideshow button on remote albums

* fix crash on unknown assets

* always show slideshow option

* add zoom effect

* add padding to slideshow settings

* chore: styling tweak

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-15 18:12:04 -05:00
Santo Shakil df016f9228 fix(mobile): mounted check in ThumbnailTile hero flight listener (#28451)
When the user pops back from the asset viewer mid-flight, the hero
animation can fire its status listener after _ThumbnailTileState has
been disposed. setState then throws a null check on State._element.

Guard the listener with `if (!mounted) return;` — same pattern as
#28300 in the album sync action.
2026-05-15 21:41:04 +00:00
Santo Shakil 17779c1e74 fix(mobile): cronet thumbnail buffer overflow regression from #28439 (#28450)
The hybrid added in onReadCompleted reuses Cronet's ByteBuffer between
reads to save a JNI wrap call when no grow is needed. That reuse breaks
advance() — Cronet's position() is cumulative across reads, so the same
K bytes get counted on every subsequent iteration. b.offset overshoots
b.capacity, the reuse branch keeps firing on a now-empty buffer, and
request.read() throws the original IllegalArgumentException again.

Always pass a fresh wrap from wrapRemaining() so byteBuffer.position()
reflects only this iteration's bytes. Same shape as the original PR
had before the broken optimization was layered on top.
2026-05-15 17:25:31 -04:00
Santo Shakil 01d6a244d8 fix(mobile): cronet buffer overflow on compressed thumbnails (#28439)
CronetImageFetcher sized the response buffer from Content-Length, which is
the compressed wire size. Cronet auto-decompresses gzip/br responses and
writes decompressed bytes into the buffer, exceeding it and throwing
IllegalArgumentException: ByteBuffer is already full on the next read. Use
the growable path; Content-Length becomes an initial alloc hint only,
capped at 128 MB so an untrusted server can't overflow Int.MAX_VALUE or
OOM us upfront. Reuse Cronet's ByteBuffer between reads when no grow is
needed.
2026-05-15 14:48:23 -04:00
Ben Beckford 21d6755f39 fix(web): recently added ux (#28435) 2026-05-14 22:22:23 -05:00
Robert Deaton e91c017dd0 fix(server): dedupe database backup jobs (#28341)
* fix(server): dedupe database backup jobs via jobId

#27268 shows backup jobs piling up in the queue across upgrades; one pending
backup is always enough.

* fix(tests): Avoid stale backup files from previous test runs being erroneously returned from createBackup

* fix(jobs): Use bullmq's deduplication over jobId to avoid failed jobs from blocking future executions.

---------

Co-authored-by: Robert Deaton <immich@rdeaton.space>
2026-05-14 20:59:15 -04:00
Alex 43687cd8b4 fix: kebab menu icon colors and actions (#28433) 2026-05-14 22:23:50 +00:00
shenlong 06729ee5a5 chore: cleanup unused store keys (#28415)
cleanup unused store keys

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-14 16:21:06 -05:00
Nojus Gudinavičius b0c9743d9a feat(server): allow subpaths for machine learning URL (#28427)
This allows to use a machine learning server URL under a subpath,
such as "http://example.com/ml-server/".
2026-05-14 12:46:31 +00:00
Marius 37cc028868 fix(mobile): use correct delete action (#26575)
fix(mobile): use correct delete for trashed assets

When viewing a trashed asset, the viewer bottom bar now shows the permanent delete button instead of the trash button, which had no effect on already-trashed assets.
2026-05-14 11:57:19 +00:00
Inês Costa 84a2b7a3c8 fix(mobile): add restore option to trashed assets (#27442) 2026-05-14 07:19:00 +00:00
racehd 89b3433346 feat(docs): add fixed subnet guide for Synology to prevent firewall issues (#26554)
* - Add Set Fixed Subnet section
- Add newline after details summary to properly render summary with mdx

* pnpm run format --write

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-05-13 23:54:13 +00:00
shenlong 3ff0d47ee3 chore: do not cache dart_tool (#28409)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-13 19:46:24 -04:00
shenlong aeaf846482 chore: cleanup unused store keys (#28415)
cleanup unused store keys

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-13 18:03:57 -05:00
Santo Shakil b031548791 fix(mobile): don't block app open on slow validateAccessToken (#28405)
* fix(mobile): don't block app open on slow validateAccessToken

AuthGuard.onNavigation was async so auto_route awaited the body through validateAccessToken's OS timeout. now it's sync and the validate runs in bg. kicks to login on 401.

* fix(mobile): handle re-login race in AuthGuard validate

if user logs out + logs back in during a slow validate, the old 401 was logging them out again. now we check the token hasn't changed before redirecting, and dedupe in-flight calls.

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-13 11:52:43 -05:00
Jason Rasmussen fcea617313 fix: ignore icc profile make and model (#28412) 2026-05-13 12:07:35 -04:00
Mees Frensel 024f20ea26 chore(web): use DatePicker component from UI lib (#28406) 2026-05-13 09:37:07 -05:00
shenlong 0a4ed6fd71 refactor: migrate viewer config to metadata table (#28396)
* refactor: app metadata

* refactor to per row store

* cleanup

* more test

* review changes

* more refactor

* refactor

* migrate primary color

* migrate dynamic theme

* migrate colorfulInterface

* cleanup providers

* migrate cleanup

* migrate mapconfig

* remove unused keys

* migrate timeline config

* migrate image config

* migrate viewer config

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-13 09:36:19 -05:00
Alex b6e2ce1f35 fix(mobile): revert drop deprecated deviceAssetId / deviceId from upload fields (#28384) (#28400)
* Revert "chore(mobile): drop deprecated deviceAssetId / deviceId from upload fields (#28384)"

This reverts commit 571e6a8560.

* chore(mobile): add note on kept deprecated upload fields

---------

Co-authored-by: Santo Shakil <shakil.mezbah@gmail.com>
2026-05-13 09:36:16 -05:00
bo0tzz e323e778cd fix: update server-commands subcommand list (#28402) 2026-05-13 09:27:25 -04:00
renovate[bot] 6a87797649 chore(deps): update terraform cloudflare to v4.52.7 (#28370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 23:50:23 -04:00
renovate[bot] f4a4649bbc chore(deps): update dependency canvas to v3 (#28376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 23:49:22 -04:00
Alex 6ca54ee722 feat: display more info in asset viewer (#24630)
* feat(mobile): more info for asset viewer

* feat(mobile): more info for asset viewer
2026-05-13 02:07:23 +00:00
shenlong 8e3035f783 chore: run mobile tests in parallel (#28393)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-12 17:17:07 -05:00
shenlong 79801595db refactor: move image config to metadata table (#28228)
* migrate image config

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-13 03:20:35 +05:30
Yaros 3e1c8aacb1 feat(mobile): trash/restore all (#28116)
* feat(mobile): trash/restore all

* chore: remove themeData variable

* chore: filter query by user

* refactor

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-12 14:56:19 -05:00
shenlong 91ac56cef2 refactor: move timeline config to metadata table (#28227)
* migrate timeline config

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-13 01:23:25 +05:30
Jason Rasmussen 58beac8fe0 chore: migrate mobile makefile to mise (#28390) 2026-05-12 15:21:04 -04:00
Santo Shakil f632d320f5 fix(mobile): clear linkedRemoteAlbumId in reset() so FK refs dont dangle (#28382)
* fix(mobile): clear linkedRemoteAlbumId in reset() so FK refs dont dangle

reset() runs with foreign_keys off before wiping remote_* tables, so the ON DELETE SET NULL cascade on linkedRemoteAlbumId doesnt fire. local rows keep pointing at deleted remote ids.

affects logout (clearLocalData calls reset()) and the server SyncResetV1 path (30 day idle, etc). after re-login, syncLinkedAlbum either silently warns or fires 400s (those are covered by #28299).

null the column manually inside the same transaction. cascade still works for normal SyncAlbumDeleteV1.

verified on pixel 9a with this branch built locally: logged out, deleted album from web, logged back in. without fix linkedRemoteAlbumId stayed dangling. with fix all three local rows have linkedRemoteAlbumId = NULL after the logout reset, and recovery is clean once manageLinkedAlbums runs again.

* fix(mobile): always re-enable foreign_keys in reset() + simplify the update

re-enable foreign_keys inside a try/finally so it always runs even if the transaction throws. without this, a failed reset would leave the connection with foreign_keys = OFF and silently disable cascades for everything after (per copilot review).

also drop the where filter on the linkedRemoteAlbumId update, unconditional update-all is simpler and we wipe everything in reset anyway (per ganka review).
2026-05-12 13:43:15 -05:00
shenlong 2ddaf6a611 fix: indexes on remote_asset_entity (#28264)
* fix: periodically execute pragma optimize

* fix: indexes on remote_asset_entity

* regen files

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-12 16:43:24 +00:00
shenlong 1932c60e1c fix: kekab icon colors in light mode (#28366)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-12 11:27:55 -05:00
Brandon Wees dc6f8e746e fix: deep link for assets when asset viewer already open (#27971) 2026-05-12 16:19:54 +00:00
Jason Rasmussen ad7aedb843 refactor: move plugins to packages (#28389) 2026-05-12 13:28:30 +00:00
Santo Shakil 571e6a8560 chore(mobile): drop deprecated deviceAssetId / deviceId from upload fields (#28384)
server removed both fields from AssetMediaCreateDto in #27818. zod silently strips unknown fields so uploads still work, but we send dead weight on every request.

drop from foreground + background upload paths + share intent path. deviceAssetId stays as the internal background_downloader taskId, just not in the multipart form fields anymore.
2026-05-12 09:12:26 -04:00
bo0tzz 4791313def fix: manage oazapfts through mise (#28380) 2026-05-12 08:12:27 -04:00
renovate[bot] f88fdae048 fix(deps): update dependency @immich/ui to ^0.77.0 (#28373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 12:15:47 +02:00
renovate[bot] bcef7aa6b6 chore(deps): update github-actions (#28372)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 12:07:32 +02:00
renovate[bot] ce292bdce9 chore(deps): update base-image to v202605051129 (#28374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 12:02:43 +02:00
renovate[bot] 4eee023648 chore(deps): update docker.io/valkey/valkey:9 docker digest to 8436e10 (#28369)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-12 11:52:30 +02:00
shenlong 8f4b0fce49 fix: limit android background worker duration (#23566)
* fix: limit each android background run to 20 mins

# Conflicts:
#	mobile/lib/domain/services/background_worker.service.dart

* review chages

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-11 23:08:17 -05:00
Timon c6b3127b35 feat(web): add individual filter removal from search result chips (#28166)
* feat(web): add individual filter removal from search result chips

* drop cast

* use delete

* lint

* stylings

* filter

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-12 03:50:40 +00:00
shenlong 4d6a50c2cb refactor: move map config to metadata table (#28226)
* refactor: app metadata

* refactor to per row store

* cleanup

* more test

* review changes

* more refactor

* refactor

* migrate primary color

* migrate dynamic theme

* migrate colorfulInterface

* cleanup providers

* migrate cleanup

* migrate mapconfig

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-11 22:43:52 -05:00
Jason Rasmussen 15f3947ae6 chore: mise scripts (#28367) 2026-05-11 17:46:02 -04:00
Ben Beckford e142e3aca7 feat: recently added assets page (#28272)
* feat(server): add ordering date option to time buckets

* feat(web): add recently added page

* feat(server): recently created assets in explore data

* feat(web): recently added in explore tab

* fix: recently added assets ordering

* fix(server): failing bucket test

* feat(web): improve recently added preview

* chore: update e2e explore/timeline tests

* chore: rename and refactor timeline ordering dates

* fix(web): invalid timeline option

* feat(mobile): recently added page

* fix(server): sync tests

* fix(mobile): resync assets to get uploadedAt column

* chore: rename assetorderby enum

* chore(mobile): formatting

* minor fixes

* stylings

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-11 21:35:10 +00:00
Brandon Wees 38438c8d9a refactor!: remove asset faces from AssetResponseDto (#27779)
* refactor!: remove faces from `people` in AssetResposnseDto

* chore: tests

* chore: e2e generator

* chore: code review readonly

* chore: code review changes

* chore: cleanup

* fix: openapi

* chore: format

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-05-11 17:05:40 -04:00
Alex a278c10c75 fix: mobile upload duration type (#28362) 2026-05-11 15:46:00 -05:00
renovate[bot] 2276443c56 fix(deps): update dependency kysely to v0.28.17 [security] (#28363)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 22:38:25 +02:00
Jason Rasmussen bb44773e57 chore: remove unused commands (#28361) 2026-05-11 16:19:40 -04:00
Jason Rasmussen 14d9e90a03 refactor: move i18n formatting to workspace root (#28360)
refactor: move i18n formatting to project root
2026-05-11 16:19:28 -04:00
Jason Rasmussen 03e042213c refactor: move e2e-auth-server to packages (#28358) 2026-05-11 15:39:59 -04:00
Jason Rasmussen db589455f4 refactor: move cli to package folder (#28356) 2026-05-11 14:49:45 -04:00
Jason Rasmussen fb0a54d548 chore: mise on windows (#28351)
* chore: mise on windows

* chore: bump use-mise
2026-05-11 20:04:38 +02:00
renovate[bot] 7013cc0904 fix(deps): update dependency @opentelemetry/exporter-prometheus to ^0.217.0 [security] (#28353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 18:03:30 +00:00
renovate[bot] dcaf7b4a65 fix(deps): update dependency @opentelemetry/sdk-node to ^0.217.0 [security] (#28354)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 19:48:25 +02:00
shenlong 12f7b2a005 chore: add always_put_control_body_on_new_line lint (#28352)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-11 13:47:24 -04:00
Jason Rasmussen 7837d40f57 chore: move sdk to packages (#28350) 2026-05-11 13:37:10 -04:00
bo0tzz b4f719653f fix: indentation and typo (#28349)
* fix: indentation and typo

* neline
2026-05-11 09:17:39 -05:00
bo0tzz f370b4bac6 chore: fold apk comment qr in <details> (#28348) 2026-05-11 09:40:19 -04:00
Mert d788169bf3 chore(server)!: remove libopus enum (#28325) 2026-05-11 08:02:57 -04:00
Mert eea820fa2f chore(server): enable hw decoding by default (#28324) 2026-05-11 08:02:26 -04:00
Timon 271f1cb868 feat(web): Add metadata overlay to slideshow (#24627)
* feat: add slideshow metadata overlay and settings

* Introduced a new SlideshowMetadataOverlay component to display image information during slideshows.
* Updated slideshow settings modal to include options for showing the metadata overlay and selecting its display mode (Description Only or Full).
* Added corresponding translations and store management for the new overlay features.

* remove noisy log

* constant opacity

* 2nd pass

* more

* use text components

* lint
2026-05-11 11:49:12 +02:00
Mert 8c8dc9d32f chore(ml)!: remove deprecated envs (#28326)
remove deprecated envs
2026-05-09 22:40:05 +00:00
Alex fd18e55f7c chore: token extraction for build mobile (#28320)
Co-authored-by: bo0tzz <git@bo0tzz.me>
2026-05-09 15:08:07 +00:00
shenlong faab9e620d refactor: medium repository context helpers (#28311)
* refactor: medium repository context helpers

* test: add regress test for 26723

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-09 08:19:31 -05:00
Matthew Momjian 5ba3efafd8 fix(deployment): remove unneeded volume (#28307)
remove unneeded volume
2026-05-09 09:07:54 -04:00
Alex 8b3c9bf9c3 feat(ci): publish PR Android APK to comment (#28283)
* feat(ci): publish PR Android APK to R2 with installable links

Adds a universal debug APK to PR builds and uploads it to a public
R2 bucket alongside the existing GitHub Actions artifact. Posts a
sticky PR comment with tap-to-install links and a QR code so testers
can install directly on their device without unzipping artifacts.

Required setup:
- Secrets: R2_APK_ACCESS_KEY_ID, R2_APK_SECRET_ACCESS_KEY,
  R2_APK_ACCOUNT_ID, R2_APK_BUCKET
- Optional repo variable: APK_PUBLIC_HOST (defaults to apk.immich.app)
- R2 bucket configured with a public custom domain matching APK_PUBLIC_HOST

* chore(ci): drop R2 upload, link directly to GitHub artifact

Surfaces the existing release-apk-signed artifact in a sticky PR
comment with a QR code. Avoids new infra and secrets — the trade-off
is GitHub login and a zip wrapper instead of tap-to-install.

* feat(ci): build PR APK as release and publish to GitHub Release

PR builds now produce a release APK signed with the release keystore.
The universal APK is published as a GitHub Release asset under tag
'pr-<num>' (prerelease), giving testers a direct, unzipped, tap-to-
install URL plus a QR code in the PR comment. The release-apk-signed
artifact is unchanged.

* chore(ci): drop GitHub Release, publish universal APK as own artifact

Reverts the prerelease publish. Uploads the universal release APK as
a separate single-file artifact so its download URL gives a zip
containing only that APK — no extra files to dig through. The QR in
the PR comment points at this universal-only artifact.

* chore(ci): build only universal APK for PR, drop split artifact

PR builds skip the arm64-only split — release-apk-signed now contains
just the universal app-release.apk, so the download zip is a single
file. Removes the redundant separate universal artifact and points
the PR comment QR at the main artifact URL.

* feat(mobile): suffix PR APK applicationId so it installs alongside production

Each PR build now becomes app.alextran.immich.pr<num> via PR_NUMBER env
read in build.gradle, so testers can install multiple PR builds and the
Play Store version on the same device without uninstalling. Also tags
the version with -pr<num> for visibility.

* feat(ci): allow PR APK build to run on forks

Forks can now run the Android build job. Steps that need repo secrets
(create-workflow-token, Create Keystore) are skipped when the PR is
from a fork, the checkout falls back to GITHUB_TOKEN, and build.gradle
falls back to debug signing if the release keystore isn't materialised.
The PR comment still requires write access, so it's gated to non-fork
PRs — fork APKs are reachable from the workflow run's artifact tab.
2026-05-09 07:46:40 -05:00
Yaros 41f285aa3e feat(mobile): increased tap area on video player overlay (#27269)
* fix(mobile): improved tap area on video player

* fix: back button padding

* chore: use sizedbox.square & button padding

* chore: fixed padding
2026-05-09 10:47:41 +07:00
Sandro fdac6c8bc4 fix(docs): missing colon in config file doc (#28313)
Fix missing colon
2026-05-09 09:44:41 +07:00
Thorsten Winkler d7f05d2510 fix(mobile): Deduplicate assets in person view timeline (#26723)
fix(mobile): deduplicate assets in person view timeline

Previously, assets with multiple face records for the same person (e.g.,
manual Digikam imports and Immich ML detections) appeared multiple times
in the person timeline. This was caused by an inner join on the
assetFaceEntity without proper deduplication.

This commit refactors the timeline queries to use a subquery approach
instead of joins and grouping. This ensures:

- _getPersonBucketAssets: Only unique assets are fetched, even if
  multiple face records exist for a single asset.
- _watchPersonBucket: Asset counts in timeline headers are accurate
  and represent unique assets.
- Performance: Database overhead is reduced by avoiding complex joins
  and explicit groupBy operations on large result sets.

Signed-off-by: thowdev <12428285+thowdev@users.noreply.github.com>
2026-05-09 01:53:18 +00:00
stfn 3100bd5eed fix(mobile): avoid duplicate assets in album view (#28152)
fix(mobile): avoid duplicate assets in remote album timeline

Co-authored-by: Stefan Friedli <stefan@stefanfriedli.ch>
2026-05-09 08:24:54 +07:00
Jason Rasmussen 8a024e2b50 chore: faster web linting (#28303) 2026-05-08 16:55:14 -04:00
Jason Rasmussen 25a6a38b30 chore: use mise (#28298) 2026-05-08 15:21:33 -04:00
Santo Shakil 7c6750941e fix(mobile): mounted check before setState in album sync action (#28300)
_manualSyncAlbums fires a setState 1s after sync via Future.delayed
with no mounted check. if the widget is gone by then, setState throws
null check and the global error logger logs it severe.
2026-05-08 18:55:03 +00:00
renovate[bot] 832ed4d015 chore(deps): update dependency exiftool-vendored to v35.19.0 [security] (#28261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-05-08 12:24:31 +02:00
Santo Shakil 238895cad9 fix(mobile): restore notification plugin init (#28284)
#27666 removed LocalNotificationService with the legacy stack, which
was the only place calling FlutterLocalNotificationsPlugin().initialize().
without it, ios never prompts for the notification perm on fresh
installs so background_downloader notifications get dropped silently.

restores the init in the same spot the deleted call used to live.
2026-05-08 10:45:52 +07:00
sakshamchawla e2ec04e86c feat: hide hidden person from memories (#20877)
* hide hidden person from memories

* clean up

* fix united test

* clean up

* moved sql to inline, rebased

* clean up

* clean up again

* chore: sync sql

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-05-07 19:54:26 +00:00
renovate[bot] 6050526360 fix(deps): update dependency connectivity_plus to v7 (#22921)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-07 15:22:26 -04:00
renovate[bot] bfd76570c5 chore(deps): update dependency python-multipart to v0.0.27 [security] (#28286)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-07 15:22:03 -04:00
renovate[bot] 37e6a49652 fix(deps): update dependency nestjs-otel to v8 (#27863)
* fix(deps): update dependency nestjs-otel to v8

* fix: apiMetrics

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-05-07 19:14:15 +00:00
Mert 36caeb34ec chore(ml)!: require numpy 2.4 (#28158)
require numpy 2.4
2026-05-07 19:07:39 +00:00
renovate[bot] 87713c7f2f chore(deps): update dependency flutter to v3.41.9 (#28235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-07 15:00:37 -04:00
Daniel Dietzler 2039c129f2 refactor: settings accordion reactivity (#28281) 2026-05-07 19:00:23 +00:00
Timon 52b00b0bad chore(ml): add mise checklist command (#28267)
* chore(ml): add mise checklist command

* don't depend tests on installing a cpu flavor
2026-05-07 12:28:24 -04:00
shenlong 21af184045 refactor: move cleanup config to metadata table (#28225)
* refactor: app metadata

* refactor to per row store

* cleanup

* more test

* review changes

* more refactor

* refactor

* migrate primary color

* migrate dynamic theme

* migrate colorfulInterface

* cleanup providers

* migrate cleanup

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-07 11:27:06 -05:00
Timon 1fcc2b704b feat(server)!: add isOwned filter to albums API (#28213)
* feat(server)!: add owned filter to albums API

BREAKING CHANGE: GET /albums with no parameters now returns all accessible albums (owned + shared-with-me) instead of only owned albums.

* document tri-state matrix

* web impl

* collapse to single method and handover branching to sql

* dedupe

* verify that owned, shared, and notShared counts are mapped independently from their respective queries

* refactor(server): add select:['id'] overload to albumRepository.getAll

Avoid fetching full album rows (with albumUsers/sharedLinks subqueries) in map.service where only album IDs are needed.

* focus relevant test filters

* fmt

* Revert "verify that owned, shared, and notShared counts are mapped independently from their respective queries"

This reverts commit 47aab458192c766de4662aada5a6841b091d2a80.

* sync sql

* Revert "document tri-state matrix"

This reverts commit a5b2355d0c.

* address review comments

* inline shared condition and return as ternary

* sync sql

* use [...albums].sort

Array.toSorted() is not supported in Chrome 109

* use isShared and isOwned nomenclature

* fix e2e tests

* add params to sql query
2026-05-07 12:13:07 -04:00
Timon 7de73dc176 fix(server): hide isFavorite from partner asset sync stream (#28035)
* fix(server): hide isFavorite from partner asset sync stream

* use new column entry instead

* sync sql

* add migration

* use sql.val

* sync sql
2026-05-07 12:00:54 -04:00
TheBestX11 fe2bf0c6dd fix(mobile): correct filter default and UI desync in similar photos search (#27516)
* fix(mobile): view similar defaults to images only

* fix(mobile): reset filter chips when pre-filter is applied

---------

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
2026-05-07 15:22:35 +00:00
shenlong d4a97f2d25 refactor: move theme config to metadata table (#28224)
* refactor: app metadata

* refactor to per row store

* cleanup

* more test

* review changes

* more refactor

* refactor

* migrate primary color

* migrate dynamic theme

* migrate colorfulInterface

* cleanup providers

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-07 15:12:14 +00:00
shenlong bd58db4fcc fix: periodically execute pragma optimize (#28241)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-07 09:54:35 -05:00
Luis Nachtigall 7f43c6a3a3 fix(mobile): prevent asset loading issues when changing page or when closing memories (#27596) 2026-05-07 09:13:22 -04:00
Mees Frensel 87175ee56c fix(docs): document upgrade-insecure-requests default (#28279) 2026-05-07 08:40:14 -04:00
Mees Frensel 13587bf13c feat(web): video player i18n (#28192) 2026-05-07 13:39:37 +02:00
Thomas f09769a2f3 chore(mobile): add box shadow to asset details (#27510)
The details widget can blend with the image when they are similar
colours.
2026-05-06 19:43:55 +00:00
bo0tzz bfdff12ee0 chore: use app token for mise in workflows (#28270) 2026-05-06 14:51:25 -04:00
bo0tzz eb6dca6a31 chore: switch push-o-matic auth from app-id to client-id (#28269) 2026-05-06 17:01:14 +00:00
Daniel Dietzler c2e3739a58 chore: run relevant tests for pnpm updates (#28266) 2026-05-06 15:38:00 +00:00
Daniel Dietzler f6bd514cdc chore: silence svelte state referenced locally warning (#28263) 2026-05-06 17:22:39 +02:00
Timon d93ab7707e chore(ml): configure mise for machine-learning directory (#25579) 2026-05-06 11:03:54 -04:00
renovate[bot] 6bb47c802f chore(deps): update github-actions (#28262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 16:00:03 +02:00
mws-weekend-projects 90a69e2ba6 feat(web): add full-path search mode to UI (#26758)
Co-authored-by: mws-weekend-projects <mws-weekend-projects@users.noreply.github.com>
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2026-05-06 15:45:40 +02:00
Mert 6580394cfe chore(server): simplify sharp edit code (#28249) 2026-05-06 09:32:49 -04:00
Daniel Dietzler 42ff3b705d fix: revert "chore(deps): update dependency exiftool-vendored to v35.19.0 [security]" (#28260) 2026-05-06 15:32:25 +02:00
Mert 0f00053bb1 chore(server): simplify preview extraction (#28250) 2026-05-06 09:32:19 -04:00
Mert c5c59ed040 refactor(server): move video interface fetch to storage core (#28248) 2026-05-06 09:32:03 -04:00
Aigars Mahinovs 576b1eb999 docs: update rocm installation instructions (#25434) 2026-05-06 09:30:42 -04:00
Mees Frensel 24189702da fix(web): shared album avatars opening modal (#26719)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-05-06 13:49:12 +02:00
Sky ad0d01005e fix(web): migrate people management component to page, enabling tooltips (#26971) 2026-05-06 13:25:59 +02:00
Brent Hugh 3e6d053f93 chore: enhance documentation on wildcard and exclusion patterns (#27884)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-05-06 12:36:25 +02:00
renovate[bot] 1bb3fd985f chore(deps): update dependency exiftool-vendored to v35.19.0 [security] (#28254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-06 12:28:47 +02:00
Andreas Heinz f72aa54a1f feat(enhancement): Navigate stack with up and down arrow keys (#27854)
* feat(enhancement): navigate stack with up and down arrow keys

* remove unnecessary code

* move shortcut to section; no need for document level
2026-05-06 11:56:23 +02:00
shenlong dafe9d7966 chore: pump version (#28231)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-05 16:27:04 -05:00
Daniel Dietzler 7acda0572d fix: stale person name after merge (#28222) 2026-05-05 15:34:49 +02:00
renovate[bot] 98bc9f6a6e chore(deps): update dependency terragrunt to v1.0.3 (#28236)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-05 12:52:14 +02:00
renovate[bot] 63a3b405c3 chore(deps): update grafana/grafana docker tag to v12.4.3 (#28238)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-05 12:51:18 +02:00
Ben Beckford 0058df798d fix(mobile): show lens info without lens name (#28234)
* fix(mobile): always display lens subtitle

* fix(mobile): hide empty lens subtitles
2026-05-05 10:46:09 +07:00
shenlong 97100a4362 refactor: app metadata (#28113)
* refactor: app metadata

* refactor to per row store

* cleanup

* more test

* review changes

* more refactor

* refactor

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-05-05 10:45:51 +07:00
Alex af39384efb chore: better contrast for highlighted button on control bar (#28217) 2026-05-04 09:39:37 -05:00
Mert 01712cf0a7 fix(server): av typing (#28223)
* fix av typing, move fixtures to stub file

* fix tests
2026-05-04 09:04:29 -04:00
581 changed files with 40139 additions and 6008 deletions
+1 -1
View File
@@ -75,7 +75,7 @@
{ {
"label": "Build Immich CLI", "label": "Build Immich CLI",
"type": "shell", "type": "shell",
"command": "pnpm --filter cli build:dev" "command": "pnpm --filter @immich/cli build:dev"
} }
] ]
} }
@@ -16,7 +16,7 @@ services:
- ${UPLOAD_LOCATION:-upload-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data - ${UPLOAD_LOCATION:-upload-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- pnpm_store_server:/buildcache/pnpm-store - pnpm_store_server:/buildcache/pnpm-store
- ../plugins:/build/corePlugin - ../packages/plugins:/build/corePlugin
immich-web: immich-web:
env_file: !reset [] env_file: !reset []
immich-machine-learning: immich-machine-learning:
+1 -3
View File
@@ -30,9 +30,7 @@ machine-learning/
misc/ misc/
mobile/ mobile/
open-api/typescript-sdk/build/ packages/sdk/build/
!open-api/typescript-sdk/package.json
!open-api/typescript-sdk/package-lock.json
server/upload/ server/upload/
server/src/queries server/src/queries
+2 -2
View File
@@ -24,7 +24,7 @@ mobile/lib/infrastructure/repositories/db.repository.steps.dart linguist-generat
mobile/test/drift/main/generated/** -diff -merge mobile/test/drift/main/generated/** -diff -merge
mobile/test/drift/main/generated/** linguist-generated=true mobile/test/drift/main/generated/** linguist-generated=true
open-api/typescript-sdk/fetch-client.ts -diff -merge packages/sdk/fetch-client.ts -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true packages/sdk/fetch-client.ts linguist-generated=true
*.sh text eol=lf *.sh text eol=lf
+1 -1
View File
@@ -1,7 +1,7 @@
cli: cli:
- changed-files: - changed-files:
- any-glob-to-any-file: - any-glob-to-any-file:
- cli/src/** - packages/cli/src/**
documentation: documentation:
- changed-files: - changed-files:
+52 -31
View File
@@ -51,14 +51,14 @@ jobs:
should_run: ${{ steps.check.outputs.should_run }} should_run: ${{ steps.check.outputs.should_run }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check what should run - name: Check what should run
id: check id: check
uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 uses: immich-app/devtools/actions/pre-job@91f342bb4477c4bc10c576ae739da875d85aa164 # pre-job-action-v2.0.4
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
filters: | filters: |
@@ -73,24 +73,30 @@ jobs:
needs: pre-job needs: pre-job
permissions: permissions:
contents: read contents: read
# Skip when PR from a fork pull-requests: write
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && fromJSON(needs.pre-job.outputs.should_run).mobile == true }} if: ${{ github.actor != 'dependabot[bot]' && fromJSON(needs.pre-job.outputs.should_run).mobile == true }}
runs-on: mich runs-on: mich
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
ref: ${{ inputs.ref || github.sha }} ref: ${{ inputs.ref }}
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup Mise
uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with:
github_token: ${{ steps.token.outputs.token }}
- name: Create the Keystore - name: Create the Keystore
if: ${{ !github.event.pull_request.head.repo.fork }}
env: env:
KEY_JKS: ${{ secrets.KEY_JKS }} KEY_JKS: ${{ secrets.KEY_JKS }}
working-directory: ./mobile working-directory: ./mobile
@@ -110,16 +116,8 @@ jobs:
~/.gradle/wrapper ~/.gradle/wrapper
~/.android/sdk ~/.android/sdk
mobile/android/.gradle mobile/android/.gradle
mobile/.dart_tool
key: build-mobile-gradle-${{ runner.os }}-main key: build-mobile-gradle-${{ runner.os }}-main
- name: Setup Flutter SDK
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml
cache: true
- name: Setup Android SDK - name: Setup Android SDK
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1 uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
with: with:
@@ -130,11 +128,10 @@ jobs:
run: flutter pub get run: flutter pub get
- name: Generate translation file - name: Generate translation file
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart run: mise //mobile:codegen:translation
working-directory: ./mobile
- name: Generate platform APIs - name: Generate platform APIs
run: make pigeon run: mise //mobile:codegen:pigeon
working-directory: ./mobile working-directory: ./mobile
- name: Build Android App Bundle - name: Build Android App Bundle
@@ -144,20 +141,43 @@ jobs:
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
IS_MAIN: ${{ github.ref == 'refs/heads/main' }} IS_MAIN: ${{ github.ref == 'refs/heads/main' }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: | run: |
if [[ $IS_MAIN == 'true' ]]; then if [[ $IS_MAIN == 'true' ]]; then
flutter build apk --release flutter build apk --release
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64 flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
else else
flutter build apk --debug --split-per-abi --target-platform android-arm64 flutter build apk --release
fi fi
- name: Publish Android Artifact - name: Publish Android Artifact
id: upload-apk
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with: with:
name: release-apk-signed name: release-apk-signed
path: mobile/build/app/outputs/flutter-apk/*.apk path: mobile/build/app/outputs/flutter-apk/*.apk
- name: Comment APK download link on PR
if: ${{ github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork }}
uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3.11.0
env:
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
APK_URL: ${{ steps.upload-apk.outputs.artifact-url }}
with:
github-token: ${{ steps.token.outputs.token }}
message-id: 'mobile-android-apk'
message: |
📱 **Android release APK (universal)** — `${{ env.HEAD_SHA }}`
Download: ${{ env.APK_URL }}
<details>
<summary>QR code</summary>
<img src="https://api.qrserver.com/v1/create-qr-code/?size=240x240&data=${{ env.APK_URL }}" alt="QR code" />
</details>
Installs as a separate app (applicationId `app.alextran.immich.pr${{ github.event.pull_request.number }}`), so it coexists with the Play Store version and any other PR builds.
- name: Save Gradle Cache - name: Save Gradle Cache
id: cache-gradle-save id: cache-gradle-save
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
@@ -168,7 +188,6 @@ jobs:
~/.gradle/wrapper ~/.gradle/wrapper
~/.android/sdk ~/.android/sdk
mobile/android/.gradle mobile/android/.gradle
mobile/.dart_tool
key: ${{ steps.cache-gradle-restore.outputs.cache-primary-key }} key: ${{ steps.cache-gradle-restore.outputs.cache-primary-key }}
build-sign-ios: build-sign-ios:
@@ -181,6 +200,12 @@ jobs:
runs-on: macos-15 runs-on: macos-15
steps: steps:
- id: token
uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with:
client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Select Xcode 26 - name: Select Xcode 26
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
@@ -190,27 +215,23 @@ jobs:
ref: ${{ inputs.ref || github.sha }} ref: ${{ inputs.ref || github.sha }}
persist-credentials: false persist-credentials: false
- name: Setup Flutter SDK - name: Setup Mise
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with: with:
channel: 'stable' github_token: ${{ steps.token.outputs.token }}
flutter-version-file: ./mobile/pubspec.yaml
cache: true
- name: Install Flutter dependencies - name: Install Flutter dependencies
working-directory: ./mobile working-directory: ./mobile
run: flutter pub get run: flutter pub get
- name: Generate translation files - name: Generate translation files
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart run: mise //mobile:codegen:translation
working-directory: ./mobile
- name: Generate platform APIs - name: Generate platform APIs
run: make pigeon run: mise //mobile:codegen:pigeon
working-directory: ./mobile
- name: Setup Ruby - name: Setup Ruby
uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 uses: ruby/setup-ruby@c4e5b1316158f92e3d49443a9d58b31d25ac0f8f # v1.306.0
with: with:
ruby-version: '3.3' ruby-version: '3.3'
bundler-cache: true bundler-cache: true
+2 -2
View File
@@ -19,9 +19,9 @@ jobs:
actions: write actions: write
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check out code - name: Check out code
+1 -1
View File
@@ -24,7 +24,7 @@ jobs:
persist-credentials: false persist-credentials: false
- name: Check for breaking API changes - name: Check for breaking API changes
uses: oasdiff/oasdiff-action/breaking@f8cb9308b42121e793f835bd14c0b8090420430c # v0.0.39 uses: oasdiff/oasdiff-action/breaking@26ccb332c67a45ca649de9faf60552ef1b8260d9 # v0.0.46
with: with:
base: https://raw.githubusercontent.com/${{ github.repository }}/main/open-api/immich-openapi-specs.json base: https://raw.githubusercontent.com/${{ github.repository }}/main/open-api/immich-openapi-specs.json
revision: open-api/immich-openapi-specs.json revision: open-api/immich-openapi-specs.json
+16 -26
View File
@@ -3,11 +3,11 @@ on:
push: push:
branches: [main] branches: [main]
paths: paths:
- 'cli/**' - 'packages/cli/**'
- '.github/workflows/cli.yml' - '.github/workflows/cli.yml'
pull_request: pull_request:
paths: paths:
- 'cli/**' - 'packages/cli/**'
- '.github/workflows/cli.yml' - '.github/workflows/cli.yml'
release: release:
types: [published] types: [published]
@@ -28,38 +28,28 @@ jobs:
packages: write packages: write
defaults: defaults:
run: run:
working-directory: ./cli working-directory: ./packages/cli
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm - name: Setup Mise
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './cli/.nvmrc' github_token: ${{ steps.token.outputs.token }}
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Setup typescript-sdk - name: Publish
run: pnpm install && pnpm run build
working-directory: ./open-api/typescript-sdk
- run: pnpm install --frozen-lockfile
- run: pnpm build
- run: pnpm publish --provenance --no-git-checks
if: ${{ github.event_name == 'release' }} if: ${{ github.event_name == 'release' }}
run: mise run ci-publish
docker: docker:
name: Docker name: Docker
@@ -71,9 +61,9 @@ jobs:
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout
@@ -99,7 +89,7 @@ jobs:
- name: Get package version - name: Get package version
id: package-version id: package-version
run: | run: |
version=$(jq -r '.version' cli/package.json) version=$(jq -r '.version' packages/cli/package.json)
echo "version=$version" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT"
- name: Generate docker image tags - name: Generate docker image tags
@@ -117,7 +107,7 @@ jobs:
- name: Build and push image - name: Build and push image
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with: with:
file: cli/Dockerfile file: packages/cli/Dockerfile
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: ${{ github.event_name == 'release' }} push: ${{ github.event_name == 'release' }}
cache-from: type=gha cache-from: type=gha
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
needs: [get_body, should_run] needs: [get_body, should_run]
if: ${{ needs.should_run.outputs.should_run == 'true' }} if: ${{ needs.should_run.outputs.should_run == 'true' }}
container: container:
image: ghcr.io/immich-app/mdq:main@sha256:557cca601891b8b7d78b940071d35aaf7aaeb9b327d19b22cf282118edbc5272 image: ghcr.io/immich-app/mdq:main@sha256:0a8b8867773a0f8368061f47578603f438349f8f1f28b0e16105f481e5c794e0
outputs: outputs:
checked: ${{ steps.get_checkbox.outputs.checked }} checked: ${{ steps.get_checkbox.outputs.checked }}
steps: steps:
+5 -5
View File
@@ -44,9 +44,9 @@ jobs:
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout repository - name: Checkout repository
@@ -57,7 +57,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 uses: github/codeql-action/init@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@@ -70,7 +70,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 uses: github/codeql-action/autobuild@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
# ️ Command-line programs to run using the OS shell. # ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -83,6 +83,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh # ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 uses: github/codeql-action/analyze@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
with: with:
category: '/language:${{matrix.language}}' category: '/language:${{matrix.language}}'
+7 -7
View File
@@ -23,14 +23,14 @@ jobs:
should_run: ${{ steps.check.outputs.should_run }} should_run: ${{ steps.check.outputs.should_run }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check what should run - name: Check what should run
id: check id: check
uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 uses: immich-app/devtools/actions/pre-job@91f342bb4477c4bc10c576ae739da875d85aa164 # pre-job-action-v2.0.4
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
filters: | filters: |
@@ -132,7 +132,7 @@ jobs:
suffixes: '-rocm' suffixes: '-rocm'
platforms: linux/amd64 platforms: linux/amd64
runner-mapping: '{"linux/amd64": "pokedex-large"}' runner-mapping: '{"linux/amd64": "pokedex-large"}'
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@61a0fc2b41524edcc7c9fffb8bb178e6b0ccf21d # multi-runner-build-workflow-v2.3.0 uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@5813c7c4f7016c748ae7ac5d5f684846649d4d20 # multi-runner-build-workflow-v2.4.0
permissions: permissions:
contents: read contents: read
actions: read actions: read
@@ -155,7 +155,7 @@ jobs:
name: Build and Push Server name: Build and Push Server
needs: pre-job needs: pre-job
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }} if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }}
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@61a0fc2b41524edcc7c9fffb8bb178e6b0ccf21d # multi-runner-build-workflow-v2.3.0 uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@5813c7c4f7016c748ae7ac5d5f684846649d4d20 # multi-runner-build-workflow-v2.4.0
permissions: permissions:
contents: read contents: read
actions: read actions: read
@@ -178,7 +178,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 - uses: immich-app/devtools/actions/success-check@81113db03f6d743efee81e0058c0b43f6cd6f36d # success-check-action-v0.0.6
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}
@@ -189,6 +189,6 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 - uses: immich-app/devtools/actions/success-check@81113db03f6d743efee81e0058c0b43f6cd6f36d # success-check-action-v0.0.6
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}
+8 -14
View File
@@ -21,14 +21,14 @@ jobs:
should_run: ${{ steps.check.outputs.should_run }} should_run: ${{ steps.check.outputs.should_run }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check what should run - name: Check what should run
id: check id: check
uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 uses: immich-app/devtools/actions/pre-job@91f342bb4477c4bc10c576ae739da875d85aa164 # pre-job-action-v2.0.4
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
filters: | filters: |
@@ -54,9 +54,9 @@ jobs:
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -64,17 +64,11 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
fetch-depth: 0
- name: Setup pnpm - name: Setup Mise
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './docs/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Run install - name: Run install
run: pnpm install run: pnpm install
+7 -5
View File
@@ -20,9 +20,9 @@ jobs:
artifact: ${{ steps.get-artifact.outputs.result }} artifact: ${{ steps.get-artifact.outputs.result }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- if: ${{ github.event.workflow_run.conclusion != 'success' }} - if: ${{ github.event.workflow_run.conclusion != 'success' }}
@@ -119,9 +119,9 @@ jobs:
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }} if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -131,7 +131,9 @@ jobs:
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup Mise - name: Setup Mise
uses: immich-app/devtools/actions/use-mise@035e80a7d4355d5f087ffb95db9e4a0944c04e56 # use-mise-action-v1.1.3 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with:
github_token: ${{ steps.token.outputs.token }}
- name: Load parameters - name: Load parameters
id: parameters id: parameters
+5 -3
View File
@@ -17,9 +17,9 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -29,7 +29,9 @@ jobs:
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup Mise - name: Setup Mise
uses: immich-app/devtools/actions/use-mise@035e80a7d4355d5f087ffb95db9e4a0944c04e56 # use-mise-action-v1.1.3 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with:
github_token: ${{ steps.token.outputs.token }}
- name: Destroy Docs Subdomain - name: Destroy Docs Subdomain
env: env:
+8 -14
View File
@@ -14,29 +14,23 @@ jobs:
contents: write contents: write
pull-requests: write pull-requests: write
steps: steps:
- name: Generate a token - id: token
id: generate-token uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: 'Checkout' - name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
ref: ${{ github.event.pull_request.head.ref }} ref: ${{ github.event.pull_request.head.ref }}
token: ${{ steps.generate-token.outputs.token }}
persist-credentials: true persist-credentials: true
token: ${{ steps.token.outputs.token }}
- name: Setup pnpm - name: Setup Mise
uses: pnpm/action-setup@08c4be7e2e672a47d11bd04269e27e5f3e8529cb # v6.0.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './server/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Fix formatting - name: Fix formatting
run: pnpm --recursive install && pnpm run --recursive --if-present --parallel format:fix run: pnpm --recursive install && pnpm run --recursive --if-present --parallel format:fix
+2 -2
View File
@@ -4,7 +4,7 @@ on:
workflow_dispatch: workflow_dispatch:
workflow_call: workflow_call:
secrets: secrets:
PUSH_O_MATIC_APP_ID: PUSH_O_MATIC_APP_CLIENT_ID:
required: true required: true
PUSH_O_MATIC_APP_KEY: PUSH_O_MATIC_APP_KEY:
required: true required: true
@@ -33,7 +33,7 @@ jobs:
if: ${{ inputs.skip != true }} if: ${{ inputs.skip != true }}
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1 uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Find translation PR - name: Find translation PR
+2 -2
View File
@@ -14,9 +14,9 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Require PR to have a changelog label - name: Require PR to have a changelog label
+3 -3
View File
@@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
with: with:
repo-token: ${{ steps.token.outputs.token }} repo-token: ${{ steps.token.outputs.token }}
+14 -19
View File
@@ -36,7 +36,7 @@ jobs:
permissions: permissions:
pull-requests: write pull-requests: write
secrets: secrets:
PUSH_O_MATIC_APP_ID: ${{ secrets.PUSH_O_MATIC_APP_ID }} PUSH_O_MATIC_APP_CLIENT_ID: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
PUSH_O_MATIC_APP_KEY: ${{ secrets.PUSH_O_MATIC_APP_KEY }} PUSH_O_MATIC_APP_KEY: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }} WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
@@ -48,32 +48,27 @@ jobs:
version: ${{ steps.output.outputs.version }} version: ${{ steps.output.outputs.version }}
permissions: {} # No job-level permissions are needed because it uses the app-token permissions: {} # No job-level permissions are needed because it uses the app-token
steps: steps:
- name: Generate a token - id: token
id: generate-token uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.token.outputs.token }}
persist-credentials: true persist-credentials: true
ref: main ref: main
- name: Install uv - name: Setup Mise
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
- name: Setup pnpm
uses: pnpm/action-setup@08c4be7e2e672a47d11bd04269e27e5f3e8529cb # v6.0.0
- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './server/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' # TODO move to mise
- name: Install uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
- name: Bump version - name: Bump version
env: env:
@@ -126,7 +121,7 @@ jobs:
id: generate-token id: generate-token
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1 uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout
+7 -7
View File
@@ -14,12 +14,12 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: mshick/add-pr-comment@64b8e914979889d746c99dea15a76e77ef64580a # v3.10.0 - uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3.11.0
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
message-id: 'preview-status' message-id: 'preview-status'
@@ -32,9 +32,9 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -48,14 +48,14 @@ jobs:
name: 'preview' name: 'preview'
}) })
- uses: mshick/add-pr-comment@64b8e914979889d746c99dea15a76e77ef64580a # v3.10.0 - uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3.11.0
if: ${{ github.event.pull_request.head.repo.fork }} if: ${{ github.event.pull_request.head.repo.fork }}
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
message-id: 'preview-status' message-id: 'preview-status'
message: 'PRs from forks cannot have preview environments.' message: 'PRs from forks cannot have preview environments.'
- uses: mshick/add-pr-comment@64b8e914979889d746c99dea15a76e77ef64580a # v3.10.0 - uses: mshick/add-pr-comment@8e4927817251f1ff60c001f04568532b38e0b4a0 # v3.11.0
if: ${{ !github.event.pull_request.head.repo.fork }} if: ${{ !github.event.pull_request.head.repo.fork }}
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
+13 -18
View File
@@ -14,34 +14,29 @@ jobs:
contents: read contents: read
id-token: write id-token: write
packages: write packages: write
defaults:
run:
working-directory: ./open-api/typescript-sdk
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm - name: Setup Mise
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './open-api/typescript-sdk/.nvmrc' github_token: ${{ steps.token.outputs.token }}
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Install deps - name: Install deps
run: pnpm install --frozen-lockfile run: pnpm --filter @immich/sdk install --frozen-lockfile
- name: Build - name: Build
run: pnpm build run: pnpm --filter @immich/sdk build
- name: Publish - name: Publish
run: pnpm publish --provenance --no-git-checks run: pnpm --filter @immich/sdk publish --provenance --no-git-checks
+20 -32
View File
@@ -20,14 +20,14 @@ jobs:
should_run: ${{ steps.check.outputs.should_run }} should_run: ${{ steps.check.outputs.should_run }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check what should run - name: Check what should run
id: check id: check
uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 uses: immich-app/devtools/actions/pre-job@91f342bb4477c4bc10c576ae739da875d85aa164 # pre-job-action-v2.0.4
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
filters: | filters: |
@@ -49,9 +49,9 @@ jobs:
working-directory: ./mobile working-directory: ./mobile
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -60,38 +60,30 @@ jobs:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup Flutter SDK - name: Setup Mise
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with: with:
channel: 'stable' github_token: ${{ steps.token.outputs.token }}
flutter-version-file: ./mobile/pubspec.yaml
- name: Install dependencies - name: Install dependencies
run: dart pub get run: flutter pub get
- name: Install dependencies for UI package - name: Install dependencies for UI package
run: dart pub get run: flutter pub get
working-directory: ./mobile/packages/ui working-directory: ./mobile/packages/ui
- name: Install dependencies for UI Showcase - name: Install dependencies for UI Showcase
run: dart pub get run: flutter pub get
working-directory: ./mobile/packages/ui/showcase working-directory: ./mobile/packages/ui/showcase
- name: Install DCM - name: Generate translation files
uses: CQLabs/setup-dcm@8697ae0790c0852e964a6ef1d768d62a6675481a # v2.0.1 run: mise //mobile:codegen:translation
with:
github-token: ${{ steps.token.outputs.token }}
version: auto
working-directory: ./mobile
- name: Generate translation file
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart
- name: Run Build Runner - name: Run Build Runner
run: make build run: mise //mobile:codegen:dart
- name: Generate platform API - name: Generate platform API
run: make pigeon run: mise //mobile:codegen:pigeon
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
@@ -107,20 +99,16 @@ jobs:
env: env:
CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }} CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
run: | run: |
echo "ERROR: Generated files not up to date! Run 'make build' and 'make pigeon' inside the mobile directory" echo "ERROR: Generated files not up to date! Run 'mise //mobile:codegen:dart' and 'mise //mobile:codegen:pigeon'"
echo "Changed files: ${CHANGED_FILES}" echo "Changed files: ${CHANGED_FILES}"
exit 1 exit 1
- name: Run dart analyze - name: Run analyze
run: dart analyze --fatal-infos run: mise //mobile:analyze
- name: Run dart format - name: Run format
run: make format run: mise //mobile:format
# TODO: Re-enable after upgrading custom_lint # TODO: Re-enable after upgrading custom_lint
# - name: Run dart custom_lint # - name: Run dart custom_lint
# run: dart run custom_lint # run: dart run custom_lint
# TODO: Use https://github.com/CQLabs/dcm-action
- name: Run DCM
run: dcm analyze lib --fatal-style --fatal-warnings
+207 -243
View File
@@ -17,14 +17,14 @@ jobs:
should_run: ${{ steps.check.outputs.should_run }} should_run: ${{ steps.check.outputs.should_run }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check what should run - name: Check what should run
id: check id: check
uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 uses: immich-app/devtools/actions/pre-job@91f342bb4477c4bc10c576ae739da875d85aa164 # pre-job-action-v2.0.4
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
filters: | filters: |
@@ -33,14 +33,18 @@ jobs:
web: web:
- 'web/**' - 'web/**'
- 'i18n/**' - 'i18n/**'
- 'open-api/typescript-sdk/**' - 'packages/sdk/**'
- 'pnpm-lock.yaml'
server: server:
- 'server/**' - 'server/**'
- 'pnpm-lock.yaml'
cli: cli:
- 'cli/**' - 'packages/cli/**'
- 'open-api/typescript-sdk/**' - 'packages/sdk/**'
- 'pnpm-lock.yaml'
e2e: e2e:
- 'e2e/**' - 'e2e/**'
- 'pnpm-lock.yaml'
mobile: mobile:
- 'mobile/**' - 'mobile/**'
machine-learning: machine-learning:
@@ -63,9 +67,9 @@ jobs:
working-directory: ./server working-directory: ./server
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -74,28 +78,14 @@ jobs:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm - name: Setup Mise
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './server/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' - name: Run ci-unit
- name: Run package manager install run: mise run ci-unit
run: pnpm install
- name: Run linter
run: pnpm lint
if: ${{ !cancelled() }}
- name: Run formatter
run: pnpm format
if: ${{ !cancelled() }}
- name: Run tsc
run: pnpm check
if: ${{ !cancelled() }}
- name: Run small tests & coverage
run: pnpm test
if: ${{ !cancelled() }}
cli-unit-tests: cli-unit-tests:
name: Unit Test CLI name: Unit Test CLI
needs: pre-job needs: pre-job
@@ -105,12 +95,12 @@ jobs:
contents: read contents: read
defaults: defaults:
run: run:
working-directory: ./cli working-directory: ./packages/cli
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -118,31 +108,15 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './cli/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' - name: Run ci-unit
- name: Setup typescript-sdk run: mise run ci-unit
run: pnpm install && pnpm run build
working-directory: ./open-api/typescript-sdk
- name: Install deps
run: pnpm install
- name: Run linter
run: pnpm lint
if: ${{ !cancelled() }}
- name: Run formatter
run: pnpm format
if: ${{ !cancelled() }}
- name: Run tsc
run: pnpm check
if: ${{ !cancelled() }}
- name: Run unit tests & coverage
run: pnpm test
if: ${{ !cancelled() }}
cli-unit-tests-win: cli-unit-tests-win:
name: Unit Test CLI (Windows) name: Unit Test CLI (Windows)
needs: pre-job needs: pre-job
@@ -152,12 +126,12 @@ jobs:
contents: read contents: read
defaults: defaults:
run: run:
working-directory: ./cli working-directory: ./packages/cli
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -165,26 +139,28 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './cli/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' - name: Run setup @immich/sdk
- name: Setup typescript-sdk run: mise run //:sdk:install && mise run //:sdk:build
run: pnpm install --frozen-lockfile && pnpm build
working-directory: ./open-api/typescript-sdk - name: Run pnpm install
- name: Install deps
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
# Skip linter & formatter in Windows test. # Skip linter & formatter in Windows test.
- name: Run tsc - name: Run tsc
run: pnpm check run: pnpm check
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run unit tests & coverage - name: Run unit tests & coverage
run: pnpm test run: pnpm test
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
web-lint: web-lint:
name: Lint Web name: Lint Web
needs: pre-job needs: pre-job
@@ -197,9 +173,9 @@ jobs:
working-directory: ./web working-directory: ./web
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -207,28 +183,22 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './web/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' - name: Run setup @immich/sdk
- name: Run setup typescript-sdk run: mise run //:sdk:install && mise run //:sdk:build
run: pnpm install --frozen-lockfile && pnpm build
working-directory: ./open-api/typescript-sdk
- name: Run pnpm install - name: Run pnpm install
run: pnpm rebuild && pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
- name: Run linter - name: Run linter
run: pnpm lint run: pnpm lint
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run formatter
run: pnpm format
if: ${{ !cancelled() }}
- name: Run svelte checks
run: pnpm check:svelte
if: ${{ !cancelled() }}
web-unit-tests: web-unit-tests:
name: Test Web name: Test Web
needs: pre-job needs: pre-job
@@ -241,9 +211,9 @@ jobs:
working-directory: ./web working-directory: ./web
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -251,25 +221,15 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './web/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' - name: Run ci-unit
- name: Run setup typescript-sdk run: mise run ci-unit
run: pnpm install --frozen-lockfile && pnpm build
working-directory: ./open-api/typescript-sdk
- name: Run npm install
run: pnpm install --frozen-lockfile
- name: Run tsc
run: pnpm check:typescript
if: ${{ !cancelled() }}
- name: Run unit tests & coverage
run: pnpm test
if: ${{ !cancelled() }}
i18n-tests: i18n-tests:
name: Test i18n name: Test i18n
needs: pre-job needs: pre-job
@@ -279,9 +239,9 @@ jobs:
contents: read contents: read
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -289,24 +249,25 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './web/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Install dependencies - name: Install dependencies
run: pnpm --filter=immich-i18n install --frozen-lockfile run: pnpm -w install --frozen-lockfile
- name: Format - name: Format
run: pnpm --filter=immich-i18n format:fix run: pnpm format:fix
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
i18n/** i18n/**
- name: Verify files have not changed - name: Verify files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true' if: steps.verify-changed-files.outputs.files_changed == 'true'
env: env:
@@ -315,6 +276,7 @@ jobs:
echo "ERROR: i18n files not up to date!" echo "ERROR: i18n files not up to date!"
echo "Changed files: ${CHANGED_FILES}" echo "Changed files: ${CHANGED_FILES}"
exit 1 exit 1
e2e-tests-lint: e2e-tests-lint:
name: End-to-End Lint name: End-to-End Lint
needs: pre-job needs: pre-job
@@ -327,9 +289,9 @@ jobs:
working-directory: ./e2e working-directory: ./e2e
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -337,30 +299,16 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './e2e/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' - name: Run ci-unit
- name: Run setup typescript-sdk run: mise run ci-unit
run: pnpm install --frozen-lockfile && pnpm build
working-directory: ./open-api/typescript-sdk
if: ${{ !cancelled() }}
- name: Install dependencies
run: pnpm install --frozen-lockfile
if: ${{ !cancelled() }}
- name: Run linter
run: pnpm lint
if: ${{ !cancelled() }}
- name: Run formatter
run: pnpm format
if: ${{ !cancelled() }}
- name: Run tsc
run: pnpm check
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
server-medium-tests: server-medium-tests:
name: Medium Tests (Server) name: Medium Tests (Server)
needs: pre-job needs: pre-job
@@ -373,9 +321,9 @@ jobs:
working-directory: ./server working-directory: ./server
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -384,21 +332,16 @@ jobs:
persist-credentials: false persist-credentials: false
submodules: 'recursive' submodules: 'recursive'
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version-file: './server/.nvmrc'
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Setup Mise - name: Setup Mise
uses: immich-app/devtools/actions/use-mise@035e80a7d4355d5f087ffb95db9e4a0944c04e56 # use-mise-action-v1.1.3 uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
- name: Run pnpm install with:
run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm install --frozen-lockfile github_token: ${{ steps.token.outputs.token }}
- name: Run medium tests
run: pnpm test:medium - name: Run ci-medium
run: mise run ci-medium
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
e2e-tests-server-cli: e2e-tests-server-cli:
name: End-to-End Tests (Server & CLI) name: End-to-End Tests (Server & CLI)
needs: pre-job needs: pre-job
@@ -414,9 +357,9 @@ jobs:
runner: [ubuntu-latest, ubuntu-24.04-arm] runner: [ubuntu-latest, ubuntu-24.04-arm]
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -425,52 +368,57 @@ jobs:
persist-credentials: false persist-credentials: false
submodules: 'recursive' submodules: 'recursive'
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: '.nvmrc'
cache: 'pnpm' cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' cache-dependency-path: '**/pnpm-lock.yaml'
- name: Run setup typescript-sdk
run: pnpm install --frozen-lockfile && pnpm build - name: Setup packages
working-directory: ./open-api/typescript-sdk run: pnpm --filter "@immich/*" install --frozen-lockfile && pnpm --filter "@immich/*" build
if: ${{ !cancelled() }}
- name: Run setup web - name: Run setup web
run: pnpm install --frozen-lockfile && pnpm exec svelte-kit sync run: pnpm install --frozen-lockfile && pnpm exec svelte-kit sync
working-directory: ./web working-directory: ./web
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run setup cli
run: pnpm install --frozen-lockfile && pnpm build
working-directory: ./cli
if: ${{ !cancelled() }}
- name: Install dependencies - name: Install dependencies
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Start Docker Compose - name: Start Docker Compose
run: docker compose up -d --build --renew-anon-volumes --force-recreate --remove-orphans --wait --wait-timeout 300 run: docker compose up -d --build --renew-anon-volumes --force-recreate --remove-orphans --wait --wait-timeout 300
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run e2e tests (api & cli) - name: Run e2e tests (api & cli)
env: env:
VITEST_DISABLE_DOCKER_SETUP: true VITEST_DISABLE_DOCKER_SETUP: true
run: pnpm test run: pnpm test
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run e2e tests (maintenance) - name: Run e2e tests (maintenance)
env: env:
VITEST_DISABLE_DOCKER_SETUP: true VITEST_DISABLE_DOCKER_SETUP: true
run: pnpm test:maintenance run: pnpm test:maintenance
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Capture Docker logs - name: Capture Docker logs
if: always() if: always()
run: docker compose logs --no-color > docker-compose-logs.txt run: docker compose logs --no-color > docker-compose-logs.txt
working-directory: ./e2e working-directory: ./e2e
- name: Archive Docker logs - name: Archive Docker logs
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always() if: always()
with: with:
name: e2e-server-docker-logs-${{ matrix.runner }} name: e2e-server-docker-logs-${{ matrix.runner }}
path: e2e/docker-compose-logs.txt path: e2e/docker-compose-logs.txt
e2e-tests-web: e2e-tests-web:
name: End-to-End Tests (Web) name: End-to-End Tests (Web)
needs: pre-job needs: pre-job
@@ -486,9 +434,9 @@ jobs:
runner: [ubuntu-latest, ubuntu-24.04-arm] runner: [ubuntu-latest, ubuntu-24.04-arm]
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -497,70 +445,84 @@ jobs:
persist-credentials: false persist-credentials: false
submodules: 'recursive' submodules: 'recursive'
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: '.nvmrc'
cache: 'pnpm' cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' cache-dependency-path: '**/pnpm-lock.yaml'
- name: Run setup typescript-sdk
run: pnpm install --frozen-lockfile && pnpm build - name: Run setup @immich/sdk
working-directory: ./open-api/typescript-sdk run: pnpm --filter @immich/sdk install --frozen-lockfile && pnpm --filter @immich/sdk build
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Install dependencies - name: Install dependencies
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Install Playwright Browsers - name: Install Playwright Browsers
run: pnpm exec playwright install chromium --only-shell run: pnpm exec playwright install chromium --only-shell
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Docker build - name: Docker build
run: docker compose up -d --build --renew-anon-volumes --force-recreate --remove-orphans --wait --wait-timeout 300 run: docker compose up -d --build --renew-anon-volumes --force-recreate --remove-orphans --wait --wait-timeout 300
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Run e2e tests (web) - name: Run e2e tests (web)
env: env:
PLAYWRIGHT_DISABLE_WEBSERVER: true PLAYWRIGHT_DISABLE_WEBSERVER: true
run: pnpm test:web run: pnpm test:web
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Archive e2e test (web) results - name: Archive e2e test (web) results
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: success() || failure() if: success() || failure()
with: with:
name: e2e-web-test-results-${{ matrix.runner }} name: e2e-web-test-results-${{ matrix.runner }}
path: e2e/playwright-report/ path: e2e/playwright-report/
- name: Run ui tests (web) - name: Run ui tests (web)
env: env:
PLAYWRIGHT_DISABLE_WEBSERVER: true PLAYWRIGHT_DISABLE_WEBSERVER: true
run: pnpm test:web:ui run: pnpm test:web:ui
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Archive ui test (web) results - name: Archive ui test (web) results
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: success() || failure() if: success() || failure()
with: with:
name: e2e-ui-test-results-${{ matrix.runner }} name: e2e-ui-test-results-${{ matrix.runner }}
path: e2e/playwright-report/ path: e2e/playwright-report/
- name: Run maintenance tests - name: Run maintenance tests
env: env:
PLAYWRIGHT_DISABLE_WEBSERVER: true PLAYWRIGHT_DISABLE_WEBSERVER: true
run: pnpm test:web:maintenance run: pnpm test:web:maintenance
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Archive maintenance tests (web) results - name: Archive maintenance tests (web) results
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: success() || failure() if: success() || failure()
with: with:
name: e2e-maintenance-isolated-test-results-${{ matrix.runner }} name: e2e-maintenance-isolated-test-results-${{ matrix.runner }}
path: e2e/playwright-report/ path: e2e/playwright-report/
- name: Capture Docker logs - name: Capture Docker logs
if: always() if: always()
run: docker compose logs --no-color > docker-compose-logs.txt run: docker compose logs --no-color > docker-compose-logs.txt
working-directory: ./e2e working-directory: ./e2e
- name: Archive Docker logs - name: Archive Docker logs
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always() if: always()
with: with:
name: e2e-web-docker-logs-${{ matrix.runner }} name: e2e-web-docker-logs-${{ matrix.runner }}
path: e2e/docker-compose-logs.txt path: e2e/docker-compose-logs.txt
success-check-e2e: success-check-e2e:
name: End-to-End Tests Success name: End-to-End Tests Success
needs: [e2e-tests-server-cli, e2e-tests-web] needs: [e2e-tests-server-cli, e2e-tests-web]
@@ -568,7 +530,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 - uses: immich-app/devtools/actions/success-check@81113db03f6d743efee81e0058c0b43f6cd6f36d # success-check-action-v0.0.6
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}
mobile-unit-tests: mobile-unit-tests:
@@ -580,26 +542,31 @@ jobs:
contents: read contents: read
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup Flutter SDK
uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0 - name: Setup Mise
uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with: with:
channel: 'stable' github_token: ${{ steps.token.outputs.token }}
flutter-version-file: ./mobile/pubspec.yaml
- name: Generate translation file - name: Install dependencies
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart run: flutter pub get
working-directory: ./mobile working-directory: ./mobile
- name: Generate translation files
run: mise //mobile:codegen:translation
- name: Run tests - name: Run tests
working-directory: ./mobile run: mise //mobile:test
run: flutter test -j 1
ml-unit-tests: ml-unit-tests:
name: Unit Test ML name: Unit Test ML
needs: pre-job needs: pre-job
@@ -612,34 +579,24 @@ jobs:
working-directory: ./machine-learning working-directory: ./machine-learning
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Install uv
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0 - name: Setup Mise
uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
with: with:
python-version: 3.11 github_token: ${{ steps.token.outputs.token }}
- name: Install dependencies
run: | - name: Run ci-unit
uv sync --extra cpu run: mise run ci-unit
- name: Lint with ruff
run: |
uv run ruff check --output-format=github immich_ml
- name: Format with ruff
run: |
uv run ruff format --check immich_ml
- name: Run mypy type checking
run: |
uv run mypy --strict immich_ml/
- name: Run tests and coverage
run: |
uv run pytest --cov=immich_ml --cov-report term-missing
github-files-formatting: github-files-formatting:
name: .github Files Formatting name: .github Files Formatting
needs: pre-job needs: pre-job
@@ -652,9 +609,9 @@ jobs:
working-directory: ./.github working-directory: ./.github
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -662,19 +619,19 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './.github/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Run pnpm install - name: Run pnpm install
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
- name: Run formatter - name: Run formatter
run: pnpm format run: pnpm format
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
shellcheck: shellcheck:
name: ShellCheck name: ShellCheck
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -682,9 +639,9 @@ jobs:
contents: read contents: read
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
@@ -703,9 +660,9 @@ jobs:
contents: read contents: read
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -713,29 +670,28 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './server/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Install server dependencies - name: Install server dependencies
run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich install --frozen-lockfile run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich install --frozen-lockfile
- name: Build the app
run: pnpm --filter immich build
- name: Run API generation - name: Run API generation
run: ./bin/generate-open-api.sh run: mise //:open-api
working-directory: open-api working-directory: open-api
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
mobile/openapi mobile/openapi
open-api/typescript-sdk packages/sdk
open-api/immich-openapi-specs.json open-api/immich-openapi-specs.json
- name: Verify files have not changed - name: Verify files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true' if: steps.verify-changed-files.outputs.files_changed == 'true'
env: env:
@@ -744,6 +700,7 @@ jobs:
echo "ERROR: Generated files not up to date!" echo "ERROR: Generated files not up to date!"
echo "Changed files: ${CHANGED_FILES}" echo "Changed files: ${CHANGED_FILES}"
exit 1 exit 1
sql-schema-up-to-date: sql-schema-up-to-date:
name: SQL Schema Checks name: SQL Schema Checks
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -765,9 +722,9 @@ jobs:
working-directory: ./server working-directory: ./server
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout code - name: Checkout code
@@ -775,31 +732,35 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
token: ${{ steps.token.outputs.token }} token: ${{ steps.token.outputs.token }}
- name: Setup pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 - name: Setup Mise
- name: Setup Node uses: immich-app/devtools/actions/use-mise@cf6e190bacde3d7bda59372a786b36ac7d01536a # use-mise-action-v2.0.1
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with: with:
node-version-file: './server/.nvmrc' github_token: ${{ steps.token.outputs.token }}
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- name: Install server dependencies - name: Install server dependencies
run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm install --frozen-lockfile run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm install --frozen-lockfile
- name: Build the app - name: Build the app
run: pnpm build run: pnpm build
- name: Run existing migrations - name: Run existing migrations
run: pnpm migrations:run run: pnpm migrations:run
- name: Test npm run schema:reset command works - name: Test npm run schema:reset command works
run: pnpm schema:reset run: pnpm schema:reset
- name: Generate new migrations - name: Generate new migrations
continue-on-error: true continue-on-error: true
run: pnpm migrations:generate src/TestMigration run: pnpm migrations:generate src/TestMigration
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
server/src server/src
- name: Verify migration files have not changed - name: Verify migration files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true' if: steps.verify-changed-files.outputs.files_changed == 'true'
env: env:
@@ -809,16 +770,19 @@ jobs:
echo "Changed files: ${CHANGED_FILES}" echo "Changed files: ${CHANGED_FILES}"
cat ./src/*-TestMigration.ts cat ./src/*-TestMigration.ts
exit 1 exit 1
- name: Run SQL generation - name: Run SQL generation
run: pnpm sync:sql run: mise //:sql
env: env:
DB_URL: postgres://postgres:postgres@localhost:5432/immich DB_URL: postgres://postgres:postgres@localhost:5432/immich
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
id: verify-changed-sql-files id: verify-changed-sql-files
with: with:
files: | files: |
server/src/queries server/src/queries
- name: Verify SQL files have not changed - name: Verify SQL files have not changed
if: steps.verify-changed-sql-files.outputs.files_changed == 'true' if: steps.verify-changed-sql-files.outputs.files_changed == 'true'
env: env:
+7 -7
View File
@@ -24,19 +24,19 @@ jobs:
should_run: ${{ steps.check.outputs.should_run }} should_run: ${{ steps.check.outputs.should_run }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Check what should run - name: Check what should run
id: check id: check
uses: immich-app/devtools/actions/pre-job@f50e3b600b6ac1763ddb8f3dfc69093512b967a1 # pre-job-action-v2.0.3 uses: immich-app/devtools/actions/pre-job@91f342bb4477c4bc10c576ae739da875d85aa164 # pre-job-action-v2.0.4
with: with:
github-token: ${{ steps.token.outputs.token }} github-token: ${{ steps.token.outputs.token }}
filters: | filters: |
i18n: i18n:
- modified: 'i18n/!(en|package)**\.json' - modified: 'i18n/!(en)**\.json'
skip-force-logic: 'true' skip-force-logic: 'true'
enforce-lock: enforce-lock:
@@ -47,9 +47,9 @@ jobs:
if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }} if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }}
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@57ff6ebfd507b045514442683ff06ff1b2f6efbd # create-workflow-token-action-v1.0.2 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} client-id: ${{ secrets.PUSH_O_MATIC_APP_CLIENT_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Bot review status - name: Bot review status
@@ -68,6 +68,6 @@ jobs:
permissions: {} permissions: {}
if: always() if: always()
steps: steps:
- uses: immich-app/devtools/actions/success-check@53bb77345ee9f953f93bd6fd9980f07a2f24965e # success-check-action-v0.0.5 - uses: immich-app/devtools/actions/success-check@81113db03f6d743efee81e0058c0b43f6cd6f36d # success-check-action-v0.0.6
with: with:
needs: ${{ toJSON(needs) }} needs: ${{ toJSON(needs) }}
+1 -1
View File
@@ -20,7 +20,7 @@ mobile/openapi/doc
mobile/openapi/.openapi-generator/FILES mobile/openapi/.openapi-generator/FILES
mobile/ios/build mobile/ios/build
open-api/typescript-sdk/build packages/**/build
mobile/android/fastlane/report.xml mobile/android/fastlane/report.xml
mobile/ios/fastlane/report.xml mobile/ios/fastlane/report.xml
View File
View File
+6 -4
View File
@@ -23,15 +23,17 @@
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"name": "Immich CLI", "name": "Immich CLI",
"program": "${workspaceFolder}/cli/dist/index.js", "program": "${workspaceFolder}/packages/cli/dist/index.js",
"args": ["upload", "--help"], "args": ["upload", "--help"],
"runtimeArgs": ["--enable-source-maps"], "runtimeArgs": ["--enable-source-maps"],
"console": "integratedTerminal", "console": "integratedTerminal",
"resolveSourceMapLocations": ["${workspaceFolder}/cli/dist/**/*.js.map"], "resolveSourceMapLocations": [
"${workspaceFolder}/packages/cli/dist/**/*.js.map"
],
"sourceMaps": true, "sourceMaps": true,
"outFiles": ["${workspaceFolder}/cli/dist/**/*.js"], "outFiles": ["${workspaceFolder}/packages/cli/dist/**/*.js"],
"skipFiles": ["<node_internals>/**"], "skipFiles": ["<node_internals>/**"],
"preLaunchTask": "Build Immich CLI" "preLaunchTask": "Build @immich/cli"
} }
] ]
} }
+3
View File
@@ -29,6 +29,9 @@
"editor.formatOnSave": true, "editor.formatOnSave": true,
"tailwindCSS.lint.suggestCanonicalClasses": "ignore" "tailwindCSS.lint.suggestCanonicalClasses": "ignore"
}, },
"svelte.plugin.svelte.compilerWarnings": {
"state_referenced_locally": "ignore"
},
"[typescript]": { "[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true "editor.formatOnSave": true
+2 -87
View File
@@ -37,105 +37,24 @@ prod-scale:
.PHONY: open-api .PHONY: open-api
open-api: open-api:
cd ./open-api && bash ./bin/generate-open-api.sh @printf "This command has been removed. Please use:\n\n mise open-api # or mise //:open-api from another directory\n\n"\n\n >&2 && exit 1
open-api-dart:
cd ./open-api && bash ./bin/generate-open-api.sh dart
open-api-typescript:
cd ./open-api && bash ./bin/generate-open-api.sh typescript
sql: sql:
pnpm --filter immich run sync:sql @printf "This command has been removed. Please use:\n\n mise sql # or mise //:sql from another directory\n\n"\n\n >&2 && exit 1
attach-server:
docker exec -it docker_immich-server_1 sh
renovate: renovate:
LOG_LEVEL=debug pnpm exec renovate --platform=local --repository-cache=reset LOG_LEVEL=debug pnpm exec renovate --platform=local --repository-cache=reset
# Directories that need to be created for volumes or build output
VOLUME_DIRS = \
./.pnpm-store \
./web/.svelte-kit \
./web/node_modules \
./web/coverage \
./e2e/node_modules \
./docs/node_modules \
./server/node_modules \
./open-api/typescript-sdk/node_modules \
./.github/node_modules \
./node_modules \
./cli/node_modules
# Include .env file if it exists # Include .env file if it exists
-include docker/.env -include docker/.env
MODULES = e2e server web cli sdk docs .github MODULES = e2e server web cli sdk docs .github
# directory to package name mapping function
# cli = @immich/cli
# docs = documentation
# e2e = immich-e2e
# open-api/typescript-sdk = @immich/sdk
# server = immich
# web = immich-web
map-package = $(subst sdk,@immich/sdk,$(subst cli,@immich/cli,$(subst docs,documentation,$(subst e2e,immich-e2e,$(subst server,immich,$(subst web,immich-web,$1))))))
audit-%:
pnpm --filter $(call map-package,$*) audit fix
install-%:
pnpm --filter $(call map-package,$*) install $(if $(FROZEN),--frozen-lockfile) $(if $(OFFLINE),--offline)
build-cli: build-sdk
build-web: build-sdk
build-%: install-%
pnpm --filter $(call map-package,$*) run build
format-%:
pnpm --filter $(call map-package,$*) run format:fix
lint-%:
pnpm --filter $(call map-package,$*) run lint:fix
check-%:
pnpm --filter $(call map-package,$*) run check
check-web:
pnpm --filter immich-web run check:typescript
pnpm --filter immich-web run check:svelte
test-%:
pnpm --filter $(call map-package,$*) run test
test-e2e: test-e2e:
docker compose -f ./e2e/docker-compose.yml build docker compose -f ./e2e/docker-compose.yml build
pnpm --filter immich-e2e run test pnpm --filter immich-e2e run test
pnpm --filter immich-e2e run test:web pnpm --filter immich-e2e run test:web
test-medium:
docker run \
--rm \
-v ./server/src:/usr/src/app/src \
-v ./server/test:/usr/src/app/test \
-v ./server/vitest.config.medium.mjs:/usr/src/app/vitest.config.medium.mjs \
-v ./server/tsconfig.json:/usr/src/app/tsconfig.json \
-e NODE_ENV=development \
immich-server:latest \
-c "pnpm test:medium -- --run"
test-medium-dev:
docker exec -it immich_server /bin/sh -c "pnpm run test:medium"
install-all:
pnpm -r --filter '!documentation' install
build-all: $(foreach M,$(filter-out e2e docs .github,$(MODULES)),build-$M) ;
check-all:
pnpm -r --filter '!documentation' run "/^(check|check\:svelte|check\:typescript)$/"
lint-all:
pnpm -r --filter '!documentation' run lint:fix
format-all:
pnpm -r --filter '!documentation' run format:fix
audit-all:
pnpm -r --filter '!documentation' audit fix
hygiene-all: audit-all
pnpm -r --filter '!documentation' run "/(format:fix|check|check:svelte|check:typescript|sql)/"
test-all:
pnpm -r --filter '!documentation' run "/^test/"
clean: clean:
find . -name "node_modules" -type d -prune -exec rm -rf {} + find . -name "node_modules" -type d -prune -exec rm -rf {} +
@@ -146,7 +65,3 @@ clean:
find . -name ".pnpm-store" -type d -prune -exec rm -rf '{}' + find . -name ".pnpm-store" -type d -prune -exec rm -rf '{}' +
command -v docker >/dev/null 2>&1 && docker compose -f ./docker/docker-compose.dev.yml down -v --remove-orphans || true command -v docker >/dev/null 2>&1 && docker compose -f ./docker/docker-compose.dev.yml down -v --remove-orphans || true
command -v docker >/dev/null 2>&1 && docker compose -f ./e2e/docker-compose.yml down -v --remove-orphans || true command -v docker >/dev/null 2>&1 && docker compose -f ./e2e/docker-compose.yml down -v --remove-orphans || true
setup-server-dev: install-server
setup-web-dev: install-sdk build-sdk install-web
-1
View File
@@ -1 +0,0 @@
24.15.0
-14
View File
@@ -1,14 +0,0 @@
FROM node:24.1.0-alpine3.20@sha256:8fe019e0d57dbdce5f5c27c0b63d2775cf34b00e3755a7dea969802d7e0c2b25 AS core
WORKDIR /usr/src/app
COPY package* pnpm* .pnpmfile.cjs ./
COPY ./cli ./cli/
COPY ./open-api/typescript-sdk ./open-api/typescript-sdk/
RUN corepack enable pnpm && \
pnpm install --filter @immich/sdk --filter @immich/cli --frozen-lockfile && \
pnpm --filter @immich/sdk build && \
pnpm --filter @immich/cli build
WORKDIR /import
ENTRYPOINT ["node", "/usr/src/app/cli/dist"]
+1 -1
View File
@@ -1,5 +1,5 @@
[tools] [tools]
terragrunt = "1.0.2" terragrunt = "1.0.3"
opentofu = "1.11.6" opentofu = "1.11.6"
[tasks."tg:fmt"] [tasks."tg:fmt"]
+30 -30
View File
@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" { provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.52.5" version = "4.52.7"
constraints = "4.52.5" constraints = "4.52.7"
hashes = [ hashes = [
"h1:+rfzF+16ZcWZWnTyW/p1HHTzYbPKX8Zt2nIFtR/+f+E=", "h1:+O72J3QYiZtYmYYZM/Eh0f4NNfl1BvjX1eju43qTQsQ=",
"h1:18bXaaOSq8MWKuMxo/4y7EB7/i7G90y5QsKHZRmkoDo=", "h1:0oqjYIPXcXh7XiDiKI085cHDYQQ5mh8kDl9dmBtvtog=",
"h1:4vZVOpKeEQZsF2VrARRZFeL37Ed/gD4rRMtfnvWQres=", "h1:4b4ESb87MGv5bnadgYe7sK5rEkKMZhbkQcwPubQTsR4=",
"h1:BZOsTF83QPKXTAaYqxPKzdl1KRjk/L2qbPpFjM0w28A=", "h1:6mTr3eA1Ddb348lLmJuyvn98z4KF+ejqaUEJ76D1rzQ=",
"h1:CDuC+HXLvc1z6wkCRsSDcc/+QENIHEtssYshiWg3opA=", "h1:9/3YH+9k9HqsvFtbmBf7SO2+xqZeZrXNKzLkjNuhUEA=",
"h1:DE+YFzLnqSe79pI2R4idRGx5QzLdrA7RXvngTkGfZ30=", "h1:Jcq4tBWgyH4/2JsojNBSRaN0mcItVMchO+lynonrlqc=",
"h1:DfaJwH3Ml4yrRbdAY4AcDVy0QTQk5T3A622TXzS/u2E=", "h1:Y4Vv/2RdP0Q+uxqhOxzOdKxuuEMjXPDcU0vPc5bCQzI=",
"h1:EIDXP0W3kgIv2pecrFmqtK/DnlqkyckzBzhxKaXU+4A=", "h1:a0gW8FBKsbP9Fi0HEDoy49WIbEWVHk9+BR4/iwuBdDQ=",
"h1:EV4kYyaOnwGA0bh/3hU6Ezqnt1PFDxopH7i85e48IzY=", "h1:gElv6iqJtg8OKN77gbw+MjrkrQmJHPkkMEi1J+0xkpU=",
"h1:M0iXabfzamU+MPDi0G9XACpbacFKMakmM+Z9HZ8HrsM=", "h1:oslXUugD/NQ+duJgT4BhKQyfGbuFOANknMvR73fiOeM=",
"h1:YWmCbGF/KbsrUzcYVBLscwLizidbp95TDQa0N2qpmVo=", "h1:pPItIWii5oymR+geZB219ROSPuSODPLTlM4S/u8xLvM=",
"h1:cxPcCB5gbrpUO1+IXkQYs1YTY50/0IlApCzGea0cwuQ=", "h1:u67GWw8GwD9NDlDzp9Y5VRnSQGcCrE8rSpkGPaBpDl0=",
"h1:g6DldikTV2HXUu9uoeNY5FuLufgaYWF4ufgZg7wq62s=", "h1:uUUa9dY0XQOycI8pxg16PFFtL0WCTi9uEJz8trTQ7pU=",
"h1:oi/Hrx9pwoQ+Z52CBC+rrowVH387EIj0qvnxQgDeI+0=", "h1:y3rV8KF2q6GEMANNlf5EkKJurlfbKlIKpjGcdxoy7pQ=",
"zh:1a3400cb38863b2585968d1876706bcfc67a148e1318a1d325c6c7704adc999b", "zh:0c904ce31a4c6c4a5b3bf7ff1560e77c0cc7e2450c8553ded8e8c90398e1418b",
"zh:4c5062cb9e9da1676f06ae92b8370186d98976cc4c7030d3cd76df12af54282a", "zh:36183d310c36373fe4cb936b83c595c6fd3b0a94bc7827f28e5789ccbf59752e",
"zh:52110f493b5f0587ef77a1cfd1a67001fd4c617b14c6502d732ab47352bdc2f7", "zh:556a568a6f0235e8f41647de9e4d3a1e7b1d6502df8b19b54ec441f1c653ea10",
"zh:5aa536f9eaeb43823aaf2aa80e7d39b25ef2b383405ed034aa16a28b446a9238", "zh:633ebbd5b0245e75e500ef9be4d9e62288f97e8da3baaa51323892a786d90285",
"zh:5cc39459a1c6be8a918f17054e4fbba573825ed5597dcada588fe99614d98a5b", "zh:6acfe60cf52a65ba8f044f748548d2119e7f4fd7f8ebcb14698960d87c68f529",
"zh:629ae6a7ba298815131da826474d199312d21cec53a4d5ded4fa56a692e6f072",
"zh:719cc7c75dc1d3eb30c22ff5102a017996d9788b948078c7e1c5b3446aeca661",
"zh:8698635a3ca04383c1e93b21d6963346bdae54d27177a48e4b1435b7f731731c",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:8a9993f1dcadf1dd6ca43b23348abe374605d29945a2fafc07fb3457644e6a54", "zh:904acc31ebb9d6ef68c792074b30532ee61bf515f19e0a3c75b46f126cca1f13",
"zh:b1b9a1e6bcc24d5863a664a411d2dc906373ae7a2399d2d65548ce7377057852", "zh:a1d0a81246afc8750286d3f6fe7a8fbe6460dd2662407b28dbfbabb612e5fa9d",
"zh:b270184cdeec277218e84b94cb136fead753da717f9b9dc378e51907f3f00bb0", "zh:a41a36fe253fc365fe2b7ffc749624688b2693b4634862fda161179ab100029f",
"zh:dff2bc10071210181726ce270f954995fe42c696e61e2e8f874021fed02521e5", "zh:a7ef269e77ffa8715c8945a2c14322c7ff159ea44c15f62505f3cbb2cae3b32d",
"zh:e8e87b40b6a87dc097b0fdc20d3f725cec0d82abc9cc3755c1f89f8f6e8b0036", "zh:b01aa3bed30610633b762df64332b26f8844a68c3960cebcb30f04918efc67fe",
"zh:ee964a6573d399a5dd22ce328fb38ca1207797a02248f14b2e4913ee390e7803", "zh:b069cc2cd18cae10757df3ae030508eac8d55de7e49eda7a5e3e11f2f7fe6455",
"zh:b2d2c6313729ebb7465dceece374049e2d08bda34473901be9ff46a8836d42b2",
"zh:db0e114edaf4bc2f3d4769958807c83022bfbc619a00bdf4c4bd17faa4ab2d8b",
"zh:ecc0aa8b9044f664fd2aaf8fa992d976578f78478980555b4b8f6148e8d1a5fe",
] ]
} }
@@ -5,7 +5,7 @@ terraform {
required_providers { required_providers {
cloudflare = { cloudflare = {
source = "cloudflare/cloudflare" source = "cloudflare/cloudflare"
version = "4.52.5" version = "4.52.7"
} }
} }
} }
+30 -30
View File
@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" { provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.52.5" version = "4.52.7"
constraints = "4.52.5" constraints = "4.52.7"
hashes = [ hashes = [
"h1:+rfzF+16ZcWZWnTyW/p1HHTzYbPKX8Zt2nIFtR/+f+E=", "h1:+O72J3QYiZtYmYYZM/Eh0f4NNfl1BvjX1eju43qTQsQ=",
"h1:18bXaaOSq8MWKuMxo/4y7EB7/i7G90y5QsKHZRmkoDo=", "h1:0oqjYIPXcXh7XiDiKI085cHDYQQ5mh8kDl9dmBtvtog=",
"h1:4vZVOpKeEQZsF2VrARRZFeL37Ed/gD4rRMtfnvWQres=", "h1:4b4ESb87MGv5bnadgYe7sK5rEkKMZhbkQcwPubQTsR4=",
"h1:BZOsTF83QPKXTAaYqxPKzdl1KRjk/L2qbPpFjM0w28A=", "h1:6mTr3eA1Ddb348lLmJuyvn98z4KF+ejqaUEJ76D1rzQ=",
"h1:CDuC+HXLvc1z6wkCRsSDcc/+QENIHEtssYshiWg3opA=", "h1:9/3YH+9k9HqsvFtbmBf7SO2+xqZeZrXNKzLkjNuhUEA=",
"h1:DE+YFzLnqSe79pI2R4idRGx5QzLdrA7RXvngTkGfZ30=", "h1:Jcq4tBWgyH4/2JsojNBSRaN0mcItVMchO+lynonrlqc=",
"h1:DfaJwH3Ml4yrRbdAY4AcDVy0QTQk5T3A622TXzS/u2E=", "h1:Y4Vv/2RdP0Q+uxqhOxzOdKxuuEMjXPDcU0vPc5bCQzI=",
"h1:EIDXP0W3kgIv2pecrFmqtK/DnlqkyckzBzhxKaXU+4A=", "h1:a0gW8FBKsbP9Fi0HEDoy49WIbEWVHk9+BR4/iwuBdDQ=",
"h1:EV4kYyaOnwGA0bh/3hU6Ezqnt1PFDxopH7i85e48IzY=", "h1:gElv6iqJtg8OKN77gbw+MjrkrQmJHPkkMEi1J+0xkpU=",
"h1:M0iXabfzamU+MPDi0G9XACpbacFKMakmM+Z9HZ8HrsM=", "h1:oslXUugD/NQ+duJgT4BhKQyfGbuFOANknMvR73fiOeM=",
"h1:YWmCbGF/KbsrUzcYVBLscwLizidbp95TDQa0N2qpmVo=", "h1:pPItIWii5oymR+geZB219ROSPuSODPLTlM4S/u8xLvM=",
"h1:cxPcCB5gbrpUO1+IXkQYs1YTY50/0IlApCzGea0cwuQ=", "h1:u67GWw8GwD9NDlDzp9Y5VRnSQGcCrE8rSpkGPaBpDl0=",
"h1:g6DldikTV2HXUu9uoeNY5FuLufgaYWF4ufgZg7wq62s=", "h1:uUUa9dY0XQOycI8pxg16PFFtL0WCTi9uEJz8trTQ7pU=",
"h1:oi/Hrx9pwoQ+Z52CBC+rrowVH387EIj0qvnxQgDeI+0=", "h1:y3rV8KF2q6GEMANNlf5EkKJurlfbKlIKpjGcdxoy7pQ=",
"zh:1a3400cb38863b2585968d1876706bcfc67a148e1318a1d325c6c7704adc999b", "zh:0c904ce31a4c6c4a5b3bf7ff1560e77c0cc7e2450c8553ded8e8c90398e1418b",
"zh:4c5062cb9e9da1676f06ae92b8370186d98976cc4c7030d3cd76df12af54282a", "zh:36183d310c36373fe4cb936b83c595c6fd3b0a94bc7827f28e5789ccbf59752e",
"zh:52110f493b5f0587ef77a1cfd1a67001fd4c617b14c6502d732ab47352bdc2f7", "zh:556a568a6f0235e8f41647de9e4d3a1e7b1d6502df8b19b54ec441f1c653ea10",
"zh:5aa536f9eaeb43823aaf2aa80e7d39b25ef2b383405ed034aa16a28b446a9238", "zh:633ebbd5b0245e75e500ef9be4d9e62288f97e8da3baaa51323892a786d90285",
"zh:5cc39459a1c6be8a918f17054e4fbba573825ed5597dcada588fe99614d98a5b", "zh:6acfe60cf52a65ba8f044f748548d2119e7f4fd7f8ebcb14698960d87c68f529",
"zh:629ae6a7ba298815131da826474d199312d21cec53a4d5ded4fa56a692e6f072",
"zh:719cc7c75dc1d3eb30c22ff5102a017996d9788b948078c7e1c5b3446aeca661",
"zh:8698635a3ca04383c1e93b21d6963346bdae54d27177a48e4b1435b7f731731c",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:8a9993f1dcadf1dd6ca43b23348abe374605d29945a2fafc07fb3457644e6a54", "zh:904acc31ebb9d6ef68c792074b30532ee61bf515f19e0a3c75b46f126cca1f13",
"zh:b1b9a1e6bcc24d5863a664a411d2dc906373ae7a2399d2d65548ce7377057852", "zh:a1d0a81246afc8750286d3f6fe7a8fbe6460dd2662407b28dbfbabb612e5fa9d",
"zh:b270184cdeec277218e84b94cb136fead753da717f9b9dc378e51907f3f00bb0", "zh:a41a36fe253fc365fe2b7ffc749624688b2693b4634862fda161179ab100029f",
"zh:dff2bc10071210181726ce270f954995fe42c696e61e2e8f874021fed02521e5", "zh:a7ef269e77ffa8715c8945a2c14322c7ff159ea44c15f62505f3cbb2cae3b32d",
"zh:e8e87b40b6a87dc097b0fdc20d3f725cec0d82abc9cc3755c1f89f8f6e8b0036", "zh:b01aa3bed30610633b762df64332b26f8844a68c3960cebcb30f04918efc67fe",
"zh:ee964a6573d399a5dd22ce328fb38ca1207797a02248f14b2e4913ee390e7803", "zh:b069cc2cd18cae10757df3ae030508eac8d55de7e49eda7a5e3e11f2f7fe6455",
"zh:b2d2c6313729ebb7465dceece374049e2d08bda34473901be9ff46a8836d42b2",
"zh:db0e114edaf4bc2f3d4769958807c83022bfbc619a00bdf4c4bd17faa4ab2d8b",
"zh:ecc0aa8b9044f664fd2aaf8fa992d976578f78478980555b4b8f6148e8d1a5fe",
] ]
} }
+1 -1
View File
@@ -5,7 +5,7 @@ terraform {
required_providers { required_providers {
cloudflare = { cloudflare = {
source = "cloudflare/cloudflare" source = "cloudflare/cloudflare"
version = "4.52.5" version = "4.52.7"
} }
} }
} }
+4 -4
View File
@@ -25,10 +25,10 @@ services:
- server_node_modules:/usr/src/app/server/node_modules - server_node_modules:/usr/src/app/server/node_modules
- web_node_modules:/usr/src/app/web/node_modules - web_node_modules:/usr/src/app/web/node_modules
- github_node_modules:/usr/src/app/.github/node_modules - github_node_modules:/usr/src/app/.github/node_modules
- cli_node_modules:/usr/src/app/cli/node_modules - cli_node_modules:/usr/src/app/packages/cli/node_modules
- docs_node_modules:/usr/src/app/docs/node_modules - docs_node_modules:/usr/src/app/docs/node_modules
- e2e_node_modules:/usr/src/app/e2e/node_modules - e2e_node_modules:/usr/src/app/e2e/node_modules
- sdk_node_modules:/usr/src/app/open-api/typescript-sdk/node_modules - sdk_node_modules:/usr/src/app/packages/sdk/node_modules
- app_node_modules:/usr/src/app/node_modules - app_node_modules:/usr/src/app/node_modules
- sveltekit:/usr/src/app/web/.svelte-kit - sveltekit:/usr/src/app/web/.svelte-kit
- coverage:/usr/src/app/web/coverage - coverage:/usr/src/app/web/coverage
@@ -74,7 +74,7 @@ services:
- ${UPLOAD_LOCATION}/photos:/data - ${UPLOAD_LOCATION}/photos:/data
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- pnpm_store_server:/buildcache/pnpm-store - pnpm_store_server:/buildcache/pnpm-store
- ../plugins:/build/corePlugin - ../packages/plugins:/build/corePlugin
env_file: env_file:
- .env - .env
environment: environment:
@@ -157,7 +157,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 image: docker.io/valkey/valkey:9@sha256:8436e10bc65c94886a91d4415b6a6dfa9cb5a306fb3b996e5bb67cd2b4854193
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
+2 -2
View File
@@ -56,7 +56,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 image: docker.io/valkey/valkey:9@sha256:8436e10bc65c94886a91d4415b6a6dfa9cb5a306fb3b996e5bb67cd2b4854193
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
@@ -97,7 +97,7 @@ services:
command: ['./run.sh', '-disable-reporting'] command: ['./run.sh', '-disable-reporting']
ports: ports:
- 3000:3000 - 3000:3000
image: grafana/grafana:12.4.2-ubuntu@sha256:78839fe49e1425c02416fa8072591533a72bd9598e563b54a07d78f9e27fb5d3 image: grafana/grafana:12.4.3-ubuntu@sha256:ca3f764fdc48cebdf22dd206f33ecb0795a9a7210eacd1b5c02204aebd78b223
volumes: volumes:
- grafana-data:/var/lib/grafana - grafana-data:/var/lib/grafana
+1 -4
View File
@@ -61,7 +61,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 image: docker.io/valkey/valkey:9@sha256:8436e10bc65c94886a91d4415b6a6dfa9cb5a306fb3b996e5bb67cd2b4854193
user: '1000:1000' user: '1000:1000'
security_opt: security_opt:
- no-new-privileges:true - no-new-privileges:true
@@ -95,6 +95,3 @@ services:
restart: always restart: always
healthcheck: healthcheck:
disable: false disable: false
volumes:
model-cache:
+1 -1
View File
@@ -49,7 +49,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 image: docker.io/valkey/valkey:9@sha256:8436e10bc65c94886a91d4415b6a6dfa9cb5a306fb3b996e5bb67cd2b4854193
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
-1
View File
@@ -1 +0,0 @@
24.15.0
@@ -13,8 +13,11 @@ The `immich-server` docker image comes preinstalled with an administrative CLI (
| `enable-oauth-login` | Enable OAuth login | | `enable-oauth-login` | Enable OAuth login |
| `disable-oauth-login` | Disable OAuth login | | `disable-oauth-login` | Disable OAuth login |
| `list-users` | List Immich users | | `list-users` | List Immich users |
| `grant-admin` | Grant admin privileges to a user (by email) |
| `revoke-admin` | Revoke admin privileges from a user (by email) |
| `version` | Print Immich version | | `version` | Print Immich version |
| `change-media-location` | Change database file paths to align with a new media location | | `change-media-location` | Change database file paths to align with a new media location |
| `schema-check` | Verify database migrations and check for schema drift |
## How to run a command ## How to run a command
@@ -102,6 +105,22 @@ immich-admin list-users
] ]
``` ```
Grant Admin
```
immich-admin grant-admin
? Please enter the user email: user@example.com
Admin access has been granted to user@example.com
```
Revoke Admin
```
immich-admin revoke-admin
? Please enter the user email: user@example.com
Admin access has been revoked from user@example.com
```
Print Immich Version Print Immich Version
``` ```
@@ -126,3 +145,12 @@ immich-admin change-media-location
Database file paths updated successfully! 🎉 Database file paths updated successfully! 🎉
... ...
``` ```
Schema Check
```
immich-admin schema-check
Migrations are up to date
No schema drift detected
```
+1 -1
View File
@@ -10,4 +10,4 @@ OpenAPI is used to generate the client (Typescript, Dart) SDK. `openapi-generato
make open-api make open-api
``` ```
You can find the generated client SDK in the `open-api/typescript-sdk/client` for Typescript SDK and `mobile/openapi` for Dart SDK. You can find the generated client SDK in the `packages/sdk/client` for Typescript SDK and `mobile/openapi` for Dart SDK.
+6 -47
View File
@@ -205,7 +205,7 @@ When the Dev Container starts, it automatically:
1. **Runs post-create script** (`container-server-post-create.sh`): 1. **Runs post-create script** (`container-server-post-create.sh`):
- Adjusts file permissions for the `node` user - Adjusts file permissions for the `node` user
- Installs dependencies: `pnpm install` in all packages - Installs dependencies: `pnpm install` in all packages
- Builds TypeScript SDK: `pnpm run build` in `open-api/typescript-sdk` - Builds TypeScript SDK: `pnpm --filter @immich/sdk build`
2. **Starts development servers** via VS Code tasks: 2. **Starts development servers** via VS Code tasks:
- `Immich API Server (Nest)` - API server with hot-reloading on port 2283 - `Immich API Server (Nest)` - API server with hot-reloading on port 2283
@@ -243,8 +243,8 @@ To connect the mobile app to your Dev Container:
- **Server code** (`/server`): Changes trigger automatic restart - **Server code** (`/server`): Changes trigger automatic restart
- **Web code** (`/web`): Changes trigger hot module replacement - **Web code** (`/web`): Changes trigger hot module replacement
- **Database migrations**: Run `pnpm run sync:sql` in the server directory - **Database migrations**: Run `mise //:sql`
- **API changes**: Regenerate TypeScript SDK with `make open-api` - **API changes**: Regenerate TypeScript SDK with `mise //:open-api`
## Testing ## Testing
@@ -252,20 +252,11 @@ To connect the mobile app to your Dev Container:
The Dev Container supports multiple ways to run tests: The Dev Container supports multiple ways to run tests:
#### Using Make Commands (Recommended) #### Using Mise Commands (Recommended)
```bash ```bash
# Run tests for specific components # Run tests for specific components
make test-server # Server unit tests mise run checklist # in `server/`, `web/`, `packages/cli`
make test-web # Web unit tests
make test-e2e # End-to-end tests
make test-cli # CLI tests
# Run all tests
make test-all # Runs tests for all components
# Medium tests (integration tests)
make test-medium-dev # End-to-end tests
``` ```
#### Using PNPM Directly #### Using PNPM Directly
@@ -289,48 +280,16 @@ pnpm run test # Run API tests
pnpm run test:web # Run web UI tests pnpm run test:web # Run web UI tests
``` ```
### Code Quality Commands
```bash
# Linting
make lint-server # Lint server code
make lint-web # Lint web code
make lint-all # Lint all components
# Formatting
make format-server # Format server code
make format-web # Format web code
make format-all # Format all code
# Type checking
make check-server # Type check server
make check-web # Type check web
make check-all # Check all components
# Complete hygiene check
make hygiene-all # Run lint, format, check, SQL sync, and audit
```
### Additional Make Commands ### Additional Make Commands
```bash ```bash
# Build commands
make build-server # Build server
make build-web # Build web app
make build-all # Build everything
# API generation # API generation
make open-api # Generate OpenAPI specs make open-api # Generate OpenAPI specs
make open-api-typescript # Generate TypeScript SDK make open-api-typescript # Generate TypeScript SDK
make open-api-dart # Generate Dart SDK make open-api-dart # Generate Dart SDK
# Database # Database
make sql # Sync database schema mise sql # Sync database schema
# Dependencies
make install-server # Install server dependencies
make install-web # Install web dependencies
make install-all # Install all dependencies
``` ```
### Debugging ### Debugging
+2 -1
View File
@@ -10,7 +10,8 @@ Our [GitHub Repository](https://github.com/immich-app/immich) is a [monorepo](ht
| :------------------ | :------------------------------------------------------------------- | | :------------------ | :------------------------------------------------------------------- |
| `.github/` | Github templates and action workflows | | `.github/` | Github templates and action workflows |
| `.vscode/` | VSCode debug launch profiles | | `.vscode/` | VSCode debug launch profiles |
| `cli/` | Source code for the work-in-progress CLI rewrite | | `packages/cli` | Source code for the CLI |
| `packages/sdk` | Source code for the generated OpenAPI SDK |
| `docker/` | Docker compose resources for dev, test, production | | `docker/` | Docker compose resources for dev, test, production |
| `design/` | Screenshots and logos for the README | | `design/` | Screenshots and logos for the README |
| `docs/` | Source code for the [https://immich.app](https://immich.app) website | | `docs/` | Source code for the [https://immich.app](https://immich.app) website |
+11 -9
View File
@@ -34,21 +34,23 @@ Run all web checks with `pnpm run check:all`
Run all server checks with `pnpm run check:all` Run all server checks with `pnpm run check:all`
::: :::
:::info Auto Fix :::tip Auto Fix
You can use `pnpm run __:fix` to potentially correct some issues automatically for `pnpm run format` and `lint`. You can use `pnpm run __:fix` to potentially correct some issues automatically for `pnpm run format` and `lint`.
::: :::
## Mobile Checks ## Mobile Checklist
The following commands must be executed from within the mobile app directory of the codebase. - [ ] `mise //mobile:codegen` (auto-generate files using build_runner)
- [ ] `mise //mobile:lint` (static analysis via Dart Analyzer and DCM)
- [ ] `mise //mobile:format` (formatting via Dart Formatter)
- [ ] `mise //mobile:test` (unit tests)
- [ ] `make build` (auto-generate files using build_runner) :::tip
- [ ] `make analyze` (static analysis via Dart Analyzer and DCM) Run all these commands at once with `mise //mobile:checklist`
- [ ] `make format` (formatting via Dart Formatter) :::
- [ ] `make test` (unit tests)
:::info Auto Fix :::tip Auto Fix
You can use `dart fix --apply` and `dcm fix lib` to potentially correct some issues automatically for `make analyze`. You can use `mise //mobile:lint-fix` to potentially correct some issues automatically for `mise //mobile:lint`.
::: :::
## OpenAPI ## OpenAPI
+1 -1
View File
@@ -58,7 +58,7 @@ You can access the web from `http://your-machine-ip:3000` or `http://localhost:3
If you only want to do web development connected to an existing, remote backend, follow these steps: If you only want to do web development connected to an existing, remote backend, follow these steps:
1. Build the Immich SDK - `cd open-api/typescript-sdk && pnpm i && pnpm run build && cd -` 1. Build the Immich SDK - `pnpm --filter @immich/sdk install && pnpm --filter @immich/sdk build`
2. Enter the web directory - `cd web/` 2. Enter the web directory - `cd web/`
3. Install web dependencies - `pnpm i` 3. Install web dependencies - `pnpm i`
4. Start the web development server 4. Start the web development server
+4 -5
View File
@@ -17,15 +17,14 @@ make e2e
Before you can run the tests, you need to run the following commands _once_: Before you can run the tests, you need to run the following commands _once_:
- `pnpm install` (in `e2e/`) - `pnpm install`
- `pnpm run build` (in `cli/`) - `pnpm --filter "@immich/*" build`
- `make open-api` (in the project root `/`) - `mise //:open-api`
Once the test environment is running, the e2e tests can be run via: Once the test environment is running, the e2e tests can be run via:
```bash ```bash
cd e2e/ mise //e2e:test
pnpm test
``` ```
The tests check various things including: The tests check various things including:
+2
View File
@@ -50,6 +50,8 @@ Some basic examples:
- `**/Raw/**` will exclude all files in any directory named `Raw` - `**/Raw/**` will exclude all files in any directory named `Raw`
- `**/*.{tif,jpg}` will exclude all files with the extension `.tif` or `.jpg` - `**/*.{tif,jpg}` will exclude all files with the extension `.tif` or `.jpg`
Note that `*` is a wildcard matching zero or more characters (i.e., withinin a filename or single directory name). `**` matches zero or more subdirectories, recursively. It also includes any/all files within a subdirectory, i.e., when used at the end of a pattern. For example, `**/exclude_me/**` will exclude all files in any directory named `exclude_me`, as well as all files in any subdirectories of `exclude_me`, recursively.
Special characters such as @ should be escaped, for instance: Special characters such as @ should be escaped, for instance:
- `**/\@eaDir/**` will exclude all files in any directory named `@eaDir` - `**/\@eaDir/**` will exclude all files in any directory named `@eaDir`
@@ -47,6 +47,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
#### ROCm #### ROCm
- On Linux, The [AMDGPU driver module](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/how-to/docker.html) needs to be installed on the server and, if secure boot is used, the signing key of DKMS [needs to be enrolled in UEFI BIOS](https://wiki.debian.org/SecureBoot)
- The GPU must be supported by ROCm. If it isn't officially supported, you can attempt to use the `HSA_OVERRIDE_GFX_VERSION` environmental variable: `HSA_OVERRIDE_GFX_VERSION=<a supported version, e.g. 10.3.0>`. If this doesn't work, you might need to also set `HSA_USE_SVM=0`. - The GPU must be supported by ROCm. If it isn't officially supported, you can attempt to use the `HSA_OVERRIDE_GFX_VERSION` environmental variable: `HSA_OVERRIDE_GFX_VERSION=<a supported version, e.g. 10.3.0>`. If this doesn't work, you might need to also set `HSA_USE_SVM=0`.
- The ROCm image is quite large and requires at least 35GiB of free disk space. However, pulling later updates to the service through Docker will generally only amount to a few hundred megabytes as the rest will be cached. - The ROCm image is quite large and requires at least 35GiB of free disk space. However, pulling later updates to the service through Docker will generally only amount to a few hundred megabytes as the rest will be cached.
- This backend is new and may experience some issues. For example, GPU power consumption can be higher than usual after running inference, even if the machine learning service is idle. In this case, it will only go back to normal after being idle for 5 minutes (configurable with the [MACHINE_LEARNING_MODEL_TTL](/install/environment-variables) setting). - This backend is new and may experience some issues. For example, GPU power consumption can be higher than usual after running inference, even if the machine learning service is idle. In this case, it will only go back to normal after being idle for 5 minutes (configurable with the [MACHINE_LEARNING_MODEL_TTL](/install/environment-variables) setting).
+7
View File
@@ -18,6 +18,7 @@ You can search the following types of content:
| People | Faces that are recognized in your photos/videos. | | People | Faces that are recognized in your photos/videos. |
| Contextual | Content of the photos and videos. | | Contextual | Content of the photos and videos. |
| File name or extension | Full or partial file's name, or file's extension | | File name or extension | Full or partial file's name, or file's extension |
| Full path or folder | Full or partial folder names from the original path. |
| Description | Description added to assets. | | Description | Description added to assets. |
| Optical Character Recognition (OCR) | Text in images | | Optical Character Recognition (OCR) | Text in images |
| Locations | Cities, states, and countries from reverse geocoding. | | Locations | Cities, states, and countries from reverse geocoding. |
@@ -30,6 +31,12 @@ You can search the following types of content:
<img src={require('./img/advanced-search-filters.webp').default} width="70%" title='Advanced search filters' /> <img src={require('./img/advanced-search-filters.webp').default} width="70%" title='Advanced search filters' />
### Full path or folder
Use this mode when you know a folder name or part of the original asset path.
Example: for /John/Projects/3D_Printing/2026-07-01/IMG_0001.jpg, searches like Projects, 3D, Printing, or 2026 match the asset.
## Configuration ## Configuration
Navigating to `Administration > Settings > Machine Learning Settings > Smart Search` will show the options available. Navigating to `Administration > Settings > Machine Learning Settings > Smart Search` will show the options available.
+2 -2
View File
@@ -26,7 +26,7 @@ The default configuration looks like this:
}, },
"ffmpeg": { "ffmpeg": {
"accel": "disabled", "accel": "disabled",
"accelDecode": false, "accelDecode": true,
"acceptedAudioCodecs": ["aac", "mp3", "opus"], "acceptedAudioCodecs": ["aac", "mp3", "opus"],
"acceptedContainers": ["mov", "ogg", "webm"], "acceptedContainers": ["mov", "ogg", "webm"],
"acceptedVideoCodecs": ["h264"], "acceptedVideoCodecs": ["h264"],
@@ -264,4 +264,4 @@ volumes:
- ./configuration.yml:${IMMICH_CONFIG_FILE} - ./configuration.yml:${IMMICH_CONFIG_FILE}
``` ```
:: :::
+19 -17
View File
@@ -29,29 +29,31 @@ These environment variables are used by the `docker-compose.yml` file and do **N
## General ## General
| Variable | Description | Default | Containers | Workers | | Variable | Description | Default | Containers | Workers |
| :---------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :----------------------- | :----------------- | | :---------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------: | :----------------------- | :----------------- |
| `TZ` | Timezone | <sup>\*1</sup> | server | microservices | | `TZ` | Timezone | <sup>\*1</sup> | server | microservices |
| `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices | | `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices |
| `IMMICH_LOG_LEVEL` | Log level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices | | `IMMICH_LOG_LEVEL` | Log level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices |
| `IMMICH_LOG_FORMAT` | Log output format (`console`, `json`) | `console` | server | api, microservices | | `IMMICH_LOG_FORMAT` | Log output format (`console`, `json`) | `console` | server | api, microservices |
| `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**<sup>\*2</sup>⚠️ | `/data` | server | api, microservices | | `IMMICH_MEDIA_LOCATION` | Media location inside the container ⚠️**You probably shouldn't set this**<sup>\*2</sup>⚠️ | `/data` | server | api, microservices |
| `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices | | `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices |
| `IMMICH_HELMET_FILE` | Path to a json file with [helmet](https://www.npmjs.com/package/helmet) options. Set to `false` to disable. Set to `true` to use `server/helmet.json`. | `false` | server | api | | `IMMICH_HELMET_FILE` | Path to a json file with [helmet](https://www.npmjs.com/package/helmet) options. Set to `false` to disable. Set to `true` to use `server/helmet.json`<sup>\*3</sup>. | `false` | server | api |
| `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | | | `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | |
| `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | | | `CPU_CORES` | Number of cores available to the Immich server | auto-detected CPU core count | server | |
| `IMMICH_API_METRICS_PORT` | Port for the OTEL metrics | `8081` | server | api | | `IMMICH_API_METRICS_PORT` | Port for the OTEL metrics | `8081` | server | api |
| `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices | | `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices |
| `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices | | `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices |
| `IMMICH_TRUSTED_PROXIES` | List of comma-separated IPs set as trusted proxies | | server | api | | `IMMICH_TRUSTED_PROXIES` | List of comma-separated IPs set as trusted proxies | | server | api |
| `IMMICH_IGNORE_MOUNT_CHECK_ERRORS` | See [System Integrity](/administration/system-integrity) | | server | api, microservices | | `IMMICH_IGNORE_MOUNT_CHECK_ERRORS` | See [System Integrity](/administration/system-integrity) | | server | api, microservices |
| `IMMICH_ALLOW_SETUP` | When `false` disables the `/auth/admin-sign-up` endpoint | `true` | server | api | | `IMMICH_ALLOW_SETUP` | When `false` disables the `/auth/admin-sign-up` endpoint | `true` | server | api |
\*1: `TZ` should be set to a `TZ identifier` from [this list][tz-list]. For example, `TZ="Etc/UTC"`. \*1: `TZ` should be set to a `TZ identifier` from [this list][tz-list]. For example, `TZ="Etc/UTC"`.
`TZ` is used by `exiftool` as a fallback in case the timezone cannot be determined from the image metadata. It is also used for logfile timestamps and cron job execution. `TZ` is used by `exiftool` as a fallback in case the timezone cannot be determined from the image metadata. It is also used for logfile timestamps and cron job execution.
\*2: This path is where the Immich code looks for the files, which is internal to the docker container. Setting it to a path on your host will certainly break things, you should use the `UPLOAD_LOCATION` variable instead. \*2: This path is where the Immich code looks for the files, which is internal to the docker container. Setting it to a path on your host will certainly break things, you should use the `UPLOAD_LOCATION` variable instead.
\*3: The [default configuration](https://helmetjs.github.io/#content-security-policy) sets `upgrade-insecure-requests`, which tells the browser to upgrade all requests to HTTPS. This breaks on HTTP-only deployments. If you cannot use HTTPS, you should use a custom helmet config file with `"upgrade-insecure-requests": null`.
## Workers ## Workers
| Variable | Description | Default | Containers | | Variable | Description | Default | Containers |
+66 -2
View File
@@ -52,7 +52,7 @@ Scroll to the bottom of the "**Details**" section and find the `IP Address` list
## Step 4 - Configure Firewall Settings ## Step 4 - Configure Firewall Settings
Once your project completes the build process, your containers will start. In order to be able to access Immich from your browser, you need to configure the firewall settings for your Synology NAS. Once your project completes the build process, your containers will start. In order to be able to access Immich from your browser, you need to configure the firewall settings for your Synology NAS to allow communication between the Immich containers.
Open "**Control Panel**" on your Synology NAS, and select "**Security**". Navigate to "**Firewall**" Open "**Control Panel**" on your Synology NAS, and select "**Security**". Navigate to "**Firewall**"
@@ -74,6 +74,7 @@ Read the [Post Installation](/install/post-install.mdx) steps and [upgrade instr
<details> <details>
<summary>Updating Immich using Container Manager</summary> <summary>Updating Immich using Container Manager</summary>
Check the post installation and upgrade instructions at the links above before proceeding with this section. Check the post installation and upgrade instructions at the links above before proceeding with this section.
## Step 1. Backup ## Step 1. Backup
@@ -110,7 +111,7 @@ Go to **Project**, select **Action** then **Build**. This will download, unpack,
## Step 5. Update firewall rule ## Step 5. Update firewall rule
The default behavior is to automatically start the containers once installed. If `immich_server` runs for a few seconds and then stops, it may be because the firewall rule no longer matches the server IP address. Without a fixed subnet, the default behavior is to automatically start the containers once installed. If `immich_server` runs for a few seconds and then stops, it may be because the firewall rule no longer matches the server IP address.
Go to the **Container** section. Click on `immich_server` and scroll down on **General** to find the IP address. Go to the **Container** section. Click on `immich_server` and scroll down on **General** to find the IP address.
![Container IP](../../static/img/synology-container-ip.png) ![Container IP](../../static/img/synology-container-ip.png)
@@ -123,4 +124,67 @@ In this example, the IP addresses mismatch and the firewall rule needs to be edi
![Edit IP](../../static/img/synology-fw-ipedit.png) ![Edit IP](../../static/img/synology-fw-ipedit.png)
To prevent future firewall issues, you may set a fixed subnet. [See Set Fixed Subnet](#set-fixed-subnet) for instructions.
</details>
<details id="set-fixed-subnet">
<summary>Set Fixed Subnet</summary>
Docker by default assigns dynamic subnets to bridge networks which can change when rebuilding containers and can cause firewall rules to break. To avoid this, define a fixed subnet in your `docker-compose.yml`:
## Step 1. Determine current subnet
Go to the **Container** section. Click on `immich_server` and scroll down on **General** to find the IP address.
![Container IP](../../static/img/synology-container-ip.png)
## Step 2. Add network configuration
Add the following network configuration at the end of your `docker-compose.yml` file:
```yaml
networks:
immich-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
```
If your docker container is running on a different subnet then update accordingly.
## Step 3. Add network to each service
Add the network to each service (immich-server, immich-machine-learning, redis, database):
```yaml
services:
immich-server:
# other config options
networks:
- immich-network
immich-machine-learning:
# other config options
networks:
- immich-network
redis:
# other config options
networks:
- immich-network
database:
# other config options
networks:
- immich-network
```
Save your changes. Synology will ask if you want to save changes only or rebuild containers. Select rebuild containers.
## Step 4. Update Firewall Rules, if necessary
If your firewall rules were not already set for this subnet, the firewall rules will need to be updated. See [Step 4 - Configure Firewall Settings](#step-4---configure-firewall-settings).
</details> </details>
-3
View File
@@ -56,8 +56,5 @@
}, },
"engines": { "engines": {
"node": ">=20" "node": ">=20"
},
"volta": {
"node": "24.15.0"
} }
} }
-1
View File
@@ -1 +0,0 @@
24.15.0
+2 -2
View File
@@ -4,7 +4,7 @@ services:
e2e-auth-server: e2e-auth-server:
container_name: immich-e2e-auth-server container_name: immich-e2e-auth-server
build: build:
context: ../e2e-auth-server context: ../packages/e2e-auth-server
ports: ports:
- 2286:2286 - 2286:2286
@@ -44,7 +44,7 @@ services:
redis: redis:
container_name: immich-e2e-redis container_name: immich-e2e-redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 image: docker.io/valkey/valkey:9@sha256:8436e10bc65c94886a91d4415b6a6dfa9cb5a306fb3b996e5bb67cd2b4854193
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
+15
View File
@@ -27,3 +27,18 @@ run = { task = "lint --fix" }
[tasks.check] [tasks.check]
env._.path = "./node_modules/.bin" env._.path = "./node_modules/.bin"
run = "tsc --noEmit" run = "tsc --noEmit"
[tasks.ci-setup]
depends = ["//:sdk:install", "//:sdk:build", "//cli:install", "//cli:build"]
run = { task = ":install" }
[tasks.ci-unit]
depends = ["//:sdk:install", "//:sdk:build"]
run = [
{ task = ":install" },
{ task = ":format" },
{ task = ":lint" },
{ task = ":check" },
]
-3
View File
@@ -56,8 +56,5 @@
"utimes": "^5.2.1", "utimes": "^5.2.1",
"vite-tsconfig-paths": "^6.1.1", "vite-tsconfig-paths": "^6.1.1",
"vitest": "^4.0.0" "vitest": "^4.0.0"
},
"volta": {
"node": "24.15.0"
} }
} }
@@ -2,7 +2,7 @@ import { LoginResponseDto, ManualJobName } from '@immich/sdk';
import { errorDto } from 'src/responses'; import { errorDto } from 'src/responses';
import { app, utils } from 'src/utils'; import { app, utils } from 'src/utils';
import request from 'supertest'; import request from 'supertest';
import { afterAll, beforeAll, describe, expect, it } from 'vitest'; import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'vitest';
describe('/admin/database-backups', () => { describe('/admin/database-backups', () => {
let cookie: string | undefined; let cookie: string | undefined;
@@ -13,6 +13,9 @@ describe('/admin/database-backups', () => {
admin = await utils.adminSetup({ admin = await utils.adminSetup({
onboarding: false, onboarding: false,
}); });
});
beforeEach(async () => {
await utils.resetBackups(admin.accessToken); await utils.resetBackups(admin.accessToken);
}); });
+74 -10
View File
@@ -146,7 +146,7 @@ describe('/albums', () => {
it('should not return shared albums with a deleted owner', async () => { it('should not return shared albums with a deleted owner', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/albums?shared=true') .get('/albums?isShared=true')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
@@ -188,7 +188,7 @@ describe('/albums', () => {
it('should return the album collection including owned and shared', async () => { it('should return the album collection including owned and shared', async () => {
const { status, body } = await request(app).get('/albums').set('Authorization', `Bearer ${user1.accessToken}`); const { status, body } = await request(app).get('/albums').set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(4); expect(body).toHaveLength(5);
expect(body).toEqual( expect(body).toEqual(
expect.arrayContaining([ expect.arrayContaining([
expect.objectContaining({ expect.objectContaining({
@@ -219,13 +219,20 @@ describe('/albums', () => {
]), ]),
shared: false, shared: false,
}), }),
expect.objectContaining({
albumName: user2SharedUser,
albumUsers: expect.arrayContaining([
{ role: AlbumUserRole.Owner, user: expect.objectContaining({ id: user2.userId }) },
]),
shared: true,
}),
]), ]),
); );
}); });
it('should return the album collection filtered by shared', async () => { it('should return the album collection filtered by isShared', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/albums?shared=true') .get('/albums?isShared=true')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(4); expect(body).toHaveLength(4);
@@ -263,9 +270,9 @@ describe('/albums', () => {
); );
}); });
it('should return the album collection filtered by NOT shared', async () => { it('should return the album collection filtered by NOT isShared', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/albums?shared=false') .get('/albums?isShared=false')
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(1); expect(body).toHaveLength(1);
@@ -282,6 +289,63 @@ describe('/albums', () => {
); );
}); });
it('should return only owned albums when filtered by isOwned=true', async () => {
const { status, body } = await request(app)
.get('/albums?isOwned=true')
.set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200);
expect(body).toHaveLength(4);
expect(body).toEqual(
expect.arrayContaining([
expect.objectContaining({ albumName: user1SharedEditorUser }),
expect.objectContaining({ albumName: user1SharedViewerUser }),
expect.objectContaining({ albumName: user1SharedLink }),
expect.objectContaining({ albumName: user1NotShared }),
]),
);
});
it('should return only shared-with-me albums when filtered by isOwned=false', async () => {
const { status, body } = await request(app)
.get('/albums?isOwned=false')
.set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200);
expect(body).toHaveLength(1);
expect(body).toEqual(
expect.arrayContaining([
expect.objectContaining({
albumName: user2SharedUser,
albumUsers: expect.arrayContaining([
{ role: AlbumUserRole.Owner, user: expect.objectContaining({ id: user2.userId }) },
]),
}),
]),
);
});
it('should return owned shared-out albums when filtered by isOwned=true&ishared=true', async () => {
const { status, body } = await request(app)
.get('/albums?isOwned=true&isShared=true')
.set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200);
expect(body).toHaveLength(3);
expect(body).toEqual(
expect.arrayContaining([
expect.objectContaining({ albumName: user1SharedEditorUser }),
expect.objectContaining({ albumName: user1SharedViewerUser }),
expect.objectContaining({ albumName: user1SharedLink }),
]),
);
});
it('should return empty list when filtered by isOwned=false&isShared=false', async () => {
const { status, body } = await request(app)
.get('/albums?isOwned=false&isShared=false')
.set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200);
expect(body).toHaveLength(0);
});
it('should return the album collection filtered by assetId', async () => { it('should return the album collection filtered by assetId', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/albums?assetId=${user1Asset2.id}`) .get(`/albums?assetId=${user1Asset2.id}`)
@@ -290,17 +354,17 @@ describe('/albums', () => {
expect(body).toHaveLength(2); expect(body).toHaveLength(2);
}); });
it('should return the album collection filtered by assetId and ignores shared=true', async () => { it('should return the album collection filtered by assetId and ignores isShared=true', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/albums?shared=true&assetId=${user1Asset1.id}`) .get(`/albums?isShared=true&assetId=${user1Asset1.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(5); expect(body).toHaveLength(5);
}); });
it('should return the album collection filtered by assetId and ignores shared=false', async () => { it('should return the album collection filtered by assetId and ignores isShared=false', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get(`/albums?shared=false&assetId=${user1Asset1.id}`) .get(`/albums?isShared=false&assetId=${user1Asset1.id}`)
.set('Authorization', `Bearer ${user1.accessToken}`); .set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toHaveLength(5); expect(body).toHaveLength(5);
@@ -7,7 +7,6 @@ import {
getMyUser, getMyUser,
LoginResponseDto, LoginResponseDto,
SharedLinkType, SharedLinkType,
updateConfig,
} from '@immich/sdk'; } from '@immich/sdk';
import { exiftool } from 'exiftool-vendored'; import { exiftool } from 'exiftool-vendored';
import { DateTime } from 'luxon'; import { DateTime } from 'luxon';
@@ -24,7 +23,6 @@ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
const locationAssetFilepath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`; const locationAssetFilepath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`;
const ratingAssetFilepath = `${testAssetDir}/metadata/rating/mongolels.jpg`; const ratingAssetFilepath = `${testAssetDir}/metadata/rating/mongolels.jpg`;
const facesAssetDir = `${testAssetDir}/metadata/faces`;
const readTags = async (bytes: Buffer, filename: string) => { const readTags = async (bytes: Buffer, filename: string) => {
const filepath = join(tempDir, filename); const filepath = join(tempDir, filename);
@@ -185,78 +183,6 @@ describe('/asset', () => {
}); });
}); });
describe('faces', () => {
const metadataFaceTests = [
{
description: 'without orientation',
filename: 'portrait.jpg',
},
{
description: 'adjusting face regions to orientation',
filename: 'portrait-orientation-6.jpg',
},
];
// should produce same resulting face region coordinates for any orientation
const expectedFaces = [
{
name: 'Marie Curie',
birthDate: null,
isHidden: false,
faces: [
{
imageHeight: 700,
imageWidth: 840,
boundingBoxX1: 261,
boundingBoxX2: 356,
boundingBoxY1: 146,
boundingBoxY2: 284,
sourceType: 'exif',
},
],
},
{
name: 'Pierre Curie',
birthDate: null,
isHidden: false,
faces: [
{
imageHeight: 700,
imageWidth: 840,
boundingBoxX1: 536,
boundingBoxX2: 618,
boundingBoxY1: 83,
boundingBoxY2: 252,
sourceType: 'exif',
},
],
},
];
it.each(metadataFaceTests)('should get the asset faces from $filename $description', async ({ filename }) => {
const config = await utils.getSystemConfig(admin.accessToken);
config.metadata.faces.import = true;
await updateConfig({ systemConfigDto: config }, { headers: asBearerAuth(admin.accessToken) });
const facesAsset = await utils.createAsset(admin.accessToken, {
assetData: {
filename,
bytes: await readFile(`${facesAssetDir}/${filename}`),
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: facesAsset.id });
const { status, body } = await request(app)
.get(`/assets/${facesAsset.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
expect(body.id).toEqual(facesAsset.id);
const sortedPeople = body.people.toSorted((a: any, b: any) => a.name.localeCompare(b.name));
expect(sortedPeople).toMatchObject(expectedFaces);
});
});
it('should work with a shared link', async () => { it('should work with a shared link', async () => {
const sharedLink = await utils.createSharedLink(user1.accessToken, { const sharedLink = await utils.createSharedLink(user1.accessToken, {
type: SharedLinkType.Individual, type: SharedLinkType.Individual,
+12 -1
View File
@@ -441,7 +441,18 @@ describe('/search', () => {
.get('/search/explore') .get('/search/explore')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toEqual([{ fieldName: 'exifInfo.city', items: [] }]); expect(Array.isArray(body)).toBe(true);
expect(body).toEqual(expect.arrayContaining([{ fieldName: 'exifInfo.city', items: [] }]));
expect(body).toEqual(
expect.arrayContaining([
{
fieldName: 'createdAt',
items: expect.arrayContaining([
expect.objectContaining({ data: expect.objectContaining({ id: assetLast.id }) }),
]),
},
]),
);
}); });
}); });
+1 -1
View File
@@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs';
import { immichCli } from 'src/utils'; import { immichCli } from 'src/utils';
import { describe, expect, it } from 'vitest'; import { describe, expect, it } from 'vitest';
const pkg = JSON.parse(readFileSync('../cli/package.json', 'utf8')); const pkg = JSON.parse(readFileSync('../packages/cli/package.json', 'utf8'));
describe(`immich --version`, () => { describe(`immich --version`, () => {
describe('immich --version', () => { describe('immich --version', () => {
@@ -28,6 +28,7 @@ export function toColumnarFormat(assets: MockTimelineAsset[]): TimeBucketAssetRe
ownerId: [], ownerId: [],
ratio: [], ratio: [],
thumbhash: [], thumbhash: [],
createdAt: [],
fileCreatedAt: [], fileCreatedAt: [],
localOffsetHours: [], localOffsetHours: [],
isFavorite: [], isFavorite: [],
@@ -338,7 +339,6 @@ export function toAssetResponseDto(asset: MockTimelineAsset, owner?: UserRespons
livePhotoVideoId: asset.livePhotoVideoId, livePhotoVideoId: asset.livePhotoVideoId,
tags: [], tags: [],
people: [], people: [],
unassignedFaces: [],
stack: asset.stack, stack: asset.stack,
isOffline: false, isOffline: false,
hasMetadata: true, hasMetadata: true,
+2 -1
View File
@@ -240,7 +240,8 @@ export const setupBaseMockApiRoutes = async (context: BrowserContext, adminUserI
}); });
}); });
await context.route('**/api/albums*', async (route, request) => { await context.route('**/api/albums*', async (route, request) => {
if (request.url().endsWith('albums?shared=true') || request.url().endsWith('albums')) { const url = request.url();
if (url.endsWith('albums?isShared=true') || url.endsWith('albums?isOwned=true') || url.endsWith('albums')) {
return route.fulfill({ return route.fulfill({
status: 200, status: 200,
contentType: 'application/json', contentType: 'application/json',
@@ -66,7 +66,6 @@ export const createMockStackAsset = (ownerId: string): AssetResponseDto => {
livePhotoVideoId: null, livePhotoVideoId: null,
tags: [], tags: [],
people: [], people: [],
unassignedFaces: [],
stack: undefined, stack: undefined,
isOffline: false, isOffline: false,
hasMetadata: true, hasMetadata: true,
+3 -1
View File
@@ -90,7 +90,7 @@ export const tempDir = tmpdir();
export const asBearerAuth = (accessToken: string) => ({ Authorization: `Bearer ${accessToken}` }); export const asBearerAuth = (accessToken: string) => ({ Authorization: `Bearer ${accessToken}` });
export const asKeyAuth = (key: string) => ({ 'x-api-key': key }); export const asKeyAuth = (key: string) => ({ 'x-api-key': key });
export const immichCli = (args: string[]) => export const immichCli = (args: string[]) =>
executeCommand('pnpm', ['exec', 'immich', '-d', `/${tempDir}/immich/`, ...args], { cwd: '../cli' }).promise; executeCommand('pnpm', ['exec', 'immich', '-d', `/${tempDir}/immich/`, ...args], { cwd: '../packages/cli' }).promise;
export const dockerExec = (args: string[]) => export const dockerExec = (args: string[]) =>
executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', args.join(' ')]); executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', args.join(' ')]);
export const immichAdmin = (args: string[]) => dockerExec([`immich-admin ${args.join(' ')}`]); export const immichAdmin = (args: string[]) => dockerExec([`immich-admin ${args.join(' ')}`]);
@@ -568,6 +568,8 @@ export const utils = {
name: ManualJobName.BackupDatabase, name: ManualJobName.BackupDatabase,
}); });
await utils.waitForQueueFinish(accessToken, 'backupDatabase');
return utils.poll( return utils.poll(
() => request(app).get('/admin/database-backups').set('Authorization', `Bearer ${accessToken}`), () => request(app).get('/admin/database-backups').set('Authorization', `Bearer ${accessToken}`),
({ status, body }) => status === 200 && body.backups.length === 1, ({ status, body }) => status === 200 && body.backups.length === 1,
+15
View File
@@ -5,8 +5,10 @@
"acknowledge": "Neem kennis", "acknowledge": "Neem kennis",
"action": "Aksie", "action": "Aksie",
"action_common_update": "Werk by", "action_common_update": "Werk by",
"action_description": "n Stel van aksies om op die gefiltreerde bates uit te voer",
"actions": "Aksies", "actions": "Aksies",
"active": "Aktief", "active": "Aktief",
"active_count": "Aktief: {count}",
"activity": "Aktiwiteite", "activity": "Aktiwiteite",
"activity_changed": "Aktiwiteit is {enabled, select, true {geaktiveer} other {gedeaktiveer}}", "activity_changed": "Aktiwiteit is {enabled, select, true {geaktiveer} other {gedeaktiveer}}",
"add": "Voeg toe", "add": "Voeg toe",
@@ -14,9 +16,14 @@
"add_a_location": "Voeg n ligging toe", "add_a_location": "Voeg n ligging toe",
"add_a_name": "Voeg n naam toe", "add_a_name": "Voeg n naam toe",
"add_a_title": "Voeg n titel toe", "add_a_title": "Voeg n titel toe",
"add_action": "Voeg aksie toe",
"add_action_description": "Klik om n aksie toe te voeg om uit te voer",
"add_assets": "Voeg bates by",
"add_birthday": "Voeg n verjaarsdag toe", "add_birthday": "Voeg n verjaarsdag toe",
"add_endpoint": "Voeg eindpunt toe", "add_endpoint": "Voeg eindpunt toe",
"add_exclusion_pattern": "Voeg uitsluitingspatroon toe", "add_exclusion_pattern": "Voeg uitsluitingspatroon toe",
"add_filter": "Voeg filter by",
"add_filter_description": "Klik om n filtervoorwaarde toe te voeg",
"add_location": "Voeg ligging toe", "add_location": "Voeg ligging toe",
"add_more_users": "Voeg meer gebruikers toe", "add_more_users": "Voeg meer gebruikers toe",
"add_partner": "Voeg vennoot toe", "add_partner": "Voeg vennoot toe",
@@ -27,9 +34,13 @@
"add_to_album": "Voeg toe tot album", "add_to_album": "Voeg toe tot album",
"add_to_album_bottom_sheet_added": "Tot {album} toegevoeg", "add_to_album_bottom_sheet_added": "Tot {album} toegevoeg",
"add_to_album_bottom_sheet_already_exists": "Reeds in {album}", "add_to_album_bottom_sheet_already_exists": "Reeds in {album}",
"add_to_album_bottom_sheet_some_local_assets": "Sommige plaaslike bates kon nie toe gevoeg word tot die album nie",
"add_to_album_toggle": "Wissel seleksie vir {album}",
"add_to_albums": "Voeg toe tot albums", "add_to_albums": "Voeg toe tot albums",
"add_to_albums_count": "Voeg toe tot albums ({count})", "add_to_albums_count": "Voeg toe tot albums ({count})",
"add_to_bottom_bar": "Voeg toe",
"add_to_shared_album": "Voeg toe tot gedeelde album", "add_to_shared_album": "Voeg toe tot gedeelde album",
"add_upload_to_stack": "Voeg oplaai by stapel",
"add_url": "Voeg bronadres toe", "add_url": "Voeg bronadres toe",
"added_to_archive": "Tot argief toegevoeg", "added_to_archive": "Tot argief toegevoeg",
"added_to_favorites": "Tot gunstelinge toegevoeg", "added_to_favorites": "Tot gunstelinge toegevoeg",
@@ -46,6 +57,7 @@
"backup_database": "Skep Databasisstortlêer", "backup_database": "Skep Databasisstortlêer",
"backup_database_enable_description": "Aktiveer databasisstortlêers", "backup_database_enable_description": "Aktiveer databasisstortlêers",
"backup_keep_last_amount": "Aantal vorige stortlêers om te hou", "backup_keep_last_amount": "Aantal vorige stortlêers om te hou",
"backup_onboarding_2_description": "plaaslike kopieë op verskillende toestelle. Dit sluit die hooflêers en n rugsteun van daardie lêers plaaslik in.",
"backup_onboarding_3_description": "totale kopieë van u data, insluitend die oorspronklike lêers. Dit sluit 1 kopie op n ander perseel en 2 lokale kopieë in.", "backup_onboarding_3_description": "totale kopieë van u data, insluitend die oorspronklike lêers. Dit sluit 1 kopie op n ander perseel en 2 lokale kopieë in.",
"backup_onboarding_description": "n <backblaze-link>3-2-1-rugsteunstrategie</backblaze-link> word sterk aanbeveel om u data veilig te hou. Hou kopieë van u fotos/videos sowel as die Immich-databasis vir n volledige rugsteunoplossing.", "backup_onboarding_description": "n <backblaze-link>3-2-1-rugsteunstrategie</backblaze-link> word sterk aanbeveel om u data veilig te hou. Hou kopieë van u fotos/videos sowel as die Immich-databasis vir n volledige rugsteunoplossing.",
"backup_onboarding_footer": "Lees hierdie <link>dokument</link> vir meer inligting oor hoe om n rugsteunkopie van Immich te maak.", "backup_onboarding_footer": "Lees hierdie <link>dokument</link> vir meer inligting oor hoe om n rugsteunkopie van Immich te maak.",
@@ -61,6 +73,7 @@
"confirm_reprocess_all_faces": "Is u seker u wil alle gesigte herverwerk? Dit sal ook genoemde mense skoonmaak.", "confirm_reprocess_all_faces": "Is u seker u wil alle gesigte herverwerk? Dit sal ook genoemde mense skoonmaak.",
"confirm_user_password_reset": "Is u seker u wil {user} se wagwoord terugstel?", "confirm_user_password_reset": "Is u seker u wil {user} se wagwoord terugstel?",
"confirm_user_pin_code_reset": "Is u seker u wil {user} se PIN-kode herstel?", "confirm_user_pin_code_reset": "Is u seker u wil {user} se PIN-kode herstel?",
"copy_config_to_clipboard_description": "Kopieer die huidige stelselkonfigurasie as n JSONobjek na die klipbord",
"create_job": "Skep taak", "create_job": "Skep taak",
"cron_expression": "Cron-uitdrukking", "cron_expression": "Cron-uitdrukking",
"cron_expression_description": "Stel die skanderingsinterval in met die cron-formaat. Kyk gerus na bv. <link>Crontab Guru</link> vir meer inligting", "cron_expression_description": "Stel die skanderingsinterval in met die cron-formaat. Kyk gerus na bv. <link>Crontab Guru</link> vir meer inligting",
@@ -68,6 +81,8 @@
"disable_login": "Deaktiveer aantekening", "disable_login": "Deaktiveer aantekening",
"duplicate_detection_job_description": "Begin masjienleer op items om soortgelyke beelde op te spoor. Maak staat op Slimsoek", "duplicate_detection_job_description": "Begin masjienleer op items om soortgelyke beelde op te spoor. Maak staat op Slimsoek",
"exclusion_pattern_description": "Met uitsluitingspatrone kan u lêers en vouers ignoreer wanneer u u biblioteek skandeer. Dit is nuttig as u vouers het wat lêers bevat wat u nie wil invoer nie, soos RAW-lêers.", "exclusion_pattern_description": "Met uitsluitingspatrone kan u lêers en vouers ignoreer wanneer u u biblioteek skandeer. Dit is nuttig as u vouers het wat lêers bevat wat u nie wil invoer nie, soos RAW-lêers.",
"export_config_as_json_description": "Laai die huidige stelselkonfigurasie af as n JSONlêer",
"external_libraries_page_description": "Admin eksterne biblioteekbladsy",
"face_detection": "Gesigherkenning", "face_detection": "Gesigherkenning",
"face_detection_description": "Identifiseer die gesigte in media d.m.v. masjienleer. Vir videos word slegs die duimnael oorweeg. “Herlaai” (ver)werk al die media weer. “Stel terug” verwyder alle huidige gesigdata. “Onverwerk” plaas items in die ry wat nog nie verwerk is nie. Geïdentifiseerde gesigte sal ná voltooiing van Gesigidentifikasie vir Gesigherkenning in die ry geplaas word om hulle in bestaande of nuwe persone te groepeer.", "face_detection_description": "Identifiseer die gesigte in media d.m.v. masjienleer. Vir videos word slegs die duimnael oorweeg. “Herlaai” (ver)werk al die media weer. “Stel terug” verwyder alle huidige gesigdata. “Onverwerk” plaas items in die ry wat nog nie verwerk is nie. Geïdentifiseerde gesigte sal ná voltooiing van Gesigidentifikasie vir Gesigherkenning in die ry geplaas word om hulle in bestaande of nuwe persone te groepeer.",
"facial_recognition_job_description": "Groepeer gesigte in mense. Die stap is vinniger nadat Gesigherkenning klaar is. “Herstel” (her-)groepeer alle gesigte. “Vermiste” plaas gesigte in ry wat nie n persoon gekoppel het nie.", "facial_recognition_job_description": "Groepeer gesigte in mense. Die stap is vinniger nadat Gesigherkenning klaar is. “Herstel” (her-)groepeer alle gesigte. “Vermiste” plaas gesigte in ry wat nie n persoon gekoppel het nie.",
+13 -7
View File
@@ -61,8 +61,8 @@
"backup_onboarding_1_description": "نسخة خارج الموقع في موقع آخر.", "backup_onboarding_1_description": "نسخة خارج الموقع في موقع آخر.",
"backup_onboarding_2_description": "نسخ محلية على أجهزة مختلفة. يشمل ذلك الملفات الرئيسية ونسخة احتياطية محلية منها.", "backup_onboarding_2_description": "نسخ محلية على أجهزة مختلفة. يشمل ذلك الملفات الرئيسية ونسخة احتياطية محلية منها.",
"backup_onboarding_3_description": "إجمالي نُسخ بياناتك، بما في ذلك الملفات الأصلية. يشمل ذلك نسخةً واحدةً خارج الموقع ونسختين محليتين.", "backup_onboarding_3_description": "إجمالي نُسخ بياناتك، بما في ذلك الملفات الأصلية. يشمل ذلك نسخةً واحدةً خارج الموقع ونسختين محليتين.",
"backup_onboarding_description": "يُنصح باتباع <backblaze-link>استراتيجية النسخ الاحتياطي 3-2- 1</backblaze-link> لحماية بياناتك. احتفظ بنسخ احتياطية من صورك/فيديوهاتك المحمّلة، بالإضافة إلى قاعدة بيانات Immich، لضمان حل نسخ احتياطي شامل.", "backup_onboarding_description": "يُنصح باتباع <backblaze-link>استراتيجية النسخ الاحتياطي 3-2-1</backblaze-link> لحماية بياناتك. يجب عليك الاحتفاظ بنسخ من الصور والفيديوهات المرفوعة، بالإضافة إلى قاعدة بيانات Immich لضمان حل نسخ احتياطي شامل.",
"backup_onboarding_footer": "لمزيد من المعلومات حول النسخ الاحتياطي لـ <link>Immich</link>، يرجى الرجوع إلى <link>الوثائق</link>.", "backup_onboarding_footer": "لمزيد من المعلومات حول النسخ الاحتياطي لـ Immich، يرجى الرجوع إلى <link>الوثائق</link>.",
"backup_onboarding_parts_title": "يتضمن النسخ الاحتياطي 3-2-1 ما يلي:", "backup_onboarding_parts_title": "يتضمن النسخ الاحتياطي 3-2-1 ما يلي:",
"backup_onboarding_title": "النسخ الاحتياطية", "backup_onboarding_title": "النسخ الاحتياطية",
"backup_settings": "إعدادات تفريغ قاعدة البيانات", "backup_settings": "إعدادات تفريغ قاعدة البيانات",
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "تفعيل إشعارات البريد الإلكتروني", "notification_enable_email_notifications": "تفعيل إشعارات البريد الإلكتروني",
"notification_settings": "إعدادات الإشعارات", "notification_settings": "إعدادات الإشعارات",
"notification_settings_description": "إدارة إعدادات الإشعارات، بما في ذلك البريد الإلكتروني", "notification_settings_description": "إدارة إعدادات الإشعارات، بما في ذلك البريد الإلكتروني",
"oauth_allow_insecure_requests": "السماح بالطلبات الغير الآمنة",
"oauth_allow_insecure_requests_description": "تحذير: هذا يعطل التحقق من صحة شهادة أمن طبقة النقل لطلبات الترخيص المفتوح وقد يعرضك الهجمات الوسطية.",
"oauth_auto_launch": "التشغيل التلقائي", "oauth_auto_launch": "التشغيل التلقائي",
"oauth_auto_launch_description": "ابدأ تدفق تسجيل الدخول OAuth تلقائيًا عند الانتقال إلى صفحة تسجيل الدخول", "oauth_auto_launch_description": "ابدأ تدفق تسجيل الدخول OAuth تلقائيًا عند الانتقال إلى صفحة تسجيل الدخول",
"oauth_auto_register": "التسجيل التلقائي", "oauth_auto_register": "التسجيل التلقائي",
@@ -274,6 +276,7 @@
"oauth_button_text": "نص الزر", "oauth_button_text": "نص الزر",
"oauth_client_secret_description": "مطلوب للعميل السري، او اذا PKCE(مفتاح الاثبات لتبادل الكود) ليس مدعوم من العميل العام.", "oauth_client_secret_description": "مطلوب للعميل السري، او اذا PKCE(مفتاح الاثبات لتبادل الكود) ليس مدعوم من العميل العام.",
"oauth_enable_description": "تسجيل الدخول باستخدام OAuth", "oauth_enable_description": "تسجيل الدخول باستخدام OAuth",
"oauth_end_session_url_description": "إعادة توجيه المستخدم إلى معرف الموارد الموحد (URI) هذا عند تسجيل الخروج.",
"oauth_mobile_redirect_uri": "عنوان URI لإعادة التوجيه على الهاتف", "oauth_mobile_redirect_uri": "عنوان URI لإعادة التوجيه على الهاتف",
"oauth_mobile_redirect_uri_override": "تجاوز عنوان URI لإعادة التوجيه على الهاتف", "oauth_mobile_redirect_uri_override": "تجاوز عنوان URI لإعادة التوجيه على الهاتف",
"oauth_mobile_redirect_uri_override_description": "قم بتفعيله عندما لا يسمح موفر OAuth بمعرف URI للجوال، مثل ''{callback}''", "oauth_mobile_redirect_uri_override_description": "قم بتفعيله عندما لا يسمح موفر OAuth بمعرف URI للجوال، مثل ''{callback}''",
@@ -333,7 +336,7 @@
"storage_template_migration_description": "قم بتطبيق القالب الحالي <link>{template}</link> على المحتويات التي تم رفعها سابقًا", "storage_template_migration_description": "قم بتطبيق القالب الحالي <link>{template}</link> على المحتويات التي تم رفعها سابقًا",
"storage_template_migration_info": "تغييرات النموذج الخزني ستغير جميع الصيغ الى احرف صغيرة. تغييرات النموذج ستنطبق فقط على المحتويات الجديدة. لتطبيق النموذج على المحتويات التي تم رفعها سابقًا، قم بتشغيل <link>{job}</link>.", "storage_template_migration_info": "تغييرات النموذج الخزني ستغير جميع الصيغ الى احرف صغيرة. تغييرات النموذج ستنطبق فقط على المحتويات الجديدة. لتطبيق النموذج على المحتويات التي تم رفعها سابقًا، قم بتشغيل <link>{job}</link>.",
"storage_template_migration_job": "وظيفة تهجير قالب التخزين", "storage_template_migration_job": "وظيفة تهجير قالب التخزين",
"storage_template_more_details": "لمزيد من التفاصيل حول هذه الميزة، يرجى الرجوع إلى <template-link>Storage Template</template-link> و <implications-link>implications</implications-link>.", "storage_template_more_details": "لمزيد من التفاصيل حول هذه الميزة، يرجى الرجوع إلى <template-link>Storage Template</template-link> و <implications-link>implications</implications-link>",
"storage_template_onboarding_description_v2": "عند التفعيل. هذه الخاصية ستقوم بالترتيب التلقائي للملفات بناء على نموذج معرف من قبل المستخدم. رجاء اطلع على <link>التوثيق</link>.", "storage_template_onboarding_description_v2": "عند التفعيل. هذه الخاصية ستقوم بالترتيب التلقائي للملفات بناء على نموذج معرف من قبل المستخدم. رجاء اطلع على <link>التوثيق</link>.",
"storage_template_path_length": "الحد التقريبي لطول المسار: <b>{length, number}</b>/{limit, number}", "storage_template_path_length": "الحد التقريبي لطول المسار: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "قالب التخزين", "storage_template_settings": "قالب التخزين",
@@ -881,15 +884,12 @@
"cutoff_date_description": "احتفظ بالصور من آخر…", "cutoff_date_description": "احتفظ بالصور من آخر…",
"cutoff_day": "{count, plural, one {يوم} other {ايام}}", "cutoff_day": "{count, plural, one {يوم} other {ايام}}",
"cutoff_year": "{count, plural, one {سنة} other {سنوات}}", "cutoff_year": "{count, plural, one {سنة} other {سنوات}}",
"daily_title_text_date": "E ، MMM DD",
"daily_title_text_date_year": "E ، MMM DD ، yyyy",
"dark": "معتم", "dark": "معتم",
"dark_theme": "تبديل المظهر إلى الداكن", "dark_theme": "تبديل المظهر إلى الداكن",
"date": "تاريخ", "date": "تاريخ",
"date_after": "التارخ بعد", "date_after": "التارخ بعد",
"date_and_time": "التاريخ و الوقت", "date_and_time": "التاريخ و الوقت",
"date_before": "التاريخ قبل", "date_before": "التاريخ قبل",
"date_format": "E ، Lll D ، Y • H: MM A",
"date_of_birth_saved": "تم حفظ تاريخ الميلاد بنجاح", "date_of_birth_saved": "تم حفظ تاريخ الميلاد بنجاح",
"date_range": "نطاق الموعد", "date_range": "نطاق الموعد",
"day": "يوم", "day": "يوم",
@@ -1392,6 +1392,7 @@
"light_theme": "التبديل إلى المظهر الفاتح", "light_theme": "التبديل إلى المظهر الفاتح",
"like": "اعجاب", "like": "اعجاب",
"like_deleted": "تم حذف الإعجاب", "like_deleted": "تم حذف الإعجاب",
"link": "رابط",
"link_motion_video": "رابط فيديو الحركة", "link_motion_video": "رابط فيديو الحركة",
"link_to_docs": "لمزيد من المعلومات، يُرجى الرجوع إلى <link>الوثائق</link>.", "link_to_docs": "لمزيد من المعلومات، يُرجى الرجوع إلى <link>الوثائق</link>.",
"link_to_oauth": "الربط مع OAuth", "link_to_oauth": "الربط مع OAuth",
@@ -1544,7 +1545,6 @@
"mobile_app_download_onboarding_note": "قم بتنزيل التطبيق المصاحب للهاتف المحمول باستخدام الخيارات التالية", "mobile_app_download_onboarding_note": "قم بتنزيل التطبيق المصاحب للهاتف المحمول باستخدام الخيارات التالية",
"model": "نموذج", "model": "نموذج",
"month": "شهر", "month": "شهر",
"monthly_title_text_date_format": "ط ط ط",
"more": "المزيد", "more": "المزيد",
"move": "تحريك", "move": "تحريك",
"move_down": "انزل الى الاسفل", "move_down": "انزل الى الاسفل",
@@ -1562,6 +1562,8 @@
"multiselect_grid_edit_gps_err_read_only": "لا يمكن تعديل موقع الأصول (المواد) للقراءة فقط، سوف يتخطى", "multiselect_grid_edit_gps_err_read_only": "لا يمكن تعديل موقع الأصول (المواد) للقراءة فقط، سوف يتخطى",
"mute_memories": "كتم الذكريات", "mute_memories": "كتم الذكريات",
"my_albums": "ألبوماتي", "my_albums": "ألبوماتي",
"my_immich_description": "نسخ الصفحة الحالية كرابط Immich الخاص بي",
"my_immich_title": "رابط Immich الخاص بي",
"name": "الاسم", "name": "الاسم",
"name_or_nickname": "الاسم أو اللقب", "name_or_nickname": "الاسم أو اللقب",
"name_required": "الاسم مطلوب", "name_required": "الاسم مطلوب",
@@ -1926,6 +1928,8 @@
"scan_settings": "إعدادات الفحص", "scan_settings": "إعدادات الفحص",
"scanning": "جاري البحث", "scanning": "جاري البحث",
"scanning_for_album": "جارٍ الفحص عن ألبوم...", "scanning_for_album": "جارٍ الفحص عن ألبوم...",
"screencast_mode_description": "إظهار مؤشرات أحداث لوحة المفاتيح والماوس على الشاشة",
"screencast_mode_title": "تبديل وضع تسجيل الشاشة",
"search": "البحث", "search": "البحث",
"search_albums": "البحث في الألبومات", "search_albums": "البحث في الألبومات",
"search_by_context": "البحث حسب السياق", "search_by_context": "البحث حسب السياق",
@@ -2214,6 +2218,8 @@
"sync_status": "حالة النسخ المتزامن", "sync_status": "حالة النسخ المتزامن",
"sync_status_subtitle": "عرض وإدارة نظام النسخ المتزامن", "sync_status_subtitle": "عرض وإدارة نظام النسخ المتزامن",
"sync_upload_album_setting_subtitle": "انشئ و ارفع صورك و فديوهاتك الالبومات المختارة في Immich", "sync_upload_album_setting_subtitle": "انشئ و ارفع صورك و فديوهاتك الالبومات المختارة في Immich",
"system_theme": "سمة النظام",
"system_theme_command_description": "استعمل سمة النظام ({value})",
"tag": "العلامة", "tag": "العلامة",
"tag_assets": "أصول العلامة", "tag_assets": "أصول العلامة",
"tag_created": "تم إنشاء العلامة: {tag}", "tag_created": "تم إنشاء العلامة: {tag}",
+27 -2
View File
@@ -5,6 +5,7 @@
"acknowledge": "Təsdiq et", "acknowledge": "Təsdiq et",
"action": "Əməliyyat", "action": "Əməliyyat",
"action_common_update": "Yenilə", "action_common_update": "Yenilə",
"action_description": "Filtrlənmiş aktivliklər üzərində yerinə yetiriləcək əməliyyatlar toplusu",
"actions": "Əməliyyatlar", "actions": "Əməliyyatlar",
"active": "Aktiv", "active": "Aktiv",
"active_count": "Aktiv: {count}", "active_count": "Aktiv: {count}",
@@ -15,9 +16,14 @@
"add_a_location": "Məkan əlavə et", "add_a_location": "Məkan əlavə et",
"add_a_name": "Ad əlavə et", "add_a_name": "Ad əlavə et",
"add_a_title": "Başlıq əlavə et", "add_a_title": "Başlıq əlavə et",
"add_action": "Yeni əməliyyat əlavə et",
"add_action_description": "Əməliyyat əlavə etmək üçün klikləyin",
"add_assets": "Aktivlik əlavə et",
"add_birthday": "Doğum günü əlavə et", "add_birthday": "Doğum günü əlavə et",
"add_endpoint": "Son nöqtə əlavə et", "add_endpoint": "Son nöqtə əlavə et",
"add_exclusion_pattern": "Çıxarma nümunəsi əlavə et", "add_exclusion_pattern": "Çıxarma nümunəsi əlavə et",
"add_filter": "Filter əlavə et",
"add_filter_description": "Filtr şərti əlavə etmək üçün klik edin",
"add_location": "Məkan əlavə et", "add_location": "Məkan əlavə et",
"add_more_users": "Daha çox istifadəçi əlavə et", "add_more_users": "Daha çox istifadəçi əlavə et",
"add_partner": "Partnyor əlavə et", "add_partner": "Partnyor əlavə et",
@@ -36,6 +42,7 @@
"add_to_shared_album": "Paylaşılan alboma əlavə et", "add_to_shared_album": "Paylaşılan alboma əlavə et",
"add_upload_to_stack": "Yeni yüklənmə əlavə et", "add_upload_to_stack": "Yeni yüklənmə əlavə et",
"add_url": "URL əlavə et", "add_url": "URL əlavə et",
"add_workflow_step": "İş axını addımı əlavə et",
"added_to_archive": "Arxivə əlavə edildi", "added_to_archive": "Arxivə əlavə edildi",
"added_to_favorites": "Sevimlilələrə əlavə edildi", "added_to_favorites": "Sevimlilələrə əlavə edildi",
"added_to_favorites_count": "{count, number} şəkil sevimlilələrə əlavə edildi", "added_to_favorites_count": "{count, number} şəkil sevimlilələrə əlavə edildi",
@@ -46,7 +53,7 @@
"authentication_settings": "Səlahiyyətləndirmə parametrləri", "authentication_settings": "Səlahiyyətləndirmə parametrləri",
"authentication_settings_description": "Şifrə, OAuth və digər səlahiyyətləndirmə parametrləri", "authentication_settings_description": "Şifrə, OAuth və digər səlahiyyətləndirmə parametrləri",
"authentication_settings_disable_all": "Bütün giriş etmə metodlarını söndürmək istədiyinizdən əminsinizmi? Giriş etmə funksiyası tamamilə söndürüləcəkdir.", "authentication_settings_disable_all": "Bütün giriş etmə metodlarını söndürmək istədiyinizdən əminsinizmi? Giriş etmə funksiyası tamamilə söndürüləcəkdir.",
"authentication_settings_reenable": "Yenidən aktiv etmək üçün <link> Server Əmri</link> -ni istifadə edin.", "authentication_settings_reenable": "Yenidən aktiv etmək üçün <link> Server Əmri</link>-ni istifadə edin.",
"background_task_job": "Arxa plan tapşırıqları", "background_task_job": "Arxa plan tapşırıqları",
"backup_database": "Verilənlər bazasının dump-ını yaradın", "backup_database": "Verilənlər bazasının dump-ını yaradın",
"backup_database_enable_description": "Verilənlər bazasının artıq nüsxələrini aktiv et", "backup_database_enable_description": "Verilənlər bazasının artıq nüsxələrini aktiv et",
@@ -54,6 +61,7 @@
"backup_onboarding_1_description": "buludda və ya başqa fiziki yerdə saytdan kənar surət.", "backup_onboarding_1_description": "buludda və ya başqa fiziki yerdə saytdan kənar surət.",
"backup_onboarding_2_description": "müxtəlif cihazlarda yerli nüsxələr. Bura əsas fayllar və həmin faylların ehtiyat lokal nüsxəsi daxildir.", "backup_onboarding_2_description": "müxtəlif cihazlarda yerli nüsxələr. Bura əsas fayllar və həmin faylların ehtiyat lokal nüsxəsi daxildir.",
"backup_onboarding_3_description": "orijinal fayllar da daxil olmaqla məlumatlarınızın ümumi surətləri. Buraya 1 kənar nüsxə və 2 lokal nüsxə daxildir.", "backup_onboarding_3_description": "orijinal fayllar da daxil olmaqla məlumatlarınızın ümumi surətləri. Buraya 1 kənar nüsxə və 2 lokal nüsxə daxildir.",
"backup_onboarding_description": "<backblaze-link>3-2-1 yedəkləmə strategiyası</backblaze-link> məlumatlarınızı qorumaq üçün tövsiyə olunur. Yüklədiyiniz şəkil və videoların, həmçinin Immich verilənlər bazasının surətlərini saxlamalısınız ki, hərtərəfli yedəkləmə həlli əldə edəsiniz.",
"backup_onboarding_footer": "Immich-in ehtiyat nüsxəsini çıxarmaq haqqında ətraflı məlumat üçün <link>sənədlərə</link> müraciət edin.", "backup_onboarding_footer": "Immich-in ehtiyat nüsxəsini çıxarmaq haqqında ətraflı məlumat üçün <link>sənədlərə</link> müraciət edin.",
"backup_onboarding_parts_title": "3-2-1 ehtiyat nüsxəsinə aşağıdakılar daxildir:", "backup_onboarding_parts_title": "3-2-1 ehtiyat nüsxəsinə aşağıdakılar daxildir:",
"backup_onboarding_title": "Ehtiyat surətlər", "backup_onboarding_title": "Ehtiyat surətlər",
@@ -61,14 +69,31 @@
"backup_settings_description": "Verilənlər bazasının ehtiyat nüsxə parametrlərini idarə et", "backup_settings_description": "Verilənlər bazasının ehtiyat nüsxə parametrlərini idarə et",
"cleared_jobs": "{job} üçün tapşırıqlar silindi", "cleared_jobs": "{job} üçün tapşırıqlar silindi",
"config_set_by_file": "Konfiqurasiya hal-hazırda konfiqurasiya faylı ilə təyin olunub", "config_set_by_file": "Konfiqurasiya hal-hazırda konfiqurasiya faylı ilə təyin olunub",
"confirm_delete_library": "{library} kitabxanasını silmək istədiyinizdən əminmisiniz?", "confirm_delete_library": "{library} kitabxanasını silmək istədiyinizə əminmisiniz?",
"confirm_email_below": "Təsdiqləmək üçün aşağıya {email} yazın", "confirm_email_below": "Təsdiqləmək üçün aşağıya {email} yazın",
"confirm_reprocess_all_faces": "Bütün üzləri yenidən emal etmək istədiyinizə əminsiniz? Bu, həmçinin adlandırılmış şəxsləri siləcək.",
"confirm_user_password_reset": "{user} adlı istifadəçinin şifrəsini sıfırlamaq istədiyinizdən əminmisiniz?", "confirm_user_password_reset": "{user} adlı istifadəçinin şifrəsini sıfırlamaq istədiyinizdən əminmisiniz?",
"confirm_user_pin_code_reset": "{user} istifadəçisinin PIN kodunu sıfırlamaq istədiyinizə əminsiniz?",
"copy_config_to_clipboard_description": "Cari sistem konfiqurasiyasını JSON obyekt kimi mübadilə buferinə kopyalayın",
"create_job": "İş yarat",
"cron_expression": "Cron ifadəsi",
"cron_expression_description": "Cron formatından istifadə edərək skan intervalını təyin edin. Ətraflı məlumat üçün nümunələrə baxa bilərsiniz. <link>Crontab Guru</link>",
"cron_expression_presets": "Cron ifadəsi ön ayarları",
"disable_login": "Giriş etməni söndür", "disable_login": "Giriş etməni söndür",
"duplicate_detection_job_description": "Bənzər şəkilləri tapmaq üçün maşın öyrənməsini işə salın. Bu prosses Smart Search funksiyasına əsaslanır", "duplicate_detection_job_description": "Bənzər şəkilləri tapmaq üçün maşın öyrənməsini işə salın. Bu prosses Smart Search funksiyasına əsaslanır",
"exclusion_pattern_description": "İstisna nümunələri kitabxananızı skan edərkən faylları və qovluqları nəzərə almamağa imkan verir. Bu, RAW faylları kimi idxal etmək istəmədiyiniz faylları olan qovluqlarınız olduqda faydalıdır.",
"export_config_as_json_description": "Cari sistem konfiqurasiyasını JSON faylı kimi endirin",
"external_libraries_page_description": "Admin xarici kitabxana səhifəsi",
"face_detection": "Üz tanıma", "face_detection": "Üz tanıma",
"failed_job_command": "{command} əmri {job} işi üçün uğursuz oldu",
"force_delete_user_warning": "XƏBƏRDARLIQ: Bu əməliyyat istifadəçi və bütün məlumatları siləcəkdir. Bu prossesi və silinən faylları geri qaytarmaq olmaz.", "force_delete_user_warning": "XƏBƏRDARLIQ: Bu əməliyyat istifadəçi və bütün məlumatları siləcəkdir. Bu prossesi və silinən faylları geri qaytarmaq olmaz.",
"image_format": "Format",
"image_format_description": "WebP, JPEG faylına görə daha kiçik həcmə sahibdir, lakin onu kodlaşdırmaq daha çox vaxt alır.", "image_format_description": "WebP, JPEG faylına görə daha kiçik həcmə sahibdir, lakin onu kodlaşdırmaq daha çox vaxt alır.",
"image_fullsize_description": "Böyüdülmüş halda istifadə edilən, metadata-sı silinmiş tam ölçülü şəkil",
"image_fullsize_enabled": "Tam ölçülü şəkil generasiyasını aktiv et",
"image_fullsize_enabled_description": "Veb üçün uyğun olmayan formatlar üçün tam ölçülü şəkil yaradın. “Daxili önizləməyə üstünlük ver” aktiv olduqda, daxili önizləmələr çevrilmədən birbaşa istifadə olunur. JPEG kimi veb üçün uyğun formatlara təsir etmir.",
"image_fullsize_quality_description": "Tam ölçülü şəkil keyfiyyəti (1-100). Daha yüksək dəyər daha yaxşı keyfiyyət verir, lakin daha böyük ölçülü fayl yaradır.",
"image_fullsize_title": "Tam ölçülü şəkil tənzimləmələri",
"image_preview_title": "Önizləmə parametrləri", "image_preview_title": "Önizləmə parametrləri",
"image_quality": "Keyfiyyət", "image_quality": "Keyfiyyət",
"image_resolution": "Çözümlülük", "image_resolution": "Çözümlülük",
+1899 -5
View File
File diff suppressed because it is too large Load Diff
+55 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Включване на имейл известията", "notification_enable_email_notifications": "Включване на имейл известията",
"notification_settings": "Настройки на известията", "notification_settings": "Настройки на известията",
"notification_settings_description": "Управление на настройките за известия, вкл. имейл", "notification_settings_description": "Управление на настройките за известия, вкл. имейл",
"oauth_allow_insecure_requests": "Разрешаване на несигурни заявки",
"oauth_allow_insecure_requests_description": "ПРЕДУПРЕЖДЕНИЕ: Това изключва проверката за валидност на TLS сертификата при OAuth заявки и отваря възможност за атака от типа \"човек по средата\".",
"oauth_auto_launch": "Автоматично стартиране", "oauth_auto_launch": "Автоматично стартиране",
"oauth_auto_launch_description": "Автоматично стартиране на вход чрез OAuth, когато се отвори страницата за вход", "oauth_auto_launch_description": "Автоматично стартиране на вход чрез OAuth, когато се отвори страницата за вход",
"oauth_auto_register": "Автоматична регистрация", "oauth_auto_register": "Автоматична регистрация",
@@ -274,9 +276,11 @@
"oauth_button_text": "Текст на бутона", "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_enable_description": "Влизане с OAuth",
"oauth_end_session_url_description": "Пренасочване на потребителя към този URI адрес, когато излезе от системата.",
"oauth_mobile_redirect_uri": "URI за мобилно пренасочване", "oauth_mobile_redirect_uri": "URI за мобилно пренасочване",
"oauth_mobile_redirect_uri_override": "URI пренасочване за мобилни устройства", "oauth_mobile_redirect_uri_override": "URI пренасочване за мобилни устройства",
"oauth_mobile_redirect_uri_override_description": "Разреши когато доставчика за OAuth удостоверяване не позволява за мобилни URI идентификатори, като ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Разреши когато доставчика за OAuth удостоверяване не позволява за мобилни URI идентификатори, като ''{callback}''",
"oauth_prompt_description": "Параметър за подкана (напр. select_account, login, consent)",
"oauth_role_claim": "Потвърждение на роля", "oauth_role_claim": "Потвърждение на роля",
"oauth_role_claim_description": "Автоматично предоставяне на административни права при наличие на това потвържение. Потвърждението може да има стойност 'user' или 'admin'.", "oauth_role_claim_description": "Автоматично предоставяне на административни права при наличие на това потвържение. Потвърждението може да има стойност 'user' или 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Запазване на снимки от последните…", "cutoff_date_description": "Запазване на снимки от последните…",
"cutoff_day": "{count, plural, one {ден} other {дни}}", "cutoff_day": "{count, plural, one {ден} other {дни}}",
"cutoff_year": "{count, plural, one {година} other {години}}", "cutoff_year": "{count, plural, one {година} other {години}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM yyyy",
"dark": "Тъмен", "dark": "Тъмен",
"dark_theme": "Премини към тъмна тема", "dark_theme": "Премини към тъмна тема",
"date": "Дата", "date": "Дата",
"date_after": "Дата след", "date_after": "Дата след",
"date_and_time": "Дата и час", "date_and_time": "Дата и час",
"date_before": "Дата преди", "date_before": "Дата преди",
"date_format": "E, d LLL y • h:mm a", "date_of_birth": "Дата на раждане",
"date_of_birth_saved": "Дата на раждане е записана успешно", "date_of_birth_saved": "Дата на раждане е записана успешно",
"date_range": "Период от време", "date_range": "Период от време",
"day": "Ден", "day": "Ден",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Преместете архивираните снимки и видеа в кошчето на устройството, за да освободите място. Копията на сървъра ще бъдат запазени.", "free_up_space_description": "Преместете архивираните снимки и видеа в кошчето на устройството, за да освободите място. Копията на сървъра ще бъдат запазени.",
"free_up_space_settings_subtitle": "Освобождаване на място за съхранение на устройството", "free_up_space_settings_subtitle": "Освобождаване на място за съхранение на устройството",
"full_path": "Пълен път: {path}", "full_path": "Пълен път: {path}",
"full_path_or_folder": "Пълен път или папка",
"gcast_enabled": "Gооgle Cast", "gcast_enabled": "Gооgle Cast",
"gcast_enabled_description": "За да работи тази функция зарежда външни ресурси от Google.", "gcast_enabled_description": "За да работи тази функция зарежда външни ресурси от Google.",
"general": "Общи", "general": "Общи",
@@ -1392,11 +1395,13 @@
"light_theme": "Премини към светла тема", "light_theme": "Премини към светла тема",
"like": "Харесайте", "like": "Харесайте",
"like_deleted": "Като изтрит", "like_deleted": "Като изтрит",
"link": "Връзка",
"link_motion_video": "Линк към видео", "link_motion_video": "Линк към видео",
"link_to_docs": "За повече информация вижте <link>документацията</link>.", "link_to_docs": "За повече информация вижте <link>документацията</link>.",
"link_to_oauth": "Линк към OAuth", "link_to_oauth": "Линк към OAuth",
"linked_oauth_account": "Свързан OAuth акаунт", "linked_oauth_account": "Свързан OAuth акаунт",
"list": "Лист", "list": "Лист",
"live": "Живот",
"loading": "Зареждане", "loading": "Зареждане",
"loading_search_results_failed": "Зареждането на резултатите от търсенето е неуспешно", "loading_search_results_failed": "Зареждането на резултатите от търсенето е неуспешно",
"local": "Локално", "local": "Локално",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Всички маркирани като прочетени", "marked_all_as_read": "Всички маркирани като прочетени",
"matches": "Съвпадения", "matches": "Съвпадения",
"matching_assets": "Съвпадащи обекти", "matching_assets": "Съвпадащи обекти",
"media_chrome": {
"auto": "Авто",
"captions": "Субтитри",
"captions_off": "Изключенo",
"closed_captions": "субтитри",
"decode_error": "Грешка при декодиране",
"disable_captions": "Изключи субтитри",
"enable_captions": "Включи субтитри",
"enter_fullscreen_mode": "На цял екран",
"exit_fullscreen_mode": "Изход от цял екран",
"loop": "Повтаряй",
"media_error_description": "Възпроизвеждането е спряно поради грешка във файла. Може би файлът е повреден или браузъра не поддържа този формат.",
"media_loading": "зареждане на медия",
"mute": "Без звук",
"network_error": "Грешка в мрежата",
"network_error_description": "Прекъсване на зареждането поради грешка в мрежата.",
"not_supported_error": "Този източник не се поддържа",
"playback_rate": "Скорост на възпроизвеждане",
"playback_rate_current": "текуща скорост на възпроизвеждане",
"playback_rate_value": "Скорост на възпроизвеждане {playbackRate}",
"playback_time": "продължителност",
"quality": "Качество",
"second": "секунда",
"seconds": "секунди",
"time_value_of_total_time": "{currentTime} от {totalTime}",
"time_value_remaining": "{time} остават",
"unmute": "Включи звук",
"unsupported_error_description": "Възникна непоправима грешка. Проблем в сървъра или мрежата, възможно е браузъра да не поддържа този формат.",
"video_not_loaded_unknown_time": "не е заредено видео, неизвестно време.",
"video_player": "видеоплеер",
"volume": "сила на звука"
},
"media_type": "Вид медия", "media_type": "Вид медия",
"memories": "Спомени", "memories": "Спомени",
"memories_all_caught_up": "Това е всичко за днес", "memories_all_caught_up": "Това е всичко за днес",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Свалете мобилното приложение Immich с някоя от следните опции", "mobile_app_download_onboarding_note": "Свалете мобилното приложение Immich с някоя от следните опции",
"model": "Модел", "model": "Модел",
"month": "Месец", "month": "Месец",
"monthly_title_text_date_format": "MMMM г",
"more": "Още", "more": "Още",
"motion": "Движение",
"move": "Премести", "move": "Премести",
"move_down": "Премести надолу", "move_down": "Премести надолу",
"move_off_locked_folder": "Извади от заключената папка", "move_off_locked_folder": "Извади от заключената папка",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Не може да се редактира местоположението на обект само за четене, пропускане", "multiselect_grid_edit_gps_err_read_only": "Не може да се редактира местоположението на обект само за четене, пропускане",
"mute_memories": "Изключване на звука на спомените", "mute_memories": "Изключване на звука на спомените",
"my_albums": "Мои албуми", "my_albums": "Мои албуми",
"my_immich_description": "Копирай адреса на текущата страница като връзка към моя Immich",
"my_immich_title": "Връзка към моя Immich",
"name": "Име", "name": "Име",
"name_or_nickname": "Име или прякор", "name_or_nickname": "Име или прякор",
"name_required": "Задължително е Име", "name_required": "Задължително е Име",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Премахване на елементите?", "remove_assets_title": "Премахване на елементите?",
"remove_custom_date_range": "Премахни зададения диапазон от дати", "remove_custom_date_range": "Премахни зададения диапазон от дати",
"remove_deleted_assets": "Премахни Изтритите Елементи", "remove_deleted_assets": "Премахни Изтритите Елементи",
"remove_filter": "Премахни филтър",
"remove_from_album": "Премахни от албума", "remove_from_album": "Премахни от албума",
"remove_from_album_action_prompt": "{count} са премахнати от албума", "remove_from_album_action_prompt": "{count} са премахнати от албума",
"remove_from_favorites": "Премахни от Любими", "remove_from_favorites": "Премахни от Любими",
@@ -1926,6 +1966,8 @@
"scan_settings": "Сканирай настройките", "scan_settings": "Сканирай настройките",
"scanning": "Сканиране", "scanning": "Сканиране",
"scanning_for_album": "Сканирай за албум...", "scanning_for_album": "Сканирай за албум...",
"screencast_mode_description": "Показване на екрана на индикатори за събития от клавиатурата и мишката",
"screencast_mode_title": "Превключване на режима на скрийнкаст",
"search": "Търсене", "search": "Търсене",
"search_albums": "Търси албуми", "search_albums": "Търси албуми",
"search_by_context": "Търси по контекст", "search_by_context": "Търси по контекст",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Разходка в Сапа", "search_by_description_example": "Разходка в Сапа",
"search_by_filename": "Търси по име на файла или разширение", "search_by_filename": "Търси по име на файла или разширение",
"search_by_filename_example": "например IMG_1234.JPG или PNG", "search_by_filename_example": "например IMG_1234.JPG или PNG",
"search_by_full_path": "Търсене по пълен път или папка",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - търсена за Projects, 3D, Printing, 2026 и т.н.",
"search_by_ocr": "Търсене на текст", "search_by_ocr": "Търсене на текст",
"search_by_ocr_example": "Lattе", "search_by_ocr_example": "Lattе",
"search_camera_lens_model": "Търсене на модел на обектива...", "search_camera_lens_model": "Търсене на модел на обектива...",
@@ -2148,6 +2192,7 @@
"show_schema": "Покажи схема", "show_schema": "Покажи схема",
"show_search_options": "Показване на опциите за търсене", "show_search_options": "Показване на опциите за търсене",
"show_shared_links": "Покажи споделени линкове", "show_shared_links": "Покажи споделени линкове",
"show_slideshow_metadata_overlay": "Покажи информационния слой",
"show_slideshow_transition": "Покажи прехода на слайдшоуто", "show_slideshow_transition": "Покажи прехода на слайдшоуто",
"show_supporter_badge": "Значка поддръжник", "show_supporter_badge": "Значка поддръжник",
"show_supporter_badge_description": "Покажи значка поддръжник", "show_supporter_badge_description": "Покажи значка поддръжник",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Премини към папките", "skip_to_folders": "Премини към папките",
"skip_to_tags": "Премини към етикетите", "skip_to_tags": "Премини към етикетите",
"slideshow": "Слайдшоу", "slideshow": "Слайдшоу",
"slideshow_metadata_overlay_mode": "Съдържание на слоя с информация",
"slideshow_metadata_overlay_mode_description_only": "Само описание",
"slideshow_metadata_overlay_mode_full": "Пълна",
"slideshow_repeat": "Повтаряй слайдшоуто", "slideshow_repeat": "Повтаряй слайдшоуто",
"slideshow_repeat_description": "Започвай отново, когато слайдшоуто приключи", "slideshow_repeat_description": "Започвай отново, когато слайдшоуто приключи",
"slideshow_settings": "Настройки за слайдшоу", "slideshow_settings": "Настройки за слайдшоу",
@@ -2214,6 +2262,8 @@
"sync_status": "Състояние на синхронизацията", "sync_status": "Състояние на синхронизацията",
"sync_status_subtitle": "Преглед и управление на системата за синхронизация", "sync_status_subtitle": "Преглед и управление на системата за синхронизация",
"sync_upload_album_setting_subtitle": "Създавайте и зареждайте снимки и видеа в избрани албуми в Immich", "sync_upload_album_setting_subtitle": "Създавайте и зареждайте снимки и видеа в избрани албуми в Immich",
"system_theme": "Тема от системата",
"system_theme_command_description": "Използвай системната тема ({value})",
"tag": "Таг", "tag": "Таг",
"tag_assets": "Тагни елементи", "tag_assets": "Тагни елементи",
"tag_created": "Създаден етикет: {tag}", "tag_created": "Създаден етикет: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Работни процеси", "workflows": "Работни процеси",
"workflows_help_text": "Работните процеси автоматизират действията с вашите обекти чрез тригери и филтри", "workflows_help_text": "Работните процеси автоматизират действията с вашите обекти чрез тригери и филтри",
"wrong_pin_code": "Грешен PIN код", "wrong_pin_code": "Грешен PIN код",
"x_of_total": "{x}/{total}",
"year": "Година", "year": "Година",
"years_ago": "преди {years, plural, one {# година} other {# години}}", "years_ago": "преди {years, plural, one {# година} other {# години}}",
"yes": "Да", "yes": "Да",
+55 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Habilita les notificacions de correu electrònic", "notification_enable_email_notifications": "Habilita les notificacions de correu electrònic",
"notification_settings": "Configuració de notificacions", "notification_settings": "Configuració de notificacions",
"notification_settings_description": "Gestiona la configuració de notificacions, incloent-hi el correu electrònic", "notification_settings_description": "Gestiona la configuració de notificacions, incloent-hi el correu electrònic",
"oauth_allow_insecure_requests": "Permet sol·licituds no segures",
"oauth_allow_insecure_requests_description": "AVÍS: Això inhabilita la validació de certificats TLS per a les sol·licituds OAuth i us pot exposar a atacs MITM.",
"oauth_auto_launch": "Execució automàtica", "oauth_auto_launch": "Execució automàtica",
"oauth_auto_launch_description": "Inicia el flux d'inici de sessió OAuth automàticament en accedir a la pàgina d'inici de sessió", "oauth_auto_launch_description": "Inicia el flux d'inici de sessió OAuth automàticament en accedir a la pàgina d'inici de sessió",
"oauth_auto_register": "Registre automàtic", "oauth_auto_register": "Registre automàtic",
@@ -274,9 +276,11 @@
"oauth_button_text": "Text del botó", "oauth_button_text": "Text del botó",
"oauth_client_secret_description": "Requerit per clients confidencials, o si PKCE (Proof Key for Code Exchange) no està suportat pel client públic.", "oauth_client_secret_description": "Requerit per clients confidencials, o si PKCE (Proof Key for Code Exchange) no està suportat pel client públic.",
"oauth_enable_description": "Iniciar sessió amb OAuth", "oauth_enable_description": "Iniciar sessió amb OAuth",
"oauth_end_session_url_description": "Redirigeix l'usuari a aquest URI quan tanqui la sessió.",
"oauth_mobile_redirect_uri": "URI de redirecció mòbil", "oauth_mobile_redirect_uri": "URI de redirecció mòbil",
"oauth_mobile_redirect_uri_override": "Sobreescriu l'URI de redirecció mòbil", "oauth_mobile_redirect_uri_override": "Sobreescriu l'URI de redirecció mòbil",
"oauth_mobile_redirect_uri_override_description": "Habilita quan el proveïdor d'OAuth no permet una URI mòbil, com ara ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Habilita quan el proveïdor d'OAuth no permet una URI mòbil, com ara ''{callback}''",
"oauth_prompt_description": "Paràmetre de sol·licitud (per exemple, select_account, login, consent)",
"oauth_role_claim": "Concessió de rol", "oauth_role_claim": "Concessió de rol",
"oauth_role_claim_description": "Atorgar accés d'administrador automàticament segons la presència d'aquesta concessió. La concessió pot ser 'usuari' o 'admin'.", "oauth_role_claim_description": "Atorgar accés d'administrador automàticament segons la presència d'aquesta concessió. La concessió pot ser 'usuari' o 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Manté fotos des de l'últim…", "cutoff_date_description": "Manté fotos des de l'últim…",
"cutoff_day": "{count, plural, one {dia} other {dies}}", "cutoff_day": "{count, plural, one {dia} other {dies}}",
"cutoff_year": "{count, plural, one {any} other {anys}}", "cutoff_year": "{count, plural, one {any} other {anys}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Fosc", "dark": "Fosc",
"dark_theme": "Canvia a tema fosc", "dark_theme": "Canvia a tema fosc",
"date": "Data", "date": "Data",
"date_after": "Data posterior a", "date_after": "Data posterior a",
"date_and_time": "Data i hora", "date_and_time": "Data i hora",
"date_before": "Data anterior a", "date_before": "Data anterior a",
"date_format": "E, d LLL, y • hh:mm", "date_of_birth": "Data de naixement",
"date_of_birth_saved": "Data de naixement guardada amb èxit", "date_of_birth_saved": "Data de naixement guardada amb èxit",
"date_range": "Interval de dates", "date_range": "Interval de dates",
"day": "Dia", "day": "Dia",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Mou fotos i videos que ja tinguen còpia al servidor a la paperera del teu dispositiu per alliberar espai. Les còpies del servidor no es modificaran.", "free_up_space_description": "Mou fotos i videos que ja tinguen còpia al servidor a la paperera del teu dispositiu per alliberar espai. Les còpies del servidor no es modificaran.",
"free_up_space_settings_subtitle": "Alliberar espai del dispositiu", "free_up_space_settings_subtitle": "Alliberar espai del dispositiu",
"full_path": "Ruta completa: {path}", "full_path": "Ruta completa: {path}",
"full_path_or_folder": "Camí sencer o carpeta",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Aquesta funció carrega recursos externs de Google per funcionar.", "gcast_enabled_description": "Aquesta funció carrega recursos externs de Google per funcionar.",
"general": "General", "general": "General",
@@ -1392,11 +1395,13 @@
"light_theme": "Canviar a tema clar", "light_theme": "Canviar a tema clar",
"like": "M'agrada", "like": "M'agrada",
"like_deleted": "M'agrada suprimit", "like_deleted": "M'agrada suprimit",
"link": "Enllaç",
"link_motion_video": "Enllaçar vídeo en moviment", "link_motion_video": "Enllaçar vídeo en moviment",
"link_to_docs": "Per més informació, mirar la <link>documentation</link>.", "link_to_docs": "Per més informació, mirar la <link>documentation</link>.",
"link_to_oauth": "Enllaç a OAuth", "link_to_oauth": "Enllaç a OAuth",
"linked_oauth_account": "Compte OAuth enllaçat", "linked_oauth_account": "Compte OAuth enllaçat",
"list": "Llista", "list": "Llista",
"live": "En viu",
"loading": "Carregant", "loading": "Carregant",
"loading_search_results_failed": "No s'han pogut carregar els resultats de la cerca", "loading_search_results_failed": "No s'han pogut carregar els resultats de la cerca",
"local": "Local", "local": "Local",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Marcat tot com a llegit", "marked_all_as_read": "Marcat tot com a llegit",
"matches": "Coincidències", "matches": "Coincidències",
"matching_assets": "Recursos Coincidents", "matching_assets": "Recursos Coincidents",
"media_chrome": {
"auto": "Auto",
"captions": "Llegendes",
"captions_off": "Desactivat",
"closed_captions": "Llegendes tancades",
"decode_error": "Error de decodificació",
"disable_captions": "Desactivar llegendes",
"enable_captions": "Activar llegendes",
"enter_fullscreen_mode": "Activar mode pantalla sencera",
"exit_fullscreen_mode": "Desactivar mode pantalla sencera",
"loop": "Bucle",
"media_error_description": "Un error dels mitjans ha provocat l'aturada de la reproducció. El mitjà pot estar corromput o el navegador no suporta el format.",
"media_loading": "carregant el mitjà",
"mute": "Silencia",
"network_error": "Error de xarxa",
"network_error_description": "Un error de xarxa ha provocat la fallada de la descarrega.",
"not_supported_error": "Font origen no suportada",
"playback_rate": "Velocitat de reproducció",
"playback_rate_current": "velocitat actual de reproducció",
"playback_rate_value": "Velocitat de reproducció {playbackRate}",
"playback_time": "temps de reproducció",
"quality": "Quallitat",
"second": "segon",
"seconds": "segons",
"time_value_of_total_time": "{currentTime} de {totalTime}",
"time_value_remaining": "{time} restant",
"unmute": "Activa so",
"unsupported_error_description": "Un error no suportat ha passat. El servidor o la xarxa han fallat, o el vostre navegador no accepta aquest format.",
"video_not_loaded_unknown_time": "vídeo no carregat, temps desconegut.",
"video_player": "reproductor de vídeo",
"volume": "volum"
},
"media_type": "Tipus de mitjà", "media_type": "Tipus de mitjà",
"memories": "Records", "memories": "Records",
"memories_all_caught_up": "Posat al dia", "memories_all_caught_up": "Posat al dia",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Descarregar la App de mòbil fent servir les seguents opcions", "mobile_app_download_onboarding_note": "Descarregar la App de mòbil fent servir les seguents opcions",
"model": "Model", "model": "Model",
"month": "Mes", "month": "Mes",
"monthly_title_text_date_format": "MMMM a",
"more": "Més", "more": "Més",
"motion": "Moviment",
"move": "Moure", "move": "Moure",
"move_down": "Moure cap avall", "move_down": "Moure cap avall",
"move_off_locked_folder": "Moure fora de la carpeta bloquejada", "move_off_locked_folder": "Moure fora de la carpeta bloquejada",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "No es pot canviar la localització de fitxers de només lectura, saltant", "multiselect_grid_edit_gps_err_read_only": "No es pot canviar la localització de fitxers de només lectura, saltant",
"mute_memories": "Silenciar records", "mute_memories": "Silenciar records",
"my_albums": "Els meus àlbums", "my_albums": "Els meus àlbums",
"my_immich_description": "Copia la pàgina actual com a enllaç de My Immich",
"my_immich_title": "Enllaç My Immich",
"name": "Nom", "name": "Nom",
"name_or_nickname": "Nom o sobrenom", "name_or_nickname": "Nom o sobrenom",
"name_required": "El nom és obligatori", "name_required": "El nom és obligatori",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Eliminar els elements?", "remove_assets_title": "Eliminar els elements?",
"remove_custom_date_range": "Elimina l'interval de dates personalitzat", "remove_custom_date_range": "Elimina l'interval de dates personalitzat",
"remove_deleted_assets": "Suprimeix fitxers fora de línia", "remove_deleted_assets": "Suprimeix fitxers fora de línia",
"remove_filter": "Elimina el filtre",
"remove_from_album": "Treu de l'àlbum", "remove_from_album": "Treu de l'àlbum",
"remove_from_album_action_prompt": "{count} eliminats de l'àlbum", "remove_from_album_action_prompt": "{count} eliminats de l'àlbum",
"remove_from_favorites": "Eliminar dels preferits", "remove_from_favorites": "Eliminar dels preferits",
@@ -1926,6 +1966,8 @@
"scan_settings": "Configuració d'escaneig", "scan_settings": "Configuració d'escaneig",
"scanning": "Escanejant", "scanning": "Escanejant",
"scanning_for_album": "S'està buscant l'àlbum...", "scanning_for_album": "S'està buscant l'àlbum...",
"screencast_mode_description": "Mostra els indicadors d'esdeveniments del teclat i del ratolí a la pantalla",
"screencast_mode_title": "Activa/desactiva el mode de captura de pantalla",
"search": "Cerca", "search": "Cerca",
"search_albums": "Buscar àlbums", "search_albums": "Buscar àlbums",
"search_by_context": "Buscar per context", "search_by_context": "Buscar per context",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Jornada de senderisme a Sapa", "search_by_description_example": "Jornada de senderisme a Sapa",
"search_by_filename": "Cerca per nom de fitxer o extensió", "search_by_filename": "Cerca per nom de fitxer o extensió",
"search_by_filename_example": "per exemple IMG_1234.JPG o PNG", "search_by_filename_example": "per exemple IMG_1234.JPG o PNG",
"search_by_full_path": "Cerca per camí complert o carpeta",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - pots buscar Projectes, 3D, Impressió, 2026 etc.",
"search_by_ocr": "Buscar per OCR", "search_by_ocr": "Buscar per OCR",
"search_by_ocr_example": "Després", "search_by_ocr_example": "Després",
"search_camera_lens_model": "Buscar model de lents....", "search_camera_lens_model": "Buscar model de lents....",
@@ -2148,6 +2192,7 @@
"show_schema": "Mostrar esquema", "show_schema": "Mostrar esquema",
"show_search_options": "Mostra opcions de cerca", "show_search_options": "Mostra opcions de cerca",
"show_shared_links": "Mostra els enllaços compartits", "show_shared_links": "Mostra els enllaços compartits",
"show_slideshow_metadata_overlay": "Mostra informació sobre la imatge",
"show_slideshow_transition": "Mostra la transició de la presentació de diapositives", "show_slideshow_transition": "Mostra la transició de la presentació de diapositives",
"show_supporter_badge": "Insígnia de contribuent", "show_supporter_badge": "Insígnia de contribuent",
"show_supporter_badge_description": "Mostra una insígnia de contributor", "show_supporter_badge_description": "Mostra una insígnia de contributor",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Anar a carpetes", "skip_to_folders": "Anar a carpetes",
"skip_to_tags": "Anar a etiquetes", "skip_to_tags": "Anar a etiquetes",
"slideshow": "Diapositives", "slideshow": "Diapositives",
"slideshow_metadata_overlay_mode": "Contingut de superposició",
"slideshow_metadata_overlay_mode_description_only": "Descripció només",
"slideshow_metadata_overlay_mode_full": "Tot",
"slideshow_repeat": "Repeteix la presentació de diapositives", "slideshow_repeat": "Repeteix la presentació de diapositives",
"slideshow_repeat_description": "Torna al principi quan acaba la presentació de diapositives", "slideshow_repeat_description": "Torna al principi quan acaba la presentació de diapositives",
"slideshow_settings": "Configuració de diapositives", "slideshow_settings": "Configuració de diapositives",
@@ -2214,6 +2262,8 @@
"sync_status": "Estat de la incronització", "sync_status": "Estat de la incronització",
"sync_status_subtitle": "Observa i administra el sistema de sincronització", "sync_status_subtitle": "Observa i administra el sistema de sincronització",
"sync_upload_album_setting_subtitle": "Creeu i pugeu les seves fotos i vídeos als àlbums seleccionats a Immich", "sync_upload_album_setting_subtitle": "Creeu i pugeu les seves fotos i vídeos als àlbums seleccionats a Immich",
"system_theme": "Tema del sistema",
"system_theme_command_description": "Utilitza el tema del sistema ({value})",
"tag": "Etiqueta", "tag": "Etiqueta",
"tag_assets": "Etiquetar actius", "tag_assets": "Etiquetar actius",
"tag_created": "Etiqueta creada: {tag}", "tag_created": "Etiqueta creada: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Automatitzacions", "workflows": "Automatitzacions",
"workflows_help_text": "Les automatitzacions realitzen accions automàticament sobre els teus mitjans basant-se en disparadors i filtres", "workflows_help_text": "Les automatitzacions realitzen accions automàticament sobre els teus mitjans basant-se en disparadors i filtres",
"wrong_pin_code": "Codi PIN incorrecte", "wrong_pin_code": "Codi PIN incorrecte",
"x_of_total": "{x}/{total}",
"year": "Any", "year": "Any",
"years_ago": "Fa {years, plural, one {# any} other {# anys}}", "years_ago": "Fa {years, plural, one {# any} other {# anys}}",
"yes": "Sí", "yes": "Sí",
+55 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Povolení e-mailových oznámení", "notification_enable_email_notifications": "Povolení e-mailových oznámení",
"notification_settings": "Oznámení", "notification_settings": "Oznámení",
"notification_settings_description": "Správa nastavení oznámení včetně e-mailu", "notification_settings_description": "Správa nastavení oznámení včetně e-mailu",
"oauth_allow_insecure_requests": "Povolit nezabezpečené požadavky",
"oauth_allow_insecure_requests_description": "VAROVÁNÍ: Toto zakáže ověřování TLS certifikátů u požadavků OAuth, což vás může vystavit riziku útoků typu MITM.",
"oauth_auto_launch": "Automatické zahájení", "oauth_auto_launch": "Automatické zahájení",
"oauth_auto_launch_description": "Automatické zahájení přihlašovacího toku OAuth po přechodu na přihlašovací stránku", "oauth_auto_launch_description": "Automatické zahájení přihlašovacího toku OAuth po přechodu na přihlašovací stránku",
"oauth_auto_register": "Automatická registrace", "oauth_auto_register": "Automatická registrace",
@@ -274,9 +276,11 @@
"oauth_button_text": "Text tlačítka", "oauth_button_text": "Text tlačítka",
"oauth_client_secret_description": "Vyžadováno pro důvěrné klienty nebo pokud PKCE (Proof Key for Code Exchange) není podporováno pro veřejné klienty.", "oauth_client_secret_description": "Vyžadováno pro důvěrné klienty nebo pokud PKCE (Proof Key for Code Exchange) není podporováno pro veřejné klienty.",
"oauth_enable_description": "Přihlásit pomocí OAuth", "oauth_enable_description": "Přihlásit pomocí OAuth",
"oauth_end_session_url_description": "Přesměrovat uživatele po odhlášení na tuto adresu.",
"oauth_mobile_redirect_uri": "Mobilní přesměrování URI", "oauth_mobile_redirect_uri": "Mobilní přesměrování URI",
"oauth_mobile_redirect_uri_override": "Přepsat mobilní přesměrování URI", "oauth_mobile_redirect_uri_override": "Přepsat mobilní přesměrování URI",
"oauth_mobile_redirect_uri_override_description": "Povolit, pokud poskytovatel OAuth nepovoluje mobilní URI, například ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Povolit, pokud poskytovatel OAuth nepovoluje mobilní URI, například ''{callback}''",
"oauth_prompt_description": "Parametr dotazu (např. select_account, login, consent)",
"oauth_role_claim": "Deklarace Role", "oauth_role_claim": "Deklarace Role",
"oauth_role_claim_description": "Automaticky udělit přístup správce na základě přítomnosti této deklarace. Deklarace může mít hodnotu 'user' nebo 'admin'.", "oauth_role_claim_description": "Automaticky udělit přístup správce na základě přítomnosti této deklarace. Deklarace může mít hodnotu 'user' nebo 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Zanechat fotografie a videa z posledních…", "cutoff_date_description": "Zanechat fotografie a videa z posledních…",
"cutoff_day": "{count, plural, one {den} few {dny} other {dnů}}", "cutoff_day": "{count, plural, one {den} few {dny} other {dnů}}",
"cutoff_year": "{count, plural, one {rok} few {roky} other {let}}", "cutoff_year": "{count, plural, one {rok} few {roky} other {let}}",
"daily_title_text_date": "EEEE, d. MMMM",
"daily_title_text_date_year": "EEEE, d. MMMM y",
"dark": "Tmavý", "dark": "Tmavý",
"dark_theme": "Přepnout na tmavý motiv", "dark_theme": "Přepnout na tmavý motiv",
"date": "Datum", "date": "Datum",
"date_after": "Datum po", "date_after": "Datum po",
"date_and_time": "Datum a čas", "date_and_time": "Datum a čas",
"date_before": "Datum před", "date_before": "Datum před",
"date_format": "EEEE, d. MMMM y • H:mm", "date_of_birth": "Datum narození",
"date_of_birth_saved": "Datum narození úspěšně uloženo", "date_of_birth_saved": "Datum narození úspěšně uloženo",
"date_range": "Rozsah dat", "date_range": "Rozsah dat",
"day": "Den", "day": "Den",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Přesunout zálohované fotografie a videa do koše zařízení, abyste uvolnili místo. Vaše kopie na serveru zůstanou v bezpečí.", "free_up_space_description": "Přesunout zálohované fotografie a videa do koše zařízení, abyste uvolnili místo. Vaše kopie na serveru zůstanou v bezpečí.",
"free_up_space_settings_subtitle": "Uvolnit úložiště zařízení", "free_up_space_settings_subtitle": "Uvolnit úložiště zařízení",
"full_path": "Úplná cesta: {path}", "full_path": "Úplná cesta: {path}",
"full_path_or_folder": "Celá cesta nebo složka",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Tato funkce načítá externí zdroje z Googlu, aby mohla fungovat.", "gcast_enabled_description": "Tato funkce načítá externí zdroje z Googlu, aby mohla fungovat.",
"general": "Obecné", "general": "Obecné",
@@ -1392,11 +1395,13 @@
"light_theme": "Přepnout na světlý motiv", "light_theme": "Přepnout na světlý motiv",
"like": "Líbí se mi", "like": "Líbí se mi",
"like_deleted": "Oblíbení smazáno", "like_deleted": "Oblíbení smazáno",
"link": "Odkaz",
"link_motion_video": "Připojit pohyblivé video", "link_motion_video": "Připojit pohyblivé video",
"link_to_docs": "Další informace najdete v <link>dokumentaci</link>.", "link_to_docs": "Další informace najdete v <link>dokumentaci</link>.",
"link_to_oauth": "Propojit s OAuth", "link_to_oauth": "Propojit s OAuth",
"linked_oauth_account": "Propojený OAuth účet", "linked_oauth_account": "Propojený OAuth účet",
"list": "Seznam", "list": "Seznam",
"live": "Živý",
"loading": "Načítání", "loading": "Načítání",
"loading_search_results_failed": "Načítání výsledků vyhledávání se nezdařilo", "loading_search_results_failed": "Načítání výsledků vyhledávání se nezdařilo",
"local": "Místní", "local": "Místní",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Vše označeno jako přečtené", "marked_all_as_read": "Vše označeno jako přečtené",
"matches": "Shody", "matches": "Shody",
"matching_assets": "Odpovídající položky", "matching_assets": "Odpovídající položky",
"media_chrome": {
"auto": "Automaticky",
"captions": "Titulky",
"captions_off": "Vypnuto",
"closed_captions": "skryté titulky",
"decode_error": "Chyba dekódování",
"disable_captions": "Vypnout titulky",
"enable_captions": "Zapnout titulky",
"enter_fullscreen_mode": "Přepnout do režimu celé obrazovky",
"exit_fullscreen_mode": "Ukončit režim celé obrazovky",
"loop": "Smyčka",
"media_error_description": "K přerušení přehrávání došlo kvůli chybě souboru. Soubor může být poškozený, případně váš prohlížeč tento formát nepodporuje.",
"media_loading": "načítání médií",
"mute": "Ztlumit",
"network_error": "Chyba sítě",
"network_error_description": "K selhání stahování médií došlo kvůli síťové chybě.",
"not_supported_error": "Zdroj není podporován",
"playback_rate": "Rychlost přehrávání",
"playback_rate_current": "aktuální rychlost přehrávání",
"playback_rate_value": "Rychlost přehrávání {playbackRate}",
"playback_time": "doba přehrávání",
"quality": "Kvalita",
"second": "sekunda",
"seconds": "sekund",
"time_value_of_total_time": "{currentTime} z {totalTime}",
"time_value_remaining": "zbývá {time}",
"unmute": "Zrušit ztlumení",
"unsupported_error_description": "Došlo k chybě způsobené nepodporovaným formátem. Došlo k selhání serveru nebo sítě, případně váš prohlížeč tento formát nepodporuje.",
"video_not_loaded_unknown_time": "video se nenačetlo, známý čas.",
"video_player": "videopřehrávač",
"volume": "hlasitost"
},
"media_type": "Typ média", "media_type": "Typ média",
"memories": "Vzpomínky", "memories": "Vzpomínky",
"memories_all_caught_up": "To je všechno", "memories_all_caught_up": "To je všechno",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Stáhněte si doprovodnou mobilní aplikaci pomocí následujících možností", "mobile_app_download_onboarding_note": "Stáhněte si doprovodnou mobilní aplikaci pomocí následujících možností",
"model": "Model", "model": "Model",
"month": "Měsíc", "month": "Měsíc",
"monthly_title_text_date_format": "LLLL y",
"more": "Více", "more": "Více",
"motion": "Pohyb",
"move": "Přesunout", "move": "Přesunout",
"move_down": "Přesunout dolů", "move_down": "Přesunout dolů",
"move_off_locked_folder": "Přesunout z uzamčené složky", "move_off_locked_folder": "Přesunout z uzamčené složky",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji", "multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji",
"mute_memories": "Ztlumit vzpomínky", "mute_memories": "Ztlumit vzpomínky",
"my_albums": "Moje alba", "my_albums": "Moje alba",
"my_immich_description": "Zkopírovat aktuální stránku jako odkaz na Můj Immich",
"my_immich_title": "Odkaz na Můj Immich",
"name": "Jméno", "name": "Jméno",
"name_or_nickname": "Jméno nebo přezdívka", "name_or_nickname": "Jméno nebo přezdívka",
"name_required": "Jméno je povinné", "name_required": "Jméno je povinné",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Odstranit položky?", "remove_assets_title": "Odstranit položky?",
"remove_custom_date_range": "Odstranit vlastní rozsah dat", "remove_custom_date_range": "Odstranit vlastní rozsah dat",
"remove_deleted_assets": "Odstranit offline soubory", "remove_deleted_assets": "Odstranit offline soubory",
"remove_filter": "Odstranit filtr",
"remove_from_album": "Odstranit z alba", "remove_from_album": "Odstranit z alba",
"remove_from_album_action_prompt": "{count} odstraněných z alba", "remove_from_album_action_prompt": "{count} odstraněných z alba",
"remove_from_favorites": "Odstranit z oblíbených", "remove_from_favorites": "Odstranit z oblíbených",
@@ -1926,6 +1966,8 @@
"scan_settings": "Nastavení prohledávání", "scan_settings": "Nastavení prohledávání",
"scanning": "Prohládává se", "scanning": "Prohládává se",
"scanning_for_album": "Prohledávání alba...", "scanning_for_album": "Prohledávání alba...",
"screencast_mode_description": "Zobrazit na obrazovce indikátory událostí klávesnice a myši",
"screencast_mode_title": "Přepnout režim screencastu",
"search": "Hledat", "search": "Hledat",
"search_albums": "Vyhledávejte alba", "search_albums": "Vyhledávejte alba",
"search_by_context": "Vyhledávání podle obsahu", "search_by_context": "Vyhledávání podle obsahu",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Pěší turistika v Sapě", "search_by_description_example": "Pěší turistika v Sapě",
"search_by_filename": "Vyhledávání podle názvu nebo přípony souboru", "search_by_filename": "Vyhledávání podle názvu nebo přípony souboru",
"search_by_filename_example": "např. IMG_1234.JPG nebo PNG", "search_by_filename_example": "např. IMG_1234.JPG nebo PNG",
"search_by_full_path": "Hledat podle celé cesty nebo složky",
"search_by_full_path_example": "/Jan/Projekty/3D_tisk/2026-07-01 můžete hledat Projekty, 3D, tisk, 2026 apod.",
"search_by_ocr": "Hledat pomocí OCR", "search_by_ocr": "Hledat pomocí OCR",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Vyhledat model objektivu...", "search_camera_lens_model": "Vyhledat model objektivu...",
@@ -2148,6 +2192,7 @@
"show_schema": "Zobrazit schéma", "show_schema": "Zobrazit schéma",
"show_search_options": "Zobrazit možnosti vyhledávání", "show_search_options": "Zobrazit možnosti vyhledávání",
"show_shared_links": "Zobrazit sdílené odkazy", "show_shared_links": "Zobrazit sdílené odkazy",
"show_slideshow_metadata_overlay": "Zobrazit překryvné informace k obrázku",
"show_slideshow_transition": "Zobrazit přechod prezentace", "show_slideshow_transition": "Zobrazit přechod prezentace",
"show_supporter_badge": "Odznak podporovatele", "show_supporter_badge": "Odznak podporovatele",
"show_supporter_badge_description": "Zobrazit odznak podporovatele", "show_supporter_badge_description": "Zobrazit odznak podporovatele",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Přeskočit na složky", "skip_to_folders": "Přeskočit na složky",
"skip_to_tags": "Přeskočit na značky", "skip_to_tags": "Přeskočit na značky",
"slideshow": "Prezentace", "slideshow": "Prezentace",
"slideshow_metadata_overlay_mode": "Obsah překryvného panelu",
"slideshow_metadata_overlay_mode_description_only": "Pouze popis",
"slideshow_metadata_overlay_mode_full": "Úplný",
"slideshow_repeat": "Opakovat prezentaci", "slideshow_repeat": "Opakovat prezentaci",
"slideshow_repeat_description": "Po skončení prezentace se vrátit na začátek", "slideshow_repeat_description": "Po skončení prezentace se vrátit na začátek",
"slideshow_settings": "Nastavení prezentace", "slideshow_settings": "Nastavení prezentace",
@@ -2214,6 +2262,8 @@
"sync_status": "Stav synchronizace", "sync_status": "Stav synchronizace",
"sync_status_subtitle": "Zobrazit a spravovat synchronizační systém", "sync_status_subtitle": "Zobrazit a spravovat synchronizační systém",
"sync_upload_album_setting_subtitle": "Vytvořit a nahrát fotografie a videa do vybraných alb na Immich", "sync_upload_album_setting_subtitle": "Vytvořit a nahrát fotografie a videa do vybraných alb na Immich",
"system_theme": "Vzhled systému",
"system_theme_command_description": "Použít systémové téma ({value})",
"tag": "Značka", "tag": "Značka",
"tag_assets": "Přiřadit značku", "tag_assets": "Přiřadit značku",
"tag_created": "Vytvořena značka: {tag}", "tag_created": "Vytvořena značka: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Pracovní postupy", "workflows": "Pracovní postupy",
"workflows_help_text": "Pracovní postupy automatizují akce týkající se vašich položek na základě spouštěčů a filtrů", "workflows_help_text": "Pracovní postupy automatizují akce týkající se vašich položek na základě spouštěčů a filtrů",
"wrong_pin_code": "Chybný PIN kód", "wrong_pin_code": "Chybný PIN kód",
"x_of_total": "{x}/{total}",
"year": "Rok", "year": "Rok",
"years_ago": "Před {years, plural, one {rokem} other {# lety}}", "years_ago": "Před {years, plural, one {rokem} other {# lety}}",
"yes": "Ano", "yes": "Ano",
+60 -9
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Slå emailnotifikationer til", "notification_enable_email_notifications": "Slå emailnotifikationer til",
"notification_settings": "Notifikationsindstillinger", "notification_settings": "Notifikationsindstillinger",
"notification_settings_description": "Administrer notifikationsindstillinger, inklusiv email", "notification_settings_description": "Administrer notifikationsindstillinger, inklusiv email",
"oauth_allow_insecure_requests": "Tillad usikre anmodninger",
"oauth_allow_insecure_requests_description": "ADVARSEL: Dette deaktiverer TLS-certificering for OAuth anmodninger og kan udsætte dig for MITM angreb.",
"oauth_auto_launch": "Auto-opstart", "oauth_auto_launch": "Auto-opstart",
"oauth_auto_launch_description": "Påbegynd OAuth login-flow automatisk når loginsiden tilgås", "oauth_auto_launch_description": "Påbegynd OAuth login-flow automatisk når loginsiden tilgås",
"oauth_auto_register": "Autoregistrér", "oauth_auto_register": "Autoregistrér",
@@ -274,9 +276,11 @@
"oauth_button_text": "Knaptekst", "oauth_button_text": "Knaptekst",
"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_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_enable_description": "Log ind med OAuth",
"oauth_end_session_url_description": "Omdiriger brugeren til denne URI, når de logger ud.",
"oauth_mobile_redirect_uri": "Mobilomdiregerings-URL", "oauth_mobile_redirect_uri": "Mobilomdiregerings-URL",
"oauth_mobile_redirect_uri_override": "Tilsidesættelse af mobil omdiregerings-URL", "oauth_mobile_redirect_uri_override": "Tilsidesættelse af mobil omdiregerings-URL",
"oauth_mobile_redirect_uri_override_description": "Aktiver, når OAuth-udbyderen ikke tillader en mobil URI, som ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Aktiver, når OAuth-udbyderen ikke tillader en mobil URI, som ''{callback}''",
"oauth_prompt_description": "Prompt-parameter (f.eks. select_account, login, consent)",
"oauth_role_claim": "Rolle attribut", "oauth_role_claim": "Rolle attribut",
"oauth_role_claim_description": "Tildel automatisk admin adgang på basis af forekomst af denne påstand. Dén kan være enten 'user' eller 'admin'.", "oauth_role_claim_description": "Tildel automatisk admin adgang på basis af forekomst af denne påstand. Dén kan være enten 'user' eller 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Behold fotos fra den sidste…", "cutoff_date_description": "Behold fotos fra den sidste…",
"cutoff_day": "{count, plural, one {dag} other {dage}}", "cutoff_day": "{count, plural, one {dag} other {dage}}",
"cutoff_year": "{count, plural, one {år} other {år}}", "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", "dark": "Mørk",
"dark_theme": "Skift til mørkt tema", "dark_theme": "Skift til mørkt tema",
"date": "Dato", "date": "Dato",
"date_after": "Dato efter", "date_after": "Dato efter",
"date_and_time": "Dato og klokkeslæt", "date_and_time": "Dato og klokkeslæt",
"date_before": "Dato før", "date_before": "Dato før",
"date_format": "E d. LLL y • hh:mm", "date_of_birth": "Fødselsdag",
"date_of_birth_saved": "Fødselsdatoen blev gemt korrekt", "date_of_birth_saved": "Fødselsdatoen blev gemt korrekt",
"date_range": "Datointerval", "date_range": "Datointerval",
"day": "Dag", "day": "Dag",
@@ -972,7 +974,7 @@
"downloading_media": "Download medier", "downloading_media": "Download medier",
"drop_files_to_upload": "Slip filer hvor som helst for at uploade dem", "drop_files_to_upload": "Slip filer hvor som helst for at uploade dem",
"duplicates": "Duplikater", "duplicates": "Duplikater",
"duplicates_description": "Løs hver gruppe ved at angive hvilke, hvis nogen, er dubletter", "duplicates_description": "Løs hver gruppe ved at angive hvilke, hvis nogen, er dubletter.",
"duration": "Varighed", "duration": "Varighed",
"edit": "Rediger", "edit": "Rediger",
"edit_album": "Redigér album", "edit_album": "Redigér album",
@@ -998,7 +1000,7 @@
"edit_title": "Redigér titel", "edit_title": "Redigér titel",
"edit_user": "Redigér bruger", "edit_user": "Redigér bruger",
"edit_workflow": "Rediger workflow", "edit_workflow": "Rediger workflow",
"editor": "Redaktør", "editor": "Rediger",
"editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt", "editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt",
"editor_close_without_save_title": "Luk editor?", "editor_close_without_save_title": "Luk editor?",
"editor_confirm_reset_all_changes": "Er du sikker på, at du vil nulstille alle ændringer?", "editor_confirm_reset_all_changes": "Er du sikker på, at du vil nulstille alle ændringer?",
@@ -1236,6 +1238,7 @@
"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_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", "free_up_space_settings_subtitle": "Frigør enhedslagerplads",
"full_path": "Fuld sti: {path}", "full_path": "Fuld sti: {path}",
"full_path_or_folder": "Fuld sti eller mappe",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Denne funktion indlæser eksterne ressourcer fra Google for at virke.", "gcast_enabled_description": "Denne funktion indlæser eksterne ressourcer fra Google for at virke.",
"general": "Generel", "general": "Generel",
@@ -1392,11 +1395,13 @@
"light_theme": "Skift til lyst tema", "light_theme": "Skift til lyst tema",
"like": "Synes om", "like": "Synes om",
"like_deleted": "Ligesom slettet", "like_deleted": "Ligesom slettet",
"link": "Link",
"link_motion_video": "Link bevægelsesvideo", "link_motion_video": "Link bevægelsesvideo",
"link_to_docs": "For yderligere information, se <link>dokumentationen</link>.", "link_to_docs": "For yderligere information, se <link>dokumentationen</link>.",
"link_to_oauth": "Link til OAuth", "link_to_oauth": "Link til OAuth",
"linked_oauth_account": "Tilsluttet OAuth-konto", "linked_oauth_account": "Tilsluttet OAuth-konto",
"list": "Liste", "list": "Liste",
"live": "Live",
"loading": "Indlæser", "loading": "Indlæser",
"loading_search_results_failed": "Indlæsning af søgeresultater fejlede", "loading_search_results_failed": "Indlæsning af søgeresultater fejlede",
"local": "Lokal", "local": "Lokal",
@@ -1518,7 +1523,39 @@
"marked_all_as_read": "Markerede alle som læst", "marked_all_as_read": "Markerede alle som læst",
"matches": "Parringer", "matches": "Parringer",
"matching_assets": "Matchende objekter", "matching_assets": "Matchende objekter",
"media_type": "Medietype", "media_chrome": {
"auto": "Auto",
"captions": "Undertekster",
"captions_off": "Fra",
"closed_captions": "Undertekster for hørehæmmede",
"decode_error": "Fejl ved dekodning",
"disable_captions": "Slå undertekster fra",
"enable_captions": "Slå undertekster til",
"enter_fullscreen_mode": "Fuld skærm",
"exit_fullscreen_mode": "Luk fuld skærm",
"loop": "Gentag",
"media_error_description": "En mediefejl stoppede afspilningen. Filen kan være korrupt eller browseren understøtter ikke filtypen.",
"media_loading": "Loader medie",
"mute": "Sluk lyd",
"network_error": "Netværksfejl",
"network_error_description": "En netværksfejl fik download til at fejle.",
"not_supported_error": "Kilde er ikke understøttet",
"playback_rate": "Afspilningshastighed",
"playback_rate_current": "nuværende afspilningshastighed",
"playback_rate_value": "Afspilningshastighed {playbackRate}",
"playback_time": "afspilnings varighed",
"quality": "Kvalitet",
"second": "sekund",
"seconds": "sekunder",
"time_value_of_total_time": "{currentTime} af {totalTime}",
"time_value_remaining": "{time} tilbage",
"unmute": "Lyd til",
"unsupported_error_description": "En ukendt fejl opstod. Fejl på server, netværk eller din browser understøtter ikke formatet.",
"video_not_loaded_unknown_time": "video er ikke indlæst, ukendt tidspunkt.",
"video_player": "videoafspiller",
"volume": "lydstyrke"
},
"media_type": "Medieformat",
"memories": "Minder", "memories": "Minder",
"memories_all_caught_up": "Ajour", "memories_all_caught_up": "Ajour",
"memories_check_back_tomorrow": "Kom tilbage i morgen for at se nye minder", "memories_check_back_tomorrow": "Kom tilbage i morgen for at se nye minder",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Hent den tilhørende mobilapp via en af følgende muligheder", "mobile_app_download_onboarding_note": "Hent den tilhørende mobilapp via en af følgende muligheder",
"model": "Model", "model": "Model",
"month": "Måned", "month": "Måned",
"monthly_title_text_date_format": "MMMM å",
"more": "Mere", "more": "Mere",
"motion": "Bevægelse",
"move": "Flyt", "move": "Flyt",
"move_down": "Flyt ned", "move_down": "Flyt ned",
"move_off_locked_folder": "Flyt ud af låst mappe", "move_off_locked_folder": "Flyt ud af låst mappe",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af skrivebeskyttet elementer. Springer over", "multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af skrivebeskyttet elementer. Springer over",
"mute_memories": "Dæmp minder", "mute_memories": "Dæmp minder",
"my_albums": "Mine albummer", "my_albums": "Mine albummer",
"my_immich_description": "Kopier aktuel side som et Mit Immich link",
"my_immich_title": "Mit Immich link",
"name": "Navn", "name": "Navn",
"name_or_nickname": "Navn eller kaldenavn", "name_or_nickname": "Navn eller kaldenavn",
"name_required": "Navn er påkrævet", "name_required": "Navn er påkrævet",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Fjern mediefiler?", "remove_assets_title": "Fjern mediefiler?",
"remove_custom_date_range": "Fjern tilpasset datointerval", "remove_custom_date_range": "Fjern tilpasset datointerval",
"remove_deleted_assets": "Fjern slettede mediefiler", "remove_deleted_assets": "Fjern slettede mediefiler",
"remove_filter": "Fjern filter",
"remove_from_album": "Fjern fra album", "remove_from_album": "Fjern fra album",
"remove_from_album_action_prompt": "{count} fjernet fra albummet", "remove_from_album_action_prompt": "{count} fjernet fra albummet",
"remove_from_favorites": "Fjern fra favoritter", "remove_from_favorites": "Fjern fra favoritter",
@@ -1908,7 +1948,7 @@
"review_duplicates": "Gennemgå dubletter", "review_duplicates": "Gennemgå dubletter",
"review_large_files": "Gennemgå store filer", "review_large_files": "Gennemgå store filer",
"role": "Rolle", "role": "Rolle",
"role_editor": "Redaktør", "role_editor": "Rediger",
"role_viewer": "Seer", "role_viewer": "Seer",
"running": "Kører", "running": "Kører",
"save": "Gem", "save": "Gem",
@@ -1926,6 +1966,8 @@
"scan_settings": "Skanningsindstillinger", "scan_settings": "Skanningsindstillinger",
"scanning": "Skanner", "scanning": "Skanner",
"scanning_for_album": "Skanner efter albummer...", "scanning_for_album": "Skanner efter albummer...",
"screencast_mode_description": "Vis indikatorer for tastatur- og musehændelse på skærmen",
"screencast_mode_title": "Skift skærmcast-tilstand",
"search": "Søg", "search": "Søg",
"search_albums": "Søg i albummer", "search_albums": "Søg i albummer",
"search_by_context": "Søg efter kontekst", "search_by_context": "Søg efter kontekst",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Vandredag i Paris", "search_by_description_example": "Vandredag i Paris",
"search_by_filename": "Søg efter filnavn eller filtypenavn", "search_by_filename": "Søg efter filnavn eller filtypenavn",
"search_by_filename_example": "dvs. IMG_1234.JPG eller PNG", "search_by_filename_example": "dvs. IMG_1234.JPG eller PNG",
"search_by_full_path": "søg efter fuld sti eller mappe",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - du kan søge efter Projects, 3D, Printing, 2026 osv.",
"search_by_ocr": "Søg via OCR", "search_by_ocr": "Søg via OCR",
"search_by_ocr_example": "Søg efter tekst i dine billeder", "search_by_ocr_example": "Søg efter tekst i dine billeder",
"search_camera_lens_model": "Søg objektiv model...", "search_camera_lens_model": "Søg objektiv model...",
@@ -2101,7 +2145,7 @@
"shared_link_edit_expire_after_option_year": "{count} år", "shared_link_edit_expire_after_option_year": "{count} år",
"shared_link_edit_password_hint": "Indtast kodeordet", "shared_link_edit_password_hint": "Indtast kodeordet",
"shared_link_edit_submit_button": "Opdater link", "shared_link_edit_submit_button": "Opdater link",
"shared_link_error_server_url_fetch": "Kan ikke hente 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_day": "Udløber om {count} dag",
"shared_link_expires_days": "Udløber om {count} dage", "shared_link_expires_days": "Udløber om {count} dage",
"shared_link_expires_hour": "Udløber om {count} time", "shared_link_expires_hour": "Udløber om {count} time",
@@ -2148,6 +2192,7 @@
"show_schema": "Vis skema", "show_schema": "Vis skema",
"show_search_options": "Vis søgeindstillinger", "show_search_options": "Vis søgeindstillinger",
"show_shared_links": "Vis delte links", "show_shared_links": "Vis delte links",
"show_slideshow_metadata_overlay": "Vis billedinfo-overlay",
"show_slideshow_transition": "Vis overgang til diasshow", "show_slideshow_transition": "Vis overgang til diasshow",
"show_supporter_badge": "Supporter skilt", "show_supporter_badge": "Supporter skilt",
"show_supporter_badge_description": "Vis et supporter ikon", "show_supporter_badge_description": "Vis et supporter ikon",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Spring til mapper", "skip_to_folders": "Spring til mapper",
"skip_to_tags": "Spring til tags", "skip_to_tags": "Spring til tags",
"slideshow": "Diasshow", "slideshow": "Diasshow",
"slideshow_metadata_overlay_mode": "Overlay indhold",
"slideshow_metadata_overlay_mode_description_only": "Kun beskrivelse",
"slideshow_metadata_overlay_mode_full": "Fuld",
"slideshow_repeat": "Gentag diasshow", "slideshow_repeat": "Gentag diasshow",
"slideshow_repeat_description": "Hop tilbage til begyndelsen når diasshow stopper", "slideshow_repeat_description": "Hop tilbage til begyndelsen når diasshow stopper",
"slideshow_settings": "Diasshowindstillinger", "slideshow_settings": "Diasshowindstillinger",
@@ -2214,6 +2262,8 @@
"sync_status": "Synkroniserings Status", "sync_status": "Synkroniserings Status",
"sync_status_subtitle": "Se og administrér synkroniseringssystemet", "sync_status_subtitle": "Se og administrér synkroniseringssystemet",
"sync_upload_album_setting_subtitle": "Opret og upload dine billeder og videoer til de valgte albummer i Immich", "sync_upload_album_setting_subtitle": "Opret og upload dine billeder og videoer til de valgte albummer i Immich",
"system_theme": "Systemtema",
"system_theme_command_description": "Brug systemtemaet ({value})",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Tag mediefiler", "tag_assets": "Tag mediefiler",
"tag_created": "Oprettet tag: {tag}", "tag_created": "Oprettet tag: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Arbejdsgange", "workflows": "Arbejdsgange",
"workflows_help_text": "Arbejdsgange automatiserer handlinger på dine filer baseret på udløsere og filtre", "workflows_help_text": "Arbejdsgange automatiserer handlinger på dine filer baseret på udløsere og filtre",
"wrong_pin_code": "Forkert PIN kode", "wrong_pin_code": "Forkert PIN kode",
"x_of_total": "{x}/{total}",
"year": "År", "year": "År",
"years_ago": "{years, plural, one {# år} other {# år}} siden", "years_ago": "{years, plural, one {# år} other {# år}} siden",
"yes": "Ja", "yes": "Ja",
+62 -11
View File
@@ -1,8 +1,8 @@
{ {
"about": "Über", "about": "Über Immich",
"account": "Konto", "account": "Konto",
"account_settings": "Kontoeinstellungen", "account_settings": "Kontoeinstellungen",
"acknowledge": "Verstanden", "acknowledge": "Schließen",
"action": "Aktion", "action": "Aktion",
"action_common_update": "Aktualisieren", "action_common_update": "Aktualisieren",
"action_description": "Eine Reihe von Aktionen, die an den gefilterten Assets ausgeführt werden sollen", "action_description": "Eine Reihe von Aktionen, die an den gefilterten Assets ausgeführt werden sollen",
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "E-Mail-Benachrichtigungen aktivieren", "notification_enable_email_notifications": "E-Mail-Benachrichtigungen aktivieren",
"notification_settings": "Benachrichtigungseinstellungen", "notification_settings": "Benachrichtigungseinstellungen",
"notification_settings_description": "Benachrichtigungseinstellungen (inkl. E-Mail) verwalten", "notification_settings_description": "Benachrichtigungseinstellungen (inkl. E-Mail) verwalten",
"oauth_allow_insecure_requests": "Unsichere Anfragen erlauben",
"oauth_allow_insecure_requests_description": "WARNUNG: Dies deaktiviert die TLS-Zertifikatsvalidierung für OAuth-Anfragen und kann Sie MITM-Angriffen aussetzen.",
"oauth_auto_launch": "Auto-Start", "oauth_auto_launch": "Auto-Start",
"oauth_auto_launch_description": "Automatischer Start des OAuth-Anmeldevorgangs beim Aufrufen der Anmeldeseite", "oauth_auto_launch_description": "Automatischer Start des OAuth-Anmeldevorgangs beim Aufrufen der Anmeldeseite",
"oauth_auto_register": "Automatische Registrierung", "oauth_auto_register": "Automatische Registrierung",
@@ -274,9 +276,11 @@
"oauth_button_text": "Button-Text", "oauth_button_text": "Button-Text",
"oauth_client_secret_description": "Erforderlich für Confidential Clients oder wenn PKCE (Proof Key for Code Exchange) nicht für Public Clients unterstützt wird.", "oauth_client_secret_description": "Erforderlich für Confidential Clients oder wenn PKCE (Proof Key for Code Exchange) nicht für Public Clients unterstützt wird.",
"oauth_enable_description": "Anmeldung mit OAuth", "oauth_enable_description": "Anmeldung mit OAuth",
"oauth_end_session_url_description": "Leite den Benutzer nach dem Abmelden zu dieser URI weiter.",
"oauth_mobile_redirect_uri": "Mobile Umleitungs-URI", "oauth_mobile_redirect_uri": "Mobile Umleitungs-URI",
"oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben", "oauth_mobile_redirect_uri_override": "Mobile Umleitungs-URI überschreiben",
"oauth_mobile_redirect_uri_override_description": "Einschalten, wenn der OAuth-Anbieter keine mobile URI wie ''{callback}'' erlaubt", "oauth_mobile_redirect_uri_override_description": "Einschalten, wenn der OAuth-Anbieter keine mobile URI wie ''{callback}'' erlaubt",
"oauth_prompt_description": "Eingabe Parameter (z. B. Konto auswählen, Login, Einwilligung)",
"oauth_role_claim": "Rollen-Claim", "oauth_role_claim": "Rollen-Claim",
"oauth_role_claim_description": "Gewähre automatisch Admin-Zugriff basierend auf dem Vorhandensein dieses Claims. Der Claim kann entweder 'user' oder 'admin' sein.", "oauth_role_claim_description": "Gewähre automatisch Admin-Zugriff basierend auf dem Vorhandensein dieses Claims. Der Claim kann entweder 'user' oder 'admin' sein.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,16 +885,14 @@
"cutoff_date_description": "Behalte Fotos der letzten…", "cutoff_date_description": "Behalte Fotos der letzten…",
"cutoff_day": "{count, plural, one {Tag} other {Tage}}", "cutoff_day": "{count, plural, one {Tag} other {Tage}}",
"cutoff_year": "{count, plural, one {Jahr} other {Jahre}}", "cutoff_year": "{count, plural, one {Jahr} other {Jahre}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Dunkel", "dark": "Dunkel",
"dark_theme": "Auf dunkle Ansicht umschalten", "dark_theme": "Auf dunkle Ansicht umschalten",
"date": "Datum", "date": "Datum",
"date_after": "Datum nach", "date_after": "Datum nach",
"date_and_time": "Datum und Zeit", "date_and_time": "Datum und Zeit",
"date_before": "Datum vor", "date_before": "Datum vor",
"date_format": "E d. LLL y • hh:mm", "date_of_birth": "Geburtstag",
"date_of_birth_saved": "Das Geburtsdatum wurde erfolgreich gespeichert", "date_of_birth_saved": "Der Geburtstag wurde erfolgreich gespeichert",
"date_range": "Datumsbereich", "date_range": "Datumsbereich",
"day": "Tag", "day": "Tag",
"days": "Tage", "days": "Tage",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Bewege Fotos und Videos, die bereits gesichert wurden, in den Papierkorb auf deinem Gerät. Die Kopie auf dem Server bleibt unberührt.", "free_up_space_description": "Bewege Fotos und Videos, die bereits gesichert wurden, in den Papierkorb auf deinem Gerät. Die Kopie auf dem Server bleibt unberührt.",
"free_up_space_settings_subtitle": "Gerätespeicher freigeben", "free_up_space_settings_subtitle": "Gerätespeicher freigeben",
"full_path": "Vollständiger Pfad: {path}", "full_path": "Vollständiger Pfad: {path}",
"full_path_or_folder": "Voller Ordnerpfad oder Ordner",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Diese Funktion lädt externe Quellen von Google, um zu funktionieren.", "gcast_enabled_description": "Diese Funktion lädt externe Quellen von Google, um zu funktionieren.",
"general": "Allgemein", "general": "Allgemein",
@@ -1370,7 +1373,7 @@
"last": "Letzte", "last": "Letzte",
"last_months": "{count, plural, one {Letzter Monat} other {Letzte # Monate}}", "last_months": "{count, plural, one {Letzter Monat} other {Letzte # Monate}}",
"last_seen": "Zuletzt gesehen", "last_seen": "Zuletzt gesehen",
"latest_version": "Aktuelle Version", "latest_version": "Neuste Version",
"latitude": "Breitengrad", "latitude": "Breitengrad",
"leave": "Verlassen", "leave": "Verlassen",
"leave_album": "Album verlassen", "leave_album": "Album verlassen",
@@ -1392,11 +1395,13 @@
"light_theme": "Auf helle Ansicht umschalten", "light_theme": "Auf helle Ansicht umschalten",
"like": "Gefällt mir", "like": "Gefällt mir",
"like_deleted": "Like gelöscht", "like_deleted": "Like gelöscht",
"link": "Link",
"link_motion_video": "Bewegungsvideo verknüpfen", "link_motion_video": "Bewegungsvideo verknüpfen",
"link_to_docs": "Weitere Informationen finden Sie in der <link>Dokumentation</link>.", "link_to_docs": "Weitere Informationen finden Sie in der <link>Dokumentation</link>.",
"link_to_oauth": "Mit OAuth verknüpfen", "link_to_oauth": "Mit OAuth verknüpfen",
"linked_oauth_account": "Verknüpftes OAuth-Konto", "linked_oauth_account": "Verknüpftes OAuth-Konto",
"list": "Liste", "list": "Liste",
"live": "Live",
"loading": "Laden", "loading": "Laden",
"loading_search_results_failed": "Laden von Suchergebnissen fehlgeschlagen", "loading_search_results_failed": "Laden von Suchergebnissen fehlgeschlagen",
"local": "Lokal", "local": "Lokal",
@@ -1494,7 +1499,7 @@
"map_assets_in_bounds": "{count, plural, =0 {Keine Fotos in diesem Gebiet} one {# Foto} other {# Fotos}}", "map_assets_in_bounds": "{count, plural, =0 {Keine Fotos in diesem Gebiet} one {# Foto} other {# Fotos}}",
"map_cannot_get_user_location": "Standort konnte nicht ermittelt werden", "map_cannot_get_user_location": "Standort konnte nicht ermittelt werden",
"map_location_dialog_yes": "Ja", "map_location_dialog_yes": "Ja",
"map_location_picker_page_use_location": "Aufnahmeort verwenden", "map_location_picker_page_use_location": "Diesen Standort verwenden",
"map_location_service_disabled_content": "Ortungsdienste müssen aktiviert sein, um Inhalte am aktuellen Standort anzuzeigen. Willst du die Ortungsdienste jetzt aktivieren?", "map_location_service_disabled_content": "Ortungsdienste müssen aktiviert sein, um Inhalte am aktuellen Standort anzuzeigen. Willst du die Ortungsdienste jetzt aktivieren?",
"map_location_service_disabled_title": "Ortungsdienste deaktiviert", "map_location_service_disabled_title": "Ortungsdienste deaktiviert",
"map_marker_for_images": "Kartenmarkierung für Bilder, die in {city}, {country} aufgenommen wurden", "map_marker_for_images": "Kartenmarkierung für Bilder, die in {city}, {country} aufgenommen wurden",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Alle als gelesen markiert", "marked_all_as_read": "Alle als gelesen markiert",
"matches": "Treffer", "matches": "Treffer",
"matching_assets": "Passende Dateien", "matching_assets": "Passende Dateien",
"media_chrome": {
"auto": "Auto",
"captions": "Untertitel",
"captions_off": "Aus",
"closed_captions": "Untertitel",
"decode_error": "Dekodierungsfehler",
"disable_captions": "Untertitel deaktivieren",
"enable_captions": "Untertitel aktivieren",
"enter_fullscreen_mode": "Vollbildmodus aktivieren",
"exit_fullscreen_mode": "Vollbildmodus beenden",
"loop": "Endlosschleife",
"media_error_description": "Ein Medienfehler hat die Wiedergabe abgebrochen. Das Medium könnte beschädigt sein oder Ihr Browser unterstützt dieses Format nicht.",
"media_loading": "Medien werden geladen",
"mute": "Stumm schalten",
"network_error": "Netzwerkfehler",
"network_error_description": "Ein Netzwerkfehler hat dazu geführt, dass der Medien-Download fehlgeschlagen ist.",
"not_supported_error": "Quelle nicht unterstützt",
"playback_rate": "Wiedergabegeschwindigkeit",
"playback_rate_current": "aktuelle Wiedergabegeschwindigkeit",
"playback_rate_value": "Wiedergabegeschwindigkeit {playbackRate}",
"playback_time": "Wiedergabezeit",
"quality": "Qualität",
"second": "Sekunde",
"seconds": "Sekunden",
"time_value_of_total_time": "{currentTime} von {totalTime}",
"time_value_remaining": "{time} verbleibend",
"unmute": "Stummschaltung aufheben",
"unsupported_error_description": "Ein nicht unterstützter Fehler ist aufgetreten. Der Server oder das Netzwerk ist fehlgeschlagen, oder Ihr Browser unterstützt dieses Format nicht.",
"video_not_loaded_unknown_time": "Video nicht geladen, unbekannte Zeit.",
"video_player": "Videoplayer",
"volume": "Lautstärke"
},
"media_type": "Medientyp", "media_type": "Medientyp",
"memories": "Erinnerungen", "memories": "Erinnerungen",
"memories_all_caught_up": "Alles aufgeholt", "memories_all_caught_up": "Alles aufgeholt",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Herunterladen der mobilen Begleiter-App über einen der folgenden Möglichkeiten", "mobile_app_download_onboarding_note": "Herunterladen der mobilen Begleiter-App über einen der folgenden Möglichkeiten",
"model": "Modell", "model": "Modell",
"month": "Monat", "month": "Monat",
"monthly_title_text_date_format": "MMMM y",
"more": "Mehr", "more": "Mehr",
"motion": "Bewegung",
"move": "Verschieben", "move": "Verschieben",
"move_down": "Nach unten", "move_down": "Nach unten",
"move_off_locked_folder": "Aus dem gesperrten Ordner verschieben", "move_off_locked_folder": "Aus dem gesperrten Ordner verschieben",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Der Aufnahmeort von schreibgeschützten Inhalten kann nicht verändert werden, überspringen", "multiselect_grid_edit_gps_err_read_only": "Der Aufnahmeort von schreibgeschützten Inhalten kann nicht verändert werden, überspringen",
"mute_memories": "Erinnerungen stumm schalten", "mute_memories": "Erinnerungen stumm schalten",
"my_albums": "Meine Alben", "my_albums": "Meine Alben",
"my_immich_description": "Diese Seite als „Mein Immich“-Link kopieren",
"my_immich_title": "Mein Immich-Link",
"name": "Name", "name": "Name",
"name_or_nickname": "Name oder Nickname", "name_or_nickname": "Name oder Nickname",
"name_required": "Name ist erforderlich", "name_required": "Name ist erforderlich",
@@ -1749,7 +1788,7 @@
"places_count": "{count, plural, one {{count, number} Ort} other {{count, number} Orte}}", "places_count": "{count, plural, one {{count, number} Ort} other {{count, number} Orte}}",
"play": "Abspielen", "play": "Abspielen",
"play_memories": "Erinnerungen abspielen", "play_memories": "Erinnerungen abspielen",
"play_motion_photo": "Bewegte Bilder abspielen", "play_motion_photo": "Live-Foto abspielen",
"play_or_pause_video": "Video abspielen oder pausieren", "play_or_pause_video": "Video abspielen oder pausieren",
"play_original_video": "Originales Video abspielen", "play_original_video": "Originales Video abspielen",
"play_original_video_setting_description": "Bevorzugen die Wiedergabe von Originalvideos gegenüber transkodierten Videos. Wenn das Original nicht kompatibel ist, wird es möglicherweise nicht korrekt wiedergegeben.", "play_original_video_setting_description": "Bevorzugen die Wiedergabe von Originalvideos gegenüber transkodierten Videos. Wenn das Original nicht kompatibel ist, wird es möglicherweise nicht korrekt wiedergegeben.",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Dateien entfernen?", "remove_assets_title": "Dateien entfernen?",
"remove_custom_date_range": "Benutzerdefinierten Datumsbereich entfernen", "remove_custom_date_range": "Benutzerdefinierten Datumsbereich entfernen",
"remove_deleted_assets": "Offline-Dateien entfernen", "remove_deleted_assets": "Offline-Dateien entfernen",
"remove_filter": "Filter entfernen",
"remove_from_album": "Aus Album entfernen", "remove_from_album": "Aus Album entfernen",
"remove_from_album_action_prompt": "{count} vom Album entfernt", "remove_from_album_action_prompt": "{count} vom Album entfernt",
"remove_from_favorites": "Aus Favoriten entfernen", "remove_from_favorites": "Aus Favoriten entfernen",
@@ -1926,6 +1966,8 @@
"scan_settings": "Scan-Einstellungen", "scan_settings": "Scan-Einstellungen",
"scanning": "Scanne", "scanning": "Scanne",
"scanning_for_album": "Nach Alben scannen...", "scanning_for_album": "Nach Alben scannen...",
"screencast_mode_description": "Tastatur- und Mausereignisindikatoren auf dem Bildschirm anzeigen",
"screencast_mode_title": "Bildschirmübertragungsmodus umschalten",
"search": "Suche", "search": "Suche",
"search_albums": "Album suchen", "search_albums": "Album suchen",
"search_by_context": "Suche nach Kontext", "search_by_context": "Suche nach Kontext",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Wandern in Sapa", "search_by_description_example": "Wandern in Sapa",
"search_by_filename": "Suche nach Dateiname oder -erweiterung", "search_by_filename": "Suche nach Dateiname oder -erweiterung",
"search_by_filename_example": "z.B. IMG_1234.JPG oder PNG", "search_by_filename_example": "z.B. IMG_1234.JPG oder PNG",
"search_by_full_path": "Suchen nach Ordnerpfad oder Ordner",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - Sie können nach Projekten, 3D, Drucken, 2026 usw. suchen.",
"search_by_ocr": "Suche per OCR", "search_by_ocr": "Suche per OCR",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Suche nach Kameralinse...", "search_camera_lens_model": "Suche nach Kameralinse...",
@@ -2148,6 +2192,7 @@
"show_schema": "Schema anzeigen", "show_schema": "Schema anzeigen",
"show_search_options": "Suchoptionen anzeigen", "show_search_options": "Suchoptionen anzeigen",
"show_shared_links": "Zeige geteilte Links", "show_shared_links": "Zeige geteilte Links",
"show_slideshow_metadata_overlay": "Bildinformationen anzeigen",
"show_slideshow_transition": "Slideshow-Übergang anzeigen", "show_slideshow_transition": "Slideshow-Übergang anzeigen",
"show_supporter_badge": "Unterstützerabzeichen", "show_supporter_badge": "Unterstützerabzeichen",
"show_supporter_badge_description": "Zeige Unterstützerabzeichen", "show_supporter_badge_description": "Zeige Unterstützerabzeichen",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Springe zu Ordnern", "skip_to_folders": "Springe zu Ordnern",
"skip_to_tags": "Springe zu Tags", "skip_to_tags": "Springe zu Tags",
"slideshow": "Diashow", "slideshow": "Diashow",
"slideshow_metadata_overlay_mode": "Overlay Inhalt",
"slideshow_metadata_overlay_mode_description_only": "Nur Beschreibung",
"slideshow_metadata_overlay_mode_full": "Alles",
"slideshow_repeat": "Slideshow wiederholen", "slideshow_repeat": "Slideshow wiederholen",
"slideshow_repeat_description": "Wenn Slideshow beendet, zum Anfang zurückkehren", "slideshow_repeat_description": "Wenn Slideshow beendet, zum Anfang zurückkehren",
"slideshow_settings": "Diashow-Einstellungen", "slideshow_settings": "Diashow-Einstellungen",
@@ -2189,7 +2237,7 @@
"state": "Bundesland / Provinz", "state": "Bundesland / Provinz",
"status": "Status", "status": "Status",
"stop_casting": "Übertragung stoppen", "stop_casting": "Übertragung stoppen",
"stop_motion_photo": "Stop-Motion-Foto", "stop_motion_photo": "Live-Foto stoppen",
"stop_photo_sharing": "Deine Fotos nicht mehr teilen?", "stop_photo_sharing": "Deine Fotos nicht mehr teilen?",
"stop_photo_sharing_description": "{partner} wird keinen Zugriff mehr auf deine Fotos haben.", "stop_photo_sharing_description": "{partner} wird keinen Zugriff mehr auf deine Fotos haben.",
"stop_sharing_photos_with_user": "Aufhören Fotos mit diesem Benutzer zu teilen", "stop_sharing_photos_with_user": "Aufhören Fotos mit diesem Benutzer zu teilen",
@@ -2214,6 +2262,8 @@
"sync_status": "Synchronisierungstatus", "sync_status": "Synchronisierungstatus",
"sync_status_subtitle": "Synchronisierungssystem anzeigen und bearbeiten", "sync_status_subtitle": "Synchronisierungssystem anzeigen und bearbeiten",
"sync_upload_album_setting_subtitle": "Erstelle und lade deine ausgewählten Fotos und Videos in die ausgewählten Alben auf Immich hoch", "sync_upload_album_setting_subtitle": "Erstelle und lade deine ausgewählten Fotos und Videos in die ausgewählten Alben auf Immich hoch",
"system_theme": "Systemthema",
"system_theme_command_description": "Systemdesign verwenden ({value})",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Dateien taggen", "tag_assets": "Dateien taggen",
"tag_created": "Tag erstellt: {tag}", "tag_created": "Tag erstellt: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Workflows", "workflows": "Workflows",
"workflows_help_text": "Workflows automatisieren Aktionen auf deinen Dateien, basierend auf Auslösern und Filtern", "workflows_help_text": "Workflows automatisieren Aktionen auf deinen Dateien, basierend auf Auslösern und Filtern",
"wrong_pin_code": "PIN-Code falsch", "wrong_pin_code": "PIN-Code falsch",
"x_of_total": "{x}/{total}",
"year": "Jahr", "year": "Jahr",
"years_ago": "Vor {years, plural, one {einem Jahr} other {# Jahren}}", "years_ago": "Vor {years, plural, one {einem Jahr} other {# Jahren}}",
"yes": "Ja", "yes": "Ja",
+46 -14
View File
@@ -1,19 +1,19 @@
{ {
"about": "Über", "about": "Über",
"account": "Konto", "account": "Konto",
"account_settings": "Konto Einstellungen", "account_settings": "Konto Istellige",
"acknowledge": "Bestätigä", "acknowledge": "Bestätigä",
"action": "Aktion", "action": "Aktion",
"action_common_update": "Update", "action_common_update": "Update",
"action_description": "Aktionä, wo uf de gefilterti Mediä ausgführt werdä solled", "action_description": "Aktionä, wo uf de gefilterti Mediä ausgführt werdä solled",
"actions": "Aktionen", "actions": "Aktionä",
"active": "Aktiv", "active": "Aktiv",
"active_count": "Aktiv: {count}", "active_count": "Aktiv: {count}",
"activity": "Aktivität", "activity": "Aktivität",
"activity_changed": "Aktivität ist {enabled, select, true {aktiviert} other {deaktiviert}}", "activity_changed": "Aktivität ist {enabled, select, true {aktiviert} other {deaktiviert}}",
"add": "Hinzuefüge", "add": "Hinzuefüge",
"add_a_description": "Beschreibung hinzufügen", "add_a_description": "Beschribig aege",
"add_a_location": "Standort hinzuefügä", "add_a_location": "Standort afüege",
"add_a_name": "Namä hinzefügä", "add_a_name": "Namä hinzefügä",
"add_a_title": "Titel hinzufeügä", "add_a_title": "Titel hinzufeügä",
"add_action": "Aktion hinzuefügä", "add_action": "Aktion hinzuefügä",
@@ -38,10 +38,10 @@
"add_to_album_toggle": "Auswahl umschalten für {album}", "add_to_album_toggle": "Auswahl umschalten für {album}",
"add_to_albums": "Zu Alben hinzufügen", "add_to_albums": "Zu Alben hinzufügen",
"add_to_albums_count": "Zu Alben hinzufügen ({count})", "add_to_albums_count": "Zu Alben hinzufügen ({count})",
"add_to_bottom_bar": "Hinzufügen zu", "add_to_bottom_bar": "zueege zu",
"add_to_shared_album": "Zu geteiltem Album hinzufügen", "add_to_shared_album": "Zu geteiltem Album hinzufügen",
"add_upload_to_stack": "Upload zum Stapel hinzufügen", "add_upload_to_stack": "Upload zum Stapel hinzufügen",
"add_url": "URL hinzufügen", "add_url": "URL zueege",
"add_workflow_step": "Workflow-Schritt hinzufügen", "add_workflow_step": "Workflow-Schritt hinzufügen",
"added_to_archive": "Zum Archiv hinzugefügt", "added_to_archive": "Zum Archiv hinzugefügt",
"added_to_favorites": "Zu Favoriten hinzugefügt", "added_to_favorites": "Zu Favoriten hinzugefügt",
@@ -54,7 +54,7 @@
"authentication_settings_description": "Passwort-, OAuth- und andere Authentifizierungseinstellungen verwalten", "authentication_settings_description": "Passwort-, OAuth- und andere Authentifizierungseinstellungen verwalten",
"authentication_settings_disable_all": "Bist du sicher, dass du alle Loginmethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.", "authentication_settings_disable_all": "Bist du sicher, dass du alle Loginmethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.",
"authentication_settings_reenable": "Nutze einen <link>Server-Befehl</link> zur Reaktivierung.", "authentication_settings_reenable": "Nutze einen <link>Server-Befehl</link> zur Reaktivierung.",
"background_task_job": "Hintergrundaufgaben", "background_task_job": "Hintergrundfarbä",
"backup_database": "Datenbanksicherung erstellen", "backup_database": "Datenbanksicherung erstellen",
"backup_database_enable_description": "Datenbank regelmässig sichern", "backup_database_enable_description": "Datenbank regelmässig sichern",
"backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen", "backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen",
@@ -64,7 +64,7 @@
"backup_onboarding_description": "Eine <backblaze-link>3-2-1 Sicherungsstrategie</backblaze-link> wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Sicherungslösung zu haben.", "backup_onboarding_description": "Eine <backblaze-link>3-2-1 Sicherungsstrategie</backblaze-link> wird empfohlen, um deine Daten zu schützen. Du solltest sowohl Kopien deiner hochgeladenen Fotos/Videos als auch der Immich-Datenbank aufbewahren, um eine umfassende Sicherungslösung zu haben.",
"backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der <link>Dokumentation</link>.", "backup_onboarding_footer": "Weitere Informationen zum Sichern von Immich findest du in der <link>Dokumentation</link>.",
"backup_onboarding_parts_title": "Eine 3-2-1-Sicherung umfasst:", "backup_onboarding_parts_title": "Eine 3-2-1-Sicherung umfasst:",
"backup_onboarding_title": "Backups", "backup_onboarding_title": "Sicherige",
"backup_settings": "Einstellungen für Datenbanksicherung", "backup_settings": "Einstellungen für Datenbanksicherung",
"backup_settings_description": "Einstellungen zur regelmässigen Sicherung der Datenbank.", "backup_settings_description": "Einstellungen zur regelmässigen Sicherung der Datenbank.",
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}", "cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
@@ -76,16 +76,16 @@
"confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?", "confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?",
"confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN-Code von {user} zurücksetzen möchtest?", "confirm_user_pin_code_reset": "Bist du sicher, dass du den PIN-Code von {user} zurücksetzen möchtest?",
"copy_config_to_clipboard_description": "Aktuelle Systemkonfiguration als JSON-Objekt in die Zwischenablage kopieren", "copy_config_to_clipboard_description": "Aktuelle Systemkonfiguration als JSON-Objekt in die Zwischenablage kopieren",
"create_job": "Aufgabe erstellen", "create_job": "Ufgab erstelle",
"cron_expression": "Cron-Ausdruck", "cron_expression": "Cron-Ausdruck",
"cron_expression_description": "Setze das Scanintervall im Cron-Format. Für mehr Informationen, siehe z. B. <link>Crontab Guru</link>", "cron_expression_description": "Setze das Scanintervall im Cron-Format. Für mehr Informationen, siehe z. B. <link>Crontab Guru</link>",
"cron_expression_presets": "Vorlagen für Cron-Ausdrücke", "cron_expression_presets": "Vorlagen für Cron-Ausdrücke",
"disable_login": "Login deaktivieren", "disable_login": "Login deaktivierä",
"duplicate_detection_job_description": "Verwendet maschinelles Lernen auf den Dateien, um Duplikate zu finden. Baut auf der intelligenten Suche auf", "duplicate_detection_job_description": "Verwendet maschinelles Lernen auf den Dateien, um Duplikate zu finden. Baut auf der intelligenten Suche auf",
"exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen deiner Bibliothek ignoriert werden. Dies ist nützlich, wenn du Ordner hast, die Dateien enthalten, die du nicht importieren möchtest, wie z. B. RAW-Dateien.", "exclusion_pattern_description": "Mit Ausschlussmustern können Dateien und Ordner beim Scannen deiner 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": "Aktuelle Systemkonfiguration als JSON-Datei herunterladen", "export_config_as_json_description": "Aktuelle Systemkonfiguration als JSON-Datei herunterladen",
"external_libraries_page_description": "Externe Bibliotheksseite für Administratoren", "external_libraries_page_description": "Externe Bibliotheksseite für Administratoren",
"face_detection": "Gesichtserkennung", "face_detection": "Gsichtserkennig",
"face_detection_description": "Diese Aufgabe erkennt mit maschinellem Lernen Gesichter in Dateien. Bei Videos wird nur das Vorschaubild verwendet. „Aktualisieren“ verarbeitet alle Dateien neu. „Zurücksetzen“ setzt zusätzlich alle Gesichter zurück. „Fehlende“ fügt nur nicht verarbeitete Dateien in die Warteschlange ein. Erfasste Gesichter werden zur Gesichtsidentifizierung in die Warteschlange eingefügt, um sie in bestehende oder neue Personen zu gruppieren.", "face_detection_description": "Diese Aufgabe erkennt mit maschinellem Lernen Gesichter in Dateien. Bei Videos wird nur das Vorschaubild verwendet. „Aktualisieren“ verarbeitet alle Dateien neu. „Zurücksetzen“ setzt zusätzlich alle Gesichter zurück. „Fehlende“ fügt nur nicht verarbeitete Dateien in die Warteschlange ein. Erfasste Gesichter werden zur Gesichtsidentifizierung in die Warteschlange eingefügt, um sie in bestehende oder neue Personen zu gruppieren.",
"facial_recognition_job_description": "Diese Aufgabe gruppiert im Anschluss an die Gesichtserkennung die erkannten Gesichter zu Personen. „Zurücksetzen“ gruppiert alle Gesichter neu, während „Fehlende“ Gesichter ohne Zuordnung in die Warteschlange stellt.", "facial_recognition_job_description": "Diese Aufgabe gruppiert im Anschluss an die Gesichtserkennung die erkannten Gesichter zu Personen. „Zurücksetzen“ gruppiert alle Gesichter neu, während „Fehlende“ Gesichter ohne Zuordnung in die Warteschlange stellt.",
"failed_job_command": "Befehl {command} ist für Aufgabe {job} fehlgeschlagen", "failed_job_command": "Befehl {command} ist für Aufgabe {job} fehlgeschlagen",
@@ -99,7 +99,7 @@
"image_fullsize_title": "Hochauflösende Vorschaueinstellungen", "image_fullsize_title": "Hochauflösende Vorschaueinstellungen",
"image_prefer_embedded_preview": "Eingebettete Vorschau bevorzugen", "image_prefer_embedded_preview": "Eingebettete Vorschau bevorzugen",
"image_prefer_embedded_preview_setting_description": "Verwende eingebettete Vorschaubilder in RAW-Fotos als Grundlage für die Bildverarbeitung, sofern diese zur Verfügung stehen. Dies kann bei einigen Bildern genauere Farben erzeugen, allerdings ist die Qualität der Vorschau kameraabhängig und das Bild kann mehr Kompressionsartefakte aufweisen.", "image_prefer_embedded_preview_setting_description": "Verwende eingebettete Vorschaubilder in RAW-Fotos als Grundlage für die Bildverarbeitung, sofern diese zur Verfügung stehen. Dies kann bei einigen Bildern genauere Farben erzeugen, allerdings ist die Qualität der Vorschau kameraabhängig und das Bild kann mehr Kompressionsartefakte aufweisen.",
"image_prefer_wide_gamut": "Breites Spektrum bevorzugen", "image_prefer_wide_gamut": "weiterer Farbraum bevorzugen",
"image_prefer_wide_gamut_setting_description": "Display P3 (DCI-P3) für Vorschaubilder verwenden. Dadurch bleibt die Lebendigkeit von Bildern mit breiten Farbräumen besser erhalten, aber die Bilder können auf älteren Geräten mit einer älteren Browserversion etwas anders aussehen. sRGB-Bilder werden im sRGB-Format belassen, um Farbverschiebungen zu vermeiden.", "image_prefer_wide_gamut_setting_description": "Display P3 (DCI-P3) für Vorschaubilder verwenden. Dadurch bleibt die Lebendigkeit von Bildern mit breiten Farbräumen besser erhalten, aber die Bilder können auf älteren Geräten mit einer älteren Browserversion etwas anders aussehen. sRGB-Bilder werden im sRGB-Format belassen, um Farbverschiebungen zu vermeiden.",
"image_preview_description": "Mittelgrosses Bild mit entfernten Metadaten, das bei der Betrachtung einer einzelnen Datei und für maschinelles Lernen verwendet wird", "image_preview_description": "Mittelgrosses Bild mit entfernten Metadaten, das bei der Betrachtung einer einzelnen Datei und für maschinelles Lernen verwendet wird",
"image_preview_quality_description": "Vorschauqualität von 1-100. Ein höherer Wert ist besser, erzeugt dadurch aber grössere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen. Ein niedriger Wert kann dafür aber die Qualität des maschinellen Lernens beeinträchtigen.", "image_preview_quality_description": "Vorschauqualität von 1-100. Ein höherer Wert ist besser, erzeugt dadurch aber grössere Dateien und kann die Reaktionsfähigkeit der App beeinträchtigen. Ein niedriger Wert kann dafür aber die Qualität des maschinellen Lernens beeinträchtigen.",
@@ -107,7 +107,7 @@
"image_progressive": "Fortlaufend", "image_progressive": "Fortlaufend",
"image_progressive_description": "JPEG-Bilder schrittweise kodieren, um ein stufenweises Laden zu ermöglichen. Dies hat keine Auswirkungen auf WebP-Bilder.", "image_progressive_description": "JPEG-Bilder schrittweise kodieren, um ein stufenweises Laden zu ermöglichen. Dies hat keine Auswirkungen auf WebP-Bilder.",
"image_quality": "Qualität", "image_quality": "Qualität",
"image_resolution": "Auflösung", "image_resolution": "Uflösig",
"image_resolution_description": "Höhere Auflösungen können mehr Details erhalten, benötigen aber mehr Zeit für die Kodierung, haben grössere Dateigrössen und können die Reaktionsfähigkeit der App beeinträchtigen.", "image_resolution_description": "Höhere Auflösungen können mehr Details erhalten, benötigen aber mehr Zeit für die Kodierung, haben grössere Dateigrössen und können die Reaktionsfähigkeit der App beeinträchtigen.",
"image_settings": "Bildeinstellungen", "image_settings": "Bildeinstellungen",
"image_settings_description": "Qualität und Auflösung der generierten Bilder verwalten", "image_settings_description": "Qualität und Auflösung der generierten Bilder verwalten",
@@ -120,6 +120,8 @@
"job_not_concurrency_safe": "Diese Aufgabe kann nicht mehrmals parallel laufen gelassen werden.", "job_not_concurrency_safe": "Diese Aufgabe kann nicht mehrmals parallel laufen gelassen werden.",
"job_settings": "Aufgabeneinstellungen", "job_settings": "Aufgabeneinstellungen",
"job_settings_description": "Gleichzeitige Ausführung von Aufgaben verwalten", "job_settings_description": "Gleichzeitige Ausführung von Aufgaben verwalten",
"jobs_delayed": "Qualität",
"jobs_failed": "{jobCount, plural, other {# failed}}",
"jobs_over_time": "Jobs im Laufe der Zeit", "jobs_over_time": "Jobs im Laufe der Zeit",
"library_created": "Bibliothek erstellt: {library}", "library_created": "Bibliothek erstellt: {library}",
"library_deleted": "Bibliothek gelöscht", "library_deleted": "Bibliothek gelöscht",
@@ -127,6 +129,36 @@
"library_folder_description": "Wähle einen Ordner zum Importieren. Dieser Ordner wird inklusive Unterordnern nach Bildern und Videos durchsucht.", "library_folder_description": "Wähle einen Ordner zum Importieren. Dieser Ordner wird inklusive Unterordnern nach Bildern und Videos durchsucht.",
"library_remove_exclusion_pattern_prompt": "Bilst du sicher, dass du dieses Ausschlussmuster entfernen möchtest?", "library_remove_exclusion_pattern_prompt": "Bilst du sicher, dass du dieses Ausschlussmuster entfernen möchtest?",
"library_remove_folder_prompt": "Bist du sicher, dass du diesen Import-Ordner entfernen möchtest?", "library_remove_folder_prompt": "Bist du sicher, dass du diesen Import-Ordner entfernen möchtest?",
"library_scanning": "Regelmässiges Scannen" "library_scanning": "Regelmässiges Scannen",
"library_scanning_description": "Regelmässiges Scannen der Bibliothek konfigurieren",
"library_scanning_enable_description": "Regelmässiges Scannen der Bibliothek aktivieren",
"library_settings": "Externe Bibliothek",
"library_settings_description": "Einstellungen für externe Bibliotheken verwalten",
"library_tasks_description": "Externe Bibliotheken nach neuen und/oder geänderten Assets durchsuchen",
"library_updated": "Aktualisierte Bibliothek",
"library_watching_enable_description": "Änderungen an Dateien in externen Bibliotheken überwachen",
"library_watching_settings": "Bibliothek beobachten [EXPERIMENTELL]",
"library_watching_settings_description": "Automatisch nach geänderten Dateien suchen",
"logging_enable_description": "Logging aktivieren",
"logging_level_description": "Wenn aktiviert, welches Logging-Level soll verwendet werden.",
"logging_settings": "Logging",
"machine_learning_availability_checks": "Verfügbarkeitsüberprüfungen",
"machine_learning_availability_checks_description": "Verfügbare Machine-Learning-Server automatisch erkennen und bevorzugen",
"machine_learning_availability_checks_enabled": "Verfügbarkeitsüberprüfungen aktivieren",
"machine_learning_availability_checks_interval": "Überprüfungsintervall",
"machine_learning_availability_checks_interval_description": "Intervall in Millisekunden zwischen Verfügbarkeitsüberprüfungen",
"machine_learning_availability_checks_timeout": "Zeitüberschreitung der Anfrage",
"machine_learning_availability_checks_timeout_description": "Timeout in Millisekunden für Verfügbarkeitsüberprüfungen",
"machine_learning_clip_model": "CLIP Model",
"machine_learning_clip_model_description": "Der Name eines der <link>hier</link> gelisteten CLIP-Modelle. Hinweis: Nach dem Ändern eines Modells muss der Smart Search-Vorgang für alle Bilder erneut gestartet werden.",
"machine_learning_duplicate_detection": "Duplikatserkennung",
"machine_learning_duplicate_detection_enabled": "Duplikatserkennung aktivieren",
"machine_learning_duplicate_detection_enabled_description": "Falls deaktiviert, werden exakt identische Assets weiterhin dedupliziert.",
"machine_learning_duplicate_detection_setting_description": "Verwende CLIP embeddings um wahrscheinliche Dublikate zu finden",
"machine_learning_enabled": "Maschinelles Lernen aktivieren",
"machine_learning_enabled_description": "Falls deaktiviert, werden alle ML-Funktionen deaktiviert, unabhängig von den untenstehenden Einstellungen.",
"machine_learning_facial_recognition": "Gesichtserkennung",
"machine_learning_facial_recognition_description": "Gesichter in Bildern erkennen, identifizieren und gruppieren",
"machine_learning_facial_recognition_model": "Model für die Gesichtserkennung"
} }
} }
+11 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Ενεργοποίηση ειδοποιήσεων μέσω email", "notification_enable_email_notifications": "Ενεργοποίηση ειδοποιήσεων μέσω email",
"notification_settings": "Ρυθμίσεις ειδοποιήσεων", "notification_settings": "Ρυθμίσεις ειδοποιήσεων",
"notification_settings_description": "Διαχείρηση ρυθμίσεων ειδοποιήσεων, συμπεριλαμβανομένου του email", "notification_settings_description": "Διαχείρηση ρυθμίσεων ειδοποιήσεων, συμπεριλαμβανομένου του email",
"oauth_allow_insecure_requests": "Να επιτρέπονται μη ασφαλή αιτήματα",
"oauth_allow_insecure_requests_description": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό απενεργοποιεί την επαλήθευση πιστοποιητικών TLS για αιτήματα OAuth και μπορεί να σας εκθέσει σε επιθέσεις MITM.",
"oauth_auto_launch": "Αυτόματη εκκίνηση", "oauth_auto_launch": "Αυτόματη εκκίνηση",
"oauth_auto_launch_description": "Αυτόματη εκκίνιση της υπηρεσίας OAuth με την πλοήγηση στην σελίδα σύνδεσης", "oauth_auto_launch_description": "Αυτόματη εκκίνιση της υπηρεσίας OAuth με την πλοήγηση στην σελίδα σύνδεσης",
"oauth_auto_register": "Αυτόματη καταχώρηση", "oauth_auto_register": "Αυτόματη καταχώρηση",
@@ -274,9 +276,11 @@
"oauth_button_text": "Κείμενο κουμπιού", "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_enable_description": "Σύνδεση με OAuth",
"oauth_end_session_url_description": "Ανακατεύθυνση του χρήστη σε αυτό το URI όταν αποσυνδέεται.",
"oauth_mobile_redirect_uri": "URI Ανακατεύθυνσης για κινητά τηλέφωνα", "oauth_mobile_redirect_uri": "URI Ανακατεύθυνσης για κινητά τηλέφωνα",
"oauth_mobile_redirect_uri_override": "Προσπέλαση URI ανακατεύθυνσης για κινητά τηλέφωνα", "oauth_mobile_redirect_uri_override": "Προσπέλαση URI ανακατεύθυνσης για κινητά τηλέφωνα",
"oauth_mobile_redirect_uri_override_description": "Ενεργοποιήστε το όταν ο πάροχος OAuth δεν επιτρέπει μια URI για κινητά, όπως το ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Ενεργοποιήστε το όταν ο πάροχος OAuth δεν επιτρέπει μια URI για κινητά, όπως το ''{callback}''",
"oauth_prompt_description": "Παράμετρος προτροπής (π.χ. επιλογή_λογαριασμού, σύνδεση, συναίνεση)",
"oauth_role_claim": "Ανάθεση ρόλου", "oauth_role_claim": "Ανάθεση ρόλου",
"oauth_role_claim_description": "Αυτόματη παραχώρηση πρόσβασης διαχειριστή με βάση την ύπαρξη αυτής της ανάθεσης. Η ανάθεση μπορεί να είναι είτε 'χρήστης' είτε 'διαχειριστής'.", "oauth_role_claim_description": "Αυτόματη παραχώρηση πρόσβασης διαχειριστή με βάση την ύπαρξη αυτής της ανάθεσης. Η ανάθεση μπορεί να είναι είτε 'χρήστης' είτε 'διαχειριστής'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,12 @@
"cutoff_date_description": "Διατήρηση φωτογραφιών από τις τελευταίες…", "cutoff_date_description": "Διατήρηση φωτογραφιών από τις τελευταίες…",
"cutoff_day": "{count, plural, one {ημέρα} other {ημέρες}}", "cutoff_day": "{count, plural, one {ημέρα} other {ημέρες}}",
"cutoff_year": "{count, plural, one {έτος} other {έτη}}", "cutoff_year": "{count, plural, one {έτος} other {έτη}}",
"daily_title_text_date": "Ε, MMM dd",
"daily_title_text_date_year": "Ε, MMM dd, yyyy",
"dark": "Σκούρο", "dark": "Σκούρο",
"dark_theme": "Μετάβαση σε σκοτεινό θέμα", "dark_theme": "Μετάβαση σε σκοτεινό θέμα",
"date": "Ημερομηνία", "date": "Ημερομηνία",
"date_after": "Ημερομηνία μετά", "date_after": "Ημερομηνία μετά",
"date_and_time": "Ημερομηνία και ώρα", "date_and_time": "Ημερομηνία και ώρα",
"date_before": "Ημερομηνία πριν", "date_before": "Ημερομηνία πριν",
"date_format": "Ε, LLL d, y • h:mm a",
"date_of_birth_saved": "Η ημερομηνία γέννησης αποθηκεύτηκε επιτυχώς", "date_of_birth_saved": "Η ημερομηνία γέννησης αποθηκεύτηκε επιτυχώς",
"date_range": "Εύρος ημερομηνιών", "date_range": "Εύρος ημερομηνιών",
"day": "Ημέρα", "day": "Ημέρα",
@@ -1392,6 +1393,7 @@
"light_theme": "Μετάβαση σε φωτεινό θέμα", "light_theme": "Μετάβαση σε φωτεινό θέμα",
"like": "Μου αρέσει", "like": "Μου αρέσει",
"like_deleted": "Το \"μου αρέσει\" διαγράφηκε", "like_deleted": "Το \"μου αρέσει\" διαγράφηκε",
"link": "Σύνδεσμος",
"link_motion_video": "Σύνδεσε βίντεο κίνησης", "link_motion_video": "Σύνδεσε βίντεο κίνησης",
"link_to_docs": "Για περισσότερες πληροφορίες, ανατρέξτε στην <link>τεκμηρίωση</link>.", "link_to_docs": "Για περισσότερες πληροφορίες, ανατρέξτε στην <link>τεκμηρίωση</link>.",
"link_to_oauth": "Σύνδεση στον OAuth", "link_to_oauth": "Σύνδεση στον OAuth",
@@ -1544,7 +1546,6 @@
"mobile_app_download_onboarding_note": "Κατέβασε την συνοδευτική εφαρμογή για κινητά χρησιμοποιώντας τις παρακάτω επιλογές", "mobile_app_download_onboarding_note": "Κατέβασε την συνοδευτική εφαρμογή για κινητά χρησιμοποιώντας τις παρακάτω επιλογές",
"model": "Μοντέλο", "model": "Μοντέλο",
"month": "Μήνας", "month": "Μήνας",
"monthly_title_text_date_format": "ΜΜΜΜ y",
"more": "Περισσότερα", "more": "Περισσότερα",
"move": "Μετακίνηση", "move": "Μετακίνηση",
"move_down": "Μετακίνηση προς τα κάτω", "move_down": "Μετακίνηση προς τα κάτω",
@@ -1562,6 +1563,8 @@
"multiselect_grid_edit_gps_err_read_only": "Δεν είναι δυνατή η επεξεργασία της τοποθεσίας των στοιχείων μόνο για ανάγνωση, παραλείπεται", "multiselect_grid_edit_gps_err_read_only": "Δεν είναι δυνατή η επεξεργασία της τοποθεσίας των στοιχείων μόνο για ανάγνωση, παραλείπεται",
"mute_memories": "Σίγαση Αναμνήσεων", "mute_memories": "Σίγαση Αναμνήσεων",
"my_albums": "Τα άλμπουμ μου", "my_albums": "Τα άλμπουμ μου",
"my_immich_description": "Αντιγραφή της τρέχουσας σελίδας ως σύνδεσμος Το Immich μου",
"my_immich_title": "Σύνδεσμος Το Immich μου",
"name": "Όνομα", "name": "Όνομα",
"name_or_nickname": "Όνομα ή ψευδώνυμο", "name_or_nickname": "Όνομα ή ψευδώνυμο",
"name_required": "Απαιτείται όνομα", "name_required": "Απαιτείται όνομα",
@@ -1926,6 +1929,8 @@
"scan_settings": "Ρυθμίσεις Σάρωσης", "scan_settings": "Ρυθμίσεις Σάρωσης",
"scanning": "Σαρώνεται", "scanning": "Σαρώνεται",
"scanning_for_album": "Σάρωση για άλμπουμ...", "scanning_for_album": "Σάρωση για άλμπουμ...",
"screencast_mode_description": "Εμφάνιση ενδείξεων συμβάντων πληκτρολογίου και ποντικιού στην οθόνη",
"screencast_mode_title": "Εναλλαγή λειτουργίας καταγραφής οθόνης",
"search": "Αναζήτηση", "search": "Αναζήτηση",
"search_albums": "Αναζήτηση άλμπουμ", "search_albums": "Αναζήτηση άλμπουμ",
"search_by_context": "Αναζήτηση με βάση το πλαίσιο", "search_by_context": "Αναζήτηση με βάση το πλαίσιο",
@@ -2214,6 +2219,8 @@
"sync_status": "Κατάσταση συγχρονισμού", "sync_status": "Κατάσταση συγχρονισμού",
"sync_status_subtitle": "Προβολή και διαχείριση του συστήματος συγχρονισμού", "sync_status_subtitle": "Προβολή και διαχείριση του συστήματος συγχρονισμού",
"sync_upload_album_setting_subtitle": "Δημιουργήστε και ανεβάστε τις φωτογραφίες και τα βίντεό σας στα επιλεγμένα άλμπουμ στο Immich", "sync_upload_album_setting_subtitle": "Δημιουργήστε και ανεβάστε τις φωτογραφίες και τα βίντεό σας στα επιλεγμένα άλμπουμ στο Immich",
"system_theme": "Θέμα συστήματος",
"system_theme_command_description": "Χρήση θέματος από το σύστημα ({value})",
"tag": "Ετικέτα", "tag": "Ετικέτα",
"tag_assets": "Ετικετοποίηση στοιχείων", "tag_assets": "Ετικετοποίηση στοιχείων",
"tag_created": "Δημιουργήθηκε ετικέτα: {tag}", "tag_created": "Δημιουργήθηκε ετικέτα: {tag}",
+43 -5
View File
@@ -885,15 +885,13 @@
"cutoff_date_description": "Keep photos from the last…", "cutoff_date_description": "Keep photos from the last…",
"cutoff_day": "{count, plural, one {day} other {days}}", "cutoff_day": "{count, plural, one {day} other {days}}",
"cutoff_year": "{count, plural, one {year} other {years}}", "cutoff_year": "{count, plural, one {year} other {years}}",
"daily_title_text_date": "E, MMM dd",
"daily_title_text_date_year": "E, MMM dd, yyyy",
"dark": "Dark", "dark": "Dark",
"dark_theme": "Switch to dark theme", "dark_theme": "Switch to dark theme",
"date": "Date", "date": "Date",
"date_after": "Date after", "date_after": "Date after",
"date_and_time": "Date and Time", "date_and_time": "Date and Time",
"date_before": "Date before", "date_before": "Date before",
"date_format": "E, LLL d, y • h:mm a", "date_of_birth": "Date of birth",
"date_of_birth_saved": "Date of birth saved successfully", "date_of_birth_saved": "Date of birth saved successfully",
"date_range": "Date range", "date_range": "Date range",
"day": "Day", "day": "Day",
@@ -1240,6 +1238,7 @@
"free_up_space_description": "Move backed-up photos and videos to your device's trash to free up space. Your copies on the server remain safe.", "free_up_space_description": "Move backed-up photos and videos to your device's trash to free up space. Your copies on the server remain safe.",
"free_up_space_settings_subtitle": "Free up device storage", "free_up_space_settings_subtitle": "Free up device storage",
"full_path": "Full path: {path}", "full_path": "Full path: {path}",
"full_path_or_folder": "Full path or folder",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "This feature loads external resources from Google in order to work.", "gcast_enabled_description": "This feature loads external resources from Google in order to work.",
"general": "General", "general": "General",
@@ -1402,6 +1401,7 @@
"link_to_oauth": "Link to OAuth", "link_to_oauth": "Link to OAuth",
"linked_oauth_account": "Linked OAuth account", "linked_oauth_account": "Linked OAuth account",
"list": "List", "list": "List",
"live": "Live",
"loading": "Loading", "loading": "Loading",
"loading_search_results_failed": "Loading search results failed", "loading_search_results_failed": "Loading search results failed",
"local": "Local", "local": "Local",
@@ -1523,6 +1523,38 @@
"marked_all_as_read": "Marked all as read", "marked_all_as_read": "Marked all as read",
"matches": "Matches", "matches": "Matches",
"matching_assets": "Matching Assets", "matching_assets": "Matching Assets",
"media_chrome": {
"auto": "Auto",
"captions": "Captions",
"captions_off": "Off",
"closed_captions": "closed captions",
"decode_error": "Decode error",
"disable_captions": "Disable captions",
"enable_captions": "Enable captions",
"enter_fullscreen_mode": "Enter fullscreen mode",
"exit_fullscreen_mode": "Exit fullscreen mode",
"loop": "Loop",
"media_error_description": "A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.",
"media_loading": "media loading",
"mute": "Mute",
"network_error": "Network error",
"network_error_description": "A network error caused the media download to fail.",
"not_supported_error": "Source Not Supported",
"playback_rate": "Playback rate",
"playback_rate_current": "current playback rate",
"playback_rate_value": "Playback rate {playbackRate}",
"playback_time": "playback time",
"quality": "Quality",
"second": "second",
"seconds": "seconds",
"time_value_of_total_time": "{currentTime} of {totalTime}",
"time_value_remaining": "{time} remaining",
"unmute": "Unmute",
"unsupported_error_description": "An unsupported error occurred. The server or network failed, or your browser does not support this format.",
"video_not_loaded_unknown_time": "video not loaded, unknown time.",
"video_player": "video player",
"volume": "volume"
},
"media_type": "Media type", "media_type": "Media type",
"memories": "Memories", "memories": "Memories",
"memories_all_caught_up": "All caught up", "memories_all_caught_up": "All caught up",
@@ -1549,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Download the companion mobile app using the following options", "mobile_app_download_onboarding_note": "Download the companion mobile app using the following options",
"model": "Model", "model": "Model",
"month": "Month", "month": "Month",
"monthly_title_text_date_format": "MMMM y",
"more": "More", "more": "More",
"motion": "Motion",
"move": "Move", "move": "Move",
"move_down": "Move down", "move_down": "Move down",
"move_off_locked_folder": "Move out of locked folder", "move_off_locked_folder": "Move out of locked folder",
@@ -1761,7 +1793,6 @@
"play_original_video": "Play original video", "play_original_video": "Play original video",
"play_original_video_setting_description": "Prefer playback of original videos rather than transcoded videos. If original asset is not compatible it may not playback correctly.", "play_original_video_setting_description": "Prefer playback of original videos rather than transcoded videos. If original asset is not compatible it may not playback correctly.",
"play_transcoded_video": "Play transcoded video", "play_transcoded_video": "Play transcoded video",
"playback_speed": "Playback speed",
"please_auth_to_access": "Please authenticate to access", "please_auth_to_access": "Please authenticate to access",
"port": "Port", "port": "Port",
"preferences_settings_subtitle": "Manage the app's preferences", "preferences_settings_subtitle": "Manage the app's preferences",
@@ -1861,6 +1892,7 @@
"remove_assets_title": "Remove assets?", "remove_assets_title": "Remove assets?",
"remove_custom_date_range": "Remove custom date range", "remove_custom_date_range": "Remove custom date range",
"remove_deleted_assets": "Remove Deleted Assets", "remove_deleted_assets": "Remove Deleted Assets",
"remove_filter": "Remove filter",
"remove_from_album": "Remove from album", "remove_from_album": "Remove from album",
"remove_from_album_action_prompt": "{count} removed from the album", "remove_from_album_action_prompt": "{count} removed from the album",
"remove_from_favorites": "Remove from favorites", "remove_from_favorites": "Remove from favorites",
@@ -1943,6 +1975,8 @@
"search_by_description_example": "Hiking day in Sapa", "search_by_description_example": "Hiking day in Sapa",
"search_by_filename": "Search by file name or extension", "search_by_filename": "Search by file name or extension",
"search_by_filename_example": "i.e. IMG_1234.JPG or PNG", "search_by_filename_example": "i.e. IMG_1234.JPG or PNG",
"search_by_full_path": "Search by full path or folder",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - you can search for Projects, 3D, Printing, 2026 etc.",
"search_by_ocr": "Search by OCR", "search_by_ocr": "Search by OCR",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Search lens model...", "search_camera_lens_model": "Search lens model...",
@@ -2158,6 +2192,7 @@
"show_schema": "Show schema", "show_schema": "Show schema",
"show_search_options": "Show search options", "show_search_options": "Show search options",
"show_shared_links": "Show shared links", "show_shared_links": "Show shared links",
"show_slideshow_metadata_overlay": "Show image info overlay",
"show_slideshow_transition": "Show slideshow transition", "show_slideshow_transition": "Show slideshow transition",
"show_supporter_badge": "Supporter badge", "show_supporter_badge": "Supporter badge",
"show_supporter_badge_description": "Show a supporter badge", "show_supporter_badge_description": "Show a supporter badge",
@@ -2173,6 +2208,9 @@
"skip_to_folders": "Skip to folders", "skip_to_folders": "Skip to folders",
"skip_to_tags": "Skip to tags", "skip_to_tags": "Skip to tags",
"slideshow": "Slideshow", "slideshow": "Slideshow",
"slideshow_metadata_overlay_mode": "Overlay content",
"slideshow_metadata_overlay_mode_description_only": "Description only",
"slideshow_metadata_overlay_mode_full": "Full",
"slideshow_repeat": "Repeat slideshow", "slideshow_repeat": "Repeat slideshow",
"slideshow_repeat_description": "Loop back to beginning when slideshow ends", "slideshow_repeat_description": "Loop back to beginning when slideshow ends",
"slideshow_settings": "Slideshow settings", "slideshow_settings": "Slideshow settings",
+249 -11
View File
@@ -65,7 +65,7 @@
"backup_onboarding_footer": "Por pli da informoj pri savkopioj kun Immich, bonvolu legi la <link>dokumentaron</link>.", "backup_onboarding_footer": "Por pli da informoj pri savkopioj kun Immich, bonvolu legi la <link>dokumentaron</link>.",
"backup_onboarding_parts_title": "Sekur-kopioj laŭ strategio 3-2-1 inkluzivas:", "backup_onboarding_parts_title": "Sekur-kopioj laŭ strategio 3-2-1 inkluzivas:",
"backup_onboarding_title": "Savkopioj", "backup_onboarding_title": "Savkopioj",
"backup_settings": "Agordoj de kopiado de datumbazo", "backup_settings": "Agordoj pri kopiado de datumbazo",
"backup_settings_description": "Administri agordojn pri datumbazo-nekropsio.", "backup_settings_description": "Administri agordojn pri datumbazo-nekropsio.",
"cleared_jobs": "Taskoj forigitaj por: {job}", "cleared_jobs": "Taskoj forigitaj por: {job}",
"config_set_by_file": "La agordoj estas aktuale regitaj de agordo-dosiero", "config_set_by_file": "La agordoj estas aktuale regitaj de agordo-dosiero",
@@ -118,7 +118,7 @@
"job_concurrency": "{job}: nombro de samtempaj taskoj", "job_concurrency": "{job}: nombro de samtempaj taskoj",
"job_created": "Tasko kreita", "job_created": "Tasko kreita",
"job_not_concurrency_safe": "Estas nesekure fari tiun ĉi taskon samtempe kun aliaj.", "job_not_concurrency_safe": "Estas nesekure fari tiun ĉi taskon samtempe kun aliaj.",
"job_settings": "Agordoj pri tasko", "job_settings": "Agordoj pri taskoj",
"job_settings_description": "Administri samtempajn taskojn", "job_settings_description": "Administri samtempajn taskojn",
"jobs_delayed": "{jobCount, plural, other {# prokrastitaj}}", "jobs_delayed": "{jobCount, plural, other {# prokrastitaj}}",
"jobs_failed": "{jobCount, plural, other {# malsukesis}}", "jobs_failed": "{jobCount, plural, other {# malsukesis}}",
@@ -212,7 +212,7 @@
"map_enable_description": "Ŝalti map-funkciojn", "map_enable_description": "Ŝalti map-funkciojn",
"map_gps_settings": "Agordaĵoj pri mapoj kaj GPS", "map_gps_settings": "Agordaĵoj pri mapoj kaj GPS",
"map_gps_settings_description": "Administri agordojn pri mapoj kaj GPS", "map_gps_settings_description": "Administri agordojn pri mapoj kaj GPS",
"map_implications": "Montri mapojn de dependas de ekstera servo (tiles.immich.cloud)", "map_implications": "Montri mapojn dependas de ekstera servo (tiles.immich.cloud)",
"map_light_style": "Hela stilo", "map_light_style": "Hela stilo",
"map_manage_reverse_geocoding_settings": "Administri agordojn pri <link>inversa geo-kodigo</link>", "map_manage_reverse_geocoding_settings": "Administri agordojn pri <link>inversa geo-kodigo</link>",
"map_reverse_geocoding": "Inversa geo-kodigo", "map_reverse_geocoding": "Inversa geo-kodigo",
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Ŝalti sciigojn per retmesaĝo", "notification_enable_email_notifications": "Ŝalti sciigojn per retmesaĝo",
"notification_settings": "Agordoj pri sciigoj", "notification_settings": "Agordoj pri sciigoj",
"notification_settings_description": "Administri agordojn pri sciigoj, inkluzive tiujn per retmesaĝoj", "notification_settings_description": "Administri agordojn pri sciigoj, inkluzive tiujn per retmesaĝoj",
"oauth_allow_insecure_requests": "Permesi nesekurajn petojn",
"oauth_allow_insecure_requests_description": "ATENTU: tio ĉi malŝaltas validigon de TLS-atestiloj por OAuth-petoj, kaj lasas vin sendefenda kontraŭ kaŝa interkaptado de komunikado (man-in-the-middle).",
"oauth_auto_launch": "Startigi aŭtomate", "oauth_auto_launch": "Startigi aŭtomate",
"oauth_auto_launch_description": "Aŭtomate startigi la OAuth-procezon tuj ĉe la ensaluta paĝo", "oauth_auto_launch_description": "Aŭtomate startigi la OAuth-procezon tuj ĉe la ensaluta paĝo",
"oauth_auto_register": "Registri aŭtomate", "oauth_auto_register": "Registri aŭtomate",
@@ -274,9 +276,11 @@
"oauth_button_text": "Teksto de butono", "oauth_button_text": "Teksto de butono",
"oauth_client_secret_description": "Bezonata por privata kliento, aŭ se PKCE (Proof Key for Code Exchange) ne estas subtenata de publika kliento.", "oauth_client_secret_description": "Bezonata por privata kliento, aŭ se PKCE (Proof Key for Code Exchange) ne estas subtenata de publika kliento.",
"oauth_enable_description": "Ensaluti per OAuth", "oauth_enable_description": "Ensaluti per OAuth",
"oauth_end_session_url_description": "Resendi uzanton al tiu ĉi URI post elsaluto.",
"oauth_mobile_redirect_uri": "Resenda URI por poŝ-aparatoj", "oauth_mobile_redirect_uri": "Resenda URI por poŝ-aparatoj",
"oauth_mobile_redirect_uri_override": "Insisti pri resenda URI por poŝ-aparatoj", "oauth_mobile_redirect_uri_override": "Insisti pri resenda URI por poŝ-aparatoj",
"oauth_mobile_redirect_uri_override_description": "Ŝaltu tion ĉi kiam la provizanto de OAuth ne permesas URI-on por poŝ-aparatoj, kiel \"{callback}\"", "oauth_mobile_redirect_uri_override_description": "Ŝaltu tion ĉi kiam la provizanto de OAuth ne permesas URI-on por poŝ-aparatoj, kiel \"{callback}\"",
"oauth_prompt_description": "Parametro de invito (ekz. select_account, login, consent)",
"oauth_role_claim": "Petita rolo", "oauth_role_claim": "Petita rolo",
"oauth_role_claim_description": "Aŭtomate doni rolon de administranto laŭ tiu ĉi peto. La peto povas esti aŭ 'user' (uzanto) aŭ 'admin' (administranto).", "oauth_role_claim_description": "Aŭtomate doni rolon de administranto laŭ tiu ĉi peto. La peto povas esti aŭ 'user' (uzanto) aŭ 'admin' (administranto).",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -314,7 +318,7 @@
"server_external_domain_settings_description": "Domajno por eksteraj ligiloj", "server_external_domain_settings_description": "Domajno por eksteraj ligiloj",
"server_public_users": "Publikaj uzantoj", "server_public_users": "Publikaj uzantoj",
"server_public_users_description": "Nomo kaj retadreso de ĉiuj uzantoj estas listigitaj kiam oni aldonas uzanton al dividita albumo. Kiam malŝaltita, la listo de uzantoj estos videbla nur por administrantoj.", "server_public_users_description": "Nomo kaj retadreso de ĉiuj uzantoj estas listigitaj kiam oni aldonas uzanton al dividita albumo. Kiam malŝaltita, la listo de uzantoj estos videbla nur por administrantoj.",
"server_settings": "Agordoj de servilo", "server_settings": "Agordoj pri servilo",
"server_settings_description": "Administri agordojn pri servilo", "server_settings_description": "Administri agordojn pri servilo",
"server_stats_page_description": "Paĝo de statistikoj pri la servilo", "server_stats_page_description": "Paĝo de statistikoj pri la servilo",
"server_welcome_message": "Bonvena mesaĝo", "server_welcome_message": "Bonvena mesaĝo",
@@ -436,7 +440,7 @@
"user_password_reset_description": "Bonvolu sendi la dumtempan pasvorton al la uzanto, kaj informu ke ĝi devos esti ŝanĝita je la sekva ensaluto.", "user_password_reset_description": "Bonvolu sendi la dumtempan pasvorton al la uzanto, kaj informu ke ĝi devos esti ŝanĝita je la sekva ensaluto.",
"user_restore_description": "La konto de <b>{user}</b> estos restaŭrita.", "user_restore_description": "La konto de <b>{user}</b> estos restaŭrita.",
"user_restore_scheduled_removal": "Restaŭri uzanton - forviŝo planita je {date, date, long}", "user_restore_scheduled_removal": "Restaŭri uzanton - forviŝo planita je {date, date, long}",
"user_settings": "Agordoj de uzanto", "user_settings": "Agordoj pri uzantoj",
"user_settings_description": "Administri agordojn pri uzantoj", "user_settings_description": "Administri agordojn pri uzantoj",
"user_successfully_removed": "La uzanto {email} estas forigita.", "user_successfully_removed": "La uzanto {email} estas forigita.",
"users_page_description": "Paĝo por administri uzantojn", "users_page_description": "Paĝo por administri uzantojn",
@@ -698,7 +702,7 @@
"blurred_background": "Malklarigita fono", "blurred_background": "Malklarigita fono",
"bugs_and_feature_requests": "Cimoj kaj petoj por novaj funkcioj", "bugs_and_feature_requests": "Cimoj kaj petoj por novaj funkcioj",
"build": "Versio", "build": "Versio",
"build_image": "Bildo de la versio", "build_image": "Pakaĵo por instali tiun ĉi softvaron",
"bulk_delete_duplicates_confirmation": "Ĉu vi certas, ke vi volas amase forigi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tiel, vi konservos la plej grandan elementon el ĉiu grupo kaj porĉiame forigos duoblaĵojn. Ne eblas malfari tion!", "bulk_delete_duplicates_confirmation": "Ĉu vi certas, ke vi volas amase forigi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tiel, vi konservos la plej grandan elementon el ĉiu grupo kaj porĉiame forigos duoblaĵojn. Ne eblas malfari tion!",
"bulk_keep_duplicates_confirmation": "Ĉu vi certas, ke vi volas konservi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tio solvos ĉiujn duoblajn grupojn sen forigi ion ajn.", "bulk_keep_duplicates_confirmation": "Ĉu vi certas, ke vi volas konservi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tio solvos ĉiujn duoblajn grupojn sen forigi ion ajn.",
"bulk_trash_duplicates_confirmation": "Ĉu vi certas, ke vi volas amase forigi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tiel, vi konservos la plej grandan elementon el ĉiu grupo kaj porĉiame forigos duoblaĵojn.", "bulk_trash_duplicates_confirmation": "Ĉu vi certas, ke vi volas amase forigi {count, plural, one {# duoblaĵon} other {# duoblaĵojn}}? Tiel, vi konservos la plej grandan elementon el ĉiu grupo kaj porĉiame forigos duoblaĵojn.",
@@ -851,7 +855,7 @@
"create_new": "KREI NOVAN", "create_new": "KREI NOVAN",
"create_new_face": "Krei novan vizaĝon", "create_new_face": "Krei novan vizaĝon",
"create_new_person": "Krei novan homon", "create_new_person": "Krei novan homon",
"create_new_person_hint": "Atribui elektitajn elementojn al nova homo", "create_new_person_hint": "Konekti elektitajn elementojn al nova homo",
"create_new_user": "Krei novan uzanton", "create_new_user": "Krei novan uzanton",
"create_person": "Krei homon", "create_person": "Krei homon",
"create_person_subtitle": "Aldoni nomon al la elektita vizaĝo por krei kaj etikedi novan homon", "create_person_subtitle": "Aldoni nomon al la elektita vizaĝo por krei kaj etikedi novan homon",
@@ -881,15 +885,12 @@
"cutoff_date_description": "Konservi fotojn el la lastaj…", "cutoff_date_description": "Konservi fotojn el la lastaj…",
"cutoff_day": "{count, plural, one {tago} other {tagoj}}", "cutoff_day": "{count, plural, one {tago} other {tagoj}}",
"cutoff_year": "{count, plural, one {jaro} other {jaroj}}", "cutoff_year": "{count, plural, one {jaro} other {jaroj}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Malhela", "dark": "Malhela",
"dark_theme": "Ŝanĝi al hela reĝimo", "dark_theme": "Ŝanĝi al hela reĝimo",
"date": "Dato", "date": "Dato",
"date_after": "Dato post", "date_after": "Dato post",
"date_and_time": "Dato kaj horo", "date_and_time": "Dato kaj horo",
"date_before": "Dato antaŭ", "date_before": "Dato antaŭ",
"date_format": "E, LLL d, y • h:mm a",
"date_of_birth_saved": "Naskiĝdato sukcese registrita", "date_of_birth_saved": "Naskiĝdato sukcese registrita",
"date_range": "Dato-intervalo", "date_range": "Dato-intervalo",
"day": "Tago", "day": "Tago",
@@ -1088,41 +1089,195 @@
"unable_to_add_partners": "Ne eblas aldoni partnerojn", "unable_to_add_partners": "Ne eblas aldoni partnerojn",
"unable_to_add_remove_archive": "Ne eblas {archived, select, true {forigi elementon de} other {aldoni elementon al}} la arĥivo", "unable_to_add_remove_archive": "Ne eblas {archived, select, true {forigi elementon de} other {aldoni elementon al}} la arĥivo",
"unable_to_add_remove_favorites": "Ne eblas {favorite, select, true {aldoni elementon al} other {forigi elementon de}} preferataĵoj", "unable_to_add_remove_favorites": "Ne eblas {favorite, select, true {aldoni elementon al} other {forigi elementon de}} preferataĵoj",
"unable_to_archive_unarchive": "Ne eblis {archived, select, true {enarĥivigi} other {elarĥivigi}}",
"unable_to_change_album_user_role": "Ne eblis ŝanĝi la rolon de la album-uzanto",
"unable_to_change_date": "Ne eblis ŝanĝi daton",
"unable_to_change_description": "Ne eblis ŝanĝi priskribon",
"unable_to_change_favorite": "Ne eblas ŝanĝi preferon por tiu elemento", "unable_to_change_favorite": "Ne eblas ŝanĝi preferon por tiu elemento",
"unable_to_change_location": "Ne eblis ŝanĝi lokon",
"unable_to_change_password": "Ne eblis ŝanĝi pasvorton",
"unable_to_change_visibility": "Ne eblis ŝanĝi la videblecon por {count, plural, one {# homo} other {# homoj}}",
"unable_to_complete_oauth_login": "Ne eblis fini la ensaluto per OAuth",
"unable_to_connect": "Ne eblis konektiĝi",
"unable_to_copy_to_clipboard": "Ne eblas kopii al la tondujo; kontrolu ĉu vi konektiĝas per https",
"unable_to_create": "Ne eblis krei laborfluon", "unable_to_create": "Ne eblis krei laborfluon",
"unable_to_create_admin_account": "Ne eblis krei konton de administranto",
"unable_to_create_api_key": "Ne eblis krei novan API-ŝlosilon",
"unable_to_create_library": "Ne eblis krei bibliotekon",
"unable_to_create_user": "Ne eblis krei uzanton",
"unable_to_delete_album": "Ne eblis forigi albumon",
"unable_to_delete_asset": "Ne eblis forigi elementon",
"unable_to_delete_assets": "Eraro okazis dum forigo de elementoj",
"unable_to_delete_exclusion_pattern": "Ne eblas forigi skemon de ekskludo", "unable_to_delete_exclusion_pattern": "Ne eblas forigi skemon de ekskludo",
"unable_to_delete_shared_link": "Ne eblis forigi dividitan ligilon",
"unable_to_delete_user": "Ne eblis forigi uzanton",
"unable_to_delete_workflow": "Ne eblis forigi laborfluon", "unable_to_delete_workflow": "Ne eblis forigi laborfluon",
"unable_to_download_files": "Ne eblis elŝuti dosierojn",
"unable_to_edit_exclusion_pattern": "Ne eblas redakti skemon de ekskludo", "unable_to_edit_exclusion_pattern": "Ne eblas redakti skemon de ekskludo",
"unable_to_empty_trash": "Ne eblis malplenigi rubujon",
"unable_to_enter_fullscreen": "Ne eblis ŝalti plenekranan reĝimon",
"unable_to_exit_fullscreen": "Ne eblis eliĝi el plenekrana reĝimo",
"unable_to_get_comments_number": "Ne eblis trovi nombron da komentoj",
"unable_to_get_shared_link": "Ne eblis ekhavi dividitan ligilon",
"unable_to_hide_person": "Ne eblis kaŝi tiun homon",
"unable_to_link_motion_video": "Ne eblis ligi videon",
"unable_to_link_oauth_account": "Ne eblis ligi al OAuth-konto",
"unable_to_log_out_all_devices": "Ne eblis elsaluti el ĉiuj aparatoj",
"unable_to_log_out_device": "Ne eblis elsaluti el tiu aparato",
"unable_to_login_with_oauth": "Ne eblis ensaluti per OAuth",
"unable_to_play_video": "Ne eblis ludi videon",
"unable_to_reassign_assets_existing_person": "Ne eblis rekonekti elementojn al {name, select, null {ekzistanta homo} other {{name}}}",
"unable_to_reassign_assets_new_person": "Ne eblis konekti elementojn al nova homo",
"unable_to_refresh_user": "Ne eblis renovigi uzanton",
"unable_to_remove_album_users": "Ne eblis forigi uzantojn de albumo",
"unable_to_remove_api_key": "Ne eblis forigi API-ŝlosilo",
"unable_to_remove_assets_from_shared_link": "Ne eblis forigi elementojn el dividita ligilo",
"unable_to_remove_library": "Ne eblis forigi bibliotekon",
"unable_to_remove_partner": "Ne eblis forigi partneron",
"unable_to_remove_reaction": "Ne eblis forigi reagon",
"unable_to_reset_password": "Ne eblis restarigi pasvorton",
"unable_to_reset_pin_code": "Ne eblis restarigi PIN-kodon",
"unable_to_resolve_duplicate": "Ne eblis solvi tiun ĉi duoblaĵon",
"unable_to_restore_assets": "Ne eblis restaŭri elementojn",
"unable_to_restore_trash": "Ne eblis restaŭri rubaĵojn",
"unable_to_restore_user": "Ne eblis restaŭri uzanton",
"unable_to_save_album": "Ne eblis konservi albumon",
"unable_to_save_api_key": "Ne eblis konservi API-ŝlosilon",
"unable_to_save_date_of_birth": "Ne eblis konservi naskiĝdaton",
"unable_to_save_name": "Ne eblis konservi nomon",
"unable_to_save_profile": "Ne eblis konservi profilon",
"unable_to_save_settings": "Ne eblis konservi agordojn",
"unable_to_scan_libraries": "Ne eblas analizi biblitekojn", "unable_to_scan_libraries": "Ne eblas analizi biblitekojn",
"unable_to_scan_library": "Ne eblas analizi biblitekon", "unable_to_scan_library": "Ne eblas analizi biblitekon",
"unable_to_update_workflow": "Ne eblis ĝisdatigi laborfluon" "unable_to_set_feature_photo": "Ne eblis agordi ĉap-foton",
"unable_to_set_profile_picture": "Ne eblis agordi profilbildon",
"unable_to_set_rating": "Ne eblis konservi pritakson",
"unable_to_submit_job": "Ne eblis plenumi taskon",
"unable_to_trash_asset": "Ne eblis forigi elementon",
"unable_to_unlink_account": "Ne eblis malligi konton",
"unable_to_unlink_motion_video": "Ne eblis malligi movbildon",
"unable_to_update_album_cover": "Ne eblis ŝanĝi kovrilon de albumo",
"unable_to_update_album_info": "Ne eblis ŝanĝi informojn pri albumo",
"unable_to_update_library": "Ne eblis ĝisdatigi bibliotekon",
"unable_to_update_location": "Ne eblis ŝanĝi lokon",
"unable_to_update_settings": "Ne eblis ĝisdatigi agordojn",
"unable_to_update_timeline_display_status": "Ne eblis ŝanĝi tiun agordon por la partnero",
"unable_to_update_user": "Ne eblis ĝisdatigi uzanton",
"unable_to_update_workflow": "Ne eblis ĝisdatigi laborfluon",
"unable_to_upload_file": "Ne eblis alŝuti dosieron"
}, },
"errors_text": "Eraroj",
"exclusion_pattern": "Skemo de ekskludo", "exclusion_pattern": "Skemo de ekskludo",
"exif": "Exif",
"exif_bottom_sheet_description": "Aldoni priskribon...",
"exif_bottom_sheet_description_error": "Eraro dum ĝisdatigo de priskribo",
"exif_bottom_sheet_details": "DETALOJ",
"exif_bottom_sheet_location": "LOKO",
"exif_bottom_sheet_no_description": "Neniu priskribo",
"exif_bottom_sheet_people": "HOMOJ",
"exif_bottom_sheet_person_add_person": "Aldoni nomon",
"exit_slideshow": "Fini bildserion",
"expand": "Etendi", "expand": "Etendi",
"expand_all": "Etendi ĉiujn", "expand_all": "Etendi ĉiujn",
"experimental_settings_new_asset_list_subtitle": "Prilaborataĵoj",
"experimental_settings_new_asset_list_title": "Ŝalti eksperimentan foto-kradon",
"experimental_settings_subtitle": "Uzu je propra risko!",
"experimental_settings_title": "Eksperimenta",
"expire_after": "Eksvalidigi post",
"expired": "Eksvalida",
"expires_date": "Eksvalidiĝos je {date}",
"explore": "Esplori", "explore": "Esplori",
"explorer": "Foliumilo", "explorer": "Foliumilo",
"export": "Eksporti",
"export_as_json": "Eksporti kiel JSON",
"export_database": "Eksporti datumbazon",
"export_database_description": "Eksporti la SQLite-datumbazon",
"extension": "Sufikso",
"external": "Ekstera",
"external_libraries": "Eksteraj bibliotekoj",
"external_network": "Ekstera reto",
"external_network_sheet_info": "Kiam la preferata vifio estas netrovebla, la apo provos konektiĝi al la servilo per la ĉi-suba listo de URL-oj, ekde la unua",
"face_unassigned": "Ne konektitaj",
"failed": "Malsukcesis",
"failed_count": "Malsukcesis: {count}",
"failed_to_authenticate": "Malsukcesis ensaluti",
"failed_to_load_assets": "Malsukcesis ŝargi elementojn",
"failed_to_load_folder": "Malsukcesis ŝargi dosierujon",
"favorite": "Preferataĵo", "favorite": "Preferataĵo",
"favorite_action_prompt": "{count} aldonita(j) al Preferataĵoj", "favorite_action_prompt": "{count} aldonita(j) al Preferataĵoj",
"favorite_or_unfavorite_photo": "Aldoni/forigi foton al/de preferataĵoj", "favorite_or_unfavorite_photo": "Aldoni/forigi foton al/de preferataĵoj",
"favorites": "Preferataĵoj", "favorites": "Preferataĵoj",
"favorites_page_no_favorites": "Neniuj preferataj elementoj trovitaj", "favorites_page_no_favorites": "Neniuj preferataj elementoj trovitaj",
"feature_photo_updated": "Ĉap-foto sukcese ŝanĝita",
"features": "Funkcioj",
"features_in_development": "Funkcioj ankoraŭ prilaborataj",
"features_setting_description": "Administri funkciojn de la apo",
"file_name_or_extension": "Dosiernomo aŭ sufikso",
"file_name_text": "Dosiernomo",
"file_name_with_value": "Dosiernomo: {file_name}",
"file_size": "Grandeco de dosiero",
"filename": "Dosiernomo",
"filetype": "Tipo de dosiero",
"filter": "Filtri",
"filter_description": "Kondiĉoj por trovi la celitajn elementojn",
"filter_people": "Filtri laŭ homoj",
"filter_places": "Filtri laŭ lokoj",
"filter_tags": "Filtri laŭ etikedoj",
"filters": "Filtriloj",
"find_them_fast": "Rapide retrovi la homon per ties nomo",
"first": "Unua",
"fix_incorrect_match": "Korekti malĝustan kongruiĝon",
"folder": "Dosierujo",
"folder_not_found": "Dosierujo netrovita",
"folders": "Dosierujoj",
"folders_feature_description": "Foliumado en dosierujoj por la fotoj kaj videoj en la sistemo",
"forgot_pin_code_question": "Ĉu vi forgesis vian PIN-kodon?",
"forward": "Antaŭen",
"free_up_space": "Liberigi spacon", "free_up_space": "Liberigi spacon",
"free_up_space_description": "Vi forigos fotojn kaj/aŭ videojn, kiuj havas savkopiojn en la servilo, por liberigi spacon en via aparato. La kopioj en la servilo restos.", "free_up_space_description": "Vi forigos fotojn kaj/aŭ videojn, kiuj havas savkopiojn en la servilo, por liberigi spacon en via aparato. La kopioj en la servilo restos.",
"free_up_space_settings_subtitle": "Liberigi spacon en aparato",
"full_path": "Plena dosiervojo: {path}",
"gcast_enabled": "Google Cast",
"gcast_enabled_description": "Tiu ĉi funkcio ŝargas eksterajn rimedojn de Google por sia funkciado.",
"general": "Ĝeneralaj", "general": "Ĝeneralaj",
"geolocation_instruction_location": "Elektu elementon kun GPS-koordinatoj por uzi ĝian lokon, aŭ elektu lokon rekte sur la mapo",
"get_help": "Trovi helpon",
"get_people_error": "Eraro dum serĉo de homoj",
"home_page_favorite_err_local": "Ankoraŭ ne eblas aldoni lokajn elementojn al Preferataĵoj; ignorita(j)", "home_page_favorite_err_local": "Ankoraŭ ne eblas aldoni lokajn elementojn al Preferataĵoj; ignorita(j)",
"home_page_favorite_err_partner": "Ankoraŭ ne eblas aldoni elementojn de partnero al Preferataĵoj; ignorita(j)", "home_page_favorite_err_partner": "Ankoraŭ ne eblas aldoni elementojn de partnero al Preferataĵoj; ignorita(j)",
"include_shared_albums": "Inkluzivi dividitajn albumojn",
"include_shared_partner_assets": "Inkluzivi elementojn dividitajn de partnero",
"keep_favorites": "Konservi preferataĵojn", "keep_favorites": "Konservi preferataĵojn",
"maintenance_action_restore": "Restaŭrado de datumbazo",
"maintenance_restore_from_backup": "Restaŭri el savkopio",
"maintenance_restore_library": "Restaŭri vian bibliotekon",
"maintenance_restore_library_confirm": "Se tio ŝajne bona, daŭrigu kaj restaŭru savkopion!",
"maintenance_restore_library_description": "Restaŭrado de datumbazo",
"maintenance_restore_library_folder_has_files": "{folder} enhavas {count} dosiero(j)n",
"maintenance_restore_library_folder_no_files": "{folder} ne enhavas ajnan dosieron!",
"maintenance_restore_library_folder_pass": "legebla(j) kaj skribebla(j)",
"maintenance_restore_library_folder_read_fail": "nelegebla(j)",
"maintenance_restore_library_folder_write_fail": "ne skribebla(j)",
"maintenance_restore_library_hint_missing_files": "Povus esti, ke mankas gravaj dosieroj",
"maintenance_restore_library_hint_regenerate_later": "Eblas poste regeneri ilin en Agordoj",
"maintenance_restore_library_hint_storage_template_missing_files": "Ĉu vi uzas ŝablonojn de stokado? Povus esti, ke mankas dosieroj",
"maintenance_restore_library_loading": "Ŝargiĝas heŭristikoj kaj kontroloj de integreco…",
"maintenance_task_restore": "Restaŭrado de elektita savkopio…",
"maintenance_task_rollback": "Malsukcesis la restaŭrado; malfariĝas la ŝanĝoj…",
"manage_media_access_settings": "Malfermi agordaĵaron", "manage_media_access_settings": "Malfermi agordaĵaron",
"manage_shared_links": "Administri dividitajn ligilojn",
"manage_the_app_settings": "Agordi la apon", "manage_the_app_settings": "Agordi la apon",
"map_settings_only_show_favorites": "Montri nur preferataĵojn", "map_settings_only_show_favorites": "Montri nur preferataĵojn",
"missing": "Netraktitaj", "missing": "Netraktitaj",
"mobile_app": "Apo por poŝtelefono",
"mobile_app_download_onboarding_note": "Elŝutu la poŝtelefonan apon de Immich per tiuj ebloj",
"networking_subtitle": "Administri agordojn pri finpunktoj de la servilo", "networking_subtitle": "Administri agordojn pri finpunktoj de la servilo",
"no_devices": "Neniuj aprobitaj aparatoj", "no_devices": "Neniuj aprobitaj aparatoj",
"no_explore_results_message": "Alŝutu pli da fotoj por esplori vian kolekton.", "no_explore_results_message": "Alŝutu pli da fotoj por esplori vian kolekton.",
"no_favorites_message": "Aldoni al Preferataĵoj por rapide retrovi viajn plej bonajn bildojn kaj videojn", "no_favorites_message": "Aldoni al Preferataĵoj por rapide retrovi viajn plej bonajn bildojn kaj videojn",
"no_notifications": "Neniuj sciigoj", "no_notifications": "Neniuj sciigoj",
"no_results_description": "Provu sinonimon aŭ pli ĝeneralan ŝlosilvorton", "no_results_description": "Provu sinonimon aŭ pli ĝeneralan ŝlosilvorton",
"no_shared_albums_message": "Krei albumon por dividi fotojn kaj videojn kun konatoj",
"notification_permission_dialog_content": "Por ŝalti sciigojn, iru al Agordoj kaj elektu 'permesi'.", "notification_permission_dialog_content": "Por ŝalti sciigojn, iru al Agordoj kaj elektu 'permesi'.",
"notification_permission_list_tile_content": "Donu permeson por ŝalti sciigojn.", "notification_permission_list_tile_content": "Donu permeson por ŝalti sciigojn.",
"notification_permission_list_tile_enable_button": "Ŝalti sciigojn", "notification_permission_list_tile_enable_button": "Ŝalti sciigojn",
@@ -1130,12 +1285,28 @@
"notification_toggle_setting_description": "Ŝalti sciigojn per retmesaĝo", "notification_toggle_setting_description": "Ŝalti sciigojn per retmesaĝo",
"notifications": "Sciigoj", "notifications": "Sciigoj",
"notifications_setting_description": "Administri sciigojn", "notifications_setting_description": "Administri sciigojn",
"onboarding_privacy_description": "La ĉi-subaj (nedevigaj) funkcioj dependas de eksteraj servoj. Vi povas (mal)ŝalti ilin iam ajn.",
"only_favorites": "Nur preferataĵoj", "only_favorites": "Nur preferataĵoj",
"owned": "Propraj",
"partner_page_empty_message": "Viaj fotoj ankoraŭ ne estas dividitaj kun ajna partnero.",
"partner_page_shared_to_title": "Dividita(j) kun",
"photo_shared_all_users": "Ŝajne vi dividis viajn fotojn kun ĉiuj uzantoj, aŭ povus esti ke ne ekzistas aliaj uzantoj.",
"preferences_settings_subtitle": "Administri agordojn pri la apo", "preferences_settings_subtitle": "Administri agordojn pri la apo",
"purchase_settings_server_activated": "La administranto respondecas pri la ŝlosilo de aŭtentikeco por la servilo", "purchase_settings_server_activated": "La administranto respondecas pri la ŝlosilo de aŭtentikeco por la servilo",
"rating_clear": "Forviŝi pritakson", "rating_clear": "Forviŝi pritakson",
"refresh": "Denove", "refresh": "Denove",
"refresh_encoded_videos": "Renovigi koditajn videojn",
"refresh_faces": "Renovigi vizaĝojn",
"refresh_metadata": "Renovigi metadatumojn",
"refresh_thumbnails": "Renovigi bildetojn",
"refreshed": "Renovigita(j)",
"refreshes_every_file": "Re-legas ĉiujn ekzistantajn kaj novajn dosierojn",
"refreshing_encoded_video": "Renovigado de koditaj videoj",
"refreshing_faces": "Renovigado de vizaĝoj",
"refreshing_metadata": "Renovigado de metadatumoj",
"remove_assets_shared_link_confirmation": "Ĉu vi certas, ke vi volas forigi {count, plural, one {# elementon} other {# elementojn}} de tiu dividita ligilo?",
"remove_from_favorites": "Forigi el preferataĵoj", "remove_from_favorites": "Forigi el preferataĵoj",
"remove_from_shared_link": "Forigi el dividita ligilo",
"removed_from_favorites": "Forigita(j) el preferataĵoj", "removed_from_favorites": "Forigita(j) el preferataĵoj",
"removed_from_favorites_count": "{count, plural, other {Forigis #}} el Preferataĵoj", "removed_from_favorites_count": "{count, plural, other {Forigis #}} el Preferataĵoj",
"rescan": "Reanalizi", "rescan": "Reanalizi",
@@ -1144,6 +1315,11 @@
"reset_sqlite_confirmation": "Ĉu vi certas, ke vi volas forviŝi la datumojn de la apo? Tio forigos ĉiujn agordojn kaj elsalutigos vin.", "reset_sqlite_confirmation": "Ĉu vi certas, ke vi volas forviŝi la datumojn de la apo? Tio forigos ĉiujn agordojn kaj elsalutigos vin.",
"reset_sqlite_confirmation_note": "Noto: vi devos relanĉi la apon por la forviŝo.", "reset_sqlite_confirmation_note": "Noto: vi devos relanĉi la apon por la forviŝo.",
"reset_sqlite_done": "Datumoj de la apo estas forviŝitaj. Bonvolu relanĉi Immich kaj ensalutu denove.", "reset_sqlite_done": "Datumoj de la apo estas forviŝitaj. Bonvolu relanĉi Immich kaj ensalutu denove.",
"restore": "Restaŭri",
"restore_all": "Restaŭri ĉiujn",
"restore_trash_action_prompt": "{count} restaŭrita(j) el rubujo",
"restore_user": "Restaŭri uzanton",
"restored_asset": "Restaŭri elementon",
"scaffold_body_error_unrecoverable": "Neriparebla eraro okazis. Bonvolu sendi al ni la eraron kaj la stakspuron per Discord aŭ per Github por ke ni povu helpi. Vi povas forviŝi la ĉi-subajn datumojn de la apo se vi volas.", "scaffold_body_error_unrecoverable": "Neriparebla eraro okazis. Bonvolu sendi al ni la eraron kaj la stakspuron per Discord aŭ per Github por ke ni povu helpi. Vi povas forviŝi la ĉi-subajn datumojn de la apo se vi volas.",
"scan": "Analizi", "scan": "Analizi",
"scan_all_libraries": "Analizi ĉiujn bibliotekojn", "scan_all_libraries": "Analizi ĉiujn bibliotekojn",
@@ -1152,18 +1328,79 @@
"scanning": "Analizado", "scanning": "Analizado",
"scanning_for_album": "Serĉado de albumo...", "scanning_for_album": "Serĉado de albumo...",
"search_suggestion_list_smart_search_hint_1": "Inteligenta serĉado defaŭlte estas ŝaltita. Por serĉi metadatumojn, uzu sintakson tiel ", "search_suggestion_list_smart_search_hint_1": "Inteligenta serĉado defaŭlte estas ŝaltita. Por serĉi metadatumojn, uzu sintakson tiel ",
"server_privacy": "Privateco de servilo",
"server_restarting_description": "La paĝo baldaŭ reŝargiĝos.",
"setting_notifications_subtitle": "Redakti viajn preferojn pri sciigoj", "setting_notifications_subtitle": "Redakti viajn preferojn pri sciigoj",
"share_action_prompt": "Dividis {count} elementojn",
"shared": "Dividitaj",
"shared_album_activities_input_disable": "Komentado estas malŝaltita",
"shared_album_activity_remove_content": "Ĉu vi volas forigi tiun ĉi agon?",
"shared_album_activity_remove_title": "Forigi agon",
"shared_album_section_people_action_error": "Okazis eraro dum forigo el la albumo",
"shared_album_section_people_action_leave": "Forigi uzanton de albumo",
"shared_album_section_people_action_remove_user": "Forigi uzanton de albumo",
"shared_album_section_people_title": "HOMOJ",
"shared_by": "Dividita de",
"shared_by_user": "Dividita de {user}",
"shared_by_you": "Dividita de vi",
"shared_from_partner": "Fotoj de {partner}",
"shared_intent_upload_button_progress_text": "{current} el {total} alŝutitaj",
"shared_link_app_bar_title": "Dividitaj ligiloj",
"shared_link_clipboard_copied_massage": "Kopiita al tondujo",
"shared_link_clipboard_text": "Ligilo: {link}\nPasvorto: {password}",
"shared_link_create_error": "Okazis eraro dum kreo de dividita ligilo",
"shared_link_custom_url_description": "Atingi la dividita ligilo per propra URL-o",
"shared_link_edit_description_hint": "Tajpu priskribon de la dividaĵaro",
"shared_link_edit_expire_after_option_day": "1 tago",
"shared_link_edit_expire_after_option_days": "{count} tagoj",
"shared_link_edit_expire_after_option_hour": "1 horo",
"shared_link_edit_expire_after_option_hours": "{count} horoj",
"shared_link_edit_expire_after_option_minute": "1 minuto",
"shared_link_edit_expire_after_option_minutes": "{count} minutoj",
"shared_link_edit_expire_after_option_months": "{count} monatoj",
"shared_link_edit_expire_after_option_year": "{count} jaro",
"shared_link_edit_password_hint": "Tajpu pasvorton por la dividaĵaro",
"shared_link_edit_submit_button": "Ĝisdatigi ligilon",
"shared_link_error_server_url_fetch": "Ne eblis trovi la URL-on de la servilo",
"shared_link_expires_day": "Eksvalidiĝos post {count} tago",
"shared_link_expires_days": "Eksvalidiĝos post {count} tagoj",
"shared_link_expires_hour": "Eksvalidiĝos post {count} horo",
"shared_link_expires_hours": "Eksvalidiĝos post {count} horoj",
"shared_link_expires_minute": "Eksvalidiĝos post {count} minuto",
"shared_link_expires_minutes": "Eksvalidiĝos post {count} minutoj",
"shared_link_expires_never": "Neniam eksvalidiĝos",
"shared_link_expires_second": "Eksvalidiĝos post {count} sekundo",
"shared_link_expires_seconds": "Eksvalidiĝos post {count} sekundoj",
"shared_link_info_chip_metadata": "EXIF",
"shared_link_manage_links": "Administri dividitajn ligilojn",
"shared_link_options": "Agordoj pri dividitaj ligiloj",
"shared_link_password_description": "Devigi uzon de pasvorto por uzi la ligilon",
"shared_links": "Dividitaj ligiloj",
"shared_links_description": "Dividi fotojn kaj videojn per ligilo",
"shared_photos_and_videos_count": "{assetCount, plural, other {# dividitaj fotoj kaj videoj.}}",
"shared_with_me": "Dividitaj kun mi",
"shared_with_partner": "Dividitaj kun {partner}",
"sharing_page_album": "Dividitaj albumoj",
"sharing_page_description": "Krei dividitajn albumojn por dividi fotojn kaj videojn kun konatoj.",
"sharing_silver_appbar_create_shared_album": "Nova dividita albumo",
"show_shared_links": "Montri dividitajn ligilojn",
"start_date": "Komenca dato", "start_date": "Komenca dato",
"start_date_before_end_date": "Komenca dato devas esti antaŭ fina dato", "start_date_before_end_date": "Komenca dato devas esti antaŭ fina dato",
"to_favorite": "Aldoni al preferataĵoj", "to_favorite": "Aldoni al preferataĵoj",
"trash_page_restore_all": "Restaŭri ĉiujn",
"trigger_description": "Evento, kiu ekfunkciigas la laborfluon", "trigger_description": "Evento, kiu ekfunkciigas la laborfluon",
"unfavorite": "Forigi el preferataĵoj", "unfavorite": "Forigi el preferataĵoj",
"unfavorite_action_prompt": "{count} forigita(j) el Preferataĵoj", "unfavorite_action_prompt": "{count} forigita(j) el Preferataĵoj",
"untitled_workflow": "Sentitola laborfluo", "untitled_workflow": "Sentitola laborfluo",
"upload_concurrency": "Nombro da samtempaj alŝutoj", "upload_concurrency": "Nombro da samtempaj alŝutoj",
"upload_errors": "Alŝuto finita kun {count, plural, one {# eraro} other {# eraroj}}. Reŝargu la paĝon por vidi novajn elementojn.",
"upload_success": "Alŝuto sukcese finita. Reŝargu la paĝon por vidi novajn elementojn.",
"user_pin_code_settings_description": "Administri vian PIN-kodon", "user_pin_code_settings_description": "Administri vian PIN-kodon",
"user_privacy": "Privateco de uzanto",
"user_purchase_settings_description": "Administri vian aĉeton", "user_purchase_settings_description": "Administri vian aĉeton",
"view_links": "Vidi ligilojn", "view_links": "Vidi ligilojn",
"waiting": "En atendovico",
"waiting_count": "En atendovico: {count}",
"week": "Semajno", "week": "Semajno",
"wifi_name": "Nomo de Vifireto", "wifi_name": "Nomo de Vifireto",
"workflow_delete_prompt": "Ĉu vi certas, ke vi volas forigi tiun ĉi laborfluon?", "workflow_delete_prompt": "Ĉu vi certas, ke vi volas forigi tiun ĉi laborfluon?",
@@ -1181,5 +1418,6 @@
"workflows_help_text": "Laborfluo aŭtomatigas agojn pri elementoj, laŭ ekigiloj kaj filtriloj", "workflows_help_text": "Laborfluo aŭtomatigas agojn pri elementoj, laŭ ekigiloj kaj filtriloj",
"year": "Jaro", "year": "Jaro",
"yes": "Jes", "yes": "Jes",
"you_dont_have_any_shared_links": "Vi ne havas ajnan dividitan ligilon",
"zero_to_clear_rating": "tuŝu 0 por forviŝi la pritakson de la elemento" "zero_to_clear_rating": "tuŝu 0 por forviŝi la pritakson de la elemento"
} }
+57 -6
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Habilitar notificaciones por correo electrónico", "notification_enable_email_notifications": "Habilitar notificaciones por correo electrónico",
"notification_settings": "Configuración de las notificaciones", "notification_settings": "Configuración de las notificaciones",
"notification_settings_description": "Administrar la configuración de notificaciones, incluido el correo electrónico", "notification_settings_description": "Administrar la configuración de notificaciones, incluido el correo electrónico",
"oauth_allow_insecure_requests": "Permitir solicitudes inseguras",
"oauth_allow_insecure_requests_description": "ADVERTENCIA: Esto deshabilita la validación de certificado TLS para peticiones OAuth y le puede exponer a ataques MITM.",
"oauth_auto_launch": "Lanzamiento automático", "oauth_auto_launch": "Lanzamiento automático",
"oauth_auto_launch_description": "Inicie el flujo de inicio de sesión de OAuth automáticamente al acceder a la página de inicio de sesión", "oauth_auto_launch_description": "Inicie el flujo de inicio de sesión de OAuth automáticamente al acceder a la página de inicio de sesión",
"oauth_auto_register": "Registro automático", "oauth_auto_register": "Registro automático",
@@ -274,9 +276,11 @@
"oauth_button_text": "Texto del botón", "oauth_button_text": "Texto del botón",
"oauth_client_secret_description": "Requerido para clientes confidenciales, o si PKCE (Prueba de clave para el intercambio de códigos) no es compatible con clientes públicos.", "oauth_client_secret_description": "Requerido para clientes confidenciales, o si PKCE (Prueba de clave para el intercambio de códigos) no es compatible con clientes públicos.",
"oauth_enable_description": "Iniciar sesión con OAuth", "oauth_enable_description": "Iniciar sesión con OAuth",
"oauth_end_session_url_description": "Redirigir al usuario a esta URI cuando cierra sesión.",
"oauth_mobile_redirect_uri": "URI de redireccionamiento móvil", "oauth_mobile_redirect_uri": "URI de redireccionamiento móvil",
"oauth_mobile_redirect_uri_override": "Sobreescribir URI de redirección móvil", "oauth_mobile_redirect_uri_override": "Sobreescribir URI de redirección móvil",
"oauth_mobile_redirect_uri_override_description": "Habilitar cuando el proveedor de OAuth no permite una URI móvil, como ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Habilitar cuando el proveedor de OAuth no permite una URI móvil, como ''{callback}''",
"oauth_prompt_description": "Parámetro de solicitud (p. eje. select_account, login, consent)",
"oauth_role_claim": "Concesión de rol", "oauth_role_claim": "Concesión de rol",
"oauth_role_claim_description": "Otorgar acceso de administrador automáticamente según la presencia de esta concesión. La concesión puede tener \"usuario\" o \"admin\".", "oauth_role_claim_description": "Otorgar acceso de administrador automáticamente según la presencia de esta concesión. La concesión puede tener \"usuario\" o \"admin\".",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -767,7 +771,7 @@
"cleanup_found_assets_with_size": "Se encontraron {count} recursos respaldados ({size})", "cleanup_found_assets_with_size": "Se encontraron {count} recursos respaldados ({size})",
"cleanup_icloud_shared_albums_excluded": "Los álbumes compartidos de iCloud están excluidos del escaneo", "cleanup_icloud_shared_albums_excluded": "Los álbumes compartidos de iCloud están excluidos del escaneo",
"cleanup_no_assets_found": "No se encontraron recursos que coincidan con los criterios anteriores. Liberar espacio solo puede eliminar recursos respaldados en el servidor", "cleanup_no_assets_found": "No se encontraron recursos que coincidan con los criterios anteriores. Liberar espacio solo puede eliminar recursos respaldados en el servidor",
"cleanup_preview_title": "{count} recursos a remover", "cleanup_preview_title": "{count} recursos a eliminar",
"cleanup_step3_description": "Busque recursos respaldados que coincidan con su fecha y conserve la configuración.", "cleanup_step3_description": "Busque recursos respaldados que coincidan con su fecha y conserve la configuración.",
"cleanup_step4_summary": "{count} recursos (creados antes del {date}) para eliminar de tu dispositivo local. Las fotos seguirán accesibles desde la app de Immich.", "cleanup_step4_summary": "{count} recursos (creados antes del {date}) para eliminar de tu dispositivo local. Las fotos seguirán accesibles desde la app de Immich.",
"cleanup_trash_hint": "Para completar la liberación de espacio, abra la aplicación de fotos y vacíe la papelera", "cleanup_trash_hint": "Para completar la liberación de espacio, abra la aplicación de fotos y vacíe la papelera",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Conserva fotos del último…", "cutoff_date_description": "Conserva fotos del último…",
"cutoff_day": "{count, plural, one {día} other {días}}", "cutoff_day": "{count, plural, one {día} other {días}}",
"cutoff_year": "{count, plural, one {año} other {años}}", "cutoff_year": "{count, plural, one {año} other {años}}",
"daily_title_text_date": "E dd, MMM",
"daily_title_text_date_year": "E dd de MMM, yyyy",
"dark": "Oscuro", "dark": "Oscuro",
"dark_theme": "Cambiar a tema oscuro", "dark_theme": "Cambiar a tema oscuro",
"date": "Fecha", "date": "Fecha",
"date_after": "Fecha posterior", "date_after": "Fecha posterior",
"date_and_time": "Fecha y hora", "date_and_time": "Fecha y hora",
"date_before": "Fecha anterior", "date_before": "Fecha anterior",
"date_format": "E d, LLL y • h:mm a", "date_of_birth": "Fecha de nacimiento",
"date_of_birth_saved": "Guardada con éxito la fecha de nacimiento", "date_of_birth_saved": "Guardada con éxito la fecha de nacimiento",
"date_range": "Rango de fechas", "date_range": "Rango de fechas",
"day": "Día", "day": "Día",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Elimina tus fotos y videos de tu dispositivo para liberar espacio. Los respaldos en el servidor se mantendrán seguros.", "free_up_space_description": "Elimina tus fotos y videos de tu dispositivo para liberar espacio. Los respaldos en el servidor se mantendrán seguros.",
"free_up_space_settings_subtitle": "Liberar espacio del dispositivo", "free_up_space_settings_subtitle": "Liberar espacio del dispositivo",
"full_path": "Ruta completa: {path}", "full_path": "Ruta completa: {path}",
"full_path_or_folder": "Ruta completa o carpeta",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Esta funcionalidad carga recursos externos desde Google para poder funcionar.", "gcast_enabled_description": "Esta funcionalidad carga recursos externos desde Google para poder funcionar.",
"general": "General", "general": "General",
@@ -1392,11 +1395,13 @@
"light_theme": "Cambiar a tema claro", "light_theme": "Cambiar a tema claro",
"like": "Me gusta", "like": "Me gusta",
"like_deleted": "Me gusta eliminado", "like_deleted": "Me gusta eliminado",
"link": "Enlace",
"link_motion_video": "Enlazar vídeo en movimiento", "link_motion_video": "Enlazar vídeo en movimiento",
"link_to_docs": "Para más información, consulta la <link>documentación</link>.", "link_to_docs": "Para más información, consulta la <link>documentación</link>.",
"link_to_oauth": "Enlace a OAuth", "link_to_oauth": "Enlace a OAuth",
"linked_oauth_account": "Cuenta OAuth vinculada", "linked_oauth_account": "Cuenta OAuth vinculada",
"list": "Lista", "list": "Lista",
"live": "En vivo",
"loading": "Cargando", "loading": "Cargando",
"loading_search_results_failed": "Error al cargar los resultados de la búsqueda", "loading_search_results_failed": "Error al cargar los resultados de la búsqueda",
"local": "Local", "local": "Local",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Todos marcados como leídos", "marked_all_as_read": "Todos marcados como leídos",
"matches": "Coincidencias", "matches": "Coincidencias",
"matching_assets": "Recursos coincidentes", "matching_assets": "Recursos coincidentes",
"media_chrome": {
"auto": "Auto",
"captions": "Subtítulos",
"captions_off": "Apagado",
"closed_captions": "subtítulos",
"decode_error": "Error de decodificación",
"disable_captions": "Desactivar subtítulos",
"enable_captions": "Activar subtítulos",
"enter_fullscreen_mode": "Entrar en modo pantalla completa",
"exit_fullscreen_mode": "Salir del modo pantalla completa",
"loop": "Bucle",
"media_error_description": "Un error de medios causó la interrupción de la reproducción. El contenido podría estar dañado o tu navegador no admite este formato.",
"media_loading": "cargando medios",
"mute": "Silenciar",
"network_error": "Error de red",
"network_error_description": "Un error de red causó la falla en la descarga del contenido.",
"not_supported_error": "Fuente no compatible",
"playback_rate": "Velocidad de reproducción",
"playback_rate_current": "velocidad de reproducción actual",
"playback_rate_value": "Velocidad de reproducción {playbackRate}",
"playback_time": "tiempo de reproducción",
"quality": "Calidad",
"second": "segundo",
"seconds": "segundos",
"time_value_of_total_time": "{currentTime} de {totalTime}",
"time_value_remaining": "{time} restante",
"unmute": "Reactivar sonido",
"unsupported_error_description": "Ocurrió un error de incompatibilidad. El servidor o la red fallaron, o tu navegador no admite este formato.",
"video_not_loaded_unknown_time": "video no cargado, tiempo desconocido.",
"video_player": "reproductor de video",
"volume": "volumen"
},
"media_type": "Tipo de medio", "media_type": "Tipo de medio",
"memories": "Recuerdos", "memories": "Recuerdos",
"memories_all_caught_up": "Puesto al día", "memories_all_caught_up": "Puesto al día",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Descarga la aplicación móvil utilizando las siguientes opciones", "mobile_app_download_onboarding_note": "Descarga la aplicación móvil utilizando las siguientes opciones",
"model": "Modelo", "model": "Modelo",
"month": "Mes", "month": "Mes",
"monthly_title_text_date_format": "MMMM a",
"more": "Mas", "more": "Mas",
"motion": "En movimiento",
"move": "Mover", "move": "Mover",
"move_down": "Bajar", "move_down": "Bajar",
"move_off_locked_folder": "Sacar de la carpeta protegida", "move_off_locked_folder": "Sacar de la carpeta protegida",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "No se puede editar la ubicación de recursos de solo lectura, omitiendo", "multiselect_grid_edit_gps_err_read_only": "No se puede editar la ubicación de recursos de solo lectura, omitiendo",
"mute_memories": "Silenciar recuerdos", "mute_memories": "Silenciar recuerdos",
"my_albums": "Mis álbumes", "my_albums": "Mis álbumes",
"my_immich_description": "Copiar la página actual como enlace de Mi Immich",
"my_immich_title": "Enlace de Mi Immich",
"name": "Nombre", "name": "Nombre",
"name_or_nickname": "Nombre o apodo", "name_or_nickname": "Nombre o apodo",
"name_required": "El nombre es obligatorio", "name_required": "El nombre es obligatorio",
@@ -1760,7 +1799,7 @@
"preferences_settings_title": "Preferencias", "preferences_settings_title": "Preferencias",
"preparing": "Preparando", "preparing": "Preparando",
"preset": "Preestablecido", "preset": "Preestablecido",
"preview": "Posterior", "preview": "Previsualizar",
"previous": "Anterior", "previous": "Anterior",
"previous_memory": "Recuerdo anterior", "previous_memory": "Recuerdo anterior",
"previous_or_next_day": "Día posterior/anterior", "previous_or_next_day": "Día posterior/anterior",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "¿Eliminar recursos?", "remove_assets_title": "¿Eliminar recursos?",
"remove_custom_date_range": "Eliminar intervalo de fechas personalizado", "remove_custom_date_range": "Eliminar intervalo de fechas personalizado",
"remove_deleted_assets": "Eliminar recursos sin conexión", "remove_deleted_assets": "Eliminar recursos sin conexión",
"remove_filter": "Eliminar filtro",
"remove_from_album": "Eliminar del álbum", "remove_from_album": "Eliminar del álbum",
"remove_from_album_action_prompt": "{count} eliminado del álbum", "remove_from_album_action_prompt": "{count} eliminado del álbum",
"remove_from_favorites": "Quitar de favoritos", "remove_from_favorites": "Quitar de favoritos",
@@ -1926,6 +1966,8 @@
"scan_settings": "Configuración de escaneo", "scan_settings": "Configuración de escaneo",
"scanning": "Escaneando", "scanning": "Escaneando",
"scanning_for_album": "Buscando álbum...", "scanning_for_album": "Buscando álbum...",
"screencast_mode_description": "Mostrar los indicadores de eventos del teclado y del ratón en la pantalla",
"screencast_mode_title": "Alternar modo de grabación de pantalla",
"search": "Buscar", "search": "Buscar",
"search_albums": "Buscar álbumes", "search_albums": "Buscar álbumes",
"search_by_context": "Buscar por contexto", "search_by_context": "Buscar por contexto",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Día de senderismo en Sapa", "search_by_description_example": "Día de senderismo en Sapa",
"search_by_filename": "Buscar por nombre de archivo o extensión", "search_by_filename": "Buscar por nombre de archivo o extensión",
"search_by_filename_example": "es decir IMG_1234.JPG o PNG", "search_by_filename_example": "es decir IMG_1234.JPG o PNG",
"search_by_full_path": "Buscar por ruta completa o carpeta",
"search_by_full_path_example": "John/Proyectos/Impresión_3D/2026-07-01 Puedes buscar Proyectos, 3D, Impresión, 2026, etc.",
"search_by_ocr": "Buscar por OCR", "search_by_ocr": "Buscar por OCR",
"search_by_ocr_example": "Café con leche", "search_by_ocr_example": "Café con leche",
"search_camera_lens_model": "Buscar modelo de lente...", "search_camera_lens_model": "Buscar modelo de lente...",
@@ -2148,6 +2192,7 @@
"show_schema": "Mostrar esquema", "show_schema": "Mostrar esquema",
"show_search_options": "Mostrar opciones de búsqueda", "show_search_options": "Mostrar opciones de búsqueda",
"show_shared_links": "Mostrar enlaces compartidos", "show_shared_links": "Mostrar enlaces compartidos",
"show_slideshow_metadata_overlay": "Mostrar información de la imagen por superposición",
"show_slideshow_transition": "Mostrar la transición de las diapositivas", "show_slideshow_transition": "Mostrar la transición de las diapositivas",
"show_supporter_badge": "Insignia de colaborador", "show_supporter_badge": "Insignia de colaborador",
"show_supporter_badge_description": "Mostrar una insignia de colaborador", "show_supporter_badge_description": "Mostrar una insignia de colaborador",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Ir a las carpetas", "skip_to_folders": "Ir a las carpetas",
"skip_to_tags": "Ir a las etiquetas", "skip_to_tags": "Ir a las etiquetas",
"slideshow": "Pase de diapositivas", "slideshow": "Pase de diapositivas",
"slideshow_metadata_overlay_mode": "Contenido superpuesto",
"slideshow_metadata_overlay_mode_description_only": "Solo descripción",
"slideshow_metadata_overlay_mode_full": "Lleno",
"slideshow_repeat": "Repetir presentación de diapositivas", "slideshow_repeat": "Repetir presentación de diapositivas",
"slideshow_repeat_description": "Volver al inicio cuando finaliza la presentación de diapositivas", "slideshow_repeat_description": "Volver al inicio cuando finaliza la presentación de diapositivas",
"slideshow_settings": "Ajustes de diapositivas", "slideshow_settings": "Ajustes de diapositivas",
@@ -2214,6 +2262,8 @@
"sync_status": "Estado de la sincronización", "sync_status": "Estado de la sincronización",
"sync_status_subtitle": "Ver y gestionar el estado de la sincronización", "sync_status_subtitle": "Ver y gestionar el estado de la sincronización",
"sync_upload_album_setting_subtitle": "Crea y sube tus fotos y videos a los álbumes seleccionados en Immich", "sync_upload_album_setting_subtitle": "Crea y sube tus fotos y videos a los álbumes seleccionados en Immich",
"system_theme": "Tema del sistema",
"system_theme_command_description": "Usar el tema del sistema ({value})",
"tag": "Etiqueta", "tag": "Etiqueta",
"tag_assets": "Etiquetar recursos", "tag_assets": "Etiquetar recursos",
"tag_created": "Etiqueta creada: {tag}", "tag_created": "Etiqueta creada: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Flujos de trabajo", "workflows": "Flujos de trabajo",
"workflows_help_text": "Los flujos de trabajo automatizan acciones en sus recursos según activadores y filtros", "workflows_help_text": "Los flujos de trabajo automatizan acciones en sus recursos según activadores y filtros",
"wrong_pin_code": "Código PIN incorrecto", "wrong_pin_code": "Código PIN incorrecto",
"x_of_total": "{x}/{total}",
"year": "Año", "year": "Año",
"years_ago": "Hace {years, plural, one {# año} other {# años}}", "years_ago": "Hace {years, plural, one {# año} other {# años}}",
"yes": "Sí", "yes": "Sí",
+38 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Luba e-posti teel teavitused", "notification_enable_email_notifications": "Luba e-posti teel teavitused",
"notification_settings": "Teavituse seaded", "notification_settings": "Teavituse seaded",
"notification_settings_description": "Halda teavituste seadeid, sh. e-posti teel", "notification_settings_description": "Halda teavituste seadeid, sh. e-posti teel",
"oauth_allow_insecure_requests": "Luba ebaturvalised päringud",
"oauth_allow_insecure_requests_description": "HOIATUS: See lülitab välja OAuth päringute TLS-sertifikaadi valideerimise ja võib jätta sind kaitseta vahendusrünnete ees.",
"oauth_auto_launch": "Automaatne käivitamine", "oauth_auto_launch": "Automaatne käivitamine",
"oauth_auto_launch_description": "Alusta OAuth autentimist automaatselt sisselogimise lehele jõudmisel", "oauth_auto_launch_description": "Alusta OAuth autentimist automaatselt sisselogimise lehele jõudmisel",
"oauth_auto_register": "Automaatne registreerimine", "oauth_auto_register": "Automaatne registreerimine",
@@ -274,9 +276,11 @@
"oauth_button_text": "Nupu tekst", "oauth_button_text": "Nupu tekst",
"oauth_client_secret_description": "Nõutud konfidentsiaalse kliendi jaoks, või avaliku kliendi jaoks, kui PKCE (Proof Key for Code Exchange) ei ole toetatud.", "oauth_client_secret_description": "Nõutud konfidentsiaalse kliendi jaoks, või avaliku kliendi jaoks, kui PKCE (Proof Key for Code Exchange) ei ole toetatud.",
"oauth_enable_description": "Sisene OAuth abil", "oauth_enable_description": "Sisene OAuth abil",
"oauth_end_session_url_description": "Suuna kasutaja välja logimisel sellele URI-le.",
"oauth_mobile_redirect_uri": "Mobiilne ümbersuunamise URI", "oauth_mobile_redirect_uri": "Mobiilne ümbersuunamise URI",
"oauth_mobile_redirect_uri_override": "Mobiilse ümbersuunamise URI ülekirjutamine", "oauth_mobile_redirect_uri_override": "Mobiilse ümbersuunamise URI ülekirjutamine",
"oauth_mobile_redirect_uri_override_description": "Lülita sisse, kui OAuth pakkuja ei luba mobiilset URI-d, näiteks ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Lülita sisse, kui OAuth pakkuja ei luba mobiilset URI-d, näiteks ''{callback}''",
"oauth_prompt_description": "Prompt parameeter (nt. select_account, login, consent)",
"oauth_role_claim": "Rolli väide", "oauth_role_claim": "Rolli väide",
"oauth_role_claim_description": "Anna selle väite olemasolul automaatselt administraatori ligipääs. Väite väärtus võib olla 'user' või 'admin'.", "oauth_role_claim_description": "Anna selle väite olemasolul automaatselt administraatori ligipääs. Väite väärtus võib olla 'user' või 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Jäta alles fotod ja videod viimasest…", "cutoff_date_description": "Jäta alles fotod ja videod viimasest…",
"cutoff_day": "{count, plural, one {päev} other {päeva}}", "cutoff_day": "{count, plural, one {päev} other {päeva}}",
"cutoff_year": "{count, plural, one {aasta} other {aastat}}", "cutoff_year": "{count, plural, one {aasta} other {aastat}}",
"daily_title_text_date": "d. MMMM",
"daily_title_text_date_year": "d. MMMM yyyy",
"dark": "Tume", "dark": "Tume",
"dark_theme": "Vali tume teema", "dark_theme": "Vali tume teema",
"date": "Kuupäev", "date": "Kuupäev",
"date_after": "Kuupäev pärast", "date_after": "Kuupäev pärast",
"date_and_time": "Kuupäev ja kellaaeg", "date_and_time": "Kuupäev ja kellaaeg",
"date_before": "Kuupäev enne", "date_before": "Kuupäev enne",
"date_format": "d. MMMM y • HH:mm", "date_of_birth": "Sünnikuupäev",
"date_of_birth_saved": "Sünnikuupäev salvestatud", "date_of_birth_saved": "Sünnikuupäev salvestatud",
"date_range": "Kuupäevavahemik", "date_range": "Kuupäevavahemik",
"day": "Päev", "day": "Päev",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Liiguta varundatud fotod ja videod prügikasti, et talletusruumi vabastada. Serveris olevad koopiad jäävad alles.", "free_up_space_description": "Liiguta varundatud fotod ja videod prügikasti, et talletusruumi vabastada. Serveris olevad koopiad jäävad alles.",
"free_up_space_settings_subtitle": "Vabasta seadme talletusruumi", "free_up_space_settings_subtitle": "Vabasta seadme talletusruumi",
"full_path": "Täielik tee: {path}", "full_path": "Täielik tee: {path}",
"full_path_or_folder": "Täielik tee või kaust",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "See funktsionaalsus laadib töötamiseks Google'st väliseid ressursse.", "gcast_enabled_description": "See funktsionaalsus laadib töötamiseks Google'st väliseid ressursse.",
"general": "Üldine", "general": "Üldine",
@@ -1392,6 +1395,7 @@
"light_theme": "Vali hele teema", "light_theme": "Vali hele teema",
"like": "Meeldib", "like": "Meeldib",
"like_deleted": "Meeldimine kustutatud", "like_deleted": "Meeldimine kustutatud",
"link": "Link",
"link_motion_video": "Lingi liikuv video", "link_motion_video": "Lingi liikuv video",
"link_to_docs": "Rohkema info saamiseks vaata <link>dokumentatsiooni</link>.", "link_to_docs": "Rohkema info saamiseks vaata <link>dokumentatsiooni</link>.",
"link_to_oauth": "Ühenda OAuth", "link_to_oauth": "Ühenda OAuth",
@@ -1518,6 +1522,23 @@
"marked_all_as_read": "Kõik märgiti loetuks", "marked_all_as_read": "Kõik märgiti loetuks",
"matches": "Ühtivad failid", "matches": "Ühtivad failid",
"matching_assets": "Ühtivad üksused", "matching_assets": "Ühtivad üksused",
"media_chrome": {
"captions": "Subtiitrid",
"decode_error": "Dekodeerimise viga",
"disable_captions": "Keela subtiitrid",
"enable_captions": "Luba subtiitrid",
"mute": "Vaigista",
"network_error": "Võrgu tõrge",
"not_supported_error": "Allikas pole toetatud",
"playback_rate": "Taasesituse kiirus",
"playback_rate_current": "praegune taasesituse kiirus",
"playback_rate_value": "Taasesituse kiirus {playbackRate}",
"quality": "Kvaliteet",
"second": "sekund",
"seconds": "sekundit",
"time_value_of_total_time": "{currentTime} / {totalTime}",
"volume": "helitugevus"
},
"media_type": "Üksuse tüüp", "media_type": "Üksuse tüüp",
"memories": "Mälestused", "memories": "Mälestused",
"memories_all_caught_up": "Ongi kõik", "memories_all_caught_up": "Ongi kõik",
@@ -1544,7 +1565,6 @@
"mobile_app_download_onboarding_note": "Mobiilirakenduse allalaadimiseks kasuta järgnevaid valikuid", "mobile_app_download_onboarding_note": "Mobiilirakenduse allalaadimiseks kasuta järgnevaid valikuid",
"model": "Mudel", "model": "Mudel",
"month": "Kuu", "month": "Kuu",
"monthly_title_text_date_format": "MMMM y",
"more": "Rohkem", "more": "Rohkem",
"move": "Liiguta", "move": "Liiguta",
"move_down": "Liiguta alla", "move_down": "Liiguta alla",
@@ -1562,6 +1582,8 @@
"multiselect_grid_edit_gps_err_read_only": "Kirjutuskaitsega üksus(t)e asukohta ei saa muuta, jäetakse vahele", "multiselect_grid_edit_gps_err_read_only": "Kirjutuskaitsega üksus(t)e asukohta ei saa muuta, jäetakse vahele",
"mute_memories": "Vaigista mälestused", "mute_memories": "Vaigista mälestused",
"my_albums": "Minu albumid", "my_albums": "Minu albumid",
"my_immich_description": "Kopeeri praegune leht kui Minu Immich link",
"my_immich_title": "Minu Immich link",
"name": "Nimi", "name": "Nimi",
"name_or_nickname": "Nimi või hüüdnimi", "name_or_nickname": "Nimi või hüüdnimi",
"name_required": "Nimi on nõutud", "name_required": "Nimi on nõutud",
@@ -1853,6 +1875,7 @@
"remove_assets_title": "Eemalda üksused?", "remove_assets_title": "Eemalda üksused?",
"remove_custom_date_range": "Eemalda kohandatud kuupäevavahemik", "remove_custom_date_range": "Eemalda kohandatud kuupäevavahemik",
"remove_deleted_assets": "Eemalda kustutatud üksused", "remove_deleted_assets": "Eemalda kustutatud üksused",
"remove_filter": "Eemalda filter",
"remove_from_album": "Eemalda albumist", "remove_from_album": "Eemalda albumist",
"remove_from_album_action_prompt": "{count} eemaldatud albumist", "remove_from_album_action_prompt": "{count} eemaldatud albumist",
"remove_from_favorites": "Eemalda lemmikutest", "remove_from_favorites": "Eemalda lemmikutest",
@@ -1926,6 +1949,8 @@
"scan_settings": "Skaneerimise seaded", "scan_settings": "Skaneerimise seaded",
"scanning": "Otsimine", "scanning": "Otsimine",
"scanning_for_album": "Albumi skaneerimine...", "scanning_for_album": "Albumi skaneerimine...",
"screencast_mode_description": "Kuva ekraanil klaviatuuri- ja hiiresündmuste indikaatoreid",
"screencast_mode_title": "Lülita kuvalevi režiim",
"search": "Otsi", "search": "Otsi",
"search_albums": "Otsi albumeid", "search_albums": "Otsi albumeid",
"search_by_context": "Otsi konteksti alusel", "search_by_context": "Otsi konteksti alusel",
@@ -1933,6 +1958,8 @@
"search_by_description_example": "Matkapäev Sapas", "search_by_description_example": "Matkapäev Sapas",
"search_by_filename": "Otsi failinime või -laiendi järgi", "search_by_filename": "Otsi failinime või -laiendi järgi",
"search_by_filename_example": "st. IMG_1234.JPG või PNG", "search_by_filename_example": "st. IMG_1234.JPG või PNG",
"search_by_full_path": "Otsi täieliku tee või kausta alusel",
"search_by_full_path_example": "/Juhan/Projektid/3D_printimine/2026-07-01 - saad otsida märksõnu Projektid, 3D, printimine, 2026 jne.",
"search_by_ocr": "Otsi OCR-i abil", "search_by_ocr": "Otsi OCR-i abil",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Otsi läätse mudelit...", "search_camera_lens_model": "Otsi läätse mudelit...",
@@ -2148,6 +2175,7 @@
"show_schema": "Kuva skeem", "show_schema": "Kuva skeem",
"show_search_options": "Kuva otsingu valikud", "show_search_options": "Kuva otsingu valikud",
"show_shared_links": "Näita jagatud linke", "show_shared_links": "Näita jagatud linke",
"show_slideshow_metadata_overlay": "Kuva pildi info ülekatet",
"show_slideshow_transition": "Kuva slaidiesitluse üleminekud", "show_slideshow_transition": "Kuva slaidiesitluse üleminekud",
"show_supporter_badge": "Toetaja märk", "show_supporter_badge": "Toetaja märk",
"show_supporter_badge_description": "Kuva toetaja märki", "show_supporter_badge_description": "Kuva toetaja märki",
@@ -2163,6 +2191,9 @@
"skip_to_folders": "Kaustade juurde", "skip_to_folders": "Kaustade juurde",
"skip_to_tags": "Siltide juurde", "skip_to_tags": "Siltide juurde",
"slideshow": "Slaidiesitlus", "slideshow": "Slaidiesitlus",
"slideshow_metadata_overlay_mode": "Ülekatte sisu",
"slideshow_metadata_overlay_mode_description_only": "Ainult kirjeldus",
"slideshow_metadata_overlay_mode_full": "Täielik",
"slideshow_repeat": "Korda slaidiesitlust", "slideshow_repeat": "Korda slaidiesitlust",
"slideshow_repeat_description": "Mine slaidiesitluse lõppedes tagasi algusesse", "slideshow_repeat_description": "Mine slaidiesitluse lõppedes tagasi algusesse",
"slideshow_settings": "Slaidiesitluse seaded", "slideshow_settings": "Slaidiesitluse seaded",
@@ -2214,6 +2245,8 @@
"sync_status": "Sünkroonimise staatus", "sync_status": "Sünkroonimise staatus",
"sync_status_subtitle": "Vaata ja halda sünkroonimissüsteemi", "sync_status_subtitle": "Vaata ja halda sünkroonimissüsteemi",
"sync_upload_album_setting_subtitle": "Loo ja laadi oma pildid ja videod üles Immich'isse valitud albumitesse", "sync_upload_album_setting_subtitle": "Loo ja laadi oma pildid ja videod üles Immich'isse valitud albumitesse",
"system_theme": "Süsteemi teema",
"system_theme_command_description": "Kasuta süsteemi teemat ({value})",
"tag": "Silt", "tag": "Silt",
"tag_assets": "Sildista üksuseid", "tag_assets": "Sildista üksuseid",
"tag_created": "Lisatud silt: {tag}", "tag_created": "Lisatud silt: {tag}",
@@ -2425,6 +2458,7 @@
"workflows": "Töövood", "workflows": "Töövood",
"workflows_help_text": "Töövood automatiseerivad tegevusi üksustega päästikute ja filtrite alusel", "workflows_help_text": "Töövood automatiseerivad tegevusi üksustega päästikute ja filtrite alusel",
"wrong_pin_code": "Vale PIN-kood", "wrong_pin_code": "Vale PIN-kood",
"x_of_total": "{x}/{total}",
"year": "Aasta", "year": "Aasta",
"years_ago": "{years, plural, one {# aasta} other {# aastat}} tagasi", "years_ago": "{years, plural, one {# aasta} other {# aastat}} tagasi",
"yes": "Jah", "yes": "Jah",
+8
View File
@@ -125,7 +125,15 @@
"metadata_settings": "Metadata Konfigurazioa", "metadata_settings": "Metadata Konfigurazioa",
"metadata_settings_description": "Kudeatu metadaten konfigurazioa", "metadata_settings_description": "Kudeatu metadaten konfigurazioa",
"migration_job": "Migrazio", "migration_job": "Migrazio",
"oauth_prompt_description": "Prompt parametroa",
"oauth_role_claim": "Rol aldarrikapena",
"oauth_role_claim_description": "Eman automatikoki administratzaile sarbidea erreklamazio honen presentzian oinarrituta. Erreklamazioak 'erabiltzailea' edo 'administratzailea' izan dezake.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "OAuth saioaren hasierako konfigurazioa kudeatu.",
"oauth_settings_more_details": "Ezaugarri horri buruzko xehetasun gehiago nahi izanez gero, ikusi <link>docs</link>.",
"oauth_storage_label_claim": "Memoriaren etiketa eskaera",
"oauth_storage_label_claim_description": "Erabiltzailearen memoria-etiketa automatikoki finkatzea, eskatutako balioan.",
"oauth_storage_quota_claim": "Eskatutako memoriaren kuota",
"transcoding_acceleration_vaapi": "VAAPI" "transcoding_acceleration_vaapi": "VAAPI"
}, },
"advanced": "Aurreratua", "advanced": "Aurreratua",
+23 -14
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Ota käyttöön sähköposti-ilmoitukset", "notification_enable_email_notifications": "Ota käyttöön sähköposti-ilmoitukset",
"notification_settings": "Ilmoitusasetukset", "notification_settings": "Ilmoitusasetukset",
"notification_settings_description": "Hallitse ilmoitusasetuksia, myös sähköpostin", "notification_settings_description": "Hallitse ilmoitusasetuksia, myös sähköpostin",
"oauth_allow_insecure_requests": "Salli turvattomat pyynnöt",
"oauth_allow_insecure_requests_description": "VAROITUS: Tämä poistaa TLS-varmenteen tarkistuksen OAuth-pyynnöiltä ja voi altistaa sinut väliintulohyökkäyksille (MITM).",
"oauth_auto_launch": "Automaattinen käynnistys", "oauth_auto_launch": "Automaattinen käynnistys",
"oauth_auto_launch_description": "Aloita OAuth-kirjautumisvuo heti kun saavutaan kirjautumissivulle", "oauth_auto_launch_description": "Aloita OAuth-kirjautumisvuo heti kun saavutaan kirjautumissivulle",
"oauth_auto_register": "Automaattinen rekisteröinti", "oauth_auto_register": "Automaattinen rekisteröinti",
@@ -274,20 +276,22 @@
"oauth_button_text": "Painikkeen teksti", "oauth_button_text": "Painikkeen teksti",
"oauth_client_secret_description": "Vaaditaan luottamukselliselle asiakasohjelmalle, tai jos julkinen asiakasohjelma ei tue PKCE:tä (Proof Key for Code Exchange).", "oauth_client_secret_description": "Vaaditaan luottamukselliselle asiakasohjelmalle, tai jos julkinen asiakasohjelma ei tue PKCE:tä (Proof Key for Code Exchange).",
"oauth_enable_description": "Kirjaudu käyttäen OAuthia", "oauth_enable_description": "Kirjaudu käyttäen OAuthia",
"oauth_end_session_url_description": "Uudelleenohjaa käyttäjä tähän URI-osoitteeseen uloskirjautumisen jälkeen.",
"oauth_mobile_redirect_uri": "Mobiilin uudelleenohjaus-URI", "oauth_mobile_redirect_uri": "Mobiilin uudelleenohjaus-URI",
"oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI", "oauth_mobile_redirect_uri_override": "Ohita mobiilin uudelleenohjaus-URI",
"oauth_mobile_redirect_uri_override_description": "Ota käyttöön kun OAuth-tarjoaja ei salli mobiili-URI:a, kuten ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Ota käyttöön kun OAuth-tarjoaja ei salli mobiili-URI:a, kuten ''{callback}''",
"oauth_prompt_description": "Kehoteparametri (esim. select_account, login, consent)",
"oauth_role_claim": "Roolin vaatimus", "oauth_role_claim": "Roolin vaatimus",
"oauth_role_claim_description": "Salli pääkäyttäjän pääsyoikeus automaattisesti tämän vaatimuksen perusteella. Vaatimus voi sisältää, joko 'käyttäjän' tai 'pääkäyttäjän'.", "oauth_role_claim_description": "Salli pääkäyttäjän pääsyoikeus automaattisesti tämän vaatimuksen perusteella. Vaatimus voi sisältää, joko 'käyttäjän' tai 'pääkäyttäjän'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
"oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia", "oauth_settings_description": "Hallitse OAuth-kirjautumisen asetuksia",
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.", "oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
"oauth_storage_label_claim": "Tallennustilan nimikkeen valtuutusväittämä (claim)", "oauth_storage_label_claim": "Tallennustilan nimikkeen valtuutusväittämä (claim)",
"oauth_storage_label_claim_description": "Määriä käyttäjän tallennustilan nimike tämän väittämän arvoksi automaattisesti.", "oauth_storage_label_claim_description": "Määritä käyttäjän tallennustilan nimike tämän vaatimuksen arvoksi automaattisesti.",
"oauth_storage_quota_claim": "Tallennustilan kiintiön väittämä (claim)", "oauth_storage_quota_claim": "Tallennustilan kiintiön vaatimus",
"oauth_storage_quota_claim_description": "Aseta automaattisesti käyttäjien tallennustilan määrä tähän arvoon.", "oauth_storage_quota_claim_description": "Aseta automaattisesti käyttäjien tallennustilan määrä tähän arvoon.",
"oauth_storage_quota_default": "Tallennustilan oletuskiintiö (Gt)", "oauth_storage_quota_default": "Tallennustilan oletuskiintiö (Gt)",
"oauth_storage_quota_default_description": "Käytettävä kiintiön määrä gigatavuissa, kun väittämää ei ole annettu.", "oauth_storage_quota_default_description": "Käytettävä kiintiön määrä gigatavuissa, kun vaatimusta ei ole annettu.",
"oauth_timeout": "Pyynnön aikakatkaisu", "oauth_timeout": "Pyynnön aikakatkaisu",
"oauth_timeout_description": "Pyyntöjen aikakatkaisu millisekunteina", "oauth_timeout_description": "Pyyntöjen aikakatkaisu millisekunteina",
"ocr_job_description": "Käytä koneoppimista tunnistamaan tekstiä kuvista", "ocr_job_description": "Käytä koneoppimista tunnistamaan tekstiä kuvista",
@@ -463,8 +467,8 @@
"advanced_settings_proxy_headers_title": "Mukautetut välityspalvelimen otsikot [KOKEELLINEN]", "advanced_settings_proxy_headers_title": "Mukautetut välityspalvelimen otsikot [KOKEELLINEN]",
"advanced_settings_readonly_mode_subtitle": "Aktivoi vain luku -tilan, jolloin valokuvia voi ainoastaan selata. Toiminnot kuten useiden kuvien valitseminen, jakaminen, siirtäminen toistolaitteelle ja poistaminen ovat pois käytöstä. Laita vain luku -tila päälle tai pois päältä päävalikon käyttäjäkuvakkeesta", "advanced_settings_readonly_mode_subtitle": "Aktivoi vain luku -tilan, jolloin valokuvia voi ainoastaan selata. Toiminnot kuten useiden kuvien valitseminen, jakaminen, siirtäminen toistolaitteelle ja poistaminen ovat pois käytöstä. Laita vain luku -tila päälle tai pois päältä päävalikon käyttäjäkuvakkeesta",
"advanced_settings_readonly_mode_title": "Vain luku -tila", "advanced_settings_readonly_mode_title": "Vain luku -tila",
"advanced_settings_self_signed_ssl_subtitle": "Ohita SSL sertifikaattivarmennus palvelimen päätepisteellä. Vaaditaan self-signed -sertifikaateissa.", "advanced_settings_self_signed_ssl_subtitle": "Ohittaa SSL-varmenteen tarkistuksen palvelimen päätepisteessä. Vaaditaan itse allekirjoitetuille varmenteille.",
"advanced_settings_self_signed_ssl_title": "Salli self-signed SSL -sertifikaatit [KOKEELLINEN]", "advanced_settings_self_signed_ssl_title": "Salli itse allekirjoitetut SSL-varmenteet [KOKEELLINEN]",
"advanced_settings_sync_remote_deletions_subtitle": "Poista tai palauta kohde automaattisesti tällä laitteella, kun kyseinen toiminto suoritetaan verkossa", "advanced_settings_sync_remote_deletions_subtitle": "Poista tai palauta kohde automaattisesti tällä laitteella, kun kyseinen toiminto suoritetaan verkossa",
"advanced_settings_sync_remote_deletions_title": "Synkronoi etäpoistot [KOKEELLINEN]", "advanced_settings_sync_remote_deletions_title": "Synkronoi etäpoistot [KOKEELLINEN]",
"advanced_settings_tile_subtitle": "Edistyneen käyttäjän asetukset", "advanced_settings_tile_subtitle": "Edistyneen käyttäjän asetukset",
@@ -784,9 +788,9 @@
"client_cert_invalid_msg": "Virheellinen varmennetiedosto tai väärä salasana", "client_cert_invalid_msg": "Virheellinen varmennetiedosto tai väärä salasana",
"client_cert_password_message": "Syötä salasana tälle sertifikaatille", "client_cert_password_message": "Syötä salasana tälle sertifikaatille",
"client_cert_password_title": "Sertifikaatin salasana", "client_cert_password_title": "Sertifikaatin salasana",
"client_cert_remove_msg": "Asiakassertifikaatti on poistettu", "client_cert_remove_msg": "Asiakasvarmenne on poistettu",
"client_cert_subtitle": "Vain PKCS12 (.p12, .pfx) -muotoa tuetaan. Varmenteen tuonti/poisto on käytettävissä vain ennen sisäänkirjautumista", "client_cert_subtitle": "Vain PKCS12 (.p12, .pfx) -muotoa tuetaan. Varmenteen tuonti/poisto on käytettävissä vain ennen sisäänkirjautumista",
"client_cert_title": "SSL-asiakassertifikaatti [KOKEELLINEN]", "client_cert_title": "SSL-asiakasvarmenne [KOKEELLINEN]",
"clockwise": "Myötäpäivään", "clockwise": "Myötäpäivään",
"close": "Sulje", "close": "Sulje",
"collapse": "Supista", "collapse": "Supista",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Säilytä kuvat viimeisimmältä…", "cutoff_date_description": "Säilytä kuvat viimeisimmältä…",
"cutoff_day": "{count, plural, one {päivä} other {päivää}}", "cutoff_day": "{count, plural, one {päivä} other {päivää}}",
"cutoff_year": "{count, plural, one {vuosi} other {vuotta}}", "cutoff_year": "{count, plural, one {vuosi} other {vuotta}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Tumma", "dark": "Tumma",
"dark_theme": "Vaihda tummaan teemaan", "dark_theme": "Vaihda tummaan teemaan",
"date": "Päivämäärä", "date": "Päivämäärä",
"date_after": "Päivämäärän jälkeen", "date_after": "Päivämäärän jälkeen",
"date_and_time": "Päivämäärä ja aika", "date_and_time": "Päivämäärä ja aika",
"date_before": "Päivä ennen", "date_before": "Päivä ennen",
"date_format": "E d. LLL y • hh:mm", "date_of_birth": "Syntymäaika",
"date_of_birth_saved": "Syntymäaika tallennettu", "date_of_birth_saved": "Syntymäaika tallennettu",
"date_range": "Päivämäärän rajaus", "date_range": "Päivämäärän rajaus",
"day": "Päivä", "day": "Päivä",
@@ -944,7 +946,7 @@
"display_order": "Näyttöjärjestys", "display_order": "Näyttöjärjestys",
"display_original_photos": "Näytä alkuperäiset kuvat", "display_original_photos": "Näytä alkuperäiset kuvat",
"display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva esikatselukuvan sijasta, kun alkuperäinen kuva on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.", "display_original_photos_setting_description": "Näytä mieluiten alkuperäinen kuva esikatselukuvan sijasta, kun alkuperäinen kuva on web-yhteensopiva. Tämä voi aiheuttaa kuvien näyttämisen hitautta.",
"do_not_show_again": "Älä näytä tätä enää", "do_not_show_again": "Älä näytä tätä uudelleen",
"documentation": "Dokumentaatio", "documentation": "Dokumentaatio",
"done": "Valmis", "done": "Valmis",
"download": "Lataa", "download": "Lataa",
@@ -1392,6 +1394,7 @@
"light_theme": "Vaihda vaaleaan teemaan", "light_theme": "Vaihda vaaleaan teemaan",
"like": "Tykkää", "like": "Tykkää",
"like_deleted": "Tykkäys poistettu", "like_deleted": "Tykkäys poistettu",
"link": "Linkki",
"link_motion_video": "Linkitä liikevideo", "link_motion_video": "Linkitä liikevideo",
"link_to_docs": "Lisätietoja löytyy <link>dokumentaatiosta</link>.", "link_to_docs": "Lisätietoja löytyy <link>dokumentaatiosta</link>.",
"link_to_oauth": "Linkki OAuth", "link_to_oauth": "Linkki OAuth",
@@ -1437,7 +1440,7 @@
"login_form_failed_get_oauth_server_config": "Virhe kirjauduttaessa OAuth:lla, tarkista palvelimen URL", "login_form_failed_get_oauth_server_config": "Virhe kirjauduttaessa OAuth:lla, tarkista palvelimen URL",
"login_form_failed_get_oauth_server_disable": "OAuth-ominaisuus ei ole käytössä tällä palvelimella", "login_form_failed_get_oauth_server_disable": "OAuth-ominaisuus ei ole käytössä tällä palvelimella",
"login_form_failed_login": "Virhe kirjautumisessa. Tarkista palvelimen URL, sähköpostiosoite ja salasana", "login_form_failed_login": "Virhe kirjautumisessa. Tarkista palvelimen URL, sähköpostiosoite ja salasana",
"login_form_handshake_exception": "Tapahtui poikkeus kättelyssä palvelimen kanssa. Kytke päälle self-signed -sertifikaattituki asetuksista, mikäli käytät self-signed -sertifikaatteja.", "login_form_handshake_exception": "Kättely palvelimen kanssa epäonnistui. Ota käyttöön itse allekirjoitettujen varmenteiden tuki asetuksista, jos käytät niitä.",
"login_form_password_hint": "salasana", "login_form_password_hint": "salasana",
"login_form_save_login": "Pysy kirjautuneena", "login_form_save_login": "Pysy kirjautuneena",
"login_form_server_empty": "Syötä palvelimen URL-osoite.", "login_form_server_empty": "Syötä palvelimen URL-osoite.",
@@ -1521,7 +1524,7 @@
"media_type": "Median tyyppi", "media_type": "Median tyyppi",
"memories": "Muistoja", "memories": "Muistoja",
"memories_all_caught_up": "Kaikki ajan tasalla", "memories_all_caught_up": "Kaikki ajan tasalla",
"memories_check_back_tomorrow": "Palaa huomenna nähdäskesi lisää muistoja", "memories_check_back_tomorrow": "Palaa huomenna nähdäksesi lisää muistoja",
"memories_setting_description": "Hallitse mitä näet muistoissasi", "memories_setting_description": "Hallitse mitä näet muistoissasi",
"memories_start_over": "Aloita alusta", "memories_start_over": "Aloita alusta",
"memories_swipe_to_close": "Pyyhkäise ylös sulkeaksesi", "memories_swipe_to_close": "Pyyhkäise ylös sulkeaksesi",
@@ -1544,7 +1547,6 @@
"mobile_app_download_onboarding_note": "Lataa mobiilisovellus käyttämällä seuraavia vaihtoehtoja", "mobile_app_download_onboarding_note": "Lataa mobiilisovellus käyttämällä seuraavia vaihtoehtoja",
"model": "Malli", "model": "Malli",
"month": "Kuukauden mukaan", "month": "Kuukauden mukaan",
"monthly_title_text_date_format": "MMMM y",
"more": "Enemmän", "more": "Enemmän",
"move": "Siirrä", "move": "Siirrä",
"move_down": "Siirrä alas", "move_down": "Siirrä alas",
@@ -1562,6 +1564,8 @@
"multiselect_grid_edit_gps_err_read_only": "Vain luku -tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan", "multiselect_grid_edit_gps_err_read_only": "Vain luku -tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan",
"mute_memories": "Mykistä muistot", "mute_memories": "Mykistä muistot",
"my_albums": "Omat albumit", "my_albums": "Omat albumit",
"my_immich_description": "Kopioi nykyinen sivu Oma Immich-linkkinä",
"my_immich_title": "Oma Immich-linkki",
"name": "Nimi", "name": "Nimi",
"name_or_nickname": "Nimi tai lempinimi", "name_or_nickname": "Nimi tai lempinimi",
"name_required": "Nimi on pakollinen", "name_required": "Nimi on pakollinen",
@@ -1926,6 +1930,8 @@
"scan_settings": "Skannausasetukset", "scan_settings": "Skannausasetukset",
"scanning": "Skannataan", "scanning": "Skannataan",
"scanning_for_album": "Etsitään albumia...", "scanning_for_album": "Etsitään albumia...",
"screencast_mode_description": "Näytä näppäimistön ja hiiren syöttötapahtumat näytöllä",
"screencast_mode_title": "Vaihda screencast-tila",
"search": "Haku", "search": "Haku",
"search_albums": "Etsi albumeita", "search_albums": "Etsi albumeita",
"search_by_context": "Etsi kontekstin perusteella", "search_by_context": "Etsi kontekstin perusteella",
@@ -2214,6 +2220,8 @@
"sync_status": "Synkronoinnin status", "sync_status": "Synkronoinnin status",
"sync_status_subtitle": "Näytä ja hallinnoi synkronointijärjestelmää", "sync_status_subtitle": "Näytä ja hallinnoi synkronointijärjestelmää",
"sync_upload_album_setting_subtitle": "Luo ja lataa valokuvasi ja videosi valittuihin albumeihin Immichissä", "sync_upload_album_setting_subtitle": "Luo ja lataa valokuvasi ja videosi valittuihin albumeihin Immichissä",
"system_theme": "Järjestelmän teema",
"system_theme_command_description": "Käytä järjestelmän teemaa ({value})",
"tag": "Tunniste", "tag": "Tunniste",
"tag_assets": "Lisää tunnisteita", "tag_assets": "Lisää tunnisteita",
"tag_created": "Luotu tunniste: {tag}", "tag_created": "Luotu tunniste: {tag}",
@@ -2425,6 +2433,7 @@
"workflows": "Työnkulut", "workflows": "Työnkulut",
"workflows_help_text": "Työnkulut automatisoivat toimintoja kohteillesi laukaisimien ja suodattimien perusteella", "workflows_help_text": "Työnkulut automatisoivat toimintoja kohteillesi laukaisimien ja suodattimien perusteella",
"wrong_pin_code": "Väärä PIN-koodi", "wrong_pin_code": "Väärä PIN-koodi",
"x_of_total": "{x}/{total}",
"year": "Vuosi", "year": "Vuosi",
"years_ago": "{years, plural, one {# vuosi} other {# vuotta}} sitten", "years_ago": "{years, plural, one {# vuosi} other {# vuotta}} sitten",
"yes": "Kyllä", "yes": "Kyllä",
+22 -1
View File
@@ -7,6 +7,7 @@
"action_common_update": "I-update", "action_common_update": "I-update",
"actions": "Mga Aksyon", "actions": "Mga Aksyon",
"active": "Tumatakbo", "active": "Tumatakbo",
"active_count": "Aktibo: {count}",
"activity": "Mga Aktibidad", "activity": "Mga Aktibidad",
"activity_changed": "Ang aktibidad ay {enabled, select, true {naka-enable} other {hindi naka-enable}}", "activity_changed": "Ang aktibidad ay {enabled, select, true {naka-enable} other {hindi naka-enable}}",
"add": "Mag dagdag", "add": "Mag dagdag",
@@ -14,6 +15,7 @@
"add_a_location": "Dagdagan ng lugar", "add_a_location": "Dagdagan ng lugar",
"add_a_name": "Dagdagan ng pangalan", "add_a_name": "Dagdagan ng pangalan",
"add_a_title": "Dagdagan ng pamagat", "add_a_title": "Dagdagan ng pamagat",
"add_assets": "Dagdagan ng asset",
"add_birthday": "Maglagay ng kaarawan", "add_birthday": "Maglagay ng kaarawan",
"add_endpoint": "Dagdagan ng dulo", "add_endpoint": "Dagdagan ng dulo",
"add_location": "Magdagdag ng lugar", "add_location": "Magdagdag ng lugar",
@@ -28,6 +30,7 @@
"add_to_album_bottom_sheet_already_exists": "Nasa {album} na", "add_to_album_bottom_sheet_already_exists": "Nasa {album} na",
"add_to_albums": "Idagdag sa mga album", "add_to_albums": "Idagdag sa mga album",
"add_to_albums_count": "Idagdag sa mga album ({count})", "add_to_albums_count": "Idagdag sa mga album ({count})",
"add_to_bottom_bar": "Idagdag sa",
"add_to_shared_album": "Idagdag sa shared album", "add_to_shared_album": "Idagdag sa shared album",
"add_url": "Magdagdag ng URL", "add_url": "Magdagdag ng URL",
"added_to_archive": "Naidagdag sa archive", "added_to_archive": "Naidagdag sa archive",
@@ -44,6 +47,10 @@
"backup_database": "Gumawa ng Dump ng Database", "backup_database": "Gumawa ng Dump ng Database",
"backup_database_enable_description": "Paganahin ang Database Dumps", "backup_database_enable_description": "Paganahin ang Database Dumps",
"backup_keep_last_amount": "Bilang ng mga itatagong nakaraang dump", "backup_keep_last_amount": "Bilang ng mga itatagong nakaraang dump",
"backup_onboarding_1_description": "offsite na kopya sa cloud o sa ibang pisikal na lokasyon.",
"backup_onboarding_footer": "Para sa karagdagang impormasyon tungkol sa pag-backup ng Immich, maaaring tignan sa <link>dokumentasyon</link>.",
"backup_onboarding_parts_title": "Ang 3-2-1 backup ay kasama:",
"backup_onboarding_title": "Backups",
"backup_settings": "Setting ng mga Database Dump", "backup_settings": "Setting ng mga Database Dump",
"backup_settings_description": "Pamahalaan ang mga setting ng database dump.", "backup_settings_description": "Pamahalaan ang mga setting ng database dump.",
"cleared_jobs": "Tinanggal na ang mga trabaho para sa {job}", "cleared_jobs": "Tinanggal na ang mga trabaho para sa {job}",
@@ -76,18 +83,32 @@
"asset_adding_to_album": "Dinadagdag sa album...", "asset_adding_to_album": "Dinadagdag sa album...",
"asset_filename_is_offline": "Offline ang asset {filename}", "asset_filename_is_offline": "Offline ang asset {filename}",
"asset_uploading": "Ina-upload...", "asset_uploading": "Ina-upload...",
"backup_controller_page_background_app_refresh_enable_button_text": "Pumunta sa settings",
"change_your_password": "Palitan ang iyong password",
"country": "Bansa",
"create_album_page_untitled": "Walang pamagat", "create_album_page_untitled": "Walang pamagat",
"documentation": "Dokumentasyion", "documentation": "Dokumentasyion",
"done": "Tapos na", "done": "Tapos na",
"download": "I-download", "download": "I-download",
"edit": "I-edit", "edit": "I-edit",
"edit_album": "I-edit ang album",
"edit_avatar": "I-edit ang avatar",
"edit_birthday": "I-edit ang birthday",
"edit_date": "I-edit ang petsa",
"edit_date_and_time": "I-edit ang petsa at oras",
"editor_close_without_save_title": "Isara ang editor?", "editor_close_without_save_title": "Isara ang editor?",
"explore": "I-explore", "explore": "I-explore",
"export": "I-export", "export": "I-export",
"has_quota": "May quota", "has_quota": "May quota",
"hour": "Oras", "hour": "Oras",
"info": "Informasyon",
"jobs": "Mga trabaho", "jobs": "Mga trabaho",
"language": "Wika", "language": "Wika",
"leave": "Umalis", "leave": "Umalis",
"no_results": "Walang resulta" "no_results": "Walang resulta",
"shared_link_edit_expire_after_option_minutes": "{count} minuto",
"shared_link_edit_expire_after_option_months": "{count} buwan",
"shared_link_edit_expire_after_option_year": "{count} taon",
"shared_link_edit_password_hint": "I-enter ang share password",
"year": "Taon"
} }
+60 -9
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Activer les notifications par courriel", "notification_enable_email_notifications": "Activer les notifications par courriel",
"notification_settings": "Paramètres de notification", "notification_settings": "Paramètres de notification",
"notification_settings_description": "Gérer les paramètres de notification, y compris les courriels", "notification_settings_description": "Gérer les paramètres de notification, y compris les courriels",
"oauth_allow_insecure_requests": "Permettre les requêtes non sécurisées",
"oauth_allow_insecure_requests_description": "ATTENTION : cela désactive la validation de certificat TLS pour les requêtes OAuth et peut vous exposer à des attaques par l'homme du milieu (MITM).",
"oauth_auto_launch": "Lancement automatique", "oauth_auto_launch": "Lancement automatique",
"oauth_auto_launch_description": "Démarrer automatiquement le flux de connexion OAuth lors de la navigation vers la page de connexion", "oauth_auto_launch_description": "Démarrer automatiquement le flux de connexion OAuth lors de la navigation vers la page de connexion",
"oauth_auto_register": "Inscription automatique", "oauth_auto_register": "Inscription automatique",
@@ -274,9 +276,11 @@
"oauth_button_text": "Texte du bouton", "oauth_button_text": "Texte du bouton",
"oauth_client_secret_description": "Nécessaire pour un client confidentiel, ou si le protocole PKCE (Proof Key for Code Exchange) n'est pas supporté par le client public.", "oauth_client_secret_description": "Nécessaire pour un client confidentiel, ou si le protocole PKCE (Proof Key for Code Exchange) n'est pas supporté par le client public.",
"oauth_enable_description": "Connexion avec OAuth", "oauth_enable_description": "Connexion avec OAuth",
"oauth_end_session_url_description": "Rediriger l'utilisateur vers cette URI lorsqu'il se déconnecte.",
"oauth_mobile_redirect_uri": "URI de redirection mobile", "oauth_mobile_redirect_uri": "URI de redirection mobile",
"oauth_mobile_redirect_uri_override": "Remplacer l'URI de redirection mobile", "oauth_mobile_redirect_uri_override": "Remplacer l'URI de redirection mobile",
"oauth_mobile_redirect_uri_override_description": "Activer quand le fournisseur d'OAuth ne permet pas un URI mobile, comme ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Activer quand le fournisseur d'OAuth ne permet pas un URI mobile, comme ''{callback}''",
"oauth_prompt_description": "Paramètre de prompt (par ex. select_account, login, consentement)",
"oauth_role_claim": "Attribut de rôle", "oauth_role_claim": "Attribut de rôle",
"oauth_role_claim_description": "Donne automatiquement un accès en tant qu'admin, en se basant sur la présence de cet attribut. L'attribut peut avoir soit 'user' (utilisateur) soit 'admin'.", "oauth_role_claim_description": "Donne automatiquement un accès en tant qu'admin, en se basant sur la présence de cet attribut. L'attribut peut avoir soit 'user' (utilisateur) soit 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Conservez les photos depuis les derniers…", "cutoff_date_description": "Conservez les photos depuis les derniers…",
"cutoff_day": "{count, plural, one {jour} other {jours}}", "cutoff_day": "{count, plural, one {jour} other {jours}}",
"cutoff_year": "{count, plural, one {année} other {années}}", "cutoff_year": "{count, plural, one {année} other {années}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Sombre", "dark": "Sombre",
"dark_theme": "Basculer sur le thème sombre", "dark_theme": "Basculer sur le thème sombre",
"date": "Date", "date": "Date",
"date_after": "Date après", "date_after": "Date après",
"date_and_time": "Date et heure", "date_and_time": "Date et heure",
"date_before": "Date avant", "date_before": "Date avant",
"date_format": "E, LLL d, y • h:mm a", "date_of_birth": "Date de naissance",
"date_of_birth_saved": "Date de naissance enregistrée avec succès", "date_of_birth_saved": "Date de naissance enregistrée avec succès",
"date_range": "Plage de dates", "date_range": "Plage de dates",
"day": "Jour", "day": "Jour",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Déplacer les photos et vidéos sauvegardées vers la corbeille de votre appareil pour libérer de l'espace. Vos copies sur le serveur restent en sécurité.", "free_up_space_description": "Déplacer les photos et vidéos sauvegardées vers la corbeille de votre appareil pour libérer de l'espace. Vos copies sur le serveur restent en sécurité.",
"free_up_space_settings_subtitle": "Libérer l'espace de votre appareil", "free_up_space_settings_subtitle": "Libérer l'espace de votre appareil",
"full_path": "Chemin complet : {path}", "full_path": "Chemin complet : {path}",
"full_path_or_folder": "Chemin complet ou dossier",
"gcast_enabled": "Diffusion Google Cast", "gcast_enabled": "Diffusion Google Cast",
"gcast_enabled_description": "Cette fonctionnalité charge des ressources externes depuis Google pour fonctionner.", "gcast_enabled_description": "Cette fonctionnalité charge des ressources externes depuis Google pour fonctionner.",
"general": "Général", "general": "Général",
@@ -1392,11 +1395,13 @@
"light_theme": "Basculer sur le thème clair", "light_theme": "Basculer sur le thème clair",
"like": "J'aime", "like": "J'aime",
"like_deleted": "Réaction « J'aime » supprimée", "like_deleted": "Réaction « J'aime » supprimée",
"link": "Lien",
"link_motion_video": "Lier la photo animée", "link_motion_video": "Lier la photo animée",
"link_to_docs": "Pour plus d'informations, se référer à la <link>documentation</link>.", "link_to_docs": "Pour plus d'informations, se référer à la <link>documentation</link>.",
"link_to_oauth": "Lien au service OAuth", "link_to_oauth": "Lien au service OAuth",
"linked_oauth_account": "Compte OAuth rattaché", "linked_oauth_account": "Compte OAuth rattaché",
"list": "Liste", "list": "Liste",
"live": "Direct",
"loading": "Chargement", "loading": "Chargement",
"loading_search_results_failed": "Chargement des résultats échoué", "loading_search_results_failed": "Chargement des résultats échoué",
"local": "Local", "local": "Local",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Tout a été marqué comme lu", "marked_all_as_read": "Tout a été marqué comme lu",
"matches": "Correspondances", "matches": "Correspondances",
"matching_assets": "Médias correspondants", "matching_assets": "Médias correspondants",
"media_chrome": {
"auto": "Auto",
"captions": "Sous-titres",
"captions_off": "Désactivé",
"closed_captions": "sous-titres codés",
"decode_error": "Erreur de décodage",
"disable_captions": "Désactiver les sous-titres",
"enable_captions": "Activer les sous-titres",
"enter_fullscreen_mode": "Mettre en mode plein écran",
"exit_fullscreen_mode": "Quitter le mode plein écran",
"loop": "Lire en boucle",
"media_error_description": "Une erreur de média a provoqué linterruption de la lecture. Le média peut être corrompu ou votre navigateur ne prend pas en charge ce format.",
"media_loading": "chargement des médias",
"mute": "Désactiver le son",
"network_error": "Erreur réseau",
"network_error_description": "Une erreur réseau a causé l’échec du téléchargement du média.",
"not_supported_error": "Source non supportée",
"playback_rate": "Taux de lecture",
"playback_rate_current": "taux de lecture actuel",
"playback_rate_value": "Taux de lecture {playbackRate}",
"playback_time": "durée de lecture",
"quality": "Qualité",
"second": "seconde",
"seconds": "secondes",
"time_value_of_total_time": "{currentTime} sur {totalTime}",
"time_value_remaining": "{time} restant",
"unmute": "Activer le son",
"unsupported_error_description": "Une erreur non supportée sest produite. Le serveur ou le réseau a échoué, ou votre navigateur ne prend pas en charge ce format.",
"video_not_loaded_unknown_time": "vidéo non chargée, durée inconnue.",
"video_player": "lecteur vidéo",
"volume": "volume"
},
"media_type": "Type de média", "media_type": "Type de média",
"memories": "Souvenirs", "memories": "Souvenirs",
"memories_all_caught_up": "Vous avez tout vu", "memories_all_caught_up": "Vous avez tout vu",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Téléchargez l'application mobile compagnon via les options suivantes", "mobile_app_download_onboarding_note": "Téléchargez l'application mobile compagnon via les options suivantes",
"model": "Modèle", "model": "Modèle",
"month": "Mois", "month": "Mois",
"monthly_title_text_date_format": "MMMM a",
"more": "Plus", "more": "Plus",
"motion": "Mouvement",
"move": "Déplacer", "move": "Déplacer",
"move_down": "Descendre", "move_down": "Descendre",
"move_off_locked_folder": "Déplacer en dehors du dossier verrouillé", "move_off_locked_folder": "Déplacer en dehors du dossier verrouillé",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Impossible de modifier l'emplacement de médias en lecture seule, ils sont ignorés", "multiselect_grid_edit_gps_err_read_only": "Impossible de modifier l'emplacement de médias en lecture seule, ils sont ignorés",
"mute_memories": "Mettre en sourdine les souvenirs", "mute_memories": "Mettre en sourdine les souvenirs",
"my_albums": "Mes albums", "my_albums": "Mes albums",
"my_immich_description": "Copier la page actuelle comme Mon lien Immich",
"my_immich_title": "Mon lien Immich",
"name": "Nom", "name": "Nom",
"name_or_nickname": "Nom ou surnom", "name_or_nickname": "Nom ou surnom",
"name_required": "Le nom est nécessaire", "name_required": "Le nom est nécessaire",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Supprimer les médias?", "remove_assets_title": "Supprimer les médias?",
"remove_custom_date_range": "Supprimer la plage de date personnalisée", "remove_custom_date_range": "Supprimer la plage de date personnalisée",
"remove_deleted_assets": "Supprimer les fichiers hors ligne", "remove_deleted_assets": "Supprimer les fichiers hors ligne",
"remove_filter": "Supprimer le filtre",
"remove_from_album": "Supprimer de l'album", "remove_from_album": "Supprimer de l'album",
"remove_from_album_action_prompt": "{count} supprimé(s) de l'album", "remove_from_album_action_prompt": "{count} supprimé(s) de l'album",
"remove_from_favorites": "Supprimer des favoris", "remove_from_favorites": "Supprimer des favoris",
@@ -1926,13 +1966,17 @@
"scan_settings": "Paramètres d'analyse", "scan_settings": "Paramètres d'analyse",
"scanning": "Analyse en cours", "scanning": "Analyse en cours",
"scanning_for_album": "Recherche d'albums en cours...", "scanning_for_album": "Recherche d'albums en cours...",
"screencast_mode_description": "Afficher à l'écran les indicateurs d'évènements de clavier et souris",
"screencast_mode_title": "Basculer le mode de diffusion d'écran",
"search": "Recherche", "search": "Recherche",
"search_albums": "Rechercher des albums", "search_albums": "Rechercher des albums",
"search_by_context": "Rechercher par contexte", "search_by_context": "Recherche par contexte",
"search_by_description": "Recherche par description", "search_by_description": "Recherche par description",
"search_by_description_example": "Randonnée à Sapa", "search_by_description_example": "Randonnée à Sapa",
"search_by_filename": "Rechercher par nom du fichier ou extension", "search_by_filename": "Recherche par nom du fichier ou extension",
"search_by_filename_example": "Exemple: IMG_1234.JPG ou PNG", "search_by_filename_example": "Exemple: IMG_1234.JPG ou PNG",
"search_by_full_path": "Recherche par chemin complet ou dossier",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - vous pouvez rechercher Projets, 3D, Impression, 2026, etc.",
"search_by_ocr": "Recherche par Reconnaissance Optique de Caractères OCR", "search_by_ocr": "Recherche par Reconnaissance Optique de Caractères OCR",
"search_by_ocr_example": "café latte", "search_by_ocr_example": "café latte",
"search_camera_lens_model": "Chercher par modèle d'objectif...", "search_camera_lens_model": "Chercher par modèle d'objectif...",
@@ -1962,7 +2006,7 @@
"search_no_people": "Aucune personne", "search_no_people": "Aucune personne",
"search_no_people_named": "Aucune personne nommée « {name} »", "search_no_people_named": "Aucune personne nommée « {name} »",
"search_no_result": "Aucun résultat trouvé, essayez un autre terme de recherche ou une autre combinaison", "search_no_result": "Aucun résultat trouvé, essayez un autre terme de recherche ou une autre combinaison",
"search_options": "Rechercher une option", "search_options": "Options de recherche",
"search_page_categories": "Catégories", "search_page_categories": "Catégories",
"search_page_motion_photos": "Photos avec mouvement", "search_page_motion_photos": "Photos avec mouvement",
"search_page_no_objects": "Aucune information disponible sur les objets", "search_page_no_objects": "Aucune information disponible sur les objets",
@@ -1976,9 +2020,9 @@
"search_page_your_map": "Votre carte", "search_page_your_map": "Votre carte",
"search_people": "Rechercher une personne", "search_people": "Rechercher une personne",
"search_places": "Rechercher un lieu", "search_places": "Rechercher un lieu",
"search_rating": "Chercher par évaluation...", "search_rating": "Recherche par évaluation...",
"search_result_page_new_search_hint": "Nouvelle recherche", "search_result_page_new_search_hint": "Nouvelle recherche",
"search_settings": "Paramètres de recherche", "search_settings": "Rechercher dans les paramètres",
"search_state": "Rechercher par état/région...", "search_state": "Rechercher par état/région...",
"search_suggestion_list_smart_search_hint_1": "La recherche intelligente est activée par défaut. Pour rechercher des métadonnées, utilisez la syntaxe suivante ", "search_suggestion_list_smart_search_hint_1": "La recherche intelligente est activée par défaut. Pour rechercher des métadonnées, utilisez la syntaxe suivante ",
"search_suggestion_list_smart_search_hint_2": "m:votre-terme-de-recherche", "search_suggestion_list_smart_search_hint_2": "m:votre-terme-de-recherche",
@@ -2148,6 +2192,7 @@
"show_schema": "Afficher le schéma", "show_schema": "Afficher le schéma",
"show_search_options": "Afficher les options de recherche", "show_search_options": "Afficher les options de recherche",
"show_shared_links": "Afficher les liens partagés", "show_shared_links": "Afficher les liens partagés",
"show_slideshow_metadata_overlay": "Afficher les infos de l'image en superposition",
"show_slideshow_transition": "Afficher la transition du diaporama", "show_slideshow_transition": "Afficher la transition du diaporama",
"show_supporter_badge": "Badge de contributeur", "show_supporter_badge": "Badge de contributeur",
"show_supporter_badge_description": "Afficher le badge de contributeur", "show_supporter_badge_description": "Afficher le badge de contributeur",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Passer vers les dossiers", "skip_to_folders": "Passer vers les dossiers",
"skip_to_tags": "Passer vers les étiquettes", "skip_to_tags": "Passer vers les étiquettes",
"slideshow": "Diaporama", "slideshow": "Diaporama",
"slideshow_metadata_overlay_mode": "Contenu en superposition",
"slideshow_metadata_overlay_mode_description_only": "Seulement la description",
"slideshow_metadata_overlay_mode_full": "Tout",
"slideshow_repeat": "Répéter le diaporama", "slideshow_repeat": "Répéter le diaporama",
"slideshow_repeat_description": "Reboucler au début lorsque le diaporama se termine", "slideshow_repeat_description": "Reboucler au début lorsque le diaporama se termine",
"slideshow_settings": "Paramètres du diaporama", "slideshow_settings": "Paramètres du diaporama",
@@ -2214,6 +2262,8 @@
"sync_status": "Statut de synchronisation", "sync_status": "Statut de synchronisation",
"sync_status_subtitle": "Consulter et gérer le système de synchronisation", "sync_status_subtitle": "Consulter et gérer le système de synchronisation",
"sync_upload_album_setting_subtitle": "Créez et envoyez vos photos et vidéos dans les albums sélectionnés sur Immich", "sync_upload_album_setting_subtitle": "Créez et envoyez vos photos et vidéos dans les albums sélectionnés sur Immich",
"system_theme": "Thème du système",
"system_theme_command_description": "Utiliser le thème du système ({value})",
"tag": "Étiquette", "tag": "Étiquette",
"tag_assets": "Étiqueter les médias", "tag_assets": "Étiqueter les médias",
"tag_created": "Étiquette créée: {tag}", "tag_created": "Étiquette créée: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Flux de traitement", "workflows": "Flux de traitement",
"workflows_help_text": "Les flux de traitement automatisent des actions sur vos médias, en se basant sur des déclencheurs et des filtres", "workflows_help_text": "Les flux de traitement automatisent des actions sur vos médias, en se basant sur des déclencheurs et des filtres",
"wrong_pin_code": "Code PIN erroné", "wrong_pin_code": "Code PIN erroné",
"x_of_total": "{x}/{total}",
"year": "Année", "year": "Année",
"years_ago": "Il y a {years, plural, one {# an} other {# ans}}", "years_ago": "Il y a {years, plural, one {# an} other {# ans}}",
"yes": "Oui", "yes": "Oui",
+55 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Cumasaigh fógraí ríomhphoist", "notification_enable_email_notifications": "Cumasaigh fógraí ríomhphoist",
"notification_settings": "Socruithe Fógra", "notification_settings": "Socruithe Fógra",
"notification_settings_description": "Bainistigh socruithe fógraí, lena n-áirítear ríomhphost", "notification_settings_description": "Bainistigh socruithe fógraí, lena n-áirítear ríomhphost",
"oauth_allow_insecure_requests": "Ceadaigh iarratais neamhshábháilte",
"oauth_allow_insecure_requests_description": "RABHADH: Díchumasaíonn sé seo bailíochtú teastais TLS le haghaidh iarratais OAuth agus dfhéadfadh sé go mbeadh tú nochtaithe dionsaithe MITM.",
"oauth_auto_launch": "Seoladh uathoibríoch", "oauth_auto_launch": "Seoladh uathoibríoch",
"oauth_auto_launch_description": "Tosaigh sreabhadh logála isteach OAuth go huathoibríoch nuair a dhéantar nascleanúint chuig an leathanach logála isteach", "oauth_auto_launch_description": "Tosaigh sreabhadh logála isteach OAuth go huathoibríoch nuair a dhéantar nascleanúint chuig an leathanach logála isteach",
"oauth_auto_register": "Clárú uathoibríoch", "oauth_auto_register": "Clárú uathoibríoch",
@@ -274,9 +276,11 @@
"oauth_button_text": "Téacs cnaipe", "oauth_button_text": "Téacs cnaipe",
"oauth_client_secret_description": "Riachtanach do chliant rúnda, nó mura dtacaítear le PKCE (Eochair Chruthúnais le haghaidh Malartú Cód) do chliant poiblí.", "oauth_client_secret_description": "Riachtanach do chliant rúnda, nó mura dtacaítear le PKCE (Eochair Chruthúnais le haghaidh Malartú Cód) do chliant poiblí.",
"oauth_enable_description": "Logáil isteach le OAuth", "oauth_enable_description": "Logáil isteach le OAuth",
"oauth_end_session_url_description": "Athsheol an t-úsáideoir chuig an URI seo nuair a logálann siad amach.",
"oauth_mobile_redirect_uri": "URI atreoraithe soghluaiste", "oauth_mobile_redirect_uri": "URI atreoraithe soghluaiste",
"oauth_mobile_redirect_uri_override": "Sárú URI atreoraithe soghluaiste", "oauth_mobile_redirect_uri_override": "Sárú URI atreoraithe soghluaiste",
"oauth_mobile_redirect_uri_override_description": "Cumasaigh nuair nach gceadaíonn soláthraí OAuth URI soghluaiste, mar shampla ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Cumasaigh nuair nach gceadaíonn soláthraí OAuth URI soghluaiste, mar shampla ''{callback}''",
"oauth_prompt_description": "Paraiméadar leid (m.sh. roghnaigh_cuntas, logáil isteach, toiliú)",
"oauth_role_claim": "Éileamh Róil", "oauth_role_claim": "Éileamh Róil",
"oauth_role_claim_description": "Deonaigh rochtain riarthóra go huathoibríoch bunaithe ar láithreacht an éilimh seo. Féadfaidh 'úsáideoir' nó 'riarthóir' a bheith san éileamh.", "oauth_role_claim_description": "Deonaigh rochtain riarthóra go huathoibríoch bunaithe ar láithreacht an éilimh seo. Féadfaidh 'úsáideoir' nó 'riarthóir' a bheith san éileamh.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Coinnigh grianghraif ón uair dheireanach…", "cutoff_date_description": "Coinnigh grianghraif ón uair dheireanach…",
"cutoff_day": "{count, plural, one {lá} other {laethanta}}", "cutoff_day": "{count, plural, one {lá} other {laethanta}}",
"cutoff_year": "{count, plural, one {bliain} other {blianta}}", "cutoff_year": "{count, plural, one {bliain} other {blianta}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Dorcha", "dark": "Dorcha",
"dark_theme": "Athraigh go téama dorcha", "dark_theme": "Athraigh go téama dorcha",
"date": "Dáta", "date": "Dáta",
"date_after": "Dáta i ndiaidh", "date_after": "Dáta i ndiaidh",
"date_and_time": "Dáta agus Am", "date_and_time": "Dáta agus Am",
"date_before": "Dáta roimh", "date_before": "Dáta roimh",
"date_format": "E, d LLL, y • h:mm a", "date_of_birth": "Dáta breithe",
"date_of_birth_saved": "Dáta breithe sábháilte go rathúil", "date_of_birth_saved": "Dáta breithe sábháilte go rathúil",
"date_range": "Raon dáta", "date_range": "Raon dáta",
"day": "Lá", "day": "Lá",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Bog grianghraif agus físeáin chúltaca chuig bruscar do ghléis chun spás a shaoradh. Fanann do chóipeanna ar an bhfreastalaí slán.", "free_up_space_description": "Bog grianghraif agus físeáin chúltaca chuig bruscar do ghléis chun spás a shaoradh. Fanann do chóipeanna ar an bhfreastalaí slán.",
"free_up_space_settings_subtitle": "Saor stóráil gléis", "free_up_space_settings_subtitle": "Saor stóráil gléis",
"full_path": "Cosán iomlán: {path}", "full_path": "Cosán iomlán: {path}",
"full_path_or_folder": "Cosán nó fillteán iomlán",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Lódálann an ghné seo acmhainní seachtracha ó Google chun go n-oibreoidh sí.", "gcast_enabled_description": "Lódálann an ghné seo acmhainní seachtracha ó Google chun go n-oibreoidh sí.",
"general": "Ginearálta", "general": "Ginearálta",
@@ -1392,11 +1395,13 @@
"light_theme": "Athraigh go téama éadrom", "light_theme": "Athraigh go téama éadrom",
"like": "Is maith liom", "like": "Is maith liom",
"like_deleted": "Scriosadh an rud is maith liom", "like_deleted": "Scriosadh an rud is maith liom",
"link": "Nasc",
"link_motion_video": "Físeán gluaiseachta nasctha", "link_motion_video": "Físeán gluaiseachta nasctha",
"link_to_docs": "Le haghaidh tuilleadh eolais, féach ar an <link>doiciméadú</link>.", "link_to_docs": "Le haghaidh tuilleadh eolais, féach ar an <link>doiciméadú</link>.",
"link_to_oauth": "Nasc le OAuth", "link_to_oauth": "Nasc le OAuth",
"linked_oauth_account": "Cuntas OAuth nasctha", "linked_oauth_account": "Cuntas OAuth nasctha",
"list": "Liosta", "list": "Liosta",
"live": "Beo",
"loading": "Ag luchtú", "loading": "Ag luchtú",
"loading_search_results_failed": "Theip ar lódáil na dtorthaí cuardaigh", "loading_search_results_failed": "Theip ar lódáil na dtorthaí cuardaigh",
"local": "Áitiúil", "local": "Áitiúil",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Marcáladh gach rud mar léite", "marked_all_as_read": "Marcáladh gach rud mar léite",
"matches": "Cluichí", "matches": "Cluichí",
"matching_assets": "Sócmhainní Meaitseála", "matching_assets": "Sócmhainní Meaitseála",
"media_chrome": {
"auto": "Uath",
"captions": "Fotheidil",
"captions_off": "As",
"closed_captions": "fotheidil dúnta",
"decode_error": "Earráid díchódaithe",
"disable_captions": "Díchumasaigh fotheidil",
"enable_captions": "Cumasaigh fotheidil",
"enter_fullscreen_mode": "Téigh isteach i mód lánscáileáin",
"exit_fullscreen_mode": "Scoir mód lánscáileáin",
"loop": "Lúb",
"media_error_description": "Earráid sna meáin ba chúis leis an athsheinm. Bfhéidir go bhfuil na meáin truaillithe nó nach dtacaíonn do bhrabhsálaí leis an bhformáid seo.",
"media_loading": "luchtú meán",
"mute": "Balbhaigh",
"network_error": "Earráid líonra",
"network_error_description": "Theip ar íoslódáil na meán de dheasca earráide líonra.",
"not_supported_error": "Foinse Gan Tacaíocht",
"playback_rate": "Ráta athsheinm",
"playback_rate_current": "ráta athsheinm reatha",
"playback_rate_value": "Ráta athsheinm {playbackRate}",
"playback_time": "am athsheinm",
"quality": "Cáilíocht",
"second": "soicind",
"seconds": "soicindí",
"time_value_of_total_time": "{currentTime} de {totalTime}",
"time_value_remaining": "{time} fágtha",
"unmute": "Díbhalbhaigh",
"unsupported_error_description": "Tharla earráid nach dtacaítear léi. Theip ar an bhfreastalaí nó ar an líonra, nó ní thacaíonn do bhrabhsálaí leis an bhformáid seo.",
"video_not_loaded_unknown_time": "físeán gan luchtú, am anaithnid.",
"video_player": "seinnteoir físeáin",
"volume": "toirt"
},
"media_type": "Cineál meán", "media_type": "Cineál meán",
"memories": "Cuimhní cinn", "memories": "Cuimhní cinn",
"memories_all_caught_up": "Gach rud gafa suas", "memories_all_caught_up": "Gach rud gafa suas",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Íoslódáil an aip shoghluaiste tionlacain ag baint úsáide as na roghanna seo a leanas", "mobile_app_download_onboarding_note": "Íoslódáil an aip shoghluaiste tionlacain ag baint úsáide as na roghanna seo a leanas",
"model": "Samhail", "model": "Samhail",
"month": "Mí", "month": "Mí",
"monthly_title_text_date_format": "MMMM y",
"more": "Tuilleadh", "more": "Tuilleadh",
"motion": "Gluaiseacht",
"move": "Bog", "move": "Bog",
"move_down": "Bog síos", "move_down": "Bog síos",
"move_off_locked_folder": "Bog amach as fillteán faoi ghlas", "move_off_locked_folder": "Bog amach as fillteán faoi ghlas",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Ní féidir suíomh sócmhainn(í) inléite amháin a chur in eagar, ag scipeáil", "multiselect_grid_edit_gps_err_read_only": "Ní féidir suíomh sócmhainn(í) inléite amháin a chur in eagar, ag scipeáil",
"mute_memories": "Cuimhní Balbhaigh", "mute_memories": "Cuimhní Balbhaigh",
"my_albums": "Mo chuid albaim", "my_albums": "Mo chuid albaim",
"my_immich_description": "Cóipeáil an leathanach reatha mar nasc My Immich",
"my_immich_title": "Mo nasc Immich",
"name": "Ainm", "name": "Ainm",
"name_or_nickname": "Ainm nó leasainm", "name_or_nickname": "Ainm nó leasainm",
"name_required": "Tá ainm ag teastáil", "name_required": "Tá ainm ag teastáil",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Bain sócmhainní?", "remove_assets_title": "Bain sócmhainní?",
"remove_custom_date_range": "Bain raon dáta saincheaptha", "remove_custom_date_range": "Bain raon dáta saincheaptha",
"remove_deleted_assets": "Bain Sócmhainní Scriosta", "remove_deleted_assets": "Bain Sócmhainní Scriosta",
"remove_filter": "Bain an scagaire",
"remove_from_album": "Bain den albam", "remove_from_album": "Bain den albam",
"remove_from_album_action_prompt": "Baineadh {count} den albam", "remove_from_album_action_prompt": "Baineadh {count} den albam",
"remove_from_favorites": "Bain as ceanáin", "remove_from_favorites": "Bain as ceanáin",
@@ -1926,6 +1966,8 @@
"scan_settings": "Socruithe Scanadh", "scan_settings": "Socruithe Scanadh",
"scanning": "Ag scanadh", "scanning": "Ag scanadh",
"scanning_for_album": "Ag scanadh le haghaidh albam...", "scanning_for_album": "Ag scanadh le haghaidh albam...",
"screencast_mode_description": "Taispeáin táscairí imeachta méarchláir agus luiche ar an scáileán",
"screencast_mode_title": "Mód craolta scáileáin a scoránaigh",
"search": "Cuardaigh", "search": "Cuardaigh",
"search_albums": "Cuardaigh albaim", "search_albums": "Cuardaigh albaim",
"search_by_context": "Cuardaigh de réir comhthéacs", "search_by_context": "Cuardaigh de réir comhthéacs",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Lá siúlóide i Sapa", "search_by_description_example": "Lá siúlóide i Sapa",
"search_by_filename": "Cuardaigh de réir ainm comhaid nó síneadh", "search_by_filename": "Cuardaigh de réir ainm comhaid nó síneadh",
"search_by_filename_example": "i.e. IMG_1234.JPG nó PNG", "search_by_filename_example": "i.e. IMG_1234.JPG nó PNG",
"search_by_full_path": "Cuardaigh de réir cosáin iomláin nó fillteáin",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - is féidir leat cuardach a dhéanamh ar Thionscadail, 3D, Priontáil, 2026 srl.",
"search_by_ocr": "Cuardaigh de réir OCR", "search_by_ocr": "Cuardaigh de réir OCR",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Cuardaigh samhail lionsa...", "search_camera_lens_model": "Cuardaigh samhail lionsa...",
@@ -2148,6 +2192,7 @@
"show_schema": "Taispeáin scéim", "show_schema": "Taispeáin scéim",
"show_search_options": "Taispeáin roghanna cuardaigh", "show_search_options": "Taispeáin roghanna cuardaigh",
"show_shared_links": "Taispeáin naisc chomhroinnte", "show_shared_links": "Taispeáin naisc chomhroinnte",
"show_slideshow_metadata_overlay": "Taispeáin forleagan faisnéise íomhá",
"show_slideshow_transition": "Taispeáin an t-aistriú sleamhnán", "show_slideshow_transition": "Taispeáin an t-aistriú sleamhnán",
"show_supporter_badge": "Suaitheantas tacaíochta", "show_supporter_badge": "Suaitheantas tacaíochta",
"show_supporter_badge_description": "Taispeáin suaitheantas tacaíochta", "show_supporter_badge_description": "Taispeáin suaitheantas tacaíochta",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Léim go dtí na fillteáin", "skip_to_folders": "Léim go dtí na fillteáin",
"skip_to_tags": "Léim go dtí na clibeanna", "skip_to_tags": "Léim go dtí na clibeanna",
"slideshow": "Sleamhnán", "slideshow": "Sleamhnán",
"slideshow_metadata_overlay_mode": "Ábhar forleagan",
"slideshow_metadata_overlay_mode_description_only": "Cur síos amháin",
"slideshow_metadata_overlay_mode_full": "Lán",
"slideshow_repeat": "Athdhéan an sleamhnán", "slideshow_repeat": "Athdhéan an sleamhnán",
"slideshow_repeat_description": "Lúb ar ais go dtí an tús nuair a chríochnaíonn an sleamhnán", "slideshow_repeat_description": "Lúb ar ais go dtí an tús nuair a chríochnaíonn an sleamhnán",
"slideshow_settings": "Socruithe sleamhnán", "slideshow_settings": "Socruithe sleamhnán",
@@ -2214,6 +2262,8 @@
"sync_status": "Stádas Sioncrónaithe", "sync_status": "Stádas Sioncrónaithe",
"sync_status_subtitle": "Féach ar an gcóras sioncrónaithe agus bainistigh é", "sync_status_subtitle": "Féach ar an gcóras sioncrónaithe agus bainistigh é",
"sync_upload_album_setting_subtitle": "Cruthaigh agus uaslódáil do ghrianghraif agus físeáin chuig na halbaim roghnaithe ar Immich", "sync_upload_album_setting_subtitle": "Cruthaigh agus uaslódáil do ghrianghraif agus físeáin chuig na halbaim roghnaithe ar Immich",
"system_theme": "Téama an chórais",
"system_theme_command_description": "Úsáid téama an chórais ({value})",
"tag": "Clib", "tag": "Clib",
"tag_assets": "Sócmhainní clibe", "tag_assets": "Sócmhainní clibe",
"tag_created": "Clib cruthaithe: {tag}", "tag_created": "Clib cruthaithe: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Sreafaí oibre", "workflows": "Sreafaí oibre",
"workflows_help_text": "Uathoibríonn sreafaí oibre gníomhartha ar do shócmhainní bunaithe ar spreagthóirí agus scagairí", "workflows_help_text": "Uathoibríonn sreafaí oibre gníomhartha ar do shócmhainní bunaithe ar spreagthóirí agus scagairí",
"wrong_pin_code": "Cód PIN mícheart", "wrong_pin_code": "Cód PIN mícheart",
"x_of_total": "{x}/{total}",
"year": "Bliain", "year": "Bliain",
"years_ago": "{years, plural, one {# bliain} other {# blianta}} ó shin", "years_ago": "{years, plural, one {# bliain} other {# blianta}} ó shin",
"yes": "Tá", "yes": "Tá",
+12 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Activar notificacións por correo electrónico", "notification_enable_email_notifications": "Activar notificacións por correo electrónico",
"notification_settings": "Configuración de Notificacións", "notification_settings": "Configuración de Notificacións",
"notification_settings_description": "Xestionar a configuración de notificacións, incluído o correo electrónico", "notification_settings_description": "Xestionar a configuración de notificacións, incluído o correo electrónico",
"oauth_allow_insecure_requests": "Permitir solicitudes non segureas",
"oauth_allow_insecure_requests_description": "AVISO: Isto desactiva a validación de certificados TLS para as solicitudes OAuth e pode expoñerte a ataques MITM.",
"oauth_auto_launch": "Lanzamento automático", "oauth_auto_launch": "Lanzamento automático",
"oauth_auto_launch_description": "Iniciar o fluxo de inicio de sesión OAuth automaticamente ao navegar á páxina de inicio de sesión", "oauth_auto_launch_description": "Iniciar o fluxo de inicio de sesión OAuth automaticamente ao navegar á páxina de inicio de sesión",
"oauth_auto_register": "Rexistro automático", "oauth_auto_register": "Rexistro automático",
@@ -274,9 +276,11 @@
"oauth_button_text": "Texto do botón", "oauth_button_text": "Texto do botón",
"oauth_client_secret_description": "Requirido para clientes confidenciais ou se o provedor OAuth non admite PKCE (Proof Key for Code Exchange).", "oauth_client_secret_description": "Requirido para clientes confidenciais ou se o provedor OAuth non admite PKCE (Proof Key for Code Exchange).",
"oauth_enable_description": "Iniciar sesión con OAuth", "oauth_enable_description": "Iniciar sesión con OAuth",
"oauth_end_session_url_description": "Redireccionar o usuario a este URI cando peche sesión.",
"oauth_mobile_redirect_uri": "URI de redirección móbil", "oauth_mobile_redirect_uri": "URI de redirección móbil",
"oauth_mobile_redirect_uri_override": "Substitución de URI de redirección móbil", "oauth_mobile_redirect_uri_override": "Substitución de URI de redirección móbil",
"oauth_mobile_redirect_uri_override_description": "Activar cando o provedor OAuth non permite un URI móbil, como ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Activar cando o provedor OAuth non permite un URI móbil, como ''{callback}''",
"oauth_prompt_description": "Parámetro de solicitude (por exemplo, select_account, login, consent)",
"oauth_role_claim": "Declaración de rol", "oauth_role_claim": "Declaración de rol",
"oauth_role_claim_description": "Conceder acceso de administrador automaticamente segundo a presenza desta declaración. A declaración pode ter os valores 'user' ou 'admin'.", "oauth_role_claim_description": "Conceder acceso de administrador automaticamente segundo a presenza desta declaración. A declaración pode ter os valores 'user' ou 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,12 @@
"cutoff_date_description": "Manter fotos dos últimos…", "cutoff_date_description": "Manter fotos dos últimos…",
"cutoff_day": "{count, plural, one {day} other {days}}", "cutoff_day": "{count, plural, one {day} other {days}}",
"cutoff_year": "{count, plural, one {day} other {days}}", "cutoff_year": "{count, plural, one {day} other {days}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Escuro", "dark": "Escuro",
"dark_theme": "Alternar a tema escuro", "dark_theme": "Alternar a tema escuro",
"date": "Data", "date": "Data",
"date_after": "Data posterior a", "date_after": "Data posterior a",
"date_and_time": "Data e Hora", "date_and_time": "Data e Hora",
"date_before": "Data anterior a", "date_before": "Data anterior a",
"date_format": "E, d LLL, y • H:mm",
"date_of_birth_saved": "Data de nacemento gardada correctamente", "date_of_birth_saved": "Data de nacemento gardada correctamente",
"date_range": "Rango de datas", "date_range": "Rango de datas",
"day": "Día", "day": "Día",
@@ -1392,6 +1393,7 @@
"light_theme": "Cambiar a tema claro", "light_theme": "Cambiar a tema claro",
"like": "Gústame", "like": "Gústame",
"like_deleted": "Gústame eliminado", "like_deleted": "Gústame eliminado",
"link": "Ligazón",
"link_motion_video": "Ligar vídeo en movemento", "link_motion_video": "Ligar vídeo en movemento",
"link_to_docs": "Para máis información, consulte a <link>documentación</link>.", "link_to_docs": "Para máis información, consulte a <link>documentación</link>.",
"link_to_oauth": "Ligar a OAuth", "link_to_oauth": "Ligar a OAuth",
@@ -1544,7 +1546,6 @@
"mobile_app_download_onboarding_note": "Descarga a aplicación móbil complementaria usando as seguintes opcións", "mobile_app_download_onboarding_note": "Descarga a aplicación móbil complementaria usando as seguintes opcións",
"model": "Modelo", "model": "Modelo",
"month": "Mes", "month": "Mes",
"monthly_title_text_date_format": "MMMM a",
"more": "Máis", "more": "Máis",
"move": "Mover", "move": "Mover",
"move_down": "Baixar", "move_down": "Baixar",
@@ -1562,6 +1563,8 @@
"multiselect_grid_edit_gps_err_read_only": "Non se pode editar a localización de activo(s) de só lectura, omitindo", "multiselect_grid_edit_gps_err_read_only": "Non se pode editar a localización de activo(s) de só lectura, omitindo",
"mute_memories": "Silenciar Recordos", "mute_memories": "Silenciar Recordos",
"my_albums": "Os meus álbums", "my_albums": "Os meus álbums",
"my_immich_description": "Copiar a páxina actual como Ligazón do Meu Immich",
"my_immich_title": "Ligazón do Meu Immich",
"name": "Nome", "name": "Nome",
"name_or_nickname": "Nome ou alcume", "name_or_nickname": "Nome ou alcume",
"name_required": "O nome é obligatorio", "name_required": "O nome é obligatorio",
@@ -1926,6 +1929,8 @@
"scan_settings": "Configuración de Escaneo", "scan_settings": "Configuración de Escaneo",
"scanning": "Escaneando", "scanning": "Escaneando",
"scanning_for_album": "Escaneando álbum...", "scanning_for_album": "Escaneando álbum...",
"screencast_mode_description": "Mostrar os indicadores de eventos do teclado e do rato na pantalla",
"screencast_mode_title": "Alternar o modo de captura da pantalla",
"search": "Buscar", "search": "Buscar",
"search_albums": "Buscar álbums", "search_albums": "Buscar álbums",
"search_by_context": "Buscar por contexto", "search_by_context": "Buscar por contexto",
@@ -2214,6 +2219,8 @@
"sync_status": "Estado de Sincronización", "sync_status": "Estado de Sincronización",
"sync_status_subtitle": "Ver e xestionar o sistema de sincronización", "sync_status_subtitle": "Ver e xestionar o sistema de sincronización",
"sync_upload_album_setting_subtitle": "Crear e subir as súas fotos e vídeos aos álbums seleccionados en Immich", "sync_upload_album_setting_subtitle": "Crear e subir as súas fotos e vídeos aos álbums seleccionados en Immich",
"system_theme": "Tema do sistema",
"system_theme_command_description": "Empregar o tema do sistema ({value})",
"tag": "Etiqueta", "tag": "Etiqueta",
"tag_assets": "Etiquetar activos", "tag_assets": "Etiquetar activos",
"tag_created": "Etiqueta creada: {tag}", "tag_created": "Etiqueta creada: {tag}",
@@ -2425,6 +2432,7 @@
"workflows": "Fluxos de traballo", "workflows": "Fluxos de traballo",
"workflows_help_text": "Os fluxos de traballo automatizan accións nos teus recursos en función de disparadores e filtros", "workflows_help_text": "Os fluxos de traballo automatizan accións nos teus recursos en función de disparadores e filtros",
"wrong_pin_code": "Código PIN incorrecto", "wrong_pin_code": "Código PIN incorrecto",
"x_of_total": "{x}/{total}",
"year": "Ano", "year": "Ano",
"years_ago": "Hai {years, plural, one {# ano} other {# anos}}", "years_ago": "Hai {years, plural, one {# ano} other {# anos}}",
"yes": "Si", "yes": "Si",
+4 -4
View File
@@ -5,6 +5,7 @@
"acknowledge": "Bestätige", "acknowledge": "Bestätige",
"action": "Aktion", "action": "Aktion",
"action_common_update": "Aktualisiere", "action_common_update": "Aktualisiere",
"action_description": "A Gruppe fo Aktione wo söll usgfüert werde",
"actions": "Aktione", "actions": "Aktione",
"active": "Aktiv", "active": "Aktiv",
"active_count": "Aktive:{count}", "active_count": "Aktive:{count}",
@@ -16,9 +17,12 @@
"add_a_name": "Name hiifüege", "add_a_name": "Name hiifüege",
"add_a_title": "Titel hiifüege", "add_a_title": "Titel hiifüege",
"add_action": "Aktion hiifüege", "add_action": "Aktion hiifüege",
"add_action_description": "Klick da um e Aktion hinzue zfüege wo söll usgfüert werde",
"add_assets": "Objäkt Hinzuefüege",
"add_birthday": "Geburtsdatum hiifüege", "add_birthday": "Geburtsdatum hiifüege",
"add_endpoint": "Endpunkt hiifüege", "add_endpoint": "Endpunkt hiifüege",
"add_exclusion_pattern": "Ausschlussmuster hiifüege", "add_exclusion_pattern": "Ausschlussmuster hiifüege",
"add_filter": "Filter hinzuefüege",
"add_location": "Standort hiifüege", "add_location": "Standort hiifüege",
"add_more_users": "Wiiteri Nutzer hiifüege", "add_more_users": "Wiiteri Nutzer hiifüege",
"add_partner": "Partner hiifüege", "add_partner": "Partner hiifüege",
@@ -821,15 +825,12 @@
"custom_locale": "Benutzerdefinierti Sproch", "custom_locale": "Benutzerdefinierti Sproch",
"custom_locale_description": "Datumsahgoob und Zahle je nach Sproch und Land formatiere", "custom_locale_description": "Datumsahgoob und Zahle je nach Sproch und Land formatiere",
"custom_url": "Benutzerdefinierti URL", "custom_url": "Benutzerdefinierti URL",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Dunkäl", "dark": "Dunkäl",
"dark_theme": "Dunkli Aahsicht umschalte", "dark_theme": "Dunkli Aahsicht umschalte",
"date": "Datum", "date": "Datum",
"date_after": "Datum noch", "date_after": "Datum noch",
"date_and_time": "Datum und Ziit", "date_and_time": "Datum und Ziit",
"date_before": "Datum vor", "date_before": "Datum vor",
"date_format": "E d. LLL y • hh:mm",
"date_of_birth_saved": "SGeburtsdatum isch erfolgrich gspiicheret worde", "date_of_birth_saved": "SGeburtsdatum isch erfolgrich gspiicheret worde",
"date_range": "Datumsberiich", "date_range": "Datumsberiich",
"day": "Tag", "day": "Tag",
@@ -1414,7 +1415,6 @@
"mobile_app_download_onboarding_note": "Herunterlade vo dr mobile App über eini vo de folgende Möglichkeitä", "mobile_app_download_onboarding_note": "Herunterlade vo dr mobile App über eini vo de folgende Möglichkeitä",
"model": "Modäll", "model": "Modäll",
"month": "Monet", "month": "Monet",
"monthly_title_text_date_format": "MMMM y",
"more": "Meh", "more": "Meh",
"move": "Verschiebä", "move": "Verschiebä",
"move_off_locked_folder": "Us em gschperrte Ordner verschiebe", "move_off_locked_folder": "Us em gschperrte Ordner verschiebe",
+1 -1
View File
@@ -2,7 +2,7 @@
"about": "વિશે", "about": "વિશે",
"account": "ખાતું", "account": "ખાતું",
"account_settings": "ખાતાનાં સેટિંગ્સ", "account_settings": "ખાતાનાં સેટિંગ્સ",
"acknowledge": "જાણકારી મળી", "acknowledge": "જાણકારી",
"action": "ક્રિયા", "action": "ક્રિયા",
"action_common_update": "સુધારો", "action_common_update": "સુધારો",
"action_description": "છાંટેલી વસ્તુઓ પર કરી શકાય તેવી ક્રિયાઓ", "action_description": "છાંટેલી વસ્તુઓ પર કરી શકાય તેવી ક્રિયાઓ",
+15 -6
View File
@@ -267,16 +267,20 @@
"notification_enable_email_notifications": "אפשר התראות דוא\"ל", "notification_enable_email_notifications": "אפשר התראות דוא\"ל",
"notification_settings": "הגדרות התראות", "notification_settings": "הגדרות התראות",
"notification_settings_description": "ניהול הגדרות התראות, כולל דוא\"ל", "notification_settings_description": "ניהול הגדרות התראות, כולל דוא\"ל",
"oauth_allow_insecure_requests": "אפשר בקשות לא מאובטחות",
"oauth_allow_insecure_requests_description": "אזהרה: פעולה זו מבטלת את אימות תעודת האבטחה (TLS) עבור בקשות OAuth, ועלולה לחשוף אותך למתקפות “אדם בתווך” (MITM).",
"oauth_auto_launch": "הפעלה אוטומטית", "oauth_auto_launch": "הפעלה אוטומטית",
"oauth_auto_launch_description": "התחל את זרימת ההתחברות של OAuth באופן אוטומטי עם הניווט לדף ההתחברות", "oauth_auto_launch_description": "התחברות באמצעות OAuth תתחיל אוטומטית כשנכנסים לעמוד ההתחברות",
"oauth_auto_register": "רישום אוטומטי", "oauth_auto_register": "הרשמה אוטומטית",
"oauth_auto_register_description": "רשום אוטומטית משתמשים חדשים לאחר כניסה עם OAuth", "oauth_auto_register_description": "רשום אוטומטית משתמשים חדשים לאחר כניסה עם OAuth",
"oauth_button_text": "טקסט לחצן", "oauth_button_text": "טקסט לחצן",
"oauth_client_secret_description": "נדרש עבור לקוח סודי, או אם PKCE (מפתח הוכחה להחלפת קוד) אינו נתמך עבור לקוח ציבורי.", "oauth_client_secret_description": "נדרש עבור לקוח סודי, או אם PKCE (מפתח הוכחה להחלפת קוד) אינו נתמך עבור לקוח ציבורי.",
"oauth_enable_description": "התחבר עם OAuth", "oauth_enable_description": "התחבר עם OAuth",
"oauth_end_session_url_description": "הפנה את המשתמש ל-URI זה כאשר הוא מתנתק.",
"oauth_mobile_redirect_uri": "URI להפניה מחדש בנייד", "oauth_mobile_redirect_uri": "URI להפניה מחדש בנייד",
"oauth_mobile_redirect_uri_override": "עקיפת URI להפניה מחדש בנייד", "oauth_mobile_redirect_uri_override": "עקיפת URI להפניה מחדש בנייד",
"oauth_mobile_redirect_uri_override_description": "אפשר כאשר ספק OAuth לא מאפשר כתובת URI לנייד, כמו ''{callback}''", "oauth_mobile_redirect_uri_override_description": "אפשר כאשר ספק OAuth לא מאפשר כתובת URI לנייד, כמו ''{callback}''",
"oauth_prompt_description": "פרמטר בקשה (למשל select_account, login, consent)",
"oauth_role_claim": "דרישת תפקיד", "oauth_role_claim": "דרישת תפקיד",
"oauth_role_claim_description": "הענק גישת מנהל באופן אוטומטי אם תביעה זו קיימת. ערך התביעה יכול להיות 'user' או 'admin'.", "oauth_role_claim_description": "הענק גישת מנהל באופן אוטומטי אם תביעה זו קיימת. ערך התביעה יכול להיות 'user' או 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -849,9 +853,12 @@
"create_link_to_share": "צור קישור לשיתוף", "create_link_to_share": "צור קישור לשיתוף",
"create_link_to_share_description": "אפשר לכל אחד עם הקישור לראות את התמונות שנבחרו", "create_link_to_share_description": "אפשר לכל אחד עם הקישור לראות את התמונות שנבחרו",
"create_new": "צור חדש", "create_new": "צור חדש",
"create_new_face": "צור פנים חדשות",
"create_new_person": "צור אדם חדש", "create_new_person": "צור אדם חדש",
"create_new_person_hint": "הקצה את התמונות שנבחרו לאדם חדש", "create_new_person_hint": "הקצה את התמונות שנבחרו לאדם חדש",
"create_new_user": "צור משתמש חדש", "create_new_user": "צור משתמש חדש",
"create_person": "צור אדם",
"create_person_subtitle": "הוסף שם לפנים שנבחרו כדי ליצור ולתייג את האדם החדש",
"create_shared_album_page_share_add_assets": "הוסף תמונות", "create_shared_album_page_share_add_assets": "הוסף תמונות",
"create_shared_album_page_share_select_photos": "בחירת תמונות", "create_shared_album_page_share_select_photos": "בחירת תמונות",
"create_shared_link": "צור קישור משותף", "create_shared_link": "צור קישור משותף",
@@ -878,15 +885,12 @@
"cutoff_date_description": "שמור תמונות מ…", "cutoff_date_description": "שמור תמונות מ…",
"cutoff_day": "{count, plural, one {יום} other {ימים}}", "cutoff_day": "{count, plural, one {יום} other {ימים}}",
"cutoff_year": "{count, plural, one {שנה} other {שנים}}", "cutoff_year": "{count, plural, one {שנה} other {שנים}}",
"daily_title_text_date": "E, MMM dd",
"daily_title_text_date_year": "E, MMM dd, yyyy",
"dark": "כהה", "dark": "כהה",
"dark_theme": "מעבר לערכת נושא כהה", "dark_theme": "מעבר לערכת נושא כהה",
"date": "תאריך", "date": "תאריך",
"date_after": "תאריך אחרי", "date_after": "תאריך אחרי",
"date_and_time": "תאריך ושעה", "date_and_time": "תאריך ושעה",
"date_before": "תאריך לפני", "date_before": "תאריך לפני",
"date_format": "E, LLL d, y • h:mm a",
"date_of_birth_saved": "תאריך לידה נשמר בהצלחה", "date_of_birth_saved": "תאריך לידה נשמר בהצלחה",
"date_range": "טווח תאריכים", "date_range": "טווח תאריכים",
"day": "יום", "day": "יום",
@@ -1541,7 +1545,6 @@
"mobile_app_download_onboarding_note": "הורד את האפליקציה המלווה באחת מהאפשרויות הבאות", "mobile_app_download_onboarding_note": "הורד את האפליקציה המלווה באחת מהאפשרויות הבאות",
"model": "דגם", "model": "דגם",
"month": "חודש", "month": "חודש",
"monthly_title_text_date_format": "MMMM y",
"more": "עוד", "more": "עוד",
"move": "העבר", "move": "העבר",
"move_down": "הזזה למטה", "move_down": "הזזה למטה",
@@ -1559,6 +1562,8 @@
"multiselect_grid_edit_gps_err_read_only": "לא ניתן לערוך מיקום של תמונות לקריאה בלבד, מדלג", "multiselect_grid_edit_gps_err_read_only": "לא ניתן לערוך מיקום של תמונות לקריאה בלבד, מדלג",
"mute_memories": "השתקת זיכרונות", "mute_memories": "השתקת זיכרונות",
"my_albums": "האלבומים שלי", "my_albums": "האלבומים שלי",
"my_immich_description": "העתק את הדף הנוכחי כקישור ל-My Immich",
"my_immich_title": "קישור ה Immich link שלי",
"name": "שם", "name": "שם",
"name_or_nickname": "שם או כינוי", "name_or_nickname": "שם או כינוי",
"name_required": "נדרש שם", "name_required": "נדרש שם",
@@ -1923,6 +1928,7 @@
"scan_settings": "הגדרות סריקה", "scan_settings": "הגדרות סריקה",
"scanning": "בתהליך סריקה", "scanning": "בתהליך סריקה",
"scanning_for_album": "סורק אחר אלבום...", "scanning_for_album": "סורק אחר אלבום...",
"screencast_mode_title": "כבה/הפעל מצב שידור מסך",
"search": "חיפוש", "search": "חיפוש",
"search_albums": "חיפוש אלבומים", "search_albums": "חיפוש אלבומים",
"search_by_context": "חיפוש לפי הקשר", "search_by_context": "חיפוש לפי הקשר",
@@ -2211,9 +2217,12 @@
"sync_status": "סטטוס סנכרון", "sync_status": "סטטוס סנכרון",
"sync_status_subtitle": "הצג ונהל את מערכת הסנכרון", "sync_status_subtitle": "הצג ונהל את מערכת הסנכרון",
"sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום", "sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום",
"system_theme": "ערכת נושא של המערכת",
"system_theme_command_description": "השתמש בערכת העיצוב של המערכת ({value})",
"tag": "תג", "tag": "תג",
"tag_assets": "תיוג תמונות", "tag_assets": "תיוג תמונות",
"tag_created": "נוצר תג: {tag}", "tag_created": "נוצר תג: {tag}",
"tag_face": "תייג פנים",
"tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים", "tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים",
"tag_not_found_question": "לא ניתן למצוא תג? <link>יצירת תג חדש.</link>", "tag_not_found_question": "לא ניתן למצוא תג? <link>יצירת תג חדש.</link>",
"tag_people": "תייג אנשים", "tag_people": "תייג אנשים",
-4
View File
@@ -877,15 +877,12 @@
"cutoff_date_description": "पिछले कितने फ़ोटो रखें…", "cutoff_date_description": "पिछले कितने फ़ोटो रखें…",
"cutoff_day": "{count, plural, one {दिन} other {दिन}}", "cutoff_day": "{count, plural, one {दिन} other {दिन}}",
"cutoff_year": "{count, plural, one {वर्ष} other {वर्ष}}", "cutoff_year": "{count, plural, one {वर्ष} other {वर्ष}}",
"daily_title_text_date": "ई, एमएमएम डीडी",
"daily_title_text_date_year": "ई, एमएमएम दिन, वर्ष",
"dark": "डार्क", "dark": "डार्क",
"dark_theme": "डार्क थीम टॉगल करें", "dark_theme": "डार्क थीम टॉगल करें",
"date": "दिनांक", "date": "दिनांक",
"date_after": "इसके बाद की तारीख", "date_after": "इसके बाद की तारीख",
"date_and_time": "तिथि और समय", "date_and_time": "तिथि और समय",
"date_before": "पहले की तारीख", "date_before": "पहले की तारीख",
"date_format": "ई, एलएलएल डी, वाई • एच:एमएम ए",
"date_of_birth_saved": "जन्मतिथि सफलतापूर्वक सहेजी गई", "date_of_birth_saved": "जन्मतिथि सफलतापूर्वक सहेजी गई",
"date_range": "तिथि सीमा", "date_range": "तिथि सीमा",
"day": "दिन", "day": "दिन",
@@ -1533,7 +1530,6 @@
"mobile_app_download_onboarding_note": "निम्नलिखित विकल्पों का उपयोग करके साथी मोबाइल ऐप डाउनलोड करें", "mobile_app_download_onboarding_note": "निम्नलिखित विकल्पों का उपयोग करके साथी मोबाइल ऐप डाउनलोड करें",
"model": "मॉडल", "model": "मॉडल",
"month": "महीना", "month": "महीना",
"monthly_title_text_date_format": "एमएमएमएम वाई",
"more": "अधिक", "more": "अधिक",
"move": "स्थान परिवर्तन", "move": "स्थान परिवर्तन",
"move_down": "नीचे ले जाएँ", "move_down": "नीचे ले जाएँ",
+5 -6
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Omogući obavijesti putem e-pošte", "notification_enable_email_notifications": "Omogući obavijesti putem e-pošte",
"notification_settings": "Postavke obavijesti", "notification_settings": "Postavke obavijesti",
"notification_settings_description": "Upravljanje postavkama obavijesti, uključujući e-poštu", "notification_settings_description": "Upravljanje postavkama obavijesti, uključujući e-poštu",
"oauth_allow_insecure_requests": "Dozvoli nesigurne zahtjeve",
"oauth_allow_insecure_requests_description": "UPOZORENJE: Ovo onemogućava validaciju TLS certifikata za OAuth zahtjeve i može vas izložiti MITM napadima.",
"oauth_auto_launch": "Automatsko pokretanje", "oauth_auto_launch": "Automatsko pokretanje",
"oauth_auto_launch_description": "Automatski pokrenite OAuth prijavu nakon navigacije na stranicu za prijavu", "oauth_auto_launch_description": "Automatski pokrenite OAuth prijavu nakon navigacije na stranicu za prijavu",
"oauth_auto_register": "Automatska registracija", "oauth_auto_register": "Automatska registracija",
@@ -274,6 +276,7 @@
"oauth_button_text": "Tekst gumba", "oauth_button_text": "Tekst gumba",
"oauth_client_secret_description": "Obaveznoya privatnog klijenta ili ukoliko PKCE (Proof Key for Code Exchange) nije podržan od javnog klijenta.", "oauth_client_secret_description": "Obaveznoya privatnog klijenta ili ukoliko PKCE (Proof Key for Code Exchange) nije podržan od javnog klijenta.",
"oauth_enable_description": "Prijavite se putem OAutha", "oauth_enable_description": "Prijavite se putem OAutha",
"oauth_end_session_url_description": "Preusmjeri korisnika na ovaj URI nakon odjave.",
"oauth_mobile_redirect_uri": "Mobilnog Preusmjeravanja URI", "oauth_mobile_redirect_uri": "Mobilnog Preusmjeravanja URI",
"oauth_mobile_redirect_uri_override": "Nadjačavanje URI-preusmjeravanja za mobilne uređaje", "oauth_mobile_redirect_uri_override": "Nadjačavanje URI-preusmjeravanja za mobilne uređaje",
"oauth_mobile_redirect_uri_override_description": "Omogući kada pružatelj OAuth ne dopušta mobilni URI, poput ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Omogući kada pružatelj OAuth ne dopušta mobilni URI, poput ''{callback}''",
@@ -351,7 +354,7 @@
"template_settings": "Predložak Obavijesti", "template_settings": "Predložak Obavijesti",
"template_settings_description": "Upravljaj prilagođenim predlošcima za obavijesti", "template_settings_description": "Upravljaj prilagođenim predlošcima za obavijesti",
"theme_custom_css_settings": "Prilagođeni CSS", "theme_custom_css_settings": "Prilagođeni CSS",
"theme_custom_css_settings_description": "Kaskadni listovi stilova (CSS) omogućuju prilagođavanje dizajna Immicha.", "theme_custom_css_settings_description": "Kaskadni stilovi (CSS) omogućavaju prilagođavanje dizajna Immich-a.",
"theme_settings": "Postavke tema", "theme_settings": "Postavke tema",
"theme_settings_description": "Upravljajte prilagodbom Immich web sučelja", "theme_settings_description": "Upravljajte prilagodbom Immich web sučelja",
"thumbnail_generation_job": "Generirajte sličice", "thumbnail_generation_job": "Generirajte sličice",
@@ -383,7 +386,7 @@
"transcoding_hardware_acceleration": "Hardversko ubrzanje", "transcoding_hardware_acceleration": "Hardversko ubrzanje",
"transcoding_hardware_acceleration_description": "Eksperimentalno: brže transkodiranje, ali može smanjiti kvalitetu pri istoj brzini prijenosa", "transcoding_hardware_acceleration_description": "Eksperimentalno: brže transkodiranje, ali može smanjiti kvalitetu pri istoj brzini prijenosa",
"transcoding_hardware_decoding": "Hardversko dekodiranje", "transcoding_hardware_decoding": "Hardversko dekodiranje",
"transcoding_hardware_decoding_setting_description": "Odnosi se samo na NVENC, QSV i RKMPP. Omogućuje ubrzanje s kraja na kraj umjesto samo ubrzavanja kodiranja. Možda neće raditi na svim videozapisima.", "transcoding_hardware_decoding_setting_description": "Omogućava ubrzanje od početka do kraja (end-to-end) umjesto samo ubrzanja kodiranja. Možda neće raditi na svim video snimcima.",
"transcoding_max_b_frames": "Maksimalni B-frameovi", "transcoding_max_b_frames": "Maksimalni B-frameovi",
"transcoding_max_b_frames_description": "Više vrijednosti poboljšavaju učinkovitost kompresije, ali usporavaju kodiranje. Možda nije kompatibilan s hardverskim ubrzanjem na starijim uređajima. 0 onemogućuje B-frameove, dok -1 automatski postavlja ovu vrijednost.", "transcoding_max_b_frames_description": "Više vrijednosti poboljšavaju učinkovitost kompresije, ali usporavaju kodiranje. Možda nije kompatibilan s hardverskim ubrzanjem na starijim uređajima. 0 onemogućuje B-frameove, dok -1 automatski postavlja ovu vrijednost.",
"transcoding_max_bitrate": "Maksimalne brzina prijenosa (bitrate)", "transcoding_max_bitrate": "Maksimalne brzina prijenosa (bitrate)",
@@ -876,15 +879,12 @@
"cutoff_date_description": "Zadrži slike od zadnjih…", "cutoff_date_description": "Zadrži slike od zadnjih…",
"cutoff_day": "{count, plural, one {dan} other {dana}}", "cutoff_day": "{count, plural, one {dan} other {dana}}",
"cutoff_year": "{count, plural, one {godina} other {godine}}", "cutoff_year": "{count, plural, one {godina} other {godine}}",
"daily_title_text_date": "E, MMM dd",
"daily_title_text_date_year": "E, MMM dd, yyyy",
"dark": "Tamno", "dark": "Tamno",
"dark_theme": "Prebaci u tamnu temu", "dark_theme": "Prebaci u tamnu temu",
"date": "Datum", "date": "Datum",
"date_after": "Datum nakon", "date_after": "Datum nakon",
"date_and_time": "Datum i Vrijeme", "date_and_time": "Datum i Vrijeme",
"date_before": "Datum prije", "date_before": "Datum prije",
"date_format": "E, LLL d, y • h:mm a",
"date_of_birth_saved": "Datum rođenja uspješno spremljen", "date_of_birth_saved": "Datum rođenja uspješno spremljen",
"date_range": "Razdoblje", "date_range": "Razdoblje",
"day": "Dan", "day": "Dan",
@@ -1460,7 +1460,6 @@
"missing": "Nedostaje", "missing": "Nedostaje",
"model": "Model", "model": "Model",
"month": "Mjesec", "month": "Mjesec",
"monthly_title_text_date_format": "MMMM y",
"more": "Više", "more": "Više",
"move": "Pomakni", "move": "Pomakni",
"move_off_locked_folder": "Premjesti iz zaključane mape", "move_off_locked_folder": "Premjesti iz zaključane mape",
+60 -5
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Email értesítések engedélyezése", "notification_enable_email_notifications": "Email értesítések engedélyezése",
"notification_settings": "Értesítés beállítások", "notification_settings": "Értesítés beállítások",
"notification_settings_description": "Értesítési és email beállítások kezelése", "notification_settings_description": "Értesítési és email beállítások kezelése",
"oauth_allow_insecure_requests": "Nem biztonságos kérések engedélyezése",
"oauth_allow_insecure_requests_description": "FIGYELEM: Ez letiltja a TLS-tanúsítványok ellenőrzését az [OAuth] kérések esetében, és ezáltal MITM támadásoknak tehet ki téged.",
"oauth_auto_launch": "Automatikus indítás", "oauth_auto_launch": "Automatikus indítás",
"oauth_auto_launch_description": "Az OAuth bejelentkezési folyamat automatikus indítása a bejelentkezési oldal megnyitásakor", "oauth_auto_launch_description": "Az OAuth bejelentkezési folyamat automatikus indítása a bejelentkezési oldal megnyitásakor",
"oauth_auto_register": "Automatikus regisztráció", "oauth_auto_register": "Automatikus regisztráció",
@@ -274,9 +276,11 @@
"oauth_button_text": "Gomb szövege", "oauth_button_text": "Gomb szövege",
"oauth_client_secret_description": "Bizalmas kliens esetén kötelező, vagy ha az OAuth szolgáltató nem támogatja a PKCE-t (Proof Key for Code Exchange) nyilvános kliensnél.", "oauth_client_secret_description": "Bizalmas kliens esetén kötelező, vagy ha az OAuth szolgáltató nem támogatja a PKCE-t (Proof Key for Code Exchange) nyilvános kliensnél.",
"oauth_enable_description": "Bejelentkezés OAuth használatával", "oauth_enable_description": "Bejelentkezés OAuth használatával",
"oauth_end_session_url_description": "A felhasználó kijelentkezésekor irányítsd át erre az URI-ra.",
"oauth_mobile_redirect_uri": "Mobil átirányítási URI", "oauth_mobile_redirect_uri": "Mobil átirányítási URI",
"oauth_mobile_redirect_uri_override": "Mobil átirányítási URI felülírás", "oauth_mobile_redirect_uri_override": "Mobil átirányítási URI felülírás",
"oauth_mobile_redirect_uri_override_description": "Engedélyezd, ha az OAuth szolgáltató tiltja a mobil URI-t, mint például ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Engedélyezd, ha az OAuth szolgáltató tiltja a mobil URI-t, mint például ''{callback}''",
"oauth_prompt_description": "Parancssori paraméter (pl. select_account, login, consent)",
"oauth_role_claim": "Szerepkör kérelem", "oauth_role_claim": "Szerepkör kérelem",
"oauth_role_claim_description": "Automatikusan adjon rendszergazdai hozzáférést ennek az igénylésnek a jelenléte alapján. A kérelem lehet „felhasználó” vagy „rendszergazda”.", "oauth_role_claim_description": "Automatikusan adjon rendszergazdai hozzáférést ennek az igénylésnek a jelenléte alapján. A kérelem lehet „felhasználó” vagy „rendszergazda”.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -849,9 +853,12 @@
"create_link_to_share": "Megosztási link létrehozása", "create_link_to_share": "Megosztási link létrehozása",
"create_link_to_share_description": "A kiválasztott fotókat mindenki láthassa, aki a linket használja", "create_link_to_share_description": "A kiválasztott fotókat mindenki láthassa, aki a linket használja",
"create_new": "ÚJ LÉTREHOZÁSA", "create_new": "ÚJ LÉTREHOZÁSA",
"create_new_face": "Új arc létrehozása",
"create_new_person": "Új személy létrehozása", "create_new_person": "Új személy létrehozása",
"create_new_person_hint": "Kiválasztott elemek új személyhez rendelése", "create_new_person_hint": "Kiválasztott elemek új személyhez rendelése",
"create_new_user": "Új felhasználó létrehozása", "create_new_user": "Új felhasználó létrehozása",
"create_person": "Új ember létrehozása",
"create_person_subtitle": "Adj nevet a kijelölt arcnak az új személy létrehozásához és megjelöléséhez",
"create_shared_album_page_share_add_assets": "ELEMEK HOZZÁADÁSA", "create_shared_album_page_share_add_assets": "ELEMEK HOZZÁADÁSA",
"create_shared_album_page_share_select_photos": "Fotók választása", "create_shared_album_page_share_select_photos": "Fotók választása",
"create_shared_link": "Megosztott link létrehozása", "create_shared_link": "Megosztott link létrehozása",
@@ -878,15 +885,13 @@
"cutoff_date_description": "Fotók megtartása az elmúlt…", "cutoff_date_description": "Fotók megtartása az elmúlt…",
"cutoff_day": "{count, plural, one {nap} other {nap}}", "cutoff_day": "{count, plural, one {nap} other {nap}}",
"cutoff_year": "{count, plural, one {év} other {év}}", "cutoff_year": "{count, plural, one {év} other {év}}",
"daily_title_text_date": "MMM dd (E)",
"daily_title_text_date_year": "yyyy MMM dd (E)",
"dark": "Sötét", "dark": "Sötét",
"dark_theme": "Sötét témára váltás", "dark_theme": "Sötét témára váltás",
"date": "Dátum", "date": "Dátum",
"date_after": "Dátumtól", "date_after": "Dátumtól",
"date_and_time": "Dátum és idő", "date_and_time": "Dátum és idő",
"date_before": "Dátumig", "date_before": "Dátumig",
"date_format": "y LLL d (E) • HH:mm", "date_of_birth": "Születési dátum",
"date_of_birth_saved": "Születésnap sikeresen elmentve", "date_of_birth_saved": "Születésnap sikeresen elmentve",
"date_range": "Dátum intervallum", "date_range": "Dátum intervallum",
"day": "Nap", "day": "Nap",
@@ -1233,6 +1238,7 @@
"free_up_space_description": "Hely felszabadítása érdekében helyezze át a mentett fotókat és videókat az eszköz kukájába. A szerveren lévő másolatok biztonságban maradnak.", "free_up_space_description": "Hely felszabadítása érdekében helyezze át a mentett fotókat és videókat az eszköz kukájába. A szerveren lévő másolatok biztonságban maradnak.",
"free_up_space_settings_subtitle": "Eszköz tárhely felszabadítása", "free_up_space_settings_subtitle": "Eszköz tárhely felszabadítása",
"full_path": "Teljes eléréi útvonal: {path}", "full_path": "Teljes eléréi útvonal: {path}",
"full_path_or_folder": "Teljes elérési út vagy mappa",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Ez a funkció a Google-től tölti be a működéséhez szükséges külső adatokat.", "gcast_enabled_description": "Ez a funkció a Google-től tölti be a működéséhez szükséges külső adatokat.",
"general": "Általános", "general": "Általános",
@@ -1389,11 +1395,13 @@
"light_theme": "Világos témára váltás", "light_theme": "Világos témára váltás",
"like": "Tetszik", "like": "Tetszik",
"like_deleted": "Reakció törölve", "like_deleted": "Reakció törölve",
"link": "Link",
"link_motion_video": "Motion videó hozzárendelése", "link_motion_video": "Motion videó hozzárendelése",
"link_to_docs": "További információért nézd meg a <link>dokumentációt</link>.", "link_to_docs": "További információért nézd meg a <link>dokumentációt</link>.",
"link_to_oauth": "Csatlakoztatás OAuth-hoz", "link_to_oauth": "Csatlakoztatás OAuth-hoz",
"linked_oauth_account": "Csatlakoztatott OAuth fiók", "linked_oauth_account": "Csatlakoztatott OAuth fiók",
"list": "Lista", "list": "Lista",
"live": "Élő",
"loading": "Betöltés", "loading": "Betöltés",
"loading_search_results_failed": "Keresési eredmények betöltése sikertelen", "loading_search_results_failed": "Keresési eredmények betöltése sikertelen",
"local": "Helyi", "local": "Helyi",
@@ -1515,13 +1523,45 @@
"marked_all_as_read": "Összes megjelölve olvasottként", "marked_all_as_read": "Összes megjelölve olvasottként",
"matches": "Azonosak", "matches": "Azonosak",
"matching_assets": "Kapcsolódó elemek", "matching_assets": "Kapcsolódó elemek",
"media_chrome": {
"auto": "Automatikus",
"captions": "Feliratok",
"captions_off": "Ki",
"closed_captions": "feliratok",
"decode_error": "Dekódolási hiba",
"disable_captions": "Feliratok kikapcsolása",
"enable_captions": "Feliratok bekapcsolása",
"enter_fullscreen_mode": "Teljes képernyős mód bekapcsolása",
"exit_fullscreen_mode": "Teljes képernyős mód kikapcsolása",
"loop": "Ismétel",
"media_error_description": "Médiahiba miatt a lejátszás megszakadt. Lehet, hogy a fájl sérült, vagy a böngésző nem támogatja ezt a formátumot.",
"media_loading": "média betöltése",
"mute": "Némít",
"network_error": "Hálózati hiba",
"network_error_description": "Hálózati hiba miatt a média letöltése nem sikerült.",
"not_supported_error": "Nem támogatott forrás",
"playback_rate": "Lejátszási sebesség",
"playback_rate_current": "aktuális lejátszási sebesség",
"playback_rate_value": "Lejátszási sebesség {playbackRate}",
"playback_time": "lejátszási idő",
"quality": "Minőség",
"second": "másodperc",
"seconds": "másodperc",
"time_value_of_total_time": "{currentTime} a {totalTime}-ből",
"time_value_remaining": "{time} van hátra",
"unmute": "Némítás kikapcsolása",
"unsupported_error_description": "Nem támogatott hiba történt. A szerver vagy a hálózat meghibásodott, vagy a böngésző nem támogatja ezt a formátumot.",
"video_not_loaded_unknown_time": "A videó nem töltődött be, ismeretlen hossz.",
"video_player": "videó lejátszó",
"volume": "hangerő"
},
"media_type": "Médiatípus", "media_type": "Médiatípus",
"memories": "Emlékek", "memories": "Emlékek",
"memories_all_caught_up": "Naprakész vagy", "memories_all_caught_up": "Naprakész vagy",
"memories_check_back_tomorrow": "Nézz vissza holnap újabb emlékekért", "memories_check_back_tomorrow": "Nézz vissza holnap újabb emlékekért",
"memories_setting_description": "Állítsd be, hogy mik jelenjenek meg az emlékeid közt", "memories_setting_description": "Állítsd be, hogy mik jelenjenek meg az emlékeid közt",
"memories_start_over": "Újrakezdés", "memories_start_over": "Újrakezdés",
"memories_swipe_to_close": "Bezáráshoz söpörd ki felfelé", "memories_swipe_to_close": "A bezáráshoz húzd felfelé a képernyőt",
"memory": "Emlék", "memory": "Emlék",
"memory_lane_title": "Emlékek {title}", "memory_lane_title": "Emlékek {title}",
"menu": "Menü", "menu": "Menü",
@@ -1541,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Töltse le a kiegészítő mobilalkalmazást az alábbi opciók segítségével", "mobile_app_download_onboarding_note": "Töltse le a kiegészítő mobilalkalmazást az alábbi opciók segítségével",
"model": "Modell", "model": "Modell",
"month": "Hónap", "month": "Hónap",
"monthly_title_text_date_format": "y MMMM",
"more": "Továbbiak", "more": "Továbbiak",
"motion": "Mozgás",
"move": "Áthelyezés", "move": "Áthelyezés",
"move_down": "Lejjebb", "move_down": "Lejjebb",
"move_off_locked_folder": "Átmozgatás a zárolt mappából", "move_off_locked_folder": "Átmozgatás a zárolt mappából",
@@ -1559,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helye nem módosítható, ezért kihagyjuk", "multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helye nem módosítható, ezért kihagyjuk",
"mute_memories": "Emlékek elnémítása", "mute_memories": "Emlékek elnémítása",
"my_albums": "Saját albumaim", "my_albums": "Saját albumaim",
"my_immich_description": "Az aktuális oldal másolása Én Immich-em linkként",
"my_immich_title": "Én Immich-em link",
"name": "Név", "name": "Név",
"name_or_nickname": "Név vagy becenév", "name_or_nickname": "Név vagy becenév",
"name_required": "Kötelező megadni egy nevet", "name_required": "Kötelező megadni egy nevet",
@@ -1850,6 +1892,7 @@
"remove_assets_title": "Elemek eltávolítása?", "remove_assets_title": "Elemek eltávolítása?",
"remove_custom_date_range": "Egyéni időintervallum eltávolítása", "remove_custom_date_range": "Egyéni időintervallum eltávolítása",
"remove_deleted_assets": "Törölt elemek eltávolítása", "remove_deleted_assets": "Törölt elemek eltávolítása",
"remove_filter": "Szűrő eltávolítása",
"remove_from_album": "Eltávolítás az albumból", "remove_from_album": "Eltávolítás az albumból",
"remove_from_album_action_prompt": "{count} eltávolítva az albumból", "remove_from_album_action_prompt": "{count} eltávolítva az albumból",
"remove_from_favorites": "Eltávolítás a kedvencekből", "remove_from_favorites": "Eltávolítás a kedvencekből",
@@ -1923,6 +1966,8 @@
"scan_settings": "Átfésülési beállítások", "scan_settings": "Átfésülési beállítások",
"scanning": "Átfésülés folyamatban", "scanning": "Átfésülés folyamatban",
"scanning_for_album": "Albumok átfésülése...", "scanning_for_album": "Albumok átfésülése...",
"screencast_mode_description": "Billentyűzet és egér esemény megjelenítése a képernyőn",
"screencast_mode_title": "Screencast mód kapcsolása",
"search": "Keresés", "search": "Keresés",
"search_albums": "Albumok keresése", "search_albums": "Albumok keresése",
"search_by_context": "Keresés tartalom alapján", "search_by_context": "Keresés tartalom alapján",
@@ -1930,6 +1975,8 @@
"search_by_description_example": "Túrázós nap Szapában", "search_by_description_example": "Túrázós nap Szapában",
"search_by_filename": "Keresés fájlnév vagy kiterjesztés alapján", "search_by_filename": "Keresés fájlnév vagy kiterjesztés alapján",
"search_by_filename_example": "például IMG_1234.JPG vagy PNG", "search_by_filename_example": "például IMG_1234.JPG vagy PNG",
"search_by_full_path": "Keresés teljes elérési út vagy mappa alapján",
"search_by_full_path_example": "/Jancsi/Projektek/3D_nyomtatás/2026-07-01 kereshetsz a Projektek, 3D, Nyomtatás, 2026 stb. kifejezésekre.",
"search_by_ocr": "Keresés szövegfelismeréssel (OCR)", "search_by_ocr": "Keresés szövegfelismeréssel (OCR)",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Keresés objektívmodell alapján...", "search_camera_lens_model": "Keresés objektívmodell alapján...",
@@ -2145,6 +2192,7 @@
"show_schema": "Séma megjelenítése", "show_schema": "Séma megjelenítése",
"show_search_options": "Keresési beállítások megjelenítése", "show_search_options": "Keresési beállítások megjelenítése",
"show_shared_links": "Megosztott linkek megjelenítése", "show_shared_links": "Megosztott linkek megjelenítése",
"show_slideshow_metadata_overlay": "Képadatok megjelenítése",
"show_slideshow_transition": "Vetítés áttűnési effektus megjelenítése", "show_slideshow_transition": "Vetítés áttűnési effektus megjelenítése",
"show_supporter_badge": "Támogató jelvény", "show_supporter_badge": "Támogató jelvény",
"show_supporter_badge_description": "Támogató jelvény megjelenítése", "show_supporter_badge_description": "Támogató jelvény megjelenítése",
@@ -2160,6 +2208,9 @@
"skip_to_folders": "Ugrás a mappákhoz", "skip_to_folders": "Ugrás a mappákhoz",
"skip_to_tags": "Ugrás a címkékhez", "skip_to_tags": "Ugrás a címkékhez",
"slideshow": "Diavetítés", "slideshow": "Diavetítés",
"slideshow_metadata_overlay_mode": "Képadatok tartalma",
"slideshow_metadata_overlay_mode_description_only": "Csak leírás",
"slideshow_metadata_overlay_mode_full": "Teljes",
"slideshow_repeat": "Diavetítés ismétlése", "slideshow_repeat": "Diavetítés ismétlése",
"slideshow_repeat_description": "Ha a diavetítés véget ér, újraindul az elejétől", "slideshow_repeat_description": "Ha a diavetítés véget ér, újraindul az elejétől",
"slideshow_settings": "Diavetítés beállításai", "slideshow_settings": "Diavetítés beállításai",
@@ -2211,9 +2262,12 @@
"sync_status": "Szinkronizálás állapota", "sync_status": "Szinkronizálás állapota",
"sync_status_subtitle": "Szinkronizálás megtekintése és kezelése", "sync_status_subtitle": "Szinkronizálás megtekintése és kezelése",
"sync_upload_album_setting_subtitle": "Fotók és videók létrehozása és szinkronizálása a kiválasztott Immich albumokba", "sync_upload_album_setting_subtitle": "Fotók és videók létrehozása és szinkronizálása a kiválasztott Immich albumokba",
"system_theme": "Rendszer téma",
"system_theme_command_description": "Rendszer téma használata ({value})",
"tag": "Címke", "tag": "Címke",
"tag_assets": "Elemek címkézése", "tag_assets": "Elemek címkézése",
"tag_created": "Létrehozott címke: {tag}", "tag_created": "Létrehozott címke: {tag}",
"tag_face": "Arc címkézése",
"tag_feature_description": "Fényképek és videók böngészése a címkék témája szerint csoportosítva", "tag_feature_description": "Fényképek és videók böngészése a címkék témája szerint csoportosítva",
"tag_not_found_question": "Nem találod a címkét? <link>Hozz létre egy újat.</link>", "tag_not_found_question": "Nem találod a címkét? <link>Hozz létre egy újat.</link>",
"tag_people": "Emberek címkézése", "tag_people": "Emberek címkézése",
@@ -2421,6 +2475,7 @@
"workflows": "Folyamatok", "workflows": "Folyamatok",
"workflows_help_text": "A folyamatok automatizált műveleteket hajtanak végre elemeken, indítási feltételek és szűrők alapján", "workflows_help_text": "A folyamatok automatizált műveleteket hajtanak végre elemeken, indítási feltételek és szűrők alapján",
"wrong_pin_code": "Hibás PIN kód", "wrong_pin_code": "Hibás PIN kód",
"x_of_total": "{x}/{total}",
"year": "Év", "year": "Év",
"years_ago": "{years, plural, one {# évvel} other {# évvel}} ezelőtt", "years_ago": "{years, plural, one {# évvel} other {# évvel}} ezelőtt",
"yes": "Igen", "yes": "Igen",
-1
View File
@@ -54,7 +54,6 @@
"curated_object_page_title": "Բաներ", "curated_object_page_title": "Բաներ",
"current_pin_code": "Տվյալ ՊԻՆ կոդը", "current_pin_code": "Տվյալ ՊԻՆ կոդը",
"current_server_address": "Ընթացիկ սերվերի հասցե", "current_server_address": "Ընթացիկ սերվերի հասցե",
"daily_title_text_date": "E, MMM dd",
"dark": "Մութ", "dark": "Մութ",
"dark_theme": "Միացնել/անջատել մուգ տեսքը", "dark_theme": "Միացնել/անջատել մուգ տեսքը",
"day": "Օր", "day": "Օր",
+47 -4
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Aktifkan notifikasi email", "notification_enable_email_notifications": "Aktifkan notifikasi email",
"notification_settings": "Pengaturan Notifikasi", "notification_settings": "Pengaturan Notifikasi",
"notification_settings_description": "Kelola pengaturan notifikasi, termasuk email", "notification_settings_description": "Kelola pengaturan notifikasi, termasuk email",
"oauth_allow_insecure_requests": "Izinkan permintaan tidak aman",
"oauth_allow_insecure_requests_description": "PERINGATAN: Ini menonaktifkan validasi sertifikat TLS untuk permintaan OAuth dan dapat membuat Anda rentan terhadap serangan MITM.",
"oauth_auto_launch": "Peluncuran otomatis", "oauth_auto_launch": "Peluncuran otomatis",
"oauth_auto_launch_description": "Mulai alur log masuk OAuth secara otomatis setelah menuju ke halaman log masuk", "oauth_auto_launch_description": "Mulai alur log masuk OAuth secara otomatis setelah menuju ke halaman log masuk",
"oauth_auto_register": "Pendaftaran otomatis", "oauth_auto_register": "Pendaftaran otomatis",
@@ -274,9 +276,11 @@
"oauth_button_text": "Teks tombol", "oauth_button_text": "Teks tombol",
"oauth_client_secret_description": "Diperlukan untuk klien yang konfidensial, atau jika PKCE (Proof Key for Code Exchange) tidak didukung untuk klien umum.", "oauth_client_secret_description": "Diperlukan untuk klien yang konfidensial, atau jika PKCE (Proof Key for Code Exchange) tidak didukung untuk klien umum.",
"oauth_enable_description": "Log masuk dengan OAuth", "oauth_enable_description": "Log masuk dengan OAuth",
"oauth_end_session_url_description": "Arahkan pengguna ke URI ini saat mereka keluar.",
"oauth_mobile_redirect_uri": "URI pengalihan ponsel", "oauth_mobile_redirect_uri": "URI pengalihan ponsel",
"oauth_mobile_redirect_uri_override": "Penimpaan URI penerusan ponsel", "oauth_mobile_redirect_uri_override": "Penimpaan URI penerusan ponsel",
"oauth_mobile_redirect_uri_override_description": "Aktifkan ketika penyedia OAuth tidak mengizinkan tautan ponsel, seperti ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Aktifkan ketika penyedia OAuth tidak mengizinkan tautan ponsel, seperti ''{callback}''",
"oauth_prompt_description": "Parameter prompt (mis. select_account, login, consent)",
"oauth_role_claim": "Klaim Peran", "oauth_role_claim": "Klaim Peran",
"oauth_role_claim_description": "Secara otomatis memberikan akses admin berdasarkan keberadaan klaim ini. Klaim dapat berupa \"user\" atau \"admin\".", "oauth_role_claim_description": "Secara otomatis memberikan akses admin berdasarkan keberadaan klaim ini. Klaim dapat berupa \"user\" atau \"admin\".",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -881,15 +885,12 @@
"cutoff_date_description": "Simpan foto dari … terakhir", "cutoff_date_description": "Simpan foto dari … terakhir",
"cutoff_day": "{count, plural, one {hari} other {hari}}", "cutoff_day": "{count, plural, one {hari} other {hari}}",
"cutoff_year": "{count, plural, one {tahun} other {tahun}}", "cutoff_year": "{count, plural, one {tahun} other {tahun}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM yyyy",
"dark": "Gelap", "dark": "Gelap",
"dark_theme": "Beralih ke tema gelap", "dark_theme": "Beralih ke tema gelap",
"date": "Tanggal", "date": "Tanggal",
"date_after": "Tanggal setelah", "date_after": "Tanggal setelah",
"date_and_time": "Tanggal dan Waktu", "date_and_time": "Tanggal dan Waktu",
"date_before": "Tanggal sebelum", "date_before": "Tanggal sebelum",
"date_format": "E, d LLL y • HH:mm",
"date_of_birth_saved": "Tanggal lahir berhasil disimpan", "date_of_birth_saved": "Tanggal lahir berhasil disimpan",
"date_range": "Rentang tanggal", "date_range": "Rentang tanggal",
"day": "Hari", "day": "Hari",
@@ -1236,6 +1237,7 @@
"free_up_space_description": "Pindahkan foto dan video yang dicadangkan ke tempat sampah perangkat Anda untuk mengosongkan ruang. Salinan Anda di server tetap aman.", "free_up_space_description": "Pindahkan foto dan video yang dicadangkan ke tempat sampah perangkat Anda untuk mengosongkan ruang. Salinan Anda di server tetap aman.",
"free_up_space_settings_subtitle": "Kosongkan penyimpanan perangkat", "free_up_space_settings_subtitle": "Kosongkan penyimpanan perangkat",
"full_path": "Jalur lengkap: {path}", "full_path": "Jalur lengkap: {path}",
"full_path_or_folder": "Jalur lengkap atau folder",
"gcast_enabled": "Google Cast", "gcast_enabled": "Google Cast",
"gcast_enabled_description": "Fitur ini memuat sumber daya eksternal dari Google agar dapat berfungsi.", "gcast_enabled_description": "Fitur ini memuat sumber daya eksternal dari Google agar dapat berfungsi.",
"general": "Umum", "general": "Umum",
@@ -1392,6 +1394,7 @@
"light_theme": "Ganti ke mode terang", "light_theme": "Ganti ke mode terang",
"like": "Suka", "like": "Suka",
"like_deleted": "Suka dihapus", "like_deleted": "Suka dihapus",
"link": "Tautan",
"link_motion_video": "Tautan video gerak", "link_motion_video": "Tautan video gerak",
"link_to_docs": "Untuk informasi lebih lanjut, silakan lihat <link>dokumentasi</link>.", "link_to_docs": "Untuk informasi lebih lanjut, silakan lihat <link>dokumentasi</link>.",
"link_to_oauth": "Tautkan ke OAuth", "link_to_oauth": "Tautkan ke OAuth",
@@ -1518,6 +1521,38 @@
"marked_all_as_read": "Semua telah ditandai sebagai telah dibaca", "marked_all_as_read": "Semua telah ditandai sebagai telah dibaca",
"matches": "Yang Cocok", "matches": "Yang Cocok",
"matching_assets": "Aset yang Cocok", "matching_assets": "Aset yang Cocok",
"media_chrome": {
"auto": "Otomatis",
"captions": "Teks terjemahan",
"captions_off": "Mati",
"closed_captions": "teks terjemahan tertutup",
"decode_error": "Kesalahan dekode",
"disable_captions": "Nonaktifkan teks terjemahan",
"enable_captions": "Aktifkan teks terjemahan",
"enter_fullscreen_mode": "Masuk mode layar penuh",
"exit_fullscreen_mode": "Keluar dari mode layar penuh",
"loop": "Ulangi",
"media_error_description": "Kesalahan media menyebabkan pemutaran dihentikan. Media mungkin rusak atau browser Anda tidak mendukung format ini.",
"media_loading": "memuat media",
"mute": "Bisukan",
"network_error": "Kesalahan jaringan",
"network_error_description": "Kesalahan jaringan menyebabkan pengunduhan media gagal.",
"not_supported_error": "Sumber Tidak Didukung",
"playback_rate": "Kecepatan putar",
"playback_rate_current": "kecepatan putar saat ini",
"playback_rate_value": "Kecepatan putar {playbackRate}",
"playback_time": "waktu pemutaran",
"quality": "Kualitas",
"second": "detik",
"seconds": "detik",
"time_value_of_total_time": "{currentTime} dari {totalTime}",
"time_value_remaining": "{time} tersisa",
"unmute": "Bunyikan",
"unsupported_error_description": "Terjadi kesalahan yang tidak didukung. Server atau jaringan gagal, atau browser Anda tidak mendukung format ini.",
"video_not_loaded_unknown_time": "video belum dimuat, waktu tidak diketahui.",
"video_player": "pemutar video",
"volume": "volume"
},
"media_type": "Jenis media", "media_type": "Jenis media",
"memories": "Kenangan", "memories": "Kenangan",
"memories_all_caught_up": "Semua telah dilihat", "memories_all_caught_up": "Semua telah dilihat",
@@ -1544,7 +1579,6 @@
"mobile_app_download_onboarding_note": "Unduh aplikasi seluler pendamping dengan menggunakan opsi berikut", "mobile_app_download_onboarding_note": "Unduh aplikasi seluler pendamping dengan menggunakan opsi berikut",
"model": "Model", "model": "Model",
"month": "Bulan", "month": "Bulan",
"monthly_title_text_date_format": "BBBB t",
"more": "Lainnya", "more": "Lainnya",
"move": "Pindahkan", "move": "Pindahkan",
"move_down": "Pindahkan ke bawah", "move_down": "Pindahkan ke bawah",
@@ -1562,6 +1596,8 @@
"multiselect_grid_edit_gps_err_read_only": "Tidak dapat mengedit lokasi aset hanya-baca, dilewati", "multiselect_grid_edit_gps_err_read_only": "Tidak dapat mengedit lokasi aset hanya-baca, dilewati",
"mute_memories": "Nonaktifkan Kenangan", "mute_memories": "Nonaktifkan Kenangan",
"my_albums": "Album saya", "my_albums": "Album saya",
"my_immich_description": "Salin halaman saat ini sebagai tautan My Immich",
"my_immich_title": "Tautan My Immich",
"name": "Nama", "name": "Nama",
"name_or_nickname": "Nama atau nama panggilan", "name_or_nickname": "Nama atau nama panggilan",
"name_required": "Nama diperlukan", "name_required": "Nama diperlukan",
@@ -1926,6 +1962,8 @@
"scan_settings": "Pengaturan Pemindaian", "scan_settings": "Pengaturan Pemindaian",
"scanning": "Memindai", "scanning": "Memindai",
"scanning_for_album": "Memindai album...", "scanning_for_album": "Memindai album...",
"screencast_mode_description": "Tampilkan indikator peristiwa keyboard dan mouse di layar",
"screencast_mode_title": "Aktifkan/nonaktifkan mode siaran layar",
"search": "Cari", "search": "Cari",
"search_albums": "Cari album", "search_albums": "Cari album",
"search_by_context": "Cari berdasarkan konteks", "search_by_context": "Cari berdasarkan konteks",
@@ -1933,6 +1971,8 @@
"search_by_description_example": "Mendaki Bromo", "search_by_description_example": "Mendaki Bromo",
"search_by_filename": "Cari berdasarkan nama file atau ekstensi", "search_by_filename": "Cari berdasarkan nama file atau ekstensi",
"search_by_filename_example": "mis. IMG_1234.JPG atau PNG", "search_by_filename_example": "mis. IMG_1234.JPG atau PNG",
"search_by_full_path": "Cari berdasarkan jalur lengkap atau folder",
"search_by_full_path_example": "/John/Projects/3D_Printing/2026-07-01 - Anda dapat mencari Projects, 3D, Printing, 2026, dll.",
"search_by_ocr": "Cari dengan OCR", "search_by_ocr": "Cari dengan OCR",
"search_by_ocr_example": "Latte", "search_by_ocr_example": "Latte",
"search_camera_lens_model": "Cari model lensa...", "search_camera_lens_model": "Cari model lensa...",
@@ -2214,6 +2254,8 @@
"sync_status": "Status Sinkronisasi", "sync_status": "Status Sinkronisasi",
"sync_status_subtitle": "Lihat dan kelola sistem sinkronisasi", "sync_status_subtitle": "Lihat dan kelola sistem sinkronisasi",
"sync_upload_album_setting_subtitle": "Buat dan unggah foto serta video Anda ke album yang telah dipilih pada Immich", "sync_upload_album_setting_subtitle": "Buat dan unggah foto serta video Anda ke album yang telah dipilih pada Immich",
"system_theme": "Tema sistem",
"system_theme_command_description": "Gunakan tema sistem ({value})",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Tag aset", "tag_assets": "Tag aset",
"tag_created": "Tag yang dibuat: {tag}", "tag_created": "Tag yang dibuat: {tag}",
@@ -2425,6 +2467,7 @@
"workflows": "Alur kerja", "workflows": "Alur kerja",
"workflows_help_text": "Alur kerja untuk otomasi kegiatan pada aset Anda sesuai dengan pemicu dan filter", "workflows_help_text": "Alur kerja untuk otomasi kegiatan pada aset Anda sesuai dengan pemicu dan filter",
"wrong_pin_code": "Kode PIN salah", "wrong_pin_code": "Kode PIN salah",
"x_of_total": "{x}/{total}",
"year": "Tahun", "year": "Tahun",
"years_ago": "{years, plural, one {# tahun} other {# tahun}} lalu", "years_ago": "{years, plural, one {# tahun} other {# tahun}} lalu",
"yes": "Ya", "yes": "Ya",
+57 -6
View File
@@ -267,6 +267,8 @@
"notification_enable_email_notifications": "Attiva notifiche via email", "notification_enable_email_notifications": "Attiva notifiche via email",
"notification_settings": "Impostazioni Notifiche", "notification_settings": "Impostazioni Notifiche",
"notification_settings_description": "Gestisci le impostazioni di notifica, incluse le email", "notification_settings_description": "Gestisci le impostazioni di notifica, incluse le email",
"oauth_allow_insecure_requests": "Consenti richieste non sicure",
"oauth_allow_insecure_requests_description": "ATTENZIONE: Questo disabilita la validazione del certificato TLS per richieste OAuth e potrebbe esporti ad attacchi MITM.",
"oauth_auto_launch": "Avvio automatico", "oauth_auto_launch": "Avvio automatico",
"oauth_auto_launch_description": "Esegui il flusso di autenticazione OAuth automaticamente navigando sulla pagina di login", "oauth_auto_launch_description": "Esegui il flusso di autenticazione OAuth automaticamente navigando sulla pagina di login",
"oauth_auto_register": "Registrazione automatica", "oauth_auto_register": "Registrazione automatica",
@@ -274,9 +276,11 @@
"oauth_button_text": "Testo pulsante", "oauth_button_text": "Testo pulsante",
"oauth_client_secret_description": "Richiesto per client confidenziali o se PKCE (Proof Key for Code Exchange) non è supportato dal client pubblico.", "oauth_client_secret_description": "Richiesto per client confidenziali o se PKCE (Proof Key for Code Exchange) non è supportato dal client pubblico.",
"oauth_enable_description": "Login con OAuth", "oauth_enable_description": "Login con OAuth",
"oauth_end_session_url_description": "Reindirizza l'utente a questo URI quando si disconnettono.",
"oauth_mobile_redirect_uri": "URI di reindirizzamento per app mobile", "oauth_mobile_redirect_uri": "URI di reindirizzamento per app mobile",
"oauth_mobile_redirect_uri_override": "Sovrascrivi URI di reindirizzamento per app mobile", "oauth_mobile_redirect_uri_override": "Sovrascrivi URI di reindirizzamento per app mobile",
"oauth_mobile_redirect_uri_override_description": "Abilita quando il gestore OAuth non consente un URL come ''{callback}''", "oauth_mobile_redirect_uri_override_description": "Abilita quando il gestore OAuth non consente un URL come ''{callback}''",
"oauth_prompt_description": "Parametri del prompt (es. select_account, login, consent)",
"oauth_role_claim": "Claim del ruolo", "oauth_role_claim": "Claim del ruolo",
"oauth_role_claim_description": "Concedi automaticamente l'accesso come amministratore in base alla presenza di questo claim. Il claim può essere 'user' o 'admin'.", "oauth_role_claim_description": "Concedi automaticamente l'accesso come amministratore in base alla presenza di questo claim. Il claim può essere 'user' o 'admin'.",
"oauth_settings": "OAuth", "oauth_settings": "OAuth",
@@ -351,7 +355,7 @@
"template_settings": "Templates Notifiche", "template_settings": "Templates Notifiche",
"template_settings_description": "Gestisci i modelli personalizzati per le notifiche", "template_settings_description": "Gestisci i modelli personalizzati per le notifiche",
"theme_custom_css_settings": "CSS Personalizzato", "theme_custom_css_settings": "CSS Personalizzato",
"theme_custom_css_settings_description": "I fogli di stile CSS consentono di personalizzare il design di Immich.", "theme_custom_css_settings_description": "I fogli di stile CSS consentono di personalizzare la grafica di Immich.",
"theme_settings": "Impostazioni Tema", "theme_settings": "Impostazioni Tema",
"theme_settings_description": "Gestisci la personalizzazione dell'interfaccia web di Immich", "theme_settings_description": "Gestisci la personalizzazione dell'interfaccia web di Immich",
"thumbnail_generation_job": "Genera Anteprime", "thumbnail_generation_job": "Genera Anteprime",
@@ -526,7 +530,7 @@
"allowed": "Consentito", "allowed": "Consentito",
"alt_text_qr_code": "Immagine QR", "alt_text_qr_code": "Immagine QR",
"always_keep": "Mantieni sempre", "always_keep": "Mantieni sempre",
"always_keep_photos_hint": "Liberare spazio manterrà tutte le foto su questo dispositivo.", "always_keep_photos_hint": "Libera Spazio mantiene tutte le foto su questo dispositivo.",
"always_keep_videos_hint": "Libera Spazio mantiene tutti i video su questo dispositivo.", "always_keep_videos_hint": "Libera Spazio mantiene tutti i video su questo dispositivo.",
"anti_clockwise": "Senso anti-orario", "anti_clockwise": "Senso anti-orario",
"api_key": "Chiave API", "api_key": "Chiave API",
@@ -881,15 +885,13 @@
"cutoff_date_description": "Mantieni le foto fino al…", "cutoff_date_description": "Mantieni le foto fino al…",
"cutoff_day": "{count, plural, one {giorno} other {giorni}}", "cutoff_day": "{count, plural, one {giorno} other {giorni}}",
"cutoff_year": "{count, plural, one {anno} other {anni}}", "cutoff_year": "{count, plural, one {anno} other {anni}}",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"dark": "Scuro", "dark": "Scuro",
"dark_theme": "Imposta tema scuro", "dark_theme": "Imposta tema scuro",
"date": "Data", "date": "Data",
"date_after": "Dopo la data", "date_after": "Dopo la data",
"date_and_time": "Data e ora", "date_and_time": "Data e ora",
"date_before": "Prima della data", "date_before": "Prima della data",
"date_format": "E, d LLL, y • hh:mm", "date_of_birth": "Data di nascita",
"date_of_birth_saved": "Data di nascita salvata con successo", "date_of_birth_saved": "Data di nascita salvata con successo",
"date_range": "Intervallo di date", "date_range": "Intervallo di date",
"day": "Giorno", "day": "Giorno",
@@ -1236,6 +1238,7 @@
"free_up_space_description": "Sposta le foto e i video del tuo dispositivo nel cestino per liberare spazio. Le copie sul server rimarranno al sicuro.", "free_up_space_description": "Sposta le foto e i video del tuo dispositivo nel cestino per liberare spazio. Le copie sul server rimarranno al sicuro.",
"free_up_space_settings_subtitle": "Libera spazio sul dispositivo", "free_up_space_settings_subtitle": "Libera spazio sul dispositivo",
"full_path": "Percorso completo: {path}", "full_path": "Percorso completo: {path}",
"full_path_or_folder": "Percorso assoluto o Cartella",
"gcast_enabled": "Google Cast Abilitato", "gcast_enabled": "Google Cast Abilitato",
"gcast_enabled_description": "Questa funzione carica risorse esterne da Google per poter funzionare.", "gcast_enabled_description": "Questa funzione carica risorse esterne da Google per poter funzionare.",
"general": "Generale", "general": "Generale",
@@ -1392,11 +1395,13 @@
"light_theme": "Cambia a tema chiaro", "light_theme": "Cambia a tema chiaro",
"like": "Mi piace", "like": "Mi piace",
"like_deleted": "Mi piace rimosso", "like_deleted": "Mi piace rimosso",
"link": "Link",
"link_motion_video": "Collega video in movimento", "link_motion_video": "Collega video in movimento",
"link_to_docs": "Per maggiori informazioni, riferirsi al <link>documentazione</link>.", "link_to_docs": "Per maggiori informazioni, riferirsi al <link>documentazione</link>.",
"link_to_oauth": "Collegamento a OAuth", "link_to_oauth": "Collegamento a OAuth",
"linked_oauth_account": "Account OAuth collegato", "linked_oauth_account": "Account OAuth collegato",
"list": "Lista", "list": "Lista",
"live": "Live",
"loading": "Caricamento", "loading": "Caricamento",
"loading_search_results_failed": "Impossibile caricare i risultati della ricerca", "loading_search_results_failed": "Impossibile caricare i risultati della ricerca",
"local": "Locale", "local": "Locale",
@@ -1518,6 +1523,38 @@
"marked_all_as_read": "Segnato tutto come letto", "marked_all_as_read": "Segnato tutto come letto",
"matches": "Corrispondenze", "matches": "Corrispondenze",
"matching_assets": "Risorse Corrispondenti", "matching_assets": "Risorse Corrispondenti",
"media_chrome": {
"auto": "Auto",
"captions": "Didascalie",
"captions_off": "Spento",
"closed_captions": "sottotitoli",
"decode_error": "Errore di decodifica",
"disable_captions": "Disattiva didascalie",
"enable_captions": "Attiva didascalie",
"enter_fullscreen_mode": "Passa alla modalità a schermo intero",
"exit_fullscreen_mode": "Esci dalla modalità a schermo intero",
"loop": "Ciclo",
"media_error_description": "Si è verificato un errore nel file multimediale che ha interrotto la riproduzione. Il file potrebbe essere danneggiato oppure il tuo browser non supporta questo formato.",
"media_loading": "Caricamento dei contenuti multimediali",
"mute": "Silenzioso",
"network_error": "Errore di rete",
"network_error_description": "A causa di un errore di rete, il download del file non è andato a buon fine.",
"not_supported_error": "Sorgente non supportata",
"playback_rate": "Velocità di riproduzione",
"playback_rate_current": "Velocità di riproduzione corrente",
"playback_rate_value": "Velocità di riproduzione {playbackRate}",
"playback_time": "durata della riproduzione",
"quality": "Qualità",
"second": "secondo",
"seconds": "Secondi",
"time_value_of_total_time": "{currentTime} di {totalTime}",
"time_value_remaining": "{time} rimanente",
"unmute": "Riattiva l'audio",
"unsupported_error_description": "Si è verificato un errore non supportato. Si è verificato un errore a livello di server o di rete, oppure il browser in uso non supporta questo formato.",
"video_not_loaded_unknown_time": "video non caricato, tempo sconosciuto.",
"video_player": "lettore video",
"volume": "volume"
},
"media_type": "Tipo Media", "media_type": "Tipo Media",
"memories": "Ricordi", "memories": "Ricordi",
"memories_all_caught_up": "Tutto a posto", "memories_all_caught_up": "Tutto a posto",
@@ -1544,8 +1581,8 @@
"mobile_app_download_onboarding_note": "Scarica lapp mobile dedicata utilizzando una delle seguenti opzioni", "mobile_app_download_onboarding_note": "Scarica lapp mobile dedicata utilizzando una delle seguenti opzioni",
"model": "Modello", "model": "Modello",
"month": "Mese", "month": "Mese",
"monthly_title_text_date_format": "MMMM y",
"more": "Di più", "more": "Di più",
"motion": "Movimento",
"move": "Sposta", "move": "Sposta",
"move_down": "Muovi in basso", "move_down": "Muovi in basso",
"move_off_locked_folder": "Sposta al di fuori della cartella privata", "move_off_locked_folder": "Sposta al di fuori della cartella privata",
@@ -1562,6 +1599,8 @@
"multiselect_grid_edit_gps_err_read_only": "Non puoi modificare la posizione di risorse in sola lettura, azione ignorata", "multiselect_grid_edit_gps_err_read_only": "Non puoi modificare la posizione di risorse in sola lettura, azione ignorata",
"mute_memories": "Silenzia ricordi", "mute_memories": "Silenzia ricordi",
"my_albums": "I miei album", "my_albums": "I miei album",
"my_immich_description": "Copia la pagina corrente come un link My Immich",
"my_immich_title": "Link My Immich",
"name": "Nome", "name": "Nome",
"name_or_nickname": "Nome o soprannome", "name_or_nickname": "Nome o soprannome",
"name_required": "Nome è richiesto", "name_required": "Nome è richiesto",
@@ -1853,6 +1892,7 @@
"remove_assets_title": "Rimuovo le risorse?", "remove_assets_title": "Rimuovo le risorse?",
"remove_custom_date_range": "Rimuovi intervallo data personalizzato", "remove_custom_date_range": "Rimuovi intervallo data personalizzato",
"remove_deleted_assets": "Rimuovi le Risorse cancellate", "remove_deleted_assets": "Rimuovi le Risorse cancellate",
"remove_filter": "Rimuovi filtro",
"remove_from_album": "Rimuovere dall'album", "remove_from_album": "Rimuovere dall'album",
"remove_from_album_action_prompt": "{count} elementi rimossi dall'album", "remove_from_album_action_prompt": "{count} elementi rimossi dall'album",
"remove_from_favorites": "Rimuovi dai preferiti", "remove_from_favorites": "Rimuovi dai preferiti",
@@ -1926,6 +1966,8 @@
"scan_settings": "Impostazioni Analisi", "scan_settings": "Impostazioni Analisi",
"scanning": "Scansione in corso", "scanning": "Scansione in corso",
"scanning_for_album": "Sto cercando l'album...", "scanning_for_album": "Sto cercando l'album...",
"screencast_mode_description": "Mostra indicatori di eventi mouse e tastiera sullo schermo",
"screencast_mode_title": "Attiva/disattiva modalità screencast",
"search": "Cerca", "search": "Cerca",
"search_albums": "Cerca album", "search_albums": "Cerca album",
"search_by_context": "Cerca con contesto", "search_by_context": "Cerca con contesto",
@@ -1933,6 +1975,8 @@
"search_by_description_example": "Giornata di escursioni a Sapa", "search_by_description_example": "Giornata di escursioni a Sapa",
"search_by_filename": "Cerca per nome del file o estensione", "search_by_filename": "Cerca per nome del file o estensione",
"search_by_filename_example": "es. IMG_1234.JPG o PNG", "search_by_filename_example": "es. IMG_1234.JPG o PNG",
"search_by_full_path": "Cerca per percorso completo o cartella",
"search_by_full_path_example": "/Giovanni/Progetti/Stampa_3D/2026-07-01 - puoi cercare per Progetti, 3D, Stampa, 2026 ecc.",
"search_by_ocr": "Ricerca tramite OCR", "search_by_ocr": "Ricerca tramite OCR",
"search_by_ocr_example": "Caffè Latte", "search_by_ocr_example": "Caffè Latte",
"search_camera_lens_model": "Cerca il modello del'obiettivo...", "search_camera_lens_model": "Cerca il modello del'obiettivo...",
@@ -2148,6 +2192,7 @@
"show_schema": "Mostra lo schema", "show_schema": "Mostra lo schema",
"show_search_options": "Mostra impostazioni di ricerca", "show_search_options": "Mostra impostazioni di ricerca",
"show_shared_links": "Mostra link condivisi", "show_shared_links": "Mostra link condivisi",
"show_slideshow_metadata_overlay": "Mostra metadati in sovrimpressione",
"show_slideshow_transition": "Mostra la transizione della presentazione", "show_slideshow_transition": "Mostra la transizione della presentazione",
"show_supporter_badge": "Medaglia di Contributore", "show_supporter_badge": "Medaglia di Contributore",
"show_supporter_badge_description": "Mostra la medaglia di contributore", "show_supporter_badge_description": "Mostra la medaglia di contributore",
@@ -2163,6 +2208,9 @@
"skip_to_folders": "Salta alle cartelle", "skip_to_folders": "Salta alle cartelle",
"skip_to_tags": "Salta ai tag", "skip_to_tags": "Salta ai tag",
"slideshow": "Presentazione", "slideshow": "Presentazione",
"slideshow_metadata_overlay_mode": "Contenuto dell'overlay",
"slideshow_metadata_overlay_mode_description_only": "Solo descrizione",
"slideshow_metadata_overlay_mode_full": "Completo",
"slideshow_repeat": "Ripeti presentazione", "slideshow_repeat": "Ripeti presentazione",
"slideshow_repeat_description": "Ricomincia da capo quando la presentazione termina", "slideshow_repeat_description": "Ricomincia da capo quando la presentazione termina",
"slideshow_settings": "Impostazioni presentazione", "slideshow_settings": "Impostazioni presentazione",
@@ -2214,6 +2262,8 @@
"sync_status": "Stato di Sincronizzazione", "sync_status": "Stato di Sincronizzazione",
"sync_status_subtitle": "Visualizza e gestisci il sistema di sincronizzazione", "sync_status_subtitle": "Visualizza e gestisci il sistema di sincronizzazione",
"sync_upload_album_setting_subtitle": "Crea e carica le tue foto e video sull'album selezionato in Immich", "sync_upload_album_setting_subtitle": "Crea e carica le tue foto e video sull'album selezionato in Immich",
"system_theme": "Tema di sistema",
"system_theme_command_description": "Utilizza il tema di sistema ({value})",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Tagga risorse", "tag_assets": "Tagga risorse",
"tag_created": "Tag creato: {tag}", "tag_created": "Tag creato: {tag}",
@@ -2425,6 +2475,7 @@
"workflows": "Flussi di lavoro", "workflows": "Flussi di lavoro",
"workflows_help_text": "I flussi di lavoro automatizzano azioni sulle tue risorse a seconda di eventi e filtri", "workflows_help_text": "I flussi di lavoro automatizzano azioni sulle tue risorse a seconda di eventi e filtri",
"wrong_pin_code": "Codice PIN errato", "wrong_pin_code": "Codice PIN errato",
"x_of_total": "{x}/{total}",
"year": "Anno", "year": "Anno",
"years_ago": "{years, plural, one {# anno} other {# anni}} fa", "years_ago": "{years, plural, one {# anno} other {# anni}} fa",
"yes": "Sì", "yes": "Sì",

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