Compare commits

...

293 Commits

Author SHA1 Message Date
Alex Tran
edac67acd2 update e2e package 2025-04-10 09:29:32 -05:00
Alex Tran
f410b58035 chore: update exiftool-vendor 2025-04-09 13:47:16 -05:00
Jason Rasmussen
8943ec23ba refactor: more database types (#17490) 2025-04-09 10:24:38 -04:00
Gagan Yadav
04b03f2924 fix(mobile): asset grid will infinitely scroll on iOS when select and… (#17469)
fix(mobile): asset grid will infinitely scroll on iOS when select and drag
2025-04-09 08:36:27 -05:00
Jason Rasmussen
cf2c0260a6 refactor: activity item (#17470)
* refactor: activity item

* fix query

* qualified columns

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-04-09 08:35:20 -04:00
Alex
ae8af84101 fix: no thumbnail generated for motion assets (#17472) 2025-04-08 16:07:10 -05:00
Jason Rasmussen
4794eeca88 refactor: database types (#17468) 2025-04-08 12:40:03 -04:00
Gagan Yadav
ac65d46ec6 fix(mobile): adds support for Internationalized Domain Name (IDN) (#17461) 2025-04-08 11:04:42 -05:00
Alex
e5ca79dd44 refactor: remove session entity (#17466)
* refactor: remove session entity

* fix: test

* update sql

* remote export
2025-04-08 16:04:07 +00:00
Jason Rasmussen
49be6d7fd8 refactor: more database enums (#17465) 2025-04-08 12:02:05 -04:00
Daniel Dietzler
15c6506aee fix: broken start/end dates on album update (#17467) 2025-04-08 15:47:44 +00:00
Jason Rasmussen
2c31a11e41 chore: replace generated enums with actual types (#17463) 2025-04-08 11:13:46 -04:00
Jason Rasmussen
b6c5a03533 refactor: remove tag entity (#17462) 2025-04-08 10:52:54 -04:00
Gagan Yadav
75bc32b47b fix(mobile): hide asset description text field if user is not owner (#17442)
* fix(mobile): hide asset description text field if user is not owner

* If user is not the owner and asset has no description then hide the text field

* Apply suggestions from code review

Co-authored-by: Alex <alex.tran1502@gmail.com>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-08 09:18:33 -05:00
Jason Rasmussen
fdbe6d649f refactor: remove smart search entity (#17447)
refactor: smart search entity
2025-04-08 09:56:45 -04:00
Aleksandr
2b131fe935 feat: opt-in sync of deletes and restores from web to Android (#16732)
* Features: Local file movement to trash and restoration back to the album added. (Android)

* Comments fixes

* settings button marked as [EXPERIMENTAL]

* _moveToTrashMatchedAssets refactored, moveToTrash renamed.

* fix: bad merge

* Permission check and request for local storage added.

* Permission request added on settings switcher

* Settings button logic changed

* Method channel file_trash moved to BackgroundServicePlugin

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-08 08:50:40 -05:00
snek
6ae24fbbd4 feat(web): improve individual share ux (#17430) 2025-04-08 09:11:37 -04:00
renovate[bot]
7f116d8e98 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to b0b88ef (#17453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:32:14 +01:00
renovate[bot]
bd0840c411 chore(deps): update github/codeql-action digest to 45775bd (#17452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:31:57 +01:00
renovate[bot]
a5123dec1a chore(deps): update grafana/grafana docker tag to v11.6.0 (#17460)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 13:31:46 +01:00
renovate[bot]
ffd18c5459 chore(deps): update dependency @types/node to ^22.14.0 (#17459)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 12:14:30 +02:00
PyKen
8242ff9bab fix(server): Exclude album assets in shared link payload (#17207)
* fix(server): Exclude album assets in shared link payload

* Fix e2e test
2025-04-08 00:19:06 -04:00
Jason Rasmussen
8203b6c450 refactor: stop using geodata entity type (#17444) 2025-04-08 00:15:43 -04:00
Jason Rasmussen
b352cf3336 refactor: remove natural earth countries enity (#17445) 2025-04-08 00:15:16 -04:00
bo0tzz
96ed9a8c4a fix: restore mangled footnotes (#17446)
I broke this in #17257
2025-04-07 18:03:32 -04:00
Jason Rasmussen
e7a5b96ed0 feat: extension, triggers, functions, comments, parameters management in sql-tools (#17269)
feat: sql-tools extension, triggers, functions, comments, parameters
2025-04-07 15:12:12 -04:00
renovate[bot]
51c2c60231 chore(deps): update dependency vite to v6.2.5 [security] (#17391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 16:35:29 +01:00
shenlong
43d585ce55 fix(mobile): exifInfo not updated on sync (#17407)
* fix(mobile): exifInfo not updated on sync

* add tests

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-07 10:21:37 -05:00
shenlong
042da669d1 fix(mobile): use custom filter to fetch asset path entities (#17344)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-07 09:39:24 -05:00
Yaros
a724f147fe fix(mobile): items not deselecting on back button (#17403)
* fix: items not deselecting on back button

* chore: add comments
2025-04-07 09:35:27 -05:00
Sebastian Schneider
1e4b9ae5b7 fix(mobile): video player restarting when device rotates (#17362)
* fix(mobile): Video player restarting when device rotates

* use global key in state

* Implement suggestions from code review
2025-04-07 09:26:08 -05:00
Ruben Hensen
99cddf1fd6 feat: allow accounts with a quota of 0 GiB (#17413)
* Allow 0GiB quotas in user create/edit form, remove unused translations

* Make requireQuota check for null or 0

* Add unlimited quota change to the docs

* Fix user dto formatting

* Fix formating edit-user-form

* Regenerate open-api files

* Revert unnecessary i18n file changes

* Re-add newline en.json

* Resolve linting issues

* Fix formatting edit-user-form

* Re-add manifest
2025-04-07 09:22:56 -05:00
Weblate (bot)
30d33f968f chore(web): update translations (#17254)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bi/
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/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/el/
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/fa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
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/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ka/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
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/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Daniel Correa Lobato <daniel@lobato.org>
Co-authored-by: Emre Saraçoğlu <hello@emresaracoglu.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: GND <jehende@jehende.fr>
Co-authored-by: Gocha Gulua <gocha.gulua@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <indrek.haav@hotmail.com>
Co-authored-by: Leigh van der merwe <palitu822@gmail.com>
Co-authored-by: LennartWeinzierl <lennart.weinzierl@gmx.de>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Luis Peregrina <luis.a.peregrina@gmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Oleksandr Zhukov <aleksandr.a.zhukov@gmail.com>
Co-authored-by: Passawish Paktiwong <passawishp@outlook.com>
Co-authored-by: Petri Hämäläinen <petri.hamalainen@mailbox.org>
Co-authored-by: Ruben Hensen <ruben.hensen@protonmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Stein-Aksel Basma <stein-aksel@basma.no>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Tachibana Saza <tachibanasaza@proton.me>
Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Co-authored-by: Theofilos Nikolaou <th.nikolaou@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Vin <k3kelm4vw@mozmail.com>
Co-authored-by: aks-cadesign <aks@cadesignbase.dk>
Co-authored-by: eav5jhl0 <eav5jhl0@users.noreply.hosted.weblate.org>
Co-authored-by: grgergo <gergo_g@proton.me>
Co-authored-by: late <late@users.noreply.hosted.weblate.org>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: przmkg <przemek@gasinski.eu>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: timmy61109 <qazzxcasdqwewsxedc@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-04-07 12:28:59 +01:00
Ben McCann
31ee19181a chore(web): switch to writable derived one more place (#17399) 2025-04-06 22:05:47 -05:00
shenlong
b58a450152 fix(mobile): prevent unnecessary reload on multi user timeline (#17418)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-06 22:04:13 -05:00
Zlendy
b87ba6865b fix(web): Video memories are played at 100% volume instead of respecting user preference (#17424) 2025-04-06 22:03:19 -05:00
Lorenzo Montanari
565cceb323 docs: fixed a wrong path in CLI docs page (#17369)
docs: fixed a wrong path in CLI page
2025-04-06 22:00:10 -05:00
Matthew Momjian
f096dd0cc0 fix(deployment): warning for database on network share (#17412)
Update example.env
2025-04-06 10:09:54 +02:00
Daniel Dietzler
a3c3f9cfcb fix: reset memories on logout (#17405) 2025-04-05 13:09:56 -04:00
Mert
7b6a4be30c chore: use valkey (#17396)
use valkey
2025-04-04 17:46:46 -05:00
martin
720189e2c2 fix: improve initial loading time (#17379) 2025-04-04 17:04:52 -04:00
shenlong
dfab32c8f2 fix(mobile): ignore invalid store keys (#17370)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-03 22:35:50 -05:00
shenlong
60174d662d fix(mobile): bump isar maxSize (#17372) 2025-04-03 21:49:50 -05:00
bo0tzz
8b6a765e12 chore: remove demo box spec from README.md (#17367) 2025-04-03 18:09:29 -04:00
Zack Pollard
2248a38567 fix: missing index and geodata import process uses normal table (#17343)
* chore: add geodata indexes to table definitions

* chore: rename incorrectly name geodata index

* fix: import into geodata places with correct index names
2025-04-03 21:32:33 +01:00
shenlong
97e52c5156 refactor(mobile): device asset entity to use modified time (#17064)
* refactor: device asset entity to use modified time

* chore: cleanup

* refactor: remove album media dependency from hashservice

* refactor: return updated copy of asset

* add hash service tests

* chore: rename hash batch constants

* chore: log the number of assets processed during migration

* chore: more logs

* refactor: use lookup and more tests

* use sort approach

* refactor hash service to use for loop instead

* refactor: rename to getByIds

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-03 14:42:35 -05:00
Mert
e8b4ac0522 fix(web): use original image if web compatible (#17347)
* use original image if web compatible

* add e2e

* fix shared link handling

* handle redirect in e2e

* fix size not being passed to thumbnail url

* test fullsize in e2e
2025-04-03 09:01:41 -05:00
Alex
548298b0c7 chore: post release tasks (#17341) 2025-04-03 08:47:52 -04:00
Zack Pollard
40cff2893c fix: metadata service init failure should halt server startup (#17356) 2025-04-03 12:35:39 +01:00
Abhinav Valecha
b621281351 feat(server): Avoid face match with people born after file creation #4743 (#16918)
* feat(server): Avoid face matching with people born after file creation date (#4743)

* lint

* add medium tests for facial recognition

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-04-02 10:37:26 -05:00
Snowknight26
4336afd6bf fix(web): fix thumbnail hover link position (#16762)
* fix(web): don't show a scrollbar when hovering over the last row of images on the search page

* Format code

* Fix asset selection z-index

* Remove anchor overlay on mouseover

* Fix a test

* Fix merge

* Fix overlays

* fix merge

* fix stack thumbs in asset viewer

* fix dimmed bounds, animation

* lint

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
2025-04-02 10:30:41 -05:00
shenlong
5a456ef277 feat(mobile): sqlite (#16861)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* feat: drift

* pr feedback

* refactor: move common overrides to mixin

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-02 08:58:17 -05:00
renovate[bot]
5cb5fcbf62 fix(deps): update machine-learning (#17286) 2025-04-02 03:57:19 +00:00
Alex
95e3b15776 fix(web): padding (#17320) 2025-04-01 23:32:54 -04:00
Ben
50335dc363 fix(web): menu button size (#17321)
Adjusting the menu button size, to match match the other buttons in the navigation bar.
2025-04-01 22:25:17 -05:00
Ben
6e62c09d84 feat(web): expand/collapse sidebar (#16768)
* feat: expand/collapse sidebar

* fix: general PR cleanup

- add skip link unit test
- remove unused tailwind styles
- adjust asset grid spacing
- fix event propogation

* fix: cleaning up event listeners

* fix: purchase modal and button on small screens

* fix: explicit tailwind classes

* fix: no animation on initial page load

* fix: sidebar spacing and reactivity

* chore: reverting changes to icons in nav and account info panel

* fix: remove left margin from the asset grid after merging in new timeline

* chore: extract search-bar changes for a separate PR

* fix: add margin to memories
2025-04-01 21:12:04 -05:00
github-actions
00d3b8d83a chore: version v1.131.3 2025-04-01 22:27:52 +00:00
Mert
d911b76c08 fix(server): use stat instead of exifinfo for file date metadata (#17311)
* use stat instead of filecreatedate

* update tests

* unused import
2025-04-01 17:24:07 -05:00
shenlong
502854cee1 fix(server): remove stacks on stack.deleteAll (#17288)
* fix(server): delete all stacks on deleteAll

* remove unnecessary assets update

* generate sql

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-04-01 17:20:43 -05:00
Mert
59e5c82569 fix(server): full-size images not migrated or deleted correctly (#17308)
* fix file path logic

* update tests

* add empty array fallback just in case for now
2025-04-01 18:11:46 -04:00
Daimolean
e4b0c00885 fix(web): select all button displays incorrectly (#17305)
* fix(web): select all show incorrectly

* fix: lint

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-04-01 19:00:48 +00:00
Alex
946507231d fix(web): blank locale cause blank timeline to render (#17284)
* fix(web): blank locale cause blank timeline to render

* correct fix

* newline

* pr feedback
2025-04-01 18:58:11 +00:00
Alex
20ba800a50 fix(web): date time change reactivity (#17306)
* fix(web): date time change reactivity

* remove logs
2025-04-01 18:57:53 +00:00
Alex
f434e858ed fix(mobile): getAllByRemoteId return all assets on empty arguments value (#17263)
* chore: post release tasks

* fix(mobile): getAllByRemoteId return all assets if ids is empty
2025-04-01 08:59:21 -05:00
bo0tzz
3e03c47fbf fix: strip extra metadata when transcoding (#17297) 2025-04-01 08:58:59 -05:00
github-actions
9aa3850769 chore: version v1.131.2 2025-04-01 11:41:56 +00:00
renovate[bot]
628dcdeebf fix(deps): update typescript-projects (#17294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 10:58:55 +00:00
renovate[bot]
11bfde2aa8 chore(deps): update github-actions (#17282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 11:49:11 +01:00
renovate[bot]
69b1ac47ea fix(deps): update typescript-projects (#17287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 12:32:09 +02:00
renovate[bot]
4f81265694 chore(deps): update dependency @types/node to ^22.13.14 (#17283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 12:30:41 +02:00
renovate[bot]
3428a876c7 chore(deps): update dependency vite to v6.2.4 [security] (#17259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 00:36:54 +01:00
Alex
bd822657d3 chore: post release tasks (#17262) 2025-04-01 00:36:18 +01:00
Mert
9e7744a9ab fix(ml): healthcheck (#17274) 2025-03-31 19:23:40 -04:00
github-actions
7729fe80fa chore: version v1.131.1 2025-03-31 20:36:48 +00:00
martin
68e24ad168 fix: posix compliant command (#17264) 2025-03-31 16:35:02 -04:00
Jason Rasmussen
186c573565 fix: missing migration folder broke non-root setups (#17266) 2025-03-31 20:18:13 +00:00
github-actions
5b63b9fc8b chore: version v1.131.0 2025-03-31 18:41:13 +00:00
Eli Gao
5c80e8734b feat: original-sized previews for non-web-friendly images (#14446)
* feat(server): extract full-size previews from RAW images

* feat(web): load fullsize preview for RAW images when zoomed in

* refactor: tweaks for code review

* refactor: rename "converted" preview/assets to "fullsize"

* feat(web/server): fullsize preview for non-web-friendly images

* feat: tweaks for code review

* feat(server): require ASSET_DOWNLOAD premission for fullsize previews

* test: fix types and interfaces

* chore: gen open-api

* feat(server): keep only essential exif in fullsize preview

* chore: regen openapi

* test: revert unnecessary timeout

* feat: move full-size preview config to standalone entry

* feat(i18n): update en texts

* fix: don't return fullsizePath when disabled

* test: full-size previews

* test(web): full-size previews

* chore: make open-api

* feat(server): redirect to preview/original URL when fullsize thumbnail not available

* fix(server): delete fullsize preview image on thumbnail regen after fullsize preview turned off

* refactor(server): AssetRepository.deleteFiles with Kysely

* fix(server): type of MediaRepository.writeExif

* minor simplification

* minor styling changes and condensed wording

* simplify

* chore: reuild open-api

* test(server): fix media.service tests

* test(web): fix photo-viewer test

* fix(server):  use fullsize image when requested

* fix file path extension

* formatting

* use fullsize when zooming back out or when "display original photos" is enabled

* simplify condition

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-31 13:24:28 -04:00
bo0tzz
a5093a9434 docs: separate upgrading page (#17257)
* docs: separate upgrading page

* chore: move "setup optional features" into postinstall

* docs: stronger backup warning in postinstall

* chore: link to upgrading page

* docs: reiterate breaking changes in upgrade doc

* chore: fix formatting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-31 11:43:14 -05:00
Mert
637ad1fdcb docs: minor typo (#17258)
three -> two
2025-03-31 18:34:29 +02:00
Mert
6789c2ac19 feat(ml): better multilingual search with nllb models (#13567) 2025-03-31 11:06:57 -04:00
PathToLife
838a8dd9a6 feat(web): increase album collapse click area (#17213) 2025-03-31 09:45:30 -05:00
Brandon Wees
d71c5602c3 fix(server): Postgres error pretty printing (#17204)
* add patch-package to dev dependencies

this allows us to patch upstream packages without waiting for PRs to be merged (or not!). Patch-package does a pretty good job of notifying if upstream does a change to invalidate the patch (its a git patch under the hood).

* Patch implementation of https://github.com/porsager/postgres/pull/944

This PR has not been merged by upstream and helps produce verbose error messages when postgres fails to connect (usually incorrect credentials). This is in contrast to error messages such as

`TypeError: Cannot read properties of undefined (reading 'replace'), stack: TypeError: Cannot read properties of undefined (reading 'replace')`

* have postinstall only run when not installing a global package (such as immich-cli in the Docker build)
2025-03-31 09:34:43 -05:00
Mert
8c50e3e80e feat(server): consider JpgFromRaw2 tag for embedded previews (#17123)
* add jpgfromraw2

* unused catch
2025-03-31 09:17:57 -05:00
Jonathan Jogenfors
efcb1129ce fix(server): don't sync null date assets (#17247) 2025-03-31 09:16:53 -05:00
Jonathan Jogenfors
faabda4446 fix(server): multiple exclusion patterns (#17221) 2025-03-31 09:16:30 -05:00
Alex
b8b2898c87 fix(server): double extension when filename has uppercase extension (#17226)
* fix(server): double extension when filename has uppercase extension

* Proper tests
2025-03-31 09:16:04 -05:00
Ben McCann
b25914c2a5 chore: use writable derived in more places (#17248)
chore(web): use writable derived in more places
2025-03-31 09:15:52 -05:00
Zack Pollard
d613f15606 test: fix flaky user handle delete check medium test (#17253)
we can't run specifically the handleUserDeleteCheck tests concurrently due to one of the tests modifying the config in the shared database
if run concurrently you can get race conditions where the other tests pick up the change, even with resetting the config in the beforeEach
therefore the test that checks a delete actually happens, fails
there are many ways to solve this, disabling concurrency for the suite, forcing sequential tests for just handleUserDeleteCheck, increasing the delete test deletedAt to more than the custom duration tests deleteDelay
I applied all three of these. You could also force all the user tests to run in their own databases, but that feels overkill
2025-03-31 13:19:57 +01:00
hwang
a831876fdc fix: MAX_PARAMETERS_EXCEEDED error during person cleanup job (#17222)
* add batch size in sql delete,fix person cleanup error: ERROR [Microservices:{}] Unable to run job handler (backgroundTask/person-cleanup): Error: MAX_PARAMETERS_EXCEEDED: Max number of parameters (65534) exceeded

* add chunked decorator to delete

* chore: prettier formatting fixes

---------

Co-authored-by: hwang3419 <“hwang.iit@gmail.com”>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-31 11:30:56 +00:00
PathToLife
09f4476f97 feat: improve performance for GET /api/album & /api/album/:id (#17124)
* fix(server) optimize number of sql calls for GET /api/albums

remove unnecessary join for getMetadataForIds
remove separate call to getLastUpdatedAssetForAlbumId

* fix(server) remove unnecessary getLastUpdatedAssetForAlbumId call for GET /api/album/:id

also remove getLastUpdatedAssetForAlbumId query as it is no longer referenced

* fix(server): correct lastModifiedAssetTimestamp return type + formatting and typing

* chore(server): address type issue with tests found via npm:check

tests & lint still pass before this commit.
2025-03-31 11:28:41 +00:00
Daniel Dietzler
238c151ac3 chore: finish migrating eslint config files; bump unicorn (#17200) 2025-03-31 12:18:25 +01:00
bo0tzz
e4f83680d9 feat: use my.immich.app for externalDomain fallback (#17209)
* feat: use my.immich.app for externalDomain fallback

This is probably more useful than localhost.

* chore: remove port param

* fix: update expected value in tests

* fix: update expected value in e2e
2025-03-31 12:08:41 +01:00
Daniel Dietzler
74f7fd4b53 chore: add language requests from weblate (#17236) 2025-03-31 10:48:41 +01:00
Weblate (bot)
f4dbfd856e chore(web): update translations (#17115)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
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/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translation: Immich/immich

Co-authored-by: Abhijeet Viswam <abhijeetviswam@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Henrik Sommerfeld <henrik@sommerfeld.nu>
Co-authored-by: Karsten Dambekalns <karsten@dambekalns.de>
Co-authored-by: Miro Rýzek <miroslav.ryzek@gmail.com>
Co-authored-by: Mohd Nader <mohd.nader@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nergis <me@nergis.dev>
Co-authored-by: Utkarsh Prajapati <utkarshprap@gmail.com>
Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
Co-authored-by: grgergo <gergo_g@proton.me>
2025-03-31 09:47:08 +00:00
Jason Rasmussen
55a3c30664 feat: kysely migrations (#17198) 2025-03-29 09:26:24 -04:00
renovate[bot]
6fa0cb534a fix(deps): update dependency @opentelemetry/context-async-hooks to v2 (#17031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-28 20:51:01 +01:00
Ben McCann
9f0dbfc150 chore(web): update to newer persisted store package name (#17094) 2025-03-28 20:40:57 +01:00
Saschl
6419ac74af fix: update renderlist after asset deleted (#16786) 2025-03-28 18:34:19 +00:00
Yaros
d2bcf5d716 fix(mobile): pause background video play (#17032)
* fix(mobile): prevent background video playback

* fix: logic for tracking app state

* chore: move lifecycle handler in separate file

* chore: replace useState with useRef

* chore: useOnAppLifecycleStateChange

* fix: removed print statement
2025-03-28 10:32:25 -05:00
shenlong
c8331f111f fix(mobile): prefer remote orientation (#17177)
* fix(mobile): prefer remote orientation

* pr feedback

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-28 10:24:31 -05:00
Jason Rasmussen
4b4bcd23f4 feat: schema diff sql tools (#17116) 2025-03-28 10:40:09 -04:00
Ben McCann
3fde5a8328 feat: map globe view, style hot reloading and load lag fixed (#17079)
* chore: upgrade svelte-maplibre and enforce runes

* feat: maplibre-gl 5, globe view, style hot reloading, fast map markers

* fix: remove location-pin class that wasn't being used

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-28 14:08:54 +00:00
Joren Guillaume
cc3ea32cd2 docs: update folder support for app in README.md (#17191)
Update folder support for app in README.md
2025-03-28 09:35:36 +00:00
Ben McCann
431cf281da chore(web): update typescript-eslint (#17093) 2025-03-28 00:04:31 -04:00
Alex
8f786fd7dd fix(web): form reactivity (#17183) 2025-03-27 19:58:49 -05:00
Alex
3e73765375 fix(web): don't show newly uploaded asset in inapplicable views (#17184) 2025-03-27 19:45:50 -04:00
Alex
411521b21d chore: post release tasks (#17179) 2025-03-27 19:41:22 -04:00
renovate[bot]
e163808348 fix(deps): update typescript-projects (#17080)
* fix(deps): update typescript-projects

* fix: otel

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-27 22:33:58 +00:00
Ben McCann
411772123f chore(web): remove unused props (#17141) 2025-03-27 23:12:14 +01:00
Mert
84c35e35d6 chore(ml): installable package (#17153)
* app -> immich_ml

* fix test ci

* omit file name

* add new line

* add new line
2025-03-27 19:49:09 +00:00
Mert
f7d730eb05 chore(ml): remove exporter (#17182)
* remove exporter code

* update gha
2025-03-27 14:48:02 -04:00
Mert
16e0166d22 docs: evaluate models on xtd-10 and flickr30k (#17159)
update docs
2025-03-27 11:30:51 -05:00
github-actions
43f8f473e9 chore: version v1.130.3 2025-03-27 15:54:30 +00:00
shenlong
cc393b2b7b fix(mobile): oauth-mobile-first-login (#17173)
invalidate ref

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-27 15:49:55 +00:00
Alex
6341962de4 fix(web): better touch device detection (#17144)
* fix(web): better touch device detection

* variable name
2025-03-27 10:43:56 -05:00
Min Idzelis
c26b28f6a4 fix: bug with svelte gestures (#17154)
* fix: bug with svelte gestures

* lint
2025-03-27 08:51:52 -05:00
shenlong
c72c82c401 fix(mobile): faster device album refresh after initial sync (#17170)
fix(mobile): faster device album refresh after fresh sync

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-27 08:47:05 -05:00
Alex
fecf3809a6 fix(server): album count does not account for assets without exif (#17150)
* fix(server): album count doesn't accounted for assets without exif

* sql
2025-03-26 21:24:22 -05:00
Mert
619bd72de9 docs: mention rknn among image options (#17156)
mention rknn
2025-03-26 19:05:48 -04:00
Jason Rasmussen
fd4a5f71b5 fix: broken album page (#17149) 2025-03-26 18:59:23 -04:00
github-actions
2f8725c66f chore: version v1.130.2 2025-03-26 15:34:54 +00:00
Jonathan Jogenfors
9fbd6369b9 fix(server): check asset against multiple import paths (#17128)
* fix sql logic

* refactor: map import paths into not or sql statements

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-26 10:10:53 -05:00
Snowknight26
c547d849d9 fix(web): prevent comb box dropdowns from staying open when clicking on labels (#17119)
fix(web): prevent combobox dropdowns from staying open when clicking on label
2025-03-26 08:58:00 -05:00
renovate[bot]
6ba94ac2f2 fix(deps): update machine-learning (#17078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-26 02:04:41 +00:00
Alex
dfb0626c91 fix(web): default search to context (#17118)
* fix(web): default search to context

* one liner

* Refactor
2025-03-25 17:57:12 -05:00
Alex
392ce7deb2 fix(web): albums display order again (#17117) 2025-03-25 22:14:00 +00:00
Mert
75df8fc10e refactor(server): bulk update exif (#17109)
* bulk update exif

* update sql

* update tests

* check job queeuing in test
2025-03-25 21:24:24 +00:00
github-actions
4cf7c55680 chore: version v1.130.1 2025-03-25 20:25:01 +00:00
Alex
b8ff93a3c9 chore: post release tasks (#17097) 2025-03-25 21:22:30 +01:00
Alex
37eb70c1eb fix(web): albums display order (#17106)
* fix(web): albums display order

* ergonomic

* perf ergonomic

* miss 1
2025-03-25 20:21:38 +00:00
renovate[bot]
aa4d6405f4 chore(deps): update base-image to v202503251114 (major) (#17085)
* chore(deps): update base-image to v202503251114

* fix: geocoding changes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-25 20:15:02 +00:00
Alex
ae447542a4 fix(web): asset navigation (#17104) 2025-03-25 15:00:30 -05:00
renovate[bot]
90f21d9047 chore(deps): pin dependencies (#17077)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 18:07:59 +00:00
renovate[bot]
567a92fe77 chore(deps): update dependency vite to v6.2.3 [security] (#17092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 18:07:25 +00:00
Weblate (bot)
8d6f5a2da9 chore(web): update translations (#16807)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/af/
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/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
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/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/te/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ur/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Agostino Pit <scheccia@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Andreas Resch <weblate@resch.io>
Co-authored-by: Basilis Pantelis <bpantelis10@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: C D <chinnidiwakar5@gmail.com>
Co-authored-by: Dawider10 <dawider110@gmail.com>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Focron <eliaelmas55@gmail.com>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: Jean-Philippe Jodoin <jpjodoin@gmail.com>
Co-authored-by: Johan Ohly <johanohly@gmail.com>
Co-authored-by: Jørgen Næss Berge <jorgen.n.berge@gmail.com>
Co-authored-by: KecskeTech <teonyitas@gmail.com>
Co-authored-by: Knud Bachmann Røn <knudbachmannron@proton.me>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: MSDNicrosoft <wang3311835119@hotmail.com>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nicolás McCarthy <nicomcc24@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Ryan Gleeson <gleeson.ryanj@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Tomas Svec <svec.tomas@gmail.com>
Co-authored-by: Umesh Verma <umesh.verma236@gmail.com>
Co-authored-by: User 123456789 <w0g-1es-5qq@cld3.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: beckett <beckett.blakey@proton.me>
Co-authored-by: johnwoo_nl <pb@lunenburg-productions.nl>
Co-authored-by: millallo <millallo@tiscali.it>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: yousaf465 <yousaf465@gmail.com>
Co-authored-by: 灯笼 <gh_denglong@163.com>
2025-03-25 18:05:23 +00:00
bo0tzz
69662e1ab4 chore: shared renovate configuration (#16903)
* chore: shared renovate configuration

dep: https://github.com/immich-app/.github/pull/2

* chore: move typescript-projects and schedule to shared config

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-25 14:56:54 +00:00
github-actions
42b1efb679 chore: version v1.130.0 2025-03-25 13:48:45 +00:00
Snowknight26
b8bc11b0d9 fix(web): fix escape key not closing video player after seeking (#16860)
Co-authored-by: Yaros <thedj.launchpadder.dmx512@gmail.com>
2025-03-25 13:42:23 +00:00
Ben McCann
91065db3ff chore: migrate previously missed file to Svelte 5 (#17074) 2025-03-24 19:44:05 -04:00
Alex
c14668bdd4 chore(mobile): translation (#17073)
chore(mobile): translation update
2025-03-24 22:16:10 +00:00
Yaros
9757f70064 fix(web): not autoplay after moving playhead on paused video (#17038)
fix(web): prevent autoplay after moving playhead
2025-03-24 16:55:46 -05:00
Min Idzelis
4a0045db44 feat(web): support long-press selection on mobile web (#16906)
* feat(web): max grid row height responsive

* also gallery-viewer

* lint

* feat(web): support long-press selection on mobile web

* use svelte-gestures

* fix test

* Bug fix

* globalThis

* format

* revert generator

* Testing

* bad merge

* Fix typo/tap on thumbnail

* feat: shrink header on small screens (#16909)

* feat(web): shrink header on small screens

* fix test

* test

* Fix test

* Revert user-page-layout chagne

* Restore icons sizes, make consistent, improve logo responsiveness

* remove 4 more pix, lint

* lint

* chore

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>

* Revert "Testing"

This reverts commit 442f11c9e1.

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-24 16:36:36 -05:00
Yaros
a651a4bf0e chore(mobile): search field in separate widget (#16977)
* chore(mobile): search field in separate widget

* fix: removed unnecessary use of context

* chore: minor styling tweak

* fix: controller not bound

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-24 14:40:33 -05:00
Alex
8bc80076bb fix(mobile): show new local assets in offline mode (#16817)
fix: show new local assets in offline mode
2025-03-24 16:56:18 +00:00
Luigi311
89656472ef fix(mobile): fallback authentication client model/type to unknown (#17059)
mobile: fallback authentication client model/type to unknown

Add fallback for client model/type if device is not ios or android

Signed-off-by: Luis Garcia <git@luigi311.com>
2025-03-24 11:26:05 -05:00
Yaros
d9c6ec06e5 chore(mobile): suffix to app name on debug builds (#17044) 2025-03-24 11:23:07 -05:00
Mert
4bfef2460a docs: model benchmarks (#17036)
* model benchmarks

* minor fixes

* formatting

* docs build

* maybe fix reference

* clarify optimal

* use emojis

* wording

* wording

* clarify optimal wording

* bolding

* more detailed instructions

* clarify edge case fix

* early exit in dim loop
2025-03-24 12:02:33 -04:00
shenlong
ad151130f9 chore: rename user api interface (#17062)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-24 11:00:08 -05:00
Damiano Ferrari
a77608e36b fix(mobile): selectedIcon not set when the device is landscape (#17027) 2025-03-24 10:50:49 -05:00
Nicholas Flamy
9e015c7f97 feat: lint workflow files and others files in .github (#16914)
* add npm prettier dep and format script to .github folder

* initial work on prettier formatting test

* attempt index notation

* change name of .github job to be valid

* another use of index notation

this is getting overcomplicated

* Change job ID to `github-files-formatting` and chane the name to `.github Files Checks`

* Change job name to `.github Files Formatting`

* Update Makefile with .github module and `filter-out`s

* run prettier formatting as added in this PR
2025-03-24 10:49:18 -05:00
Damiano Ferrari
df8ba21b7d fix(mobile): Make icons consistent (all outlined) (#17028)
* fix(mobile): Make icons consistent (all outlined)

* fix(mobile): make `date_range` icon outlined
2025-03-24 10:10:15 -05:00
Yaros
a285b1898e fix(mobile): platform-dependent share icons & label (#17034)
fix: platform-dependant icons
2025-03-24 08:36:15 -05:00
Mert
6a8e38042d fix(ml): add librknnrt.so in rknn image (#17022)
add librknnrt.so
2025-03-21 16:57:14 -04:00
Min Idzelis
55b52ecbec feat: mobile-web improvements - scrubber (#16856)
* feat: mobile-web improvements - scrubber

* lint

* cruft

* lint

* fix: thumb style

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-21 18:00:24 +00:00
Alex
b5d5c40c69 fix(web): update stack state in timeline (#17021)
* fix(web): update stack state in timeline

* js docs

* fix: handle state update from unstack action from gallery viewer

* use navigate in View Stack notification

---------

Co-authored-by: Snowknight26 <Snowknight26@users.noreply.github.com>
2025-03-21 12:42:36 -05:00
Snowknight26
b00da18e84 fix(web): timeline renders nothing with an invalid asset scroll target (#16994)
* fix(web): fix asset grid showing nothing with an invalid asset target

* Deduplicate

* Scroll to position where appropriate

* a bit cleaner

* fix: lint

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-21 08:40:57 -05:00
Ben
3c87341902 fix(web): clicking away closes context menu (#16989)
* fix(web): clicking away closes context menu

* fix: use pointerdown event instead

* Revert "fix: use pointerdown event instead"

This reverts commit 0d2cf47194.
2025-03-21 08:39:41 -05:00
Alex
bcd9248b43 fix(web): timeline regression 2 (#16982)
* fix(web): timeline renders nothing after archiving in asset viewer

* fix(web): timeline renders nothing after archiving in asset viewer

* fix: ensure geometry updated when performing bulk action on all

* fix: album assets selection
2025-03-20 22:30:27 -05:00
Alex
dbc279f843 fix: gallery viewer sliding window offload assets (#17016)
* fix: gallery viewer sliding window offload assets

* fix: update bottom sliding window

* do not use negative

* Calculate offset before gallery

---------

Co-authored-by: Min Idzelis <min123@gmail.com>
2025-03-20 22:30:01 -05:00
Alex
21954939cf chore: remove limit in memory generation (#16920)
* chore: remove limit in memory generation

* generate sql

* chore: assets limit
2025-03-20 13:31:51 -05:00
renovate[bot]
d537f2c2d1 chore(deps): update github-actions (#16965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-20 13:17:36 -05:00
Snowknight26
1820c0aa0d fix(web): fix View in Timeline not working for stacked assets (#16993)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-03-20 13:17:14 -05:00
Yaros
0d805a1f5b fix(web): removed merge person with itself (#16987)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-20 15:25:42 +00:00
Alex
f5e6042eb1 fix: extend e2e test cookie expiration date (#17007)
fix: extend e2e test cookie
2025-03-20 16:17:55 +01:00
renovate[bot]
8de71ddaf3 chore(deps): update dependency flutter to v3.29.2 (#16963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 10:58:57 -05:00
Min Idzelis
7075c5b393 feat(web): make asset grid row height responsive (#16970)
* feat(web): max grid row height responsive

* also gallery-viewer

* lint
2025-03-19 10:57:44 -05:00
Min Idzelis
9398b0d4b3 fix: regression in select-all (#16969)
* bug: select-all

* set->[] in interaction store, clear select-all on cancel

* feedback

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-19 15:55:50 +00:00
renovate[bot]
1a0a9ef36c chore(deps): update base-image to v202503182202 (major) (#16968)
chore(deps): update base-image to v202503182202

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 00:28:32 -04:00
Dmitry Vakhnenko
ce456709b5 fix(web): reset selection state when adding assets to a album (#16880)
* fix(web): cancel multiselect before adding assets to album

* chore: format with prettier

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-19 00:11:58 +00:00
renovate[bot]
bc90678276 fix(deps): update machine-learning (#16966) 2025-03-18 23:07:21 +00:00
renovate[bot]
217a90bf61 chore(deps): update actions/download-artifact digest to b14cf4c (#16934)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 17:10:19 -05:00
Yaros
62ba8c3e71 fix(web): date alignment on timeline (#16961) 2025-03-18 21:55:36 +00:00
renovate[bot]
564724b398 fix(deps): update machine-learning (#16960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 20:55:43 +00:00
renovate[bot]
cedeba8723 chore(deps): update prom/prometheus docker digest to 502ad90 (#16956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 16:48:52 -04:00
bo0tzz
1d994333a6 fix: duplicated steps in docker workflow (#16952)
Not sure how that happened, maybe a bad merge conflict resolution?
2025-03-18 16:39:30 -04:00
renovate[bot]
db8155f738 fix(deps): update typescript-projects (#16945)
* fix(deps): update typescript-projects

* fix: very weird variables

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-18 20:29:21 +00:00
renovate[bot]
4d723f4b56 chore(deps): update dependency types-setuptools to v76 (#16949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 15:02:25 -04:00
renovate[bot]
898b3e75c2 fix(deps): update machine-learning (#16935)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 17:09:46 +00:00
bo0tzz
8c2d02c362 chore: run docs and cli builds on all PRs (#16954)
All the other workflows already do this.
2025-03-18 11:55:18 -05:00
Dmitry Vakhnenko
d7a6e78bf0 fix(server): /api/stacks does not handles primaryAssetId query param (#16868)
fix(server): add missing validation decorator
2025-03-18 11:54:50 -05:00
Viharm
8723f585e0 chore(docs): clarify missing ':ro' tag in volume mount as a warning (#16877)
📝 Clarify missing ':ro' tag in volume mount as a warning

Changed description in comment of example docker compose file to clarify it as a warning that Immich may delete it, instead of sounding as if it is ok to delete.

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 16:50:59 +00:00
Mert
9f46ba8eb4 fix(server): set pixel format when scaling and not tonemapping (#16932)
set pixel format when scaling and not tonemapping
2025-03-18 11:42:09 -05:00
Andreas
fe19f9ba84 fix(web): asset selection on memories page is broken (#16759)
* 16712: Proper intialisation of the memory store to avoid loading up duplicate object refs of the same asset.

* 16712: Add auth to memory mapping so isFavorite is actually return correctly from the server.

* 16712: Move logic that belongs in the store into the store.

* 16712: Cleanup.

* 16712: Fix init behaviour.

* 16712: Add comment.

* 16712: Make method private.

* 16712: Fix import.

* 16712: Fix format.

* 16712: Cleaner if/else and fix typo.

* fix: icon size mismatch

* 16712: Fixed up state machine managing memory playback:
* Updated to `Tween` (`tweened` was deprecated)
* Removed `resetPromise`. Setting progressController to 0 had the same effect, so not really sure why it was there?
* Removed the many duplicate places the `handleAction` method was called. Now we just called it on `afterNavigate` as well as when `galleryInView` or `$isViewing` state changes.

* 16712: Add aria tag.

* 16712: Fix memory player duplicate invocation bugs. Now we should only call 'reset' and 'play' once, after navigate/page load. This should hopefully fix all the various bugs around playback.

* 16712: Cleanup

* 16712: Cleanup

* 16712: Cleanup

* 16712: Cleanup

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-18 11:34:09 -05:00
renovate[bot]
b609f35841 chore(deps): update base-image to v20250318 (major) (#16950)
* chore(deps): update base-image to v20250318

* chore

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 11:07:11 -05:00
shenlong
9cf3b88f80 refactor(mobile): remove int user id (#16814)
* refactor: user entity

* chore: rebase fixes

* refactor: remove int user Id

* refactor: migrate store userId from int to string

* refactor: rename uid to id

* fix: migration

* pr feedback

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-18 11:05:37 -05:00
Min Idzelis
e96ffd43e7 feat: timeline performance (#16446)
* Squash - feature complete

* remove need to init assetstore

* More optimizations. No need to init. Fix tests

* lint

* add missing selector for e2e

* e2e selectors again

* Update: fully reactive store, some transitions, bugfixes

* merge fallout

* Test fallout

* safari quirk

* security

* lint

* lint

* Bug fixes

* lint/format

* accidental commit

* lock

* null check, more throttle

* revert long duration

* Fix intersection bounds

* Fix bugs in intersection calculation

* lint, tweak scrubber ui a tiny bit

* bugfix - deselecting asset doesnt work

* fix not loading bucket, scroll off-by-1 error, jsdoc, naming
2025-03-18 09:14:46 -05:00
shenlong
dd263b010c refactor(mobile): use user service methods (#16783)
* refactor: user entity

* chore: rebase fixes

* refactor(mobile): refactor to use user service methods

* fix: late init error

* fix: lint

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-18 08:32:33 -05:00
renovate[bot]
6c2985df26 chore(deps): update dependency @types/node to ^22.13.10 (#16944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 12:15:07 +01:00
Mert
2b37caba03 feat(ml): rocm (#16613)
* feat(ml): introduce support of onnxruntime-rocm for AMD GPU

* try mutex for algo cache

use OrtMutex

* bump versions, run on mich

use 3.12

use 1.19.2

* acquire lock before any changes can be made

guard algo benchmark results

mark mutex as mutable

re-add /bin/sh (?)

use 3.10

use 6.1.2

* use composite cache key

1.19.2

fix variable name

fix variable reference

aaaaaaaaaaaaaaaaaaaa

* bump deps

* disable algo caching

* fix gha

* try ubuntu runner

* actually fix the gha

* update patch

* skip mimalloc preload for rocm

* increase build threads

* increase timeout for rocm

* Revert "increase timeout for rocm"

This reverts commit 2c4452f5d132198ed381a7b262b4a5cab5114b5f.

* attempt migraphx

* set migraphx_home

* Revert "set migraphx_home"

This reverts commit c121d3e48754b3bce100636f8d666deec58a44b7.

* Revert "attempt migraphx"

This reverts commit 521f9fb72dbe506dc6cb8faeb6494817d87265c6.

* migraphx, take two

* bump rocm

* allow cpu

* try only targeting migraphx

* skip tests

* migraph 

* known issues

* target gfx900 and gfx1102

* mention `HSA_USE_SVM`

* update lock

* set device id for rocm

---------

Co-authored-by: Mehdi GHESH <mehdi.ghesh@hotmail.fr>
2025-03-17 21:08:19 +00:00
Jason Rasmussen
6a40aa83b7 refactor: better types for getList and getDeletedAfter (#16926) 2025-03-17 15:32:12 -04:00
Yaros
93907a89d8 fix(mobile): age calculation & formatting (#16833) 2025-03-17 13:51:17 -05:00
renovate[bot]
3ce8608662 chore(deps): update mcr.microsoft.com/devcontainers/typescript-node:22 docker digest to 2ef2373 (#16925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 14:07:09 -04:00
Abhinav Valecha
d0e283f687 feat(server): version command for immich-admin #9611 (#16924)
* feat(server): Add version command for immich-admin #9611

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2025-03-17 17:57:59 +00:00
Yaros
f8b40188e2 fix(mobile): change share icons for consistency (#16904) 2025-03-17 12:34:58 -05:00
renovate[bot]
9105e696bf chore(deps): pin github action dependencies (#16923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 17:25:14 +00:00
bo0tzz
0a8135dde4 fix: docker workflow for rknn (#16922)
* fix: specify gha runner for rknn

* fix: remove s from platforms

* fix: merge job for rknn
2025-03-17 18:13:43 +01:00
Jason Rasmussen
0bb95544e5 chore: pin github action digests (#16875) 2025-03-17 11:30:13 -05:00
Yoni Yang
14c3b99c0f feat(ml): ML on Rockchip NPUs (#15241) 2025-03-17 12:04:08 -04:00
shenlong
1e184a70f1 refactor: cleanup background service (#16855)
refactor: background service

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-17 08:48:22 -05:00
Jason Rasmussen
9a4495eb5b refactor: use more immich ui buttons (#16840) 2025-03-14 09:38:06 -04:00
Jason Rasmussen
8ad95b368b feat: use immich ui components for dialog component (#16839) 2025-03-14 09:37:56 -04:00
shenlong
b778a86c99 refactor(mobile): move user service to domain (#16782)
* refactor: user entity

* chore: rebase fixes

* refactor(mobile): move user service to domain

* fix: timeline not visible on album selection page

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-13 22:20:26 -05:00
Jason Rasmussen
a65ce2ac55 refactor: immich logo assets (#16850) 2025-03-13 18:05:08 -04:00
Jason Rasmussen
f69d7e7bad chore: web cleanup (#16849) 2025-03-13 18:04:21 -04:00
ExceptionsOccur
858d1e9d9b fix(mobile): back gesture in asset selection page from an album (#16449)
* fix(mobile): the page for adding photos to the album cannot be navigated back using gestures #16409

* First-time return gesture adds the feature to cancel all current selections

---------

Co-authored-by: ExceptionsOccur <yuyu.tao@foxmail.com>
2025-03-13 11:37:05 +05:30
renovate[bot]
a1a61f19eb chore(deps): update typescript-projects (#16795)
* chore(deps): update typescript-projects

* fix: aria

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-12 23:20:26 +01:00
Jason Rasmussen
996ffed5eb fix: immich ui toggles and switches (#16834)
* fix: immich ui toggles and switches

* Update web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte

Co-authored-by: Alex <alex.tran1502@gmail.com>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 16:25:27 -05:00
Jason Rasmussen
2d7a94ce23 feat: better library rename UX (#16837) 2025-03-12 16:00:16 -05:00
Jason Rasmussen
72a7be26c0 refactor: use immich/ui button component in user settings (#16836) 2025-03-12 15:56:55 -05:00
shenlong
77fad86b82 chore(mobile): bump dependency versions (#16823)
* chore(mobile): bump dep version

* reorganize files

* sort

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 14:33:11 +00:00
Yaros
52d90a8280 fix(web): fixed formatting of video length (#16829)
* fix(web): fixed formatting of video time

* shortened the condition
2025-03-12 09:18:43 -05:00
shenlong
d1c8fe5303 refactor: user entity (#16655)
* refactor: user entity

* fix: add users to album & user profile url

* chore: rebase fixes

* generate files

* fix(mobile): timeline not reset on login

* fix: test stub

* refactor: rename user model (#16813)

* refactor: rename user model

* simplify import

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>

* chore: generate files

* fix: use getAllAccessible instead of getAll

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-12 08:56:56 -05:00
Snowknight26
a75718ce99 fix(web): update search results when searching from info panel (#16729)
* fix(web): update search results when searching from info panel

* Prevent double search when using search bar

* Format/lint

* Fix infinite loading on intersect

* Remove redundant function
2025-03-11 17:23:25 -05:00
Nicholas Flamy
d72d715f6b fix(docs): logo not loading dark theme variant in production (#16820)
fix logo not loading dark theme variant in production
2025-03-11 17:13:25 -05:00
Jason Rasmussen
16fd19994b refactor: use factory and kysely types for partner repository (#16812) 2025-03-11 16:29:56 -04:00
Mert
83ed03920e fix(ml): dev environment dependencies (#16815)
use /opt/venv
2025-03-11 13:39:33 -05:00
bo0tzz
9c825e15de fix: run preview label remove job on PR close (#16811)
🤦
2025-03-11 15:26:09 +00:00
Andreas
b8acae2f21 feat(web): Add keyboard shortcut selection on grid (#16713)
* 15712: Added keyboard shortcuts for opening add to album modal and highlighting/selecting an album to add to.

* 15712: Re-factored logic from template code into script. Extracted new album button into separate cmponent.

* 15712: Document new keyboard shortucts now that they work everywhere.

* 15712: Extract some constants/helper functions.

* 15712: Missing comma.

* 15712: Pulled logic out into separate unit testable class.

* 15712: Added a unit test.

* 15712: Move the modal back up to keep the github PR happy.

* 15712: PR feedback - renamed typescript files and switch to class bind directive.

* 15712:Move selection modal into correct package.

* 15712: Better naming of module and files.

* 15712: Add asset highlight using arrow keys.

* 15172: Add escape behaviour everywhere.

* 15712: Don't allow highlighting past start or end.

* 15712: Clear the highlight on changes to the component state.

* 15712: Use focus to track highlighted element.

* 15712: Rename highlight -> focussed.

* 15712: Better naming.

* 15712: Cleanup.

* 15712: Cleanup & simplify.

* 15712: bugfix for clicking on button.

* 15712: Cleanup.

* 15712: Rollback unnecessary changes.

* 15712: Add unit test.

* 15712: Add thumbnail unit test.

* 15712: Prettier.

* 15712: Fix merge issue.

* 15712: Add shortcut info.

* 15712: Fix linter.
2025-03-11 10:18:14 -05:00
Alex
c80afea468 feat(web): better person naming interface (#16631)
* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface

* feat(web): better person naming interface
2025-03-11 10:08:52 -05:00
shenlong
6caa11d079 chore(mobile): use path provider foundation (#16804)
* chore(mobile): use path provider foundation

* chore: update podfile

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-11 09:26:43 -05:00
shenlong
653fa3f0b1 chore(mobile): add orientation tests for exif (#16806)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-11 09:25:46 -05:00
Alex
2be8b6c16d chore: ignore correct build folder (#16808) 2025-03-11 14:22:05 +00:00
Jonathan Jogenfors
6bb0aa217c fix(server): set unit test timezone to UTC (#16805) 2025-03-11 10:19:33 -04:00
bo0tzz
04fd83d9da chore: shared suffix for docker tags (#16727) 2025-03-11 12:25:10 +00:00
renovate[bot]
ba9e3715f0 chore(deps): update base-image to v20250311 (major) (#16803)
chore(deps): update base-image to v20250311

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-11 12:24:31 +00:00
shenlong
ac1b2d2fab chore(mobile): generated files and ci check (#16798)
* chore(mobile): more generated files

* ci: verify generated files in mobile are up-to-date

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-11 12:22:31 +00:00
Lorenzo Montanari
d7e0f0e70e feat(web): exposed a job to manually trigger database backup procedures (#16622)
* feat(web): exposed a new job to create a manual database backup

* chore(server): added a new test case

* chore(server): moved job to backup db into the create job popup

* remove irrelevant change

* openapi

* chore: formatting

* docs: trigger backup documentation

---------

Co-authored-by: Lorenzo Montanari <13736036+l0ll098@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Zack Pollard <zack@futo.org>
2025-03-11 11:30:43 +00:00
Snowknight26
decc878267 feat(web): show full date when hovering over photos date groups (#16561)
* fix(web): Update asset grid date group titles to show full date

* Fix formatting
2025-03-11 11:18:29 +00:00
Zack Pollard
e0a09f2ea0 fix: weblate pre-job not running (#16802)
* chore: add debug step to weblate pre-job

* fix: weblate enforce lock missing needs for pre-job
2025-03-11 11:10:00 +00:00
sarunas-zilinskas
b9ecdf9286 chore: change k which stood for 1000 to more understandable notation of kbit/s (#16734) 2025-03-11 10:54:42 +00:00
Weblate (bot)
4c719cc3bb chore(web): update translations (#16252)
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/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/el/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hi/
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/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/mr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Cyrl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_Latn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ur/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_SIMPLIFIED/
Translation: Immich/immich

Co-authored-by: -J- <heyj0e@tuta.io>
Co-authored-by: Ahmad Amin <ahmadamindev@gmail.com>
Co-authored-by: Andreas Johansen <andreas@josern.com>
Co-authored-by: Aniruddha <aniruddha@aniruddhas.com>
Co-authored-by: Bader Alqahtani <baq100@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: Björn Boström <weblate@boztrom.com>
Co-authored-by: Bonov <bonov@mail.ru>
Co-authored-by: Bora Atıcı <boratici.acc@gmail.com>
Co-authored-by: Carlo_Mava <carlomavaracchio@gmail.com>
Co-authored-by: Cem TURKER <forumcemturker@gmail.com>
Co-authored-by: Cohinem <twitch9ofe@gmail.com>
Co-authored-by: ConfusedAlex <alex@confusedalex.dev>
Co-authored-by: Damian Krysta <damian@krysta.dev>
Co-authored-by: Daniel A <aquino.daniel1994@ikmail.com>
Co-authored-by: Eric Lehmann Llevat <lemmi93@googlemail.com>
Co-authored-by: Eskuero <3skuero@gmail.com>
Co-authored-by: Etienne-Bdt <etienne.bardet@gmail.com>
Co-authored-by: FarSniper <ozmatlik@gmail.com>
Co-authored-by: Felipe Simões <felipebouabci@gmail.com>
Co-authored-by: Filip <fjokovic0@gmail.com>
Co-authored-by: Fjuro <fjuro@users.noreply.hosted.weblate.org>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Georgi Iliev <georgi.iliev533@outlook.com>
Co-authored-by: Hoi <Hoihoi@users.noreply.hosted.weblate.org>
Co-authored-by: Hurricane-32 <rodrigorimo@hotmail.com>
Co-authored-by: Héctor Martínez Juste <hectorzin@hotmail.com>
Co-authored-by: Indrek Haav <IndrekHaav@users.noreply.hosted.weblate.org>
Co-authored-by: JohannesBoanerges <jb@johannes-boanerges.de>
Co-authored-by: Jonathan Jogenfors <jonathan@jogenfors.se>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Juan Palacios <mastergeek.juan@gmail.com>
Co-authored-by: Julius969 <juliusdjorup@proton.me>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Leo Bottaro <github@leobottaro.com>
Co-authored-by: Leonardo Patti <leonardo.patti90@gmail.com>
Co-authored-by: Linerly <linerly@proton.me>
Co-authored-by: Macgyver <macgyver@users.noreply.hosted.weblate.org>
Co-authored-by: MaliciousSpark <fijalkowskikonras@gmail.com>
Co-authored-by: Marius Kavoliunas <kavoliunas.m@gmail.com>
Co-authored-by: Mateusz <account.srrr3@slmail.me>
Co-authored-by: Matjaž T <matjaz@moj-svet.si>
Co-authored-by: Medallyon <mbups98@gmail.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Mārtiņš Bruņenieks <martinsb@gmail.com>
Co-authored-by: Nir Cohen <nir10146@gmail.com>
Co-authored-by: PPNplus <ppnplus@protonmail.com>
Co-authored-by: Pavol Valko <xpaulos2@gmail.com>
Co-authored-by: Philipp Burndorfer <phi.bur@gmx.at>
Co-authored-by: Pixiii <imapixel00@gmail.com>
Co-authored-by: Runskrift <anders@rimfrost.nu>
Co-authored-by: Sandro <account@donner-nsu.de>
Co-authored-by: Santiago <santiwever@hotmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sheridan Jegels <sheridanjegels@gmail.com>
Co-authored-by: Stijn <gielisstijn@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Toine Rademacher <hi@toine.zip>
Co-authored-by: Torin Wu <xuan329269@gmail.com>
Co-authored-by: Vesa Jylhä <vesa.jylha@gmail.com>
Co-authored-by: Vladimir <vladimir.stoev1015@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: Yaros <thedj.launchpadder.dmx512@gmail.com>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Co-authored-by: atsza661 <ats.altmets@gmail.com>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: francesco stigliano <fra.stigliano@gmail.com>
Co-authored-by: icerocker <icerocker@users.noreply.hosted.weblate.org>
Co-authored-by: mattix7771 <mattione7@gmail.com>
Co-authored-by: pierrebengtsson <pierre.bengtsson@gmail.com>
Co-authored-by: pyccl <changcongliang@163.com>
Co-authored-by: qtm <qtm@users.noreply.hosted.weblate.org>
Co-authored-by: szelek <janek.szelewicz@gmail.com>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: xuars <yago.rana.gayoso@gmail.com>
Co-authored-by: Øyvind Hovden <oyvhov@gmail.com>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
2025-03-11 10:48:34 +00:00
shenlong
81df812f56 fix(mobile): calculate isFlipped for exif from db (#16797)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-11 10:41:47 +00:00
Nicholas Flamy
f0f0056fe3 feat(docs): highlight active version in version switcher (#16790)
* docs: highlight active version in version switcher

* Add comment explaining workaround
2025-03-11 10:41:12 +00:00
renovate[bot]
48dddb78d4 chore(deps): update docker/setup-qemu-action action to v3.6.0 (#16794)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-11 10:37:36 +00:00
Nicholas Flamy
5d86e6d2d3 fix(web): update old discord logo to new one (#16789)
* fix: update discord svg path and add viewbox

* fix formatting
2025-03-10 22:46:32 -05:00
Alex
75fa305e98 chore: flutter 3.29.1 (#16730)
* update dependencies

* update flutter version reference

* update flutter version reference

* update AndroidManifest with flutter_web_auth_2

* chore: lock file flutter version

* fix: ios build
2025-03-10 21:46:36 -05:00
renovate[bot]
8cd5aec4c5 chore(deps): update dependency @types/node to ^22.13.9 (#16792)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 22:43:16 -04:00
renovate[bot]
cb489a1aa9 chore(deps): pin ghcr.io/astral-sh/uv docker tag to 562193a (#16791) 2025-03-10 22:23:50 -04:00
Jason Rasmussen
1382b27349 refactor: repository mocks (#16785) 2025-03-10 16:52:44 -04:00
Jason Rasmussen
1b35400043 chore: remove unused package (#16777) 2025-03-10 14:50:32 -04:00
Jason Rasmussen
a96bba4b26 feat: sync assets, partner assets, exif, and partner exif (#16658)
* feat: sync assets, partner assets, exif, and partner exif

Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>

* refactor: remove duplicate where clause and orderBy statements in sync queries

* fix: asset deletes not filtering by ownerId

---------

Co-authored-by: Zack Pollard <zack@futo.org>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2025-03-10 12:05:39 -04:00
Jason Rasmussen
e97df503f2 refactor: api key spec to use factories (#16776) 2025-03-10 12:04:35 -04:00
renovate[bot]
fe959b2f05 fix(deps): update machine-learning (#16594) 2025-03-10 14:48:53 +00:00
Yaros
f794c3e0df feat(web): show birthdate on person page (#16772)
* feat(web): show birthdate on person page

* shorten null check

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

* directly use birthDate

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-10 14:47:44 +00:00
Alex
57272904d6 chore(mobile): upgrade maplibre (#16739)
* chore(mobile): upgrade maplibre

* chore(mobile): upgrade maplibre

* color
2025-03-10 09:41:43 -05:00
Jensen H
2496bd7514 docs: update unraid installation steps (#16766)
Update unraid.md

Current steps omit this key step, which results in the postgresql docker complaining about the data folder not being empty. (It tries to use the `/mnt/user/appdata` folder as its application data folder.
2025-03-10 08:56:42 +00:00
Nicholas Flamy
c6ede48e59 fix(server): set the dev server restart policy of the dev server container to match the other containers (#16753)
set the restart policy of the dev server container to match the other containers
2025-03-09 22:25:03 -05:00
Adam O'neill
70a08707d2 feat(web): remember search context (#16614)
* Retain search context in LocalStorage.

* Remove debug logging

* Prettier

* Added QueryType and VALID_QUERY_TYPES to $lib/constants

* Prettier

* Renamed VALID_QUERY_TYPES to fit the codestyle.

Ran prettier

* show current search type on search bar

* fix: linting

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-03-09 22:20:25 -05:00
Snowknight26
2f8e89c7ec feat(server): read Android and Sony video camera make/model (#16678)
* feat(server): read Android and Sony video camera exif data

* Remove a logger line
2025-03-09 22:20:11 -05:00
David Bourgault
9870ad9687 fix(server): adjust type of person.birthDate (#16628)
The API currently does not respect the documentation when returning a
person's birthDate. The doc/swagger says it will be of "YYYY-MM-DD"
format but the string is a full ISO8601-with-tz string. This causes
issue #16216 because the <input> tag is strict about supported value
formats.

I believe this was introduced by #15242 which switched some queries from
TypeORM to Kysely for the person repository. TypeORM does not parse
date, but our Kysely configuration does (explicitely).

This commits updates the types to represent both possibilities and ensure
the API always returns the correct format.
2025-03-09 21:32:05 -05:00
Lukas
097749d872 fix(web): add labels to memory lane buttons (#16664)
* fix(web): add labels to memory lane buttons

* use generic button labels
2025-03-09 21:31:55 -05:00
Yaros
bdabea4030 feat(mobile): locate in timeline (#16722)
* feat(mobile): view in timeline

* fix: throwing error on scroll

* only show option if not in photos tab
2025-03-09 21:31:34 -05:00
Mert
6da77600e5 chore(ml): uv (#16725)
* poetry to uv

* update ci

* remove caching

* add typeshed to dev

* no need for `--non-interactive`

* move backends to extras

* oopsie

* update ci
2025-03-09 21:30:16 -05:00
Daniel Dietzler
573d9a7733 fix: 🍪 packages confusion (#16735)
fix: cookie packages confusion
2025-03-09 21:03:10 -05:00
Corentin Hatte
2aac679185 fix(web): Update people-card favorite position (#16746)
Update people-card favorite position

Move heart icon a bit more inward to mak it more visible
2025-03-10 01:32:32 +00:00
Alex
82624b0979 chore(mobile): upgrade riverpod (#16742) 2025-03-09 20:30:58 -05:00
Alex
17c5094719 chore(mobile): upgrade flutter_web_auth_2 (#16741)
* chore(mobile): upgrade flutter_web_auth_2

* pod file
2025-03-09 20:26:37 -05:00
Matthew Momjian
051431b757 fix(docs): edge case when restoring dump that is unreadable as current user (#16758)
* new gunzip setup

* windows
2025-03-09 20:26:00 -05:00
Yaros
6c5f99c47a feat(mobile): person age on photo properties (#16728)
* feat(mobile): person age on photo properties

* switch to using placeholder
2025-03-08 23:02:40 +01:00
Jason Rasmussen
1e127ae3a1 refactor: migrate library spec to factories (#16711) 2025-03-08 13:44:36 -05:00
Jason Rasmussen
fd46d43726 chore: remove unused file (#16707) 2025-03-07 22:47:27 -06:00
Yaros
5252c013ec fix(mobile): fix notification icon not displaying properly (#16710) 2025-03-07 19:08:53 -06:00
Jason Rasmussen
3f06a494a9 refactor: queue asset deletes via stream (#16706) 2025-03-07 22:22:57 +00:00
renovate[bot]
086d8a448a fix(deps): update typescript-projects (#16597)
* fix(deps): update typescript-projects

* chore: update server lock file

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-03-07 21:20:45 +00:00
bo0tzz
8ace44fb95 feat: log before running migrations (#16703)
* feat: log before running migrations

* fix: it's called log not info

It should be called info...

* chore: fix formatting

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-07 21:15:06 +00:00
Jason Rasmussen
ce74f765b1 refactor: memory stub (#16704) 2025-03-07 16:03:34 -05:00
Yaros
b0bf4e4fff feat(mobile): search on people page (#16696) 2025-03-07 14:43:32 -06:00
Jason Rasmussen
2d106755f6 refactor: convert activity stub to a factory (#16702) 2025-03-07 15:20:04 -05:00
Jason Rasmussen
f82786a297 feat: use stream for template migrations (#16700) 2025-03-07 14:30:01 -05:00
Yaros
c12986d38c fix(mobile): remain on albums tab after album deletion (#16698)
fix(mobile): remain on albums after album deletion
2025-03-07 13:25:07 -06:00
Matthew Momjian
19c40e3be9 fix(docs): remove /api from README (#16692)
* no api

* change internationalized
2025-03-07 08:58:18 -05:00
Jonathan Jogenfors
9959755dda refactor(server): use constant for external library batch size (#16685) 2025-03-07 11:29:06 +00:00
Lukas
fdf2331c82 fix(web): hide scroll right button when scrolled to the right in memory lane (#16656)
fix(web): hide scroll right button when scrolled to the right
2025-03-06 20:50:56 -06:00
Lukas
e03d7f888e fix(web): remove margin on last memory item (#16665) 2025-03-07 02:50:16 +00:00
Matthew Momjian
2eeed6524f fix(github): consistent folder format for PR template (#16669)
consistent formatting for folders
2025-03-06 20:32:10 -05:00
Jason Rasmussen
d45fa491ce refactor: stream asset ids for library queue jobs (#16666) 2025-03-06 20:22:17 -05:00
Matthew Momjian
5c82c485d7 feat(server): normalize extensions in storage template (#16667)
* normalize and lowercase extensions

* un const

* do not change ext before stripping off old one

* braces
2025-03-06 18:02:28 -05:00
Sergey Katsubo
feb65bf5a7 docs: reading existing face tag metadata is supported currently (#16662)
Fix FAQ: reading existing face tag metadata is supported currently
2025-03-06 20:42:14 +00:00
Jason Rasmussen
2cdbb0a37c refactor: database repository (#16593)
* refactor: database repository

* fix error reindex check

* chore: remove WIP code

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-06 13:33:24 -05:00
shenlong
fe931faf17 refactor: exif entity (#16621)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-06 11:58:24 -06:00
Arno
4ebc25c754 feat(mobile): Folder View for mobile (#15047)
* very rough prototype for folder navigation without assets

* fix: refactored data model and tried to implement asset loading

* fix: openapi generator shadowing query param in /view/folder

* add simple alphanumeric sorting for folders

* basic asset viewing in folders

* rudimentary switch sorting order

* fixed reactivity when toggling sort order

* Fixed trailing comma

* Fixed bad merge conflict resolution

* Regenerated open-api

* Added rudimentary breadcrumbs

* Fixed linting problems

* feat: cleanup

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2025-03-06 17:27:43 +00:00
Mert
deb399ea15 refactor(server): use exiftool for file date metadata (#16453)
* use exiftool for file date metadata

* handle tag not existing in exifinfo (?)

* update medium tests

* fix typo

* set file size too

* set file size only if undefined
2025-03-06 16:47:12 +00:00
Yaros
d01b7a0d67 feat(web): aspect ratio of memory cards (#16652)
Fix aspect ratio of memory cards
2025-03-06 15:24:01 +00:00
Jonathan Jogenfors
3af26ee94a feat(server): library refresh go brrr (#14456)
* feat: brr

---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2025-03-06 16:00:18 +01:00
Mert
bc61497461 refactor(server): group async calls in metadata extraction (#16450)
* group async calls

use debugFn

no need to change mock

* check call count in tests
2025-03-06 08:56:35 -06:00
Alex
1ed1a0a1fc feat(mobile): new sync (#16556)
* feat(mobile): new sync

* refactor

* refactor

* refactor

* refactor

* refactor

* refactor

* update analysis option

* remove database operation

* pr feedback
2025-03-06 08:44:28 -06:00
Lukas
2875303b4c feat(web): allow horizontal scrolling in memory lane (#16647) 2025-03-06 08:37:11 -06:00
rrrockey
d84009648e refactor(server): replace switch statement in sendFile with Record lookup (#16630)
* refactor cache control handling in server/utils/file.ts

* add ability to null CacheControl.NONE

* Cache control handling comment

* Added comment to file.ts

This comment provides a better understanding of what the cacheControlHeader is doing.

* Update file.ts

Added comments

* Update server/src/utils/file.ts

* fix comments in file.ts

* run prettier with --write to fix formatting

---------

Co-authored-by: pnleguizamo <pnleguizamo@gmail.com>
Co-authored-by: drew-kearns <dkearns@iastate.edu>
Co-authored-by: Sierra (Izumi) Brown <119357873+SierraIBrown@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-03-06 12:46:37 +01:00
Nick Huang
fc2df05190 docs: fix png extension typo in supported formats table (#16636)
Update supported-formats.md
2025-03-06 11:44:06 +00:00
Savely Krasovsky
69b5365965 feat: enable PMTiles protocol support (#16629)
This patch enables PMTiles protocol for MapLibre-GL. Protocol allows to fetch tiles from a single file.  This drastically simplifies the process to self-host own tiles.
2025-03-06 10:50:14 +00:00
Alex
c110c9b00e chore(mobile): post release task (#16623) 2025-03-05 14:54:56 -06:00
Yaros
b241a80339 feat(mobile): Navigate back on memories (#16545)
* Navigate back on memories

* Fixes crash on navigating back
2025-03-05 14:42:43 -06:00
1136 changed files with 45116 additions and 27482 deletions

View File

@@ -1,10 +1,10 @@
ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:9791f4aa527774bc370c6bd2f6705ce5a686f1e6f204badd8dfaacce28c631ae ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:b0b88ef6a5abf21194343d2c5b2829dddd9be1142f65f6a5e4390a51d5a70dd8
FROM ${BASEIMAGE} FROM ${BASEIMAGE}
# Flutter SDK # Flutter SDK
# https://flutter.dev/docs/development/tools/sdk/releases?tab=linux # https://flutter.dev/docs/development/tools/sdk/releases?tab=linux
ENV FLUTTER_CHANNEL="stable" ENV FLUTTER_CHANNEL="stable"
ENV FLUTTER_VERSION="3.24.5" ENV FLUTTER_VERSION="3.29.1"
ENV FLUTTER_HOME=/flutter ENV FLUTTER_HOME=/flutter
ENV PATH=${PATH}:${FLUTTER_HOME}/bin ENV PATH=${PATH}:${FLUTTER_HOME}/bin

3
.gitattributes vendored
View File

@@ -6,6 +6,9 @@ mobile/openapi/**/*.dart linguist-generated=true
mobile/lib/**/*.g.dart -diff -merge mobile/lib/**/*.g.dart -diff -merge
mobile/lib/**/*.g.dart linguist-generated=true mobile/lib/**/*.g.dart linguist-generated=true
mobile/lib/**/*.drift.dart -diff -merge
mobile/lib/**/*.drift.dart linguist-generated=true
open-api/typescript-sdk/fetch-client.ts -diff -merge open-api/typescript-sdk/fetch-client.ts -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true open-api/typescript-sdk/fetch-client.ts linguist-generated=true

1
.github/.nvmrc vendored Normal file
View File

@@ -0,0 +1 @@
22.14.0

View File

@@ -1,5 +1,5 @@
title: "[Feature] feature-name-goes-here" title: '[Feature] feature-name-goes-here'
labels: ["feature"] labels: ['feature']
body: body:
- type: markdown - type: markdown
@@ -13,7 +13,7 @@ body:
attributes: attributes:
label: I have searched the existing feature requests, both open and closed, to make sure this is not a duplicate request. label: I have searched the existing feature requests, both open and closed, to make sure this is not a duplicate request.
options: options:
- label: "Yes" - label: 'Yes'
required: true required: true
- type: textarea - type: textarea

View File

@@ -5,7 +5,7 @@ body:
attributes: attributes:
label: I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. label: I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.
options: options:
- label: "Yes" - label: 'Yes'
required: true required: true
- type: markdown - type: markdown
@@ -84,7 +84,7 @@ body:
id: repro id: repro
attributes: attributes:
label: Reproduction steps label: Reproduction steps
description: "How do you trigger this bug? Please walk us through it step by step." description: 'How do you trigger this bug? Please walk us through it step by step.'
value: | value: |
1. 1.
2. 2.
@@ -97,7 +97,8 @@ body:
id: logs id: logs
attributes: attributes:
label: Relevant log output label: Relevant log output
description: Please copy and paste any relevant logs below. (code formatting is description:
Please copy and paste any relevant logs below. (code formatting is
enabled, no need for backticks) enabled, no need for backticks)
render: shell render: shell
validations: validations:

28
.github/package-lock.json generated vendored Normal file
View File

@@ -0,0 +1,28 @@
{
"name": ".github",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"devDependencies": {
"prettier": "^3.5.3"
}
},
"node_modules/prettier": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
}
}
}

9
.github/package.json vendored Normal file
View File

@@ -0,0 +1,9 @@
{
"scripts": {
"format": "prettier --check .",
"format:fix": "prettier --write ."
},
"devDependencies": {
"prettier": "^3.5.3"
}
}

View File

@@ -32,5 +32,5 @@ The `/api/something` endpoint is now `/api/something-else`
- [ ] I have confirmed that any new dependencies are strictly necessary. - [ ] I have confirmed that any new dependencies are strictly necessary.
- [ ] I have written tests for new code (if applicable) - [ ] I have written tests for new code (if applicable)
- [ ] I have followed naming conventions/patterns in the surrounding code - [ ] I have followed naming conventions/patterns in the surrounding code
- [ ] All code in `src/services` uses repositories implementations for database calls, filesystem operations, etc. - [ ] All code in `src/services/` uses repositories implementations for database calls, filesystem operations, etc.
- [ ] All code in `src/repositories/` is pretty basic/simple and does not have any immich specific logic (that belongs in `src/services`) - [ ] All code in `src/repositories/` is pretty basic/simple and does not have any immich specific logic (that belongs in `src/services/`)

View File

@@ -22,9 +22,9 @@ jobs:
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths - id: found_paths
uses: dorny/paths-filter@v3 uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with: with:
filters: | filters: |
mobile: mobile:
@@ -51,18 +51,18 @@ jobs:
ref="${input_ref:-$github_ref}" ref="${input_ref:-$github_ref}"
echo "ref=$ref" >> $GITHUB_OUTPUT echo "ref=$ref" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
ref: ${{ steps.get-ref.outputs.ref }} ref: ${{ steps.get-ref.outputs.ref }}
- uses: actions/setup-java@v4 - uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4
with: with:
distribution: 'zulu' distribution: 'zulu'
java-version: '17' java-version: '17'
cache: 'gradle' cache: 'gradle'
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
@@ -89,7 +89,7 @@ jobs:
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
- name: Publish Android Artifact - name: Publish Android Artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
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

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cleanup - name: Cleanup
run: | run: |

View File

@@ -6,7 +6,6 @@ on:
- 'cli/**' - 'cli/**'
- '.github/workflows/cli.yml' - '.github/workflows/cli.yml'
pull_request: pull_request:
branches: [main]
paths: paths:
- 'cli/**' - 'cli/**'
- '.github/workflows/cli.yml' - '.github/workflows/cli.yml'
@@ -29,9 +28,9 @@ jobs:
working-directory: ./cli working-directory: ./cli
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# Setup .npmrc file to publish to npm # Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4 - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
@@ -53,16 +52,16 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3.5.0 uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.10.0 uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ !github.event.pull_request.head.repo.fork }} if: ${{ !github.event.pull_request.head.repo.fork }}
with: with:
registry: ghcr.io registry: ghcr.io
@@ -77,7 +76,7 @@ jobs:
- name: Generate docker image tags - name: Generate docker image tags
id: metadata id: metadata
uses: docker/metadata-action@v5 uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
with: with:
flavor: | flavor: |
latest=false latest=false
@@ -88,7 +87,7 @@ jobs:
type=raw,value=latest,enable=${{ github.event_name == 'release' }} type=raw,value=latest,enable=${{ github.event_name == 'release' }}
- name: Build and push image - name: Build and push image
uses: docker/build-push-action@v6.15.0 uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with: with:
file: cli/Dockerfile file: cli/Dockerfile
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64

View File

@@ -9,14 +9,14 @@
# the `language` matrix defined below to confirm you have the correct set of # the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages. # supported CodeQL languages.
# #
name: "CodeQL" name: 'CodeQL'
on: on:
push: push:
branches: [ "main" ] branches: ['main']
pull_request: pull_request:
# The branches below must be a subset of the branches above # The branches below must be a subset of the branches above
branches: [ "main" ] branches: ['main']
schedule: schedule:
- cron: '20 13 * * 1' - cron: '20 13 * * 1'
@@ -36,43 +36,42 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
language: [ 'javascript', 'python' ] language: ['javascript', 'python']
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@45775bd8235c68ba998cffa5171334d58593da47 # v3
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.
# By default, queries listed here will override any specified in a config file. # By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file. # Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality # queries: security-extended,security-and-quality
# 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)
- name: Autobuild
uses: github/codeql-action/autobuild@45775bd8235c68ba998cffa5171334d58593da47 # v3
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Command-line programs to run using the OS shell.
# If this step fails, then you should remove it and run the build manually (see below) # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell. # If the Autobuild fails above, remove it and uncomment the following three lines.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# If the Autobuild fails above, remove it and uncomment the following three lines. # - run: |
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
# - run: | - name: Perform CodeQL Analysis
# echo "Run, Build Application using script" uses: github/codeql-action/analyze@45775bd8235c68ba998cffa5171334d58593da47 # v3
# ./location_of_script_within_repo/buildscript.sh with:
category: '/language:${{matrix.language}}'
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@@ -23,9 +23,9 @@ jobs:
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths - id: found_paths
uses: dorny/paths-filter@v3 uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with: with:
filters: | filters: |
server: server:
@@ -49,23 +49,23 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
suffix: ["", "-cuda", "-openvino", "-armnn"] suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
steps: steps:
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Re-tag image - name: Re-tag image
run: | run: |
REGISTRY_NAME="ghcr.io" REGISTRY_NAME="ghcr.io"
REPOSITORY=${{ github.repository_owner }}/immich-machine-learning REPOSITORY=${{ github.repository_owner }}/immich-machine-learning
TAG_OLD=main${{ matrix.suffix }} TAG_OLD=main${{ matrix.suffix }}
TAG_PR=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }} TAG_PR=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
TAG_COMMIT=commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }} TAG_COMMIT=commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_PR $REGISTRY_NAME/$REPOSITORY:$TAG_OLD docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_PR $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_COMMIT $REGISTRY_NAME/$REPOSITORY:$TAG_OLD docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_COMMIT $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
retag_server: retag_server:
name: Re-Tag Server name: Re-Tag Server
@@ -74,10 +74,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
suffix: [""] suffix: ['']
steps: steps:
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
@@ -120,6 +120,11 @@ jobs:
device: cuda device: cuda
suffix: -cuda suffix: -cuda
- platform: linux/amd64
runner: mich
device: rocm
suffix: -rocm
- platform: linux/amd64 - platform: linux/amd64
runner: ubuntu-latest runner: ubuntu-latest
device: openvino device: openvino
@@ -130,6 +135,11 @@ jobs:
device: armnn device: armnn
suffix: -armnn suffix: -armnn
- platform: linux/arm64
runner: ubuntu-24.04-arm
device: rknn
suffix: -rknn
steps: steps:
- name: Prepare - name: Prepare
run: | run: |
@@ -137,13 +147,13 @@ jobs:
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.10.0 uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ !github.event.pull_request.head.repo.fork }} if: ${{ !github.event.pull_request.head.repo.fork }}
with: with:
registry: ghcr.io registry: ghcr.io
@@ -170,7 +180,7 @@ jobs:
- name: Build and push image - name: Build and push image
id: build id: build
uses: docker/build-push-action@v6.15.0 uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with: with:
context: ${{ env.context }} context: ${{ env.context }}
file: ${{ env.file }} file: ${{ env.file }}
@@ -195,7 +205,7 @@ jobs:
touch "${{ runner.temp }}/digests/${digest#sha256:}" touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest - name: Upload digest
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with: with:
name: ml-digests-${{ matrix.device }}-${{ env.PLATFORM_PAIR }} name: ml-digests-${{ matrix.device }}-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/* path: ${{ runner.temp }}/digests/*
@@ -215,15 +225,19 @@ jobs:
- device: cpu - device: cpu
- device: cuda - device: cuda
suffix: -cuda suffix: -cuda
- device: rocm
suffix: -rocm
- device: openvino - device: openvino
suffix: -openvino suffix: -openvino
- device: armnn - device: armnn
suffix: -armnn suffix: -armnn
- device: rknn
suffix: -rknn
needs: needs:
- build_and_push_ml - build_and_push_ml
steps: steps:
- name: Download digests - name: Download digests
uses: actions/download-artifact@v4 uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with: with:
path: ${{ runner.temp }}/digests path: ${{ runner.temp }}/digests
pattern: ml-digests-${{ matrix.device }}-* pattern: ml-digests-${{ matrix.device }}-*
@@ -231,43 +245,44 @@ jobs:
- name: Login to Docker Hub - name: Login to Docker Hub
if: ${{ github.event_name == 'release' }} if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR - name: Login to GHCR
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
- name: Generate docker image tags - name: Generate docker image tags
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
env: env:
DOCKER_METADATA_PR_HEAD_SHA: "true" DOCKER_METADATA_PR_HEAD_SHA: 'true'
with: with:
flavor: | flavor: |
# Disable latest tag # Disable latest tag
latest=false latest=false
suffix=${{ matrix.suffix }}
images: | images: |
name=${{ env.GHCR_REPO }} name=${{ env.GHCR_REPO }}
name=${{ env.DOCKER_REPO }},enable=${{ github.event_name == 'release' }} name=${{ env.DOCKER_REPO }},enable=${{ github.event_name == 'release' }}
tags: | tags: |
# Tag with branch name # Tag with branch name
type=ref,event=branch,suffix=${{ matrix.suffix }} type=ref,event=branch
# Tag with pr-number # Tag with pr-number
type=ref,event=pr,suffix=${{ matrix.suffix }} type=ref,event=pr
# Tag with long commit sha hash # Tag with long commit sha hash
type=sha,format=long,prefix=commit-,suffix=${{ matrix.suffix }} type=sha,format=long,prefix=commit-
# Tag with git tag on release # Tag with git tag on release
type=ref,event=tag,suffix=${{ matrix.suffix }} type=ref,event=tag
type=raw,value=release,enable=${{ github.event_name == 'release' }},suffix=${{ matrix.suffix }} type=raw,value=release,enable=${{ github.event_name == 'release' }}
- name: Create manifest list and push - name: Create manifest list and push
working-directory: ${{ runner.temp }}/digests working-directory: ${{ runner.temp }}/digests
@@ -300,13 +315,13 @@ jobs:
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
if: ${{ !github.event.pull_request.head.repo.fork }} if: ${{ !github.event.pull_request.head.repo.fork }}
with: with:
registry: ghcr.io registry: ghcr.io
@@ -333,7 +348,7 @@ jobs:
- name: Build and push image - name: Build and push image
id: build id: build
uses: docker/build-push-action@v6.15.0 uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with: with:
context: ${{ env.context }} context: ${{ env.context }}
file: ${{ env.file }} file: ${{ env.file }}
@@ -358,7 +373,7 @@ jobs:
touch "${{ runner.temp }}/digests/${digest#sha256:}" touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest - name: Upload digest
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with: with:
name: server-digests-${{ env.PLATFORM_PAIR }} name: server-digests-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/* path: ${{ runner.temp }}/digests/*
@@ -376,7 +391,7 @@ jobs:
- build_and_push_server - build_and_push_server
steps: steps:
- name: Download digests - name: Download digests
uses: actions/download-artifact@v4 uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with: with:
path: ${{ runner.temp }}/digests path: ${{ runner.temp }}/digests
pattern: server-digests-* pattern: server-digests-*
@@ -384,43 +399,44 @@ jobs:
- name: Login to Docker Hub - name: Login to Docker Hub
if: ${{ github.event_name == 'release' }} if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR - name: Login to GHCR
uses: docker/login-action@v3 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
- name: Generate docker image tags - name: Generate docker image tags
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
env: env:
DOCKER_METADATA_PR_HEAD_SHA: "true" DOCKER_METADATA_PR_HEAD_SHA: 'true'
with: with:
flavor: | flavor: |
# Disable latest tag # Disable latest tag
latest=false latest=false
suffix=${{ matrix.suffix }}
images: | images: |
name=${{ env.GHCR_REPO }} name=${{ env.GHCR_REPO }}
name=${{ env.DOCKER_REPO }},enable=${{ github.event_name == 'release' }} name=${{ env.DOCKER_REPO }},enable=${{ github.event_name == 'release' }}
tags: | tags: |
# Tag with branch name # Tag with branch name
type=ref,event=branch,suffix=${{ matrix.suffix }} type=ref,event=branch
# Tag with pr-number # Tag with pr-number
type=ref,event=pr,suffix=${{ matrix.suffix }} type=ref,event=pr
# Tag with long commit sha hash # Tag with long commit sha hash
type=sha,format=long,prefix=commit-,suffix=${{ matrix.suffix }} type=sha,format=long,prefix=commit-
# Tag with git tag on release # Tag with git tag on release
type=ref,event=tag,suffix=${{ matrix.suffix }} type=ref,event=tag
type=raw,value=release,enable=${{ github.event_name == 'release' }},suffix=${{ matrix.suffix }} type=raw,value=release,enable=${{ github.event_name == 'release' }}
- name: Create manifest list and push - name: Create manifest list and push
working-directory: ${{ runner.temp }}/digests working-directory: ${{ runner.temp }}/digests

View File

@@ -3,7 +3,6 @@ on:
push: push:
branches: [main] branches: [main]
pull_request: pull_request:
branches: [main]
release: release:
types: [published] types: [published]
@@ -18,9 +17,9 @@ jobs:
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths - id: found_paths
uses: dorny/paths-filter@v3 uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with: with:
filters: | filters: |
docs: docs:
@@ -42,10 +41,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './docs/.nvmrc' node-version-file: './docs/.nvmrc'
@@ -59,7 +58,7 @@ jobs:
run: npm run build run: npm run build
- name: Upload build output - name: Upload build output
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with: with:
name: docs-build-output name: docs-build-output
path: docs/build/ path: docs/build/

View File

@@ -1,7 +1,7 @@
name: Docs deploy name: Docs deploy
on: on:
workflow_run: workflow_run:
workflows: ["Docs build"] workflows: ['Docs build']
types: types:
- completed - completed
@@ -17,7 +17,7 @@ jobs:
run: echo 'The triggering workflow did not succeed' && exit 1 run: echo 'The triggering workflow did not succeed' && exit 1
- name: Get artifact - name: Get artifact
id: get-artifact id: get-artifact
uses: actions/github-script@v7 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with: with:
script: | script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
@@ -35,7 +35,7 @@ jobs:
return { found: true, id: matchArtifact.id }; return { found: true, id: matchArtifact.id };
- name: Determine deploy parameters - name: Determine deploy parameters
id: parameters id: parameters
uses: actions/github-script@v7 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with: with:
script: | script: |
const eventType = context.payload.workflow_run.event; const eventType = context.payload.workflow_run.event;
@@ -98,11 +98,11 @@ 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:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Load parameters - name: Load parameters
id: parameters id: parameters
uses: actions/github-script@v7 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with: with:
script: | script: |
const json = `${{ needs.checks.outputs.parameters }}`; const json = `${{ needs.checks.outputs.parameters }}`;
@@ -115,7 +115,7 @@ jobs:
echo "Starting docs deployment for ${{ steps.parameters.outputs.event }} ${{ steps.parameters.outputs.name }}" echo "Starting docs deployment for ${{ steps.parameters.outputs.event }} ${{ steps.parameters.outputs.name }}"
- name: Download artifact - name: Download artifact
uses: actions/github-script@v7 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with: with:
script: | script: |
let artifact = ${{ needs.checks.outputs.artifact }}; let artifact = ${{ needs.checks.outputs.artifact }};
@@ -138,12 +138,12 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }} TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2 uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with: with:
tg_version: "0.58.12" tg_version: '0.58.12'
tofu_version: "1.7.1" tofu_version: '1.7.1'
tg_dir: "deployment/modules/cloudflare/docs" tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: "apply" tg_command: 'apply'
- name: Deploy Docs Subdomain Output - name: Deploy Docs Subdomain Output
id: docs-output id: docs-output
@@ -153,12 +153,12 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }} TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2 uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with: with:
tg_version: "0.58.12" tg_version: '0.58.12'
tofu_version: "1.7.1" tofu_version: '1.7.1'
tg_dir: "deployment/modules/cloudflare/docs" tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: "output -json" tg_command: 'output -json'
- name: Output Cleaning - name: Output Cleaning
id: clean id: clean
@@ -167,13 +167,13 @@ jobs:
echo "output=$TG_OUT" >> $GITHUB_OUTPUT echo "output=$TG_OUT" >> $GITHUB_OUTPUT
- name: Publish to Cloudflare Pages - name: Publish to Cloudflare Pages
uses: cloudflare/pages-action@v1 uses: cloudflare/pages-action@f0a1cd58cd66095dee69bfa18fa5efd1dde93bca # v1
with: with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }} apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: ${{ fromJson(steps.clean.outputs.output).pages_project_name.value }} projectName: ${{ fromJson(steps.clean.outputs.output).pages_project_name.value }}
workingDirectory: "docs" workingDirectory: 'docs'
directory: "build" directory: 'build'
branch: ${{ steps.parameters.outputs.name }} branch: ${{ steps.parameters.outputs.name }}
wranglerVersion: '3' wranglerVersion: '3'
@@ -184,7 +184,7 @@ jobs:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }} TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2 uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with: with:
tg_version: '0.58.12' tg_version: '0.58.12'
tofu_version: '1.7.1' tofu_version: '1.7.1'
@@ -192,7 +192,7 @@ jobs:
tg_command: 'apply' tg_command: 'apply'
- name: Comment - name: Comment
uses: actions-cool/maintain-one-comment@v3 uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3
if: ${{ steps.parameters.outputs.event == 'pr' }} if: ${{ steps.parameters.outputs.event == 'pr' }}
with: with:
number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }} number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }}

View File

@@ -9,24 +9,24 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Destroy Docs Subdomain - name: Destroy Docs Subdomain
env: env:
TF_VAR_prefix_name: "pr-${{ github.event.number }}" TF_VAR_prefix_name: 'pr-${{ github.event.number }}'
TF_VAR_prefix_event_type: "pr" TF_VAR_prefix_event_type: 'pr'
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }} TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
uses: gruntwork-io/terragrunt-action@v2 uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
with: with:
tg_version: "0.58.12" tg_version: '0.58.12'
tofu_version: "1.7.1" tofu_version: '1.7.1'
tg_dir: "deployment/modules/cloudflare/docs" tg_dir: 'deployment/modules/cloudflare/docs'
tg_command: "destroy -refresh=false" tg_command: 'destroy -refresh=false'
- name: Comment - name: Comment
uses: actions-cool/maintain-one-comment@v3 uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3
with: with:
number: ${{ github.event.number }} number: ${{ github.event.number }}
delete: true delete: true

View File

@@ -13,19 +13,19 @@ jobs:
steps: steps:
- name: Generate a token - name: Generate a token
id: generate-token id: generate-token
uses: actions/create-github-app-token@v1 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: 'Checkout' - name: 'Checkout'
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
ref: ${{ github.event.pull_request.head.ref }} ref: ${{ github.event.pull_request.head.ref }}
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
@@ -33,13 +33,13 @@ jobs:
run: make install-all && make format-all run: make install-all && make format-all
- name: Commit and push - name: Commit and push
uses: EndBug/add-and-commit@v9 uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
with: with:
default_author: github_actions default_author: github_actions
message: 'chore: fix formatting' message: 'chore: fix formatting'
- name: Remove label - name: Remove label
uses: actions/github-script@v7 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
if: always() if: always()
with: with:
script: | script: |
@@ -49,4 +49,3 @@ jobs:
repo: context.repo.repo, repo: context.repo.repo,
name: 'fix:formatting' name: 'fix:formatting'
}) })

View File

@@ -12,11 +12,11 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- name: Require PR to have a changelog label - name: Require PR to have a changelog label
uses: mheap/github-action-required-labels@v5 uses: mheap/github-action-required-labels@388fd6af37b34cdfe5a23b37060e763217e58b03 # v5
with: with:
mode: exactly mode: exactly
count: 1 count: 1
use_regex: true use_regex: true
labels: "changelog:.*" labels: 'changelog:.*'
add_comment: true add_comment: true
message: "Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label." message: 'Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label.'

View File

@@ -1,6 +1,6 @@
name: "Pull Request Labeler" name: 'Pull Request Labeler'
on: on:
- pull_request_target - pull_request_target
jobs: jobs:
labeler: labeler:
@@ -9,4 +9,4 @@ jobs:
pull-requests: write pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/labeler@v5 - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5

View File

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

View File

@@ -31,25 +31,25 @@ jobs:
steps: steps:
- name: Generate a token - name: Generate a token
id: generate-token id: generate-token
uses: actions/create-github-app-token@v1 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
- name: Install Poetry - name: Install uv
run: pipx install poetry uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
- name: Bump version - name: Bump version
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}" run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
- name: Commit and tag - name: Commit and tag
id: push-tag id: push-tag
uses: EndBug/add-and-commit@v9 uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
with: with:
default_author: github_actions default_author: github_actions
message: 'chore: version ${{ env.IMMICH_VERSION }}' message: 'chore: version ${{ env.IMMICH_VERSION }}'
@@ -70,23 +70,23 @@ jobs:
steps: steps:
- name: Generate a token - name: Generate a token
id: generate-token id: generate-token
uses: actions/create-github-app-token@v1 uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
with: with:
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }} app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }} private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
- name: Download APK - name: Download APK
uses: actions/download-artifact@v4 uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
with: with:
name: release-apk-signed name: release-apk-signed
- name: Create draft release - name: Create draft release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2
with: with:
draft: true draft: true
tag_name: ${{ env.IMMICH_VERSION }} tag_name: ${{ env.IMMICH_VERSION }}

View File

@@ -2,7 +2,7 @@ name: Preview label
on: on:
pull_request: pull_request:
types: [labeled] types: [labeled, closed]
jobs: jobs:
comment-status: comment-status:
@@ -11,10 +11,10 @@ jobs:
permissions: permissions:
pull-requests: write pull-requests: write
steps: steps:
- uses: mshick/add-pr-comment@v2 - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2
with: with:
message-id: "preview-status" message-id: 'preview-status'
message: "Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/" message: 'Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/'
remove-label: remove-label:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -22,7 +22,7 @@ jobs:
permissions: permissions:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/github-script@v7 - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with: with:
script: | script: |
github.rest.issues.removeLabel({ github.rest.issues.removeLabel({

View File

@@ -15,9 +15,9 @@ jobs:
run: run:
working-directory: ./open-api/typescript-sdk working-directory: ./open-api/typescript-sdk
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
# Setup .npmrc file to publish to npm # Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4 - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './open-api/typescript-sdk/.nvmrc' node-version-file: './open-api/typescript-sdk/.nvmrc'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'

View File

@@ -16,9 +16,9 @@ jobs:
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths - id: found_paths
uses: dorny/paths-filter@v3 uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with: with:
filters: | filters: |
mobile: mobile:
@@ -38,10 +38,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
@@ -50,6 +50,26 @@ jobs:
run: dart pub get run: dart pub get
working-directory: ./mobile working-directory: ./mobile
- name: Run Build Runner
run: make build
working-directory: ./mobile
- name: Find file changes
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files
with:
files: |
mobile/**/*.g.dart
mobile/**/*.gr.dart
mobile/**/*.drift.dart
- name: Verify files have not changed
if: steps.verify-changed-files.outputs.files_changed == 'true'
run: |
echo "ERROR: Generated files not up to date! Run make_build inside the mobile directory"
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
exit 1
- name: Run dart analyze - name: Run dart analyze
run: dart analyze --fatal-infos run: dart analyze --fatal-infos
working-directory: ./mobile working-directory: ./mobile
@@ -61,8 +81,3 @@ jobs:
- name: Run dart custom_lint - name: Run dart custom_lint
run: dart run custom_lint run: dart run custom_lint
working-directory: ./mobile working-directory: ./mobile
# Enable after riverpod generator migration is completed
# - name: Run dart custom lint
# run: dart run custom_lint
# working-directory: ./mobile

View File

@@ -21,11 +21,12 @@ jobs:
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_e2e_web: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run_e2e_web: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_e2e_server_cli: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.server == 'true' || steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }} should_run_e2e_server_cli: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.server == 'true' || steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }}
should_run_.github: ${{ steps.found_paths.outputs['.github'] == 'true' || steps.should_force.outputs.should_force == 'true' }} # redundant to have should_force but if someone changes the trigger then this won't have to be changed
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths - id: found_paths
uses: dorny/paths-filter@v3 uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with: with:
filters: | filters: |
web: web:
@@ -45,6 +46,8 @@ jobs:
- 'machine-learning/**' - 'machine-learning/**'
workflow: workflow:
- '.github/workflows/test.yml' - '.github/workflows/test.yml'
.github:
- '.github/**'
- name: Check if we should force jobs to run - name: Check if we should force jobs to run
id: should_force id: should_force
@@ -61,10 +64,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
@@ -98,10 +101,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
@@ -139,10 +142,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './cli/.nvmrc' node-version-file: './cli/.nvmrc'
@@ -173,10 +176,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './web/.nvmrc' node-version-file: './web/.nvmrc'
@@ -218,10 +221,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
@@ -257,10 +260,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
@@ -282,12 +285,12 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
submodules: 'recursive' submodules: 'recursive'
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
@@ -324,12 +327,12 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with: with:
submodules: 'recursive' submodules: 'recursive'
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './e2e/.nvmrc' node-version-file: './e2e/.nvmrc'
@@ -360,9 +363,9 @@ jobs:
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }} if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Flutter SDK - name: Setup Flutter SDK
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
with: with:
channel: 'stable' channel: 'stable'
flutter-version-file: ./mobile/pubspec.yaml flutter-version-file: ./mobile/pubspec.yaml
@@ -379,34 +382,60 @@ jobs:
run: run:
working-directory: ./machine-learning working-directory: ./machine-learning
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install poetry - name: Install uv
run: pipx install poetry uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
- uses: actions/setup-python@v5 - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
with: # TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
python-version: 3.11 # with:
cache: 'poetry' # python-version: 3.11
# cache: 'uv'
- name: Install dependencies - name: Install dependencies
run: | run: |
poetry install --with dev --with cpu uv sync --extra cpu
- name: Lint with ruff - name: Lint with ruff
run: | run: |
poetry run ruff check --output-format=github app export uv run ruff check --output-format=github immich_ml
- name: Check black formatting - name: Check black formatting
run: | run: |
poetry run black --check app export uv run black --check immich_ml
- name: Run mypy type checking - name: Run mypy type checking
run: | run: |
poetry run mypy --install-types --non-interactive --strict app/ uv run mypy --strict immich_ml/
- name: Run tests and coverage - name: Run tests and coverage
run: | run: |
poetry run pytest app --cov=app --cov-report term-missing uv run pytest --cov=immich_ml --cov-report term-missing
github-files-formatting:
name: .github Files Formatting
needs: pre-job
if: ${{ needs.pre-job.outputs['should_run_.github'] == 'true' }}
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./.github
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with:
node-version-file: './.github/.nvmrc'
- name: Run npm install
run: npm ci
- name: Run formatter
run: npm run format
if: ${{ !cancelled() }}
shellcheck: shellcheck:
name: ShellCheck name: ShellCheck
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Run ShellCheck - name: Run ShellCheck
uses: ludeeus/action-shellcheck@master uses: ludeeus/action-shellcheck@master
with: with:
@@ -420,10 +449,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
@@ -437,7 +466,7 @@ jobs:
run: make open-api run: make open-api
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
@@ -475,10 +504,10 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v4 uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
with: with:
node-version-file: './server/.nvmrc' node-version-file: './server/.nvmrc'
@@ -489,27 +518,27 @@ jobs:
run: npm run build run: npm run build
- name: Run existing migrations - name: Run existing migrations
run: npm run typeorm:migrations:run run: npm run migrations:run
- name: Test npm run schema:reset command works - name: Test npm run schema:reset command works
run: npm run typeorm:schema:reset run: npm run typeorm:schema:reset
- name: Generate new migrations - name: Generate new migrations
continue-on-error: true continue-on-error: true
run: npm run typeorm:migrations:generate ./src/migrations/TestMigration run: npm run migrations:generate TestMigration
- name: Find file changes - name: Find file changes
uses: tj-actions/verify-changed-files@v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-files id: verify-changed-files
with: with:
files: | files: |
server/src/migrations/ 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'
run: | run: |
echo "ERROR: Generated migration files not up to date!" echo "ERROR: Generated migration files not up to date!"
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}" echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
cat ./src/migrations/*-TestMigration.ts cat ./src/*-TestMigration.ts
exit 1 exit 1
- name: Run SQL generation - name: Run SQL generation
@@ -518,7 +547,7 @@ jobs:
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@v20 uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
id: verify-changed-sql-files id: verify-changed-sql-files
with: with:
files: | files: |

View File

@@ -11,15 +11,22 @@ jobs:
should_run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}} should_run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- id: found_paths - id: found_paths
uses: dorny/paths-filter@v3 uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
with: with:
filters: | filters: |
i18n: i18n:
- 'i18n/!(en)**\.json' - 'i18n/!(en)**\.json'
- name: Debug
run: |
echo "Should run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}"
echo "Found i18n paths: ${{ steps.found_paths.outputs.i18n }}"
echo "Head ref: ${{ github.head_ref }}"
enforce-lock: enforce-lock:
name: Check Weblate Lock name: Check Weblate Lock
needs: [pre-job]
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ needs.pre-job.outputs.should_run == 'true' }} if: ${{ needs.pre-job.outputs.should_run == 'true' }}
steps: steps:
@@ -29,7 +36,7 @@ jobs:
exit 1 exit 1
fi fi
- name: Find Pull Request - name: Find Pull Request
uses: juliangruber/find-pull-request-action@v1 uses: juliangruber/find-pull-request-action@48b6133aa6c826f267ebd33aa2d29470f9d9e7d0 # v1
id: find-pr id: find-pr
with: with:
branch: chore/translations branch: chore/translations
@@ -38,7 +45,7 @@ jobs:
run: exit 1 run: exit 1
success-check-lock: success-check-lock:
name: Weblate Lock Check Success name: Weblate Lock Check Success
needs: [ enforce-lock ] needs: [enforce-lock]
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: always() if: always()
steps: steps:

View File

@@ -39,6 +39,7 @@
], ],
"explorer.fileNesting.enabled": true, "explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": { "explorer.fileNesting.patterns": {
"*.ts": "${capture}.spec.ts,${capture}.mock.ts" "*.ts": "${capture}.spec.ts,${capture}.mock.ts",
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart"
} }
} }

View File

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

View File

@@ -61,9 +61,7 @@
## Demo ## Demo
Access the demo [here](https://demo.immich.app). The demo is running on a Free-tier Oracle VM in Amsterdam with a 2.4Ghz quad-core ARM64 CPU and 24GB RAM. Access the demo [here](https://demo.immich.app). For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoint URL`.
For the mobile app, you can use `https://demo.immich.app/api` for the `Server Endpoint URL`
### Login credentials ### Login credentials
@@ -104,7 +102,7 @@ For the mobile app, you can use `https://demo.immich.app/api` for the `Server En
| Read-only gallery | Yes | Yes | | Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes | | Stacked Photos | Yes | Yes |
| Tags | No | Yes | | Tags | No | Yes |
| Folder View | No | Yes | | Folder View | Yes | Yes |
## Translations ## Translations

View File

@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js'; import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import tsParser from '@typescript-eslint/parser'; import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals'; import globals from 'globals';
import path from 'node:path'; import path from 'node:path';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [ export default typescriptEslint.config([
eslintPluginUnicorn.configs.recommended,
eslintPluginPrettierRecommended,
js.configs.recommended,
typescriptEslint.configs.recommended,
{ {
ignores: ['eslint.config.mjs', 'dist'], ignores: ['eslint.config.mjs', 'dist'],
}, },
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{ {
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: { languageOptions: {
globals: { globals: {
...globals.node, ...globals.node,
}, },
parser: tsParser, parser: typescriptEslint.parser,
ecmaVersion: 5, ecmaVersion: 5,
sourceType: 'module', sourceType: 'module',
@@ -58,4 +48,4 @@ export default [
'object-shorthand': ['error', 'always'], 'object-shorthand': ['error', 'always'],
}, },
}, },
]; ]);

1055
cli/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.2.53", "version": "2.2.61",
"description": "Command Line Interface (CLI) for Immich", "description": "Command Line Interface (CLI) for Immich",
"type": "module", "type": "module",
"exports": "./dist/index.js", "exports": "./dist/index.js",
@@ -21,9 +21,7 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/micromatch": "^4.0.9", "@types/micromatch": "^4.0.9",
"@types/mock-fs": "^4.13.1", "@types/mock-fs": "^4.13.1",
"@types/node": "^22.13.5", "@types/node": "^22.14.0",
"@typescript-eslint/eslint-plugin": "^8.15.0",
"@typescript-eslint/parser": "^8.15.0",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"byte-size": "^9.0.0", "byte-size": "^9.0.0",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
@@ -31,12 +29,13 @@
"eslint": "^9.14.0", "eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0", "eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^56.0.1", "eslint-plugin-unicorn": "^57.0.0",
"globals": "^16.0.0", "globals": "^16.0.0",
"mock-fs": "^5.2.0", "mock-fs": "^5.2.0",
"prettier": "^3.2.5", "prettier": "^3.2.5",
"prettier-plugin-organize-imports": "^4.0.0", "prettier-plugin-organize-imports": "^4.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"typescript-eslint": "^8.28.0",
"vite": "^6.0.0", "vite": "^6.0.0",
"vite-tsconfig-paths": "^5.0.0", "vite-tsconfig-paths": "^5.0.0",
"vitest": "^3.0.0", "vitest": "^3.0.0",

View File

@@ -25,7 +25,7 @@ services:
context: ../ context: ../
dockerfile: server/Dockerfile dockerfile: server/Dockerfile
target: dev target: dev
restart: always restart: unless-stopped
volumes: volumes:
- ../server:/usr/src/app - ../server:/usr/src/app
- ../open-api:/usr/src/open-api - ../open-api:/usr/src/open-api
@@ -95,12 +95,12 @@ services:
image: immich-machine-learning-dev:latest image: immich-machine-learning-dev:latest
# extends: # extends:
# file: hwaccel.ml.yml # file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
build: build:
context: ../machine-learning context: ../machine-learning
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
ports: ports:
- 3003:3003 - 3003:3003
volumes: volumes:
@@ -116,7 +116,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8 image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1

View File

@@ -38,12 +38,12 @@ services:
image: immich-machine-learning:latest image: immich-machine-learning:latest
# extends: # extends:
# file: hwaccel.ml.yml # file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
build: build:
context: ../machine-learning context: ../machine-learning
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
ports: ports:
- 3003:3003 - 3003:3003
volumes: volumes:
@@ -56,7 +56,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8 image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
@@ -77,22 +77,12 @@ services:
- 5432:5432 - 5432:5432
healthcheck: healthcheck:
test: >- test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
echo "checksum failure count is $$Chksum";
[ "$$Chksum" = '0' ] || exit 1
interval: 5m interval: 5m
start_interval: 30s start_interval: 30s
start_period: 5m start_period: 5m
command: >- command: >-
postgres postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
-c shared_preload_libraries=vectors.so
-c 'search_path="$$user", public, vectors'
-c logging_collector=on
-c max_wal_size=2GB
-c shared_buffers=512MB
-c wal_compression=on
restart: always restart: always
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics # set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
@@ -100,7 +90,7 @@ services:
container_name: immich_prometheus container_name: immich_prometheus
ports: ports:
- 9090:9090 - 9090:9090
image: prom/prometheus@sha256:6927e0919a144aa7616fd0137d4816816d42f6b816de3af269ab065250859a62 image: prom/prometheus@sha256:502ad90314c7485892ce696cb14a99fceab9fc27af29f4b427f41bd39701a199
volumes: volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus - prometheus-data:/prometheus
@@ -109,10 +99,10 @@ services:
# add data source for http://immich-prometheus:9090 to get started # add data source for http://immich-prometheus:9090 to get started
immich-grafana: immich-grafana:
container_name: immich_grafana container_name: immich_grafana
command: ['./run.sh', '-disable-reporting'] command: [ './run.sh', '-disable-reporting' ]
ports: ports:
- 3000:3000 - 3000:3000
image: grafana/grafana:11.5.2-ubuntu@sha256:8b5858c447e06fd7a89006b562ba7bba7c4d5813600c7982374c41852adefaeb image: grafana/grafana:11.6.0-ubuntu@sha256:fd8fa48213c624e1a95122f1d93abbf1cf1cbe85fc73212c1e599dbd76c63ff8
volumes: volumes:
- grafana-data:/var/lib/grafana - grafana-data:/var/lib/grafana

View File

@@ -33,12 +33,12 @@ services:
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda # Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml # file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes: volumes:
- model-cache:/cache - model-cache:/cache
env_file: env_file:
@@ -49,7 +49,7 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8 image: docker.io/valkey/valkey:8-bookworm@sha256:42cba146593a5ea9a622002c1b7cba5da7be248650cbb64ecb9c6c33d29794b1
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
@@ -67,22 +67,12 @@ services:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck: healthcheck:
test: >- test: >-
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
echo "checksum failure count is $$Chksum";
[ "$$Chksum" = '0' ] || exit 1
interval: 5m interval: 5m
start_interval: 30s start_interval: 30s
start_period: 5m start_period: 5m
command: >- command: >-
postgres postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
-c shared_preload_libraries=vectors.so
-c 'search_path="$$user", public, vectors'
-c logging_collector=on
-c max_wal_size=2GB
-c shared_buffers=512MB
-c wal_compression=on
restart: always restart: always
volumes: volumes:

View File

@@ -2,7 +2,8 @@
# The location where your uploaded files are stored # The location where your uploaded files are stored
UPLOAD_LOCATION=./library UPLOAD_LOCATION=./library
# The location where your database files are stored
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List

View File

@@ -14,6 +14,13 @@ services:
- /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver) - /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver)
- /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required) - /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required)
rknn:
security_opt:
- systempaths=unconfined
- apparmor=unconfined
devices:
- /dev/dri:/dev/dri
cpu: {} cpu: {}
cuda: cuda:
@@ -26,6 +33,13 @@ services:
capabilities: capabilities:
- gpu - gpu
rocm:
group_add:
- video
devices:
- /dev/dri:/dev/dri
- /dev/kfd:/dev/kfd
openvino: openvino:
device_cgroup_rules: device_cgroup_rules:
- 'c 189:* rmw' - 'c 189:* rmw'

View File

@@ -117,7 +117,7 @@ See [Backup and Restore](/docs/administration/backup-and-restore.md).
### Does Immich support reading existing face tag metadata? ### Does Immich support reading existing face tag metadata?
No, it currently does not. There is an [open feature request on GitHub](https://github.com/immich-app/immich/discussions/4348). Yes, it creates new faces and persons from the imported asset metadata. For details see the [feature request #4348](https://github.com/immich-app/immich/discussions/4348) and [PR #6455](https://github.com/immich-app/immich/pull/6455).
### Does Immich support the filtering of NSFW images? ### Does Immich support the filtering of NSFW images?
@@ -262,7 +262,7 @@ No, this is not supported. Only models listed in the [Hugging Face][huggingface]
### I want to be able to search in other languages besides English. How can I do that? ### I want to be able to search in other languages besides English. How can I do that?
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-model) for instructions. You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-models) for instructions.
### Does Immich support Facial Recognition for videos? ### Does Immich support Facial Recognition for videos?

View File

@@ -30,6 +30,13 @@ As mentioned above, you should make your own backup of these together with the a
You can adjust the schedule and amount of kept backups in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup). You can adjust the schedule and amount of kept backups in the [admin settings](http://my.immich.app/admin/system-settings?isOpen=backup).
By default, Immich will keep the last 14 backups and create a new backup every day at 2:00 AM. By default, Immich will keep the last 14 backups and create a new backup every day at 2:00 AM.
#### Trigger Backup
You are able to trigger a backup in the [admin job status page](http://my.immich.app/admin/jobs-status).
Visit the page, open the "Create job" modal from the top right, select "Backup Database" and click "Confirm".
A job will run and trigger a backup, you can verify this worked correctly by checking the logs or the backup folder.
This backup will count towards the last X backups that will be kept based on your settings.
#### Restoring #### Restoring
We hope to make restoring simpler in future versions, for now you can find the backups in the `UPLOAD_LOCATION/backups` folder on your host. We hope to make restoring simpler in future versions, for now you can find the backups in the `UPLOAD_LOCATION/backups` folder on your host.
@@ -53,7 +60,7 @@ docker compose create # Create Docker containers for Immich apps witho
docker start immich_postgres # Start Postgres server docker start immich_postgres # Start Postgres server
sleep 10 # Wait for Postgres server to start up sleep 10 # Wait for Postgres server to start up
# Check the database user if you deviated from the default # Check the database user if you deviated from the default
gunzip < "/path/to/backup/dump.sql.gz" \ gunzip --stdout "/path/to/backup/dump.sql.gz" \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \ | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # Restore Backup | docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # Restore Backup
docker compose up -d # Start remainder of Immich apps docker compose up -d # Start remainder of Immich apps
@@ -76,8 +83,8 @@ docker compose create # Create Docker containers for
docker start immich_postgres # Start Postgres server docker start immich_postgres # Start Postgres server
sleep 10 # Wait for Postgres server to start up sleep 10 # Wait for Postgres server to start up
docker exec -it immich_postgres bash # Enter the Docker shell and run the following command docker exec -it immich_postgres bash # Enter the Docker shell and run the following command
# Check the database user if you deviated from the default. If your backup ends in `.gz`, replace `cat` with `gunzip` # Check the database user if you deviated from the default. If your backup ends in `.gz`, replace `cat` with `gunzip --stdout`
cat < "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME> cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
exit # Exit the Docker shell exit # Exit the Docker shell
docker compose up -d # Start remainder of Immich apps docker compose up -d # Start remainder of Immich apps
``` ```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -11,6 +11,7 @@ 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 |
| `version` | Print Immich version |
## How to run a command ## How to run a command
@@ -80,3 +81,10 @@ immich-admin list-users
} }
] ]
``` ```
Print Immich Version
```
immich-admin version
v1.129.0
```

View File

@@ -31,7 +31,7 @@ Admin can send a welcome email if the Email option is set, you can learn here ho
Admin can specify the storage quota for the user as the instance's admin; once the limit is reached, the user won't be able to upload to the instance anymore. Admin can specify the storage quota for the user as the instance's admin; once the limit is reached, the user won't be able to upload to the instance anymore.
In order to select a storage quota, click on the pencil icon and enter the storage quota in GiB. You can choose an unlimited quota using the value 0 (default). In order to select a storage quota, click on the pencil icon and enter the storage quota in GiB. You can choose an unlimited quota by leaving it empty (default).
:::tip :::tip
The system administrator can see the usage quota percentage of all users in Server Stats page. The system administrator can see the usage quota percentage of all users in Server Stats page.

View File

@@ -112,7 +112,7 @@ You begin by authenticating to your Immich server. For instance:
immich login http://192.168.1.216:2283/api HFEJ38DNSDUEG immich login http://192.168.1.216:2283/api HFEJ38DNSDUEG
``` ```
This will store your credentials in a `auth.yml` file in the configuration directory which defaults to `~/.config/`. The directory can be set with the `-d` option or the environment variable `IMMICH_CONFIG_DIR`. Please keep the file secure, either by performing the logout command after you are done, or deleting it manually. This will store your credentials in a `auth.yml` file in the configuration directory which defaults to `~/.config/immich/`. The directory can be set with the `-d` option or the environment variable `IMMICH_CONFIG_DIR`. Please keep the file secure, either by performing the logout command after you are done, or deleting it manually.
Once you are authenticated, you can upload assets to your Immich server. Once you are authenticated, you can upload assets to your Immich server.

View File

Before

Width:  |  Height:  |  Size: 4.9 MiB

After

Width:  |  Height:  |  Size: 4.9 MiB

View File

@@ -37,7 +37,7 @@ To validate that Immich can reach your external library, start a shell inside th
### Exclusion Patterns ### Exclusion Patterns
By default, all files in the import paths will be added to the library. If there are files that should not be added, exclusion patterns can be used to exclude them. Exclusion patterns are glob patterns are matched against the full file path. If a file matches an exclusion pattern, it will not be added to the library. Exclusion patterns can be added in the Scan Settings page for each library. Under the hood, Immich uses the [glob](https://www.npmjs.com/package/glob) package to match patterns, so please refer to [their documentation](https://github.com/isaacs/node-glob#glob-primer) to see what patterns are supported. By default, all files in the import paths will be added to the library. If there are files that should not be added, exclusion patterns can be used to exclude them. Exclusion patterns are glob patterns are matched against the full file path. If a file matches an exclusion pattern, it will not be added to the library. Exclusion patterns can be added in the Scan Settings page for each library.
Some basic examples: Some basic examples:
@@ -48,7 +48,11 @@ Some basic examples:
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`
:::info
Internally, Immich uses the [glob](https://www.npmjs.com/package/glob) package to process exclusion patterns, and sometimes those patterns are translated into [Postgres LIKE patterns](https://www.postgresql.org/docs/current/functions-matching.html). The intention is to support basic folder exclusions but we recommend against advanced usage since those can't reliably be translated to the Postgres syntax. Please refer to the [glob documentation](https://github.com/isaacs/node-glob#glob-primer) for a basic overview on glob patterns.
:::
### Automatic watching (EXPERIMENTAL) ### Automatic watching (EXPERIMENTAL)
@@ -91,7 +95,7 @@ The `immich-server` container will need access to the gallery. Modify your docke
+ - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro + - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro
+ - /home/user/old-pics:/mnt/media/old-pics:ro + - /home/user/old-pics:/mnt/media/old-pics:ro
+ - /mnt/media/videos:/mnt/media/videos:ro + - /mnt/media/videos:/mnt/media/videos:ro
+ - /mnt/media/videos2:/mnt/media/videos2 # the files in this folder can be deleted, as it does not end with :ro + - /mnt/media/videos2:/mnt/media/videos2 # WARNING: Immich will be able to delete the files in this folder, as it does not end with :ro
+ - "C:/Users/user_name/Desktop/my media:/mnt/media/my-media:ro" # import path in Windows system. + - "C:/Users/user_name/Desktop/my media:/mnt/media/my-media:ro" # import path in Windows system.
``` ```

View File

@@ -11,7 +11,9 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- ARM NN (Mali) - ARM NN (Mali)
- CUDA (NVIDIA GPUs with [compute capability](https://developer.nvidia.com/cuda-gpus) 5.2 or higher) - CUDA (NVIDIA GPUs with [compute capability](https://developer.nvidia.com/cuda-gpus) 5.2 or higher)
- ROCm (AMD GPUs)
- OpenVINO (Intel GPUs such as Iris Xe and Arc) - OpenVINO (Intel GPUs such as Iris Xe and Arc)
- RKNN (Rockchip)
## Limitations ## Limitations
@@ -19,6 +21,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- Only Linux and Windows (through WSL2) servers are supported. - Only Linux and Windows (through WSL2) servers are supported.
- ARM NN is only supported on devices with Mali GPUs. Other Arm devices are not supported. - ARM NN is only supported on devices with Mali GPUs. Other Arm devices are not supported.
- Some models may not be compatible with certain backends. CUDA is the most reliable. - Some models may not be compatible with certain backends. CUDA is the most reliable.
- Search latency isn't improved by ARM NN due to model compatibility issues preventing its use. However, smart search jobs do make use of ARM NN.
## Prerequisites ## Prerequisites
@@ -33,6 +36,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- The `hwaccel.ml.yml` file assumes the path to it is `/usr/lib/libmali.so`, so update accordingly if it is elsewhere - The `hwaccel.ml.yml` file assumes the path to it is `/usr/lib/libmali.so`, so update accordingly if it is elsewhere
- The `hwaccel.ml.yml` file assumes an additional file `/lib/firmware/mali_csffw.bin`, so update accordingly if your device's driver does not require this file - The `hwaccel.ml.yml` file assumes an additional file `/lib/firmware/mali_csffw.bin`, so update accordingly if your device's driver does not require this file
- Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for ARM NN specific settings - Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for ARM NN specific settings
- In particular, the `MACHINE_LEARNING_ANN_FP16_TURBO` can significantly improve performance at the cost of very slightly lower accuracy
#### CUDA #### CUDA
@@ -41,22 +45,38 @@ You do not need to redo any machine learning jobs after enabling hardware accele
- The installed driver must be >= 535 (it must support CUDA 12.2). - The installed driver must be >= 535 (it must support CUDA 12.2).
- On Linux (except for WSL2), you also need to have [NVIDIA Container Toolkit][nvct] installed. - On Linux (except for WSL2), you also need to have [NVIDIA Container Toolkit][nvct] installed.
#### ROCm
- 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.
- 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](/docs/install/environment-variables) setting).
#### OpenVINO #### OpenVINO
- Integrated GPUs are more likely to experience issues than discrete GPUs, especially for older processors or servers with low RAM. - Integrated GPUs are more likely to experience issues than discrete GPUs, especially for older processors or servers with low RAM.
- Ensure the server's kernel version is new enough to use the device for hardware accceleration. - Ensure the server's kernel version is new enough to use the device for hardware accceleration.
- Expect higher RAM usage when using OpenVINO compared to CPU processing. - Expect higher RAM usage when using OpenVINO compared to CPU processing.
#### RKNN
- You must have a supported Rockchip SoC: only RK3566, RK3568, RK3576 and RK3588 are supported at this moment.
- Make sure you have the appropriate linux kernel driver installed
- This is usually pre-installed on the device vendor's Linux images
- RKNPU driver V0.9.8 or later must be available in the host server
- You may confirm this by running `cat /sys/kernel/debug/rknpu/version` to check the version
- Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for RKNN specific settings
- In particular, setting `MACHINE_LEARNING_RKNN_THREADS` to 2 or 3 can _dramatically_ improve performance for RK3576 and RK3588 compared to the default of 1, at the expense of multiplying the amount of RAM each model uses by that amount.
## Setup ## Setup
1. If you do not already have it, download the latest [`hwaccel.ml.yml`][hw-file] file and ensure it's in the same folder as the `docker-compose.yml`. 1. If you do not already have it, download the latest [`hwaccel.ml.yml`][hw-file] file and ensure it's in the same folder as the `docker-compose.yml`.
2. In the `docker-compose.yml` under `immich-machine-learning`, uncomment the `extends` section and change `cpu` to the appropriate backend. 2. In the `docker-compose.yml` under `immich-machine-learning`, uncomment the `extends` section and change `cpu` to the appropriate backend.
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, openvino] to the `image` section's tag at the end of the line. 3. Still in `immich-machine-learning`, add one of -[armnn, cuda, rocm, openvino, rknn] to the `image` section's tag at the end of the line.
4. Redeploy the `immich-machine-learning` container with these updated settings. 4. Redeploy the `immich-machine-learning` container with these updated settings.
### Confirming Device Usage ### Confirming Device Usage
You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel and `intel_gpu_top` for Intel. You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel, `intel_gpu_top` for Intel, and `radeontop` for AMD.
You can also check the logs of the `immich-machine-learning` container. When a Smart Search or Face Detection job begins, or when you search with text in Immich, you should either see a log for `Available ORT providers` containing the relevant provider (e.g. `CUDAExecutionProvider` in the case of CUDA), or a `Loaded ANN model` log entry without errors in the case of ARM NN. You can also check the logs of the `immich-machine-learning` container. When a Smart Search or Face Detection job begins, or when you search with text in Immich, you should either see a log for `Available ORT providers` containing the relevant provider (e.g. `CUDAExecutionProvider` in the case of CUDA), or a `Loaded ANN model` log entry without errors in the case of ARM NN.
@@ -127,3 +147,12 @@ Note that you should increase job concurrencies to increase overall utilization
- If you encounter an error when a model is running, try a different model to see if the issue is model-specific. - If you encounter an error when a model is running, try a different model to see if the issue is model-specific.
- You may want to increase concurrency past the default for higher utilization. However, keep in mind that this will also increase VRAM consumption. - You may want to increase concurrency past the default for higher utilization. However, keep in mind that this will also increase VRAM consumption.
- Larger models benefit more from hardware acceleration, if you have the VRAM for them. - Larger models benefit more from hardware acceleration, if you have the VRAM for them.
- Compared to ARM NN, RKNPU has:
- Wider model support (including for search, which ARM NN does not accelerate)
- Less heat generation
- Very slightly lower accuracy (RKNPU always uses FP16, while ARM NN by default uses higher precision FP32 unless `MACHINE_LEARNING_ANN_FP16_TURBO` is enabled)
- Varying speed (tested on RK3588):
- If `MACHINE_LEARNING_RKNN_THREADS` is at the default of 1, RKNPU will have substantially lower throughput for ML jobs than ARM NN in most cases, but similar latency (such as when searching)
- If `MACHINE_LEARNING_RKNN_THREADS` is set to 3, it will be somewhat faster than ARM NN at FP32, but somewhat slower than ARM NN if `MACHINE_LEARNING_ANN_FP16_TURBO` is enabled
- When other tasks also use the GPU (like transcoding), RKNPU has a significant advantage over ARM NN as it uses the otherwise idle NPU instead of competing for GPU usage
- Lower RAM usage if `MACHINE_LEARNING_RKNN_THREADS` is at the default of 1, but significantly higher if greater than 1 (which is necessary for it to fully utilize the NPU and hence be comparable in speed to ARM NN)

File diff suppressed because it is too large Load Diff

View File

@@ -18,7 +18,7 @@ For the full list, refer to the [Immich source code](https://github.com/immich-a
| `JPEG 2000` | `.jp2` | :white_check_mark: | | | `JPEG 2000` | `.jp2` | :white_check_mark: | |
| `JPEG` | `.webp` `.jpg` `.jpe` `.insp` | :white_check_mark: | | | `JPEG` | `.webp` `.jpg` `.jpe` `.insp` | :white_check_mark: | |
| `JPEG XL` | `.jxl` | :white_check_mark: | | | `JPEG XL` | `.jxl` | :white_check_mark: | |
| `PNG` | `.webp` | :white_check_mark: | | | `PNG` | `.png` | :white_check_mark: | |
| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop | | `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop |
| `RAW` | `.raw` | :white_check_mark: | | | `RAW` | `.raw` | :white_check_mark: | |
| `RW2` | `.rw2` | :white_check_mark: | | | `RW2` | `.rw2` | :white_check_mark: | |

View File

@@ -23,12 +23,12 @@ name: immich_remote_ml
services: services:
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda # Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # extends:
# file: hwaccel.ml.yml # file: hwaccel.ml.yml
# service: # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable # service: # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes: volumes:
- model-cache:/cache - model-cache:/cache
restart: always restart: always

View File

@@ -1,3 +1,7 @@
---
sidebar_position: 100
---
# Config File # Config File
A config file can be provided as an alternative to the UI configuration. A config file can be provided as an alternative to the UI configuration.

View File

@@ -69,39 +69,7 @@ If you get an error `can't set healthcheck.start_interval as feature require Doc
## Next Steps ## Next Steps
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below. Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
### Setting up optional features
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich
### Upgrading
:::danger Read the release notes
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. Therefore, we recommend reading the release notes prior to updating and to take special care when using automated tools like [Watchtower][watchtower].
You can see versions that had breaking changes [here][breaking].
:::
If `IMMICH_VERSION` is set, it will need to be updated to the latest or desired version.
When a new version of Immich is [released][releases], the application can be upgraded and restarted with the following commands, run in the directory with the `docker-compose.yml` file:
```bash title="Upgrade and restart Immich"
docker compose pull && docker compose up -d
```
To clean up disk space, the old version's obsolete container images can be deleted with the following command:
```bash title="Clean up unused Docker images"
docker image prune
```
[compose-file]: https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml [compose-file]: https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
[env-file]: https://github.com/immich-app/immich/releases/latest/download/example.env [env-file]: https://github.com/immich-app/immich/releases/latest/download/example.env
[watchtower]: https://containrrr.dev/watchtower/
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
[container-auth]: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry
[releases]: https://github.com/immich-app/immich/releases

View File

@@ -170,6 +170,8 @@ Redis (Sentinel) URL example JSON before encoding:
| `MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION` | Set the maximum number of faces that will be processed at once by the facial recognition model | None (`1` if using OpenVINO) | machine learning | | `MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION` | Set the maximum number of faces that will be processed at once by the facial recognition model | None (`1` if using OpenVINO) | machine learning |
| `MACHINE_LEARNING_PING_TIMEOUT` | How long (ms) to wait for a PING response when checking if an ML server is available | `2000` | server | | `MACHINE_LEARNING_PING_TIMEOUT` | How long (ms) to wait for a PING response when checking if an ML server is available | `2000` | server |
| `MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIME` | How long to ignore ML servers that are offline before trying again | `30000` | server | | `MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIME` | How long to ignore ML servers that are offline before trying again | `30000` | server |
| `MACHINE_LEARNING_RKNN` | Enable RKNN hardware acceleration if supported | `True` | machine learning |
| `MACHINE_LEARNING_RKNN_THREADS` | How many threads of RKNN runtime should be spinned up while inferencing. | `1` | machine learning |
\*1: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones. \*1: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones.

View File

@@ -41,3 +41,9 @@ A list of common steps to take after installing Immich include:
## Step 7 - Setup Server Backups ## Step 7 - Setup Server Backups
<ServerBackup /> <ServerBackup />
## Setting up optional features
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich

View File

@@ -67,10 +67,4 @@ Click "**Edit Rules**" and add the following firewall rules:
## Next Steps ## Next Steps
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below. Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
### Setting up optional features
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich

View File

@@ -247,6 +247,10 @@ Some examples are: `IMMICH_VERSION`, `UPLOAD_LOCATION`, `DB_DATA_LOCATION`, `TZ`
## Updating the App ## Updating the App
:::danger
Make sure to read the general [upgrade instructions](/docs/install/upgrading.md).
:::
When updates become available, SCALE alerts and provides easy updates. When updates become available, SCALE alerts and provides easy updates.
To update the app to the latest version: To update the app to the latest version:

View File

@@ -77,7 +77,7 @@ alt="Select Plugins > Compose.Manager > Add New Stack > Label it Immich"
7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following: 7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following:
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION` - `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
- `DB_DATA_LOCATION`: Change this to use an Unraid share (preferably a cache pool, e.g. `/mnt/user/appdata`). If left at default it will try to use Unraid's `/boot/config/plugins/compose.manager/projects/[stack_name]/postgres` folder which it doesn't have permissions to, resulting in this container continuously restarting. - `DB_DATA_LOCATION`: Change this to use an Unraid share (preferably a cache pool, e.g. `/mnt/user/appdata/postgresql/data`). This uses the `appdata` share. Do also create the `postgresql` folder, by running `mkdir /mnt/user/{share_location}/postgresql/data`. If left at default it will try to use Unraid's `/boot/config/plugins/compose.manager/projects/[stack_name]/postgres` folder which it doesn't have permissions to, resulting in this container continuously restarting.
<img <img
src={require('./img/unraid05.webp').default} src={require('./img/unraid05.webp').default}
@@ -131,6 +131,10 @@ For more information on how to use the application once installed, please refer
## Updating Steps ## Updating Steps
:::danger
Make sure to read the general [upgrade instructions](/docs/install/upgrading.md).
:::
Updating is extremely easy however it's important to be aware that containers managed via the Docker Compose Manager plugin do not integrate with Unraid's native dockerman UI, the label "_update ready_" will always be present on containers installed via the Docker Compose Manager. Updating is extremely easy however it's important to be aware that containers managed via the Docker Compose Manager plugin do not integrate with Unraid's native dockerman UI, the label "_update ready_" will always be present on containers installed via the Docker Compose Manager.
<img <img

View File

@@ -0,0 +1,29 @@
---
sidebar_position: 95
---
# Upgrading
:::danger Read the release notes
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. You should read the release notes prior to updating and take special care when using automated tools like [Watchtower][watchtower].
You can see versions that had breaking changes [here][breaking].
:::
When a new version of Immich is [released][releases], you should read the release notes and account for any breaking changes noted (as mentioned above).
If you use `IMMICH_VERSION` in your `.env` file, it will need to be updated to the latest or desired version.
After that, the application can be upgraded and restarted with the following commands, run in the directory with the `docker-compose.yml` file:
```bash title="Upgrade and restart Immich"
docker compose pull && docker compose up -d
```
To clean up disk space, the old version's obsolete container images can be deleted with the following command:
```bash title="Clean up unused Docker images"
docker image prune
```
[watchtower]: https://containrrr.dev/watchtower/
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
[releases]: https://github.com/immich-app/immich/releases

View File

@@ -1,2 +1,7 @@
Now that you have imported some pictures, you should setup server backups to preserve your memories. Now that you have imported some pictures, you should setup server backups to preserve your memories.
You can do so by following our [backup guide](/docs/administration/backup-and-restore.md). You can do so by following our [backup guide](/docs/administration/backup-and-restore.md).
:::danger
Immich is still under heavy development _and_ handles very important data.
It is essential that you set up good backups, and test them.
:::

30
docs/package-lock.json generated
View File

@@ -5308,9 +5308,9 @@
} }
}, },
"node_modules/autoprefixer": { "node_modules/autoprefixer": {
"version": "10.4.20", "version": "10.4.21",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -5327,11 +5327,11 @@
], ],
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"browserslist": "^4.23.3", "browserslist": "^4.24.4",
"caniuse-lite": "^1.0.30001646", "caniuse-lite": "^1.0.30001702",
"fraction.js": "^4.3.7", "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2", "normalize-range": "^0.1.2",
"picocolors": "^1.0.1", "picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
"bin": { "bin": {
@@ -5781,9 +5781,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001695", "version": "1.0.30001706",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
"integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -15734,9 +15734,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.5.2", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
@@ -18377,9 +18377,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.7.3", "version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",

View File

@@ -1,2 +1,3 @@
export const discordPath = export const discordPath =
'M 9.1367188 3.8691406 C 9.1217187 3.8691406 9.1067969 3.8700938 9.0917969 3.8710938 C 8.9647969 3.8810937 5.9534375 4.1403594 4.0234375 5.6933594 C 3.0154375 6.6253594 1 12.073203 1 16.783203 C 1 16.866203 1.0215 16.946531 1.0625 17.019531 C 2.4535 19.462531 6.2473281 20.102859 7.1113281 20.130859 L 7.1269531 20.130859 C 7.2799531 20.130859 7.4236719 20.057594 7.5136719 19.933594 L 8.3886719 18.732422 C 6.0296719 18.122422 4.8248594 17.086391 4.7558594 17.025391 C 4.5578594 16.850391 4.5378906 16.549563 4.7128906 16.351562 C 4.8068906 16.244563 4.9383125 16.189453 5.0703125 16.189453 C 5.1823125 16.189453 5.2957188 16.228594 5.3867188 16.308594 C 5.4157187 16.334594 7.6340469 18.216797 11.998047 18.216797 C 16.370047 18.216797 18.589328 16.325641 18.611328 16.306641 C 18.702328 16.227641 18.815734 16.189453 18.927734 16.189453 C 19.059734 16.189453 19.190156 16.243562 19.285156 16.351562 C 19.459156 16.549563 19.441141 16.851391 19.244141 17.025391 C 19.174141 17.087391 17.968375 18.120469 15.609375 18.730469 L 16.484375 19.933594 C 16.574375 20.057594 16.718094 20.130859 16.871094 20.130859 L 16.886719 20.130859 C 17.751719 20.103859 21.5465 19.463531 22.9375 17.019531 C 22.9785 16.947531 23 16.866203 23 16.783203 C 23 12.073203 20.984172 6.624875 19.951172 5.671875 C 18.047172 4.140875 15.036203 3.8820937 14.908203 3.8710938 C 14.895203 3.8700938 14.880188 3.8691406 14.867188 3.8691406 C 14.681188 3.8691406 14.510594 3.9793906 14.433594 4.1503906 C 14.427594 4.1623906 14.362062 4.3138281 14.289062 4.5488281 C 15.548063 4.7608281 17.094141 5.1895937 18.494141 6.0585938 C 18.718141 6.1975938 18.787437 6.4917969 18.648438 6.7167969 C 18.558438 6.8627969 18.402188 6.9433594 18.242188 6.9433594 C 18.156188 6.9433594 18.069234 6.9200937 17.990234 6.8710938 C 15.584234 5.3800938 12.578 5.3046875 12 5.3046875 C 11.422 5.3046875 8.4157187 5.3810469 6.0117188 6.8730469 C 5.9327188 6.9210469 5.8457656 6.9433594 5.7597656 6.9433594 C 5.5997656 6.9433594 5.4425625 6.86475 5.3515625 6.71875 C 5.2115625 6.49375 5.2818594 6.1985938 5.5058594 6.0585938 C 6.9058594 5.1905937 8.4528906 4.7627812 9.7128906 4.5507812 C 9.6388906 4.3147813 9.5714062 4.1643437 9.5664062 4.1523438 C 9.4894063 3.9813438 9.3217188 3.8691406 9.1367188 3.8691406 z M 12 7.3046875 C 12.296 7.3046875 14.950594 7.3403125 16.933594 8.5703125 C 17.326594 8.8143125 17.777234 8.9453125 18.240234 8.9453125 C 18.633234 8.9453125 19.010656 8.8555 19.347656 8.6875 C 19.964656 10.2405 20.690828 12.686219 20.923828 15.199219 C 20.883828 15.143219 20.840922 15.089109 20.794922 15.037109 C 20.324922 14.498109 19.644687 14.191406 18.929688 14.191406 C 18.332687 14.191406 17.754078 14.405437 17.330078 14.773438 C 17.257078 14.832437 15.505 16.21875 12 16.21875 C 8.496 16.21875 6.7450313 14.834687 6.7070312 14.804688 C 6.2540312 14.407687 5.6742656 14.189453 5.0722656 14.189453 C 4.3612656 14.189453 3.6838438 14.494391 3.2148438 15.025391 C 3.1658438 15.080391 3.1201719 15.138266 3.0761719 15.197266 C 3.3091719 12.686266 4.0344375 10.235594 4.6484375 8.6835938 C 4.9864375 8.8525938 5.3657656 8.9433594 5.7597656 8.9433594 C 6.2217656 8.9433594 6.6724531 8.8143125 7.0644531 8.5703125 C 9.0494531 7.3393125 11.704 7.3046875 12 7.3046875 z M 8.890625 10.044922 C 7.966625 10.044922 7.2167969 10.901031 7.2167969 11.957031 C 7.2167969 13.013031 7.965625 13.869141 8.890625 13.869141 C 9.815625 13.869141 10.564453 13.013031 10.564453 11.957031 C 10.564453 10.900031 9.815625 10.044922 8.890625 10.044922 z M 15.109375 10.044922 C 14.185375 10.044922 13.435547 10.901031 13.435547 11.957031 C 13.435547 13.013031 14.184375 13.869141 15.109375 13.869141 C 16.034375 13.869141 16.783203 13.013031 16.783203 11.957031 C 16.783203 10.900031 16.033375 10.044922 15.109375 10.044922 z'; 'M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z';
export const discordViewBox = '0 0 126.644 96';

View File

@@ -4,7 +4,7 @@ import React, { useEffect, useState } from 'react';
export default function VersionSwitcher(): JSX.Element { export default function VersionSwitcher(): JSX.Element {
const [versions, setVersions] = useState([]); const [versions, setVersions] = useState([]);
const [label, setLabel] = useState('Versions'); const [activeLabel, setLabel] = useState('Versions');
const windowSize = useWindowSize(); const windowSize = useWindowSize();
@@ -48,12 +48,13 @@ export default function VersionSwitcher(): JSX.Element {
versions.length > 0 && ( versions.length > 0 && (
<DropdownNavbarItem <DropdownNavbarItem
className="version-switcher-34ab39" className="version-switcher-34ab39"
label={label} label={activeLabel}
mobile={windowSize === 'mobile'} mobile={windowSize === 'mobile'}
items={versions.map(({ label, url }) => ({ items={versions.map(({ label, url }) => ({
label, label,
to: new URL(location.pathname + location.search + location.hash, url).href, to: new URL(location.pathname + location.search + location.hash, url).href,
target: '_self', target: '_self',
className: label === activeLabel ? 'dropdown__link--active menu__link--active' : '', // workaround because React Router `<NavLink>` only supports using URL path for checking if active: https://v5.reactrouter.com/web/api/NavLink/isactive-func
}))} }))}
/> />
) )

View File

@@ -1,12 +1,10 @@
import React from 'react'; import React from 'react';
import Link from '@docusaurus/Link'; import Link from '@docusaurus/Link';
import Layout from '@theme/Layout'; import Layout from '@theme/Layout';
import { useColorMode } from '@docusaurus/theme-common'; import { discordPath, discordViewBox } from '@site/src/components/svg-paths';
import { discordPath } from '@site/src/components/svg-paths'; import ThemedImage from '@theme/ThemedImage';
import Icon from '@mdi/react'; import Icon from '@mdi/react';
function HomepageHeader() { function HomepageHeader() {
const { isDarkTheme } = useColorMode();
return ( return (
<header> <header>
<div className="top-[calc(12%)] md:top-[calc(30%)] h-screen w-full absolute -z-10"> <div className="top-[calc(12%)] md:top-[calc(30%)] h-screen w-full absolute -z-10">
@@ -14,8 +12,8 @@ function HomepageHeader() {
<div className="w-full h-[120vh] absolute left-0 top-0 backdrop-blur-3xl bg-immich-bg/40 dark:bg-transparent"></div> <div className="w-full h-[120vh] absolute left-0 top-0 backdrop-blur-3xl bg-immich-bg/40 dark:bg-transparent"></div>
</div> </div>
<section className="text-center pt-12 sm:pt-24 bg-immich-bg/50 dark:bg-immich-dark-bg/80"> <section className="text-center pt-12 sm:pt-24 bg-immich-bg/50 dark:bg-immich-dark-bg/80">
<img <ThemedImage
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'} sources={{ dark: 'img/logomark-dark.svg', light: 'img/logomark-light.svg' }}
className="h-[115px] w-[115px] mb-2 antialiased rounded-none" className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
alt="Immich logo" alt="Immich logo"
/> />
@@ -35,7 +33,6 @@ function HomepageHeader() {
sacrificing your privacy. sacrificing your privacy.
</p> </p>
</div> </div>
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 gap-4 "> <div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 gap-4 ">
<Link <Link
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-xl no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold uppercase" className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-xl no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold uppercase"
@@ -58,27 +55,27 @@ function HomepageHeader() {
Buy Merch Buy Merch
</Link> </Link>
</div> </div>
<div className="my-12 flex gap-1 font-medium place-items-center place-content-center text-immich-primary dark:text-immich-dark-primary"> <div className="my-12 flex gap-1 font-medium place-items-center place-content-center text-immich-primary dark:text-immich-dark-primary">
<Icon path={discordPath} size={1} /> <Icon
path={discordPath}
viewBox={discordViewBox} /* viewBox may show an error in your IDE but it is normal. */
size={1}
/>
<Link to="https://discord.immich.app/">Join our Discord</Link> <Link to="https://discord.immich.app/">Join our Discord</Link>
</div> </div>
<img <ThemedImage
src={isDarkTheme ? '/img/screenshot-dark.webp' : '/img/screenshot-light.webp'} sources={{ dark: '/img/screenshot-dark.webp', light: '/img/screenshot-light.webp' }}
alt="screenshots" alt="screenshots"
className="w-[95%] lg:w-[85%] xl:w-[70%] 2xl:w-[60%] " className="w-[95%] lg:w-[85%] xl:w-[70%] 2xl:w-[60%] "
/> />
<div className="mx-[25%] m-auto my-14 md:my-28"> <div className="mx-[25%] m-auto my-14 md:my-28">
<hr className="border bg-gray-500 dark:bg-gray-400" /> <hr className="border bg-gray-500 dark:bg-gray-400" />
</div> </div>
<ThemedImage
<img sources={{ dark: 'img/logomark-dark.svg', light: 'img/logomark-light.svg' }}
src={isDarkTheme ? 'img/logomark-dark.svg' : 'img/logomark-light.svg'}
className="h-[115px] w-[115px] mb-2 antialiased rounded-none" className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
alt="Immich logo" alt="Immich logo"
/> />
<div> <div>
<p className="font-bold text-2xl md:text-5xl ">Download the mobile app</p> <p className="font-bold text-2xl md:text-5xl ">Download the mobile app</p>
<p className="text-lg"> <p className="text-lg">
@@ -97,9 +94,8 @@ function HomepageHeader() {
</a> </a>
</div> </div>
</div> </div>
<ThemedImage
<img sources={{ dark: '/img/app-qr-code-dark.svg', light: '/img/app-qr-code-light.svg' }}
src={isDarkTheme ? '/img/app-qr-code-dark.svg' : '/img/app-qr-code-light.svg'}
alt="app qr code" alt="app qr code"
width={'150px'} width={'150px'}
className="shadow-lg p-3 my-8 dark:bg-immich-dark-bg " className="shadow-lg p-3 my-8 dark:bg-immich-dark-bg "

View File

@@ -1,10 +1,7 @@
import React from 'react'; import React from 'react';
import Link from '@docusaurus/Link'; import Link from '@docusaurus/Link';
import Layout from '@theme/Layout'; import Layout from '@theme/Layout';
import { useColorMode } from '@docusaurus/theme-common';
function HomepageHeader() { function HomepageHeader() {
const { isDarkTheme } = useColorMode();
return ( return (
<header> <header>
<section className="max-w-[900px] m-4 p-4 md:p-6 md:m-auto md:my-12 border border-red-400 rounded-2xl bg-slate-200 dark:bg-immich-dark-gray"> <section className="max-w-[900px] m-4 p-4 md:p-6 md:m-auto md:my-12 border border-red-400 rounded-2xl bg-slate-200 dark:bg-immich-dark-gray">

View File

@@ -1,4 +1,36 @@
[ [
{
"label": "v1.131.3",
"url": "https://v1.131.3.archive.immich.app"
},
{
"label": "v1.131.2",
"url": "https://v1.131.2.archive.immich.app"
},
{
"label": "v1.131.1",
"url": "https://v1.131.1.archive.immich.app"
},
{
"label": "v1.131.0",
"url": "https://v1.131.0.archive.immich.app"
},
{
"label": "v1.130.3",
"url": "https://v1.130.3.archive.immich.app"
},
{
"label": "v1.130.2",
"url": "https://v1.130.2.archive.immich.app"
},
{
"label": "v1.130.1",
"url": "https://v1.130.1.archive.immich.app"
},
{
"label": "v1.130.0",
"url": "https://v1.130.0.archive.immich.app"
},
{ {
"label": "v1.129.0", "label": "v1.129.0",
"url": "https://v1.129.0.archive.immich.app" "url": "https://v1.129.0.archive.immich.app"

View File

@@ -1,39 +1,29 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js'; import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import tsParser from '@typescript-eslint/parser'; import eslintPluginUnicorn from 'eslint-plugin-unicorn';
import globals from 'globals'; import globals from 'globals';
import path from 'node:path'; import path from 'node:path';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import typescriptEslint from 'typescript-eslint';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [ export default typescriptEslint.config([
eslintPluginUnicorn.configs.recommended,
eslintPluginPrettierRecommended,
js.configs.recommended,
typescriptEslint.configs.recommended,
{ {
ignores: ['eslint.config.mjs'], ignores: ['eslint.config.mjs'],
}, },
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{ {
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: { languageOptions: {
globals: { globals: {
...globals.node, ...globals.node,
}, },
parser: tsParser, parser: typescriptEslint.parser,
ecmaVersion: 5, ecmaVersion: 5,
sourceType: 'module', sourceType: 'module',
@@ -62,4 +52,4 @@ export default [
'object-shorthand': ['error', 'always'], 'object-shorthand': ['error', 'always'],
}, },
}, },
]; ]);

1557
e2e/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "immich-e2e", "name": "immich-e2e",
"version": "1.129.0", "version": "1.131.3",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",
@@ -25,19 +25,17 @@
"@immich/sdk": "file:../open-api/typescript-sdk", "@immich/sdk": "file:../open-api/typescript-sdk",
"@playwright/test": "^1.44.1", "@playwright/test": "^1.44.1",
"@types/luxon": "^3.4.2", "@types/luxon": "^3.4.2",
"@types/node": "^22.13.5", "@types/node": "^22.14.0",
"@types/oidc-provider": "^8.5.1", "@types/oidc-provider": "^8.5.1",
"@types/pg": "^8.11.0", "@types/pg": "^8.11.0",
"@types/pngjs": "^6.0.4", "@types/pngjs": "^6.0.4",
"@types/supertest": "^6.0.2", "@types/supertest": "^6.0.2",
"@typescript-eslint/eslint-plugin": "^8.15.0",
"@typescript-eslint/parser": "^8.15.0",
"@vitest/coverage-v8": "^3.0.0", "@vitest/coverage-v8": "^3.0.0",
"eslint": "^9.14.0", "eslint": "^9.14.0",
"eslint-config-prettier": "^10.0.0", "eslint-config-prettier": "^10.0.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^56.0.1", "eslint-plugin-unicorn": "^57.0.0",
"exiftool-vendored": "^28.3.1", "exiftool-vendored": "^29.3.0",
"globals": "^16.0.0", "globals": "^16.0.0",
"jose": "^5.6.3", "jose": "^5.6.3",
"luxon": "^3.4.4", "luxon": "^3.4.4",
@@ -49,6 +47,7 @@
"socket.io-client": "^4.7.4", "socket.io-client": "^4.7.4",
"supertest": "^7.0.0", "supertest": "^7.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"typescript-eslint": "^8.28.0",
"utimes": "^5.2.1", "utimes": "^5.2.1",
"vitest": "^3.0.0" "vitest": "^3.0.0"
}, },

View File

@@ -1257,6 +1257,7 @@ describe('/asset', () => {
for (const { id, status } of assets) { for (const { id, status } of assets) {
expect(status).toBe(AssetMediaStatus.Created); expect(status).toBe(AssetMediaStatus.Created);
// longer timeout as the thumbnail generation from full-size raw files can take a while
await utils.waitForWebsocketEvent({ event: 'assetUpload', id }); await utils.waitForWebsocketEvent({ event: 'assetUpload', id });
} }

View File

@@ -329,7 +329,7 @@ describe('/libraries', () => {
const library = await utils.createLibrary(admin.accessToken, { const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId, ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`], importPaths: [`${testAssetDirInternal}/temp`],
exclusionPatterns: ['**/directoryA'], exclusionPatterns: ['**/directoryA/**'],
}); });
await utils.scan(admin.accessToken, library.id); await utils.scan(admin.accessToken, library.id);
@@ -337,7 +337,82 @@ describe('/libraries', () => {
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1); expect(assets.count).toBe(1);
expect(assets.items[0].originalPath.includes('directoryB'));
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
]),
);
});
it('should scan external library with multiple exclusion patterns', async () => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`],
exclusionPatterns: ['**/directoryA/**', '**/directoryB/**'],
});
await utils.scan(admin.accessToken, library.id);
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(0);
expect(assets.items).toEqual([]);
});
it('should remove assets covered by a new exclusion pattern', async () => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp`],
});
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(2);
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining('directoryA/assetA.png') }),
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, {
exclusionPatterns: ['**/directoryA/**'],
});
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1);
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, {
exclusionPatterns: ['**/directoryA/**', '**/directoryB/**'],
});
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(0);
expect(assets.items).toEqual([]);
}
}); });
it('should scan multiple import paths', async () => { it('should scan multiple import paths', async () => {
@@ -454,6 +529,133 @@ describe('/libraries', () => {
utils.removeImageFile(`${testAssetDir}/temp/folder${char}2/asset2.png`); utils.removeImageFile(`${testAssetDir}/temp/folder${char}2/asset2.png`);
}); });
it('should respect exclusion patterns when using multiple import paths', async () => {
// https://github.com/immich-app/immich/issues/17121
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp/exclusion/`, `${testAssetDirInternal}/temp/exclusion2/`],
});
const excludedFolder = `Raw`;
utils.createImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.createImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: [`**/${excludedFolder}/**`] });
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
utils.removeImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.removeImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
});
const annoyingExclusionPatterns = ['@', '#', '$', '%', '^', '&', '='];
it.each(annoyingExclusionPatterns)('should support exclusion patterns with %s', async (char) => {
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp/exclusion/`],
});
const excludedFolder = `${char}folder`;
utils.createImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.createImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual(
expect.arrayContaining([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
]),
);
}
await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: [`**/${excludedFolder}/**`] });
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
await utils.scan(admin.accessToken, library.id);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.items).toEqual([
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
]);
}
utils.removeImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
utils.removeImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
});
it('should reimport a modified file', async () => { it('should reimport a modified file', async () => {
const library = await utils.createLibrary(admin.accessToken, { const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId, ownerId: admin.userId,
@@ -490,7 +692,7 @@ describe('/libraries', () => {
utils.removeImageFile(`${testAssetDir}/temp/reimport/asset.jpg`); utils.removeImageFile(`${testAssetDir}/temp/reimport/asset.jpg`);
}); });
it('should not reimport unmodified files', async () => { it('should not reimport a file with unchanged timestamp', async () => {
const library = await utils.createLibrary(admin.accessToken, { const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId, ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp/reimport`], importPaths: [`${testAssetDirInternal}/temp/reimport`],
@@ -933,6 +1135,8 @@ describe('/libraries', () => {
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1);
utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`); utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`);
await utils.scan(admin.accessToken, library.id); await utils.scan(admin.accessToken, library.id);
@@ -963,6 +1167,58 @@ describe('/libraries', () => {
} }
}); });
it('should set a trashed offline asset to online but keep it in trash', async () => {
utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`);
const library = await utils.createLibrary(admin.accessToken, {
ownerId: admin.userId,
importPaths: [`${testAssetDirInternal}/temp/offline`],
});
await utils.scan(admin.accessToken, library.id);
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assets.count).toBe(1);
await utils.deleteAssets(admin.accessToken, [assets.items[0].id]);
{
const trashedAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id);
expect(trashedAsset.isTrashed).toBe(true);
}
utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`);
await utils.scan(admin.accessToken, library.id);
const offlineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id);
expect(offlineAsset.isTrashed).toBe(true);
expect(offlineAsset.originalPath).toBe(`${testAssetDirInternal}/temp/offline/offline.png`);
expect(offlineAsset.isOffline).toBe(true);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, withDeleted: true });
expect(assets.count).toBe(1);
}
utils.renameImageFile(`${testAssetDir}/temp/offline.png`, `${testAssetDir}/temp/offline/offline.png`);
await utils.scan(admin.accessToken, library.id);
const backOnlineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id);
expect(backOnlineAsset.originalPath).toBe(`${testAssetDirInternal}/temp/offline/offline.png`);
expect(backOnlineAsset.isOffline).toBe(false);
expect(backOnlineAsset.isTrashed).toBe(true);
{
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, withDeleted: true });
expect(assets.count).toBe(1);
}
});
it('should not set an offline asset to online if its file exists, is not covered by an exclusion pattern, but is outside of all import paths', async () => { it('should not set an offline asset to online if its file exists, is not covered by an exclusion pattern, but is outside of all import paths', async () => {
utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`); utils.createImageFile(`${testAssetDir}/temp/offline/offline.png`);
@@ -1024,16 +1280,17 @@ describe('/libraries', () => {
await utils.scan(admin.accessToken, library.id); await utils.scan(admin.accessToken, library.id);
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id }); {
const { assets: assetsBefore } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
expect(assetsBefore.count).toBe(1);
}
utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`); utils.renameImageFile(`${testAssetDir}/temp/offline/offline.png`, `${testAssetDir}/temp/offline.png`);
await utils.scan(admin.accessToken, library.id); await utils.scan(admin.accessToken, library.id);
{ const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, withDeleted: true });
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id, withDeleted: true }); expect(assets.count).toBe(1);
expect(assets.count).toBe(1);
}
const offlineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id); const offlineAsset = await utils.getAssetInfo(admin.accessToken, assets.items[0].id);

View File

@@ -201,7 +201,7 @@ describe('/people', () => {
expect(body).toMatchObject({ expect(body).toMatchObject({
id: expect.any(String), id: expect.any(String),
name: 'New Person', name: 'New Person',
birthDate: '1990-01-01T00:00:00.000Z', birthDate: '1990-01-01',
}); });
}); });
@@ -262,7 +262,7 @@ describe('/people', () => {
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ birthDate: '1990-01-01' }); .send({ birthDate: '1990-01-01' });
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toMatchObject({ birthDate: '1990-01-01T00:00:00.000Z' }); expect(body).toMatchObject({ birthDate: '1990-01-01' });
}); });
it('should clear a date of birth', async () => { it('should clear a date of birth', async () => {

View File

@@ -633,7 +633,6 @@ describe('/search', () => {
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([ expect(body).toEqual([
'Andalusia', 'Andalusia',
'Berlin',
'Glarus', 'Glarus',
'Greater Accra', 'Greater Accra',
'Havana', 'Havana',
@@ -642,6 +641,7 @@ describe('/search', () => {
'Mississippi', 'Mississippi',
'New York', 'New York',
'Shanghai', 'Shanghai',
'State of Berlin',
'St.-Petersburg', 'St.-Petersburg',
'Tbilisi', 'Tbilisi',
'Tokyo', 'Tokyo',
@@ -657,7 +657,6 @@ describe('/search', () => {
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([ expect(body).toEqual([
'Andalusia', 'Andalusia',
'Berlin',
'Glarus', 'Glarus',
'Greater Accra', 'Greater Accra',
'Havana', 'Havana',
@@ -666,6 +665,7 @@ describe('/search', () => {
'Mississippi', 'Mississippi',
'New York', 'New York',
'Shanghai', 'Shanghai',
'State of Berlin',
'St.-Petersburg', 'St.-Petersburg',
'Tbilisi', 'Tbilisi',
'Tokyo', 'Tokyo',

View File

@@ -117,7 +117,7 @@ describe('/shared-links', () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`); const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
expect(resp.status).toBe(200); expect(resp.status).toBe(200);
expect(resp.header['content-type']).toContain('text/html'); expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).toContain(`<meta property="og:image" content="http://`); expect(resp.text).toContain(`<meta property="og:image" content="https://my.immich.app`);
}); });
}); });
@@ -246,15 +246,7 @@ describe('/shared-links', () => {
const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithMetadata.key }); const { status, body } = await request(app).get('/shared-links/me').query({ key: linkWithMetadata.key });
expect(status).toBe(200); expect(status).toBe(200);
expect(body.assets).toHaveLength(1); expect(body.assets).toHaveLength(0);
expect(body.assets[0]).toEqual(
expect.objectContaining({
originalFileName: 'example.png',
localDateTime: expect.any(String),
fileCreatedAt: expect.any(String),
exifInfo: expect.any(Object),
}),
);
expect(body.album).toBeDefined(); expect(body.album).toBeDefined();
}); });

View File

@@ -22,7 +22,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with an asterisk', test: 'should support paths with an asterisk',
paths: [`/photos\*/image1.jpg`], paths: [`/photos*/image1.jpg`],
files: { files: {
'/photos*/image1.jpg': true, '/photos*/image1.jpg': true,
'/photos*/image2.jpg': false, '/photos*/image2.jpg': false,
@@ -40,7 +40,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with a single quote', test: 'should support paths with a single quote',
paths: [`/photos\'/image1.jpg`], paths: [`/photos'/image1.jpg`],
files: { files: {
"/photos'/image1.jpg": true, "/photos'/image1.jpg": true,
"/photos'/image2.jpg": false, "/photos'/image2.jpg": false,
@@ -49,7 +49,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with a double quote', test: 'should support paths with a double quote',
paths: [`/photos\"/image1.jpg`], paths: [`/photos"/image1.jpg`],
files: { files: {
'/photos"/image1.jpg': true, '/photos"/image1.jpg': true,
'/photos"/image2.jpg': false, '/photos"/image2.jpg': false,
@@ -67,7 +67,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with an opening brace', test: 'should support paths with an opening brace',
paths: [`/photos\{/image1.jpg`], paths: [`/photos{/image1.jpg`],
files: { files: {
'/photos{/image1.jpg': true, '/photos{/image1.jpg': true,
'/photos{/image2.jpg': false, '/photos{/image2.jpg': false,
@@ -76,7 +76,7 @@ const tests: Test[] = [
}, },
{ {
test: 'should support paths with a closing brace', test: 'should support paths with a closing brace',
paths: [`/photos\}/image1.jpg`], paths: [`/photos}/image1.jpg`],
files: { files: {
'/photos}/image1.jpg': true, '/photos}/image1.jpg': true,
'/photos}/image2.jpg': false, '/photos}/image2.jpg': false,

View File

@@ -493,7 +493,7 @@ export const utils = {
value: accessToken, value: accessToken,
domain, domain,
path: '/', path: '/',
expires: 1_742_402_728, expires: 2_058_028_213,
httpOnly: true, httpOnly: true,
secure: false, secure: false,
sameSite: 'Lax', sameSite: 'Lax',
@@ -503,7 +503,7 @@ export const utils = {
value: 'password', value: 'password',
domain, domain,
path: '/', path: '/',
expires: 1_742_402_728, expires: 2_058_028_213,
httpOnly: true, httpOnly: true,
secure: false, secure: false,
sameSite: 'Lax', sameSite: 'Lax',
@@ -513,7 +513,7 @@ export const utils = {
value: 'true', value: 'true',
domain, domain,
path: '/', path: '/',
expires: 1_742_402_728, expires: 2_058_028_213,
httpOnly: false, httpOnly: false,
secure: false, secure: false,
sameSite: 'Lax', sameSite: 'Lax',
@@ -537,6 +537,7 @@ export const utils = {
}, },
waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => { waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise<void>(async (resolve, reject) => { return new Promise<void>(async (resolve, reject) => {
const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000); const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000);

View File

@@ -8,12 +8,14 @@ function imageLocator(page: Page) {
test.describe('Photo Viewer', () => { test.describe('Photo Viewer', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let asset: AssetMediaResponseDto; let asset: AssetMediaResponseDto;
let rawAsset: AssetMediaResponseDto;
test.beforeAll(async () => { test.beforeAll(async () => {
utils.initSdk(); utils.initSdk();
await utils.resetDatabase(); await utils.resetDatabase();
admin = await utils.adminSetup(); admin = await utils.adminSetup();
asset = await utils.createAsset(admin.accessToken); asset = await utils.createAsset(admin.accessToken);
rawAsset = await utils.createAsset(admin.accessToken, { assetData: { filename: 'test.arw' } });
}); });
test.beforeEach(async ({ context, page }) => { test.beforeEach(async ({ context, page }) => {
@@ -36,7 +38,7 @@ test.describe('Photo Viewer', () => {
await expect(page.getByTestId('loading-spinner')).toBeVisible(); await expect(page.getByTestId('loading-spinner')).toBeVisible();
}); });
test('loads high resolution photo when zoomed', async ({ page }) => { test('loads original photo when zoomed', async ({ page }) => {
await page.goto(`/photos/${asset.id}`); await page.goto(`/photos/${asset.id}`);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail'); await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail');
const box = await imageLocator(page).boundingBox(); const box = await imageLocator(page).boundingBox();
@@ -47,6 +49,17 @@ test.describe('Photo Viewer', () => {
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('original'); await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('original');
}); });
test('loads fullsize image when zoomed and original is web-incompatible', async ({ page }) => {
await page.goto(`/photos/${rawAsset.id}`);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail');
const box = await imageLocator(page).boundingBox();
expect(box).toBeTruthy();
const { x, y, width, height } = box!;
await page.mouse.move(x + width / 2, y + height / 2);
await page.mouse.wheel(0, -1);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('fullsize');
});
test('reloads photo when checksum changes', async ({ page }) => { test('reloads photo when checksum changes', async ({ page }) => {
await page.goto(`/photos/${asset.id}`); await page.goto(`/photos/${asset.id}`);
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail'); await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('thumbnail');

View File

@@ -45,7 +45,7 @@ test.describe('Shared Links', () => {
await page.goto(`/share/${sharedLink.key}`); await page.goto(`/share/${sharedLink.key}`);
await page.getByRole('heading', { name: 'Test Album' }).waitFor(); await page.getByRole('heading', { name: 'Test Album' }).waitFor();
await page.locator(`[data-asset-id="${asset.id}"]`).hover(); await page.locator(`[data-asset-id="${asset.id}"]`).hover();
await page.waitForSelector('#asset-group-by-date svg'); await page.waitForSelector('[data-group] svg');
await page.getByRole('checkbox').click(); await page.getByRole('checkbox').click();
await page.getByRole('button', { name: 'Download' }).click(); await page.getByRole('button', { name: 'Download' }).click();
await page.getByText('DOWNLOADING', { exact: true }).waitFor(); await page.getByText('DOWNLOADING', { exact: true }).waitFor();

View File

@@ -1,5 +1,5 @@
{ {
"about": "Verfris", "about": "Oor",
"account": "Rekening", "account": "Rekening",
"account_settings": "Rekeninginstellings", "account_settings": "Rekeninginstellings",
"acknowledge": "Erken", "acknowledge": "Erken",
@@ -56,15 +56,16 @@
"duplicate_detection_job_description": "Begin masjienleer op bates om soortgelyke beelde op te spoor. Maak staat op Smart Search", "duplicate_detection_job_description": "Begin masjienleer op bates om soortgelyke beelde op te spoor. Maak staat op Smart Search",
"exclusion_pattern_description": "Met uitsluitingspatrone kan jy lêers en vouers ignoreer wanneer jy jou biblioteek skandeer. Dit is nuttig as jy vouers het wat lêers bevat wat jy nie wil invoer nie, soos RAW-lêers.", "exclusion_pattern_description": "Met uitsluitingspatrone kan jy lêers en vouers ignoreer wanneer jy jou biblioteek skandeer. Dit is nuttig as jy vouers het wat lêers bevat wat jy nie wil invoer nie, soos RAW-lêers.",
"external_library_created_at": "Eksterne biblioteek (geskep op {date})", "external_library_created_at": "Eksterne biblioteek (geskep op {date})",
"external_library_management": "Eksterne Biblioteek-opsies", "external_library_management": "Eksterne Biblioteekbestuur",
"face_detection": "Gesigsopsporing", "face_detection": "Gesig deteksie",
"failed_job_command": "Opdrag {command} het misluk vir werk: {job}", "failed_job_command": "Opdrag {command} het misluk vir werk: {job}",
"force_delete_user_warning": "WAARSKUWING: Dit sal onmiddellik die gebruiker en alle bates verwyder. Dit kan nie ontdoen word nie en die lêers kan nie herstel word nie.", "force_delete_user_warning": "WAARSKUWING: Dit sal onmiddellik die gebruiker en alle bates verwyder. Dit kan nie ontdoen word nie en die lêers kan nie herstel word nie.",
"forcing_refresh_library_files": "Forseer herlaai van alle biblioteeklêers", "forcing_refresh_library_files": "Forseer herlaai van alle biblioteeklêers",
"image_format": "Formaat", "image_format": "Formaat",
"image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.", "image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.",
"image_prefer_embedded_preview": "Verkies ingebedde voorskou", "image_prefer_embedded_preview": "Verkies ingebedde voorskou",
"image_prefer_wide_gamut": "Verkies wye spektrum", "image_prefer_wide_gamut": "Verkies wide gamut",
"image_prefer_wide_gamut_setting_description": "Gebruik Display P3 vir kleinkiekies. Dit behou die lewendheid van beelde met wye kleurruimtes beter, maar beelde kan anders verskyn op ou apparate met 'n ou blaaierweergawe. sRGB-beelde gebruik steeds sRGB om kleurverskuiwings te voorkom.",
"image_preview_description": "Mediumgrootte prent met gestroopte metadata, wat gebruik word wanneer 'n enkele bate bekyk word en vir masjienleer", "image_preview_description": "Mediumgrootte prent met gestroopte metadata, wat gebruik word wanneer 'n enkele bate bekyk word en vir masjienleer",
"image_preview_quality_description": "Voorskou kwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan app-reaksie verminder. Die stel van 'n lae waarde kan masjienleerkwaliteit beïnvloed.", "image_preview_quality_description": "Voorskou kwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan app-reaksie verminder. Die stel van 'n lae waarde kan masjienleerkwaliteit beïnvloed.",
"image_preview_title": "Voorskou Instellings", "image_preview_title": "Voorskou Instellings",
@@ -72,7 +73,14 @@
"image_resolution": "Resolusie", "image_resolution": "Resolusie",
"image_resolution_description": "Hoër resolusies kan meer detail bewaar, maar neem langer om te enkodeer, het groter lêergroottes en kan app-reaksie verminder.", "image_resolution_description": "Hoër resolusies kan meer detail bewaar, maar neem langer om te enkodeer, het groter lêergroottes en kan app-reaksie verminder.",
"image_settings": "Prent Instellings", "image_settings": "Prent Instellings",
"image_settings_description": "Bestuur die kwaliteit en resolusie van gegenereerde beelde" "image_settings_description": "Bestuur die kwaliteit en resolusie van gegenereerde beelde",
"image_thumbnail_description": "Klein kleinkiekies sonder metadata, gebruik om groepe foto's soos die tydlyn te bekyk",
"image_thumbnail_quality_description": "Kleinkiekiekwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan die toepassing vertraag.",
"image_thumbnail_title": "Kleinkiekie-instellings",
"job_concurrency": "{job} gelyktydigheid",
"job_created": "Taak gemaak",
"job_not_concurrency_safe": "Hierdie taak kan nie gelyktydig uitgevoer word nie.",
"job_settings": "Agtergrondtaakinstellings"
}, },
"search_by_description": "Soek by beskrywing", "search_by_description": "Soek by beskrywing",
"search_by_description_example": "Stapdag in Sapa" "search_by_description_example": "Stapdag in Sapa"

View File

@@ -41,6 +41,7 @@
"backup_settings": "إعدادات النسخ الاحتياطي", "backup_settings": "إعدادات النسخ الاحتياطي",
"backup_settings_description": "إدارة إعدادات النسخ الاحتياطي لقاعدة البيانات", "backup_settings_description": "إدارة إعدادات النسخ الاحتياطي لقاعدة البيانات",
"check_all": "اختر الكل", "check_all": "اختر الكل",
"cleanup": "تنظيف",
"cleared_jobs": "تم إخلاء مهام: {job}", "cleared_jobs": "تم إخلاء مهام: {job}",
"config_set_by_file": "الإعدادات حاليًا معينة عن طريق ملف الاعدادات", "config_set_by_file": "الإعدادات حاليًا معينة عن طريق ملف الاعدادات",
"confirm_delete_library": "هل أنت متأكد أنك تريد حذف مكتبة {library}؟", "confirm_delete_library": "هل أنت متأكد أنك تريد حذف مكتبة {library}؟",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "تفعيل فحص المكتبة الدوري", "library_scanning_enable_description": "تفعيل فحص المكتبة الدوري",
"library_settings": "المكتبة الخارجية", "library_settings": "المكتبة الخارجية",
"library_settings_description": "إدارة إعدادات المكتبة الخارجية", "library_settings_description": "إدارة إعدادات المكتبة الخارجية",
"library_tasks_description": "قم بتنفيذ مهام المكتبة", "library_tasks_description": "مسح المكتبات الخارجية للعثور على الأصول الجديدة و/أو المتغيرة",
"library_watching_enable_description": "راقب المكتبات الخارجية لتتبع تغييرات الملفات", "library_watching_enable_description": "راقب المكتبات الخارجية لتتبع تغييرات الملفات",
"library_watching_settings": "مراقبة المكتبات (تجريبي)", "library_watching_settings": "مراقبة المكتبات (تجريبي)",
"library_watching_settings_description": "راقب تلقائيًا التغييرات في الملفات", "library_watching_settings_description": "راقب تلقائيًا التغييرات في الملفات",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "البحث عن الصور بشكل دلالي باستخدام تضمينات CLIP", "machine_learning_smart_search_description": "البحث عن الصور بشكل دلالي باستخدام تضمينات CLIP",
"machine_learning_smart_search_enabled": "تفعيل البحث الذكي", "machine_learning_smart_search_enabled": "تفعيل البحث الذكي",
"machine_learning_smart_search_enabled_description": "إذا تم تعطيله، فلن يتم ترميز الصور للبحث الذكي.", "machine_learning_smart_search_enabled_description": "إذا تم تعطيله، فلن يتم ترميز الصور للبحث الذكي.",
"machine_learning_url_description": "عنوان URL لخادم التعلم الآلي. إذا تم توفير أكثر من عنوان URL، فسيتم محاولة الوصول إلى كل خادم على حدة حتى يستجيب أحد الخوادم بنجاح، بالترتيب من الأول إلى الأخير.", "machine_learning_url_description": "عنوان URL لخادم التعلم الآلي. إذا تم توفير أكثر من عنوان URL واحد، سيتم محاولة الاتصال بكل خادم على حدة حتى يستجيب أحدهم بنجاح، بدءًا من الأول إلى الأخير. سيتم تجاهل الخوادم التي لا تستجيب مؤقتًا حتى تعود للعمل.",
"manage_concurrency": "إدارة التزامن", "manage_concurrency": "إدارة التزامن",
"manage_log_settings": "إدارة إعدادات السجلات", "manage_log_settings": "إدارة إعدادات السجلات",
"map_dark_style": "النمط الداكن", "map_dark_style": "النمط الداكن",
@@ -147,6 +148,8 @@
"map_settings": "الخريطة", "map_settings": "الخريطة",
"map_settings_description": "إدارة إعدادات الخريطة", "map_settings_description": "إدارة إعدادات الخريطة",
"map_style_description": "عنوان URL لسمة الخريطة style.json", "map_style_description": "عنوان URL لسمة الخريطة style.json",
"memory_cleanup_job": "تنظيف الذاكرة",
"memory_generate_job": "توليد الذاكرة",
"metadata_extraction_job": "استخراج البيانات الوصفية", "metadata_extraction_job": "استخراج البيانات الوصفية",
"metadata_extraction_job_description": "استخراج معلومات البيانات الوصفية من كل أصل، مثل إحداثيات الموقع, الوجوه والدقة", "metadata_extraction_job_description": "استخراج معلومات البيانات الوصفية من كل أصل، مثل إحداثيات الموقع, الوجوه والدقة",
"metadata_faces_import_setting": "تمكين استيراد الوجه", "metadata_faces_import_setting": "تمكين استيراد الوجه",
@@ -391,6 +394,7 @@
"allow_edits": "إسمح بالتعديل", "allow_edits": "إسمح بالتعديل",
"allow_public_user_to_download": "السماح لأي مستخدم عام بالتنزيل", "allow_public_user_to_download": "السماح لأي مستخدم عام بالتنزيل",
"allow_public_user_to_upload": "السماح للمستخدم العام بالرفع", "allow_public_user_to_upload": "السماح للمستخدم العام بالرفع",
"alt_text_qr_code": "صورة رمز الاستجابة السريعة (QR)",
"anti_clockwise": "عكس اتجاه عقارب الساعة", "anti_clockwise": "عكس اتجاه عقارب الساعة",
"api_key": "مفتاح واجهة برمجة التطبيقات", "api_key": "مفتاح واجهة برمجة التطبيقات",
"api_key_description": "سيتم عرض هذه القيمة مرة واحدة فقط. يرجى التأكد من نسخها قبل إغلاق النافذة.", "api_key_description": "سيتم عرض هذه القيمة مرة واحدة فقط. يرجى التأكد من نسخها قبل إغلاق النافذة.",
@@ -481,6 +485,7 @@
"comments_are_disabled": "التعليقات معطلة", "comments_are_disabled": "التعليقات معطلة",
"confirm": "تأكيد", "confirm": "تأكيد",
"confirm_admin_password": "تأكيد كلمة مرور المسؤول", "confirm_admin_password": "تأكيد كلمة مرور المسؤول",
"confirm_delete_face": "هل أنت متأكد من حذف وجه {name} من الأصول؟",
"confirm_delete_shared_link": "هل أنت متأكد أنك تريد حذف هذا الرابط المشترك؟", "confirm_delete_shared_link": "هل أنت متأكد أنك تريد حذف هذا الرابط المشترك؟",
"confirm_keep_this_delete_others": "سيتم حذف جميع الأصول الأخرى في المجموعة باستثناء هذا الأصل. هل أنت متأكد من أنك تريد المتابعة؟", "confirm_keep_this_delete_others": "سيتم حذف جميع الأصول الأخرى في المجموعة باستثناء هذا الأصل. هل أنت متأكد من أنك تريد المتابعة؟",
"confirm_password": "تأكيد كلمة المرور", "confirm_password": "تأكيد كلمة المرور",
@@ -533,6 +538,7 @@
"delete_album": "حذف الألبوم", "delete_album": "حذف الألبوم",
"delete_api_key_prompt": "هل أنت متأكد أنك تريد حذف مفتاح API هذا؟", "delete_api_key_prompt": "هل أنت متأكد أنك تريد حذف مفتاح API هذا؟",
"delete_duplicates_confirmation": "هل أنت متأكد أنك تريد حذف هذه التكرارات نهائيًا؟", "delete_duplicates_confirmation": "هل أنت متأكد أنك تريد حذف هذه التكرارات نهائيًا؟",
"delete_face": "حذف الوجه",
"delete_key": "حذف المفتاح", "delete_key": "حذف المفتاح",
"delete_library": "حذف المكتبة", "delete_library": "حذف المكتبة",
"delete_link": "حذف الرابط", "delete_link": "حذف الرابط",
@@ -600,6 +606,7 @@
"enabled": "مفعل", "enabled": "مفعل",
"end_date": "تاريخ الإنتهاء", "end_date": "تاريخ الإنتهاء",
"error": "خطأ", "error": "خطأ",
"error_delete_face": "حدث خطأ في حذف الوجه من الأصول",
"error_loading_image": "حدث خطأ أثناء تحميل الصورة", "error_loading_image": "حدث خطأ أثناء تحميل الصورة",
"error_title": "خطأ - حدث خللٌ ما", "error_title": "خطأ - حدث خللٌ ما",
"errors": { "errors": {
@@ -769,7 +776,7 @@
"group_country": "مجموعة البلد", "group_country": "مجموعة البلد",
"group_no": "بدون تجميع", "group_no": "بدون تجميع",
"group_owner": "تجميع حسب المالك", "group_owner": "تجميع حسب المالك",
"group_places_by": "تجميع الأماكن حسب", "group_places_by": "تجميع الأماكن حسب...",
"group_year": "تجميع حسب السنة", "group_year": "تجميع حسب السنة",
"has_quota": "محدد بحصة", "has_quota": "محدد بحصة",
"hi_user": "مرحبا {name} ({email})", "hi_user": "مرحبا {name} ({email})",
@@ -884,6 +891,7 @@
"month": "شهر", "month": "شهر",
"more": "المزيد", "more": "المزيد",
"moved_to_trash": "تم النقل إلى سلة المهملات", "moved_to_trash": "تم النقل إلى سلة المهملات",
"mute_memories": "كتم الذكريات",
"my_albums": "ألبوماتي", "my_albums": "ألبوماتي",
"name": "الاسم", "name": "الاسم",
"name_or_nickname": "الاسم أو اللقب", "name_or_nickname": "الاسم أو اللقب",
@@ -979,6 +987,7 @@
"permanently_deleted_asset": "تم حذف الأصل بشكل نهائي", "permanently_deleted_asset": "تم حذف الأصل بشكل نهائي",
"permanently_deleted_assets_count": "تم حذف {count, plural, one {# محتوى} other {# المحتويات}} نهائيًا", "permanently_deleted_assets_count": "تم حذف {count, plural, one {# محتوى} other {# المحتويات}} نهائيًا",
"person": "شخص", "person": "شخص",
"person_birthdate": "تاريخ الميلاد {التاريخ}",
"person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}", "person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}",
"photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.", "photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
"photos": "الصور", "photos": "الصور",
@@ -1070,12 +1079,16 @@
"remove_from_album": "إزالة من الألبوم", "remove_from_album": "إزالة من الألبوم",
"remove_from_favorites": "إزالة من المفضلة", "remove_from_favorites": "إزالة من المفضلة",
"remove_from_shared_link": "إزالة من الرابط المشترك", "remove_from_shared_link": "إزالة من الرابط المشترك",
"remove_memory": "إزالة الذاكرة",
"remove_photo_from_memory": "إزالة الصورة من هذه الذكرى",
"remove_url": "إزالة عنوان URL", "remove_url": "إزالة عنوان URL",
"remove_user": "إزالة المستخدم", "remove_user": "إزالة المستخدم",
"removed_api_key": "تم إزالة مفتاح API: {name}", "removed_api_key": "تم إزالة مفتاح API: {name}",
"removed_from_archive": "تمت إزالتها من الأرشيف", "removed_from_archive": "تمت إزالتها من الأرشيف",
"removed_from_favorites": "تمت الإزالة من المفضلة", "removed_from_favorites": "تمت الإزالة من المفضلة",
"removed_from_favorites_count": "{count, plural, other {أُزيلت #}} من التفضيلات", "removed_from_favorites_count": "{count, plural, other {أُزيلت #}} من التفضيلات",
"removed_memory": "الذاكرة المحذوفة",
"removed_photo_from_memory": "تم إزالة الصورة من الذاكرة",
"removed_tagged_assets": "تمت إزالة العلامة من {count, plural, one {# الأصل} other {# الأصول}}", "removed_tagged_assets": "تمت إزالة العلامة من {count, plural, one {# الأصل} other {# الأصول}}",
"rename": "إعادة تسمية", "rename": "إعادة تسمية",
"repair": "إصلاح", "repair": "إصلاح",
@@ -1084,6 +1097,7 @@
"repository": "المستودع", "repository": "المستودع",
"require_password": "يتطلب كلمة المرور", "require_password": "يتطلب كلمة المرور",
"require_user_to_change_password_on_first_login": "مطالبة المستخدم بتغيير كلمة المرور عند تسجيل الدخول لأول مرة", "require_user_to_change_password_on_first_login": "مطالبة المستخدم بتغيير كلمة المرور عند تسجيل الدخول لأول مرة",
"rescan": "إعادة المسح",
"reset": "إعادة ضبط", "reset": "إعادة ضبط",
"reset_password": "إعادة تعيين كلمة المرور", "reset_password": "إعادة تعيين كلمة المرور",
"reset_people_visibility": "إعادة ضبط ظهور الأشخاص", "reset_people_visibility": "إعادة ضبط ظهور الأشخاص",
@@ -1127,6 +1141,7 @@
"search_options": "خيارات البحث", "search_options": "خيارات البحث",
"search_people": "البحث عن الأشخاص", "search_people": "البحث عن الأشخاص",
"search_places": "البحث عن الأماكن", "search_places": "البحث عن الأماكن",
"search_rating": "البحث حسب التقييم...",
"search_settings": "إعدادات البحث", "search_settings": "إعدادات البحث",
"search_state": "البحث حسب الولاية...", "search_state": "البحث حسب الولاية...",
"search_tags": "البحث عن العلامات...", "search_tags": "البحث عن العلامات...",
@@ -1136,6 +1151,7 @@
"searching_locales": "جارٍ البحث في اللغات...", "searching_locales": "جارٍ البحث في اللغات...",
"second": "ثانية", "second": "ثانية",
"see_all_people": "عرض جميع الأشخاص", "see_all_people": "عرض جميع الأشخاص",
"select": "إختر",
"select_album_cover": "تحديد غلاف الألبوم", "select_album_cover": "تحديد غلاف الألبوم",
"select_all": "تحديد الكل", "select_all": "تحديد الكل",
"select_all_duplicates": "تحديد جميع النسخ المكررة", "select_all_duplicates": "تحديد جميع النسخ المكررة",
@@ -1250,6 +1266,7 @@
"tag_created": "تم إنشاء العلامة: {tag}", "tag_created": "تم إنشاء العلامة: {tag}",
"tag_feature_description": "تصفح الصور ومقاطع الفيديو المجمعة حسب مواضيع العلامات المنطقية", "tag_feature_description": "تصفح الصور ومقاطع الفيديو المجمعة حسب مواضيع العلامات المنطقية",
"tag_not_found_question": "لا يمكن العثور على علامة؟ <link>قم بإنشاء علامة جديدة.</link>", "tag_not_found_question": "لا يمكن العثور على علامة؟ <link>قم بإنشاء علامة جديدة.</link>",
"tag_people": "علِّم الأشخاص",
"tag_updated": "تم تحديث العلامة: {tag}", "tag_updated": "تم تحديث العلامة: {tag}",
"tagged_assets": "تم وضع علامة {count, plural, one {# asset} other {# assets}}", "tagged_assets": "تم وضع علامة {count, plural, one {# asset} other {# assets}}",
"tags": "العلامات", "tags": "العلامات",
@@ -1290,6 +1307,7 @@
"unlink_motion_video": "إلغاء ربط فيديو الحركة", "unlink_motion_video": "إلغاء ربط فيديو الحركة",
"unlink_oauth": "إلغاء ربط OAuth", "unlink_oauth": "إلغاء ربط OAuth",
"unlinked_oauth_account": "تم إلغاء ربط حساب OAuth", "unlinked_oauth_account": "تم إلغاء ربط حساب OAuth",
"unmute_memories": "تشغيل الصوت للذكريات",
"unnamed_album": "ألبوم بلا إسم", "unnamed_album": "ألبوم بلا إسم",
"unnamed_album_delete_confirmation": "هل أنت متأكد أنك تريد حذف هذا الألبوم؟", "unnamed_album_delete_confirmation": "هل أنت متأكد أنك تريد حذف هذا الألبوم؟",
"unnamed_share": "مشاركة بلا إسم", "unnamed_share": "مشاركة بلا إسم",
@@ -1343,6 +1361,7 @@
"view_all": "عرض الكل", "view_all": "عرض الكل",
"view_all_users": "عرض كافة المستخدمين", "view_all_users": "عرض كافة المستخدمين",
"view_in_timeline": "عرض في الجدول الزمني", "view_in_timeline": "عرض في الجدول الزمني",
"view_link": "عرض الرابط",
"view_links": "عرض الروابط", "view_links": "عرض الروابط",
"view_name": "عرض", "view_name": "عرض",
"view_next_asset": "عرض المحتوى التالي", "view_next_asset": "عرض المحتوى التالي",

View File

@@ -20,7 +20,7 @@
"add_partner": "Добавете партньор", "add_partner": "Добавете партньор",
"add_path": "Добави път", "add_path": "Добави път",
"add_photos": "Добавете снимки", "add_photos": "Добавете снимки",
"add_to": "Добави към...", "add_to": "Добави към",
"add_to_album": "Добави към албум", "add_to_album": "Добави към албум",
"add_to_shared_album": "Добави към споделен албум", "add_to_shared_album": "Добави към споделен албум",
"add_url": "Добави URL", "add_url": "Добави URL",
@@ -41,6 +41,7 @@
"backup_settings": "Настройка на резервни копия", "backup_settings": "Настройка на резервни копия",
"backup_settings_description": "Управление на настройките за резервно копие на базата данни", "backup_settings_description": "Управление на настройките за резервно копие на базата данни",
"check_all": "Провери всичко", "check_all": "Провери всичко",
"cleanup": "Почистване",
"cleared_jobs": "Изчистени задачи от тип: {job}", "cleared_jobs": "Изчистени задачи от тип: {job}",
"config_set_by_file": "Конфигурацията е зададена от файл", "config_set_by_file": "Конфигурацията е зададена от файл",
"confirm_delete_library": "Сигурни ли сте че искате да изтриете библиотеката - {library} ?", "confirm_delete_library": "Сигурни ли сте че искате да изтриете библиотеката - {library} ?",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "Включване на периодичното сканиране на библиотеката", "library_scanning_enable_description": "Включване на периодичното сканиране на библиотеката",
"library_settings": "Външна библиотека", "library_settings": "Външна библиотека",
"library_settings_description": "Управление на настройките за външна библиотека", "library_settings_description": "Управление на настройките за външна библиотека",
"library_tasks_description": "Извършване на задачи за библиотеката", "library_tasks_description": "Сканирайте външни библиотеки за нови и/или променени активи",
"library_watching_enable_description": "Наблюдаване за промяна на файловете във външната библиотека", "library_watching_enable_description": "Наблюдаване за промяна на файловете във външната библиотека",
"library_watching_settings": "Наблюдаване на библиотеката (ЕКСПЕРИМЕНТАЛНО)", "library_watching_settings": "Наблюдаване на библиотеката (ЕКСПЕРИМЕНТАЛНО)",
"library_watching_settings_description": "Автоматично наблюдавай за променени файлове", "library_watching_settings_description": "Автоматично наблюдавай за променени файлове",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "Семантично търсене на изображения с помощта на CLIP вграждания", "machine_learning_smart_search_description": "Семантично търсене на изображения с помощта на CLIP вграждания",
"machine_learning_smart_search_enabled": "Включване на Интелигентно Търсене", "machine_learning_smart_search_enabled": "Включване на Интелигентно Търсене",
"machine_learning_smart_search_enabled_description": "Ако е деактивирано, изображенията няма да бъдат кодирани за Интелигентно Търсене.", "machine_learning_smart_search_enabled_description": "Ако е деактивирано, изображенията няма да бъдат кодирани за Интелигентно Търсене.",
"machine_learning_url_description": "URL на сървъра за машинно обучение. Ако са предоставени повече от един URL, всеки сървър ще бъде опитан един по един, докато един не отговори успешно, в реда от първия до последния.", "machine_learning_url_description": "URL на сървъра за машинно обучение. Ако са предоставени повече от един URL, всеки сървър ще бъде опитан един по един, докато един отговори успешно, в реда от първия до последния. Сървъри, които не отговорят, ще бъдат временно игнорирани, докато не се върнат онлайн.",
"manage_concurrency": "Управление на паралелност", "manage_concurrency": "Управление на паралелност",
"manage_log_settings": "Управление на настройките на записване", "manage_log_settings": "Управление на настройките на записване",
"map_dark_style": "Тъмен стил", "map_dark_style": "Тъмен стил",
@@ -147,6 +148,8 @@
"map_settings": "Карта", "map_settings": "Карта",
"map_settings_description": "Управление на настройките на картата", "map_settings_description": "Управление на настройките на картата",
"map_style_description": "URL адрес към файл \"style.json\" за задаване на стил на картата", "map_style_description": "URL адрес към файл \"style.json\" за задаване на стил на картата",
"memory_cleanup_job": "Почистване на паметта",
"memory_generate_job": "Генериране на паметта",
"metadata_extraction_job": "Извличане на метаданни", "metadata_extraction_job": "Извличане на метаданни",
"metadata_extraction_job_description": "Извличане на метаданни от всеки от елемент, като GPS локация, лица и резолюция на файловете", "metadata_extraction_job_description": "Извличане на метаданни от всеки от елемент, като GPS локация, лица и резолюция на файловете",
"metadata_faces_import_setting": "Включи импорт на лице", "metadata_faces_import_setting": "Включи импорт на лице",
@@ -219,7 +222,7 @@
"reset_settings_to_default": "Възстановяване на настройките по подразбиране", "reset_settings_to_default": "Възстановяване на настройките по подразбиране",
"reset_settings_to_recent_saved": "Възстановяване на настройките до последните запазени настройки", "reset_settings_to_recent_saved": "Възстановяване на настройките до последните запазени настройки",
"scanning_library": "Сканиране на библиотеката", "scanning_library": "Сканиране на библиотеката",
"search_jobs": "Търсене на задачи...", "search_jobs": "Търсене на задачи",
"send_welcome_email": "Изпращане на имейл за добре дошли", "send_welcome_email": "Изпращане на имейл за добре дошли",
"server_external_domain_settings": "Външен домейн", "server_external_domain_settings": "Външен домейн",
"server_external_domain_settings_description": "Домейн за публични споделени връзки, включително http(s)://", "server_external_domain_settings_description": "Домейн за публични споделени връзки, включително http(s)://",
@@ -299,7 +302,7 @@
"transcoding_max_b_frames": "Максимални B-фрейма", "transcoding_max_b_frames": "Максимални B-фрейма",
"transcoding_max_b_frames_description": "По-високите стойности подобряват ефективността на компресията, но забавят разкодирането. Може да не е съвместим с хардуерното ускорение на по-стари устройства. 0 деактивира B-фрейма, докато -1 задава тази стойност автоматично.", "transcoding_max_b_frames_description": "По-високите стойности подобряват ефективността на компресията, но забавят разкодирането. Може да не е съвместим с хардуерното ускорение на по-стари устройства. 0 деактивира B-фрейма, докато -1 задава тази стойност автоматично.",
"transcoding_max_bitrate": "Максимален битрейт", "transcoding_max_bitrate": "Максимален битрейт",
"transcoding_max_bitrate_description": "Задаването на максимален битрейт може да направи размерите на файловете по-предвидими при незначителни разлики за качеството. При 720p типичните стойности са 2600k за VP9 или HEVC или 4500k за H.264. Деактивирано, ако е зададено на 0.", "transcoding_max_bitrate_description": "Задаването на максимален битрейт може да направи размерите на файловете по-предвидими при незначителни разлики за качеството. При 720p типичните стойности са 2600 kbit/s за VP9 или HEVC или 4500 kbit/s за H.264. Деактивирано, ако е зададено на 0.",
"transcoding_max_keyframe_interval": "Максимален интервал между ключовите кадри", "transcoding_max_keyframe_interval": "Максимален интервал между ключовите кадри",
"transcoding_max_keyframe_interval_description": "Задава максималното разстояние между ключовите кадри. По-ниските стойности влошават ефективността на компресията, но подобряват времето за търсене и могат да подобрят качеството в сцени с бързо движение. 0 задава тази стойност автоматично.", "transcoding_max_keyframe_interval_description": "Задава максималното разстояние между ключовите кадри. По-ниските стойности влошават ефективността на компресията, но подобряват времето за търсене и могат да подобрят качеството в сцени с бързо движение. 0 задава тази стойност автоматично.",
"transcoding_optimal_description": "Видеоклипове с по-висока от целевата разделителна способност или не в приетия формат", "transcoding_optimal_description": "Видеоклипове с по-висока от целевата разделителна способност или не в приетия формат",
@@ -391,6 +394,7 @@
"allow_edits": "Позволяване на редакции", "allow_edits": "Позволяване на редакции",
"allow_public_user_to_download": "Позволете на публичен потребител да може да изтегля", "allow_public_user_to_download": "Позволете на публичен потребител да може да изтегля",
"allow_public_user_to_upload": "Позволете на публичния потребител да може да качва", "allow_public_user_to_upload": "Позволете на публичния потребител да може да качва",
"alt_text_qr_code": "Изображение на QR код",
"anti_clockwise": "Обратно на часовниковата стрелка", "anti_clockwise": "Обратно на часовниковата стрелка",
"api_key": "API ключ", "api_key": "API ключ",
"api_key_description": "Тази стойност ще бъде показана само веднъж. Моля, не забравяйте да го копирате, преди да затворите прозореца.", "api_key_description": "Тази стойност ще бъде показана само веднъж. Моля, не забравяйте да го копирате, преди да затворите прозореца.",
@@ -406,17 +410,17 @@
"are_these_the_same_person": "Това едно и също лице ли е?", "are_these_the_same_person": "Това едно и също лице ли е?",
"are_you_sure_to_do_this": "Сигурни ли сте, че искате да направите това?", "are_you_sure_to_do_this": "Сигурни ли сте, че искате да направите това?",
"asset_added_to_album": "Добавено в албум", "asset_added_to_album": "Добавено в албум",
"asset_adding_to_album": "Добавяне в албум...", "asset_adding_to_album": "Добавяне в албум",
"asset_description_updated": "Описанието на елемента е обновено", "asset_description_updated": "Описанието на елемента е обновено",
"asset_filename_is_offline": "Активът {filename} е офлайн", "asset_filename_is_offline": "Активът {filename} е офлайн",
"asset_has_unassigned_faces": "Елементът има незададени лица", "asset_has_unassigned_faces": "Елементът има незададени лица",
"asset_hashing": "Хеширане...", "asset_hashing": "Хеширане",
"asset_offline": "Елементът е офлайн", "asset_offline": "Елементът е офлайн",
"asset_offline_description": "Този външен актив вече не се намира на диска. Моля, свържете се с администратора на Immich за помощ.", "asset_offline_description": "Този външен актив вече не се намира на диска. Моля, свържете се с администратора на Immich за помощ.",
"asset_skipped": "Пропуснато", "asset_skipped": "Пропуснато",
"asset_skipped_in_trash": "В кошчето", "asset_skipped_in_trash": "В кошчето",
"asset_uploaded": "Качено", "asset_uploaded": "Качено",
"asset_uploading": "Качване...", "asset_uploading": "Качване",
"assets": "Елементи", "assets": "Елементи",
"assets_added_count": "Добавено {count, plural, one {# asset} other {# assets}}", "assets_added_count": "Добавено {count, plural, one {# asset} other {# assets}}",
"assets_added_to_album_count": "Добавен(и) са {count, plural, one {# актив} other {# актива}} в албума", "assets_added_to_album_count": "Добавен(и) са {count, plural, one {# актив} other {# актива}} в албума",
@@ -481,6 +485,7 @@
"comments_are_disabled": "Коментарите са деактивирани", "comments_are_disabled": "Коментарите са деактивирани",
"confirm": "Потвърди", "confirm": "Потвърди",
"confirm_admin_password": "Потвърждаване на паролата на администратора", "confirm_admin_password": "Потвърждаване на паролата на администратора",
"confirm_delete_face": "Сигурни ли сте, че искате да изтриете лицето на {name} от актива?",
"confirm_delete_shared_link": "Сигурни ли сте, че искате да изтриете тази споделена връзка?", "confirm_delete_shared_link": "Сигурни ли сте, че искате да изтриете тази споделена връзка?",
"confirm_keep_this_delete_others": "Всички останали файлове в стека ще бъдат изтрити, с изключение на този файл. Сигурни ли сте, че искате да продължите?", "confirm_keep_this_delete_others": "Всички останали файлове в стека ще бъдат изтрити, с изключение на този файл. Сигурни ли сте, че искате да продължите?",
"confirm_password": "Потвърдете паролата", "confirm_password": "Потвърдете паролата",
@@ -533,6 +538,7 @@
"delete_album": "Изтрий албум", "delete_album": "Изтрий албум",
"delete_api_key_prompt": "Сигурни ли сте, че искате да изтриете този API ключ?", "delete_api_key_prompt": "Сигурни ли сте, че искате да изтриете този API ключ?",
"delete_duplicates_confirmation": "Сигурни ли сте, че искате да изтриете окончателно тези дубликати?", "delete_duplicates_confirmation": "Сигурни ли сте, че искате да изтриете окончателно тези дубликати?",
"delete_face": "Изтрий лице",
"delete_key": "Изтрий ключ", "delete_key": "Изтрий ключ",
"delete_library": "Изтрий библиотека", "delete_library": "Изтрий библиотека",
"delete_link": "Изтрий линк", "delete_link": "Изтрий линк",
@@ -600,6 +606,7 @@
"enabled": "Включено", "enabled": "Включено",
"end_date": "Крайна дата", "end_date": "Крайна дата",
"error": "Грешка", "error": "Грешка",
"error_delete_face": "Грешка при изтриване на лице от актива",
"error_loading_image": "Грешка при зареждане на изображението", "error_loading_image": "Грешка при зареждане на изображението",
"error_title": "Грешка - нещо се обърка", "error_title": "Грешка - нещо се обърка",
"errors": { "errors": {
@@ -766,8 +773,10 @@
"go_to_folder": "Отиди в папката", "go_to_folder": "Отиди в папката",
"go_to_search": "Преминаване към търсене", "go_to_search": "Преминаване към търсене",
"group_albums_by": "Групирай албум по...", "group_albums_by": "Групирай албум по...",
"group_country": "Групирай по държава",
"group_no": "Няма група", "group_no": "Няма група",
"group_owner": "Групиране по собственик", "group_owner": "Групиране по собственик",
"group_places_by": "Групирай места по…",
"group_year": "Групиране по година", "group_year": "Групиране по година",
"has_quota": "Лимит", "has_quota": "Лимит",
"hi_user": "Здравей, {name} {email}", "hi_user": "Здравей, {name} {email}",
@@ -800,6 +809,7 @@
"include_shared_albums": "Включване на споделени албуми", "include_shared_albums": "Включване на споделени албуми",
"include_shared_partner_assets": "Включване на споделените с партньор елементи", "include_shared_partner_assets": "Включване на споделените с партньор елементи",
"individual_share": "Индивидуално споделяне", "individual_share": "Индивидуално споделяне",
"individual_shares": "Индивидуални споделяния",
"info": "Информация", "info": "Информация",
"interval": { "interval": {
"day_at_onepm": "Всеки ден в 13:00", "day_at_onepm": "Всеки ден в 13:00",
@@ -822,6 +832,7 @@
"latest_version": "Последна версия", "latest_version": "Последна версия",
"latitude": "Ширина", "latitude": "Ширина",
"leave": "Излез", "leave": "Излез",
"lens_model": "Модел леща",
"let_others_respond": "Позволете на другите да отговорят", "let_others_respond": "Позволете на другите да отговорят",
"level": "Ниво", "level": "Ниво",
"library": "Библиотека", "library": "Библиотека",
@@ -880,6 +891,7 @@
"month": "Месец", "month": "Месец",
"more": "Още", "more": "Още",
"moved_to_trash": "Преместено в кошчето", "moved_to_trash": "Преместено в кошчето",
"mute_memories": "Изключване на звука на спомените",
"my_albums": "Мои албуми", "my_albums": "Мои албуми",
"name": "Име", "name": "Име",
"name_or_nickname": "Име или прякор", "name_or_nickname": "Име или прякор",
@@ -984,6 +996,7 @@
"pick_a_location": "Избери локация", "pick_a_location": "Избери локация",
"place": "Местоположение", "place": "Местоположение",
"places": "Местоположения", "places": "Местоположения",
"places_count": "{count, plural, one {{count, number} Място} other {{count, number} Места}}",
"play": "Възпроизвеждане", "play": "Възпроизвеждане",
"play_memories": "Възпроизвеждане на спомени", "play_memories": "Възпроизвеждане на спомени",
"play_motion_photo": "Възпроизведи Motion Photo", "play_motion_photo": "Възпроизведи Motion Photo",
@@ -1067,10 +1080,12 @@
"remove_from_shared_link": "Премахни от споделения линк", "remove_from_shared_link": "Премахни от споделения линк",
"remove_url": "Премахни URL", "remove_url": "Премахни URL",
"remove_user": "Премахни потребителя", "remove_user": "Премахни потребителя",
"removed_api_key": "Премахни API Key: {name}", "removed_api_key": "Премахат API ключ: {name}",
"removed_from_archive": "Премахни от Архива", "removed_from_archive": "Премахни от архива",
"removed_from_favorites": "Премахнато от Любими", "removed_from_favorites": "Премахнато от любими",
"removed_from_favorites_count": "{count, plural, other {Премахнати #}} от Любими", "removed_from_favorites_count": "{count, plural, other {Премахнати #}} от Любими",
"removed_memory": "Премахнат спомен",
"removed_photo_from_memory": "Премахната снимка от спомен",
"removed_tagged_assets": "Премахнат е етикетът от {count, plural, one {# елемент} other {# елемента}}", "removed_tagged_assets": "Премахнат е етикетът от {count, plural, one {# елемент} other {# елемента}}",
"rename": "Преименувай", "rename": "Преименувай",
"repair": "Поправи", "repair": "Поправи",
@@ -1079,6 +1094,7 @@
"repository": "Хранилище", "repository": "Хранилище",
"require_password": "Изискай парола", "require_password": "Изискай парола",
"require_user_to_change_password_on_first_login": "Изисквай потребителят да промени паролата си при първото влизане", "require_user_to_change_password_on_first_login": "Изисквай потребителят да промени паролата си при първото влизане",
"rescan": "Пресканиране",
"reset": "Нулиране", "reset": "Нулиране",
"reset_password": "Нулиране на паролата", "reset_password": "Нулиране на паролата",
"reset_people_visibility": "Нулиране на видимостта на хората", "reset_people_visibility": "Нулиране на видимостта на хората",
@@ -1107,18 +1123,22 @@
"search": "Търсене", "search": "Търсене",
"search_albums": "Търси албуми", "search_albums": "Търси албуми",
"search_by_context": "Търси по контекст", "search_by_context": "Търси по контекст",
"search_by_description": "Търси по описание",
"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_camera_make": "Търси производител на камерата...", "search_camera_make": "Търси производител на камерата...",
"search_camera_model": "Търси модел на камерата...", "search_camera_model": "Търси модел на камерата...",
"search_city": "Търси град...", "search_city": "Търси град...",
"search_country": "Търси държава...", "search_country": "Търси държава...",
"search_for": "Търси за",
"search_for_existing_person": "Търси съществуващ човек", "search_for_existing_person": "Търси съществуващ човек",
"search_no_people": "Няма хора", "search_no_people": "Няма хора",
"search_no_people_named": "Няма хора на име \"{name}\"", "search_no_people_named": "Няма хора на име \"{name}\"",
"search_options": "Опции за търсене", "search_options": "Опции за търсене",
"search_people": "Търсете на хора", "search_people": "Търсете на хора",
"search_places": "Търсене на места", "search_places": "Търсене на места",
"search_rating": "Търси по рейтинг…",
"search_settings": "Търсене на настройки", "search_settings": "Търсене на настройки",
"search_state": "Търсене на щат...", "search_state": "Търсене на щат...",
"search_tags": "Търсене на етикети...", "search_tags": "Търсене на етикети...",
@@ -1165,6 +1185,7 @@
"shared_from_partner": "Снимки от {partner}", "shared_from_partner": "Снимки от {partner}",
"shared_link_options": "Опции за споделена връзка", "shared_link_options": "Опции за споделена връзка",
"shared_links": "Споделени връзки", "shared_links": "Споделени връзки",
"shared_links_description": "Сподели снимки и видеа с линк",
"shared_photos_and_videos_count": "{assetCount, plural, other {# споделени снимки и видеа.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# споделени снимки и видеа.}}",
"shared_with_partner": "Споделено с {partner}", "shared_with_partner": "Споделено с {partner}",
"sharing": "Споделени", "sharing": "Споделени",
@@ -1187,6 +1208,7 @@
"show_person_options": "Показване на опции за лица", "show_person_options": "Показване на опции за лица",
"show_progress_bar": "Показване на прогрес бара", "show_progress_bar": "Показване на прогрес бара",
"show_search_options": "Показване на опциите за търсене", "show_search_options": "Показване на опциите за търсене",
"show_shared_links": "Покажи споделени линкове",
"show_slideshow_transition": "Покажи прехода на слайдшоуто", "show_slideshow_transition": "Покажи прехода на слайдшоуто",
"show_supporter_badge": "Значка поддръжник", "show_supporter_badge": "Значка поддръжник",
"show_supporter_badge_description": "Покажи значка поддръжник", "show_supporter_badge_description": "Покажи значка поддръжник",
@@ -1240,6 +1262,7 @@
"tag_created": "Създаден етикет: {tag}", "tag_created": "Създаден етикет: {tag}",
"tag_feature_description": "Разглеждане на снимки и видеоклипове, групирани по теми с логически тагове", "tag_feature_description": "Разглеждане на снимки и видеоклипове, групирани по теми с логически тагове",
"tag_not_found_question": "Не можете да намерите етикет? Създайте такъв <link>тук</link>", "tag_not_found_question": "Не можете да намерите етикет? Създайте такъв <link>тук</link>",
"tag_people": "Отбележи Хора",
"tag_updated": "Актуализиран етикет: {tag}", "tag_updated": "Актуализиран етикет: {tag}",
"tagged_assets": "Тагнати {count, plural, one {# елемент} other {# елементи}}", "tagged_assets": "Тагнати {count, plural, one {# елемент} other {# елементи}}",
"tags": "Етикет", "tags": "Етикет",
@@ -1274,11 +1297,13 @@
"unfavorite": "Премахване от любимите", "unfavorite": "Премахване от любимите",
"unhide_person": "Покажи отново човека", "unhide_person": "Покажи отново човека",
"unknown": "Неизвестно", "unknown": "Неизвестно",
"unknown_country": "Непозната Държава",
"unknown_year": "Неизвестна година", "unknown_year": "Неизвестна година",
"unlimited": "Неограничено", "unlimited": "Неограничено",
"unlink_motion_video": "Премахни връзката с видео", "unlink_motion_video": "Премахни връзката с видео",
"unlink_oauth": "Премахни OAuth", "unlink_oauth": "Премахни OAuth",
"unlinked_oauth_account": "Премахни OAuth акаунт", "unlinked_oauth_account": "Премахни OAuth акаунт",
"unmute_memories": "Включване на звука на спомените",
"unnamed_album": "Албум без име", "unnamed_album": "Албум без име",
"unnamed_album_delete_confirmation": "Сигурни ли сте, че искате да изтриете този албум?", "unnamed_album_delete_confirmation": "Сигурни ли сте, че искате да изтриете този албум?",
"unnamed_share": "Споделяне без име", "unnamed_share": "Споделяне без име",
@@ -1332,6 +1357,7 @@
"view_all": "Преглед на всички", "view_all": "Преглед на всички",
"view_all_users": "Преглед на всички потребители", "view_all_users": "Преглед на всички потребители",
"view_in_timeline": "Покажи във времева линия", "view_in_timeline": "Покажи във времева линия",
"view_link": "Преглед на връзката",
"view_links": "Преглед на връзките", "view_links": "Преглед на връзките",
"view_name": "Прегледай", "view_name": "Прегледай",
"view_next_asset": "Преглед на следващия файл", "view_next_asset": "Преглед на следващия файл",

View File

@@ -1,20 +1,22 @@
{ {
"account": "", "about": "abaot",
"account_settings": "", "account": "Akaont",
"acknowledge": "", "account_settings": "Seting blo Akaont",
"acknowledge": "Akcept",
"action": "", "action": "",
"actions": "", "actions": "",
"active": "", "active": "Stap Mekem",
"activity": "", "activity": "Wanem hemi Mekem",
"add": "", "activity_changed": "WAnem hemi Mekem hemi",
"add_a_description": "", "add": "Ad",
"add_a_location": "", "add_a_description": "Putem Description blo hem",
"add_a_name": "", "add_a_location": "Putem place blo hem",
"add_a_title": "", "add_a_name": "Putem nam blo hem",
"add_exclusion_pattern": "", "add_a_title": "Putem wan name blo hem",
"add_import_path": "", "add_exclusion_pattern": "Putem wan paten wae hemi karem aot",
"add_location": "", "add_import_path": "Putem wan pat blo import",
"add_more_users": "", "add_location": "Putem wan place blo hem",
"add_more_users": "Putem mor man",
"add_partner": "", "add_partner": "",
"add_path": "", "add_path": "",
"add_photos": "", "add_photos": "",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Ajustes de les còpies de seguretat", "backup_settings": "Ajustes de les còpies de seguretat",
"backup_settings_description": "Gestionar la configuració de la còpia de seguretat de la base de dades", "backup_settings_description": "Gestionar la configuració de la còpia de seguretat de la base de dades",
"check_all": "Marca-ho tot", "check_all": "Marca-ho tot",
"cleanup": "Neteja",
"cleared_jobs": "Tasques esborrades per a: {job}", "cleared_jobs": "Tasques esborrades per a: {job}",
"config_set_by_file": "La configuració està definida per un fitxer de configuració", "config_set_by_file": "La configuració està definida per un fitxer de configuració",
"confirm_delete_library": "Esteu segurs que voleu eliminar la llibreria {library}?", "confirm_delete_library": "Esteu segurs que voleu eliminar la llibreria {library}?",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "Habilita l'escaneig periòdic de biblioteques", "library_scanning_enable_description": "Habilita l'escaneig periòdic de biblioteques",
"library_settings": "Llibreria externes", "library_settings": "Llibreria externes",
"library_settings_description": "Gestiona la configuració de les llibreries externes", "library_settings_description": "Gestiona la configuració de les llibreries externes",
"library_tasks_description": "Realitza tasques de la bilbioteca", "library_tasks_description": "Escaneja biblioteques externes per arxius nous o canviats",
"library_watching_enable_description": "Consultar llibreries externes per detectar canvis en fitxers", "library_watching_enable_description": "Consultar llibreries externes per detectar canvis en fitxers",
"library_watching_settings": "Monitoratge de la llibreria (EXPERIMENTAL)", "library_watching_settings": "Monitoratge de la llibreria (EXPERIMENTAL)",
"library_watching_settings_description": "Monitorització automàtica de fitxers modificats", "library_watching_settings_description": "Monitorització automàtica de fitxers modificats",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "Cerca imatges semànticament emprant incrustacions CLIP", "machine_learning_smart_search_description": "Cerca imatges semànticament emprant incrustacions CLIP",
"machine_learning_smart_search_enabled": "Activa la cerca intel·ligent", "machine_learning_smart_search_enabled": "Activa la cerca intel·ligent",
"machine_learning_smart_search_enabled_description": "Si està deshabilitat les imatges no es codificaran per la cerca intel·ligent.", "machine_learning_smart_search_enabled_description": "Si està deshabilitat les imatges no es codificaran per la cerca intel·ligent.",
"machine_learning_url_description": "La URL del servidor d'aprenentatge automàtic. Si es proporciona més d'una URL, s'intentarà accedir a cada servidor en ordre fins que un d'ells respongui correctament.", "machine_learning_url_description": "L'URL del servidor d'aprenentatge automàtic. Si es proporciona més d'un URL, s'intentarà accedir a cada servidor en ordre fins que un d'ells respongui correctament.",
"manage_concurrency": "Gestiona la concurrència", "manage_concurrency": "Gestiona la concurrència",
"manage_log_settings": "Gestiona la configuració del registre", "manage_log_settings": "Gestiona la configuració del registre",
"map_dark_style": "Tema fosc", "map_dark_style": "Tema fosc",
@@ -147,6 +148,8 @@
"map_settings": "Mapa", "map_settings": "Mapa",
"map_settings_description": "Gestiona la configuració del mapa", "map_settings_description": "Gestiona la configuració del mapa",
"map_style_description": "URL a un tema del mapa style.json", "map_style_description": "URL a un tema del mapa style.json",
"memory_cleanup_job": "Neteja de memòries",
"memory_generate_job": "Generació de memòries",
"metadata_extraction_job": "Extreure metadades", "metadata_extraction_job": "Extreure metadades",
"metadata_extraction_job_description": "Extreu la informació de metadades de cada element, com per exemple el GPS i la resolució", "metadata_extraction_job_description": "Extreu la informació de metadades de cada element, com per exemple el GPS i la resolució",
"metadata_faces_import_setting": "Activar la importació de cares", "metadata_faces_import_setting": "Activar la importació de cares",
@@ -240,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "Activa la verificació de hash. No la desactiveu a menys que estigueu segurs de les implicacions", "storage_template_hash_verification_enabled_description": "Activa la verificació de hash. No la desactiveu a menys que estigueu segurs de les implicacions",
"storage_template_migration": "Migració de plantilles d'emmagatzematge", "storage_template_migration": "Migració de plantilles d'emmagatzematge",
"storage_template_migration_description": "Aplica la <link>{template}</link> actual als elements pujats prèviament", "storage_template_migration_description": "Aplica la <link>{template}</link> actual als elements pujats prèviament",
"storage_template_migration_info": "Els canvis de plantilla només s'aplicaran a nous elements. Per aplicar la plantilla rectroactivament a elements pujats prèviament, executeu la <link>{job}</link>.", "storage_template_migration_info": "Les extensions es convertiran a minúscules. Els canvis de plantilla només s'aplicaran a nous elements. Per aplicar la plantilla rectroactivament a elements pujats prèviament, executeu la <link>{job}</link>.",
"storage_template_migration_job": "Tasca de migració de la plantilla d'emmagatzematge", "storage_template_migration_job": "Tasca de migració de la plantilla d'emmagatzematge",
"storage_template_more_details": "Per obtenir més detalls sobre aquesta funció, consulteu la <template-link>Storage Template</template-link> i les seves <implications-link>implications</implications-link>", "storage_template_more_details": "Per obtenir més detalls sobre aquesta funció, consulteu la <template-link>Storage Template</template-link> i les seves <implications-link>implications</implications-link>",
"storage_template_onboarding_description": "Quan està activada, aquesta funció organitzarà automàticament els fitxers en funció d'una plantilla definida per l'usuari. A causa de problemes d'estabilitat, la funció s'ha desactivat de manera predeterminada. Per obtenir més informació, consulteu la <link>documentation</link>.", "storage_template_onboarding_description": "Quan està activada, aquesta funció organitzarà automàticament els fitxers en funció d'una plantilla definida per l'usuari. A causa de problemes d'estabilitat, la funció s'ha desactivat de manera predeterminada. Per obtenir més informació, consulteu la <link>documentation</link>.",
@@ -299,7 +302,7 @@
"transcoding_max_b_frames": "Nombre màxim de B-frames", "transcoding_max_b_frames": "Nombre màxim de B-frames",
"transcoding_max_b_frames_description": "Els valors més alts milloren l'eficiència de la compressió, però alenteixen la codificació. És possible que no sigui compatible amb l'acceleració de maquinari en dispositius antics. 0 desactiva els B-frames, mentre que -1 estableix aquest valor automàticament.", "transcoding_max_b_frames_description": "Els valors més alts milloren l'eficiència de la compressió, però alenteixen la codificació. És possible que no sigui compatible amb l'acceleració de maquinari en dispositius antics. 0 desactiva els B-frames, mentre que -1 estableix aquest valor automàticament.",
"transcoding_max_bitrate": "Taxa de bits màxima", "transcoding_max_bitrate": "Taxa de bits màxima",
"transcoding_max_bitrate_description": "Establir una taxa de bits màxima pot fer que les mides dels fitxers siguin més previsibles amb un cost menor per a la qualitat. A 720p, els valors típics són 2600k per a VP9 o HEVC, o 4500k per a H.264. Desactivat si s'estableix a 0.", "transcoding_max_bitrate_description": "Establir una taxa de bits màxima pot fer que les mides dels fitxers siguin més previsibles amb un cost menor per a la qualitat. A 720p, els valors típics són 2600 kbit/s per a VP9 o HEVC, o 4500 kbit/s per a H.264. Desactivat si s'estableix a 0.",
"transcoding_max_keyframe_interval": "Interval màxim de fotogrames clau", "transcoding_max_keyframe_interval": "Interval màxim de fotogrames clau",
"transcoding_max_keyframe_interval_description": "Estableix la distància màxima entre fotogrames clau. Els valors més baixos empitjoren l'eficiència de la compressió, però milloren els temps de cerca i poden millorar la qualitat en escenes amb moviment ràpid. 0 estableix aquest valor automàticament.", "transcoding_max_keyframe_interval_description": "Estableix la distància màxima entre fotogrames clau. Els valors més baixos empitjoren l'eficiència de la compressió, però milloren els temps de cerca i poden millorar la qualitat en escenes amb moviment ràpid. 0 estableix aquest valor automàticament.",
"transcoding_optimal_description": "Vídeos superiors a la resolució objectiu o que no tenen un format acceptat", "transcoding_optimal_description": "Vídeos superiors a la resolució objectiu o que no tenen un format acceptat",
@@ -391,6 +394,7 @@
"allow_edits": "Permet editar", "allow_edits": "Permet editar",
"allow_public_user_to_download": "Permet que l'usuari públic pugui descarregar", "allow_public_user_to_download": "Permet que l'usuari públic pugui descarregar",
"allow_public_user_to_upload": "Permet que l'usuari públic pugui carregar", "allow_public_user_to_upload": "Permet que l'usuari públic pugui carregar",
"alt_text_qr_code": "Codi QR",
"anti_clockwise": "En sentit antihorari", "anti_clockwise": "En sentit antihorari",
"api_key": "Clau API", "api_key": "Clau API",
"api_key_description": "Aquest valor només es mostrarà una vegada. Assegureu-vos de copiar-lo abans de tancar la finestra.", "api_key_description": "Aquest valor només es mostrarà una vegada. Assegureu-vos de copiar-lo abans de tancar la finestra.",
@@ -410,7 +414,7 @@
"asset_description_updated": "La descripció del recurs s'ha actualitzat", "asset_description_updated": "La descripció del recurs s'ha actualitzat",
"asset_filename_is_offline": "L'element {filename} està fora de línia", "asset_filename_is_offline": "L'element {filename} està fora de línia",
"asset_has_unassigned_faces": "L'element té cares no assignades", "asset_has_unassigned_faces": "L'element té cares no assignades",
"asset_hashing": "Hashing…", "asset_hashing": "Hasheant…",
"asset_offline": "Element fora de línia", "asset_offline": "Element fora de línia",
"asset_offline_description": "Aquest recurs extern ja no es troba al disc. Poseu-vos en contacte amb el vostre administrador d'Immich per obtenir ajuda.", "asset_offline_description": "Aquest recurs extern ja no es troba al disc. Poseu-vos en contacte amb el vostre administrador d'Immich per obtenir ajuda.",
"asset_skipped": "Saltat", "asset_skipped": "Saltat",
@@ -464,7 +468,7 @@
"check_logs": "Comprovar els registres", "check_logs": "Comprovar els registres",
"choose_matching_people_to_merge": "Trieu les persones que coincideixin per combinar-les", "choose_matching_people_to_merge": "Trieu les persones que coincideixin per combinar-les",
"city": "Ciutat", "city": "Ciutat",
"clear": "Neteja", "clear": "Buida",
"clear_all": "Neteja-ho tot", "clear_all": "Neteja-ho tot",
"clear_all_recent_searches": "Esborra totes les cerques recents", "clear_all_recent_searches": "Esborra totes les cerques recents",
"clear_message": "Neteja el missatge", "clear_message": "Neteja el missatge",
@@ -481,6 +485,7 @@
"comments_are_disabled": "Els comentaris estan desactivats", "comments_are_disabled": "Els comentaris estan desactivats",
"confirm": "Confirmar", "confirm": "Confirmar",
"confirm_admin_password": "Confirmeu la contrasenya d'administrador", "confirm_admin_password": "Confirmeu la contrasenya d'administrador",
"confirm_delete_face": "Estàs segur que vols eliminar la cara de {name} de les cares reconegudes?",
"confirm_delete_shared_link": "Esteu segurs que voleu eliminar aquest enllaç compartit?", "confirm_delete_shared_link": "Esteu segurs que voleu eliminar aquest enllaç compartit?",
"confirm_keep_this_delete_others": "Excepte aquest element, tots els altres de la pila se suprimiran. Esteu segur que voleu continuar?", "confirm_keep_this_delete_others": "Excepte aquest element, tots els altres de la pila se suprimiran. Esteu segur que voleu continuar?",
"confirm_password": "Confirmació de contrasenya", "confirm_password": "Confirmació de contrasenya",
@@ -533,6 +538,7 @@
"delete_album": "Esborra l'àlbum", "delete_album": "Esborra l'àlbum",
"delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?", "delete_api_key_prompt": "Esteu segurs que voleu eliminar aquesta clau API?",
"delete_duplicates_confirmation": "Esteu segurs que voleu eliminar aquests duplicats permanentment?", "delete_duplicates_confirmation": "Esteu segurs que voleu eliminar aquests duplicats permanentment?",
"delete_face": "Esborrar cara",
"delete_key": "Suprimeix la clau", "delete_key": "Suprimeix la clau",
"delete_library": "Suprimeix la Llibreria", "delete_library": "Suprimeix la Llibreria",
"delete_link": "Esborra l'enllaç", "delete_link": "Esborra l'enllaç",
@@ -600,6 +606,7 @@
"enabled": "Activat", "enabled": "Activat",
"end_date": "Data final", "end_date": "Data final",
"error": "Error", "error": "Error",
"error_delete_face": "Error esborrant cara de les cares reconegudes",
"error_loading_image": "Error carregant la imatge", "error_loading_image": "Error carregant la imatge",
"error_title": "Error - Quelcom ha anat malament", "error_title": "Error - Quelcom ha anat malament",
"errors": { "errors": {
@@ -766,8 +773,10 @@
"go_to_folder": "Anar al directori", "go_to_folder": "Anar al directori",
"go_to_search": "Vés a cercar", "go_to_search": "Vés a cercar",
"group_albums_by": "Agrupa àlbums per...", "group_albums_by": "Agrupa àlbums per...",
"group_country": "Agrupar per país",
"group_no": "Cap agrupació", "group_no": "Cap agrupació",
"group_owner": "Agrupar per propietari", "group_owner": "Agrupar per propietari",
"group_places_by": "Agrupar llocs per...",
"group_year": "Agrupar per any", "group_year": "Agrupar per any",
"has_quota": "Quota", "has_quota": "Quota",
"hi_user": "Hola {name} ({email})", "hi_user": "Hola {name} ({email})",
@@ -800,6 +809,7 @@
"include_shared_albums": "Inclou àlbums compartits", "include_shared_albums": "Inclou àlbums compartits",
"include_shared_partner_assets": "Incloure elements dels companys", "include_shared_partner_assets": "Incloure elements dels companys",
"individual_share": "Compartit individualment", "individual_share": "Compartit individualment",
"individual_shares": "Espais individuals",
"info": "Informació", "info": "Informació",
"interval": { "interval": {
"day_at_onepm": "Cada dia a les 13h", "day_at_onepm": "Cada dia a les 13h",
@@ -881,6 +891,7 @@
"month": "Mes", "month": "Mes",
"more": "Més", "more": "Més",
"moved_to_trash": "S'ha mogut a la paperera", "moved_to_trash": "S'ha mogut a la paperera",
"mute_memories": "Silenciar records",
"my_albums": "Els meus àlbums", "my_albums": "Els meus àlbums",
"name": "Nom", "name": "Nom",
"name_or_nickname": "Nom o sobrenom", "name_or_nickname": "Nom o sobrenom",
@@ -985,6 +996,7 @@
"pick_a_location": "Triar una ubicació", "pick_a_location": "Triar una ubicació",
"place": "Lloc", "place": "Lloc",
"places": "Llocs", "places": "Llocs",
"places_count": "{count, plural, one {{count, number} Lloc} other {{count, number} Llocs}}",
"play": "Reprodueix", "play": "Reprodueix",
"play_memories": "Reproduir records", "play_memories": "Reproduir records",
"play_motion_photo": "Reproduir Fotos en Moviment", "play_motion_photo": "Reproduir Fotos en Moviment",
@@ -1072,6 +1084,8 @@
"removed_from_archive": "Eliminat de l'arxiu", "removed_from_archive": "Eliminat de l'arxiu",
"removed_from_favorites": "Eliminat dels preferits", "removed_from_favorites": "Eliminat dels preferits",
"removed_from_favorites_count": "{count, plural, other {# eliminats}} dels preferits", "removed_from_favorites_count": "{count, plural, other {# eliminats}} dels preferits",
"removed_memory": "Eliminat memòria",
"removed_photo_from_memory": "Eliminat foto de memòria",
"removed_tagged_assets": "Etiqueta eliminada de {count, plural, one {# actiu} other {# actius}}", "removed_tagged_assets": "Etiqueta eliminada de {count, plural, one {# actiu} other {# actius}}",
"rename": "Canviar nom", "rename": "Canviar nom",
"repair": "Reparació", "repair": "Reparació",
@@ -1080,6 +1094,7 @@
"repository": "Repositori", "repository": "Repositori",
"require_password": "Requereix contrasenya", "require_password": "Requereix contrasenya",
"require_user_to_change_password_on_first_login": "Requerir que l'usuari canviï la contrasenya en el primer inici de sessió", "require_user_to_change_password_on_first_login": "Requerir que l'usuari canviï la contrasenya en el primer inici de sessió",
"rescan": "Tornar a escanejar",
"reset": "Restablir", "reset": "Restablir",
"reset_password": "Restablir contrasenya", "reset_password": "Restablir contrasenya",
"reset_people_visibility": "Restablir la visibilitat de les persones", "reset_people_visibility": "Restablir la visibilitat de les persones",
@@ -1108,6 +1123,8 @@
"search": "Cerca", "search": "Cerca",
"search_albums": "Buscar àlbums", "search_albums": "Buscar àlbums",
"search_by_context": "Buscar per context", "search_by_context": "Buscar per context",
"search_by_description": "Cercar per descripció",
"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_camera_make": "Buscar per fabricant de càmara...", "search_camera_make": "Buscar per fabricant de càmara...",
@@ -1121,6 +1138,7 @@
"search_options": "Opcions de cerca", "search_options": "Opcions de cerca",
"search_people": "Buscar persones", "search_people": "Buscar persones",
"search_places": "Buscar llocs", "search_places": "Buscar llocs",
"search_rating": "Buscar per qualificació...",
"search_settings": "Configuració de cerca", "search_settings": "Configuració de cerca",
"search_state": "Buscar per regió...", "search_state": "Buscar per regió...",
"search_tags": "Cercant etiquetes...", "search_tags": "Cercant etiquetes...",
@@ -1167,6 +1185,7 @@
"shared_from_partner": "Fotos de {partner}", "shared_from_partner": "Fotos de {partner}",
"shared_link_options": "Opcions d'enllaços compartits", "shared_link_options": "Opcions d'enllaços compartits",
"shared_links": "Enllaços compartits", "shared_links": "Enllaços compartits",
"shared_links_description": "Comparteix fotos i vídeos amb un enllaç",
"shared_photos_and_videos_count": "{assetCount, plural, other {# fotos i vídeos compartits.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# fotos i vídeos compartits.}}",
"shared_with_partner": "Compartit amb {partner}", "shared_with_partner": "Compartit amb {partner}",
"sharing": "Compartit", "sharing": "Compartit",
@@ -1189,6 +1208,7 @@
"show_person_options": "Mostra opcions de la persona", "show_person_options": "Mostra opcions de la persona",
"show_progress_bar": "Mostra barra de progrés", "show_progress_bar": "Mostra barra de progrés",
"show_search_options": "Mostra opcions de cerca", "show_search_options": "Mostra opcions de cerca",
"show_shared_links": "Mostra els enllaços compartits",
"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",
@@ -1242,6 +1262,7 @@
"tag_created": "Etiqueta creada: {tag}", "tag_created": "Etiqueta creada: {tag}",
"tag_feature_description": "Exploreu fotos i vídeos agrupats per temes d'etiquetes lògiques", "tag_feature_description": "Exploreu fotos i vídeos agrupats per temes d'etiquetes lògiques",
"tag_not_found_question": "No trobeu una etiqueta? <link>Crear una nova etiqueta</link>", "tag_not_found_question": "No trobeu una etiqueta? <link>Crear una nova etiqueta</link>",
"tag_people": "Etiquetar personas",
"tag_updated": "Etiqueta actualizada: {tag}", "tag_updated": "Etiqueta actualizada: {tag}",
"tagged_assets": "{count, plural, one {#Etiquetat} other {#Etiquetats}} {count, plural, one {# actiu} other {# actius}}", "tagged_assets": "{count, plural, one {#Etiquetat} other {#Etiquetats}} {count, plural, one {# actiu} other {# actius}}",
"tags": "Etiquetes", "tags": "Etiquetes",
@@ -1276,11 +1297,13 @@
"unfavorite": "Reverteix preferit", "unfavorite": "Reverteix preferit",
"unhide_person": "Mostra persona", "unhide_person": "Mostra persona",
"unknown": "Desconegut", "unknown": "Desconegut",
"unknown_country": "País Desconegut",
"unknown_year": "Any desconegut", "unknown_year": "Any desconegut",
"unlimited": "Il·limitat", "unlimited": "Il·limitat",
"unlink_motion_video": "Desvincular vídeo en moviment", "unlink_motion_video": "Desvincular vídeo en moviment",
"unlink_oauth": "Desvincula OAuth", "unlink_oauth": "Desvincula OAuth",
"unlinked_oauth_account": "Compte Oauth desvinculat", "unlinked_oauth_account": "Compte Oauth desvinculat",
"unmute_memories": "Activar el so dels records",
"unnamed_album": "Àlbum sense nom", "unnamed_album": "Àlbum sense nom",
"unnamed_album_delete_confirmation": "Segur que voleu esborrar aquest àlbum?", "unnamed_album_delete_confirmation": "Segur que voleu esborrar aquest àlbum?",
"unnamed_share": "Compartit sense nom", "unnamed_share": "Compartit sense nom",
@@ -1334,6 +1357,7 @@
"view_all": "Veure tot", "view_all": "Veure tot",
"view_all_users": "Mostra tot els usuaris", "view_all_users": "Mostra tot els usuaris",
"view_in_timeline": "Mostrar a la línia de temps", "view_in_timeline": "Mostrar a la línia de temps",
"view_link": "Veure enllaç",
"view_links": "Mostra enllaços", "view_links": "Mostra enllaços",
"view_name": "Veure", "view_name": "Veure",
"view_next_asset": "Mostra el següent element", "view_next_asset": "Mostra el següent element",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Nastavení zálohování", "backup_settings": "Nastavení zálohování",
"backup_settings_description": "Správa nastavení zálohování databáze", "backup_settings_description": "Správa nastavení zálohování databáze",
"check_all": "Vše zkontrolovat", "check_all": "Vše zkontrolovat",
"cleanup": "Vyčištění",
"cleared_jobs": "Hotové úlohy pro: {job}", "cleared_jobs": "Hotové úlohy pro: {job}",
"config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem", "config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem",
"confirm_delete_library": "Opravdu chcete odstranit knihovnu {library}?", "confirm_delete_library": "Opravdu chcete odstranit knihovnu {library}?",
@@ -65,8 +66,13 @@
"forcing_refresh_library_files": "Vynucení obnovy všech souborů knihovny", "forcing_refresh_library_files": "Vynucení obnovy všech souborů knihovny",
"image_format": "Formát", "image_format": "Formát",
"image_format_description": "WebP vytváří menší soubory než JPEG, ale je pomalejší při kódování.", "image_format_description": "WebP vytváří menší soubory než JPEG, ale je pomalejší při kódování.",
"image_fullsize_description": "Obrázek v plné velikosti s odstraněnými metadaty, použito při přiblížení",
"image_fullsize_enabled": "Povolit generování obrázků v plné velikosti",
"image_fullsize_enabled_description": "Generovat obrázky v plné velikosti pro formáty, které nejsou vhodné pro web. Pokud je povolena možnost „Preferovat vložený náhled“, budou přímo použity vložené náhledy bez převodu. Neovlivňuje formáty vhodné pro web, jako je JPEG.",
"image_fullsize_quality_description": "Kvalita obrázku v plné velikosti od 1 do 100. Vyšší je lepší, ale vytváří větší soubory.",
"image_fullsize_title": "Nastavení obrázků v plné velikosti",
"image_prefer_embedded_preview": "Preferovat vložený náhled", "image_prefer_embedded_preview": "Preferovat vložený náhled",
"image_prefer_embedded_preview_setting_description": "Použít vložené náhledy z RAW fotografií jako vstup pro zpracování snímků, pokud jsou k dispozici. U některých snímků tak lze dosáhnout přesnějších barev, ale kvalita náhledu závisí na fotoaparátu a snímek může obsahovat více kompresních artefaktů.", "image_prefer_embedded_preview_setting_description": "Použít vložené náhledy z RAW fotografií jako vstup pro zpracování snímků a pokud jsou k dispozici. U některých snímků tak lze dosáhnout přesnějších barev, ale kvalita náhledu závisí na fotoaparátu a snímek může obsahovat více kompresních artefaktů.",
"image_prefer_wide_gamut": "Preferovat široký gamut", "image_prefer_wide_gamut": "Preferovat široký gamut",
"image_prefer_wide_gamut_setting_description": "Použít Display P3 pro miniatury. To lépe zachovává živost obrázků s širokým barevným prostorem, ale obrázky se mohou na starých zařízeních se starou verzí prohlížeče zobrazovat jinak. sRGB obrázky jsou ponechány jako sRGB, aby se zabránilo posunům barev.", "image_prefer_wide_gamut_setting_description": "Použít Display P3 pro miniatury. To lépe zachovává živost obrázků s širokým barevným prostorem, ale obrázky se mohou na starých zařízeních se starou verzí prohlížeče zobrazovat jinak. sRGB obrázky jsou ponechány jako sRGB, aby se zabránilo posunům barev.",
"image_preview_description": "Středně velký obrázek se zbavenými metadaty, který se používá při prohlížení jedné položky a pro strojové učení", "image_preview_description": "Středně velký obrázek se zbavenými metadaty, který se používá při prohlížení jedné položky a pro strojové učení",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Povolit pravidelné prohledávání knihovny", "library_scanning_enable_description": "Povolit pravidelné prohledávání knihovny",
"library_settings": "Externí knihovna", "library_settings": "Externí knihovna",
"library_settings_description": "Správa nastavení externí knihovny", "library_settings_description": "Správa nastavení externí knihovny",
"library_tasks_description": "Provádění úkolů v knihovně", "library_tasks_description": "Vyhledávání nových nebo změněných položek v externích knihovnách",
"library_watching_enable_description": "Sledovat změny souborů v externích knihovnách", "library_watching_enable_description": "Sledovat změny souborů v externích knihovnách",
"library_watching_settings": "Sledování knihovny (EXPERIMENTÁLNÍ)", "library_watching_settings": "Sledování knihovny (EXPERIMENTÁLNÍ)",
"library_watching_settings_description": "Automatické sledování změněných souborů", "library_watching_settings_description": "Automatické sledování změněných souborů",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Sémantické vyhledávání obrázků pomocí CLIP embeddings", "machine_learning_smart_search_description": "Sémantické vyhledávání obrázků pomocí CLIP embeddings",
"machine_learning_smart_search_enabled": "Povolit chytré vyhledávání", "machine_learning_smart_search_enabled": "Povolit chytré vyhledávání",
"machine_learning_smart_search_enabled_description": "Pokud je vypnuto, obrázky nebudou kódovány pro inteligentní vyhledávání.", "machine_learning_smart_search_enabled_description": "Pokud je vypnuto, obrázky nebudou kódovány pro inteligentní vyhledávání.",
"machine_learning_url_description": "URL serveru strojového učení. Pokud je zadáno více URL adres, budou jednotlivé servery zkoušeny postupně, dokud jeden z nich neodpoví úspěšně, a to v pořadí od prvního k poslednímu.", "machine_learning_url_description": "URL serveru strojového učení. Pokud je zadáno více URL adres, budou jednotlivé servery zkoušeny postupně, dokud jeden z nich neodpoví úspěšně, a to v pořadí od prvního k poslednímu. Servery, které neodpoví, budou dočasně ignorovány, dokud nebudou opět online.",
"manage_concurrency": "Správa souběžnosti", "manage_concurrency": "Správa souběžnosti",
"manage_log_settings": "Správa nastavení protokolu", "manage_log_settings": "Správa nastavení protokolu",
"map_dark_style": "Tmavý motiv", "map_dark_style": "Tmavý motiv",
@@ -147,6 +153,8 @@
"map_settings": "Mapa", "map_settings": "Mapa",
"map_settings_description": "Správa nastavení mapy", "map_settings_description": "Správa nastavení mapy",
"map_style_description": "URL na style.json motivu", "map_style_description": "URL na style.json motivu",
"memory_cleanup_job": "Promazání vzpomínek",
"memory_generate_job": "Vytvoření vzpomínek",
"metadata_extraction_job": "Extrakce metadat", "metadata_extraction_job": "Extrakce metadat",
"metadata_extraction_job_description": "Získání informací o metadatech z každého snímku, jako je GPS, obličeje a rozlišení", "metadata_extraction_job_description": "Získání informací o metadatech z každého snímku, jako je GPS, obličeje a rozlišení",
"metadata_faces_import_setting": "Povolit import obličeje", "metadata_faces_import_setting": "Povolit import obličeje",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "Povolí ověřování hashe, nevypínejte ji, pokud si nejste jisti důsledky", "storage_template_hash_verification_enabled_description": "Povolí ověřování hashe, nevypínejte ji, pokud si nejste jisti důsledky",
"storage_template_migration": "Migrace šablony úložiště", "storage_template_migration": "Migrace šablony úložiště",
"storage_template_migration_description": "Použít aktuální <link>{template}</link> na dříve nahrané položky", "storage_template_migration_description": "Použít aktuální <link>{template}</link> na dříve nahrané položky",
"storage_template_migration_info": "Změny šablon se uplatní pouze u nových položek. Chcete-li šablonu zpětně použít na dříve nahrané položky, spusťte <link>{job}</link>.", "storage_template_migration_info": "Šablona úložiště převede všechny přípony na malá písmena. Změny šablon se uplatní pouze u nových položek. Chcete-li šablonu zpětně použít na dříve nahrané položky, spusťte <link>{job}</link>.",
"storage_template_migration_job": "Úloha migrace šablony úložiště", "storage_template_migration_job": "Úloha migrace šablony úložiště",
"storage_template_more_details": "Další podrobnosti o této funkci naleznete v sekci <template-link>Šablona úložiště</template-link> včetně jejích <implications-link>důsledků</implications-link>", "storage_template_more_details": "Další podrobnosti o této funkci naleznete v sekci <template-link>Šablona úložiště</template-link> včetně jejích <implications-link>důsledků</implications-link>",
"storage_template_onboarding_description": "Je-li tato funkce povolena, automaticky uspořádá soubory na základě uživatelem definované šablony. Z důvodu problémů se stabilitou byla tato funkce ve výchozím nastavení vypnuta. Další informace naleznete v <link>dokumentaci</link>.", "storage_template_onboarding_description": "Je-li tato funkce povolena, automaticky uspořádá soubory na základě uživatelem definované šablony. Z důvodu problémů se stabilitou byla tato funkce ve výchozím nastavení vypnuta. Další informace naleznete v <link>dokumentaci</link>.",
@@ -288,7 +296,7 @@
"transcoding_constant_quality_mode_description": "ICQ je lepší než CQP, ale některá zařízení pro hardwarovou akceleraci tento režim nepodporují. Nastavením této volby se při použití kódování založeného na kvalitě upřednostní zadaný režim. Ignorováno NVENC, protože nepodporuje ICQ.", "transcoding_constant_quality_mode_description": "ICQ je lepší než CQP, ale některá zařízení pro hardwarovou akceleraci tento režim nepodporují. Nastavením této volby se při použití kódování založeného na kvalitě upřednostní zadaný režim. Ignorováno NVENC, protože nepodporuje ICQ.",
"transcoding_constant_rate_factor": "Faktor konstantní rychlosti (-crf)", "transcoding_constant_rate_factor": "Faktor konstantní rychlosti (-crf)",
"transcoding_constant_rate_factor_description": "Úroveň kvality videa. Typické hodnoty jsou 23 pro H.264, 28 pro HEVC, 31 pro VP9 a 35 pro AV1. Nižší je lepší, ale vytváří větší soubory.", "transcoding_constant_rate_factor_description": "Úroveň kvality videa. Typické hodnoty jsou 23 pro H.264, 28 pro HEVC, 31 pro VP9 a 35 pro AV1. Nižší je lepší, ale vytváří větší soubory.",
"transcoding_disabled_description": "Nepřekódovávejte žádná videa, u některých klientů může dojít k znemožnění přehrávání", "transcoding_disabled_description": "Nepřekódovávat žádná videa, u některých klientů může dojít k znemožnění přehrávání",
"transcoding_encoding_options": "Možnosti kódování", "transcoding_encoding_options": "Možnosti kódování",
"transcoding_encoding_options_description": "Nastavte kodeky, rozlišení, kvalitu a další možnosti pro kódovaná videa", "transcoding_encoding_options_description": "Nastavte kodeky, rozlišení, kvalitu a další možnosti pro kódovaná videa",
"transcoding_hardware_acceleration": "Hardwarová akcelerace", "transcoding_hardware_acceleration": "Hardwarová akcelerace",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "Maximální počet B-snímků", "transcoding_max_b_frames": "Maximální počet B-snímků",
"transcoding_max_b_frames_description": "Vyšší hodnoty zvyšují účinnost komprese, ale zpomalují kódování. Nemusí být kompatibilní s hardwarovou akcelerací na starších zařízeních. Hodnota 0 zakáže B-snímky, zatímco -1 tuto hodnotu nastaví automaticky.", "transcoding_max_b_frames_description": "Vyšší hodnoty zvyšují účinnost komprese, ale zpomalují kódování. Nemusí být kompatibilní s hardwarovou akcelerací na starších zařízeních. Hodnota 0 zakáže B-snímky, zatímco -1 tuto hodnotu nastaví automaticky.",
"transcoding_max_bitrate": "Maximální datový tok", "transcoding_max_bitrate": "Maximální datový tok",
"transcoding_max_bitrate_description": "Nastavení maximálního datového toku může zvýšit předvídatelnost velikosti souborů za cenu menší újmy na kvalitě. Při rozlišení 720p jsou typické hodnoty 2600k pro VP9 nebo HEVC nebo 4500k pro H.264. Je zakázáno, pokud je nastavena hodnota 0.", "transcoding_max_bitrate_description": "Nastavení maximálního datového toku může zvýšit předvídatelnost velikosti souborů za cenu menší újmy na kvalitě. Při rozlišení 720p jsou typické hodnoty 2600 kbit/s pro VP9 nebo HEVC nebo 4500 kbit/s pro H.264. Je zakázáno, pokud je nastavena hodnota 0.",
"transcoding_max_keyframe_interval": "Maximální interval klíčových snímků", "transcoding_max_keyframe_interval": "Maximální interval klíčových snímků",
"transcoding_max_keyframe_interval_description": "Nastavuje maximální vzdálenost mezi klíčovými snímky. Nižší hodnoty zhoršují účinnost komprese, ale zlepšují rychlost při přeskakování a mohou zlepšit kvalitu ve scénách s rychlým pohybem. Hodnota 0 nastavuje tuto hodnotu automaticky.", "transcoding_max_keyframe_interval_description": "Nastavuje maximální vzdálenost mezi klíčovými snímky. Nižší hodnoty zhoršují účinnost komprese, ale zlepšují rychlost při přeskakování a mohou zlepšit kvalitu ve scénách s rychlým pohybem. Hodnota 0 nastavuje tuto hodnotu automaticky.",
"transcoding_optimal_description": "Videa s vyšším než cílovým rozlišením nebo videa, která nejsou v akceptovaném formátu", "transcoding_optimal_description": "Videa s vyšším než cílovým rozlišením nebo videa, která nejsou v akceptovaném formátu",
@@ -391,6 +399,7 @@
"allow_edits": "Povolit úpravy", "allow_edits": "Povolit úpravy",
"allow_public_user_to_download": "Povolit veřejnosti stahovat", "allow_public_user_to_download": "Povolit veřejnosti stahovat",
"allow_public_user_to_upload": "Povolit veřejnosti nahrávat", "allow_public_user_to_upload": "Povolit veřejnosti nahrávat",
"alt_text_qr_code": "Obrázek QR kódu",
"anti_clockwise": "Proti směru hodinových ručiček", "anti_clockwise": "Proti směru hodinových ručiček",
"api_key": "API klíč", "api_key": "API klíč",
"api_key_description": "Tato hodnota se zobrazí pouze jednou. Před zavřením okna ji nezapomeňte zkopírovat.", "api_key_description": "Tato hodnota se zobrazí pouze jednou. Před zavřením okna ji nezapomeňte zkopírovat.",
@@ -464,11 +473,11 @@
"check_logs": "Zkontrolujte protokoly", "check_logs": "Zkontrolujte protokoly",
"choose_matching_people_to_merge": "Zvolte odpovídající osoby ke sloučení", "choose_matching_people_to_merge": "Zvolte odpovídající osoby ke sloučení",
"city": "Město", "city": "Město",
"clear": "Vyčistit", "clear": "Vymazat",
"clear_all": "Vymazat vše", "clear_all": "Vymazat vše",
"clear_all_recent_searches": "Vymazat všechna nedávná vyhledávání", "clear_all_recent_searches": "Vymazat všechna nedávná vyhledávání",
"clear_message": "Vyčistit zprávu", "clear_message": "Vymazat zprávu",
"clear_value": "Vyčistit hodnotu", "clear_value": "Vymazat hodnotu",
"clockwise": "Po směru hodinových ručiček", "clockwise": "Po směru hodinových ručiček",
"close": "Zavřít", "close": "Zavřít",
"collapse": "Sbalit", "collapse": "Sbalit",
@@ -481,6 +490,7 @@
"comments_are_disabled": "Komentáře jsou vypnuty", "comments_are_disabled": "Komentáře jsou vypnuty",
"confirm": "Potvrdit", "confirm": "Potvrdit",
"confirm_admin_password": "Potvrzení hesla správce", "confirm_admin_password": "Potvrzení hesla správce",
"confirm_delete_face": "Opravdu chcete z položky odstranit obličej osoby {name}?",
"confirm_delete_shared_link": "Opravdu chcete odstranit tento sdílený odkaz?", "confirm_delete_shared_link": "Opravdu chcete odstranit tento sdílený odkaz?",
"confirm_keep_this_delete_others": "Všechny ostatní položky v tomto uskupení mimo této budou odstraněny. Opravdu chcete pokračovat?", "confirm_keep_this_delete_others": "Všechny ostatní položky v tomto uskupení mimo této budou odstraněny. Opravdu chcete pokračovat?",
"confirm_password": "Potvrzení hesla", "confirm_password": "Potvrzení hesla",
@@ -533,6 +543,7 @@
"delete_album": "Smazat album", "delete_album": "Smazat album",
"delete_api_key_prompt": "Opravdu chcete tento API klíč odstranit?", "delete_api_key_prompt": "Opravdu chcete tento API klíč odstranit?",
"delete_duplicates_confirmation": "Opravdu chcete tyto duplicity trvale odstranit?", "delete_duplicates_confirmation": "Opravdu chcete tyto duplicity trvale odstranit?",
"delete_face": "Odstranit obličej",
"delete_key": "Smazat klíč", "delete_key": "Smazat klíč",
"delete_library": "Smazat knihovnu", "delete_library": "Smazat knihovnu",
"delete_link": "Smazat odkaz", "delete_link": "Smazat odkaz",
@@ -600,6 +611,7 @@
"enabled": "Povoleno", "enabled": "Povoleno",
"end_date": "Konečné datum", "end_date": "Konečné datum",
"error": "Chyba", "error": "Chyba",
"error_delete_face": "Chyba při odstraňování obličeje z položky",
"error_loading_image": "Chyba při načítání obrázku", "error_loading_image": "Chyba při načítání obrázku",
"error_title": "Chyba - Něco se pokazilo", "error_title": "Chyba - Něco se pokazilo",
"errors": { "errors": {
@@ -751,8 +763,8 @@
"features_setting_description": "Správa funkcí aplikace", "features_setting_description": "Správa funkcí aplikace",
"file_name": "Název souboru", "file_name": "Název souboru",
"file_name_or_extension": "Název nebo přípona souboru", "file_name_or_extension": "Název nebo přípona souboru",
"filename": "Filename", "filename": "Název souboru",
"filetype": "Filetype", "filetype": "Typ souboru",
"filter_people": "Filtrovat lidi", "filter_people": "Filtrovat lidi",
"find_them_fast": "Najděte je rychle vyhledáním jejich jména", "find_them_fast": "Najděte je rychle vyhledáním jejich jména",
"fix_incorrect_match": "Opravit nesprávnou shodu", "fix_incorrect_match": "Opravit nesprávnou shodu",
@@ -852,6 +864,7 @@
"loop_videos": "Videa ve smyčce", "loop_videos": "Videa ve smyčce",
"loop_videos_description": "Povolit automatickou smyčku videa v prohlížeči.", "loop_videos_description": "Povolit automatickou smyčku videa v prohlížeči.",
"main_branch_warning": "Používáte vývojovou verzi; důrazně doporučujeme používat verzi z vydání!", "main_branch_warning": "Používáte vývojovou verzi; důrazně doporučujeme používat verzi z vydání!",
"main_menu": "Hlavní nabídka",
"make": "Výrobce", "make": "Výrobce",
"manage_shared_links": "Spravovat sdílené odkazy", "manage_shared_links": "Spravovat sdílené odkazy",
"manage_sharing_with_partners": "Správa sdílení s partnery", "manage_sharing_with_partners": "Správa sdílení s partnery",
@@ -884,6 +897,7 @@
"month": "Měsíc", "month": "Měsíc",
"more": "Více", "more": "Více",
"moved_to_trash": "Přesunuto do koše", "moved_to_trash": "Přesunuto do koše",
"mute_memories": "Ztlumit vzpomínky",
"my_albums": "Moje alba", "my_albums": "Moje alba",
"name": "Jméno", "name": "Jméno",
"name_or_nickname": "Jméno nebo přezdívka", "name_or_nickname": "Jméno nebo přezdívka",
@@ -979,6 +993,7 @@
"permanently_deleted_asset": "Položka trvale odstraněna", "permanently_deleted_asset": "Položka trvale odstraněna",
"permanently_deleted_assets_count": "{count, plural, one {Položka trvale vymazána} other {Položky trvale vymazány}}", "permanently_deleted_assets_count": "{count, plural, one {Položka trvale vymazána} other {Položky trvale vymazány}}",
"person": "Osoba", "person": "Osoba",
"person_birthdate": "Narozen/a {date}",
"person_hidden": "{name}{hidden, select, true { (skryto)} other {}}", "person_hidden": "{name}{hidden, select, true { (skryto)} other {}}",
"photo_shared_all_users": "Vypadá to, že jste fotky sdíleli se všemi uživateli, nebo nemáte žádného uživatele, se kterým byste je mohli sdílet.", "photo_shared_all_users": "Vypadá to, že jste fotky sdíleli se všemi uživateli, nebo nemáte žádného uživatele, se kterým byste je mohli sdílet.",
"photos": "Fotky", "photos": "Fotky",
@@ -1070,12 +1085,16 @@
"remove_from_album": "Odstranit z alba", "remove_from_album": "Odstranit z alba",
"remove_from_favorites": "Odstranit z oblíbených", "remove_from_favorites": "Odstranit z oblíbených",
"remove_from_shared_link": "Odstranit ze sdíleného odkazu", "remove_from_shared_link": "Odstranit ze sdíleného odkazu",
"remove_memory": "Odstranit vzpomínku",
"remove_photo_from_memory": "Odstranit fotografii z této vzpomínky",
"remove_url": "Odstranit URL", "remove_url": "Odstranit URL",
"remove_user": "Odebrat uživatele", "remove_user": "Odebrat uživatele",
"removed_api_key": "Odstraněn API klíč: {name}", "removed_api_key": "Odstraněn API klíč: {name}",
"removed_from_archive": "Odstraněno z archivu", "removed_from_archive": "Odstraněno z archivu",
"removed_from_favorites": "Odstraněno z oblíbených", "removed_from_favorites": "Odstraněno z oblíbených",
"removed_from_favorites_count": "{count, plural, one {Odstraněn #} few {Odstraněny #} other {Odstraněno #}} z oblíbených", "removed_from_favorites_count": "{count, plural, one {Odstraněn #} few {Odstraněny #} other {Odstraněno #}} z oblíbených",
"removed_memory": "Vzpomínka odstraněna",
"removed_photo_from_memory": "Fotografie odstraněna ze vzpomínky",
"removed_tagged_assets": "Odstraněná značka z {count, plural, one {# položky} other {# položek}}", "removed_tagged_assets": "Odstraněná značka z {count, plural, one {# položky} other {# položek}}",
"rename": "Přejmenovat", "rename": "Přejmenovat",
"repair": "Opravy", "repair": "Opravy",
@@ -1084,6 +1103,7 @@
"repository": "Repozitář", "repository": "Repozitář",
"require_password": "Požadovat heslo", "require_password": "Požadovat heslo",
"require_user_to_change_password_on_first_login": "Požadovat, aby si uživatel při prvním přihlášení změnil heslo", "require_user_to_change_password_on_first_login": "Požadovat, aby si uživatel při prvním přihlášení změnil heslo",
"rescan": "Znovu prohledat",
"reset": "Výchozí", "reset": "Výchozí",
"reset_password": "Obnovit heslo", "reset_password": "Obnovit heslo",
"reset_people_visibility": "Obnovit viditelnost lidí", "reset_people_visibility": "Obnovit viditelnost lidí",
@@ -1127,6 +1147,7 @@
"search_options": "Možnosti vyhledávání", "search_options": "Možnosti vyhledávání",
"search_people": "Vyhledat lidi", "search_people": "Vyhledat lidi",
"search_places": "Vyhledat místa", "search_places": "Vyhledat místa",
"search_rating": "Vyhledávání podle hodnocení...",
"search_settings": "Hledat nastavení", "search_settings": "Hledat nastavení",
"search_state": "Vyhledat stát...", "search_state": "Vyhledat stát...",
"search_tags": "Vyhledávat značky...", "search_tags": "Vyhledávat značky...",
@@ -1136,6 +1157,7 @@
"searching_locales": "Vyhledávání jazyků...", "searching_locales": "Vyhledávání jazyků...",
"second": "Sekunda", "second": "Sekunda",
"see_all_people": "Zobrazit všechny lidi", "see_all_people": "Zobrazit všechny lidi",
"select": "Vybrat",
"select_album_cover": "Vybrat obal alba", "select_album_cover": "Vybrat obal alba",
"select_all": "Vybrat vše", "select_all": "Vybrat vše",
"select_all_duplicates": "Vybrat všechny duplicity", "select_all_duplicates": "Vybrat všechny duplicity",
@@ -1218,7 +1240,7 @@
"sort_oldest": "Nejstarší fotka", "sort_oldest": "Nejstarší fotka",
"sort_people_by_similarity": "Seřadit lidi podle podobnosti", "sort_people_by_similarity": "Seřadit lidi podle podobnosti",
"sort_recent": "Nejnovější fotka", "sort_recent": "Nejnovější fotka",
"sort_title": "Název", "sort_title": "Název alba",
"source": "Zdroj", "source": "Zdroj",
"stack": "Seskupit", "stack": "Seskupit",
"stack_duplicates": "Seskupit duplicity", "stack_duplicates": "Seskupit duplicity",
@@ -1250,6 +1272,7 @@
"tag_created": "Vytvořena značka: {tag}", "tag_created": "Vytvořena značka: {tag}",
"tag_feature_description": "Procházení fotografií a videí seskupených podle témat logických značek", "tag_feature_description": "Procházení fotografií a videí seskupených podle témat logických značek",
"tag_not_found_question": "Nemůžete najít značku? <link>Vytvořte novou.</link>", "tag_not_found_question": "Nemůžete najít značku? <link>Vytvořte novou.</link>",
"tag_people": "Označit lidi",
"tag_updated": "Aktualizována značka: {tag}", "tag_updated": "Aktualizována značka: {tag}",
"tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}", "tagged_assets": "Přiřazena značka {count, plural, one {# položce} other {# položkám}}",
"tags": "Značky", "tags": "Značky",
@@ -1290,6 +1313,7 @@
"unlink_motion_video": "Odpojit pohyblivé video", "unlink_motion_video": "Odpojit pohyblivé video",
"unlink_oauth": "Zrušit OAuth propojení", "unlink_oauth": "Zrušit OAuth propojení",
"unlinked_oauth_account": "OAuth účet odpojen", "unlinked_oauth_account": "OAuth účet odpojen",
"unmute_memories": "Zrušit ztlumení vzpomínek",
"unnamed_album": "Nepojmenované album", "unnamed_album": "Nepojmenované album",
"unnamed_album_delete_confirmation": "Opravdu chcete toto album smazat?", "unnamed_album_delete_confirmation": "Opravdu chcete toto album smazat?",
"unnamed_share": "Nepojmenované sdílení", "unnamed_share": "Nepojmenované sdílení",
@@ -1343,6 +1367,7 @@
"view_all": "Zobrazit vše", "view_all": "Zobrazit vše",
"view_all_users": "Zobrazit všechny uživatele", "view_all_users": "Zobrazit všechny uživatele",
"view_in_timeline": "Zobrazit na časové ose", "view_in_timeline": "Zobrazit na časové ose",
"view_link": "Zobrazit odkaz",
"view_links": "Zobrazit odkazy", "view_links": "Zobrazit odkazy",
"view_name": "Zobrazit", "view_name": "Zobrazit",
"view_next_asset": "Zobrazit další položku", "view_next_asset": "Zobrazit další položku",
@@ -1355,7 +1380,7 @@
"welcome": "Vítejte", "welcome": "Vítejte",
"welcome_to_immich": "Vítejte v Immichi", "welcome_to_immich": "Vítejte v Immichi",
"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",
"you_dont_have_any_shared_links": "Nemáte žádné sdílené odkazy", "you_dont_have_any_shared_links": "Nemáte žádné sdílené odkazy",
"zoom_image": "Zvětšit obrázek" "zoom_image": "Zvětšit obrázek"

View File

@@ -41,6 +41,7 @@
"backup_settings": "Backup-indstillinger", "backup_settings": "Backup-indstillinger",
"backup_settings_description": "Administrer backupindstillinger for database", "backup_settings_description": "Administrer backupindstillinger for database",
"check_all": "Tjek Alle", "check_all": "Tjek Alle",
"cleanup": "Ryd op",
"cleared_jobs": "Ryddet jobs til: {job}", "cleared_jobs": "Ryddet jobs til: {job}",
"config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil", "config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil",
"confirm_delete_library": "Er du sikker på, at du vil slette {library} bibliotek?", "confirm_delete_library": "Er du sikker på, at du vil slette {library} bibliotek?",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "Aktiver periodisk biblioteksscanning", "library_scanning_enable_description": "Aktiver periodisk biblioteksscanning",
"library_settings": "Eksternt bibliotek", "library_settings": "Eksternt bibliotek",
"library_settings_description": "Administrer eksterne biblioteksindstillinger", "library_settings_description": "Administrer eksterne biblioteksindstillinger",
"library_tasks_description": "Udfør biblioteksopgaver", "library_tasks_description": "Scan eksterne biblioteker for nye og/eller ændrede mediefiler",
"library_watching_enable_description": "Overvåg eksterne biblioteker for filændringer", "library_watching_enable_description": "Overvåg eksterne biblioteker for filændringer",
"library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)", "library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)",
"library_watching_settings_description": "Tjek automatisk for ændrede filer", "library_watching_settings_description": "Tjek automatisk for ændrede filer",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "Søg semantisk efter billeder ved hjælp af CLIP-indlejringer", "machine_learning_smart_search_description": "Søg semantisk efter billeder ved hjælp af CLIP-indlejringer",
"machine_learning_smart_search_enabled": "Aktiver smart søgning", "machine_learning_smart_search_enabled": "Aktiver smart søgning",
"machine_learning_smart_search_enabled_description": "Hvis deaktiveret, vil billeder ikke blive kodet til smart søgning.", "machine_learning_smart_search_enabled_description": "Hvis deaktiveret, vil billeder ikke blive kodet til smart søgning.",
"machine_learning_url_description": "URL maskinlæringsserveren. Hvis der er angivet mere end én URL, hver server vil blive forsøgt en ad gangen, indtil en reagerer med succes, i rækkefølge fra første til sidste.", "machine_learning_url_description": "URLen for maskinlæringsserveren. Hvis mere end én URL angives, vil hver server blive forsøgt én ad gangen, indtil en svarer succesfuldt, i rækkefølge fra første til sidste. Servere, der ikke svarer, vil midlertidigt blive ignoreret, indtil de kommer online igen.",
"manage_concurrency": "Administrer antallet af samtidige opgaver", "manage_concurrency": "Administrer antallet af samtidige opgaver",
"manage_log_settings": "Administrer logindstillinger", "manage_log_settings": "Administrer logindstillinger",
"map_dark_style": "Mørk tema", "map_dark_style": "Mørk tema",
@@ -147,6 +148,8 @@
"map_settings": "Kort", "map_settings": "Kort",
"map_settings_description": "Administrer kortindstillinger", "map_settings_description": "Administrer kortindstillinger",
"map_style_description": "URL til en style.json for et korttema", "map_style_description": "URL til en style.json for et korttema",
"memory_cleanup_job": "Mindeoprydning",
"memory_generate_job": "Mindegeneration",
"metadata_extraction_job": "Udtræk metadata", "metadata_extraction_job": "Udtræk metadata",
"metadata_extraction_job_description": "Udtræk metadataoplysninger fra hvert Billede/Video, såsom GPS og opløsning", "metadata_extraction_job_description": "Udtræk metadataoplysninger fra hvert Billede/Video, såsom GPS og opløsning",
"metadata_faces_import_setting": "Aktivér for at importere ansigter", "metadata_faces_import_setting": "Aktivér for at importere ansigter",
@@ -240,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "Slår hash-verifikation til, slå ikke dette fra med mindre du er sikker på dets konsekvenser", "storage_template_hash_verification_enabled_description": "Slår hash-verifikation til, slå ikke dette fra med mindre du er sikker på dets konsekvenser",
"storage_template_migration": "Lagringsskabelonmigration", "storage_template_migration": "Lagringsskabelonmigration",
"storage_template_migration_description": "Anvend den nuværende <link>{template}</link> på tidligere uploadede mediefiler", "storage_template_migration_description": "Anvend den nuværende <link>{template}</link> på tidligere uploadede mediefiler",
"storage_template_migration_info": "Skabelonændringer vil kun gælde for nye mediefiler. For at anvende skabelonen retroaktivt på tidligere uploadede mediefiler skal du køre <link>{job}</link>.", "storage_template_migration_info": "Lager-skabelonen vil konvertere alle filendelser til små bogstaver. Skabelonændringer vil kun gælde for nye mediefiler. For at anvende skabelonen retroaktivt på tidligere uploadede mediefiler skal du køre <link>{job}</link>.",
"storage_template_migration_job": "Lager Skabelon Migreringsjob", "storage_template_migration_job": "Lager Skabelon Migreringsjob",
"storage_template_more_details": "For flere detaljer om denne funktion, referer til <template-link>Lager Skabelonen</template-link> og dens <implications-link>implikationer</implications-link>", "storage_template_more_details": "For flere detaljer om denne funktion, referer til <template-link>Lager Skabelonen</template-link> og dens <implications-link>implikationer</implications-link>",
"storage_template_onboarding_description": "Når denne funktion er aktiveret, vil den automatisk organisere filer baseret på en brugerdefineret skabelon. På grund af stabilitetsproblemer er funktionen som standard slået fra. For mere information, se <link>dokumentation</link>.", "storage_template_onboarding_description": "Når denne funktion er aktiveret, vil den automatisk organisere filer baseret på en brugerdefineret skabelon. På grund af stabilitetsproblemer er funktionen som standard slået fra. For mere information, se <link>dokumentation</link>.",
@@ -299,7 +302,7 @@
"transcoding_max_b_frames": "Maksimum B-frames", "transcoding_max_b_frames": "Maksimum B-frames",
"transcoding_max_b_frames_description": "Højere værdier forbedrer kompressionseffektivitet, men kan gøre indkodning langsommere. Er måske ikke kompatibelt med hardware-acceleration på ældre enheder. 0 slår B-frames fra, mens -1 sætter denne værdi automatisk.", "transcoding_max_b_frames_description": "Højere værdier forbedrer kompressionseffektivitet, men kan gøre indkodning langsommere. Er måske ikke kompatibelt med hardware-acceleration på ældre enheder. 0 slår B-frames fra, mens -1 sætter denne værdi automatisk.",
"transcoding_max_bitrate": "Maksimal bitrate", "transcoding_max_bitrate": "Maksimal bitrate",
"transcoding_max_bitrate_description": "At sætte en maksmimal bitrate kan gøre filstørrelserne mere forudsigelige med et lille tab i kvalitet. Ved 720p er almindelige værdier 2600k for VP9 eller HEVC, eller 4500K for H.264. Slået fra hvis sat til 0.", "transcoding_max_bitrate_description": "At sætte en maksmimal bitrate kan gøre filstørrelserne mere forudsigelige med et lille tab i kvalitet. Ved 720p er almindelige værdier 2600 kbit/s for VP9 eller HEVC, eller 4500 kbit/s for H.264. Slået fra hvis sat til 0.",
"transcoding_max_keyframe_interval": "Maksimal keyframe-interval", "transcoding_max_keyframe_interval": "Maksimal keyframe-interval",
"transcoding_max_keyframe_interval_description": "Sætter den maksimale frameafstand mellem keyframes. Lavere værdier forringer kompressionseffektiviteten, men forbedrer søgetider og kan forbedre kvaliteten i scener med hurtig bevægelse. 0 sætter denne værdi automatisk.", "transcoding_max_keyframe_interval_description": "Sætter den maksimale frameafstand mellem keyframes. Lavere værdier forringer kompressionseffektiviteten, men forbedrer søgetider og kan forbedre kvaliteten i scener med hurtig bevægelse. 0 sætter denne værdi automatisk.",
"transcoding_optimal_description": "Videoer højere end målopløsningen eller ikke i et godkendt format", "transcoding_optimal_description": "Videoer højere end målopløsningen eller ikke i et godkendt format",
@@ -391,6 +394,7 @@
"allow_edits": "Tillad redigeringer", "allow_edits": "Tillad redigeringer",
"allow_public_user_to_download": "Tillad offentlige brugere til at hente", "allow_public_user_to_download": "Tillad offentlige brugere til at hente",
"allow_public_user_to_upload": "Tillad offentlige brugere til at uploade", "allow_public_user_to_upload": "Tillad offentlige brugere til at uploade",
"alt_text_qr_code": "QR-kode billede",
"anti_clockwise": "Mod uret", "anti_clockwise": "Mod uret",
"api_key": "API-nøgle", "api_key": "API-nøgle",
"api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.", "api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.",
@@ -481,6 +485,7 @@
"comments_are_disabled": "Kommentarer er slået fra", "comments_are_disabled": "Kommentarer er slået fra",
"confirm": "Bekræft", "confirm": "Bekræft",
"confirm_admin_password": "Bekræft administratoradgangskode", "confirm_admin_password": "Bekræft administratoradgangskode",
"confirm_delete_face": "Er du sikker på, du vil slette {name}s ansigt fra denne mediefil?",
"confirm_delete_shared_link": "Er du sikker på, at du vil slette dette delte link?", "confirm_delete_shared_link": "Er du sikker på, at du vil slette dette delte link?",
"confirm_keep_this_delete_others": "Alle andre aktiver i stakken vil blive slettet undtagen dette aktiv. Er du sikker på, at du vil fortsætte?", "confirm_keep_this_delete_others": "Alle andre aktiver i stakken vil blive slettet undtagen dette aktiv. Er du sikker på, at du vil fortsætte?",
"confirm_password": "Bekræft adgangskode", "confirm_password": "Bekræft adgangskode",
@@ -504,7 +509,7 @@
"create_library": "Opret bibliotek", "create_library": "Opret bibliotek",
"create_link": "Opret link", "create_link": "Opret link",
"create_link_to_share": "Opret link for at dele", "create_link_to_share": "Opret link for at dele",
"create_link_to_share_description": "Lad alle med linket se de(t) valgte billede(r)", "create_link_to_share_description": "Tillad alle med linket at se de(t) valgte billede(r)",
"create_new_person": "Opret ny person", "create_new_person": "Opret ny person",
"create_new_person_hint": "Tildel valgte aktiver til en ny person", "create_new_person_hint": "Tildel valgte aktiver til en ny person",
"create_new_user": "Opret ny bruger", "create_new_user": "Opret ny bruger",
@@ -519,20 +524,21 @@
"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_of_birth_saved": "Fødselsdatoen blev gemt", "date_of_birth_saved": "Fødselsdatoen blev gemt korrekt",
"date_range": "Datointerval", "date_range": "Datointerval",
"day": "Dag", "day": "Dag",
"deduplicate_all": "Dedupliker alle", "deduplicate_all": "Kopier alle",
"deduplication_criteria_1": "Billedstørrelse i bytes", "deduplication_criteria_1": "Billedstørrelse i bytes",
"deduplication_criteria_2": "Antal EXIF-data", "deduplication_criteria_2": "Antal EXIF-data",
"deduplication_info": "Deduplikerings info", "deduplication_info": "Deduplikerings info",
"deduplication_info_description": "For automatisk at forudvælge emner og fjerne dubletter i bulk ser vi på:", "deduplication_info_description": "For automatisk at forudvælge emner og fjerne dubletter i bulk ser vi på:",
"default_locale": "Standardlokalitet", "default_locale": "Standardlokalitet",
"default_locale_description": "Formatér datoer og tal", "default_locale_description": "Formatér datoer og tal baseret på din browsers regions indstillinger",
"delete": "Slet", "delete": "Slet",
"delete_album": "Slet album", "delete_album": "Slet album",
"delete_api_key_prompt": "Er du sikker på, at du vil slette denne API-nøgle?", "delete_api_key_prompt": "Er du sikker på, at du vil slette denne API-nøgle?",
"delete_duplicates_confirmation": "Er du sikker på, at du vil slette disse dubletter permanent?", "delete_duplicates_confirmation": "Er du sikker på, at du vil slette disse dubletter permanent?",
"delete_face": "Slet ansigt",
"delete_key": "Slet nøgle", "delete_key": "Slet nøgle",
"delete_library": "Slet bibliotek", "delete_library": "Slet bibliotek",
"delete_link": "Slet link", "delete_link": "Slet link",
@@ -565,7 +571,7 @@
"download_settings": "Download", "download_settings": "Download",
"download_settings_description": "Administrer indstillinger relateret til mediefil-downloads", "download_settings_description": "Administrer indstillinger relateret til mediefil-downloads",
"downloading": "Downloader", "downloading": "Downloader",
"downloading_asset_filename": "Downloader aktiv {filename}", "downloading_asset_filename": "Downloader mediefil {filename}",
"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",
@@ -600,6 +606,7 @@
"enabled": "Aktiveret", "enabled": "Aktiveret",
"end_date": "Slutdato", "end_date": "Slutdato",
"error": "Fejl", "error": "Fejl",
"error_delete_face": "Fejl ved sletning af ansigt fra mediefil",
"error_loading_image": "Fejl ved indlæsning af billede", "error_loading_image": "Fejl ved indlæsning af billede",
"error_title": "Fejl - Noget gik galt", "error_title": "Fejl - Noget gik galt",
"errors": { "errors": {
@@ -607,11 +614,11 @@
"cannot_navigate_previous_asset": "Kan ikke navigere til forrige mediefil", "cannot_navigate_previous_asset": "Kan ikke navigere til forrige mediefil",
"cant_apply_changes": "Ændringerne kan ikke anvendes", "cant_apply_changes": "Ændringerne kan ikke anvendes",
"cant_change_activity": "Kan ikke {enabled, select, true {disable} other {enable}} aktivitet", "cant_change_activity": "Kan ikke {enabled, select, true {disable} other {enable}} aktivitet",
"cant_change_asset_favorite": "Kan ikke ændre favorit til aktiv", "cant_change_asset_favorite": "Kan ikke ændre favorit til mediefil",
"cant_change_metadata_assets_count": "Kan ikke ændre metadata for {count, plural, one {# objekt} other {# objekter}}", "cant_change_metadata_assets_count": "Kan ikke ændre metadata for {count, plural, one {# objekt} other {# objekter}}",
"cant_get_faces": "Kan ikke hente ansigter", "cant_get_faces": "Kan ikke hente ansigter",
"cant_get_number_of_comments": "Kan ikke få antallet af kommentarer", "cant_get_number_of_comments": "Kan ikke få antallet af kommentarer",
"cant_search_people": "Kan ikke søge efter folk", "cant_search_people": "Kan ikke søge efter personer",
"cant_search_places": "Kan ikke søge efter steder", "cant_search_places": "Kan ikke søge efter steder",
"cleared_jobs": "Ryddede opgaver for: {job}", "cleared_jobs": "Ryddede opgaver for: {job}",
"error_adding_assets_to_album": "Fejl i tilføjelse af mediefiler til album", "error_adding_assets_to_album": "Fejl i tilføjelse af mediefiler til album",
@@ -620,20 +627,20 @@
"error_downloading": "Fejl i download af {filename}", "error_downloading": "Fejl i download af {filename}",
"error_hiding_buy_button": "Fejl i skjulning af køb-knap", "error_hiding_buy_button": "Fejl i skjulning af køb-knap",
"error_removing_assets_from_album": "Fejl i fjernelse af mediefiler fra album. Tjek konsol for flere detaljer", "error_removing_assets_from_album": "Fejl i fjernelse af mediefiler fra album. Tjek konsol for flere detaljer",
"error_selecting_all_assets": "Fejl ved valg af alle aktiver", "error_selecting_all_assets": "Fejl ved valg af alle mediefiler",
"exclusion_pattern_already_exists": "Denne udelukkelsesmønster findes allerede.", "exclusion_pattern_already_exists": "Denne udelukkelsesmønster findes allerede.",
"failed_job_command": "Kommando {command} slog fejl for opgave: {job}", "failed_job_command": "Kommando {command} slog fejl for opgave: {job}",
"failed_to_create_album": "Oprettelse af album mislykkedes", "failed_to_create_album": "Oprettelse af album mislykkedes",
"failed_to_create_shared_link": "Oprettelse af delt link mislykkedes", "failed_to_create_shared_link": "Oprettelse af delt link mislykkedes",
"failed_to_edit_shared_link": "Redigering af delt link mislykkedes", "failed_to_edit_shared_link": "Redigering af delt link mislykkedes",
"failed_to_get_people": "Det lykkedes ikke at hente folk", "failed_to_get_people": "Det lykkedes ikke at hente personer",
"failed_to_keep_this_delete_others": "Kunne ikke beholde dette aktiv og slette de andre aktiver", "failed_to_keep_this_delete_others": "Kunne ikke beholde denne mediefil og slette de andre mediefiler",
"failed_to_load_asset": "Indlæsning af mediefil mislykkedes", "failed_to_load_asset": "Indlæsning af mediefil mislykkedes",
"failed_to_load_assets": "Indlæsning af mediefiler mislykkedes", "failed_to_load_assets": "Indlæsning af mediefiler mislykkedes",
"failed_to_load_people": "Indlæsning af personer mislykkedes", "failed_to_load_people": "Indlæsning af personer mislykkedes",
"failed_to_remove_product_key": "Fjernelse af produktnøgle mislykkedes", "failed_to_remove_product_key": "Fjernelse af produktnøgle mislykkedes",
"failed_to_stack_assets": "Det lykkedes ikke at stable aktiver", "failed_to_stack_assets": "Det lykkedes ikke at stable mediefiler",
"failed_to_unstack_assets": "Det lykkedes ikke at fjerne stablen af aktiver", "failed_to_unstack_assets": "Det lykkedes ikke at fjerne gruperingen af mediefiler",
"import_path_already_exists": "Denne importsti findes allerede.", "import_path_already_exists": "Denne importsti findes allerede.",
"incorrect_email_or_password": "Forkert email eller kodeord", "incorrect_email_or_password": "Forkert email eller kodeord",
"paths_validation_failed": "{paths, plural, one {# sti} other {# stier}} slog fejl ved validering", "paths_validation_failed": "{paths, plural, one {# sti} other {# stier}} slog fejl ved validering",
@@ -641,7 +648,7 @@
"quota_higher_than_disk_size": "Du har sat en kvote der er større end disken", "quota_higher_than_disk_size": "Du har sat en kvote der er større end disken",
"repair_unable_to_check_items": "Kunne ikke tjekke {count, select, one {element} other {elementer}}", "repair_unable_to_check_items": "Kunne ikke tjekke {count, select, one {element} other {elementer}}",
"unable_to_add_album_users": "Ikke i stand til at tilføje brugere til album", "unable_to_add_album_users": "Ikke i stand til at tilføje brugere til album",
"unable_to_add_assets_to_shared_link": "Kan ikke tilføje aktiver til delt link", "unable_to_add_assets_to_shared_link": "Kan ikke tilføje mediefiler til det delte link",
"unable_to_add_comment": "Ikke i stand til at tilføje kommentar", "unable_to_add_comment": "Ikke i stand til at tilføje kommentar",
"unable_to_add_exclusion_pattern": "Kunne ikke tilføje udelukkelsesmønster", "unable_to_add_exclusion_pattern": "Kunne ikke tilføje udelukkelsesmønster",
"unable_to_add_import_path": "Kunne ikke tilføje importsti", "unable_to_add_import_path": "Kunne ikke tilføje importsti",
@@ -651,7 +658,7 @@
"unable_to_archive_unarchive": "Ude af stand til at {archived, select, true {arkivere} other {fjerne fra arkiv}}", "unable_to_archive_unarchive": "Ude af stand til at {archived, select, true {arkivere} other {fjerne fra arkiv}}",
"unable_to_change_album_user_role": "Ikke i stand til at ændre albumbrugerens rolle", "unable_to_change_album_user_role": "Ikke i stand til at ændre albumbrugerens rolle",
"unable_to_change_date": "Ikke i stand til at ændre dato", "unable_to_change_date": "Ikke i stand til at ændre dato",
"unable_to_change_favorite": "Kan ikke ændre favorit for aktiv", "unable_to_change_favorite": "Kan ikke ændre favorit for mediefil",
"unable_to_change_location": "Ikke i stand til at ændre sted", "unable_to_change_location": "Ikke i stand til at ændre sted",
"unable_to_change_password": "Kunne ikke ændre adgangskode", "unable_to_change_password": "Kunne ikke ændre adgangskode",
"unable_to_change_visibility": "Kan ikke ændre synligheden for {count, plural, one {# person} other {# personer}}", "unable_to_change_visibility": "Kan ikke ændre synligheden for {count, plural, one {# person} other {# personer}}",
@@ -698,16 +705,16 @@
"unable_to_remove_deleted_assets": "Kunne ikke fjerne offlinefiler", "unable_to_remove_deleted_assets": "Kunne ikke fjerne offlinefiler",
"unable_to_remove_library": "Ikke i stand til at fjerne bibliotek", "unable_to_remove_library": "Ikke i stand til at fjerne bibliotek",
"unable_to_remove_partner": "Ikke i stand til at fjerne partner", "unable_to_remove_partner": "Ikke i stand til at fjerne partner",
"unable_to_remove_reaction": "Ikke i stand til at reaktion", "unable_to_remove_reaction": "Ikke i stand til at fjerne reaktion",
"unable_to_repair_items": "Ikke i stand til at reparere ting", "unable_to_repair_items": "Ikke i stand til at reparere ting",
"unable_to_reset_password": "Ikke i stand til at nulstille adgangskode", "unable_to_reset_password": "Ikke i stand til at nulstille adgangskode",
"unable_to_resolve_duplicate": "Kunne ikke opklare duplikat", "unable_to_resolve_duplicate": "Kunne ikke opklare duplikat",
"unable_to_restore_assets": "Kunne ikke genoprette medier", "unable_to_restore_assets": "Kunne ikke gendanne medierfil",
"unable_to_restore_trash": "Ikke i stand til at genoprette skrald", "unable_to_restore_trash": "Ikke i stand til at gendanne fra skraldespanden",
"unable_to_restore_user": "Ikke i stand til at genoprette bruger", "unable_to_restore_user": "Ikke i stand til at gendanne bruger",
"unable_to_save_album": "Ikke i stand til at gemme album", "unable_to_save_album": "Ikke i stand til at gemme album",
"unable_to_save_api_key": "Kunne ikke gemme API-nøgle", "unable_to_save_api_key": "Kunne ikke gemme API-nøgle",
"unable_to_save_date_of_birth": "Kan ikke gemme fødselsdatoen", "unable_to_save_date_of_birth": "Kunne ikke gemme fødselsdatoen",
"unable_to_save_name": "Ikke i stand til at gemme navn", "unable_to_save_name": "Ikke i stand til at gemme navn",
"unable_to_save_profile": "Ikke i stand til at gemme profil", "unable_to_save_profile": "Ikke i stand til at gemme profil",
"unable_to_save_settings": "Ikke i stand til at gemme indstillinger", "unable_to_save_settings": "Ikke i stand til at gemme indstillinger",
@@ -729,7 +736,7 @@
"unable_to_upload_file": "Filen kunne ikke uploades" "unable_to_upload_file": "Filen kunne ikke uploades"
}, },
"exif": "Exif", "exif": "Exif",
"exit_slideshow": "Forlad slideshow", "exit_slideshow": "Afslut slideshow",
"expand_all": "Udvid alle", "expand_all": "Udvid alle",
"expire_after": "Udløb efter", "expire_after": "Udløb efter",
"expired": "Udløbet", "expired": "Udløbet",
@@ -742,7 +749,7 @@
"external": "Ekstern", "external": "Ekstern",
"external_libraries": "Eksterne biblioteker", "external_libraries": "Eksterne biblioteker",
"face_unassigned": "Ikke tildelt", "face_unassigned": "Ikke tildelt",
"failed_to_load_assets": "Kunne ikke indlæse aktiver", "failed_to_load_assets": "Kunne ikke indlæse mediefiler",
"favorite": "Favorit", "favorite": "Favorit",
"favorite_or_unfavorite_photo": "Tilføj eller fjern fra yndlingsbilleder", "favorite_or_unfavorite_photo": "Tilføj eller fjern fra yndlingsbilleder",
"favorites": "Favoritter", "favorites": "Favoritter",
@@ -774,10 +781,10 @@
"has_quota": "Har kvote", "has_quota": "Har kvote",
"hi_user": "Hej {name} ({email})", "hi_user": "Hej {name} ({email})",
"hide_all_people": "Skjul alle personer", "hide_all_people": "Skjul alle personer",
"hide_gallery": "Gem galleri", "hide_gallery": "Skjul galleri",
"hide_named_person": "Skjul person {name}", "hide_named_person": "Skjul person {name}",
"hide_password": "Gem adgangskode", "hide_password": "Skjul adgangskode",
"hide_person": "Gem person", "hide_person": "Skjul person",
"hide_unnamed_people": "Skjul unavngivne personer", "hide_unnamed_people": "Skjul unavngivne personer",
"host": "Host", "host": "Host",
"hour": "Time", "hour": "Time",
@@ -817,7 +824,7 @@
"keep": "Behold", "keep": "Behold",
"keep_all": "Behold alle", "keep_all": "Behold alle",
"keep_this_delete_others": "Behold dette, slet andre", "keep_this_delete_others": "Behold dette, slet andre",
"kept_this_deleted_others": "Beholdt dette aktiv og slettede {count, plural, one {# aktiv} other {# aktiver}}", "kept_this_deleted_others": "Beholdt denne mediefil og slettede {count, plural, one {# aktiv} other {# aktiver}}",
"keyboard_shortcuts": "Tastaturgenveje", "keyboard_shortcuts": "Tastaturgenveje",
"language": "Sprog", "language": "Sprog",
"language_setting_description": "Vælg dit foretrukne sprog", "language_setting_description": "Vælg dit foretrukne sprog",
@@ -837,8 +844,8 @@
"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",
"loading": "Loader", "loading": "Indlæser",
"loading_search_results_failed": "At loade søgeresultater slog fejl", "loading_search_results_failed": "Indlæsning af søgeresultater fejlede",
"log_out": "Log ud", "log_out": "Log ud",
"log_out_all_devices": "Log ud af alle enheder", "log_out_all_devices": "Log ud af alle enheder",
"logged_out_all_devices": "Logget ud af alle enheder", "logged_out_all_devices": "Logget ud af alle enheder",
@@ -874,7 +881,7 @@
"merge": "Sammenflet", "merge": "Sammenflet",
"merge_people": "Sammenflet personer", "merge_people": "Sammenflet personer",
"merge_people_limit": "Du kan kun flette op til 5 ansigter ad gangen", "merge_people_limit": "Du kan kun flette op til 5 ansigter ad gangen",
"merge_people_prompt": "Vil du slå disse mennesker sammen? Denne handling er uigenkaldelig.", "merge_people_prompt": "Vil du flette disse mennesker sammen? Denne handling er uigenkaldelig.",
"merge_people_successfully": "Personer sammenflettet med succes", "merge_people_successfully": "Personer sammenflettet med succes",
"merged_people_count": "{count, plural, one {# person} other {# personer}} lagt sammen", "merged_people_count": "{count, plural, one {# person} other {# personer}} lagt sammen",
"minimize": "Minimér", "minimize": "Minimér",
@@ -884,6 +891,7 @@
"month": "Måned", "month": "Måned",
"more": "Mere", "more": "Mere",
"moved_to_trash": "Flyttet til skraldespand", "moved_to_trash": "Flyttet til skraldespand",
"mute_memories": "Dæmp minder",
"my_albums": "Mine albummer", "my_albums": "Mine albummer",
"name": "Navn", "name": "Navn",
"name_or_nickname": "Navn eller kælenavn", "name_or_nickname": "Navn eller kælenavn",
@@ -901,7 +909,7 @@
"no_albums_message": "Opret et album for at organisere dine billeder og videoer", "no_albums_message": "Opret et album for at organisere dine billeder og videoer",
"no_albums_with_name_yet": "Det ser ud til, at du ikke har noget album med dette navn endnu.", "no_albums_with_name_yet": "Det ser ud til, at du ikke har noget album med dette navn endnu.",
"no_albums_yet": "Det ser ud til, at du ikke har nogen album endnu.", "no_albums_yet": "Det ser ud til, at du ikke har nogen album endnu.",
"no_archived_assets_message": "Arkivér billeder og fotos for at gemme dem væk fra dit Billed-view", "no_archived_assets_message": "Arkivér billeder og videoer for at gemme dem væk fra din Billede oversigt",
"no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE", "no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE",
"no_duplicates_found": "Ingen duplikater fundet.", "no_duplicates_found": "Ingen duplikater fundet.",
"no_exif_info_available": "Ingen tilgængelig exif information", "no_exif_info_available": "Ingen tilgængelig exif information",
@@ -948,7 +956,7 @@
"owner": "Ejer", "owner": "Ejer",
"partner": "Partner", "partner": "Partner",
"partner_can_access": "{partner} kan tilgå", "partner_can_access": "{partner} kan tilgå",
"partner_can_access_assets": "Alle dine billeder og videoer, bortset fra dem i Arkiveret og Slettet", "partner_can_access_assets": "Alle dine billeder og videoer, bortset fra dem i Arkivet og Slettet",
"partner_can_access_location": "Stedet, hvor dine billeder blev taget", "partner_can_access_location": "Stedet, hvor dine billeder blev taget",
"partner_sharing": "Partnerdeling", "partner_sharing": "Partnerdeling",
"partners": "Partnere", "partners": "Partnere",
@@ -979,6 +987,7 @@
"permanently_deleted_asset": "Permanent slettet medie", "permanently_deleted_asset": "Permanent slettet medie",
"permanently_deleted_assets_count": "{count, plural, one {# aktiv} other {# aktiver}} permanent slettet", "permanently_deleted_assets_count": "{count, plural, one {# aktiv} other {# aktiver}} permanent slettet",
"person": "Person", "person": "Person",
"person_birthdate": "Født den {date}",
"person_hidden": "{name}{hidden, select, true { (skjult)} other {}}", "person_hidden": "{name}{hidden, select, true { (skjult)} other {}}",
"photo_shared_all_users": "Det ser ud til, at du har delt dine billeder med alle brugere, eller også har du ikke nogen bruger at dele med.", "photo_shared_all_users": "Det ser ud til, at du har delt dine billeder med alle brugere, eller også har du ikke nogen bruger at dele med.",
"photos": "Billeder", "photos": "Billeder",
@@ -992,7 +1001,7 @@
"play": "Afspil", "play": "Afspil",
"play_memories": "Afspil minder", "play_memories": "Afspil minder",
"play_motion_photo": "Afspil bevægelsesbillede", "play_motion_photo": "Afspil bevægelsesbillede",
"play_or_pause_video": "Afspil eller paus video", "play_or_pause_video": "Afspil eller pause video",
"port": "Port", "port": "Port",
"preset": "Forudindstilling", "preset": "Forudindstilling",
"preview": "Forhåndsvisning", "preview": "Forhåndsvisning",
@@ -1046,7 +1055,7 @@
"reassign": "Gentildel", "reassign": "Gentildel",
"reassigned_assets_to_existing_person": "{count, plural, one {# mediefil} other {# mediefiler}} er blevet gentildelt til {name, select, null {en eksisterende person} other {{name}}}", "reassigned_assets_to_existing_person": "{count, plural, one {# mediefil} other {# mediefiler}} er blevet gentildelt til {name, select, null {en eksisterende person} other {{name}}}",
"reassigned_assets_to_new_person": "Gentildelt {count, plural, one {# aktiv} other {# aktiver}} til en ny person", "reassigned_assets_to_new_person": "Gentildelt {count, plural, one {# aktiv} other {# aktiver}} til en ny person",
"reassing_hint": "Tildel valgte aktiver til en eksisterende person", "reassing_hint": "Tildel valgte mediefiler til en eksisterende person",
"recent": "For nylig", "recent": "For nylig",
"recent-albums": "Seneste albums", "recent-albums": "Seneste albums",
"recent_searches": "Seneste søgninger", "recent_searches": "Seneste søgninger",
@@ -1064,26 +1073,31 @@
"remove": "Fjern", "remove": "Fjern",
"remove_assets_album_confirmation": "Er du sikker på, at du vil fjerne {count, plural, one {# aktiv} other {# aktiver}} fra albummet?", "remove_assets_album_confirmation": "Er du sikker på, at du vil fjerne {count, plural, one {# aktiv} other {# aktiver}} fra albummet?",
"remove_assets_shared_link_confirmation": "Er du sikker på, at du vil fjerne {count, plural, one {# aktiv} other {# aktiver}} fra dette delte link?", "remove_assets_shared_link_confirmation": "Er du sikker på, at du vil fjerne {count, plural, one {# aktiv} other {# aktiver}} fra dette delte link?",
"remove_assets_title": "Fjern aktiver?", "remove_assets_title": "Fjern mediefiler?",
"remove_custom_date_range": "Fjern tilpasset datointerval", "remove_custom_date_range": "Fjern tilpasset datointerval",
"remove_deleted_assets": "Fjern fra offlinefiler", "remove_deleted_assets": "Fjern slettede mediefiler",
"remove_from_album": "Fjern fra album", "remove_from_album": "Fjern fra album",
"remove_from_favorites": "Fjern fra favoritter", "remove_from_favorites": "Fjern fra favoritter",
"remove_from_shared_link": "Fjern fra delt link", "remove_from_shared_link": "Fjern fra delt link",
"remove_memory": "Fjern minde",
"remove_photo_from_memory": "Fjern foto fra dette minde",
"remove_url": "Fjern URL", "remove_url": "Fjern URL",
"remove_user": "Fjern bruger", "remove_user": "Fjern bruger",
"removed_api_key": "Fjernede API-nøgle: {name}", "removed_api_key": "Fjernede API-nøgle: {name}",
"removed_from_archive": "Fjernet fra arkiv", "removed_from_archive": "Fjernet fra arkiv",
"removed_from_favorites": "Fjernet fra favoritter", "removed_from_favorites": "Fjernet fra favoritter",
"removed_from_favorites_count": "{count, plural, other {Fjernede #}} fra favoritter", "removed_from_favorites_count": "{count, plural, other {Fjernede #}} fra favoritter",
"removed_memory": "Fjernede minde",
"removed_photo_from_memory": "Fjernede foto fra minde",
"removed_tagged_assets": "Fjernede tag fra {count, plural, one {# aktiv} other {# aktiver}}", "removed_tagged_assets": "Fjernede tag fra {count, plural, one {# aktiv} other {# aktiver}}",
"rename": "Omdøb", "rename": "Omdøb",
"repair": "Reparér", "repair": "Reparér",
"repair_no_results_message": "Utrackede og manglende filer vil blive vist her", "repair_no_results_message": "Usporede og manglende filer vil blive vist her",
"replace_with_upload": "Erstat med upload", "replace_with_upload": "Erstat med upload",
"repository": "Depot", "repository": "Depot",
"require_password": "Kræv adgangskode", "require_password": "Kræv adgangskode",
"require_user_to_change_password_on_first_login": "Kræv at bruger skifter adgangskode ved første login", "require_user_to_change_password_on_first_login": "Kræv at bruger skifter adgangskode ved første login",
"rescan": "Genopfrisk",
"reset": "Nulstil", "reset": "Nulstil",
"reset_password": "Nulstil adgangskode", "reset_password": "Nulstil adgangskode",
"reset_people_visibility": "Nulstil personsynlighed", "reset_people_visibility": "Nulstil personsynlighed",
@@ -1093,19 +1107,19 @@
"restore": "Gendan", "restore": "Gendan",
"restore_all": "Gendan alle", "restore_all": "Gendan alle",
"restore_user": "Gendan bruger", "restore_user": "Gendan bruger",
"restored_asset": "Gendannet aktiv", "restored_asset": "Gendannet mediefilen",
"resume": "Genoptag", "resume": "Genoptag",
"retry_upload": "Forsøg upload igen", "retry_upload": "Forsøg upload igen",
"review_duplicates": "Gennemgå dubletter", "review_duplicates": "Gennemgå dubletter",
"role": "Rolle", "role": "Rolle",
"role_editor": "Editor", "role_editor": "Redaktør",
"role_viewer": "Seer", "role_viewer": "Seer",
"save": "Gem", "save": "Gem",
"saved_api_key": "Gemt API-nøgle", "saved_api_key": "Gemt API-nøgle",
"saved_profile": "Gemte profil", "saved_profile": "Gemte profil",
"saved_settings": "Gemte indstillinger", "saved_settings": "Gemte indstillinger",
"say_something": "Skriv noget", "say_something": "Skriv noget",
"scan_all_libraries": "Skan gennem alle biblioteker", "scan_all_libraries": "Skan alle biblioteker",
"scan_library": "Skan", "scan_library": "Skan",
"scan_settings": "Skanningsindstillinger", "scan_settings": "Skanningsindstillinger",
"scanning_for_album": "Skanner efter albummer...", "scanning_for_album": "Skanner efter albummer...",
@@ -1127,8 +1141,9 @@
"search_options": "Søgemuligheder", "search_options": "Søgemuligheder",
"search_people": "Søg i personer", "search_people": "Søg i personer",
"search_places": "Søg i steder", "search_places": "Søg i steder",
"search_rating": "Søg efter vurdering...",
"search_settings": "søgeindstillinger", "search_settings": "søgeindstillinger",
"search_state": "Søg efter stat...", "search_state": "Søg efter lansdel...",
"search_tags": "Søg tags...", "search_tags": "Søg tags...",
"search_timezone": "Søg i tidszone...", "search_timezone": "Søg i tidszone...",
"search_type": "Søg efter type", "search_type": "Søg efter type",
@@ -1136,6 +1151,7 @@
"searching_locales": "Søger lokaler...", "searching_locales": "Søger lokaler...",
"second": "Sekund", "second": "Sekund",
"see_all_people": "Se alle personer", "see_all_people": "Se alle personer",
"select": "Vælg",
"select_album_cover": "Vælg albumcover", "select_album_cover": "Vælg albumcover",
"select_all": "Vælg alle", "select_all": "Vælg alle",
"select_all_duplicates": "Vælg alle dubletter", "select_all_duplicates": "Vælg alle dubletter",
@@ -1183,15 +1199,15 @@
"show_album_options": "Vis albumindstillinger", "show_album_options": "Vis albumindstillinger",
"show_albums": "Vis albummer", "show_albums": "Vis albummer",
"show_all_people": "Vis alle personer", "show_all_people": "Vis alle personer",
"show_and_hide_people": "Vis & gem personer", "show_and_hide_people": "Vis & skjul personer",
"show_file_location": "Vis filplacering", "show_file_location": "Vis filplacering",
"show_gallery": "Vis galleri", "show_gallery": "Vis galleri",
"show_hidden_people": "Vis gemte personer", "show_hidden_people": "Vis skjulte personer",
"show_in_timeline": "Vis på tidslinje", "show_in_timeline": "Vis på tidslinje",
"show_in_timeline_setting_description": "Vis billeder og videoer fra denne bruger på din tidslinje", "show_in_timeline_setting_description": "Vis billeder og videoer fra denne bruger på din tidslinje",
"show_keyboard_shortcuts": "Vis tastaturgenveje", "show_keyboard_shortcuts": "Vis tastaturgenveje",
"show_metadata": "Vis metadata", "show_metadata": "Vis metadata",
"show_or_hide_info": "Vis eller gem info", "show_or_hide_info": "Vis eller skjul info",
"show_password": "Vis adgangskode", "show_password": "Vis adgangskode",
"show_person_options": "Vis personindstillinger", "show_person_options": "Vis personindstillinger",
"show_progress_bar": "Vis statuslinje", "show_progress_bar": "Vis statuslinje",
@@ -1216,7 +1232,7 @@
"sort_items": "Antal genstande", "sort_items": "Antal genstande",
"sort_modified": "Ændret dato", "sort_modified": "Ændret dato",
"sort_oldest": "Ældste foto", "sort_oldest": "Ældste foto",
"sort_people_by_similarity": "Sorter folk efter lighed", "sort_people_by_similarity": "Sorter efter personer der ligner hinanden",
"sort_recent": "Seneste foto", "sort_recent": "Seneste foto",
"sort_title": "Titel", "sort_title": "Titel",
"source": "Kilde", "source": "Kilde",
@@ -1242,14 +1258,15 @@
"sunrise_on_the_beach": "Solopgang på stranden", "sunrise_on_the_beach": "Solopgang på stranden",
"support": "Support", "support": "Support",
"support_and_feedback": "Support & Feedback", "support_and_feedback": "Support & Feedback",
"support_third_party_description": "Din Immich-installation blev pakket af en tredjepart. Problemer, du oplever, kan være forårsaget af denne pakke, så rejs venligst problemer med dem i første omgang ved at bruge nedenstående links.", "support_third_party_description": "Din Immich-installation blev sammensat af en tredjepart. Problemer, du oplever, kan være forårsaget af denne udvikler, så rejs venligst problemer med dem i første omgang ved at bruge nedenstående links.",
"swap_merge_direction": "Byt retning for sammenfletning", "swap_merge_direction": "Byt retning for sammenfletning",
"sync": "Synkronisér", "sync": "Synkronisér",
"tag": "Tag", "tag": "Tag",
"tag_assets": "Tag aktiver", "tag_assets": "Tag mediefiler",
"tag_created": "Oprettet tag: {tag}", "tag_created": "Oprettet tag: {tag}",
"tag_feature_description": "Gennemse billeder og videoer grupperet efter logiske tag-emner", "tag_feature_description": "Gennemse billeder og videoer grupperet efter logiske tag-emner",
"tag_not_found_question": "Kan du ikke finde et tag? <link>Opret et nyt tag.</link>", "tag_not_found_question": "Kan du ikke finde et tag? <link>Opret et nyt tag.</link>",
"tag_people": "Tag personer",
"tag_updated": "Opdateret tag: {tag}", "tag_updated": "Opdateret tag: {tag}",
"tagged_assets": "Tagget {count, plural, one {# aktiv} other {# aktiver}}", "tagged_assets": "Tagget {count, plural, one {# aktiv} other {# aktiver}}",
"tags": "Tags", "tags": "Tags",
@@ -1275,14 +1292,14 @@
"trash": "Papirkurv", "trash": "Papirkurv",
"trash_all": "Smid alle ud", "trash_all": "Smid alle ud",
"trash_count": "Slet {count, number}", "trash_count": "Slet {count, number}",
"trash_delete_asset": "Papirkurv/slet aktiv", "trash_delete_asset": "Flyt mediefil til Papirkurv",
"trash_no_results_message": "Billeder og videoer markeret til sletning vil blive vist her.", "trash_no_results_message": "Billeder og videoer markeret til sletning vil blive vist her.",
"trashed_items_will_be_permanently_deleted_after": "Mediefiler i skraldespanden vil blive slettet permanent efter {days, plural, one {# dag} other {# dage}}.", "trashed_items_will_be_permanently_deleted_after": "Mediefiler i skraldespanden vil blive slettet permanent efter {days, plural, one {# dag} other {# dage}}.",
"type": "Type", "type": "Type",
"unarchive": "Afakivér", "unarchive": "Afakivér",
"unarchived_count": "{count, plural, other {Uarkiveret #}}", "unarchived_count": "{count, plural, other {Uarkiveret #}}",
"unfavorite": "Fjern favorit", "unfavorite": "Fjern favorit",
"unhide_person": "Hold op med at gemme person væk", "unhide_person": "Stop med at skjule person",
"unknown": "Ukendt", "unknown": "Ukendt",
"unknown_country": "Ukendt land", "unknown_country": "Ukendt land",
"unknown_year": "Ukendt år", "unknown_year": "Ukendt år",
@@ -1290,6 +1307,7 @@
"unlink_motion_video": "Fjern link til bevægelsesvideo", "unlink_motion_video": "Fjern link til bevægelsesvideo",
"unlink_oauth": "Frakobl OAuth", "unlink_oauth": "Frakobl OAuth",
"unlinked_oauth_account": "Frakoblede OAuth-konto", "unlinked_oauth_account": "Frakoblede OAuth-konto",
"unmute_memories": "Ophæv dæmpning af minder",
"unnamed_album": "Unavngivet album", "unnamed_album": "Unavngivet album",
"unnamed_album_delete_confirmation": "Er du sikker på, at du vil slette dette album?", "unnamed_album_delete_confirmation": "Er du sikker på, at du vil slette dette album?",
"unnamed_share": "Unavngivet deling", "unnamed_share": "Unavngivet deling",
@@ -1303,7 +1321,7 @@
"up_next": "Næste", "up_next": "Næste",
"updated_password": "Opdaterede adgangskode", "updated_password": "Opdaterede adgangskode",
"upload": "Upload", "upload": "Upload",
"upload_concurrency": "Uploadsamtidighed", "upload_concurrency": "Upload samtidighed",
"upload_errors": "Upload afsluttet med {count, plural, one {# fejl} other {# fejl}}. Opdater siden for at se nye uploadaktiver.", "upload_errors": "Upload afsluttet med {count, plural, one {# fejl} other {# fejl}}. Opdater siden for at se nye uploadaktiver.",
"upload_progress": "Resterende {remaining, number} - Behandlet {processed, number}/{total, number}", "upload_progress": "Resterende {remaining, number} - Behandlet {processed, number}/{total, number}",
"upload_skipped_duplicates": "Sprang over {count, plural, one {# duplet aktiv} other {# duplikerede aktiver}}", "upload_skipped_duplicates": "Sprang over {count, plural, one {# duplet aktiv} other {# duplikerede aktiver}}",
@@ -1321,7 +1339,7 @@
"user_purchase_settings_description": "Administrer dit køb", "user_purchase_settings_description": "Administrer dit køb",
"user_role_set": "Indstil {user} som {role}", "user_role_set": "Indstil {user} som {role}",
"user_usage_detail": "Detaljer om brugers forbrug", "user_usage_detail": "Detaljer om brugers forbrug",
"user_usage_stats": "Konto anvendelsesstatistik", "user_usage_stats": "Kontoens anvendelsesstatistik",
"user_usage_stats_description": "Vis konto anvendelsesstatistik", "user_usage_stats_description": "Vis konto anvendelsesstatistik",
"username": "Brugernavn", "username": "Brugernavn",
"users": "Brugere", "users": "Brugere",
@@ -1343,6 +1361,7 @@
"view_all": "Se alle", "view_all": "Se alle",
"view_all_users": "Se alle brugere", "view_all_users": "Se alle brugere",
"view_in_timeline": "Se på tidslinjen", "view_in_timeline": "Se på tidslinjen",
"view_link": "Vis Link",
"view_links": "Vis links", "view_links": "Vis links",
"view_name": "Se", "view_name": "Se",
"view_next_asset": "Se næste medie", "view_next_asset": "Se næste medie",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Datensicherungs-Einstellungen", "backup_settings": "Datensicherungs-Einstellungen",
"backup_settings_description": "Datensicherungs-Einstellungen verwalten", "backup_settings_description": "Datensicherungs-Einstellungen verwalten",
"check_all": "Alle überprüfen", "check_all": "Alle überprüfen",
"cleanup": "Aufräumen",
"cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}", "cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}",
"config_set_by_file": "Ist derzeit in einer Konfigurationsdatei festgelegt", "config_set_by_file": "Ist derzeit in einer Konfigurationsdatei festgelegt",
"confirm_delete_library": "Bist du sicher, dass du die Bibliothek {library} löschen willst?", "confirm_delete_library": "Bist du sicher, dass du die Bibliothek {library} löschen willst?",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "Erneutes Laden aller Bibliotheksdateien erzwingen", "forcing_refresh_library_files": "Erneutes Laden aller Bibliotheksdateien erzwingen",
"image_format": "Format", "image_format": "Format",
"image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist aber etwas langsamer in der Erstellung.", "image_format_description": "WebP erzeugt kleinere Dateien als JPEG, ist aber etwas langsamer in der Erstellung.",
"image_fullsize_description": "Hochauflösendes Bild mit entfernten Metadaten, das beim Zoomen verwendet wird",
"image_fullsize_enabled": "Hochauflösende Vorschaubilder aktivieren",
"image_fullsize_enabled_description": "Generiere Hochauflösende Vorschaubilder in Originalauflösung für nicht web-kompatibel Formate. Wenn \"Eingebettete Vorschau bevorzugen\" aktiviert ist, werden eingebettete Vorschaubilder direkt verwendet. Hat keinen Einfluss auf web-kompatible Formate wie JPEG.",
"image_fullsize_quality_description": "Qualität der Hochauflösenden Vorschaubilder von 1-100. Höher ist besser, erzeugt aber größere Dateien.",
"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": "Breites Spektrum bevorzugen",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Regelmäßiges Scannen der Bibliothek aktivieren", "library_scanning_enable_description": "Regelmäßiges Scannen der Bibliothek aktivieren",
"library_settings": "Externe Bibliothek", "library_settings": "Externe Bibliothek",
"library_settings_description": "Einstellungen externer Bibliotheken verwalten", "library_settings_description": "Einstellungen externer Bibliotheken verwalten",
"library_tasks_description": "Diese Aufgabe aktualisiert und überprüft die Bibliotheken", "library_tasks_description": "Überprüfe externe Bibliotheken auf neue oder veränderte Medien",
"library_watching_enable_description": "Überwache externe Bibliotheken auf Dateiänderungen", "library_watching_enable_description": "Überwache externe Bibliotheken auf Dateiänderungen",
"library_watching_settings": "Bibliotheksüberwachung (EXPERIMENTELL)", "library_watching_settings": "Bibliotheksüberwachung (EXPERIMENTELL)",
"library_watching_settings_description": "Automatisch auf geänderte Dateien prüfen", "library_watching_settings_description": "Automatisch auf geänderte Dateien prüfen",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Semantische Bildsuche mittels CLIP-Einbettungen", "machine_learning_smart_search_description": "Semantische Bildsuche mittels CLIP-Einbettungen",
"machine_learning_smart_search_enabled": "Intelligente Suche aktivieren", "machine_learning_smart_search_enabled": "Intelligente Suche aktivieren",
"machine_learning_smart_search_enabled_description": "Ist diese Option deaktiviert, werden die Bilder nicht für die intelligente Suche verwendet.", "machine_learning_smart_search_enabled_description": "Ist diese Option deaktiviert, werden die Bilder nicht für die intelligente Suche verwendet.",
"machine_learning_url_description": "Die URL des Servers für maschinelles Lernen. Wenn mehr als eine URL angegeben wird, wird jeder Server einzeln ausprobiert, bis einer erfolgreich antwortet, und zwar in der Reihenfolge vom ersten bis zum letzten.", "machine_learning_url_description": "Die URL des Servers für maschinelles Lernen. Wenn mehr als eine URL angegeben wird, wird jeder Server einzeln ausprobiert, bis einer erfolgreich antwortet, und zwar in der Reihenfolge vom ersten bis zum letzten. Server die nicht antworten werden temporär ignoriert, bis sie wieder verfügbar sind.",
"manage_concurrency": "Gleichzeitige Ausführungen verwalten", "manage_concurrency": "Gleichzeitige Ausführungen verwalten",
"manage_log_settings": "Log-Einstellungen verwalten", "manage_log_settings": "Log-Einstellungen verwalten",
"map_dark_style": "Dunkler Stil", "map_dark_style": "Dunkler Stil",
@@ -147,6 +153,8 @@
"map_settings": "Karte", "map_settings": "Karte",
"map_settings_description": "Karten- und GPS-Einstellungen verwalten", "map_settings_description": "Karten- und GPS-Einstellungen verwalten",
"map_style_description": "URL zu einem style.json Karten-Theme", "map_style_description": "URL zu einem style.json Karten-Theme",
"memory_cleanup_job": "Erinnerungen aufräumen",
"memory_generate_job": "Erinnerungen Generierung",
"metadata_extraction_job": "Metadaten extrahieren", "metadata_extraction_job": "Metadaten extrahieren",
"metadata_extraction_job_description": "Extrahieren von Metadaten, wie zum Beispiel GPS, Gesichtern und Auflösung aus jeder Datei", "metadata_extraction_job_description": "Extrahieren von Metadaten, wie zum Beispiel GPS, Gesichtern und Auflösung aus jeder Datei",
"metadata_faces_import_setting": "Import von Gesichtern aktivieren", "metadata_faces_import_setting": "Import von Gesichtern aktivieren",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "Aktiviert die Hash-Verifizierung. Deaktiviere diese Option nur, wenn du dir über die damit verbundenen Auswirkungen im Klaren bist", "storage_template_hash_verification_enabled_description": "Aktiviert die Hash-Verifizierung. Deaktiviere diese Option nur, wenn du dir über die damit verbundenen Auswirkungen im Klaren bist",
"storage_template_migration": "Migration von Speichervorlagen", "storage_template_migration": "Migration von Speichervorlagen",
"storage_template_migration_description": "Diese Aufgabe wendet die aktuelle <link>{template}</link> auf zuvor hochgeladene Dateien an", "storage_template_migration_description": "Diese Aufgabe wendet die aktuelle <link>{template}</link> auf zuvor hochgeladene Dateien an",
"storage_template_migration_info": "Vorlagenänderungen gelten nur für neue Dateien. Um die Vorlage rückwirkend auf bereits hochgeladene Assets anzuwenden, führe den <link>{job}</link> aus.", "storage_template_migration_info": "Die Vorlage wird alle Dateierweiterungen in Kleinbuchstaben umwandeln. Vorlagenänderungen gelten nur für neue Dateien. Um die Vorlage rückwirkend auf bereits hochgeladene Assets anzuwenden, führe den <link>{job}</link> aus.",
"storage_template_migration_job": "Speichervorlagenmigrations-Aufgabe", "storage_template_migration_job": "Speichervorlagenmigrations-Aufgabe",
"storage_template_more_details": "Weitere Details zu dieser Funktion findest du unter <template-link>Speichervorlage</template-link> und dessen <implications-link>Implikationen</implications-link>", "storage_template_more_details": "Weitere Details zu dieser Funktion findest du unter <template-link>Speichervorlage</template-link> und dessen <implications-link>Implikationen</implications-link>",
"storage_template_onboarding_description": "Wenn aktiviert, sortiert diese Funktion Dateien automatisch basierend auf einer benutzerdefinierten Vorlage. Aufgrund von Stabilitätsproblemen ist die Funktion standardmäßig deaktiviert. Weitere Informationen findest du in der <link>Dokumentation</link>.", "storage_template_onboarding_description": "Wenn aktiviert, sortiert diese Funktion Dateien automatisch basierend auf einer benutzerdefinierten Vorlage. Aufgrund von Stabilitätsproblemen ist die Funktion standardmäßig deaktiviert. Weitere Informationen findest du in der <link>Dokumentation</link>.",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "Maximale B-Frames", "transcoding_max_b_frames": "Maximale B-Frames",
"transcoding_max_b_frames_description": "Höhere Werte verbessern die Komprimierungseffizienz, verlangsamen aber die Kodierung. Ist möglicherweise nicht mit der Hardware-Beschleunigung älterer Geräte kompatibel. 0 deaktiviert die B-Frames, während -1 diesen Wert automatisch setzt.", "transcoding_max_b_frames_description": "Höhere Werte verbessern die Komprimierungseffizienz, verlangsamen aber die Kodierung. Ist möglicherweise nicht mit der Hardware-Beschleunigung älterer Geräte kompatibel. 0 deaktiviert die B-Frames, während -1 diesen Wert automatisch setzt.",
"transcoding_max_bitrate": "Maximale Bitrate", "transcoding_max_bitrate": "Maximale Bitrate",
"transcoding_max_bitrate_description": "Die Festlegung einer maximalen Bitrate kann die Dateigrößen vorhersagbarer machen, ohne dass die Qualität darunter leidet. Bei 720p sind typische Werte 2600k für VP9 oder HEVC oder 4500k für H.264. Deaktiviert, wenn der Wert auf 0 gesetzt ist.", "transcoding_max_bitrate_description": "Die Festlegung einer maximalen Bitrate kann die Dateigrößen vorhersagbarer machen, ohne dass die Qualität darunter leidet. Bei 720p sind typische Werte 2600 kbit/s für VP9 oder HEVC oder 4500 kbit/s für H.264. Deaktiviert, wenn der Wert auf 0 gesetzt ist.",
"transcoding_max_keyframe_interval": "Maximales Keyframe-Intervall", "transcoding_max_keyframe_interval": "Maximales Keyframe-Intervall",
"transcoding_max_keyframe_interval_description": "Legt den maximalen Frame-Abstand zwischen Keyframes fest. Niedrigere Werte verschlechtern die Komprimierungseffizienz, verbessern aber die Suchzeiten und können die Qualität in Szenen mit schnellen Bewegungen verbessern. Bei 0 wird dieser Wert automatisch eingestellt.", "transcoding_max_keyframe_interval_description": "Legt den maximalen Frame-Abstand zwischen Keyframes fest. Niedrigere Werte verschlechtern die Komprimierungseffizienz, verbessern aber die Suchzeiten und können die Qualität in Szenen mit schnellen Bewegungen verbessern. Bei 0 wird dieser Wert automatisch eingestellt.",
"transcoding_optimal_description": "Videos mit einer höheren Auflösung als der Zielauflösung oder in einem nicht akzeptierten Format", "transcoding_optimal_description": "Videos mit einer höheren Auflösung als der Zielauflösung oder in einem nicht akzeptierten Format",
@@ -391,6 +399,7 @@
"allow_edits": "Bearbeiten erlauben", "allow_edits": "Bearbeiten erlauben",
"allow_public_user_to_download": "Erlaube öffentlichen Benutzern, herunterzuladen", "allow_public_user_to_download": "Erlaube öffentlichen Benutzern, herunterzuladen",
"allow_public_user_to_upload": "Erlaube öffentlichen Benutzern, hochzuladen", "allow_public_user_to_upload": "Erlaube öffentlichen Benutzern, hochzuladen",
"alt_text_qr_code": "QR-Code Bild",
"anti_clockwise": "Gegen den Uhrzeigersinn", "anti_clockwise": "Gegen den Uhrzeigersinn",
"api_key": "API-Schlüssel", "api_key": "API-Schlüssel",
"api_key_description": "Dieser Wert wird nur einmal angezeigt. Bitte kopiere ihn, bevor du das Fenster schließt.", "api_key_description": "Dieser Wert wird nur einmal angezeigt. Bitte kopiere ihn, bevor du das Fenster schließt.",
@@ -481,6 +490,7 @@
"comments_are_disabled": "Kommentare sind deaktiviert", "comments_are_disabled": "Kommentare sind deaktiviert",
"confirm": "Bestätigen", "confirm": "Bestätigen",
"confirm_admin_password": "Administrator Passwort bestätigen", "confirm_admin_password": "Administrator Passwort bestätigen",
"confirm_delete_face": "Bist du sicher dass du das Gesicht von {name} aus der Datei entfernen willst?",
"confirm_delete_shared_link": "Bist du sicher, dass du diesen geteilten Link löschen willst?", "confirm_delete_shared_link": "Bist du sicher, dass du diesen geteilten Link löschen willst?",
"confirm_keep_this_delete_others": "Alle anderen Dateien im Stapel bis auf diese werden gelöscht. Bist du sicher, dass du fortfahren möchten?", "confirm_keep_this_delete_others": "Alle anderen Dateien im Stapel bis auf diese werden gelöscht. Bist du sicher, dass du fortfahren möchten?",
"confirm_password": "Passwort bestätigen", "confirm_password": "Passwort bestätigen",
@@ -533,6 +543,7 @@
"delete_album": "Album löschen", "delete_album": "Album löschen",
"delete_api_key_prompt": "Bist du sicher, dass du diesen API-Schlüssel löschen willst?", "delete_api_key_prompt": "Bist du sicher, dass du diesen API-Schlüssel löschen willst?",
"delete_duplicates_confirmation": "Bist du sicher, dass du diese Duplikate endgültig löschen willst?", "delete_duplicates_confirmation": "Bist du sicher, dass du diese Duplikate endgültig löschen willst?",
"delete_face": "Gesicht löschen",
"delete_key": "Schlüssel löschen", "delete_key": "Schlüssel löschen",
"delete_library": "Bibliothek löschen", "delete_library": "Bibliothek löschen",
"delete_link": "Link löschen", "delete_link": "Link löschen",
@@ -600,6 +611,7 @@
"enabled": "Aktiviert", "enabled": "Aktiviert",
"end_date": "Enddatum", "end_date": "Enddatum",
"error": "Fehler", "error": "Fehler",
"error_delete_face": "Fehler beim Löschen des Gesichts",
"error_loading_image": "Fehler beim Laden des Bildes", "error_loading_image": "Fehler beim Laden des Bildes",
"error_title": "Fehler - Etwas ist schief gelaufen", "error_title": "Fehler - Etwas ist schief gelaufen",
"errors": { "errors": {
@@ -852,6 +864,7 @@
"loop_videos": "Loop-Videos", "loop_videos": "Loop-Videos",
"loop_videos_description": "Aktiviere diese Option, um eine automatische Videoschleife in der Detailansicht zu erstellen.", "loop_videos_description": "Aktiviere diese Option, um eine automatische Videoschleife in der Detailansicht zu erstellen.",
"main_branch_warning": "Du benutzt eine Entwicklungsversion. Wir empfehlen dringend, eine Release-Version zu verwenden!", "main_branch_warning": "Du benutzt eine Entwicklungsversion. Wir empfehlen dringend, eine Release-Version zu verwenden!",
"main_menu": "Hauptmenü",
"make": "Marke", "make": "Marke",
"manage_shared_links": "Freigegebene Links verwalten", "manage_shared_links": "Freigegebene Links verwalten",
"manage_sharing_with_partners": "Gemeinsame Nutzung mit Partnern verwalten", "manage_sharing_with_partners": "Gemeinsame Nutzung mit Partnern verwalten",
@@ -884,6 +897,7 @@
"month": "Monat", "month": "Monat",
"more": "Mehr", "more": "Mehr",
"moved_to_trash": "In den Papierkorb verschoben", "moved_to_trash": "In den Papierkorb verschoben",
"mute_memories": "Erinnerungen stumm schalten",
"my_albums": "Meine Alben", "my_albums": "Meine Alben",
"name": "Name", "name": "Name",
"name_or_nickname": "Name oder Nickname", "name_or_nickname": "Name oder Nickname",
@@ -979,6 +993,7 @@
"permanently_deleted_asset": "Endgültig gelöschtes Objekt", "permanently_deleted_asset": "Endgültig gelöschtes Objekt",
"permanently_deleted_assets_count": "{count, plural, one {# Datei} other {# Dateien}} endgültig gelöscht", "permanently_deleted_assets_count": "{count, plural, one {# Datei} other {# Dateien}} endgültig gelöscht",
"person": "Person", "person": "Person",
"person_birthdate": "Geboren am {date}",
"person_hidden": "{name}{hidden, select, true { (verborgen)} other {}}", "person_hidden": "{name}{hidden, select, true { (verborgen)} other {}}",
"photo_shared_all_users": "Es sieht so aus, als hättest du deine Fotos mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.", "photo_shared_all_users": "Es sieht so aus, als hättest du deine Fotos mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.",
"photos": "Fotos", "photos": "Fotos",
@@ -1070,12 +1085,16 @@
"remove_from_album": "Aus Album entfernen", "remove_from_album": "Aus Album entfernen",
"remove_from_favorites": "Aus Favoriten entfernen", "remove_from_favorites": "Aus Favoriten entfernen",
"remove_from_shared_link": "Aus geteiltem Link entfernen", "remove_from_shared_link": "Aus geteiltem Link entfernen",
"remove_memory": "Erinnerung entfernen",
"remove_photo_from_memory": "Foto aus dieser Erinnerung entfernen",
"remove_url": "URL entfernen", "remove_url": "URL entfernen",
"remove_user": "Nutzer entfernen", "remove_user": "Nutzer entfernen",
"removed_api_key": "API-Schlüssel {name} wurde entfernt", "removed_api_key": "API-Schlüssel {name} wurde entfernt",
"removed_from_archive": "Aus dem Archiv entfernt", "removed_from_archive": "Aus dem Archiv entfernt",
"removed_from_favorites": "Aus den Favoriten entfernt", "removed_from_favorites": "Aus den Favoriten entfernt",
"removed_from_favorites_count": "{count, plural, other {#}} aus den Favoriten entfernt", "removed_from_favorites_count": "{count, plural, other {#}} aus den Favoriten entfernt",
"removed_memory": "Erinnerung entfernt",
"removed_photo_from_memory": "Foto aus Erinnerung entfernt",
"removed_tagged_assets": "Tag von {count, plural, one {# Datei} other {# Dateien}} entfernt", "removed_tagged_assets": "Tag von {count, plural, one {# Datei} other {# Dateien}} entfernt",
"rename": "Umbenennen", "rename": "Umbenennen",
"repair": "Reparatur", "repair": "Reparatur",
@@ -1084,6 +1103,7 @@
"repository": "Repository", "repository": "Repository",
"require_password": "Passwort erforderlich", "require_password": "Passwort erforderlich",
"require_user_to_change_password_on_first_login": "Benutzer muss das Passwort beim ersten Login ändern", "require_user_to_change_password_on_first_login": "Benutzer muss das Passwort beim ersten Login ändern",
"rescan": "Erneut scannen",
"reset": "Zurücksetzen", "reset": "Zurücksetzen",
"reset_password": "Passwort zurücksetzen", "reset_password": "Passwort zurücksetzen",
"reset_people_visibility": "Sichtbarkeit von Personen zurücksetzen", "reset_people_visibility": "Sichtbarkeit von Personen zurücksetzen",
@@ -1127,6 +1147,7 @@
"search_options": "Suchoptionen", "search_options": "Suchoptionen",
"search_people": "Suche nach Personen", "search_people": "Suche nach Personen",
"search_places": "Suche nach Orten", "search_places": "Suche nach Orten",
"search_rating": "Suche nach Bewertung...",
"search_settings": "Suche nach Einstellungen", "search_settings": "Suche nach Einstellungen",
"search_state": "Suche nach Bundesland / Provinz...", "search_state": "Suche nach Bundesland / Provinz...",
"search_tags": "Sache nach Tags...", "search_tags": "Sache nach Tags...",
@@ -1136,6 +1157,7 @@
"searching_locales": "Suche nach Orten...", "searching_locales": "Suche nach Orten...",
"second": "Sekunde", "second": "Sekunde",
"see_all_people": "Alle Personen anzeigen", "see_all_people": "Alle Personen anzeigen",
"select": "Auswählen",
"select_album_cover": "Album-Cover auswählen", "select_album_cover": "Album-Cover auswählen",
"select_all": "Alles auswählen", "select_all": "Alles auswählen",
"select_all_duplicates": "Alle Duplikate auswählen", "select_all_duplicates": "Alle Duplikate auswählen",
@@ -1250,6 +1272,7 @@
"tag_created": "Tag erstellt: {tag}", "tag_created": "Tag erstellt: {tag}",
"tag_feature_description": "Durchsuchen von Fotos und Videos, gruppiert nach logischen Tag-Themen", "tag_feature_description": "Durchsuchen von Fotos und Videos, gruppiert nach logischen Tag-Themen",
"tag_not_found_question": "Kein Tag zu finden? <link>Erstelle einen neuen Tag.</link>", "tag_not_found_question": "Kein Tag zu finden? <link>Erstelle einen neuen Tag.</link>",
"tag_people": "Personen taggen",
"tag_updated": "Tag aktualisiert: {tag}", "tag_updated": "Tag aktualisiert: {tag}",
"tagged_assets": "{count, plural, one {# Datei} other {# Dateien}} getagged", "tagged_assets": "{count, plural, one {# Datei} other {# Dateien}} getagged",
"tags": "Tags", "tags": "Tags",
@@ -1290,6 +1313,7 @@
"unlink_motion_video": "Verknüpfung zum Bewegungsvideo aufheben", "unlink_motion_video": "Verknüpfung zum Bewegungsvideo aufheben",
"unlink_oauth": "OAuth entfernen", "unlink_oauth": "OAuth entfernen",
"unlinked_oauth_account": "OAuth-Konto entfernt", "unlinked_oauth_account": "OAuth-Konto entfernt",
"unmute_memories": "Stummschaltung für Erinnerungen aufheben",
"unnamed_album": "Unbenanntes Album", "unnamed_album": "Unbenanntes Album",
"unnamed_album_delete_confirmation": "Bist du sicher, dass du dieses Album löschen willst?", "unnamed_album_delete_confirmation": "Bist du sicher, dass du dieses Album löschen willst?",
"unnamed_share": "Unbenannte Freigabe", "unnamed_share": "Unbenannte Freigabe",
@@ -1343,6 +1367,7 @@
"view_all": "Alles anzeigen", "view_all": "Alles anzeigen",
"view_all_users": "Alle Nutzer anzeigen", "view_all_users": "Alle Nutzer anzeigen",
"view_in_timeline": "In Zeitleiste anzeigen", "view_in_timeline": "In Zeitleiste anzeigen",
"view_link": "Link anzeigen",
"view_links": "Links anzeigen", "view_links": "Links anzeigen",
"view_name": "Ansicht", "view_name": "Ansicht",
"view_next_asset": "Nächste Datei anzeigen", "view_next_asset": "Nächste Datei anzeigen",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Ρυθμίσεις Αντιγράφων Ασφαλείας", "backup_settings": "Ρυθμίσεις Αντιγράφων Ασφαλείας",
"backup_settings_description": "Διαχείρηση ρυθμίσεων των αντιγράφων ασφαλείας της βάσης δεδομένων", "backup_settings_description": "Διαχείρηση ρυθμίσεων των αντιγράφων ασφαλείας της βάσης δεδομένων",
"check_all": "Έλεγχος Όλων", "check_all": "Έλεγχος Όλων",
"cleanup": "Εκκαθάριση",
"cleared_jobs": "Εκκαθαρίστηκαν οι εργασίες για: {job}", "cleared_jobs": "Εκκαθαρίστηκαν οι εργασίες για: {job}",
"config_set_by_file": "Η παραμετροποίηση γίνεται, προς το παρόν, μέσω ενός αρχείου παραμέτρων", "config_set_by_file": "Η παραμετροποίηση γίνεται, προς το παρόν, μέσω ενός αρχείου παραμέτρων",
"confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};", "confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "Αναζητήστε εικόνες σημασιολογικά χρησιμοποιώντας ενσωματώσεις CLIP", "machine_learning_smart_search_description": "Αναζητήστε εικόνες σημασιολογικά χρησιμοποιώντας ενσωματώσεις CLIP",
"machine_learning_smart_search_enabled": "Ενεργοποίηση έξυπνης αναζήτησης", "machine_learning_smart_search_enabled": "Ενεργοποίηση έξυπνης αναζήτησης",
"machine_learning_smart_search_enabled_description": "Αν απενεργοποιηθεί, οι εικόνες δεν θα κωδικοποιούνται για έξυπνη αναζήτηση.", "machine_learning_smart_search_enabled_description": "Αν απενεργοποιηθεί, οι εικόνες δεν θα κωδικοποιούνται για έξυπνη αναζήτηση.",
"machine_learning_url_description": "Η διεύθυνση URL του διακομιστή μηχανικής μάθησης. Αν παρέχονται περισσότερες από μία διευθύνσεις, τότε θα γίνει προσπάθεια σύνδεσης σε κάθε μια διαδοχικά από την πρώτη μέχρι την τελευταία, έως ότου κάποια να είναι επιτυχής.", "machine_learning_url_description": "Η διεύθυνση URL του διακομιστή μηχανικής μάθησης. Αν δοθούν περισσότερες από μία διευθύνσεις URL, κάθε διακομιστής θα δοκιμάζεται διαδοχικά μέχρι να ανταποκριθεί ένας με επιτυχία, με τη σειρά από την πρώτη έως την τελευταία. Οι διακομιστές που δεν ανταποκρίνονται θα αγνοούνται προσωρινά μέχρι να επανέλθουν σε λειτουργία.",
"manage_concurrency": "Διαχείριση ταυτόχρονη εκτέλεσης", "manage_concurrency": "Διαχείριση ταυτόχρονη εκτέλεσης",
"manage_log_settings": "Διαχείριση ρυθμίσεων αρχείου καταγραφής", "manage_log_settings": "Διαχείριση ρυθμίσεων αρχείου καταγραφής",
"map_dark_style": "Σκούρο Θέμα", "map_dark_style": "Σκούρο Θέμα",
@@ -147,6 +148,8 @@
"map_settings": "Χάρτης", "map_settings": "Χάρτης",
"map_settings_description": "Διαχείριση ρυθμίσεων χάρτη", "map_settings_description": "Διαχείριση ρυθμίσεων χάρτη",
"map_style_description": "URL προς αρχείο θέματος του χάρτη style.json", "map_style_description": "URL προς αρχείο θέματος του χάρτη style.json",
"memory_cleanup_job": "Καθαρισμός μνήμης",
"memory_generate_job": "Δημιουργία μνήμης",
"metadata_extraction_job": "Εξαγωγή μεταδεδομένων", "metadata_extraction_job": "Εξαγωγή μεταδεδομένων",
"metadata_extraction_job_description": "Εξαγωγή μεταδεδομένων από κάθε αρχείο, όπως τοποθεσία, πρόσωπα και ανάλυση", "metadata_extraction_job_description": "Εξαγωγή μεταδεδομένων από κάθε αρχείο, όπως τοποθεσία, πρόσωπα και ανάλυση",
"metadata_faces_import_setting": "Ενεργοποίηση εισαγωγής προσώπων", "metadata_faces_import_setting": "Ενεργοποίηση εισαγωγής προσώπων",
@@ -299,7 +302,7 @@
"transcoding_max_b_frames": "Μέγιστος αριθμός B-frames(Bidirectional Predictive Frames)", "transcoding_max_b_frames": "Μέγιστος αριθμός B-frames(Bidirectional Predictive Frames)",
"transcoding_max_b_frames_description": "Οι υψηλότερες τιμές βελτιώνουν την αποδοτικότητα της συμπίεσης, αλλά επιβραδύνουν την κωδικοποίηση. Ενδέχεται να μην είναι συμβατές με την επιτάχυνση υλικού σε παλαιότερες συσκευές. Η τιμή 0 απενεργοποιεί τα B-frames, ενώ η -1, τη ρυθμίζει αυτόματα.", "transcoding_max_b_frames_description": "Οι υψηλότερες τιμές βελτιώνουν την αποδοτικότητα της συμπίεσης, αλλά επιβραδύνουν την κωδικοποίηση. Ενδέχεται να μην είναι συμβατές με την επιτάχυνση υλικού σε παλαιότερες συσκευές. Η τιμή 0 απενεργοποιεί τα B-frames, ενώ η -1, τη ρυθμίζει αυτόματα.",
"transcoding_max_bitrate": "Μέγιστος ρυθμός μετάδοσης (bitrate)", "transcoding_max_bitrate": "Μέγιστος ρυθμός μετάδοσης (bitrate)",
"transcoding_max_bitrate_description": "Η ρύθμιση ενός μέγιστου ρυθμού μετάδοσης(bitrate) μπορεί να κάνει το μέγεθος των αρχείων πιο προβλέψιμο, αλλά με ένα μικρό κόστος στην ποιότητα. Στην ανάλυση των 720p, οι τυπικές τιμές είναι 2600k για VP9 ή HEVC, ή 4500k για H.264. Απενεργοποιείται εάν οριστεί σε 0.", "transcoding_max_bitrate_description": "Η ρύθμιση ενός μέγιστου ρυθμού μετάδοσης(bitrate) μπορεί να κάνει το μέγεθος των αρχείων πιο προβλέψιμο, αλλά με ένα μικρό κόστος στην ποιότητα. Στην ανάλυση των 720p, οι τυπικές τιμές είναι 2600 kbit/s για VP9 ή HEVC, ή 4500 kbit/s για H.264. Απενεργοποιείται εάν οριστεί σε 0.",
"transcoding_max_keyframe_interval": "Μέγιστο χρονικό διάστημα μεταξύ των καρέ αναφοράς (keyframe)", "transcoding_max_keyframe_interval": "Μέγιστο χρονικό διάστημα μεταξύ των καρέ αναφοράς (keyframe)",
"transcoding_max_keyframe_interval_description": "Ορίζει το μέγιστο διάστημα μεταξύ των καρέ αναφοράς. Χαμηλότερες τιμές μειώνουν την αποδοτικότητα συμπίεσης, αλλά βελτιώνουν τον χρόνο αναζήτησης και μπορεί να βελτιώσουν την ποιότητα σε σκηνές με γρήγορη κίνηση. Η τιμή 0 ρυθμίζει αυτό το διάστημα αυτόματα.", "transcoding_max_keyframe_interval_description": "Ορίζει το μέγιστο διάστημα μεταξύ των καρέ αναφοράς. Χαμηλότερες τιμές μειώνουν την αποδοτικότητα συμπίεσης, αλλά βελτιώνουν τον χρόνο αναζήτησης και μπορεί να βελτιώσουν την ποιότητα σε σκηνές με γρήγορη κίνηση. Η τιμή 0 ρυθμίζει αυτό το διάστημα αυτόματα.",
"transcoding_optimal_description": "Βίντεο με ανώτερη ανάλυση από την επιθυμητή ή σε μη αποδεκτή μορφή", "transcoding_optimal_description": "Βίντεο με ανώτερη ανάλυση από την επιθυμητή ή σε μη αποδεκτή μορφή",
@@ -385,12 +388,13 @@
"albums_count": "{count, plural, one {{count, number} Άλμπουμ} other {{count, number} Άλμπουμ}}", "albums_count": "{count, plural, one {{count, number} Άλμπουμ} other {{count, number} Άλμπουμ}}",
"all": "Όλα", "all": "Όλα",
"all_albums": "Όλα τα άλμπουμ", "all_albums": "Όλα τα άλμπουμ",
"all_people": "Όλοι οι άνθρωποι", "all_people": "Όλα τα άτομα",
"all_videos": "Όλα τα βίντεο", "all_videos": "Όλα τα βίντεο",
"allow_dark_mode": "Επιτρέψτε τη σκοτεινή λειτουργία", "allow_dark_mode": "Επιτρέψτε τη σκοτεινή λειτουργία",
"allow_edits": "Επιτρέψτε τις τροποποιήσεις", "allow_edits": "Επιτρέψτε τις τροποποιήσεις",
"allow_public_user_to_download": "Επιτρέψτε σε δημόσιο χρήστη να κατεβάσει", "allow_public_user_to_download": "Επιτρέψτε σε δημόσιο χρήστη να κατεβάσει",
"allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει", "allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει",
"alt_text_qr_code": "Εικόνα κωδικού QR",
"anti_clockwise": "Αντίθετα με τη φορά του ρολογιού", "anti_clockwise": "Αντίθετα με τη φορά του ρολογιού",
"api_key": "Κλειδί API", "api_key": "Κλειδί API",
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.", "api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
@@ -448,7 +452,7 @@
"camera_model": "Μοντέλο κάμερας", "camera_model": "Μοντέλο κάμερας",
"cancel": "Ακύρωση", "cancel": "Ακύρωση",
"cancel_search": "Ακύρωση αναζήτησης", "cancel_search": "Ακύρωση αναζήτησης",
"cannot_merge_people": "Αδύνατη η συγχώνευση προσώπων", "cannot_merge_people": "Αδύνατη η συγχώνευση ατόμων",
"cannot_undo_this_action": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια!", "cannot_undo_this_action": "Δεν μπορείτε να αναιρέσετε αυτήν την ενέργεια!",
"cannot_update_the_description": "Αδύνατη η ενημέρωση της περιγραφής", "cannot_update_the_description": "Αδύνατη η ενημέρωση της περιγραφής",
"change_date": "Αλλαγή ημερομηνίας", "change_date": "Αλλαγή ημερομηνίας",
@@ -481,6 +485,7 @@
"comments_are_disabled": "Τα σχόλια είναι απενεργοποιημένα", "comments_are_disabled": "Τα σχόλια είναι απενεργοποιημένα",
"confirm": "Επιβεβαίωση", "confirm": "Επιβεβαίωση",
"confirm_admin_password": "Επιβεβαίωση κωδικού Διαχειριστή", "confirm_admin_password": "Επιβεβαίωση κωδικού Διαχειριστή",
"confirm_delete_face": "Είστε σίγουροι ότι θέλετε να διαγράψετε το πρόσωπο του/της {name} από το στοιχείο;",
"confirm_delete_shared_link": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτόν τον κοινόχρηστο σύνδεσμο;", "confirm_delete_shared_link": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτόν τον κοινόχρηστο σύνδεσμο;",
"confirm_keep_this_delete_others": "Όλα τα άλλα στοιχεία της στοίβας θα διαγραφούν, εκτός από αυτό το στοιχείο. Είστε σίγουροι ότι θέλετε να συνεχίσετε;", "confirm_keep_this_delete_others": "Όλα τα άλλα στοιχεία της στοίβας θα διαγραφούν, εκτός από αυτό το στοιχείο. Είστε σίγουροι ότι θέλετε να συνεχίσετε;",
"confirm_password": "Επιβεβαίωση κωδικού", "confirm_password": "Επιβεβαίωση κωδικού",
@@ -533,6 +538,7 @@
"delete_album": "Διαγραφή άλμπουμ", "delete_album": "Διαγραφή άλμπουμ",
"delete_api_key_prompt": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό κλειδί API;", "delete_api_key_prompt": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό κλειδί API;",
"delete_duplicates_confirmation": "Είστε σίγουροι ότι επιθυμείτε τη μόνιμη διαγραφή αυτών των διπλότυπων;", "delete_duplicates_confirmation": "Είστε σίγουροι ότι επιθυμείτε τη μόνιμη διαγραφή αυτών των διπλότυπων;",
"delete_face": "Διαγραφή προσώπου",
"delete_key": "Διαγραφή κλειδιού", "delete_key": "Διαγραφή κλειδιού",
"delete_library": "Διαγραφή Βιβλιοθήκης", "delete_library": "Διαγραφή Βιβλιοθήκης",
"delete_link": "Διαγραφή συνδέσμου", "delete_link": "Διαγραφή συνδέσμου",
@@ -600,6 +606,7 @@
"enabled": "Ενεργοποιημένο", "enabled": "Ενεργοποιημένο",
"end_date": "Τελική ημερομηνία", "end_date": "Τελική ημερομηνία",
"error": "Σφάλμα", "error": "Σφάλμα",
"error_delete_face": "Σφάλμα διαγραφής προσώπου από το στοιχείο",
"error_loading_image": "Σφάλμα κατά τη φόρτωση της εικόνας", "error_loading_image": "Σφάλμα κατά τη φόρτωση της εικόνας",
"error_title": "Σφάλμα - Κάτι πήγε στραβά", "error_title": "Σφάλμα - Κάτι πήγε στραβά",
"errors": { "errors": {
@@ -611,7 +618,7 @@
"cant_change_metadata_assets_count": "Δεν μπορείτε να αλλάξετε τα μεταδεδομένα του {count, plural, one {# αρχείου} other {# αρχείων}}", "cant_change_metadata_assets_count": "Δεν μπορείτε να αλλάξετε τα μεταδεδομένα του {count, plural, one {# αρχείου} other {# αρχείων}}",
"cant_get_faces": "Δεν είναι δυνατή η ανάκτηση προσώπων", "cant_get_faces": "Δεν είναι δυνατή η ανάκτηση προσώπων",
"cant_get_number_of_comments": "Δεν είναι δυνατή η ανάκτηση του αριθμού των σχολίων", "cant_get_number_of_comments": "Δεν είναι δυνατή η ανάκτηση του αριθμού των σχολίων",
"cant_search_people": "Δεν μπορείτε να αναζητήσετε άτομα", "cant_search_people": "Αδύνατη η αναζήτηση ατόμων",
"cant_search_places": "Δεν μπορείτε να αναζητήσετε τοποθεσίες", "cant_search_places": "Δεν μπορείτε να αναζητήσετε τοποθεσίες",
"cleared_jobs": "Εκκαθαρισμένες εργασίες για: {job}", "cleared_jobs": "Εκκαθαρισμένες εργασίες για: {job}",
"error_adding_assets_to_album": "Σφάλμα κατά την προσθήκη στοιχείων στο άλμπουμ", "error_adding_assets_to_album": "Σφάλμα κατά την προσθήκη στοιχείων στο άλμπουμ",
@@ -884,6 +891,7 @@
"month": "Μήνας", "month": "Μήνας",
"more": "Περισσότερα", "more": "Περισσότερα",
"moved_to_trash": "Μετακινήθηκε στον κάδο απορριμμάτων", "moved_to_trash": "Μετακινήθηκε στον κάδο απορριμμάτων",
"mute_memories": "Σίγαση Αναμνήσεων",
"my_albums": "Τα άλμπουμ μου", "my_albums": "Τα άλμπουμ μου",
"name": "Όνομα", "name": "Όνομα",
"name_or_nickname": "Όνομα ή ψευδώνυμο", "name_or_nickname": "Όνομα ή ψευδώνυμο",
@@ -979,6 +987,7 @@
"permanently_deleted_asset": "Οριστικά διαγραμμένο στοιχείο", "permanently_deleted_asset": "Οριστικά διαγραμμένο στοιχείο",
"permanently_deleted_assets_count": "Οριστική διαγραφή {count, plural, one {# στοιχείου} other {# στοιχείων}}", "permanently_deleted_assets_count": "Οριστική διαγραφή {count, plural, one {# στοιχείου} other {# στοιχείων}}",
"person": "Άτομο", "person": "Άτομο",
"person_birthdate": "Γεννηθείς στις {date}",
"person_hidden": "{name}{hidden, select, true { (κρυφό)} other {}}", "person_hidden": "{name}{hidden, select, true { (κρυφό)} other {}}",
"photo_shared_all_users": "Φαίνεται ότι μοιραστήκατε τις φωτογραφίες σας με όλους τους χρήστες ή δεν έχετε κανέναν χρήστη για κοινή χρήση.", "photo_shared_all_users": "Φαίνεται ότι μοιραστήκατε τις φωτογραφίες σας με όλους τους χρήστες ή δεν έχετε κανέναν χρήστη για κοινή χρήση.",
"photos": "Φωτογραφίες", "photos": "Φωτογραφίες",
@@ -1070,12 +1079,16 @@
"remove_from_album": "Αφαίρεση από το άλμπουμ", "remove_from_album": "Αφαίρεση από το άλμπουμ",
"remove_from_favorites": "Αφαίρεση από τα αγαπημένα", "remove_from_favorites": "Αφαίρεση από τα αγαπημένα",
"remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο", "remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο",
"remove_memory": "Αφαίρεση ανάμνησης",
"remove_photo_from_memory": "Αφαίρεση φωτογραφίας από την ανάμνηση",
"remove_url": "Αφαίρεση Συνδέσμου", "remove_url": "Αφαίρεση Συνδέσμου",
"remove_user": "Αφαίρεση χρήστη", "remove_user": "Αφαίρεση χρήστη",
"removed_api_key": "Αφαιρέθηκε το API Key: {name}", "removed_api_key": "Αφαιρέθηκε το API Key: {name}",
"removed_from_archive": "Αφαιρέθηκε/καν από το Αρχείο", "removed_from_archive": "Αφαιρέθηκε/καν από το Αρχείο",
"removed_from_favorites": "Αφαιρέθηκε από τα αγαπημένα", "removed_from_favorites": "Αφαιρέθηκε από τα αγαπημένα",
"removed_from_favorites_count": "Αφαιρέθηκαν {count, plural, other {#}} από τα αγαπημένα", "removed_from_favorites_count": "Αφαιρέθηκαν {count, plural, other {#}} από τα αγαπημένα",
"removed_memory": "Διαγραμμένη μνήμη",
"removed_photo_from_memory": "Διαγραμμένη φωτογραφία από τη μνήμη",
"removed_tagged_assets": "Αφαιρέθηκε η ετικέτα από {count, plural, one {# στοιχείο} other {# στοιχεία}}", "removed_tagged_assets": "Αφαιρέθηκε η ετικέτα από {count, plural, one {# στοιχείο} other {# στοιχεία}}",
"rename": "Μετονομασία", "rename": "Μετονομασία",
"repair": "Επισκευή", "repair": "Επισκευή",
@@ -1084,6 +1097,7 @@
"repository": "Αποθετήριο", "repository": "Αποθετήριο",
"require_password": "Απαιτείται κωδικός πρόσβασης", "require_password": "Απαιτείται κωδικός πρόσβασης",
"require_user_to_change_password_on_first_login": "Ο χρήστης απαιτείται να αλλάξει τον κωδικό πρόσβασής του κατά την πρώτη σύνδεση", "require_user_to_change_password_on_first_login": "Ο χρήστης απαιτείται να αλλάξει τον κωδικό πρόσβασής του κατά την πρώτη σύνδεση",
"rescan": "Εκ νέου σάρωση",
"reset": "Επαναφορά", "reset": "Επαναφορά",
"reset_password": "Επαναφορά κωδικού πρόσβασης", "reset_password": "Επαναφορά κωδικού πρόσβασης",
"reset_people_visibility": "Επαναφορά προβολής ατόμων", "reset_people_visibility": "Επαναφορά προβολής ατόμων",
@@ -1127,6 +1141,7 @@
"search_options": "Επιλογές αναζήτησης", "search_options": "Επιλογές αναζήτησης",
"search_people": "Αναζήτηση ατόμων", "search_people": "Αναζήτηση ατόμων",
"search_places": "Αναζήτηση τοποθεσιών", "search_places": "Αναζήτηση τοποθεσιών",
"search_rating": "Αναζήτηση κατά βαθμολογία...",
"search_settings": "Ρυθμίσεις αναζήτησης", "search_settings": "Ρυθμίσεις αναζήτησης",
"search_state": "Αναζήτηση νομού...", "search_state": "Αναζήτηση νομού...",
"search_tags": "Αναζήτηση ετικετών...", "search_tags": "Αναζήτηση ετικετών...",
@@ -1136,6 +1151,7 @@
"searching_locales": "Αναζήτηση τοποθεσιών...", "searching_locales": "Αναζήτηση τοποθεσιών...",
"second": "Δευτερόλεπτο", "second": "Δευτερόλεπτο",
"see_all_people": "Προβολή όλων των ατόμων", "see_all_people": "Προβολή όλων των ατόμων",
"select": "Επιλογή",
"select_album_cover": "Επιλέξτε εξώφυλλο άλμπουμ", "select_album_cover": "Επιλέξτε εξώφυλλο άλμπουμ",
"select_all": "Επιλογή όλων", "select_all": "Επιλογή όλων",
"select_all_duplicates": "Επιλογή όλων των διπλότυπων", "select_all_duplicates": "Επιλογή όλων των διπλότυπων",
@@ -1250,6 +1266,7 @@
"tag_created": "Δημιουργήθηκε ετικέτα: {tag}", "tag_created": "Δημιουργήθηκε ετικέτα: {tag}",
"tag_feature_description": "Περιήγηση σε φωτογραφίες και βίντεο που είναι οργανωμένα σύμφωνα με λογικά θέματα ετικετών", "tag_feature_description": "Περιήγηση σε φωτογραφίες και βίντεο που είναι οργανωμένα σύμφωνα με λογικά θέματα ετικετών",
"tag_not_found_question": "Δεν μπορείτε να βρείτε μια ετικέτα; <link>Δημιουργήστε μια νέα ετικέτα.</link>", "tag_not_found_question": "Δεν μπορείτε να βρείτε μια ετικέτα; <link>Δημιουργήστε μια νέα ετικέτα.</link>",
"tag_people": "Επισήμανση ατόμων",
"tag_updated": "Ενημερώθηκε η ετικέτα: {tag}", "tag_updated": "Ενημερώθηκε η ετικέτα: {tag}",
"tagged_assets": "Ετικετοποιημένο/α {count, plural, one {# στοιχείο} other {# στοιχεία}}", "tagged_assets": "Ετικετοποιημένο/α {count, plural, one {# στοιχείο} other {# στοιχεία}}",
"tags": "Ετικέτες", "tags": "Ετικέτες",
@@ -1343,6 +1360,7 @@
"view_all": "Προβολή Όλων", "view_all": "Προβολή Όλων",
"view_all_users": "Προβολή όλων των χρηστών", "view_all_users": "Προβολή όλων των χρηστών",
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα", "view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
"view_link": "Προβολή σύνδεσμου",
"view_links": "Προβολή συνδέσμων", "view_links": "Προβολή συνδέσμων",
"view_name": "Προβολή", "view_name": "Προβολή",
"view_next_asset": "Προβολή επόμενου στοιχείου", "view_next_asset": "Προβολή επόμενου στοιχείου",

View File

@@ -65,8 +65,13 @@
"forcing_refresh_library_files": "Forcing refresh of all library files", "forcing_refresh_library_files": "Forcing refresh of all library files",
"image_format": "Format", "image_format": "Format",
"image_format_description": "WebP produces smaller files than JPEG, but is slower to encode.", "image_format_description": "WebP produces smaller files than JPEG, but is slower to encode.",
"image_fullsize_enabled": "Enable full-size image generation",
"image_fullsize_enabled_description": "Generate full-size image for non-web-friendly formats. When \"Prefer embedded preview\" is enabled, embedded previews are used directly without conversion. Does not affect web-friendly formats like JPEG.",
"image_fullsize_quality_description": "Full-size image quality from 1-100. Higher is better, but produces larger files.",
"image_fullsize_title": "Full-size Image Settings",
"image_fullsize_description": "Full-size image with stripped metadata, used when zoomed in",
"image_prefer_embedded_preview": "Prefer embedded preview", "image_prefer_embedded_preview": "Prefer embedded preview",
"image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.", "image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing and when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.",
"image_prefer_wide_gamut": "Prefer wide gamut", "image_prefer_wide_gamut": "Prefer wide gamut",
"image_prefer_wide_gamut_setting_description": "Use Display P3 for thumbnails. This better preserves the vibrance of images with wide colorspaces, but images may appear differently on old devices with an old browser version. sRGB images are kept as sRGB to avoid color shifts.", "image_prefer_wide_gamut_setting_description": "Use Display P3 for thumbnails. This better preserves the vibrance of images with wide colorspaces, but images may appear differently on old devices with an old browser version. sRGB images are kept as sRGB to avoid color shifts.",
"image_preview_description": "Medium-size image with stripped metadata, used when viewing a single asset and for machine learning", "image_preview_description": "Medium-size image with stripped metadata, used when viewing a single asset and for machine learning",
@@ -159,7 +164,6 @@
"no_pattern_added": "No pattern added", "no_pattern_added": "No pattern added",
"note_apply_storage_label_previous_assets": "Note: To apply the Storage Label to previously uploaded assets, run the", "note_apply_storage_label_previous_assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
"note_cannot_be_changed_later": "NOTE: This cannot be changed later!", "note_cannot_be_changed_later": "NOTE: This cannot be changed later!",
"note_unlimited_quota": "Note: Enter 0 for unlimited quota",
"notification_email_from_address": "From address", "notification_email_from_address": "From address",
"notification_email_from_address_description": "Sender email address, for example: \"Immich Photo Server <noreply@example.com>\"", "notification_email_from_address_description": "Sender email address, for example: \"Immich Photo Server <noreply@example.com>\"",
"notification_email_host_description": "Host of the email server (e.g. smtp.immich.app)", "notification_email_host_description": "Host of the email server (e.g. smtp.immich.app)",
@@ -240,7 +244,7 @@
"storage_template_hash_verification_enabled_description": "Enables hash verification, don't disable this unless you're certain of the implications", "storage_template_hash_verification_enabled_description": "Enables hash verification, don't disable this unless you're certain of the implications",
"storage_template_migration": "Storage template migration", "storage_template_migration": "Storage template migration",
"storage_template_migration_description": "Apply the current <link>{template}</link> to previously uploaded assets", "storage_template_migration_description": "Apply the current <link>{template}</link> to previously uploaded assets",
"storage_template_migration_info": "Template changes will only apply to new assets. To retroactively apply the template to previously uploaded assets, run the <link>{job}</link>.", "storage_template_migration_info": "The storage template will convert all extensions to lowercase. Template changes will only apply to new assets. To retroactively apply the template to previously uploaded assets, run the <link>{job}</link>.",
"storage_template_migration_job": "Storage Template Migration Job", "storage_template_migration_job": "Storage Template Migration Job",
"storage_template_more_details": "For more details about this feature, refer to the <template-link>Storage Template</template-link> and its <implications-link>implications</implications-link>", "storage_template_more_details": "For more details about this feature, refer to the <template-link>Storage Template</template-link> and its <implications-link>implications</implications-link>",
"storage_template_onboarding_description": "When enabled, this feature will auto-organize files based on a user-defined template. Due to stability issues the feature has been turned off by default. For more information, please see the <link>documentation</link>.", "storage_template_onboarding_description": "When enabled, this feature will auto-organize files based on a user-defined template. Due to stability issues the feature has been turned off by default. For more information, please see the <link>documentation</link>.",
@@ -299,7 +303,7 @@
"transcoding_max_b_frames": "Maximum B-frames", "transcoding_max_b_frames": "Maximum B-frames",
"transcoding_max_b_frames_description": "Higher values improve compression efficiency, but slow down encoding. May not be compatible with hardware acceleration on older devices. 0 disables B-frames, while -1 sets this value automatically.", "transcoding_max_b_frames_description": "Higher values improve compression efficiency, but slow down encoding. May not be compatible with hardware acceleration on older devices. 0 disables B-frames, while -1 sets this value automatically.",
"transcoding_max_bitrate": "Maximum bitrate", "transcoding_max_bitrate": "Maximum bitrate",
"transcoding_max_bitrate_description": "Setting a max bitrate can make file sizes more predictable at a minor cost to quality. At 720p, typical values are 2600k for VP9 or HEVC, or 4500k for H.264. Disabled if set to 0.", "transcoding_max_bitrate_description": "Setting a max bitrate can make file sizes more predictable at a minor cost to quality. At 720p, typical values are 2600 kbit/s for VP9 or HEVC, or 4500 kbit/s for H.264. Disabled if set to 0.",
"transcoding_max_keyframe_interval": "Maximum keyframe interval", "transcoding_max_keyframe_interval": "Maximum keyframe interval",
"transcoding_max_keyframe_interval_description": "Sets the maximum frame distance between keyframes. Lower values worsen compression efficiency, but improve seek times and may improve quality in scenes with fast movement. 0 sets this value automatically.", "transcoding_max_keyframe_interval_description": "Sets the maximum frame distance between keyframes. Lower values worsen compression efficiency, but improve seek times and may improve quality in scenes with fast movement. 0 sets this value automatically.",
"transcoding_optimal_description": "Videos higher than target resolution or not in an accepted format", "transcoding_optimal_description": "Videos higher than target resolution or not in an accepted format",
@@ -859,6 +863,7 @@
"loop_videos": "Loop videos", "loop_videos": "Loop videos",
"loop_videos_description": "Enable to automatically loop a video in the detail viewer.", "loop_videos_description": "Enable to automatically loop a video in the detail viewer.",
"main_branch_warning": "Youre using a development version; we strongly recommend using a release version!", "main_branch_warning": "Youre using a development version; we strongly recommend using a release version!",
"main_menu": "Main menu",
"make": "Make", "make": "Make",
"manage_shared_links": "Manage shared links", "manage_shared_links": "Manage shared links",
"manage_sharing_with_partners": "Manage sharing with partners", "manage_sharing_with_partners": "Manage sharing with partners",
@@ -923,7 +928,6 @@
"no_shared_albums_message": "Create an album to share photos and videos with people in your network", "no_shared_albums_message": "Create an album to share photos and videos with people in your network",
"not_in_any_album": "Not in any album", "not_in_any_album": "Not in any album",
"note_apply_storage_label_to_previously_uploaded assets": "Note: To apply the Storage Label to previously uploaded assets, run the", "note_apply_storage_label_to_previously_uploaded assets": "Note: To apply the Storage Label to previously uploaded assets, run the",
"note_unlimited_quota": "Note: Enter 0 for unlimited quota",
"notes": "Notes", "notes": "Notes",
"notification_toggle_setting_description": "Enable email notifications", "notification_toggle_setting_description": "Enable email notifications",
"notifications": "Notifications", "notifications": "Notifications",
@@ -987,6 +991,7 @@
"permanently_deleted_asset": "Permanently deleted asset", "permanently_deleted_asset": "Permanently deleted asset",
"permanently_deleted_assets_count": "Permanently deleted {count, plural, one {# asset} other {# assets}}", "permanently_deleted_assets_count": "Permanently deleted {count, plural, one {# asset} other {# assets}}",
"person": "Person", "person": "Person",
"person_birthdate": "Born on {date}",
"person_hidden": "{name}{hidden, select, true { (hidden)} other {}}", "person_hidden": "{name}{hidden, select, true { (hidden)} other {}}",
"photo_shared_all_users": "Looks like you shared your photos with all users or you don't have any user to share with.", "photo_shared_all_users": "Looks like you shared your photos with all users or you don't have any user to share with.",
"photos": "Photos", "photos": "Photos",
@@ -1081,7 +1086,9 @@
"remove_url": "Remove URL", "remove_url": "Remove URL",
"remove_user": "Remove user", "remove_user": "Remove user",
"removed_api_key": "Removed API Key: {name}", "removed_api_key": "Removed API Key: {name}",
"remove_memory": "Remove memory",
"removed_memory": "Removed memory", "removed_memory": "Removed memory",
"remove_photo_from_memory": "Remove photo from this memory",
"removed_photo_from_memory": "Removed photo from memory", "removed_photo_from_memory": "Removed photo from memory",
"removed_from_archive": "Removed from archive", "removed_from_archive": "Removed from archive",
"removed_from_favorites": "Removed from favorites", "removed_from_favorites": "Removed from favorites",
@@ -1149,6 +1156,7 @@
"second": "Second", "second": "Second",
"see_all_people": "See all people", "see_all_people": "See all people",
"select_album_cover": "Select album cover", "select_album_cover": "Select album cover",
"select": "Select",
"select_all": "Select all", "select_all": "Select all",
"select_all_duplicates": "Select all duplicates", "select_all_duplicates": "Select all duplicates",
"select_avatar_color": "Select avatar color", "select_avatar_color": "Select avatar color",

View File

@@ -7,7 +7,7 @@
"actions": "Acciones", "actions": "Acciones",
"active": "Activo", "active": "Activo",
"activity": "Actividad", "activity": "Actividad",
"activity_changed": "La actividad está {enabled, select, true {activada} other {desactivada}}", "activity_changed": "La actividad está {enabled, select, true {habilitada} other {deshabilitada}}",
"add": "Agregar", "add": "Agregar",
"add_a_description": "Agregar descripción", "add_a_description": "Agregar descripción",
"add_a_location": "Agregar ubicación", "add_a_location": "Agregar ubicación",
@@ -24,7 +24,7 @@
"add_to_album": "Incluir en álbum", "add_to_album": "Incluir en álbum",
"add_to_shared_album": "Incluir en álbum compartido", "add_to_shared_album": "Incluir en álbum compartido",
"add_url": "Añadir URL", "add_url": "Añadir URL",
"added_to_archive": "Archivado", "added_to_archive": "Agregado al Archivado",
"added_to_favorites": "Agregado a favoritos", "added_to_favorites": "Agregado a favoritos",
"added_to_favorites_count": "Agregado {count, number} a favoritos", "added_to_favorites_count": "Agregado {count, number} a favoritos",
"admin": { "admin": {
@@ -41,6 +41,7 @@
"backup_settings": "Ajustes de respaldo", "backup_settings": "Ajustes de respaldo",
"backup_settings_description": "Administrar configuración de respaldo de base de datos", "backup_settings_description": "Administrar configuración de respaldo de base de datos",
"check_all": "Verificar todo", "check_all": "Verificar todo",
"cleanup": "Limpieza",
"cleared_jobs": "Trabajos borrados para: {job}", "cleared_jobs": "Trabajos borrados para: {job}",
"config_set_by_file": "La configuración está definida por un archivo de configuración", "config_set_by_file": "La configuración está definida por un archivo de configuración",
"confirm_delete_library": "¿Estás seguro de que quieres eliminar la biblioteca {library}?", "confirm_delete_library": "¿Estás seguro de que quieres eliminar la biblioteca {library}?",
@@ -65,8 +66,13 @@
"forcing_refresh_library_files": "Forzando la recarga de todos los elementos en la biblioteca", "forcing_refresh_library_files": "Forzando la recarga de todos los elementos en la biblioteca",
"image_format": "Formato", "image_format": "Formato",
"image_format_description": "WebP genera archivos más pequeños que JPEG, pero es más lento al codificarlos.", "image_format_description": "WebP genera archivos más pequeños que JPEG, pero es más lento al codificarlos.",
"image_fullsize_description": "Imagen de tamaño completo con metadatos removidos, usado cuando se hace zoom",
"image_fullsize_enabled": "Activar generación de imágenes a tamaño completo",
"image_fullsize_enabled_description": "Generar imágenes a tamaño completo para formatos no aptos para web. Cuando \"Preferir vista previa incrustada\" está activada, las vistas previas incrustadas se utilizan directamente sin conversión. No afecta a los formatos aptos para la web, como JPEG.",
"image_fullsize_quality_description": "De 1 a 100, calidad de imágenes de tamaño completo. Mientras más alto es mejor, pero genera archivos de mayor tamaño.",
"image_fullsize_title": "Configuraciones de imágenes de tamaño completo",
"image_prefer_embedded_preview": "Preferir vista previa embebida", "image_prefer_embedded_preview": "Preferir vista previa embebida",
"image_prefer_embedded_preview_setting_description": "Usar vistas previas embebidas en fotos RAW como entrada para el procesamiento de imágenes cuando estén disponibles. Esto puede producir colores más precisos en algunas imágenes, pero la calidad de la vista previa depende de la cámara y la imagen puede tener más artefactos de compresión.", "image_prefer_embedded_preview_setting_description": "Usar vistas previas embebidas en fotos RAW como entrada para el procesamiento de imágenes y cuando estén disponibles. Esto puede producir colores más precisos en algunas imágenes, pero la calidad de la vista previa depende de la cámara y la imagen puede tener más artefactos de compresión.",
"image_prefer_wide_gamut": "Preferir 'gamut' amplio", "image_prefer_wide_gamut": "Preferir 'gamut' amplio",
"image_prefer_wide_gamut_setting_description": "Usar \"Display P3\" para las miniaturas. Preserva mejor la vivacidad de las imágenes con espacios de color amplios pero las imágenes pueden aparecer de manera diferente en dispositivos antiguos con una versión antigua del navegador. Las imágenes sRGB se mantienen como sRGB para evitar cambios de color.", "image_prefer_wide_gamut_setting_description": "Usar \"Display P3\" para las miniaturas. Preserva mejor la vivacidad de las imágenes con espacios de color amplios pero las imágenes pueden aparecer de manera diferente en dispositivos antiguos con una versión antigua del navegador. Las imágenes sRGB se mantienen como sRGB para evitar cambios de color.",
"image_preview_description": "Imagen de tamaño mediano con metadatos eliminados. Es utilizado al visualizar un solo activo y para el aprendizaje automático", "image_preview_description": "Imagen de tamaño mediano con metadatos eliminados. Es utilizado al visualizar un solo activo y para el aprendizaje automático",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Activar el escaneo periódico de la biblioteca", "library_scanning_enable_description": "Activar el escaneo periódico de la biblioteca",
"library_settings": "Biblioteca externa", "library_settings": "Biblioteca externa",
"library_settings_description": "Administrar configuración biblioteca externa", "library_settings_description": "Administrar configuración biblioteca externa",
"library_tasks_description": "Realizar tareas de biblioteca", "library_tasks_description": "Buscar archivos nuevos o modificados en bibliotecas externas",
"library_watching_enable_description": "Vigilar las bibliotecas externas para detectar cambios en los archivos", "library_watching_enable_description": "Vigilar las bibliotecas externas para detectar cambios en los archivos",
"library_watching_settings": "Vigilancia de la biblioteca (EXPERIMENTAL)", "library_watching_settings": "Vigilancia de la biblioteca (EXPERIMENTAL)",
"library_watching_settings_description": "Vigilar automaticamente en busca de archivos modificados", "library_watching_settings_description": "Vigilar automaticamente en busca de archivos modificados",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Busque imágenes semánticamente utilizando incrustaciones CLIP (Contrastive Language-Image Pre-Training)", "machine_learning_smart_search_description": "Busque imágenes semánticamente utilizando incrustaciones CLIP (Contrastive Language-Image Pre-Training)",
"machine_learning_smart_search_enabled": "Habilitar búsqueda inteligente", "machine_learning_smart_search_enabled": "Habilitar búsqueda inteligente",
"machine_learning_smart_search_enabled_description": "Al desactivarlo las imágenes no se procesarán para usar la búsqueda inteligente.", "machine_learning_smart_search_enabled_description": "Al desactivarlo las imágenes no se procesarán para usar la búsqueda inteligente.",
"machine_learning_url_description": "La URL del servidor de aprendizaje automático. Si se proporciona más de una URL se intentará acceder a cada servidor sucesivamente hasta que uno responda correctamente en el orden especificado.", "machine_learning_url_description": "La URL del servidor de aprendizaje automático. Si se proporciona más de una URL se intentará acceder a cada servidor sucesivamente hasta que uno responda correctamente en el orden especificado. Los servidores que no respondan serán ignorados temporalmente hasta que vuelvan a estar en línea.",
"manage_concurrency": "Ajustes de concurrencia", "manage_concurrency": "Ajustes de concurrencia",
"manage_log_settings": "Administrar la configuración de los registros", "manage_log_settings": "Administrar la configuración de los registros",
"map_dark_style": "Estilo oscuro", "map_dark_style": "Estilo oscuro",
@@ -147,6 +153,8 @@
"map_settings": "Mapa", "map_settings": "Mapa",
"map_settings_description": "Administrar la configuración del mapa", "map_settings_description": "Administrar la configuración del mapa",
"map_style_description": "Dirección URL a un tema de mapa (style.json)", "map_style_description": "Dirección URL a un tema de mapa (style.json)",
"memory_cleanup_job": "Limpieza de memoria",
"memory_generate_job": "Generación de memoria",
"metadata_extraction_job": "Extracción de metadatos", "metadata_extraction_job": "Extracción de metadatos",
"metadata_extraction_job_description": "Extraer información de metadatos de cada activo, como GPS, caras y resolución", "metadata_extraction_job_description": "Extraer información de metadatos de cada activo, como GPS, caras y resolución",
"metadata_faces_import_setting": "Activar importación de caras", "metadata_faces_import_setting": "Activar importación de caras",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "Habilita la verificación de hash, no la desactive a menos que esté seguro de las implicaciones", "storage_template_hash_verification_enabled_description": "Habilita la verificación de hash, no la desactive a menos que esté seguro de las implicaciones",
"storage_template_migration": "Migración de plantillas de almacenamiento", "storage_template_migration": "Migración de plantillas de almacenamiento",
"storage_template_migration_description": "Aplicar la <link>{template}</link> actual a los elementos subidos previamente", "storage_template_migration_description": "Aplicar la <link>{template}</link> actual a los elementos subidos previamente",
"storage_template_migration_info": "Los cambios en las plantillas solo se aplican a los elementos nuevos. Para aplicarlos retroactivamente a los elementos subidos previamente ejecute la <link>{job}</link>.", "storage_template_migration_info": "La plantilla de almacenamiento convertirá todas las extensiones a minúscula. Los cambios en las plantillas solo se aplican a los elementos nuevos. Para aplicarlos retroactivamente a los elementos subidos previamente ejecute la <link>{job}</link>.",
"storage_template_migration_job": "Migración de la plantilla de almacenamiento", "storage_template_migration_job": "Migración de la plantilla de almacenamiento",
"storage_template_more_details": "Para obtener más detalles sobre esta función, consulte la <template-link>Plantilla de almacenamiento</template-link> y sus <implications-link>implicaciones</implications-link>", "storage_template_more_details": "Para obtener más detalles sobre esta función, consulte la <template-link>Plantilla de almacenamiento</template-link> y sus <implications-link>implicaciones</implications-link>",
"storage_template_onboarding_description": "Cuando está habilitada, esta función organizará automáticamente los archivos según una plantilla definida por el usuario. Debido a problemas de estabilidad, la función se ha desactivado de forma predeterminada. Para obtener más información, consulte la <link>documentación</link>.", "storage_template_onboarding_description": "Cuando está habilitada, esta función organizará automáticamente los archivos según una plantilla definida por el usuario. Debido a problemas de estabilidad, la función se ha desactivado de forma predeterminada. Para obtener más información, consulte la <link>documentación</link>.",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "Maximos B-frames", "transcoding_max_b_frames": "Maximos B-frames",
"transcoding_max_b_frames_description": "Los valores más altos mejoran la eficiencia de la compresión, pero ralentizan la codificación. Puede que no sea compatible con la aceleración de hardware en dispositivos más antiguos. 0 desactiva los fotogramas B, mientras que -1 establece este valor automáticamente.", "transcoding_max_b_frames_description": "Los valores más altos mejoran la eficiencia de la compresión, pero ralentizan la codificación. Puede que no sea compatible con la aceleración de hardware en dispositivos más antiguos. 0 desactiva los fotogramas B, mientras que -1 establece este valor automáticamente.",
"transcoding_max_bitrate": "Máxima tasa de bits", "transcoding_max_bitrate": "Máxima tasa de bits",
"transcoding_max_bitrate_description": "Establecer una tasa de bits máxima puede hacer que los tamaños de archivos sean más predecibles con un costo menor para la calidad. A 720p, los valores típicos son 2600k para VP9 o HEVC, o 4500k para H.264. Deshabilitado si se establece en 0.", "transcoding_max_bitrate_description": "Establecer una tasa de bits máxima puede hacer que los tamaños de archivos sean más predecibles con un costo menor para la calidad. A 720p, los valores típicos son 2600 kbit/s para VP9 o HEVC, o 4500 kbit/s para H.264. Deshabilitado si se establece en 0.",
"transcoding_max_keyframe_interval": "Intervalo máximo de fotogramas clave", "transcoding_max_keyframe_interval": "Intervalo máximo de fotogramas clave",
"transcoding_max_keyframe_interval_description": "Establece la distancia máxima de fotograma entre fotogramas clave. Los valores más bajos empeoran la eficiencia de la compresión, pero mejoran los tiempos de búsqueda y pueden mejorar la calidad en escenas con movimientos rápidos. 0 establece este valor automáticamente.", "transcoding_max_keyframe_interval_description": "Establece la distancia máxima de fotograma entre fotogramas clave. Los valores más bajos empeoran la eficiencia de la compresión, pero mejoran los tiempos de búsqueda y pueden mejorar la calidad en escenas con movimientos rápidos. 0 establece este valor automáticamente.",
"transcoding_optimal_description": "Vídeos con una resolución superior a la fijada o que no están en un formato aceptado", "transcoding_optimal_description": "Vídeos con una resolución superior a la fijada o que no están en un formato aceptado",
@@ -391,6 +399,7 @@
"allow_edits": "Permitir edición", "allow_edits": "Permitir edición",
"allow_public_user_to_download": "Permitir descargar al usuario público", "allow_public_user_to_download": "Permitir descargar al usuario público",
"allow_public_user_to_upload": "Permitir cargar al usuario publico", "allow_public_user_to_upload": "Permitir cargar al usuario publico",
"alt_text_qr_code": "Código QR",
"anti_clockwise": "En sentido antihorario", "anti_clockwise": "En sentido antihorario",
"api_key": "Clave API", "api_key": "Clave API",
"api_key_description": "Este valor sólo se mostrará una vez. Asegúrese de copiarlo antes de cerrar la ventana.", "api_key_description": "Este valor sólo se mostrará una vez. Asegúrese de copiarlo antes de cerrar la ventana.",
@@ -410,7 +419,7 @@
"asset_description_updated": "La descripción del elemento ha sido actualizada", "asset_description_updated": "La descripción del elemento ha sido actualizada",
"asset_filename_is_offline": "El archivo {filename} está offline", "asset_filename_is_offline": "El archivo {filename} está offline",
"asset_has_unassigned_faces": "El archivo no tiene rostros asignados", "asset_has_unassigned_faces": "El archivo no tiene rostros asignados",
"asset_hashing": "Hashing…", "asset_hashing": "Calculando hash…",
"asset_offline": "Archivos sin conexión", "asset_offline": "Archivos sin conexión",
"asset_offline_description": "Este activo externo ya no se encuentra en el disco. Por favor, póngase en contacto con su administrador de Immich para obtener ayuda.", "asset_offline_description": "Este activo externo ya no se encuentra en el disco. Por favor, póngase en contacto con su administrador de Immich para obtener ayuda.",
"asset_skipped": "Omitido", "asset_skipped": "Omitido",
@@ -438,7 +447,7 @@
"blurred_background": "Fondo borroso", "blurred_background": "Fondo borroso",
"bugs_and_feature_requests": "Errores y solicitudes de funciones", "bugs_and_feature_requests": "Errores y solicitudes de funciones",
"build": "Compilación", "build": "Compilación",
"build_image": "Construir imagen", "build_image": "Imagen de compilación",
"bulk_delete_duplicates_confirmation": "¿Estás seguro de que deseas eliminar de forma masiva {count, plural, one {# elemento duplicado} other {# elementos duplicados}}? Esto mantendrá el activo más grande de cada grupo y eliminará permanentemente todos los demás duplicados. ¡Esta acción no se puede deshacer!", "bulk_delete_duplicates_confirmation": "¿Estás seguro de que deseas eliminar de forma masiva {count, plural, one {# elemento duplicado} other {# elementos duplicados}}? Esto mantendrá el activo más grande de cada grupo y eliminará permanentemente todos los demás duplicados. ¡Esta acción no se puede deshacer!",
"bulk_keep_duplicates_confirmation": "¿Estas seguro de que desea mantener {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto resolverá todos los grupos duplicados sin borrar nada.", "bulk_keep_duplicates_confirmation": "¿Estas seguro de que desea mantener {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto resolverá todos los grupos duplicados sin borrar nada.",
"bulk_trash_duplicates_confirmation": "¿Estas seguro de que desea eliminar masivamente {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto mantendrá el archivo más grande de cada grupo y eliminará todos los demás duplicados.", "bulk_trash_duplicates_confirmation": "¿Estas seguro de que desea eliminar masivamente {count, plural, one {# duplicate asset} other {# duplicate assets}} archivos duplicados? Esto mantendrá el archivo más grande de cada grupo y eliminará todos los demás duplicados.",
@@ -481,6 +490,7 @@
"comments_are_disabled": "Los comentarios están deshabilitados", "comments_are_disabled": "Los comentarios están deshabilitados",
"confirm": "Confirmar", "confirm": "Confirmar",
"confirm_admin_password": "Confirmar Contraseña de Administrador", "confirm_admin_password": "Confirmar Contraseña de Administrador",
"confirm_delete_face": "¿Estás seguro que deseas eliminar la cara de {name} del archivo?",
"confirm_delete_shared_link": "¿Estás seguro de que deseas eliminar este enlace compartido?", "confirm_delete_shared_link": "¿Estás seguro de que deseas eliminar este enlace compartido?",
"confirm_keep_this_delete_others": "Todos los demás activos de la pila se eliminarán excepto este activo. ¿Está seguro de que quiere continuar?", "confirm_keep_this_delete_others": "Todos los demás activos de la pila se eliminarán excepto este activo. ¿Está seguro de que quiere continuar?",
"confirm_password": "Confirmar contraseña", "confirm_password": "Confirmar contraseña",
@@ -533,6 +543,7 @@
"delete_album": "Eliminar álbum", "delete_album": "Eliminar álbum",
"delete_api_key_prompt": "¿Está seguro de que desea eliminar esta clave API?", "delete_api_key_prompt": "¿Está seguro de que desea eliminar esta clave API?",
"delete_duplicates_confirmation": "¿Está seguro de que desea eliminar permanentemente estos duplicados?", "delete_duplicates_confirmation": "¿Está seguro de que desea eliminar permanentemente estos duplicados?",
"delete_face": "Eliminar cara",
"delete_key": "Eliminar clave", "delete_key": "Eliminar clave",
"delete_library": "Eliminar biblioteca", "delete_library": "Eliminar biblioteca",
"delete_link": "Eliminar enlace", "delete_link": "Eliminar enlace",
@@ -600,6 +611,7 @@
"enabled": "Habilitado", "enabled": "Habilitado",
"end_date": "Fecha final", "end_date": "Fecha final",
"error": "Error", "error": "Error",
"error_delete_face": "Error al eliminar la cara del archivo",
"error_loading_image": "Error al cargar la imagen", "error_loading_image": "Error al cargar la imagen",
"error_title": "Error: algo salió mal", "error_title": "Error: algo salió mal",
"errors": { "errors": {
@@ -852,6 +864,7 @@
"loop_videos": "Vídeos en bucle", "loop_videos": "Vídeos en bucle",
"loop_videos_description": "Habilite la reproducción automática de un video en el visor de detalles.", "loop_videos_description": "Habilite la reproducción automática de un video en el visor de detalles.",
"main_branch_warning": "Estás ejecutando una compilación desde la rama principal. ¡Recomendamos encarecidamente usar una versión de lanzamiento!", "main_branch_warning": "Estás ejecutando una compilación desde la rama principal. ¡Recomendamos encarecidamente usar una versión de lanzamiento!",
"main_menu": "Menú principal",
"make": "Marca", "make": "Marca",
"manage_shared_links": "Administrar enlaces compartidos", "manage_shared_links": "Administrar enlaces compartidos",
"manage_sharing_with_partners": "Administrar el uso compartido con invitados", "manage_sharing_with_partners": "Administrar el uso compartido con invitados",
@@ -884,6 +897,7 @@
"month": "Mes", "month": "Mes",
"more": "Mas", "more": "Mas",
"moved_to_trash": "Movido a la papelera", "moved_to_trash": "Movido a la papelera",
"mute_memories": "Silenciar Recuerdos",
"my_albums": "Mis albums", "my_albums": "Mis albums",
"name": "Nombre", "name": "Nombre",
"name_or_nickname": "Nombre o apodo", "name_or_nickname": "Nombre o apodo",
@@ -979,6 +993,7 @@
"permanently_deleted_asset": "Archivo eliminado permanentemente", "permanently_deleted_asset": "Archivo eliminado permanentemente",
"permanently_deleted_assets_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}", "permanently_deleted_assets_count": "Eliminado permanentemente {count, plural, one {# elemento} other {# elementos}}",
"person": "Persona", "person": "Persona",
"person_birthdate": "Nacido el {date}",
"person_hidden": "{name}{hidden, select, true { (oculto)} other {}}", "person_hidden": "{name}{hidden, select, true { (oculto)} other {}}",
"photo_shared_all_users": "Parece que compartiste tus fotos con todos los usuarios o no tienes ningún usuario con quien compartirlas.", "photo_shared_all_users": "Parece que compartiste tus fotos con todos los usuarios o no tienes ningún usuario con quien compartirlas.",
"photos": "Fotos", "photos": "Fotos",
@@ -1070,12 +1085,16 @@
"remove_from_album": "Eliminar del álbum", "remove_from_album": "Eliminar del álbum",
"remove_from_favorites": "Quitar de favoritos", "remove_from_favorites": "Quitar de favoritos",
"remove_from_shared_link": "Eliminar desde enlace compartido", "remove_from_shared_link": "Eliminar desde enlace compartido",
"remove_memory": "Quitar memoria",
"remove_photo_from_memory": "Quitar foto de esta memoria",
"remove_url": "Eliminar URL", "remove_url": "Eliminar URL",
"remove_user": "Eliminar usuario", "remove_user": "Eliminar usuario",
"removed_api_key": "Clave API eliminada: {name}", "removed_api_key": "Clave API eliminada: {name}",
"removed_from_archive": "Eliminado del archivo", "removed_from_archive": "Eliminado del archivo",
"removed_from_favorites": "Eliminado de favoritos", "removed_from_favorites": "Eliminado de favoritos",
"removed_from_favorites_count": "{count, plural, other {Eliminados #}} de favoritos", "removed_from_favorites_count": "{count, plural, other {Eliminados #}} de favoritos",
"removed_memory": "Memoria eliminada",
"removed_photo_from_memory": "Se ha eliminado la foto de la memoria",
"removed_tagged_assets": "Etiqueta eliminada de {count, plural, one {# activo} other {# activos}}", "removed_tagged_assets": "Etiqueta eliminada de {count, plural, one {# activo} other {# activos}}",
"rename": "Renombrar", "rename": "Renombrar",
"repair": "Reparar", "repair": "Reparar",
@@ -1084,6 +1103,7 @@
"repository": "Repositorio", "repository": "Repositorio",
"require_password": "Contraseña requerida", "require_password": "Contraseña requerida",
"require_user_to_change_password_on_first_login": "Requerir que el usuario cambie la contraseña en el primer inicio de sesión", "require_user_to_change_password_on_first_login": "Requerir que el usuario cambie la contraseña en el primer inicio de sesión",
"rescan": "Volver a escanear",
"reset": "Reiniciar", "reset": "Reiniciar",
"reset_password": "Restablecer la contraseña", "reset_password": "Restablecer la contraseña",
"reset_people_visibility": "Restablecer la visibilidad de las personas", "reset_people_visibility": "Restablecer la visibilidad de las personas",
@@ -1127,6 +1147,7 @@
"search_options": "Opciones de búsqueda", "search_options": "Opciones de búsqueda",
"search_people": "Buscar personas", "search_people": "Buscar personas",
"search_places": "Buscar lugar", "search_places": "Buscar lugar",
"search_rating": "Buscar por calificación...",
"search_settings": "Ajustes de la búsqueda", "search_settings": "Ajustes de la búsqueda",
"search_state": "Buscar región/estado...", "search_state": "Buscar región/estado...",
"search_tags": "Buscando etiquetas...", "search_tags": "Buscando etiquetas...",
@@ -1136,6 +1157,7 @@
"searching_locales": "Buscando sitios...", "searching_locales": "Buscando sitios...",
"second": "Segundo", "second": "Segundo",
"see_all_people": "Ver todas las personas", "see_all_people": "Ver todas las personas",
"select": "Selecciona",
"select_album_cover": "Seleccionar portada del álbum", "select_album_cover": "Seleccionar portada del álbum",
"select_all": "Seleccionar todo", "select_all": "Seleccionar todo",
"select_all_duplicates": "Seleccionar todos los duplicados", "select_all_duplicates": "Seleccionar todos los duplicados",
@@ -1225,7 +1247,7 @@
"stack_select_one_photo": "Selecciona una imagen principal para la pila", "stack_select_one_photo": "Selecciona una imagen principal para la pila",
"stack_selected_photos": "Apilar fotos seleccionadas", "stack_selected_photos": "Apilar fotos seleccionadas",
"stacked_assets_count": "Apilado(s) {count, plural, one {# activo} other {# activos}}", "stacked_assets_count": "Apilado(s) {count, plural, one {# activo} other {# activos}}",
"stacktrace": "Stacktrace", "stacktrace": "Seguimiento de pila",
"start": "Inicio", "start": "Inicio",
"start_date": "Fecha de inicio", "start_date": "Fecha de inicio",
"state": "Estado", "state": "Estado",
@@ -1250,6 +1272,7 @@
"tag_created": "Etiqueta creada: {tag}", "tag_created": "Etiqueta creada: {tag}",
"tag_feature_description": "Explore fotos y videos agrupados por temas de etiquetas lógicas", "tag_feature_description": "Explore fotos y videos agrupados por temas de etiquetas lógicas",
"tag_not_found_question": "¿No encuentra una etiqueta? <link>Crea una nueva etiqueta.</link>", "tag_not_found_question": "¿No encuentra una etiqueta? <link>Crea una nueva etiqueta.</link>",
"tag_people": "Etiquetar personas",
"tag_updated": "Etiqueta actualizada: {tag}", "tag_updated": "Etiqueta actualizada: {tag}",
"tagged_assets": "Etiquetado(s) {count, plural, one {# activo} other {# activos}}", "tagged_assets": "Etiquetado(s) {count, plural, one {# activo} other {# activos}}",
"tags": "Etiquetas", "tags": "Etiquetas",
@@ -1290,6 +1313,7 @@
"unlink_motion_video": "Desvincular vídeo en movimiento", "unlink_motion_video": "Desvincular vídeo en movimiento",
"unlink_oauth": "Desvincular OAuth", "unlink_oauth": "Desvincular OAuth",
"unlinked_oauth_account": "Cuenta OAuth desconectada", "unlinked_oauth_account": "Cuenta OAuth desconectada",
"unmute_memories": "Habilitar sonido recuerdos",
"unnamed_album": "Album sin nombre", "unnamed_album": "Album sin nombre",
"unnamed_album_delete_confirmation": "¿Seguro que quieres borrar este álbum?", "unnamed_album_delete_confirmation": "¿Seguro que quieres borrar este álbum?",
"unnamed_share": "Compartido sin nombre", "unnamed_share": "Compartido sin nombre",
@@ -1332,7 +1356,7 @@
"version_announcement_closing": "Tu amigo, Alex", "version_announcement_closing": "Tu amigo, Alex",
"version_announcement_message": "¡Hola! Hay una nueva versión de Immich disponible. Tómese un tiempo para leer las <link> notas de la versión </link> para asegurarse de que su configuración esté actualizada y evitar errores de configuración, especialmente si utiliza WatchTower o cualquier mecanismo que se encargue de actualizar su instancia de Immich automáticamente.", "version_announcement_message": "¡Hola! Hay una nueva versión de Immich disponible. Tómese un tiempo para leer las <link> notas de la versión </link> para asegurarse de que su configuración esté actualizada y evitar errores de configuración, especialmente si utiliza WatchTower o cualquier mecanismo que se encargue de actualizar su instancia de Immich automáticamente.",
"version_history": "Historial de versiones", "version_history": "Historial de versiones",
"version_history_item": "Instalada la {version} el {date}", "version_history_item": "Instalada {version} el {date}",
"video": "Vídeo", "video": "Vídeo",
"video_hover_setting": "Iniciar vídeo al pasar por encima", "video_hover_setting": "Iniciar vídeo al pasar por encima",
"video_hover_setting_description": "Reproducir el vídeo cuando el ratón está encima de un vídeo. Aunque esté desactivado, se iniciará cuando el cursor del ratón esté sobre el icono de \"reproducir\".", "video_hover_setting_description": "Reproducir el vídeo cuando el ratón está encima de un vídeo. Aunque esté desactivado, se iniciará cuando el cursor del ratón esté sobre el icono de \"reproducir\".",
@@ -1343,6 +1367,7 @@
"view_all": "Ver todas", "view_all": "Ver todas",
"view_all_users": "Mostrar todos los usuarios", "view_all_users": "Mostrar todos los usuarios",
"view_in_timeline": "Mostrar en la línea de tiempo", "view_in_timeline": "Mostrar en la línea de tiempo",
"view_link": "Ver enlace",
"view_links": "Mostrar enlaces", "view_links": "Mostrar enlaces",
"view_name": "Ver", "view_name": "Ver",
"view_next_asset": "Mostrar siguiente elemento", "view_next_asset": "Mostrar siguiente elemento",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Varundamise seaded", "backup_settings": "Varundamise seaded",
"backup_settings_description": "Halda andmebaasi varundamise seadeid", "backup_settings_description": "Halda andmebaasi varundamise seadeid",
"check_all": "Märgi kõik", "check_all": "Märgi kõik",
"cleanup": "Koristus",
"cleared_jobs": "Tööted eemaldatud: {job}", "cleared_jobs": "Tööted eemaldatud: {job}",
"config_set_by_file": "Konfiguratsioon on määratud konfifaili abil", "config_set_by_file": "Konfiguratsioon on määratud konfifaili abil",
"confirm_delete_library": "Kas oled kindel, et soovid kustutada {library} kogu?", "confirm_delete_library": "Kas oled kindel, et soovid kustutada {library} kogu?",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "Kogu kõigi failide sundvärskendamine", "forcing_refresh_library_files": "Kogu kõigi failide sundvärskendamine",
"image_format": "Formaat", "image_format": "Formaat",
"image_format_description": "WebP failid on väiksemad kui JPEG, aga kodeerimine on aeglasem.", "image_format_description": "WebP failid on väiksemad kui JPEG, aga kodeerimine on aeglasem.",
"image_fullsize_description": "Täismõõdus pilt ilma metaandmeteta, kasutatakse sisse suumimisel",
"image_fullsize_enabled": "Luba täismõõdus piltide genereerimine",
"image_fullsize_enabled_description": "Genereeri mitte-veebisõbralike formaatide jaoks täismõõdus pilt. Kui \"Eelista manustatud eelvaadet\" on lubatud, kasutatakse manustatud eelvaateid otse ilma teisendamiseta. Ei mõjuta veebisõbralikke formaate nagu JPEG.",
"image_fullsize_quality_description": "Täismõõdus pildi kvaliteet vahemikus 1-100. Kõrgem väärtus on parem, aga tulemuseks on suuremad failid.",
"image_fullsize_title": "Täismõõdus pildi seaded",
"image_prefer_embedded_preview": "Eelista manustatud eelvaadet", "image_prefer_embedded_preview": "Eelista manustatud eelvaadet",
"image_prefer_embedded_preview_setting_description": "Kasuta pilditöötluse sisendina võimalusel RAW fotodesse manustatud eelvaateid. See võib mõnede piltide puhul anda tulemuseks täpsemad värvid, aga eelvaate kvaliteet sõltub konkreetsest kaamerast ning pildis võib olla rohkem tihendusmüra.", "image_prefer_embedded_preview_setting_description": "Kasuta pilditöötluse sisendina võimalusel RAW fotodesse manustatud eelvaateid. See võib mõnede piltide puhul anda tulemuseks täpsemad värvid, aga eelvaate kvaliteet sõltub konkreetsest kaamerast ning pildis võib olla rohkem tihendusmüra.",
"image_prefer_wide_gamut": "Eelista laia värvigammat", "image_prefer_wide_gamut": "Eelista laia värvigammat",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Luba kogu perioodiline skaneerimine", "library_scanning_enable_description": "Luba kogu perioodiline skaneerimine",
"library_settings": "Väline kogu", "library_settings": "Väline kogu",
"library_settings_description": "Halda välise kogu seadeid", "library_settings_description": "Halda välise kogu seadeid",
"library_tasks_description": "Soorita kogu toiminguid", "library_tasks_description": "Otsi välistest kogudest uusi ja muutunud üksuseid",
"library_watching_enable_description": "Jälgi välises kogus failide muudatusi", "library_watching_enable_description": "Jälgi välises kogus failide muudatusi",
"library_watching_settings": "Kogu jälgimine (EKSPERIMENTAALNE)", "library_watching_settings": "Kogu jälgimine (EKSPERIMENTAALNE)",
"library_watching_settings_description": "Jälgi automaatselt muutunud faile", "library_watching_settings_description": "Jälgi automaatselt muutunud faile",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Otsi pilte semantiliselt CLIP-manuste abil", "machine_learning_smart_search_description": "Otsi pilte semantiliselt CLIP-manuste abil",
"machine_learning_smart_search_enabled": "Luba nutiotsing", "machine_learning_smart_search_enabled": "Luba nutiotsing",
"machine_learning_smart_search_enabled_description": "Kui keelatud, siis ei kodeerita pilte nutiotsingu jaoks.", "machine_learning_smart_search_enabled_description": "Kui keelatud, siis ei kodeerita pilte nutiotsingu jaoks.",
"machine_learning_url_description": "Masinõppe serveri URL. Kui ette on antud rohkem kui üks URL, proovitakse neid järjest ükshaaval, kuni üks edukalt vastab.", "machine_learning_url_description": "Masinõppe serveri URL. Kui ette on antud rohkem kui üks URL, proovitakse neid järjest ükshaaval, kuni üks edukalt vastab. Servereid, mis ei vasta, ignoreeritakse ajutiselt, kuni ühendus taastub.",
"manage_concurrency": "Halda samaaegsust", "manage_concurrency": "Halda samaaegsust",
"manage_log_settings": "Halda logi seadeid", "manage_log_settings": "Halda logi seadeid",
"map_dark_style": "Tume stiil", "map_dark_style": "Tume stiil",
@@ -147,6 +153,8 @@
"map_settings": "Kaart", "map_settings": "Kaart",
"map_settings_description": "Halda kaardi seadeid", "map_settings_description": "Halda kaardi seadeid",
"map_style_description": "Kaarditeema style.json URL", "map_style_description": "Kaarditeema style.json URL",
"memory_cleanup_job": "Mälestuste korrastamine",
"memory_generate_job": "Mälestuste genereerimine",
"metadata_extraction_job": "Metaandmete eraldamine", "metadata_extraction_job": "Metaandmete eraldamine",
"metadata_extraction_job_description": "Eralda igast üksusest metaandmed, nagu GPS-koordinaadid, näod ja resolutsioon", "metadata_extraction_job_description": "Eralda igast üksusest metaandmed, nagu GPS-koordinaadid, näod ja resolutsioon",
"metadata_faces_import_setting": "Luba nägude import", "metadata_faces_import_setting": "Luba nägude import",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "Lülitab sisse räsi kontrolli; ära lülita seda välja, kui sa ei ole tagajärgedest teadlik", "storage_template_hash_verification_enabled_description": "Lülitab sisse räsi kontrolli; ära lülita seda välja, kui sa ei ole tagajärgedest teadlik",
"storage_template_migration": "Talletusmalli migreerimine", "storage_template_migration": "Talletusmalli migreerimine",
"storage_template_migration_description": "Rakenda praegune <link>{template}</link> varem üleslaaditud üksustele", "storage_template_migration_description": "Rakenda praegune <link>{template}</link> varem üleslaaditud üksustele",
"storage_template_migration_info": "Malli muudatused rakenduvad ainult uutele üksustele. Et rakendada malli tagasiulatuvalt varem üleslaaditud üksustele, käivita <link>{job}</link>.", "storage_template_migration_info": "Talletusmall teeb kõik faililaiendid väiketähtedeks. Malli muudatused rakenduvad ainult uutele üksustele. Et rakendada malli tagasiulatuvalt varem üleslaaditud üksustele, käivita <link>{job}</link>.",
"storage_template_migration_job": "Talletusmallide migreerimise tööde", "storage_template_migration_job": "Talletusmallide migreerimise tööde",
"storage_template_more_details": "Et selle funktsiooni kohta rohkem teada saada, loe <template-link>talletusmallide</template-link> ja nende <implications-link>tagajärgede</implications-link> kohta", "storage_template_more_details": "Et selle funktsiooni kohta rohkem teada saada, loe <template-link>talletusmallide</template-link> ja nende <implications-link>tagajärgede</implications-link> kohta",
"storage_template_onboarding_description": "Kui sisse lülitatud, võimaldab see faile kasutaja määratud malli alusel automaatselt organiseerida. Stabiilsusprobleemide tõttu on see funktsioon vaikimisi välja lülitatud. Rohkem infot leiad <link>dokumentatsioonist</link>.", "storage_template_onboarding_description": "Kui sisse lülitatud, võimaldab see faile kasutaja määratud malli alusel automaatselt organiseerida. Stabiilsusprobleemide tõttu on see funktsioon vaikimisi välja lülitatud. Rohkem infot leiad <link>dokumentatsioonist</link>.",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "Maksimaalne B-kaadrite arv", "transcoding_max_b_frames": "Maksimaalne B-kaadrite arv",
"transcoding_max_b_frames_description": "Kõrgemad väärtused parandavad pakkimise efektiivsust, aga aeglustavad kodeerimist. See valik ei pruugi olla ühilduv riistvaralise kiirendusega vanematel seadmetel. 0 lülitab B-kaadrid välja, -1 määrab väärtuse automaatselt.", "transcoding_max_b_frames_description": "Kõrgemad väärtused parandavad pakkimise efektiivsust, aga aeglustavad kodeerimist. See valik ei pruugi olla ühilduv riistvaralise kiirendusega vanematel seadmetel. 0 lülitab B-kaadrid välja, -1 määrab väärtuse automaatselt.",
"transcoding_max_bitrate": "Maksimaalne bitisagedus", "transcoding_max_bitrate": "Maksimaalne bitisagedus",
"transcoding_max_bitrate_description": "Maksimaalse bitisageduse määramine teeb failisuurused ennustatavamaks, väikese kvaliteedikao hinnaga. 720p resolutsiooni puhul on tüüpilised väärtused 2600k (VP9 ja HEVC) või 4500k (H.264). Väärtus 0 eemaldab piirangu.", "transcoding_max_bitrate_description": "Maksimaalse bitisageduse määramine teeb failisuurused ennustatavamaks, väikese kvaliteedikao hinnaga. 720p resolutsiooni puhul on tüüpilised väärtused 2600 kbit/s (VP9 ja HEVC) või 4500 kbit/s (H.264). Väärtus 0 eemaldab piirangu.",
"transcoding_max_keyframe_interval": "Maksimaalne võtmekaadri intervall", "transcoding_max_keyframe_interval": "Maksimaalne võtmekaadri intervall",
"transcoding_max_keyframe_interval_description": "Määrab maksimaalse kauguse võtmekaadrite vahel. Madalamad väärtused vähendavad pakkimise efektiivsust, aga parandavad otsimiskiirust ning võivad tõsta kiire liikumisega stseenide kvaliteeti. 0 määrab väärtuse automaatselt.", "transcoding_max_keyframe_interval_description": "Määrab maksimaalse kauguse võtmekaadrite vahel. Madalamad väärtused vähendavad pakkimise efektiivsust, aga parandavad otsimiskiirust ning võivad tõsta kiire liikumisega stseenide kvaliteeti. 0 määrab väärtuse automaatselt.",
"transcoding_optimal_description": "Kõrgema kui lubatud resolutsiooniga või mittelubatud formaadis videod", "transcoding_optimal_description": "Kõrgema kui lubatud resolutsiooniga või mittelubatud formaadis videod",
@@ -391,6 +399,7 @@
"allow_edits": "Luba muutmine", "allow_edits": "Luba muutmine",
"allow_public_user_to_download": "Luba avalikul kasutajal alla laadida", "allow_public_user_to_download": "Luba avalikul kasutajal alla laadida",
"allow_public_user_to_upload": "Luba avalikul kasutajal üles laadida", "allow_public_user_to_upload": "Luba avalikul kasutajal üles laadida",
"alt_text_qr_code": "QR kood",
"anti_clockwise": "Vastupäeva", "anti_clockwise": "Vastupäeva",
"api_key": "API võti", "api_key": "API võti",
"api_key_description": "Seda väärtust kuvatakse ainult üks kord. Kopeeri see enne akna sulgemist.", "api_key_description": "Seda väärtust kuvatakse ainult üks kord. Kopeeri see enne akna sulgemist.",
@@ -431,7 +440,7 @@
"assets_were_part_of_album_count": "{count, plural, one {Üksus oli} other {Üksused olid}} juba osa albumist", "assets_were_part_of_album_count": "{count, plural, one {Üksus oli} other {Üksused olid}} juba osa albumist",
"authorized_devices": "Autoriseeritud seadmed", "authorized_devices": "Autoriseeritud seadmed",
"back": "Tagasi", "back": "Tagasi",
"back_close_deselect": "Tagasi, sulge, või tühista valik", "back_close_deselect": "Tagasi, sulge või tühista valik",
"backward": "Tagasi", "backward": "Tagasi",
"birthdate_saved": "Sünnikuupäev salvestatud", "birthdate_saved": "Sünnikuupäev salvestatud",
"birthdate_set_description": "Sünnikuupäeva kasutatakse isiku vanuse arvutamiseks foto tegemise hetkel.", "birthdate_set_description": "Sünnikuupäeva kasutatakse isiku vanuse arvutamiseks foto tegemise hetkel.",
@@ -481,6 +490,7 @@
"comments_are_disabled": "Kommentaarid on keelatud", "comments_are_disabled": "Kommentaarid on keelatud",
"confirm": "Kinnita", "confirm": "Kinnita",
"confirm_admin_password": "Kinnita administraatori parool", "confirm_admin_password": "Kinnita administraatori parool",
"confirm_delete_face": "Kas oled kindel, et soovid isiku {name} näo üksuselt kustutada?",
"confirm_delete_shared_link": "Kas oled kindel, et soovid selle jagatud lingi kustutada?", "confirm_delete_shared_link": "Kas oled kindel, et soovid selle jagatud lingi kustutada?",
"confirm_keep_this_delete_others": "Kõik muud üksused selles virnas kustutatakse. Kas oled kindel, et soovid jätkata?", "confirm_keep_this_delete_others": "Kõik muud üksused selles virnas kustutatakse. Kas oled kindel, et soovid jätkata?",
"confirm_password": "Kinnita parool", "confirm_password": "Kinnita parool",
@@ -533,6 +543,7 @@
"delete_album": "Kustuta album", "delete_album": "Kustuta album",
"delete_api_key_prompt": "Kas oled kindel, et soovid selle API võtme kustutada?", "delete_api_key_prompt": "Kas oled kindel, et soovid selle API võtme kustutada?",
"delete_duplicates_confirmation": "Kas oled kindel, et soovid need duplikaadid jäädavalt kustutada?", "delete_duplicates_confirmation": "Kas oled kindel, et soovid need duplikaadid jäädavalt kustutada?",
"delete_face": "Kustuta nägu",
"delete_key": "Kustuta võti", "delete_key": "Kustuta võti",
"delete_library": "Kustuta kogu", "delete_library": "Kustuta kogu",
"delete_link": "Kustuta link", "delete_link": "Kustuta link",
@@ -600,6 +611,7 @@
"enabled": "Lubatud", "enabled": "Lubatud",
"end_date": "Lõppkuupäev", "end_date": "Lõppkuupäev",
"error": "Viga", "error": "Viga",
"error_delete_face": "Viga näo kustutamisel",
"error_loading_image": "Viga pildi laadimisel", "error_loading_image": "Viga pildi laadimisel",
"error_title": "Viga - midagi läks valesti", "error_title": "Viga - midagi läks valesti",
"errors": { "errors": {
@@ -718,6 +730,7 @@
"unable_to_submit_job": "Tööte edastamine ebaõnnestus", "unable_to_submit_job": "Tööte edastamine ebaõnnestus",
"unable_to_trash_asset": "Üksuse prügikasti liigutamine ebaõnnestus", "unable_to_trash_asset": "Üksuse prügikasti liigutamine ebaõnnestus",
"unable_to_unlink_account": "Konto lahtiühendamine ebaõnnestus", "unable_to_unlink_account": "Konto lahtiühendamine ebaõnnestus",
"unable_to_unlink_motion_video": "Liikuva video linkimise tühistamine ebaõnnestus",
"unable_to_update_album_cover": "Albumi kaanepildi muutmine ebaõnnestus", "unable_to_update_album_cover": "Albumi kaanepildi muutmine ebaõnnestus",
"unable_to_update_album_info": "Albumi info muutmine ebaõnnestus", "unable_to_update_album_info": "Albumi info muutmine ebaõnnestus",
"unable_to_update_library": "Kogu uuendamine ebaõnnestus", "unable_to_update_library": "Kogu uuendamine ebaõnnestus",
@@ -734,6 +747,7 @@
"expired": "Aegunud", "expired": "Aegunud",
"expires_date": "Aegub {date}", "expires_date": "Aegub {date}",
"explore": "Avasta", "explore": "Avasta",
"explorer": "Brauser",
"export": "Ekspordi", "export": "Ekspordi",
"export_as_json": "Ekspordi JSON-formaati", "export_as_json": "Ekspordi JSON-formaati",
"extension": "Laiend", "extension": "Laiend",
@@ -742,6 +756,7 @@
"face_unassigned": "Seostamata", "face_unassigned": "Seostamata",
"failed_to_load_assets": "Üksuste laadimine ebaõnnestus", "failed_to_load_assets": "Üksuste laadimine ebaõnnestus",
"favorite": "Lemmik", "favorite": "Lemmik",
"favorite_or_unfavorite_photo": "Lisa foto lemmikutesse või eemalda lemmikutest",
"favorites": "Lemmikud", "favorites": "Lemmikud",
"feature_photo_updated": "Esiletõstetud foto muudetud", "feature_photo_updated": "Esiletõstetud foto muudetud",
"features": "Funktsioonid", "features": "Funktsioonid",
@@ -799,6 +814,7 @@
"include_shared_albums": "Kaasa jagatud albumid", "include_shared_albums": "Kaasa jagatud albumid",
"include_shared_partner_assets": "Kaasa partneri jagatud üksused", "include_shared_partner_assets": "Kaasa partneri jagatud üksused",
"individual_share": "Jagatud üksus", "individual_share": "Jagatud üksus",
"individual_shares": "Jagatud üksused",
"info": "Info", "info": "Info",
"interval": { "interval": {
"day_at_onepm": "Iga päev kell 13", "day_at_onepm": "Iga päev kell 13",
@@ -828,6 +844,7 @@
"library_options": "Kogu seaded", "library_options": "Kogu seaded",
"light": "Hele", "light": "Hele",
"like_deleted": "Meeldimine kustutatud", "like_deleted": "Meeldimine kustutatud",
"link_motion_video": "Lingi liikuv video",
"link_options": "Lingi valikud", "link_options": "Lingi valikud",
"link_to_oauth": "Ühenda OAuth", "link_to_oauth": "Ühenda OAuth",
"linked_oauth_account": "OAuth konto ühendatud", "linked_oauth_account": "OAuth konto ühendatud",
@@ -847,6 +864,7 @@
"loop_videos": "Taasesita videod", "loop_videos": "Taasesita videod",
"loop_videos_description": "Lülita sisse, et detailvaates videot automaatselt taasesitada.", "loop_videos_description": "Lülita sisse, et detailvaates videot automaatselt taasesitada.",
"main_branch_warning": "Sa kasutad arendusversiooni; soovitame tungivalt kasutada väljalaskeversiooni!", "main_branch_warning": "Sa kasutad arendusversiooni; soovitame tungivalt kasutada väljalaskeversiooni!",
"main_menu": "Peamenüü",
"make": "Mark", "make": "Mark",
"manage_shared_links": "Halda jagatud linke", "manage_shared_links": "Halda jagatud linke",
"manage_sharing_with_partners": "Halda partneritega jagamist", "manage_sharing_with_partners": "Halda partneritega jagamist",
@@ -879,6 +897,7 @@
"month": "Kuu", "month": "Kuu",
"more": "Rohkem", "more": "Rohkem",
"moved_to_trash": "Liigutatud prügikasti", "moved_to_trash": "Liigutatud prügikasti",
"mute_memories": "Vaigista mälestused",
"my_albums": "Minu albumid", "my_albums": "Minu albumid",
"name": "Nimi", "name": "Nimi",
"name_or_nickname": "Nimi või hüüdnimi", "name_or_nickname": "Nimi või hüüdnimi",
@@ -974,6 +993,7 @@
"permanently_deleted_asset": "Üksus jäädavalt kustutatud", "permanently_deleted_asset": "Üksus jäädavalt kustutatud",
"permanently_deleted_assets_count": "{count, plural, one {# üksus} other {# üksust}} jäädavalt kustutatud", "permanently_deleted_assets_count": "{count, plural, one {# üksus} other {# üksust}} jäädavalt kustutatud",
"person": "Isik", "person": "Isik",
"person_birthdate": "Sündinud {date}",
"person_hidden": "{name}{hidden, select, true { (peidetud)} other {}}", "person_hidden": "{name}{hidden, select, true { (peidetud)} other {}}",
"photo_shared_all_users": "Paistab, et oled oma fotosid kõigi kasutajatega jaganud, või pole ühtegi kasutajat, kellega jagada.", "photo_shared_all_users": "Paistab, et oled oma fotosid kõigi kasutajatega jaganud, või pole ühtegi kasutajat, kellega jagada.",
"photos": "Fotod", "photos": "Fotod",
@@ -1065,12 +1085,16 @@
"remove_from_album": "Eemalda albumist", "remove_from_album": "Eemalda albumist",
"remove_from_favorites": "Eemalda lemmikutest", "remove_from_favorites": "Eemalda lemmikutest",
"remove_from_shared_link": "Eemalda jagatud lingist", "remove_from_shared_link": "Eemalda jagatud lingist",
"remove_memory": "Eemalda mälestus",
"remove_photo_from_memory": "Eemalda foto sellest mälestusest",
"remove_url": "Eemalda URL", "remove_url": "Eemalda URL",
"remove_user": "Eemalda kasutaja", "remove_user": "Eemalda kasutaja",
"removed_api_key": "API võti eemaldatud: {name}", "removed_api_key": "API võti eemaldatud: {name}",
"removed_from_archive": "Arhiivist eemaldatud", "removed_from_archive": "Arhiivist eemaldatud",
"removed_from_favorites": "Lemmikutest eemaldatud", "removed_from_favorites": "Lemmikutest eemaldatud",
"removed_from_favorites_count": "{count, plural, other {# eemaldatud}} lemmikutest", "removed_from_favorites_count": "{count, plural, other {# eemaldatud}} lemmikutest",
"removed_memory": "Mäletus eemaldatud",
"removed_photo_from_memory": "Foto mälestustest eemaldatud",
"removed_tagged_assets": "Silt eemaldatud {count, plural, one {# üksuselt} other {# üksuselt}}", "removed_tagged_assets": "Silt eemaldatud {count, plural, one {# üksuselt} other {# üksuselt}}",
"rename": "Nimeta ümber", "rename": "Nimeta ümber",
"repair": "Parandus", "repair": "Parandus",
@@ -1079,6 +1103,7 @@
"repository": "Koodihoidla", "repository": "Koodihoidla",
"require_password": "Nõua parooli", "require_password": "Nõua parooli",
"require_user_to_change_password_on_first_login": "Nõua kasutajalt esmakordsel sisenemisel parooli muutmist", "require_user_to_change_password_on_first_login": "Nõua kasutajalt esmakordsel sisenemisel parooli muutmist",
"rescan": "Skaneeri uuesti",
"reset": "Lähtesta", "reset": "Lähtesta",
"reset_password": "Lähtesta parool", "reset_password": "Lähtesta parool",
"reset_people_visibility": "Lähtesta isikute nähtavus", "reset_people_visibility": "Lähtesta isikute nähtavus",
@@ -1122,6 +1147,7 @@
"search_options": "Otsingu valikud", "search_options": "Otsingu valikud",
"search_people": "Otsi inimesi", "search_people": "Otsi inimesi",
"search_places": "Otsi kohti", "search_places": "Otsi kohti",
"search_rating": "Otsi hinnangu järgi...",
"search_settings": "Otsi seadeid", "search_settings": "Otsi seadeid",
"search_state": "Otsi osariiki...", "search_state": "Otsi osariiki...",
"search_tags": "Otsi silte...", "search_tags": "Otsi silte...",
@@ -1131,6 +1157,7 @@
"searching_locales": "Lokaatide otsimine...", "searching_locales": "Lokaatide otsimine...",
"second": "Sekund", "second": "Sekund",
"see_all_people": "Vaata kõiki isikuid", "see_all_people": "Vaata kõiki isikuid",
"select": "Vali",
"select_album_cover": "Vali albumi kaanepilt", "select_album_cover": "Vali albumi kaanepilt",
"select_all": "Vali kõik", "select_all": "Vali kõik",
"select_all_duplicates": "Vali kõik duplikaadid", "select_all_duplicates": "Vali kõik duplikaadid",
@@ -1225,7 +1252,7 @@
"start_date": "Alguskuupäev", "start_date": "Alguskuupäev",
"state": "Osariik", "state": "Osariik",
"status": "Staatus", "status": "Staatus",
"stop_motion_photo": "Peata liikuv pilt", "stop_motion_photo": "Peata liikuv foto",
"stop_photo_sharing": "Lõpeta oma fotode jagamine?", "stop_photo_sharing": "Lõpeta oma fotode jagamine?",
"stop_photo_sharing_description": "{partner} ei pääse rohkem su fotodele ligi.", "stop_photo_sharing_description": "{partner} ei pääse rohkem su fotodele ligi.",
"stop_sharing_photos_with_user": "Lõpeta oma fotode selle kasutajaga jagamine", "stop_sharing_photos_with_user": "Lõpeta oma fotode selle kasutajaga jagamine",
@@ -1245,6 +1272,7 @@
"tag_created": "Lisatud silt: {tag}", "tag_created": "Lisatud silt: {tag}",
"tag_feature_description": "Fotode ja videote lehitsemine siltide kaupa grupeeritult", "tag_feature_description": "Fotode ja videote lehitsemine siltide kaupa grupeeritult",
"tag_not_found_question": "Ei leia silti? <link>Lisa uus silt.</link>", "tag_not_found_question": "Ei leia silti? <link>Lisa uus silt.</link>",
"tag_people": "Sildista inimesi",
"tag_updated": "Muudetud silt: {tag}", "tag_updated": "Muudetud silt: {tag}",
"tagged_assets": "{count, plural, one {# üksus} other {# üksust}} sildistatud", "tagged_assets": "{count, plural, one {# üksus} other {# üksust}} sildistatud",
"tags": "Sildid", "tags": "Sildid",
@@ -1282,10 +1310,13 @@
"unknown_country": "Tundmatu riik", "unknown_country": "Tundmatu riik",
"unknown_year": "Teadmata aasta", "unknown_year": "Teadmata aasta",
"unlimited": "Piiramatu", "unlimited": "Piiramatu",
"unlink_motion_video": "Tühista liikuva video linkimine",
"unlink_oauth": "Eemalda OAuth ühendus", "unlink_oauth": "Eemalda OAuth ühendus",
"unlinked_oauth_account": "OAuth ühendus eemaldatud", "unlinked_oauth_account": "OAuth ühendus eemaldatud",
"unmute_memories": "Tühista mälestuste vaigistamine",
"unnamed_album": "Nimetu album", "unnamed_album": "Nimetu album",
"unnamed_album_delete_confirmation": "Kas oled kindel, et soovid selle albumi kustutada?", "unnamed_album_delete_confirmation": "Kas oled kindel, et soovid selle albumi kustutada?",
"unnamed_share": "Nimetu jagamine",
"unsaved_change": "Salvestamata muudatus", "unsaved_change": "Salvestamata muudatus",
"unselect_all": "Ära vali ühtegi", "unselect_all": "Ära vali ühtegi",
"unselect_all_duplicates": "Ära vali duplikaate", "unselect_all_duplicates": "Ära vali duplikaate",
@@ -1336,6 +1367,7 @@
"view_all": "Vaata kõiki", "view_all": "Vaata kõiki",
"view_all_users": "Vaata kõiki kasutajaid", "view_all_users": "Vaata kõiki kasutajaid",
"view_in_timeline": "Vaata ajajoonel", "view_in_timeline": "Vaata ajajoonel",
"view_link": "Vaata linki",
"view_links": "Vaata linke", "view_links": "Vaata linke",
"view_name": "Vaade", "view_name": "Vaade",
"view_next_asset": "Vaata järgmist üksust", "view_next_asset": "Vaata järgmist üksust",

1
i18n/eu.json Normal file
View File

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

View File

@@ -254,7 +254,7 @@
"transcoding_max_b_frames": "بیشترین B-frames", "transcoding_max_b_frames": "بیشترین B-frames",
"transcoding_max_b_frames_description": "مقادیر بالاتر کارایی فشرده سازی را بهبود می‌بخشند، اما کدگذاری را کند می‌کنند. ممکن است با شتاب دهی سخت‌افزاری در دستگاه‌های قدیمی سازگار نباشد. مقدار( 0 ) B-frames را غیرفعال می‌کند، در حالی که مقدار ( 1 ) این مقدار را به صورت خودکار تنظیم می‌کند.", "transcoding_max_b_frames_description": "مقادیر بالاتر کارایی فشرده سازی را بهبود می‌بخشند، اما کدگذاری را کند می‌کنند. ممکن است با شتاب دهی سخت‌افزاری در دستگاه‌های قدیمی سازگار نباشد. مقدار( 0 ) B-frames را غیرفعال می‌کند، در حالی که مقدار ( 1 ) این مقدار را به صورت خودکار تنظیم می‌کند.",
"transcoding_max_bitrate": "بیشترین بیت ریت", "transcoding_max_bitrate": "بیشترین بیت ریت",
"transcoding_max_bitrate_description": "تنظیم حداکثر بیت‌ریت می‌تواند اندازه فایل‌ها را در حدی قابل پیش‌بینی‌تر کند، هرچند که هزینه کمی برای کیفیت دارد. در وضوح 720p، مقادیر معمول 2600k برای VP9 یا HEVC و 4500k برای H.264 است. اگر به 0 تنظیم شود، غیرفعال می‌شود.", "transcoding_max_bitrate_description": "تنظیم حداکثر بیت‌ریت می‌تواند اندازه فایل‌ها را در حدی قابل پیش‌بینی‌تر کند، هرچند که هزینه کمی برای کیفیت دارد. در وضوح 720p، مقادیر معمول 2600 kbit/s برای VP9 یا HEVC و 4500 kbit/s برای H.264 است. اگر به 0 تنظیم شود، غیرفعال می‌شود.",
"transcoding_max_keyframe_interval": "حداکثر فاصله کلید فریم", "transcoding_max_keyframe_interval": "حداکثر فاصله کلید فریم",
"transcoding_max_keyframe_interval_description": "حداکثر فاصله فریم بین کلیدفریم‌ها را تنظیم می‌کند. مقادیر پایین‌تر کارایی فشرده‌سازی را کاهش می‌دهند، اما زمان جستجو را بهبود می‌بخشند و ممکن است کیفیت را در صحنه‌های با حرکت سریع بهبود دهند. مقدار 0 این مقدار را به‌طور خودکار تنظیم می‌کند.", "transcoding_max_keyframe_interval_description": "حداکثر فاصله فریم بین کلیدفریم‌ها را تنظیم می‌کند. مقادیر پایین‌تر کارایی فشرده‌سازی را کاهش می‌دهند، اما زمان جستجو را بهبود می‌بخشند و ممکن است کیفیت را در صحنه‌های با حرکت سریع بهبود دهند. مقدار 0 این مقدار را به‌طور خودکار تنظیم می‌کند.",
"transcoding_optimal_description": "ویدیوهایی که از رزولوشن هدف بالاتر هستند یا در قالب پذیرفته شده نیستند", "transcoding_optimal_description": "ویدیوهایی که از رزولوشن هدف بالاتر هستند یا در قالب پذیرفته شده نیستند",

View File

@@ -219,7 +219,7 @@
"reset_settings_to_default": "Nollaa asetukset oletuksille", "reset_settings_to_default": "Nollaa asetukset oletuksille",
"reset_settings_to_recent_saved": "Palauta aiemmin tallennetut asetukset", "reset_settings_to_recent_saved": "Palauta aiemmin tallennetut asetukset",
"scanning_library": "Kirjastoa skannataan", "scanning_library": "Kirjastoa skannataan",
"search_jobs": "Etsi tehtäviä...", "search_jobs": "Etsi tehtäviä",
"send_welcome_email": "Lähetä tervetuloviesti", "send_welcome_email": "Lähetä tervetuloviesti",
"server_external_domain_settings": "Ulkoinen osoite", "server_external_domain_settings": "Ulkoinen osoite",
"server_external_domain_settings_description": "Osoite julkisille linkeille, http(s):// mukaan lukien", "server_external_domain_settings_description": "Osoite julkisille linkeille, http(s):// mukaan lukien",
@@ -299,7 +299,7 @@
"transcoding_max_b_frames": "B-kehysten enimmäismäärä", "transcoding_max_b_frames": "B-kehysten enimmäismäärä",
"transcoding_max_b_frames_description": "Korkeampi arvo parantaa pakkausta, mutta hidastaa enkoodausta. Ei välttämättä ole yhteensopiva vanhempien laitteiden kanssa. 0 poistaa B-kehykset käytöstä, -1 määrittää arvon automaattisesti.", "transcoding_max_b_frames_description": "Korkeampi arvo parantaa pakkausta, mutta hidastaa enkoodausta. Ei välttämättä ole yhteensopiva vanhempien laitteiden kanssa. 0 poistaa B-kehykset käytöstä, -1 määrittää arvon automaattisesti.",
"transcoding_max_bitrate": "Suurin bittinopeus", "transcoding_max_bitrate": "Suurin bittinopeus",
"transcoding_max_bitrate_description": "Suurimman sallitun bittinopeuden asettaminen tekee tiedostojen koosta ennustettavampaa vaikka laatu voi hieman heiketä. 720p videossa tyypilliset arvot ovat 2600k VP9:lle ja HEVC:lle, tai 4500k H.254:lle. Jos 0, ei käytössä.", "transcoding_max_bitrate_description": "Suurimman sallitun bittinopeuden asettaminen tekee tiedostojen koosta ennustettavampaa vaikka laatu voi hieman heiketä. 720p videossa tyypilliset arvot ovat 2600 kbit/s VP9:lle ja HEVC:lle, tai 4500 kbit/s H.254:lle. Jos 0, ei käytössä.",
"transcoding_max_keyframe_interval": "Suurin avainkehysten väli", "transcoding_max_keyframe_interval": "Suurin avainkehysten väli",
"transcoding_max_keyframe_interval_description": "Asettaa avainkehysten välin maksimiarvon. Alempi arvo huonontaa pakkauksen tehoa, mutta parantaa hakuaikoja ja voi parantaa laatua nopealiikkeisissä kohtauksissa. 0 asettaa arvon automaattisesti.", "transcoding_max_keyframe_interval_description": "Asettaa avainkehysten välin maksimiarvon. Alempi arvo huonontaa pakkauksen tehoa, mutta parantaa hakuaikoja ja voi parantaa laatua nopealiikkeisissä kohtauksissa. 0 asettaa arvon automaattisesti.",
"transcoding_optimal_description": "Videot, joiden resoluutio on korkeampi kuin kohteen, tai ei hyväksytyssä formaatissa", "transcoding_optimal_description": "Videot, joiden resoluutio on korkeampi kuin kohteen, tai ei hyväksytyssä formaatissa",
@@ -406,11 +406,11 @@
"are_these_the_same_person": "Ovatko he sama henkilö?", "are_these_the_same_person": "Ovatko he sama henkilö?",
"are_you_sure_to_do_this": "Haluatko varmasti tehdä tämän?", "are_you_sure_to_do_this": "Haluatko varmasti tehdä tämän?",
"asset_added_to_album": "Lisätty albumiin", "asset_added_to_album": "Lisätty albumiin",
"asset_adding_to_album": "Lisätään albumiin...", "asset_adding_to_album": "Lisätään albumiin",
"asset_description_updated": "Kohteen kuvaus on päivitetty", "asset_description_updated": "Kohteen kuvaus on päivitetty",
"asset_filename_is_offline": "Kohde {filename} on offline-tilassa", "asset_filename_is_offline": "Kohde {filename} on offline-tilassa",
"asset_has_unassigned_faces": "Kohteella on määrittämättömiä kasvoja", "asset_has_unassigned_faces": "Kohteella on määrittämättömiä kasvoja",
"asset_hashing": "Hajautetaan...", "asset_hashing": "Hajautetaan",
"asset_offline": "Aineisto offline-tilassa", "asset_offline": "Aineisto offline-tilassa",
"asset_offline_description": "Tätä ulkoista resurssia ei enää löydy levyltä. Ole hyvä ja ota yhteyttä Immich-järjestelmänvalvojaan saadaksesi apua.", "asset_offline_description": "Tätä ulkoista resurssia ei enää löydy levyltä. Ole hyvä ja ota yhteyttä Immich-järjestelmänvalvojaan saadaksesi apua.",
"asset_skipped": "Ohitettu", "asset_skipped": "Ohitettu",
@@ -766,8 +766,10 @@
"go_to_folder": "Mene kansioon", "go_to_folder": "Mene kansioon",
"go_to_search": "Siirry hakuun", "go_to_search": "Siirry hakuun",
"group_albums_by": "Ryhmitä albumi...", "group_albums_by": "Ryhmitä albumi...",
"group_country": "Ryhmitä maan mukaan",
"group_no": "Ei ryhmitystä", "group_no": "Ei ryhmitystä",
"group_owner": "Ryhmitä omistajan mukaan", "group_owner": "Ryhmitä omistajan mukaan",
"group_places_by": "Ryhmitä paikat...",
"group_year": "Ryhmitä vuoden mukaan", "group_year": "Ryhmitä vuoden mukaan",
"has_quota": "On kiintiö", "has_quota": "On kiintiö",
"hi_user": "Hei {name} ({email})", "hi_user": "Hei {name} ({email})",
@@ -800,6 +802,7 @@
"include_shared_albums": "Sisällytä jaetut albumit", "include_shared_albums": "Sisällytä jaetut albumit",
"include_shared_partner_assets": "Sisällytä jaetut kumppanikohteet", "include_shared_partner_assets": "Sisällytä jaetut kumppanikohteet",
"individual_share": "Yksittäinen jako", "individual_share": "Yksittäinen jako",
"individual_shares": "Yksittäiset jaot",
"info": "Lisätietoja", "info": "Lisätietoja",
"interval": { "interval": {
"day_at_onepm": "Joka päivä klo 13:00", "day_at_onepm": "Joka päivä klo 13:00",
@@ -1107,6 +1110,7 @@
"search": "Haku", "search": "Haku",
"search_albums": "Etsi albumeita", "search_albums": "Etsi albumeita",
"search_by_context": "Etsi kontekstin perusteella", "search_by_context": "Etsi kontekstin perusteella",
"search_by_description": "Etsi kuvauksen perusteella",
"search_by_filename": "Hae tiedostonimen tai -päätteen mukaan", "search_by_filename": "Hae tiedostonimen tai -päätteen mukaan",
"search_by_filename_example": "esim. IMG_1234.JPG tai PNG", "search_by_filename_example": "esim. IMG_1234.JPG tai PNG",
"search_camera_make": "Etsi kameramerkkiä...", "search_camera_make": "Etsi kameramerkkiä...",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Paramètres de la sauvegarde", "backup_settings": "Paramètres de la sauvegarde",
"backup_settings_description": "Gérer les paramètres de la sauvegarde", "backup_settings_description": "Gérer les paramètres de la sauvegarde",
"check_all": "Tout cocher", "check_all": "Tout cocher",
"cleanup": "Nettoyage",
"cleared_jobs": "Tâches supprimées pour : {job}", "cleared_jobs": "Tâches supprimées pour : {job}",
"config_set_by_file": "La configuration est actuellement définie par un fichier de configuration", "config_set_by_file": "La configuration est actuellement définie par un fichier de configuration",
"confirm_delete_library": "Êtes-vous sûr de vouloir supprimer la bibliothèque {library}?", "confirm_delete_library": "Êtes-vous sûr de vouloir supprimer la bibliothèque {library}?",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "Forcer le rafraîchissement de tous les fichiers de la bibliothèque", "forcing_refresh_library_files": "Forcer le rafraîchissement de tous les fichiers de la bibliothèque",
"image_format": "Format", "image_format": "Format",
"image_format_description": "WebP produit des fichiers plus petits que JPEG, mais son encodage est plus lent.", "image_format_description": "WebP produit des fichiers plus petits que JPEG, mais son encodage est plus lent.",
"image_fullsize_description": "Image en taille réelle, sans métadonnées, utilisée lors d'un zoom",
"image_fullsize_enabled": "Activer la génération d'image en taille d'origine",
"image_fullsize_enabled_description": "Générer une image en taille réelle pour les formats non compatibles avec le web. Lorsque l'option « Préférer l'aperçu intégré » est activée, les aperçus intégrés sont utilisés directement sans conversion. Cette option n'affecte pas les formats compatibles avec le web tels que JPEG.",
"image_fullsize_quality_description": "Qualité de l'image en taille réelle de 1 à 100. Une valeur plus élevée est meilleure, mais produit des fichiers plus volumineux.",
"image_fullsize_title": "Paramètres des images en taille réelle",
"image_prefer_embedded_preview": "Préférer l'aperçu intégré", "image_prefer_embedded_preview": "Préférer l'aperçu intégré",
"image_prefer_embedded_preview_setting_description": "Utiliser les miniatures intégrées dans les photos au format RAW comme entrées pour le traitement d'image quand elles sont disponibles. Cela peut donner des couleurs plus justes pour certaines images, mais la qualité des miniatures est dépendant de l'appareil photo et l'image peut avoir des artéfacts de compression.", "image_prefer_embedded_preview_setting_description": "Utiliser les miniatures intégrées dans les photos au format RAW comme entrées pour le traitement d'image quand elles sont disponibles. Cela peut donner des couleurs plus justes pour certaines images, mais la qualité des miniatures est dépendant de l'appareil photo et l'image peut avoir des artéfacts de compression.",
"image_prefer_wide_gamut": "Préférer une gamme de couleurs étendue", "image_prefer_wide_gamut": "Préférer une gamme de couleurs étendue",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Activer l'analyse périodique de la bibliothèque", "library_scanning_enable_description": "Activer l'analyse périodique de la bibliothèque",
"library_settings": "Bibliothèque externe", "library_settings": "Bibliothèque externe",
"library_settings_description": "Gestion des paramètres des bibliothèques externes", "library_settings_description": "Gestion des paramètres des bibliothèques externes",
"library_tasks_description": "Exécution d'actions sur la bibliothèque", "library_tasks_description": "Scanner les bibliothèques externes pour les nouveaux et/ou les éléments modifiés",
"library_watching_enable_description": "Surveiller les modifications de fichiers dans les bibliothèques externes", "library_watching_enable_description": "Surveiller les modifications de fichiers dans les bibliothèques externes",
"library_watching_settings": "Surveillance de bibliothèque (EXPÉRIMENTAL)", "library_watching_settings": "Surveillance de bibliothèque (EXPÉRIMENTAL)",
"library_watching_settings_description": "Surveiller automatiquement les fichiers modifiés", "library_watching_settings_description": "Surveiller automatiquement les fichiers modifiés",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Rechercher des images de manière sémantique en utilisant les intégrations CLIP", "machine_learning_smart_search_description": "Rechercher des images de manière sémantique en utilisant les intégrations CLIP",
"machine_learning_smart_search_enabled": "Activer la recherche intelligente", "machine_learning_smart_search_enabled": "Activer la recherche intelligente",
"machine_learning_smart_search_enabled_description": "Si cette option est désactivée, les images ne seront pas encodées pour la recherche intelligente.", "machine_learning_smart_search_enabled_description": "Si cette option est désactivée, les images ne seront pas encodées pour la recherche intelligente.",
"machine_learning_url_description": "LURL du serveur d'apprentissage automatique. Si plusieurs URL sont fournies, chaque serveur sera essayé un par un jusquà ce que lun deux réponde avec succès, dans lordre de la première à la dernière.", "machine_learning_url_description": "LURL du serveur d'apprentissage automatique. Si plusieurs URL sont fournies, chaque serveur sera essayé un par un jusquà ce que lun deux réponde avec succès, dans lordre de la première à la dernière. Les serveurs ne répondant pas seront temporairement ignorés jusqu'à ce qu'ils soient de nouveau opérationnels.",
"manage_concurrency": "Gérer du multitâche", "manage_concurrency": "Gérer du multitâche",
"manage_log_settings": "Gérer les paramètres de journalisation", "manage_log_settings": "Gérer les paramètres de journalisation",
"map_dark_style": "Thème sombre", "map_dark_style": "Thème sombre",
@@ -147,6 +153,8 @@
"map_settings": "Carte", "map_settings": "Carte",
"map_settings_description": "Gérer les paramètres de la carte", "map_settings_description": "Gérer les paramètres de la carte",
"map_style_description": "URL vers un thème de carte au format style.json", "map_style_description": "URL vers un thème de carte au format style.json",
"memory_cleanup_job": "Nettoyage des souvenirs",
"memory_generate_job": "Génération des souvenirs",
"metadata_extraction_job": "Extraction des métadonnées", "metadata_extraction_job": "Extraction des métadonnées",
"metadata_extraction_job_description": "Extraction des informations des métadonnées de chaque média, telles que la position GPS, les visages et la résolution", "metadata_extraction_job_description": "Extraction des informations des métadonnées de chaque média, telles que la position GPS, les visages et la résolution",
"metadata_faces_import_setting": "Active l'importation des visages", "metadata_faces_import_setting": "Active l'importation des visages",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "Active la vérification du hachage, ne désactivez pas cette option à moins d'être sûr de ce que vous faites", "storage_template_hash_verification_enabled_description": "Active la vérification du hachage, ne désactivez pas cette option à moins d'être sûr de ce que vous faites",
"storage_template_migration": "Migration du modèle de stockage", "storage_template_migration": "Migration du modèle de stockage",
"storage_template_migration_description": "Appliquer le modèle courant <link>{template}</link> aux médias précédemment envoyés", "storage_template_migration_description": "Appliquer le modèle courant <link>{template}</link> aux médias précédemment envoyés",
"storage_template_migration_info": "Les changements de modèle ne s'appliqueront qu'aux nouveaux médias. Pour appliquer rétroactivement le modèle aux médias précédemment envoyés, exécutez la tâche <link>{job}</link>.", "storage_template_migration_info": "L'enregistrement des modèles convertit toutes les extensions en minuscule. Les changements de modèle ne s'appliqueront qu'aux nouveaux médias. Pour appliquer rétroactivement le modèle aux médias précédemment envoyés, exécutez la tâche <link>{job}</link>.",
"storage_template_migration_job": "Tâche de migration du modèle de stockage", "storage_template_migration_job": "Tâche de migration du modèle de stockage",
"storage_template_more_details": "Pour plus de détails sur cette fonctionnalité, reportez-vous au <template-link>Modèle de stockage</template-link> et à ses <implications-link>implications</implications-link>", "storage_template_more_details": "Pour plus de détails sur cette fonctionnalité, reportez-vous au <template-link>Modèle de stockage</template-link> et à ses <implications-link>implications</implications-link>",
"storage_template_onboarding_description": "Lorsqu'elle est activée, cette fonctionnalité réorganise les fichiers basés sur un modèle défini par l'utilisateur. En raison de problèmes de stabilité, la fonction a été désactivée par défaut. Pour plus d'informations, veuillez consulter la <link>documentation</link>.", "storage_template_onboarding_description": "Lorsqu'elle est activée, cette fonctionnalité réorganise les fichiers basés sur un modèle défini par l'utilisateur. En raison de problèmes de stabilité, la fonction a été désactivée par défaut. Pour plus d'informations, veuillez consulter la <link>documentation</link>.",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "Nombre maximum de trames B", "transcoding_max_b_frames": "Nombre maximum de trames B",
"transcoding_max_b_frames_description": "Des valeurs plus élevées améliorent l'efficacité de la compression, mais ralentissent l'encodage. Elles peuvent ne pas être compatibles avec l'accélération matérielle sur les anciens appareils. Une valeur de 0 désactive les trames B, tandis qu'une valeur de -1 définit automatiquement ce paramètre.", "transcoding_max_b_frames_description": "Des valeurs plus élevées améliorent l'efficacité de la compression, mais ralentissent l'encodage. Elles peuvent ne pas être compatibles avec l'accélération matérielle sur les anciens appareils. Une valeur de 0 désactive les trames B, tandis qu'une valeur de -1 définit automatiquement ce paramètre.",
"transcoding_max_bitrate": "Débit binaire maximal", "transcoding_max_bitrate": "Débit binaire maximal",
"transcoding_max_bitrate_description": "Définir un débit binaire maximal peut résulter en des fichiers de taille plus prédictible, au prix d'une légère perte en qualité. En 720p, les valeurs sont 2600k pour du VP9 ou du HEVC ou 4500k pour du H.264. Désactivé si le débit binaire est à 0.", "transcoding_max_bitrate_description": "Définir un débit binaire maximal peut résulter en des fichiers de taille plus prédictible, au prix d'une légère perte en qualité. En 720p, les valeurs sont 2600 kbit/s pour du VP9 ou du HEVC ou 4500 kbit/s pour du H.264. Désactivé si le débit binaire est à 0.",
"transcoding_max_keyframe_interval": "Intervalle maximal entre les images clés", "transcoding_max_keyframe_interval": "Intervalle maximal entre les images clés",
"transcoding_max_keyframe_interval_description": "Définit la distance maximale de trames entre les images clés. Les valeurs plus basses diminuent l'efficacité de la compression, mais améliorent les temps de recherche et peuvent améliorer la qualité dans les scènes avec des mouvements rapides. Une valeur de 0 définit automatiquement ce paramètre.", "transcoding_max_keyframe_interval_description": "Définit la distance maximale de trames entre les images clés. Les valeurs plus basses diminuent l'efficacité de la compression, mais améliorent les temps de recherche et peuvent améliorer la qualité dans les scènes avec des mouvements rapides. Une valeur de 0 définit automatiquement ce paramètre.",
"transcoding_optimal_description": "Les vidéos dont la résolution est supérieure à celle attendue ou celles qui ne sont pas dans un format accepté", "transcoding_optimal_description": "Les vidéos dont la résolution est supérieure à celle attendue ou celles qui ne sont pas dans un format accepté",
@@ -391,6 +399,7 @@
"allow_edits": "Autoriser les modifications", "allow_edits": "Autoriser les modifications",
"allow_public_user_to_download": "Permettre aux utilisateurs non connectés de télécharger", "allow_public_user_to_download": "Permettre aux utilisateurs non connectés de télécharger",
"allow_public_user_to_upload": "Permettre l'envoi aux utilisateurs non connectés", "allow_public_user_to_upload": "Permettre l'envoi aux utilisateurs non connectés",
"alt_text_qr_code": "Image du code QR",
"anti_clockwise": "Sens anti-horaire", "anti_clockwise": "Sens anti-horaire",
"api_key": "Clé API", "api_key": "Clé API",
"api_key_description": "Cette valeur ne sera affichée qu'une seule fois. Assurez-vous de la copier avant de fermer la fenêtre.", "api_key_description": "Cette valeur ne sera affichée qu'une seule fois. Assurez-vous de la copier avant de fermer la fenêtre.",
@@ -481,6 +490,7 @@
"comments_are_disabled": "Les commentaires sont désactivés", "comments_are_disabled": "Les commentaires sont désactivés",
"confirm": "Confirmer", "confirm": "Confirmer",
"confirm_admin_password": "Confirmer le mot de passe Admin", "confirm_admin_password": "Confirmer le mot de passe Admin",
"confirm_delete_face": "Êtes-vous sûr de vouloir supprimer le visage de {name} du média?",
"confirm_delete_shared_link": "Voulez-vous vraiment supprimer ce lien partagé?", "confirm_delete_shared_link": "Voulez-vous vraiment supprimer ce lien partagé?",
"confirm_keep_this_delete_others": "Tous les autres médias dans la pile seront supprimés sauf celui-ci. Êtes-vous sûr de vouloir continuer?", "confirm_keep_this_delete_others": "Tous les autres médias dans la pile seront supprimés sauf celui-ci. Êtes-vous sûr de vouloir continuer?",
"confirm_password": "Confirmer le mot de passe", "confirm_password": "Confirmer le mot de passe",
@@ -533,6 +543,7 @@
"delete_album": "Supprimer l'album", "delete_album": "Supprimer l'album",
"delete_api_key_prompt": "Voulez-vous vraiment supprimer cette clé API?", "delete_api_key_prompt": "Voulez-vous vraiment supprimer cette clé API?",
"delete_duplicates_confirmation": "Êtes-vous certain de vouloir supprimer définitivement ces doublons?", "delete_duplicates_confirmation": "Êtes-vous certain de vouloir supprimer définitivement ces doublons?",
"delete_face": "Supprimer le visage",
"delete_key": "Supprimer la clé", "delete_key": "Supprimer la clé",
"delete_library": "Supprimer la bibliothèque", "delete_library": "Supprimer la bibliothèque",
"delete_link": "Supprimer le lien", "delete_link": "Supprimer le lien",
@@ -600,6 +611,7 @@
"enabled": "Activé", "enabled": "Activé",
"end_date": "Date de fin", "end_date": "Date de fin",
"error": "Erreur", "error": "Erreur",
"error_delete_face": "Erreur lors de la suppression du visage pour le média",
"error_loading_image": "Erreur de chargement de l'image", "error_loading_image": "Erreur de chargement de l'image",
"error_title": "Erreur - Quelque chose s'est mal passé", "error_title": "Erreur - Quelque chose s'est mal passé",
"errors": { "errors": {
@@ -852,6 +864,7 @@
"loop_videos": "Vidéos en boucle", "loop_videos": "Vidéos en boucle",
"loop_videos_description": "Activer pour voir la vidéo en boucle dans le lecteur détaillé.", "loop_videos_description": "Activer pour voir la vidéo en boucle dans le lecteur détaillé.",
"main_branch_warning": "Vous utilisez une version de développement. Nous vous recommandons fortement d'utiliser une version stable!", "main_branch_warning": "Vous utilisez une version de développement. Nous vous recommandons fortement d'utiliser une version stable!",
"main_menu": "Menu principal",
"make": "Marque", "make": "Marque",
"manage_shared_links": "Gérer les liens partagés", "manage_shared_links": "Gérer les liens partagés",
"manage_sharing_with_partners": "Gérer le partage avec les partenaires", "manage_sharing_with_partners": "Gérer le partage avec les partenaires",
@@ -884,6 +897,7 @@
"month": "Mois", "month": "Mois",
"more": "Plus", "more": "Plus",
"moved_to_trash": "Déplacé dans la corbeille", "moved_to_trash": "Déplacé dans la corbeille",
"mute_memories": "Mettre en sourdine les souvenirs",
"my_albums": "Mes albums", "my_albums": "Mes albums",
"name": "Nom", "name": "Nom",
"name_or_nickname": "Nom ou surnom", "name_or_nickname": "Nom ou surnom",
@@ -979,6 +993,7 @@
"permanently_deleted_asset": "Média supprimé définitivement", "permanently_deleted_asset": "Média supprimé définitivement",
"permanently_deleted_assets_count": "{count, plural, one {# média définitivement supprimé} other {# médias définitivement supprimés}}", "permanently_deleted_assets_count": "{count, plural, one {# média définitivement supprimé} other {# médias définitivement supprimés}}",
"person": "Personne", "person": "Personne",
"person_birthdate": "Né(e) le {date}",
"person_hidden": "{name}{hidden, select, true { (caché)} other {}}", "person_hidden": "{name}{hidden, select, true { (caché)} other {}}",
"photo_shared_all_users": "Il semble que vous ayez partagé vos photos avec tous les utilisateurs ou que vous n'ayez aucun utilisateur avec qui les partager.", "photo_shared_all_users": "Il semble que vous ayez partagé vos photos avec tous les utilisateurs ou que vous n'ayez aucun utilisateur avec qui les partager.",
"photos": "Photos", "photos": "Photos",
@@ -1070,12 +1085,16 @@
"remove_from_album": "Supprimer de l'album", "remove_from_album": "Supprimer de l'album",
"remove_from_favorites": "Supprimer des favoris", "remove_from_favorites": "Supprimer des favoris",
"remove_from_shared_link": "Supprimer des liens partagés", "remove_from_shared_link": "Supprimer des liens partagés",
"remove_memory": "Supprimer le souvenir",
"remove_photo_from_memory": "Supprimer la photo de ce souvenir",
"remove_url": "Supprimer l'URL", "remove_url": "Supprimer l'URL",
"remove_user": "Supprimer l'utilisateur", "remove_user": "Supprimer l'utilisateur",
"removed_api_key": "Clé API supprimée: {name}", "removed_api_key": "Clé API supprimée: {name}",
"removed_from_archive": "Supprimé de l'archive", "removed_from_archive": "Supprimé de l'archive",
"removed_from_favorites": "Supprimé des favoris", "removed_from_favorites": "Supprimé des favoris",
"removed_from_favorites_count": "{count, plural, one {# supprimé} other {# supprimés}} des favoris", "removed_from_favorites_count": "{count, plural, one {# supprimé} other {# supprimés}} des favoris",
"removed_memory": "Souvenir supprimé",
"removed_photo_from_memory": "Photo supprimée du souvenir",
"removed_tagged_assets": "Tag supprimé de {count, plural, one {# média} other {# médias}}", "removed_tagged_assets": "Tag supprimé de {count, plural, one {# média} other {# médias}}",
"rename": "Renommer", "rename": "Renommer",
"repair": "Réparer", "repair": "Réparer",
@@ -1084,6 +1103,7 @@
"repository": "Dépôt", "repository": "Dépôt",
"require_password": "Demander le mot de passe", "require_password": "Demander le mot de passe",
"require_user_to_change_password_on_first_login": "Demander à l'utilisateur de changer son mot de passe lors de sa première connexion", "require_user_to_change_password_on_first_login": "Demander à l'utilisateur de changer son mot de passe lors de sa première connexion",
"rescan": "Rescanner",
"reset": "Réinitialiser", "reset": "Réinitialiser",
"reset_password": "Réinitialiser le mot de passe", "reset_password": "Réinitialiser le mot de passe",
"reset_people_visibility": "Réinitialiser la visibilité des personnes", "reset_people_visibility": "Réinitialiser la visibilité des personnes",
@@ -1127,6 +1147,7 @@
"search_options": "Rechercher une option", "search_options": "Rechercher une option",
"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_settings": "Paramètres de recherche", "search_settings": "Paramètres de recherche",
"search_state": "Rechercher par état/région...", "search_state": "Rechercher par état/région...",
"search_tags": "Recherche d'étiquettes...", "search_tags": "Recherche d'étiquettes...",
@@ -1136,6 +1157,7 @@
"searching_locales": "Recherche des paramètres régionaux...", "searching_locales": "Recherche des paramètres régionaux...",
"second": "Seconde", "second": "Seconde",
"see_all_people": "Voir toutes les personnes", "see_all_people": "Voir toutes les personnes",
"select": "Sélectionner",
"select_album_cover": "Sélectionner la couverture d'album", "select_album_cover": "Sélectionner la couverture d'album",
"select_all": "Tout sélectionner", "select_all": "Tout sélectionner",
"select_all_duplicates": "Sélectionner tous les doublons", "select_all_duplicates": "Sélectionner tous les doublons",
@@ -1250,6 +1272,7 @@
"tag_created": "Étiquette créée: {tag}", "tag_created": "Étiquette créée: {tag}",
"tag_feature_description": "Parcourir les photos et vidéos groupées par thèmes logiques", "tag_feature_description": "Parcourir les photos et vidéos groupées par thèmes logiques",
"tag_not_found_question": "Vous ne trouvez pas une étiquette? <link>Créer une nouvelle étiquette.</link>", "tag_not_found_question": "Vous ne trouvez pas une étiquette? <link>Créer une nouvelle étiquette.</link>",
"tag_people": "Étiqueter les personnes",
"tag_updated": "Étiquette mise à jour: {tag}", "tag_updated": "Étiquette mise à jour: {tag}",
"tagged_assets": "Étiquette ajoutée à {count, plural, one {# média} other {# médias}}", "tagged_assets": "Étiquette ajoutée à {count, plural, one {# média} other {# médias}}",
"tags": "Étiquettes", "tags": "Étiquettes",
@@ -1290,6 +1313,7 @@
"unlink_motion_video": "Détacher la photo animée", "unlink_motion_video": "Détacher la photo animée",
"unlink_oauth": "Déconnecter OAuth", "unlink_oauth": "Déconnecter OAuth",
"unlinked_oauth_account": "Compte OAuth non connecté", "unlinked_oauth_account": "Compte OAuth non connecté",
"unmute_memories": "Réactiver les souvenirs",
"unnamed_album": "Album sans nom", "unnamed_album": "Album sans nom",
"unnamed_album_delete_confirmation": "Êtes-vous sûr de vouloir supprimer cet album?", "unnamed_album_delete_confirmation": "Êtes-vous sûr de vouloir supprimer cet album?",
"unnamed_share": "Partage sans nom", "unnamed_share": "Partage sans nom",
@@ -1343,6 +1367,7 @@
"view_all": "Voir tout", "view_all": "Voir tout",
"view_all_users": "Voir tous les utilisateurs", "view_all_users": "Voir tous les utilisateurs",
"view_in_timeline": "Voir dans la vue chronologique", "view_in_timeline": "Voir dans la vue chronologique",
"view_link": "Voir le lien",
"view_links": "Voir les liens", "view_links": "Voir les liens",
"view_name": "Vue", "view_name": "Vue",
"view_next_asset": "Voir le média suivant", "view_next_asset": "Voir le média suivant",

57
i18n/gl.json Normal file
View File

@@ -0,0 +1,57 @@
{
"about": "Acerca de",
"account": "Conta",
"account_settings": "Configuración da conta",
"acknowledge": "De acordo",
"action": "Acción",
"actions": "Accións",
"active": "Activo",
"activity": "Actividade",
"activity_changed": "A actividade está {enabled, select, true {habilitada} other {deshabilitada}}",
"add": "Engadir",
"add_a_description": "Engadir unha descrición",
"add_a_location": "Engadir unha localización",
"add_a_name": "Engadir un nome",
"add_a_title": "Engadir un título",
"add_exclusion_pattern": "Engadir patrón de exclusión",
"add_import_path": "Engadir ruta de importación",
"add_location": "Engadir localización",
"add_more_users": "Engadir máis usuarios",
"add_partner": "Engadir compañeiro",
"add_path": "Engadir ruta",
"add_photos": "Engadir fotos",
"add_to": "Engadir a…",
"add_to_album": "Engadir ao álbum",
"add_to_shared_album": "Engadir ao álbum compartido",
"add_url": "Engadir URL",
"added_to_archive": "Engadido ao arquivo",
"added_to_favorites": "Engadido a favoritos",
"added_to_favorites_count": "Engadidos {count, number} a favoritos",
"admin": {
"authentication_settings": "Configuración de autenticación",
"authentication_settings_description": "Xestionar contrasinal, OAuth e outros parámetros de autenticación",
"authentication_settings_disable_all": "Estás seguro de deshabilitar todos os métodos de inicio de sesión? Iniciar a sesión quedará completamente deshabilitado.",
"authentication_settings_reenable": "Para rehabilitala, usa un <link>Comando do servidor</link>.",
"background_task_job": "Tarefas en segundo plano",
"backup_database": "Respaldo da base de datos",
"backup_database_enable_description": "Habilitar as copias de seguridade da base de datos",
"backup_keep_last_amount": "Cantidade de copias de seguridade previas a manter",
"backup_settings": "Configuración de copias de seguridade",
"backup_settings_description": "Xestionar a configuración das copias de seguridade da base de datos",
"check_all": "Comprobar todo",
"cleared_jobs": "Traballos borrados para: {job}",
"config_set_by_file": "As configuracións están actualmente seleccionadas por un ficheiro de configuracións",
"confirm_delete_library": "Estás seguro de que queres eliminar a biblioteca {library}?",
"exclusion_pattern_description": "Os patróns de exclusión permítenche ignorar ficheiros e cartafoles ao escanear a túa biblioteca. Isto é útil se tes cartafoles que conteñen ficheiros que non queres importar, coma ficheiros RAW.",
"external_library_created_at": "Biblioteca externa (creada o {date})",
"external_library_management": "Xestión de bibliotecas externas",
"face_detection": "Detección de caras",
"job_settings": "Configuración de tarefas",
"job_settings_description": "Administrar tarefas simultáneas",
"job_status": "Estado da tarefa",
"jobs_failed": "{jobCount, one {# errado}, plural, other {# errados}}"
},
"year": "Ano",
"yes": "Si",
"zoom_image": "Acercar imaxe"
}

View File

@@ -41,6 +41,7 @@
"backup_settings": "הגדרות גיבוי", "backup_settings": "הגדרות גיבוי",
"backup_settings_description": "ניהול הגדרות גיבוי מסד נתונים", "backup_settings_description": "ניהול הגדרות גיבוי מסד נתונים",
"check_all": "סימון הכל", "check_all": "סימון הכל",
"cleanup": "ניקוי",
"cleared_jobs": "נוקו משימות עבור: {job}", "cleared_jobs": "נוקו משימות עבור: {job}",
"config_set_by_file": "התצורה מוגדרת כעת על ידי קובץ תצורה", "config_set_by_file": "התצורה מוגדרת כעת על ידי קובץ תצורה",
"confirm_delete_library": "האם את/ה בטוח/ה שברצונך למחוק את הספרייה {library}?", "confirm_delete_library": "האם את/ה בטוח/ה שברצונך למחוק את הספרייה {library}?",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "כפיית רענון של כל קבצי הספרייה", "forcing_refresh_library_files": "כפיית רענון של כל קבצי הספרייה",
"image_format": "פורמט", "image_format": "פורמט",
"image_format_description": "WebP מפיק קבצים קטנים יותר מ JPEG, אך הוא איטי יותר לקידוד.", "image_format_description": "WebP מפיק קבצים קטנים יותר מ JPEG, אך הוא איטי יותר לקידוד.",
"image_fullsize_description": "תמונה בגודל מלא עם מטא נתונים מוסרים, בעת שימוש בהגדלה",
"image_fullsize_enabled": "אפשר יצירה של תמונות באיכות מלאה",
"image_fullsize_enabled_description": "צור תמונה בגודל מלא עבור פורמטים שאינם ידידותיים לאינטרנט. כאשר \"העדף תצוגה מקדימה מוטמעת\" מופעלת, תצוגות מקדימות מוטמעות משמשות ישירות ללא המרה. זה לא משפיע על פורמטים ידידותיים לאינטרנט כמו JPEG.",
"image_fullsize_quality_description": "תמונה בגודל מלא באיכות מ 1-100. גבוהה יותר טוב יותר, אך מייצר קובץ גדול יותר.",
"image_fullsize_title": "הגדרות תמונה בגודל מלא",
"image_prefer_embedded_preview": "העדף תצוגה מקדימה מוטמעת", "image_prefer_embedded_preview": "העדף תצוגה מקדימה מוטמעת",
"image_prefer_embedded_preview_setting_description": "השתמש בתצוגות מקדימות מוטמעות בתמונות RAW כקלט לעיבוד תמונה כאשר זמינות. זה יכול להפיק צבעים מדויקים יותר עבור תמונות מסוימות, אבל האיכות של התצוגה המקדימה היא תלוית מצלמה ולתמונה עשויים להיות יותר פגמי דחיסה.", "image_prefer_embedded_preview_setting_description": "השתמש בתצוגות מקדימות מוטמעות בתמונות RAW כקלט לעיבוד תמונה כאשר זמינות. זה יכול להפיק צבעים מדויקים יותר עבור תמונות מסוימות, אבל האיכות של התצוגה המקדימה היא תלוית מצלמה ולתמונה עשויים להיות יותר פגמי דחיסה.",
"image_prefer_wide_gamut": "העדף סולם צבעים רחב", "image_prefer_wide_gamut": "העדף סולם צבעים רחב",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "אפשר סריקת ספרייה תקופתית", "library_scanning_enable_description": "אפשר סריקת ספרייה תקופתית",
"library_settings": "ספרייה חיצונית", "library_settings": "ספרייה חיצונית",
"library_settings_description": "ניהול הגדרות ספרייה חיצונית", "library_settings_description": "ניהול הגדרות ספרייה חיצונית",
"library_tasks_description": "ביצוע משימות ספרייה", "library_tasks_description": "סרוק ספריות חיצוניות עבור נכסים חדשים ו/או שהשתנו",
"library_watching_enable_description": "עקוב אחר שינויי קבצים בספריות חיצוניות", "library_watching_enable_description": "עקוב אחר שינויי קבצים בספריות חיצוניות",
"library_watching_settings": "צפיית ספרייה (ניסיוני)", "library_watching_settings": "צפיית ספרייה (ניסיוני)",
"library_watching_settings_description": "עקוב אוטומטית אחר שינויי קבצים", "library_watching_settings_description": "עקוב אוטומטית אחר שינויי קבצים",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "חיפוש תמונות באופן סמנטי באמצעות הטמעות של CLIP", "machine_learning_smart_search_description": "חיפוש תמונות באופן סמנטי באמצעות הטמעות של CLIP",
"machine_learning_smart_search_enabled": "אפשר חיפוש חכם", "machine_learning_smart_search_enabled": "אפשר חיפוש חכם",
"machine_learning_smart_search_enabled_description": "אם מושבת, תמונות לא יקודדו לחיפוש חכם.", "machine_learning_smart_search_enabled_description": "אם מושבת, תמונות לא יקודדו לחיפוש חכם.",
"machine_learning_url_description": "כתובת האתר של שרת למידת המכונה. אם ניתנת יותר מכתובת אחת, כל שרת ינסה בתורו עד אשר יענה בחיוב, בסדר התחלתי.", "machine_learning_url_description": "כתובת ה-URL של שרת למידת המכונה. אם ניתנת יותר מכתובת URL אחת, כל שרת ינוסה ניסיון אחד בכל פעם עד שאחד מהם יגיב בהצלחה, לפי הסדר מהראשון עד האחרון. שרתים שלא מגיבים יוזנחו זמנית עד שיחזרו להיות מקוונים.",
"manage_concurrency": "ניהול בו-זמניות", "manage_concurrency": "ניהול בו-זמניות",
"manage_log_settings": "ניהול הגדרות רישום ביומן", "manage_log_settings": "ניהול הגדרות רישום ביומן",
"map_dark_style": "עיצוב כהה", "map_dark_style": "עיצוב כהה",
@@ -147,6 +153,8 @@
"map_settings": "מפה", "map_settings": "מפה",
"map_settings_description": "ניהול הגדרות מפה", "map_settings_description": "ניהול הגדרות מפה",
"map_style_description": "כתובת אתר לערכת נושא של מפה style.json", "map_style_description": "כתובת אתר לערכת נושא של מפה style.json",
"memory_cleanup_job": "ניקוי זיכרון",
"memory_generate_job": "יצירת זיכרון",
"metadata_extraction_job": "חלץ מטא-נתונים", "metadata_extraction_job": "חלץ מטא-נתונים",
"metadata_extraction_job_description": "חלץ מידע מטא-נתונים מכל נכס, כגון GPS, פנים ורזולוציה", "metadata_extraction_job_description": "חלץ מידע מטא-נתונים מכל נכס, כגון GPS, פנים ורזולוציה",
"metadata_faces_import_setting": "אפשר יבוא פנים", "metadata_faces_import_setting": "אפשר יבוא פנים",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "מאפשר אימות גיבוב, אל תשבית/י זאת אלא אם כן את/ה בטוח/ה בהשלכות", "storage_template_hash_verification_enabled_description": "מאפשר אימות גיבוב, אל תשבית/י זאת אלא אם כן את/ה בטוח/ה בהשלכות",
"storage_template_migration": "העברת תבנית אחסון", "storage_template_migration": "העברת תבנית אחסון",
"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>תבנית האחסון</template-link> וב<implications-link>השלכותיה</implications-link>", "storage_template_more_details": "לפרטים נוספים אודות תכונה זו, עיין ב<template-link>תבנית האחסון</template-link> וב<implications-link>השלכותיה</implications-link>",
"storage_template_onboarding_description": "כאשר מופעלת, תכונה זו תארגן אוטומטית קבצים בהתבסס על תבנית שהמשתמש הגדיר. עקב בעיות יציבות התכונה כבויה כברירת מחדל. למידע נוסף, נא לראות את ה<link>תיעוד</link>.", "storage_template_onboarding_description": "כאשר מופעלת, תכונה זו תארגן אוטומטית קבצים בהתבסס על תבנית שהמשתמש הגדיר. עקב בעיות יציבות התכונה כבויה כברירת מחדל. למידע נוסף, נא לראות את ה<link>תיעוד</link>.",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "B-פריימים מרביים", "transcoding_max_b_frames": "B-פריימים מרביים",
"transcoding_max_b_frames_description": "ערכים גבוהים יותר משפרים את יעילות הדחיסה, אך מאטים את הקידוד. ייתכן שלא יהיה תואם עם האצת חומרה במכשירים ישנים יותר. 0 משבית את B-פריימים, בעוד ש1- מגדיר את הערך זה באופן אוטומטי.", "transcoding_max_b_frames_description": "ערכים גבוהים יותר משפרים את יעילות הדחיסה, אך מאטים את הקידוד. ייתכן שלא יהיה תואם עם האצת חומרה במכשירים ישנים יותר. 0 משבית את B-פריימים, בעוד ש1- מגדיר את הערך זה באופן אוטומטי.",
"transcoding_max_bitrate": "קצב סיביות מרבי", "transcoding_max_bitrate": "קצב סיביות מרבי",
"transcoding_max_bitrate_description": "קביעת קצב סיביות מרבי יכולה להפוך את גדלי הקבצים לצפויים יותר בעלות קלה לאיכות. ב-720p, ערכים טיפוסיים הם 2600k עבור VP9 או HEVC, או 4500k עבור H.264. מושבת אם מוגדר ל-0.", "transcoding_max_bitrate_description": "קביעת קצב סיביות מרבי יכולה להפוך את גדלי הקבצים לצפויים יותר בעלות קלה לאיכות. ב-720p, ערכים טיפוסיים הם 2600 kbit/s עבור VP9 או HEVC, או 4500 kbit/s עבור H.264. מושבת אם מוגדר ל-0.",
"transcoding_max_keyframe_interval": "מרווח תמונת מפתח מרבי", "transcoding_max_keyframe_interval": "מרווח תמונת מפתח מרבי",
"transcoding_max_keyframe_interval_description": "מגדיר את מרחק הפריימים המרבי בין תמונות מפתח. ערכים נמוכים גורעים את יעילות הדחיסה, אך משפרים את זמני החיפוש ועשויים לשפר את האיכות בסצנות עם תנועה מהירה. 0 מגדיר ערך זה באופן אוטומטי.", "transcoding_max_keyframe_interval_description": "מגדיר את מרחק הפריימים המרבי בין תמונות מפתח. ערכים נמוכים גורעים את יעילות הדחיסה, אך משפרים את זמני החיפוש ועשויים לשפר את האיכות בסצנות עם תנועה מהירה. 0 מגדיר ערך זה באופן אוטומטי.",
"transcoding_optimal_description": "סרטונים גבוהים מרזולוציית היעד או לא בפורמט מקובל", "transcoding_optimal_description": "סרטונים גבוהים מרזולוציית היעד או לא בפורמט מקובל",
@@ -391,6 +399,7 @@
"allow_edits": "אפשר עריכות", "allow_edits": "אפשר עריכות",
"allow_public_user_to_download": "אפשר למשתמש ציבורי להוריד", "allow_public_user_to_download": "אפשר למשתמש ציבורי להוריד",
"allow_public_user_to_upload": "אפשר למשתמש ציבורי להעלות", "allow_public_user_to_upload": "אפשר למשתמש ציבורי להעלות",
"alt_text_qr_code": "תמונת קוד QR",
"anti_clockwise": "נגד כיוון השעון", "anti_clockwise": "נגד כיוון השעון",
"api_key": "מפתח API", "api_key": "מפתח API",
"api_key_description": "הערך הזה יוצג רק פעם אחת. נא לוודא שהעתקת אותו לפני סגירת החלון.", "api_key_description": "הערך הזה יוצג רק פעם אחת. נא לוודא שהעתקת אותו לפני סגירת החלון.",
@@ -437,7 +446,7 @@
"birthdate_set_description": "תאריך לידה משמש לחישוב הגיל של האדם הזה בזמן תצלום.", "birthdate_set_description": "תאריך לידה משמש לחישוב הגיל של האדם הזה בזמן תצלום.",
"blurred_background": "רקע מטושטש", "blurred_background": "רקע מטושטש",
"bugs_and_feature_requests": "באגים & בקשות לתכונות", "bugs_and_feature_requests": "באגים & בקשות לתכונות",
"build": "גרסאת בנייה", "build": "גרסת בנייה",
"build_image": "גרסת תוכנה", "build_image": "גרסת תוכנה",
"bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!", "bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!",
"bulk_keep_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להשאיר {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה יפתור את כל הקבוצות הכפולות מבלי למחוק דבר.", "bulk_keep_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להשאיר {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה יפתור את כל הקבוצות הכפולות מבלי למחוק דבר.",
@@ -481,6 +490,7 @@
"comments_are_disabled": "תגובות מושבתות", "comments_are_disabled": "תגובות מושבתות",
"confirm": "אישור", "confirm": "אישור",
"confirm_admin_password": "אישור סיסמת מנהל", "confirm_admin_password": "אישור סיסמת מנהל",
"confirm_delete_face": "האם את/ה בטוח/ה שברצונך למחוק את הפנים של {name} מהנכס?",
"confirm_delete_shared_link": "האם את/ה בטוח/ה שברצונך למחוק את הקישור המשותף הזה?", "confirm_delete_shared_link": "האם את/ה בטוח/ה שברצונך למחוק את הקישור המשותף הזה?",
"confirm_keep_this_delete_others": "כל שאר הנכסים בערימה יימחקו למעט נכס זה. האם את/ה בטוח/ה שברצונך להמשיך?", "confirm_keep_this_delete_others": "כל שאר הנכסים בערימה יימחקו למעט נכס זה. האם את/ה בטוח/ה שברצונך להמשיך?",
"confirm_password": "אשר סיסמה", "confirm_password": "אשר סיסמה",
@@ -533,6 +543,7 @@
"delete_album": "מחק אלבום", "delete_album": "מחק אלבום",
"delete_api_key_prompt": "האם את/ה בטוח/ה שברצונך למחוק מפתח ה-API הזה?", "delete_api_key_prompt": "האם את/ה בטוח/ה שברצונך למחוק מפתח ה-API הזה?",
"delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק לצמיתות את הכפילויות האלה?", "delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק לצמיתות את הכפילויות האלה?",
"delete_face": "מחק פנים",
"delete_key": "מחק מפתח", "delete_key": "מחק מפתח",
"delete_library": "מחק ספרייה", "delete_library": "מחק ספרייה",
"delete_link": "מחק קישור", "delete_link": "מחק קישור",
@@ -600,6 +611,7 @@
"enabled": "מופעל", "enabled": "מופעל",
"end_date": "תאריך סיום", "end_date": "תאריך סיום",
"error": "שגיאה", "error": "שגיאה",
"error_delete_face": "שגיאה במחיקת פנים מנכס",
"error_loading_image": "שגיאה בטעינת התמונה", "error_loading_image": "שגיאה בטעינת התמונה",
"error_title": "שגיאה - משהו השתבש", "error_title": "שגיאה - משהו השתבש",
"errors": { "errors": {
@@ -852,6 +864,7 @@
"loop_videos": "הפעלה חוזרת של סרטונים", "loop_videos": "הפעלה חוזרת של סרטונים",
"loop_videos_description": "אפשר הפעלה חוזרת אוטומטית של סרטון במציג הפרטים.", "loop_videos_description": "אפשר הפעלה חוזרת אוטומטית של סרטון במציג הפרטים.",
"main_branch_warning": "את/ה משתמש/ת בגרסת פיתוח; אנחנו ממליצים בחום להשתמש בגרסה יציבה!", "main_branch_warning": "את/ה משתמש/ת בגרסת פיתוח; אנחנו ממליצים בחום להשתמש בגרסה יציבה!",
"main_menu": "תפריט ראשי",
"make": "תוצרת", "make": "תוצרת",
"manage_shared_links": "ניהול קישורים משותפים", "manage_shared_links": "ניהול קישורים משותפים",
"manage_sharing_with_partners": "ניהול שיתוף עם שותפים", "manage_sharing_with_partners": "ניהול שיתוף עם שותפים",
@@ -884,6 +897,7 @@
"month": "חודש", "month": "חודש",
"more": "עוד", "more": "עוד",
"moved_to_trash": "הועבר לאשפה", "moved_to_trash": "הועבר לאשפה",
"mute_memories": "השתקת זיכרונות",
"my_albums": "האלבומים שלי", "my_albums": "האלבומים שלי",
"name": "שם", "name": "שם",
"name_or_nickname": "שם או כינוי", "name_or_nickname": "שם או כינוי",
@@ -979,6 +993,7 @@
"permanently_deleted_asset": "נכס נמחק לצמיתות", "permanently_deleted_asset": "נכס נמחק לצמיתות",
"permanently_deleted_assets_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות", "permanently_deleted_assets_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
"person": "אדם", "person": "אדם",
"person_birthdate": "נולד בתאריך {date}",
"person_hidden": "{name}{hidden, select, true { (מוסתר)} other {}}", "person_hidden": "{name}{hidden, select, true { (מוסתר)} other {}}",
"photo_shared_all_users": "נראה שאת/ה שיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.", "photo_shared_all_users": "נראה שאת/ה שיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
"photos": "תמונות", "photos": "תמונות",
@@ -1070,12 +1085,16 @@
"remove_from_album": "הסר מאלבום", "remove_from_album": "הסר מאלבום",
"remove_from_favorites": "הסר מהמועדפים", "remove_from_favorites": "הסר מהמועדפים",
"remove_from_shared_link": "הסר מקישור משותף", "remove_from_shared_link": "הסר מקישור משותף",
"remove_memory": "הסר זיכרון",
"remove_photo_from_memory": "הסר תמונה מזיכרון זה",
"remove_url": "הסר URL", "remove_url": "הסר URL",
"remove_user": "הסר משתמש", "remove_user": "הסר משתמש",
"removed_api_key": "מפתח API הוסר: {name}", "removed_api_key": "מפתח API הוסר: {name}",
"removed_from_archive": "הוסר מארכיון", "removed_from_archive": "הוסר מארכיון",
"removed_from_favorites": "הוסר ממועדפים", "removed_from_favorites": "הוסר ממועדפים",
"removed_from_favorites_count": "{count, plural, other {הוסרו #}} מהמועדפים", "removed_from_favorites_count": "{count, plural, other {הוסרו #}} מהמועדפים",
"removed_memory": "זיכרון הוסר",
"removed_photo_from_memory": "התמונה הוסרה מהזיכרון",
"removed_tagged_assets": "תג הוסר מ{count, plural, one {נכס #} other {# נכסים}}", "removed_tagged_assets": "תג הוסר מ{count, plural, one {נכס #} other {# נכסים}}",
"rename": "שנה שם", "rename": "שנה שם",
"repair": "תיקון", "repair": "תיקון",
@@ -1084,6 +1103,7 @@
"repository": "מאגר", "repository": "מאגר",
"require_password": "דרוש סיסמה", "require_password": "דרוש סיסמה",
"require_user_to_change_password_on_first_login": "דרוש מהמשתמש לשנות סיסמה בכניסה הראשונה", "require_user_to_change_password_on_first_login": "דרוש מהמשתמש לשנות סיסמה בכניסה הראשונה",
"rescan": "סרוק מחדש",
"reset": "איפוס", "reset": "איפוס",
"reset_password": "איפוס סיסמה", "reset_password": "איפוס סיסמה",
"reset_people_visibility": "אפס את נראות האנשים", "reset_people_visibility": "אפס את נראות האנשים",
@@ -1127,6 +1147,7 @@
"search_options": "אפשרויות חיפוש", "search_options": "אפשרויות חיפוש",
"search_people": "חיפוש אנשים", "search_people": "חיפוש אנשים",
"search_places": "חיפוש מקומות", "search_places": "חיפוש מקומות",
"search_rating": "חיפוש לפי דירוג...",
"search_settings": "הגדרות חיפוש", "search_settings": "הגדרות חיפוש",
"search_state": "חיפוש מדינה...", "search_state": "חיפוש מדינה...",
"search_tags": "חיפוש תגים...", "search_tags": "חיפוש תגים...",
@@ -1136,6 +1157,7 @@
"searching_locales": "מחפש אזורי שפה...", "searching_locales": "מחפש אזורי שפה...",
"second": "שנייה", "second": "שנייה",
"see_all_people": "ראה את כל האנשים", "see_all_people": "ראה את כל האנשים",
"select": "בחר",
"select_album_cover": "בחר עטיפת אלבום", "select_album_cover": "בחר עטיפת אלבום",
"select_all": "בחר הכל", "select_all": "בחר הכל",
"select_all_duplicates": "בחר את כל הכפילויות", "select_all_duplicates": "בחר את כל הכפילויות",
@@ -1250,6 +1272,7 @@
"tag_created": "נוצר תג: {tag}", "tag_created": "נוצר תג: {tag}",
"tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים", "tag_feature_description": "עיון בתמונות וסרטונים שקובצו על ידי נושאי תג לוגיים",
"tag_not_found_question": "לא מצליח למצוא תג? <link>צור תג חדש</link>", "tag_not_found_question": "לא מצליח למצוא תג? <link>צור תג חדש</link>",
"tag_people": "תייג אנשים",
"tag_updated": "תג מעודכן: {tag}", "tag_updated": "תג מעודכן: {tag}",
"tagged_assets": "תויגו {count, plural, one {נכס #} other {# נכסים}}", "tagged_assets": "תויגו {count, plural, one {נכס #} other {# נכסים}}",
"tags": "תגים", "tags": "תגים",
@@ -1290,6 +1313,7 @@
"unlink_motion_video": "בטל קישור סרטון תנועה", "unlink_motion_video": "בטל קישור סרטון תנועה",
"unlink_oauth": "בטל קישור OAuth", "unlink_oauth": "בטל קישור OAuth",
"unlinked_oauth_account": "בוטל קישור חשבון OAuth", "unlinked_oauth_account": "בוטל קישור חשבון OAuth",
"unmute_memories": "בטל השתקת זיכרונות",
"unnamed_album": "אלבום ללא שם", "unnamed_album": "אלבום ללא שם",
"unnamed_album_delete_confirmation": "את/ה בטוח/ה שברצונך למחוק את האלבום הזה?", "unnamed_album_delete_confirmation": "את/ה בטוח/ה שברצונך למחוק את האלבום הזה?",
"unnamed_share": "שיתוף ללא שם", "unnamed_share": "שיתוף ללא שם",
@@ -1343,6 +1367,7 @@
"view_all": "הצג הכל", "view_all": "הצג הכל",
"view_all_users": "הצג את כל המשתמשים", "view_all_users": "הצג את כל המשתמשים",
"view_in_timeline": "ראה בציר הזמן", "view_in_timeline": "ראה בציר הזמן",
"view_link": "הצג קישור",
"view_links": "הצג קישורים", "view_links": "הצג קישורים",
"view_name": "הצג", "view_name": "הצג",
"view_next_asset": "הצג את הנכס הבא", "view_next_asset": "הצג את הנכס הבא",

View File

@@ -13,14 +13,14 @@
"add_a_location": "एक स्थान जोड़ें", "add_a_location": "एक स्थान जोड़ें",
"add_a_name": "नाम जोड़ें", "add_a_name": "नाम जोड़ें",
"add_a_title": "एक शीर्षक जोड़ें", "add_a_title": "एक शीर्षक जोड़ें",
"add_exclusion_pattern": "निषेध उदाहरण जोड़ें", "add_exclusion_pattern": "अपवाद उदाहरण जोड़ें",
"add_import_path": "आयात पथ जोड़ें", "add_import_path": "आयात पथ जोड़ें",
"add_location": "स्थान जोड़ें", "add_location": "स्थान जोड़ें",
"add_more_users": "अधिक उपयोगकर्ता जोड़ें", "add_more_users": "अधिक उपयोगकर्ता जोड़ें",
"add_partner": "जोड़ीदार जोड़ें", "add_partner": "जोड़ीदार जोड़ें",
"add_path": "पथ जोड़ें", "add_path": "पथ जोड़ें",
"add_photos": "फ़ोटो जोड़ें", "add_photos": "फ़ोटो जोड़ें",
"add_to": "इसमें जोड़ें..।", "add_to": "इसमें जोड़ें",
"add_to_album": "एल्बम में जोड़ें", "add_to_album": "एल्बम में जोड़ें",
"add_to_shared_album": "साझा एल्बम में जोड़ें", "add_to_shared_album": "साझा एल्बम में जोड़ें",
"add_url": "URL जोड़ें", "add_url": "URL जोड़ें",
@@ -29,11 +29,17 @@
"added_to_favorites_count": "पसंदीदा में {count, number} जोड़ा गया", "added_to_favorites_count": "पसंदीदा में {count, number} जोड़ा गया",
"admin": { "admin": {
"add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।", "add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।",
"asset_offline_description": "यह बाहरी लाइब्रेरी एसेट अब डिस्क पर मौजूद नहीं है और इसे ट्रैश में डाल दिया गया है। यदि फ़ाइल को लाइब्रेरी के भीतर कहीं ले जाया गया था, तो नई संबंधित एसेट के लिए अपनी टाइमलाइन देखें। इस एसेट को वापस पाने के लिए, कृपया सुनिश्चित करें कि नीचे दिए गए फ़ाइल पथ को इम्मिच द्वारा एक्सेस किया जा सकता है और फिर लाइब्रेरी को स्कैन करें।",
"authentication_settings": "प्रमाणीकरण सेटिंग्स", "authentication_settings": "प्रमाणीकरण सेटिंग्स",
"authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें", "authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें",
"authentication_settings_disable_all": "क्या आप वाकई सभी लॉगिन विधियों को अक्षम करना चाहते हैं? लॉगिन पूरी तरह से अक्षम कर दिया जाएगा।", "authentication_settings_disable_all": "क्या आप वाकई सभी लॉगिन विधियों को अक्षम करना चाहते हैं? लॉगिन पूरी तरह से अक्षम कर दिया जाएगा।",
"authentication_settings_reenable": "पुनः सक्षम करने के लिए, <link>Server Command</link> का प्रयोग करे।", "authentication_settings_reenable": "पुनः सक्षम करने के लिए, <link>Server Command</link> का प्रयोग करे।",
"background_task_job": "पृष्ठभूमि कार्य", "background_task_job": "पृष्ठभूमि कार्य",
"backup_database": "बैकअप डाटाबेस",
"backup_database_enable_description": "बैकअप डेटाबेस सक्रिय करें",
"backup_keep_last_amount": "पूर्व बैकअप क्षमता",
"backup_settings": "बैकअप सेटिंग्स",
"backup_settings_description": "डेटाबेस बैकअप सेटिंग्स प्रबंधन",
"check_all": "सभी चेक करें", "check_all": "सभी चेक करें",
"cleared_jobs": "{job}: के लिए कार्य साफ़ कर दिए गए", "cleared_jobs": "{job}: के लिए कार्य साफ़ कर दिए गए",
"config_set_by_file": "Config वर्तमान में एक config फ़ाइल द्वारा सेट किया गया है", "config_set_by_file": "Config वर्तमान में एक config फ़ाइल द्वारा सेट किया गया है",
@@ -42,22 +48,28 @@
"confirm_email_below": "पुष्टि करने के लिए नीचे \"{email}\" टाइप करें", "confirm_email_below": "पुष्टि करने के लिए नीचे \"{email}\" टाइप करें",
"confirm_reprocess_all_faces": "क्या आप वाकई सभी चेहरों को दोबारा संसाधित करना चाहते हैं? इससे नामित लोग भी साफ हो जायेंगे।", "confirm_reprocess_all_faces": "क्या आप वाकई सभी चेहरों को दोबारा संसाधित करना चाहते हैं? इससे नामित लोग भी साफ हो जायेंगे।",
"confirm_user_password_reset": "क्या आप वाकई {user} का पासवर्ड रीसेट करना चाहते हैं?", "confirm_user_password_reset": "क्या आप वाकई {user} का पासवर्ड रीसेट करना चाहते हैं?",
"create_job": "जॉब बनाएँ",
"cron_expression": "क्रॉन अभिव्यक्ति",
"cron_expression_description": "क्रॉन प्रारूप का उपयोग करके स्कैनिंग अंतराल सेट करें। अधिक जानकारी के लिए कृपया <link>क्रोनटैब गुरु</link> देखें",
"disable_login": "लॉगिन अक्षम करें", "disable_login": "लॉगिन अक्षम करें",
"duplicate_detection_job_description": "समान छवियों का पता लगाने के लिए संपत्तियों पर मशीन लर्निंग चलाएं। यह कार्यक्षमता स्मार्ट खोज पर निर्भर करती है", "duplicate_detection_job_description": "समान छवियों का पता लगाने के लिए संपत्तियों पर मशीन लर्निंग चलाएं। यह कार्यक्षमता स्मार्ट खोज पर निर्भर करती है",
"exclusion_pattern_description": "Exclusion पैटर्न आपको अपनी लाइब्रेरी को स्कैन करते समय फ़ाइलों और फ़ोल्डरों को अनदेखा करने देता है। यह उपयोगी है यदि आपके पास ऐसे फ़ोल्डर हैं जिनमें ऐसी फ़ाइलें हैं जिन्हें आप आयात नहीं करना चाहते हैं, जैसे RAW फ़ाइलें।", "exclusion_pattern_description": "Exclusion पैटर्न आपको अपनी लाइब्रेरी को स्कैन करते समय फ़ाइलों और फ़ोल्डरों को अनदेखा करने देता है। यह उपयोगी है यदि आपके पास ऐसे फ़ोल्डर हैं जिनमें ऐसी फ़ाइलें हैं जिन्हें आप आयात नहीं करना चाहते हैं, जैसे RAW फ़ाइलें।",
"external_library_created_at": "बाहरी लाइब्रेरी ({date} को बनाई गई)", "external_library_created_at": "बाहरी लाइब्रेरी ({date} को बनाई गई)",
"external_library_management": "बाहरी लाइब्रेरी प्रबंधन", "external_library_management": "बाहरी लाइब्रेरी प्रबंधन",
"face_detection": "चेहरे का पहचान", "face_detection": "मुख संशोधन",
"face_detection_description": "मशीन लर्निंग का उपयोग करके संपत्तियों में चेहरों का पता लगाएं। वीडियो के लिए, केवल थंबनेल पर विचार किया जाता है। \"सभी\" परिसंपत्तियों को (पुनः) संसाधित करता है। \"लापता\" उन परिसंपत्तियों को कतारबद्ध करता है जिन्हें अभी तक संसाधित नहीं किया गया है। फेस डिटेक्शन पूरा होने के बाद पहचाने गए चेहरों को चेहरे की पहचान के लिए कतारबद्ध किया जाएगा, उन्हें मौजूदा या नए लोगों में समूहित किया जाएगा।", "face_detection_description": "मशीन लर्निंग का उपयोग करके संपत्तियों में चेहरों का पता लगाएं। वीडियो के लिए, केवल थंबनेल पर विचार किया जाता है। \"सभी\" परिसंपत्तियों को (पुनः) संसाधित करता है। \"लापता\" उन परिसंपत्तियों को कतारबद्ध करता है जिन्हें अभी तक संसाधित नहीं किया गया है। फेस डिटेक्शन पूरा होने के बाद पहचाने गए चेहरों को चेहरे की पहचान के लिए कतारबद्ध किया जाएगा, उन्हें मौजूदा या नए लोगों में समूहित किया जाएगा।",
"facial_recognition_job_description": "समूह ने लोगों में चेहरों का पता लगाया। यह चरण फेस डिटेक्शन पूरा होने के बाद चलता है। \"सभी\" चेहरों को (पुनः) समूहित करता है। \"लापता\" कतार में वे चेहरे हैं जिनके लिए कोई व्यक्ति नियुक्त नहीं है।", "facial_recognition_job_description": "समूह ने लोगों में चेहरों का पता लगाया। यह चरण फेस डिटेक्शन पूरा होने के बाद चलता है। \"सभी\" चेहरों को (पुनः) समूहित करता है। \"लापता\" कतार में वे चेहरे हैं जिनके लिए कोई व्यक्ति नियुक्त नहीं है।",
"failed_job_command": "कार्य {job} के लिए आदेश {command} विफल", "failed_job_command": "कार्य {job} के लिए आदेश {command} विफल",
"force_delete_user_warning": "चेतावनी: इससे उपयोगकर्ता और सारा डेटा तुरंत हट जाएगा। इसे पूर्ववत नहीं किया जा सकता और फ़ाइलें पुनर्प्राप्त नहीं की जा सकतीं।", "force_delete_user_warning": "चेतावनी: इससे उपयोगकर्ता और सारा डेटा तुरंत हट जाएगा। इसे पूर्ववत नहीं किया जा सकता और फ़ाइलें पुनर्प्राप्त नहीं की जा सकतीं।",
"forcing_refresh_library_files": "सभी लाइब्रेरी फ़ाइलों को जबरन सामयिक करें", "forcing_refresh_library_files": "सभी लाइब्रेरी फ़ाइलों को जबरन सामयिक करें",
"image_format": "प्रारूप",
"image_format_description": "वेबपी, जेपीईजी की तुलना में छोटी फ़ाइलें बनाता है, लेकिन एनकोड करने में धीमा है।", "image_format_description": "वेबपी, जेपीईजी की तुलना में छोटी फ़ाइलें बनाता है, लेकिन एनकोड करने में धीमा है।",
"image_prefer_embedded_preview": "एम्बेडेड पूर्वावलोकन को प्राथमिकता दें", "image_prefer_embedded_preview": "एम्बेडेड पूर्वावलोकन को प्राथमिकता दें",
"image_prefer_embedded_preview_setting_description": "जब उपलब्ध हो तो RAW फ़ोटो में एम्बेडेड पूर्वावलोकन का उपयोग इमेज प्रोसेसिंग के इनपुट के रूप में करें। यह कुछ छवियों के लिए अधिक सटीक रंग उत्पन्न कर सकता है, लेकिन पूर्वावलोकन की गुणवत्ता कैमरे पर निर्भर करती है और छवि में अधिक संपीड़न कलाकृतियाँ हो सकती हैं।", "image_prefer_embedded_preview_setting_description": "जब उपलब्ध हो तो RAW फ़ोटो में एम्बेडेड पूर्वावलोकन का उपयोग इमेज प्रोसेसिंग के इनपुट के रूप में करें। यह कुछ छवियों के लिए अधिक सटीक रंग उत्पन्न कर सकता है, लेकिन पूर्वावलोकन की गुणवत्ता कैमरे पर निर्भर करती है और छवि में अधिक संपीड़न कलाकृतियाँ हो सकती हैं।",
"image_prefer_wide_gamut": "विस्तृत सरगम को प्राथमिकता दें", "image_prefer_wide_gamut": "विस्तृत सरगम को प्राथमिकता दें",
"image_prefer_wide_gamut_setting_description": "थंबनेल के लिए डिस्प्ले P3 का उपयोग करें। यह विस्तृत कलरस्पेस वाली छवियों की जीवंतता को बेहतर ढंग से संरक्षित करता है, लेकिन पुराने ब्राउज़र संस्करण वाले पुराने डिवाइस पर छवियां अलग-अलग दिखाई दे सकती हैं। रंग परिवर्तन से बचने के लिए sRGB छवियों को sRGB के रूप में रखा जाता है।", "image_prefer_wide_gamut_setting_description": "थंबनेल के लिए डिस्प्ले P3 का उपयोग करें। यह विस्तृत कलरस्पेस वाली छवियों की जीवंतता को बेहतर ढंग से संरक्षित करता है, लेकिन पुराने ब्राउज़र संस्करण वाले पुराने डिवाइस पर छवियां अलग-अलग दिखाई दे सकती हैं। रंग परिवर्तन से बचने के लिए sRGB छवियों को sRGB के रूप में रखा जाता है।",
"image_preview_description": "मेटाडेटा रहित मध्यम आकार की छवि, जिसका उपयोग एकल संपत्ति देखने और मशीन लर्निंग के लिए होता है",
"image_preview_title": "पूर्वदर्शन सेटिंग्स",
"image_quality": "गुणवत्ता", "image_quality": "गुणवत्ता",
"image_settings": "छवि सेटिंग्स", "image_settings": "छवि सेटिंग्स",
"image_settings_description": "उत्पन्न छवियों की गुणवत्ता और रिज़ॉल्यूशन प्रबंधित करें", "image_settings_description": "उत्पन्न छवियों की गुणवत्ता और रिज़ॉल्यूशन प्रबंधित करें",
@@ -1093,6 +1105,7 @@
"view_album": "एल्बम देखें", "view_album": "एल्बम देखें",
"view_all": "सभी को देखें", "view_all": "सभी को देखें",
"view_all_users": "सभी उपयोगकर्ताओं को देखें", "view_all_users": "सभी उपयोगकर्ताओं को देखें",
"view_in_timeline": "टाइमलाइन में देखें",
"view_links": "लिंक देखें", "view_links": "लिंक देखें",
"view_next_asset": "अगली संपत्ति देखें", "view_next_asset": "अगली संपत्ति देखें",
"view_previous_asset": "पिछली संपत्ति देखें", "view_previous_asset": "पिछली संपत्ति देखें",

View File

@@ -288,7 +288,7 @@
"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)",
"transcoding_max_bitrate_description": "Postavljanje maksimalne brzine prijenosa može učiniti veličine datoteka predvidljivijima uz manji trošak za kvalitetu. Pri 720p, tipične vrijednosti su 2600k za VP9 ili HEVC ili 4500k za H.264. Onemogućeno ako je postavljeno na 0.", "transcoding_max_bitrate_description": "Postavljanje maksimalne brzine prijenosa može učiniti veličine datoteka predvidljivijima uz manji trošak za kvalitetu. Pri 720p, tipične vrijednosti su 2600 kbit/s za VP9 ili HEVC ili 4500 kbit/s za H.264. Onemogućeno ako je postavljeno na 0.",
"transcoding_max_keyframe_interval": "Maksimalni interval ključnih sličica", "transcoding_max_keyframe_interval": "Maksimalni interval ključnih sličica",
"transcoding_max_keyframe_interval_description": "Postavlja maksimalnu udaljenost slika između ključnih kadrova. Niže vrijednosti pogoršavaju učinkovitost kompresije, ali poboljšavaju vrijeme traženja i mogu poboljšati kvalitetu u scenama s brzim kretanjem. 0 automatski postavlja ovu vrijednost.", "transcoding_max_keyframe_interval_description": "Postavlja maksimalnu udaljenost slika između ključnih kadrova. Niže vrijednosti pogoršavaju učinkovitost kompresije, ali poboljšavaju vrijeme traženja i mogu poboljšati kvalitetu u scenama s brzim kretanjem. 0 automatski postavlja ovu vrijednost.",
"transcoding_optimal_description": "Videozapisi koji su veći od ciljne rezolucije ili nisu u prihvatljivom formatu", "transcoding_optimal_description": "Videozapisi koji su veći od ciljne rezolucije ili nisu u prihvatljivom formatu",
@@ -468,6 +468,7 @@
"comments_are_disabled": "Komentari onemogućeni", "comments_are_disabled": "Komentari onemogućeni",
"confirm": "Potvrdi", "confirm": "Potvrdi",
"confirm_admin_password": "Potvrdite lozinku administratora", "confirm_admin_password": "Potvrdite lozinku administratora",
"confirm_delete_face": "Jeste li sigurni da želite izbrisati lice {name} iz knjižnice materijala.",
"confirm_delete_shared_link": "Jeste li sigurni da želite izbrisati ovu zajedničku vezu?", "confirm_delete_shared_link": "Jeste li sigurni da želite izbrisati ovu zajedničku vezu?",
"confirm_keep_this_delete_others": "Sva druga sredstva u nizu bit će izbrisana osim ovog sredstva. Jeste li sigurni da želite nastaviti?", "confirm_keep_this_delete_others": "Sva druga sredstva u nizu bit će izbrisana osim ovog sredstva. Jeste li sigurni da želite nastaviti?",
"confirm_password": "Potvrdite lozinku", "confirm_password": "Potvrdite lozinku",

View File

@@ -35,12 +35,13 @@
"authentication_settings_disable_all": "Biztosan letiltod az összes bejelentkezési módot? A bejelentkezés teljesen le lesz tiltva.", "authentication_settings_disable_all": "Biztosan letiltod az összes bejelentkezési módot? A bejelentkezés teljesen le lesz tiltva.",
"authentication_settings_reenable": "Az újbóli engedélyezéshez használj egy<link>Szerver Parancsot</link>.", "authentication_settings_reenable": "Az újbóli engedélyezéshez használj egy<link>Szerver Parancsot</link>.",
"background_task_job": "Háttérfeladatok", "background_task_job": "Háttérfeladatok",
"backup_database": "Tartalék Adatbázis", "backup_database": "Adatbázis Biztonsági Mentése",
"backup_database_enable_description": "Adatbázis biztonsági mentések engedélyezése", "backup_database_enable_description": "Adatbázis biztonsági mentések engedélyezése",
"backup_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma", "backup_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma",
"backup_settings": "Biztonsági mentés beállításai", "backup_settings": "Biztonsági mentés beállításai",
"backup_settings_description": "Adatbázis mentési beállításainak kezelése", "backup_settings_description": "Adatbázis mentési beállításainak kezelése",
"check_all": "Összes Kipiálása", "check_all": "Összes Kipiálása",
"cleanup": "Takarítás",
"cleared_jobs": "{job}: feladatai törölve", "cleared_jobs": "{job}: feladatai törölve",
"config_set_by_file": "A konfigurációt jelenleg egy konfigurációs fájl állítja be", "config_set_by_file": "A konfigurációt jelenleg egy konfigurációs fájl állítja be",
"confirm_delete_library": "Biztosan ki szeretnéd törölni a {library} képtárat?", "confirm_delete_library": "Biztosan ki szeretnéd törölni a {library} képtárat?",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "A képtár összes fájljának frissítése", "forcing_refresh_library_files": "A képtár összes fájljának frissítése",
"image_format": "Formátum", "image_format": "Formátum",
"image_format_description": "WebP a JPEG-nél kisebb fájlokat készít, de lassabban.", "image_format_description": "WebP a JPEG-nél kisebb fájlokat készít, de lassabban.",
"image_fullsize_description": "Teljes méretű kép eltávolított metaadatokkal, nagyításkor használva",
"image_fullsize_enabled": "Teljes méretű képgenerálás engedélyezése",
"image_fullsize_enabled_description": "Teljes méretű kép generálása nem webbarát formátumokhoz. Ha a „Beágyazott előnézet preferálása” engedélyezve van, a beágyazott előnézetek közvetlenül, átalakítás nélkül kerülnek felhasználásra. Nem érinti a webbarát formátumokat, például a JPEG-et.",
"image_fullsize_quality_description": "Teljes méretű képminőség 1-100 között. A magasabb érték jobb minőséget eredményez, de nagyobb fájlméretet is.",
"image_fullsize_title": "Teljes méretű képbeállítások",
"image_prefer_embedded_preview": "Beágyazott előnézeti kép előnyben részesítése", "image_prefer_embedded_preview": "Beágyazott előnézeti kép előnyben részesítése",
"image_prefer_embedded_preview_setting_description": "Nyers (RAW) fotók esetén használja a beépített előnézeti képet (ha van) a képek feldogozásához. Ez néhány kép esetében pontosabb színeket eredményezhet, de az előnézeti kép minősége erősen fényképezőgép függő, és a képen előfordulhatnak tömörítési hibák.", "image_prefer_embedded_preview_setting_description": "Nyers (RAW) fotók esetén használja a beépített előnézeti képet (ha van) a képek feldogozásához. Ez néhány kép esetében pontosabb színeket eredményezhet, de az előnézeti kép minősége erősen fényképezőgép függő, és a képen előfordulhatnak tömörítési hibák.",
"image_prefer_wide_gamut": "Széles színtér preferálása", "image_prefer_wide_gamut": "Széles színtér preferálása",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Képtár időszakos átfésülésének engedélyezése", "library_scanning_enable_description": "Képtár időszakos átfésülésének engedélyezése",
"library_settings": "Külső Képtár", "library_settings": "Külső Képtár",
"library_settings_description": "Külső képtár beállításainak kezelése", "library_settings_description": "Külső képtár beállításainak kezelése",
"library_tasks_description": "Képtár feladatok elvégzése", "library_tasks_description": "Külső könyvtárak szkennelése új és/vagy módosított elemek után",
"library_watching_enable_description": "Külső képtár változásainak figyelése", "library_watching_enable_description": "Külső képtár változásainak figyelése",
"library_watching_settings": "Képtár figyelése (KÍSÉRLETI)", "library_watching_settings": "Képtár figyelése (KÍSÉRLETI)",
"library_watching_settings_description": "Megváltozott fájlok automatikus észlelése", "library_watching_settings_description": "Megváltozott fájlok automatikus észlelése",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Képek szemantikai keresése CLIP beágyazások segítségével", "machine_learning_smart_search_description": "Képek szemantikai keresése CLIP beágyazások segítségével",
"machine_learning_smart_search_enabled": "Okos keresés engedélyezése", "machine_learning_smart_search_enabled": "Okos keresés engedélyezése",
"machine_learning_smart_search_enabled_description": "Ha ki van kapcsolva, a képek nem lesznek átalakítva okos kereséshez.", "machine_learning_smart_search_enabled_description": "Ha ki van kapcsolva, a képek nem lesznek átalakítva okos kereséshez.",
"machine_learning_url_description": "Gépi tanulás szerver URL címe. Ha többi, mint egy URL van megadva, mindegyik szervert egyenként próbálja meg, amíg az egyik sikeresen nem válaszol, sorrendben az elsőtől az utólsóig.", "machine_learning_url_description": "Gépi tanulás szerver URL címe. Ha többi, mint egy URL van megadva, mindegyik szervert egyenként próbálja meg, amíg az egyik sikeresen nem válaszol, sorrendben az elsőtől az utólsóig. A nem válaszoló szervereket átmenetileg figyelmen kívül hagyja, amíg újra online nem lesznek.",
"manage_concurrency": "Párhuzamos Feladatok Kezelése", "manage_concurrency": "Párhuzamos Feladatok Kezelése",
"manage_log_settings": "Naplózási beállítások kezelése", "manage_log_settings": "Naplózási beállítások kezelése",
"map_dark_style": "Sötét stílus", "map_dark_style": "Sötét stílus",
@@ -147,6 +153,8 @@
"map_settings": "Térkép", "map_settings": "Térkép",
"map_settings_description": "Térkép beállítások kezelése", "map_settings_description": "Térkép beállítások kezelése",
"map_style_description": "Egy style.json térképtémára mutató URL cím", "map_style_description": "Egy style.json térképtémára mutató URL cím",
"memory_cleanup_job": "Memória takarítás",
"memory_generate_job": "Emlék generálálsa",
"metadata_extraction_job": "Metaadatok kinyerése", "metadata_extraction_job": "Metaadatok kinyerése",
"metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből", "metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből",
"metadata_faces_import_setting": "Arc importálás engedélyezése", "metadata_faces_import_setting": "Arc importálás engedélyezése",
@@ -240,7 +248,7 @@
"storage_template_hash_verification_enabled_description": "Engedélyezi a hash-érték ellenőrzést - csak akkor kapcsold ki, ha tisztában vagy a következményekkel", "storage_template_hash_verification_enabled_description": "Engedélyezi a hash-érték ellenőrzést - csak akkor kapcsold ki, ha tisztában vagy a következményekkel",
"storage_template_migration": "Tárhely sablon migrálása", "storage_template_migration": "Tárhely sablon migrálása",
"storage_template_migration_description": "A jelenlegi <link>{template}</link> alkalmazása a már feltöltött elemekre", "storage_template_migration_description": "A jelenlegi <link>{template}</link> alkalmazása a már feltöltött elemekre",
"storage_template_migration_info": "A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.", "storage_template_migration_info": "A sablon az összes kiterjesztést kisbetűssé alakítja át. A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.",
"storage_template_migration_job": "Tárhely Sablon Migrációja", "storage_template_migration_job": "Tárhely Sablon Migrációja",
"storage_template_more_details": "További részletekért erről a funkcióról lásd a <template-link>Tárhely Sablon</template-link> és annak <implications-link>következményeit</implications-link> a dokumentációban", "storage_template_more_details": "További részletekért erről a funkcióról lásd a <template-link>Tárhely Sablon</template-link> és annak <implications-link>következményeit</implications-link> a dokumentációban",
"storage_template_onboarding_description": "Ha ez a funkció engedélyezve van, akkor a fájlokat automatikusan az egyéni sablon alapján rendszerezi el. Stabilitási problémák miatt a funkció alapértelmezés szerint ki van kapcsolva. További információkért lásd a <link>dokumentációt</link>.", "storage_template_onboarding_description": "Ha ez a funkció engedélyezve van, akkor a fájlokat automatikusan az egyéni sablon alapján rendszerezi el. Stabilitási problémák miatt a funkció alapértelmezés szerint ki van kapcsolva. További információkért lásd a <link>dokumentációt</link>.",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "B-képkockák maximum száma", "transcoding_max_b_frames": "B-képkockák maximum száma",
"transcoding_max_b_frames_description": "Nagyobb értékek megnövelik a tömörítés hatékonyságát, de lelassítják a kódolást. Nem minden hardvereszköz támogatja. A 0 érték kikapcsolja a B-képkockákat, míg -1 esetén a szoftver magának választ értéket.", "transcoding_max_b_frames_description": "Nagyobb értékek megnövelik a tömörítés hatékonyságát, de lelassítják a kódolást. Nem minden hardvereszköz támogatja. A 0 érték kikapcsolja a B-képkockákat, míg -1 esetén a szoftver magának választ értéket.",
"transcoding_max_bitrate": "Maximum bitráta", "transcoding_max_bitrate": "Maximum bitráta",
"transcoding_max_bitrate_description": "Maximum bitráta beállítása konzisztensebb fájlméretet eredményez egy kevés minőségi romlás árán. 720p esetén jellemző érték lehet 2600k a VP9 vagy HEVC kódoláshoz, 4500k a H.264 kódoláshoz. A 0 érték esetén nincs maximum bitráta.", "transcoding_max_bitrate_description": "Maximum bitráta beállítása konzisztensebb fájlméretet eredményez egy kevés minőségi romlás árán. 720p esetén jellemző érték lehet 2600 kbit/s a VP9 vagy HEVC kódoláshoz, 4500 kbit/s a H.264 kódoláshoz. A 0 érték esetén nincs maximum bitráta.",
"transcoding_max_keyframe_interval": "Maximum kulcskocka intervallum", "transcoding_max_keyframe_interval": "Maximum kulcskocka intervallum",
"transcoding_max_keyframe_interval_description": "Beállítja a kulcskockák közötti legnagyobb lehetséges távolságot. Alacsony érték csökkenti a tömörítési hatékonyságot, de lejátszás közben az előre- és hátratekerés gyorsabb, valamint javíthatja a gyorsan mozgó jelenetek képminőségét. 0 esetén a szoftver magának állítja be az értéket.", "transcoding_max_keyframe_interval_description": "Beállítja a kulcskockák közötti legnagyobb lehetséges távolságot. Alacsony érték csökkenti a tömörítési hatékonyságot, de lejátszás közben az előre- és hátratekerés gyorsabb, valamint javíthatja a gyorsan mozgó jelenetek képminőségét. 0 esetén a szoftver magának állítja be az értéket.",
"transcoding_optimal_description": "A célfelbontásnál nagyobb vagy a nem elfogadott formátumú videókat", "transcoding_optimal_description": "A célfelbontásnál nagyobb vagy a nem elfogadott formátumú videókat",
@@ -391,6 +399,7 @@
"allow_edits": "Módosítások engedélyezése", "allow_edits": "Módosítások engedélyezése",
"allow_public_user_to_download": "Engedélyezi a letöltést publikus felhasználó számára", "allow_public_user_to_download": "Engedélyezi a letöltést publikus felhasználó számára",
"allow_public_user_to_upload": "Engedélyezi a feltöltést publikus felhasználó számára", "allow_public_user_to_upload": "Engedélyezi a feltöltést publikus felhasználó számára",
"alt_text_qr_code": "QR kód kép",
"anti_clockwise": "Óramutató járásával ellentétes irány", "anti_clockwise": "Óramutató járásával ellentétes irány",
"api_key": "API Kulcs", "api_key": "API Kulcs",
"api_key_description": "Ez csak most az egyszer jelenik meg. Az ablak bezárása előtt feltétlenül másold.", "api_key_description": "Ez csak most az egyszer jelenik meg. Az ablak bezárása előtt feltétlenül másold.",
@@ -481,6 +490,7 @@
"comments_are_disabled": "A megjegyzések le vannak tiltva", "comments_are_disabled": "A megjegyzések le vannak tiltva",
"confirm": "Jóváhagy", "confirm": "Jóváhagy",
"confirm_admin_password": "Admin Jelszó Újból", "confirm_admin_password": "Admin Jelszó Újból",
"confirm_delete_face": "Biztos, hogy törölni szeretnéd a(z) {name} arcát az elemről?",
"confirm_delete_shared_link": "Biztosan törölni szeretnéd ezt a megosztott linket?", "confirm_delete_shared_link": "Biztosan törölni szeretnéd ezt a megosztott linket?",
"confirm_keep_this_delete_others": "Minden más elem a készletben törlésre kerül, kivéve ezt az elemet. Biztosan folytatni szeretnéd?", "confirm_keep_this_delete_others": "Minden más elem a készletben törlésre kerül, kivéve ezt az elemet. Biztosan folytatni szeretnéd?",
"confirm_password": "Jelszó megerősítése", "confirm_password": "Jelszó megerősítése",
@@ -533,6 +543,7 @@
"delete_album": "Album törlése", "delete_album": "Album törlése",
"delete_api_key_prompt": "Biztosan törölni szeretnéd ezt az API kulcsot?", "delete_api_key_prompt": "Biztosan törölni szeretnéd ezt az API kulcsot?",
"delete_duplicates_confirmation": "Biztosan véglegesen törölni szeretnéd ezeket a duplikátumokat?", "delete_duplicates_confirmation": "Biztosan véglegesen törölni szeretnéd ezeket a duplikátumokat?",
"delete_face": "Arc törlése",
"delete_key": "Kulcs törlése", "delete_key": "Kulcs törlése",
"delete_library": "Képtár Törlése", "delete_library": "Képtár Törlése",
"delete_link": "Link törlése", "delete_link": "Link törlése",
@@ -600,6 +611,7 @@
"enabled": "Engedélyezve", "enabled": "Engedélyezve",
"end_date": "Vég dátum", "end_date": "Vég dátum",
"error": "Hiba", "error": "Hiba",
"error_delete_face": "Hiba az arc törlése során",
"error_loading_image": "Hiba a kép betöltése közben", "error_loading_image": "Hiba a kép betöltése közben",
"error_title": "Hiba - valami félresikerült", "error_title": "Hiba - valami félresikerült",
"errors": { "errors": {
@@ -802,6 +814,7 @@
"include_shared_albums": "Megosztott albumokkal együtt", "include_shared_albums": "Megosztott albumokkal együtt",
"include_shared_partner_assets": "Partner által megosztott elemekkel együtt", "include_shared_partner_assets": "Partner által megosztott elemekkel együtt",
"individual_share": "Egymagában megosztott elem", "individual_share": "Egymagában megosztott elem",
"individual_shares": "Egyéni megosztások",
"info": "Infó", "info": "Infó",
"interval": { "interval": {
"day_at_onepm": "Minden nap 13 órakor", "day_at_onepm": "Minden nap 13 órakor",
@@ -851,6 +864,7 @@
"loop_videos": "Videók ismétlése", "loop_videos": "Videók ismétlése",
"loop_videos_description": "Engedélyezi a videók folyamatosan ismételt lejátszását.", "loop_videos_description": "Engedélyezi a videók folyamatosan ismételt lejátszását.",
"main_branch_warning": "Fejlesztői verziót használsz. Javasoljuk a stabil verzió használatát!", "main_branch_warning": "Fejlesztői verziót használsz. Javasoljuk a stabil verzió használatát!",
"main_menu": "Főmenü",
"make": "Gyártó", "make": "Gyártó",
"manage_shared_links": "Megosztási linkek kezelése", "manage_shared_links": "Megosztási linkek kezelése",
"manage_sharing_with_partners": "Partnerekkel való megosztás kezelése", "manage_sharing_with_partners": "Partnerekkel való megosztás kezelése",
@@ -883,6 +897,7 @@
"month": "Hónap", "month": "Hónap",
"more": "Továbbiak", "more": "Továbbiak",
"moved_to_trash": "Áthelyezve a lomtárba", "moved_to_trash": "Áthelyezve a lomtárba",
"mute_memories": "Emlékek elnémítása",
"my_albums": "Saját albumaim", "my_albums": "Saját albumaim",
"name": "Név", "name": "Név",
"name_or_nickname": "Név vagy becenév", "name_or_nickname": "Név vagy becenév",
@@ -978,6 +993,7 @@
"permanently_deleted_asset": "Elem véglegesen törölve", "permanently_deleted_asset": "Elem véglegesen törölve",
"permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve", "permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve",
"person": "Személy", "person": "Személy",
"person_birthdate": "Született: {date}",
"person_hidden": "{name}{hidden, select, true { (rejtett)} other {}}", "person_hidden": "{name}{hidden, select, true { (rejtett)} other {}}",
"photo_shared_all_users": "Úgy tűnik, hogy már mindenkivel megosztottad a fényképeidet, vagy nincs senki, akivel meg tudnád osztani.", "photo_shared_all_users": "Úgy tűnik, hogy már mindenkivel megosztottad a fényképeidet, vagy nincs senki, akivel meg tudnád osztani.",
"photos": "Fényképek", "photos": "Fényképek",
@@ -987,6 +1003,7 @@
"pick_a_location": "Hely választása", "pick_a_location": "Hely választása",
"place": "Hely", "place": "Hely",
"places": "Helyek", "places": "Helyek",
"places_count": "{count, plural, one {{count, number} Helyszín} other {{count, number} Helyszín}}",
"play": "Lejátszás", "play": "Lejátszás",
"play_memories": "Emlékek lejátszása", "play_memories": "Emlékek lejátszása",
"play_motion_photo": "Mozgókép lejátszása", "play_motion_photo": "Mozgókép lejátszása",
@@ -1068,12 +1085,16 @@
"remove_from_album": "Eltávolítás az albumból", "remove_from_album": "Eltávolítás az albumból",
"remove_from_favorites": "Eltávolítás a kedvencekből", "remove_from_favorites": "Eltávolítás a kedvencekből",
"remove_from_shared_link": "Eltávolítás a megosztott linkből", "remove_from_shared_link": "Eltávolítás a megosztott linkből",
"remove_memory": "Emlék eltávolítása",
"remove_photo_from_memory": "Kép eltávolítása az emlékből",
"remove_url": "URL eltávolítása", "remove_url": "URL eltávolítása",
"remove_user": "Felhasználó eltávolítása", "remove_user": "Felhasználó eltávolítása",
"removed_api_key": "API Kulcs eltávolítva: {name}", "removed_api_key": "API Kulcs eltávolítva: {name}",
"removed_from_archive": "Archívumból eltávolítva", "removed_from_archive": "Archívumból eltávolítva",
"removed_from_favorites": "Kedvencekből eltávolítva", "removed_from_favorites": "Kedvencekből eltávolítva",
"removed_from_favorites_count": "A kedvencekből {count, plural, other {# elem}} eltávolítva", "removed_from_favorites_count": "A kedvencekből {count, plural, other {# elem}} eltávolítva",
"removed_memory": "Eltávolított emlék",
"removed_photo_from_memory": "Fotó törölve az emlékből",
"removed_tagged_assets": "Címke eltávolítva {count, plural, one {# elemről} other {# elemről}}", "removed_tagged_assets": "Címke eltávolítva {count, plural, one {# elemről} other {# elemről}}",
"rename": "Átnevezés", "rename": "Átnevezés",
"repair": "Javítás", "repair": "Javítás",
@@ -1082,6 +1103,7 @@
"repository": "Tároló", "repository": "Tároló",
"require_password": "Jelszó megadása szükséges", "require_password": "Jelszó megadása szükséges",
"require_user_to_change_password_on_first_login": "A felhasználónak kötelező megváltoztatnia a jelszavát az első bejelentkezéskor", "require_user_to_change_password_on_first_login": "A felhasználónak kötelező megváltoztatnia a jelszavát az első bejelentkezéskor",
"rescan": "Újraszkennelés",
"reset": "Visszaállítás", "reset": "Visszaállítás",
"reset_password": "Jelszó visszaállítása", "reset_password": "Jelszó visszaállítása",
"reset_people_visibility": "Személyek láthatóságának visszaállítása", "reset_people_visibility": "Személyek láthatóságának visszaállítása",
@@ -1125,6 +1147,7 @@
"search_options": "Keresési lehetőségek", "search_options": "Keresési lehetőségek",
"search_people": "Személyek keresése", "search_people": "Személyek keresése",
"search_places": "Helyek keresése", "search_places": "Helyek keresése",
"search_rating": "Keresés értékelés szerint...",
"search_settings": "Keresési beállítások", "search_settings": "Keresési beállítások",
"search_state": "Megye/Állam keresése...", "search_state": "Megye/Állam keresése...",
"search_tags": "Címkék keresése...", "search_tags": "Címkék keresése...",
@@ -1134,6 +1157,7 @@
"searching_locales": "Helyszín keresése...", "searching_locales": "Helyszín keresése...",
"second": "Másodperc", "second": "Másodperc",
"see_all_people": "Minden személy megtekintése", "see_all_people": "Minden személy megtekintése",
"select": "Kiválsztás",
"select_album_cover": "Albumborító kiválasztása", "select_album_cover": "Albumborító kiválasztása",
"select_all": "Összes kijelölése", "select_all": "Összes kijelölése",
"select_all_duplicates": "Minden duplikátum kijelölése", "select_all_duplicates": "Minden duplikátum kijelölése",
@@ -1171,6 +1195,7 @@
"shared_from_partner": "{partner} fényképei", "shared_from_partner": "{partner} fényképei",
"shared_link_options": "Megosztott link beállításai", "shared_link_options": "Megosztott link beállításai",
"shared_links": "Megosztott linkek", "shared_links": "Megosztott linkek",
"shared_links_description": "Fényképek és videók megosztása linkkel",
"shared_photos_and_videos_count": "{assetCount, plural, other {# megosztott kép és videó.}}", "shared_photos_and_videos_count": "{assetCount, plural, other {# megosztott kép és videó.}}",
"shared_with_partner": "Megosztva {partner} partnereddel", "shared_with_partner": "Megosztva {partner} partnereddel",
"sharing": "Megosztás", "sharing": "Megosztás",
@@ -1247,6 +1272,7 @@
"tag_created": "Létrehozott címke: {tag}", "tag_created": "Létrehozott címke: {tag}",
"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? Hozz létre egy <link>új címkét</link>", "tag_not_found_question": "Nem találod a címkét? Hozz létre egy <link>új címkét</link>",
"tag_people": "Emberek címkézése",
"tag_updated": "Frissített címke: {tag}", "tag_updated": "Frissített címke: {tag}",
"tagged_assets": "{count, plural, one {# elem} other {# elem}} felcímkézve", "tagged_assets": "{count, plural, one {# elem} other {# elem}} felcímkézve",
"tags": "Címkék", "tags": "Címkék",
@@ -1287,6 +1313,7 @@
"unlink_motion_video": "Mozgókép leválasztása", "unlink_motion_video": "Mozgókép leválasztása",
"unlink_oauth": "OAuth leválasztása", "unlink_oauth": "OAuth leválasztása",
"unlinked_oauth_account": "Leválasztott OAuth fiók", "unlinked_oauth_account": "Leválasztott OAuth fiók",
"unmute_memories": "Emlékek mutatása",
"unnamed_album": "Névtelen Album", "unnamed_album": "Névtelen Album",
"unnamed_album_delete_confirmation": "Biztosan törölni szeretnéd ezt az albumot?", "unnamed_album_delete_confirmation": "Biztosan törölni szeretnéd ezt az albumot?",
"unnamed_share": "Névtelen Megosztás", "unnamed_share": "Névtelen Megosztás",
@@ -1340,6 +1367,7 @@
"view_all": "Összes Megtekintése", "view_all": "Összes Megtekintése",
"view_all_users": "Minden Felhasználó Megtekintése", "view_all_users": "Minden Felhasználó Megtekintése",
"view_in_timeline": "Megtekintés az idővonalon", "view_in_timeline": "Megtekintés az idővonalon",
"view_link": "Link megtekintése",
"view_links": "Linkek megtekintése", "view_links": "Linkek megtekintése",
"view_name": "Megtekintés", "view_name": "Megtekintés",
"view_next_asset": "Következő elem megtekintése", "view_next_asset": "Következő elem megtekintése",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Pengaturan Pencadangan", "backup_settings": "Pengaturan Pencadangan",
"backup_settings_description": "Kelola pengaturan pencadangan basis data", "backup_settings_description": "Kelola pengaturan pencadangan basis data",
"check_all": "Periksa Semua", "check_all": "Periksa Semua",
"cleanup": "Pembersihan",
"cleared_jobs": "Tugas terselesaikan untuk: {job}", "cleared_jobs": "Tugas terselesaikan untuk: {job}",
"config_set_by_file": "Konfigurasi saat ini ditetapkan oleh berkas konfigurasi", "config_set_by_file": "Konfigurasi saat ini ditetapkan oleh berkas konfigurasi",
"confirm_delete_library": "Apakah Anda yakin ingin menghapus pustaka {library}?", "confirm_delete_library": "Apakah Anda yakin ingin menghapus pustaka {library}?",
@@ -96,7 +97,7 @@
"library_scanning_enable_description": "Aktifkan pemindaian pustaka berkala", "library_scanning_enable_description": "Aktifkan pemindaian pustaka berkala",
"library_settings": "Pustaka Eksternal", "library_settings": "Pustaka Eksternal",
"library_settings_description": "Kelola pengaturan pustaka eksternal", "library_settings_description": "Kelola pengaturan pustaka eksternal",
"library_tasks_description": "Lakukan tugas pustaka", "library_tasks_description": "Pindai pustaka eksternal untuk aset baru dan/atau berubah",
"library_watching_enable_description": "Pantau perubahan berkas dalam pustaka eksternal", "library_watching_enable_description": "Pantau perubahan berkas dalam pustaka eksternal",
"library_watching_settings": "Pemantauan pustaka (UJI COBA)", "library_watching_settings": "Pemantauan pustaka (UJI COBA)",
"library_watching_settings_description": "Pantau berkas yang telah diubah secara otomatis", "library_watching_settings_description": "Pantau berkas yang telah diubah secara otomatis",
@@ -131,7 +132,7 @@
"machine_learning_smart_search_description": "Cari gambar secara semantik menggunakan penyematan CLIP", "machine_learning_smart_search_description": "Cari gambar secara semantik menggunakan penyematan CLIP",
"machine_learning_smart_search_enabled": "Aktifkan pencarian pintar", "machine_learning_smart_search_enabled": "Aktifkan pencarian pintar",
"machine_learning_smart_search_enabled_description": "Jika dinonaktifkan, gambar tidak akan dienkode untuk pencarian pintar.", "machine_learning_smart_search_enabled_description": "Jika dinonaktifkan, gambar tidak akan dienkode untuk pencarian pintar.",
"machine_learning_url_description": "URL server pembelajaran mesin. Jika lebih dari satu URL disediakan, setiap server akan dicoba satu per satu sampai salah satu berhasil merespons, dari urutan pertama sampai terakhir.", "machine_learning_url_description": "URL server pembelajaran mesin. Jika lebih dari satu URL disediakan, setiap server akan dicoba satu per satu sampai salah satu berhasil merespons, dari urutan pertama sampai terakhir. Server yang tidak merespons akan diabaikan sementara sampai kembali daring.",
"manage_concurrency": "Kelola Konkurensi", "manage_concurrency": "Kelola Konkurensi",
"manage_log_settings": "Kelola pengaturan log", "manage_log_settings": "Kelola pengaturan log",
"map_dark_style": "Gaya gelap", "map_dark_style": "Gaya gelap",
@@ -147,6 +148,8 @@
"map_settings": "Peta", "map_settings": "Peta",
"map_settings_description": "Kelola pengaturan peta", "map_settings_description": "Kelola pengaturan peta",
"map_style_description": "URL ke tema peta style.json", "map_style_description": "URL ke tema peta style.json",
"memory_cleanup_job": "Pembersihan memori",
"memory_generate_job": "Pembuatan memori",
"metadata_extraction_job": "Ekstrak metadata", "metadata_extraction_job": "Ekstrak metadata",
"metadata_extraction_job_description": "Ekstrak informasi metadata dari setiap aset, seperti GPS, wajah dan resolusi", "metadata_extraction_job_description": "Ekstrak informasi metadata dari setiap aset, seperti GPS, wajah dan resolusi",
"metadata_faces_import_setting": "Aktifkan impor wajah", "metadata_faces_import_setting": "Aktifkan impor wajah",
@@ -240,7 +243,7 @@
"storage_template_hash_verification_enabled_description": "Mengaktifkan verifikasi hash, jangan mengaktifkan ini kecuali Anda sudah tahu kekurangannya", "storage_template_hash_verification_enabled_description": "Mengaktifkan verifikasi hash, jangan mengaktifkan ini kecuali Anda sudah tahu kekurangannya",
"storage_template_migration": "Migrasi templat penyimpanan", "storage_template_migration": "Migrasi templat penyimpanan",
"storage_template_migration_description": "Tetapkan <link>{template}</link> saat ini pada aset yang sebelumnya diunggah", "storage_template_migration_description": "Tetapkan <link>{template}</link> saat ini pada aset yang sebelumnya diunggah",
"storage_template_migration_info": "Perubahan templat hanya akan diterapkan pada aset baru. Untuk menerapkan templat pada setiap aset yang sebelumnya telah diunggah, jalankan <link>{job}</link>.", "storage_template_migration_info": "Templat penyimpanan akan mengubah semua ekstensi ke huruf kecil. Perubahan templat hanya akan diterapkan pada aset baru. Untuk menerapkan templat pada setiap aset yang sebelumnya telah diunggah, jalankan <link>{job}</link>.",
"storage_template_migration_job": "Tugas Migrasi Templat Ruang Penyimpanan", "storage_template_migration_job": "Tugas Migrasi Templat Ruang Penyimpanan",
"storage_template_more_details": "Untuk detail lebih lanjut tentang fitur ini, pergi ke <template-link>Templat Penyimpanan</template-link> dan <implications-link>kekurangannya</implications-link>", "storage_template_more_details": "Untuk detail lebih lanjut tentang fitur ini, pergi ke <template-link>Templat Penyimpanan</template-link> dan <implications-link>kekurangannya</implications-link>",
"storage_template_onboarding_description": "Ketika diaktifkan, fitur ini akan mengelola berkas secara otomatis berdasarkan templat pengguna. Karena masalah stabilitas, fitur ini telah dimatikan secara bawaan. Untuk informasi lebih lanjut, silakan lihat <link>dokumentasi</link>.", "storage_template_onboarding_description": "Ketika diaktifkan, fitur ini akan mengelola berkas secara otomatis berdasarkan templat pengguna. Karena masalah stabilitas, fitur ini telah dimatikan secara bawaan. Untuk informasi lebih lanjut, silakan lihat <link>dokumentasi</link>.",
@@ -299,7 +302,7 @@
"transcoding_max_b_frames": "Bingkai B maksimum", "transcoding_max_b_frames": "Bingkai B maksimum",
"transcoding_max_b_frames_description": "Nilai yang lebih tinggi meningkatkan efisiensi kompresi, tetapi membuat pengodean lebih lambat. Mungkin tidak kompatibel dengan akselerasi perangkat keras pada perangkat lawas. 0 menonaktifkan bingkai B, sedangkan -1 mengatur nilai ini secara otomatis.", "transcoding_max_b_frames_description": "Nilai yang lebih tinggi meningkatkan efisiensi kompresi, tetapi membuat pengodean lebih lambat. Mungkin tidak kompatibel dengan akselerasi perangkat keras pada perangkat lawas. 0 menonaktifkan bingkai B, sedangkan -1 mengatur nilai ini secara otomatis.",
"transcoding_max_bitrate": "Kecepatan bit maksimum", "transcoding_max_bitrate": "Kecepatan bit maksimum",
"transcoding_max_bitrate_description": "Menetapkan kecepatan bit maksimum dapat membuat ukuran berkas lebih dapat diprediksi dengan kekurangan minor pada kualitas. Pada 720p, nilai umum adalah 2600k untuk VP9 atau HEVC, atau 4500k untuk H.264. Dinonaktifkan jika ditetapkan ke 0.", "transcoding_max_bitrate_description": "Menetapkan kecepatan bit maksimum dapat membuat ukuran berkas lebih dapat diprediksi dengan kekurangan minor pada kualitas. Pada 720p, nilai umum adalah 2600 kbit/s untuk VP9 atau HEVC, atau 4500 kbit/s untuk H.264. Dinonaktifkan jika ditetapkan ke 0.",
"transcoding_max_keyframe_interval": "Interval bingkai kunci maksimum", "transcoding_max_keyframe_interval": "Interval bingkai kunci maksimum",
"transcoding_max_keyframe_interval_description": "Menetapkan jarak bingkai maksimum antara bingkai kunci. Nilai yang lebih rendah membuat efisiensi kompresi lebih buruk, tetapi meningkatkan waktu pencarian dan dapat meningkatkan kualitas dalam adegan dengan gerakan cepat. 0 menetapkan nilai ini secara otomatis.", "transcoding_max_keyframe_interval_description": "Menetapkan jarak bingkai maksimum antara bingkai kunci. Nilai yang lebih rendah membuat efisiensi kompresi lebih buruk, tetapi meningkatkan waktu pencarian dan dapat meningkatkan kualitas dalam adegan dengan gerakan cepat. 0 menetapkan nilai ini secara otomatis.",
"transcoding_optimal_description": "Video lebih tinggi dari resolusi sasaran atau tidak dalam format yang diterima", "transcoding_optimal_description": "Video lebih tinggi dari resolusi sasaran atau tidak dalam format yang diterima",
@@ -391,6 +394,7 @@
"allow_edits": "Perbolehkan penyuntingan", "allow_edits": "Perbolehkan penyuntingan",
"allow_public_user_to_download": "Perbolehkan pengguna publik untuk mengunduh", "allow_public_user_to_download": "Perbolehkan pengguna publik untuk mengunduh",
"allow_public_user_to_upload": "Perbolehkan pengguna publik untuk mengunggah", "allow_public_user_to_upload": "Perbolehkan pengguna publik untuk mengunggah",
"alt_text_qr_code": "Gambar kode QR",
"anti_clockwise": "Berlawanan arah jarum jam", "anti_clockwise": "Berlawanan arah jarum jam",
"api_key": "Kunci API", "api_key": "Kunci API",
"api_key_description": "Nilai ini hanya akan ditampilkan sekali. Pastikan untuk menyalin sebelum menutup jendela ini.", "api_key_description": "Nilai ini hanya akan ditampilkan sekali. Pastikan untuk menyalin sebelum menutup jendela ini.",
@@ -481,6 +485,7 @@
"comments_are_disabled": "Komentar dinonaktifkan", "comments_are_disabled": "Komentar dinonaktifkan",
"confirm": "Konfirmasi", "confirm": "Konfirmasi",
"confirm_admin_password": "Konfirmasi Kata Sandi Admin", "confirm_admin_password": "Konfirmasi Kata Sandi Admin",
"confirm_delete_face": "Apakah Anda yakin ingin menghapus wajah {name} dari aset?",
"confirm_delete_shared_link": "Apakah Anda yakin ingin menghapus tautan terbagi ini?", "confirm_delete_shared_link": "Apakah Anda yakin ingin menghapus tautan terbagi ini?",
"confirm_keep_this_delete_others": "Semua aset lain di dalam stack akan dihapus kecuali aset ini. Anda yakin untuk melanjutkan?", "confirm_keep_this_delete_others": "Semua aset lain di dalam stack akan dihapus kecuali aset ini. Anda yakin untuk melanjutkan?",
"confirm_password": "Konfirmasi kata sandi", "confirm_password": "Konfirmasi kata sandi",
@@ -533,6 +538,7 @@
"delete_album": "Hapus album", "delete_album": "Hapus album",
"delete_api_key_prompt": "Apakah Anda yakin ingin menghapus kunci API ini?", "delete_api_key_prompt": "Apakah Anda yakin ingin menghapus kunci API ini?",
"delete_duplicates_confirmation": "Apakah Anda yakin ingin menghapus duplikat ini secara permanen?", "delete_duplicates_confirmation": "Apakah Anda yakin ingin menghapus duplikat ini secara permanen?",
"delete_face": "Hapus wajah",
"delete_key": "Hapus kunci", "delete_key": "Hapus kunci",
"delete_library": "Hapus Pustaka", "delete_library": "Hapus Pustaka",
"delete_link": "Hapus tautan", "delete_link": "Hapus tautan",
@@ -600,6 +606,7 @@
"enabled": "Diaktifkan", "enabled": "Diaktifkan",
"end_date": "Tanggal akhir", "end_date": "Tanggal akhir",
"error": "Eror", "error": "Eror",
"error_delete_face": "Terjadi kesalahan menghapus wajah dari aset",
"error_loading_image": "Terjadi eror memuat gambar", "error_loading_image": "Terjadi eror memuat gambar",
"error_title": "Eror - Ada yang salah", "error_title": "Eror - Ada yang salah",
"errors": { "errors": {
@@ -884,6 +891,7 @@
"month": "Bulan", "month": "Bulan",
"more": "Lainnya", "more": "Lainnya",
"moved_to_trash": "Dipindahkan ke sampah", "moved_to_trash": "Dipindahkan ke sampah",
"mute_memories": "Nonaktifkan Kenangan",
"my_albums": "Album saya", "my_albums": "Album saya",
"name": "Nama", "name": "Nama",
"name_or_nickname": "Nama atau nama panggilan", "name_or_nickname": "Nama atau nama panggilan",
@@ -979,6 +987,7 @@
"permanently_deleted_asset": "Aset dihapus secara permanen", "permanently_deleted_asset": "Aset dihapus secara permanen",
"permanently_deleted_assets_count": "{count, plural, one {# aset} other {# aset}} dihapus secara permanen", "permanently_deleted_assets_count": "{count, plural, one {# aset} other {# aset}} dihapus secara permanen",
"person": "Orang", "person": "Orang",
"person_birthdate": "Lahir pada {date}",
"person_hidden": "{name}{hidden, select, true { (tersembunyi)} other {}}", "person_hidden": "{name}{hidden, select, true { (tersembunyi)} other {}}",
"photo_shared_all_users": "Sepertinya Anda membagikan foto Anda dengan semua pengguna atau Anda tidak memiliki pengguna siapa pun untuk dibagikan.", "photo_shared_all_users": "Sepertinya Anda membagikan foto Anda dengan semua pengguna atau Anda tidak memiliki pengguna siapa pun untuk dibagikan.",
"photos": "Foto", "photos": "Foto",
@@ -1070,12 +1079,16 @@
"remove_from_album": "Hapus dari album", "remove_from_album": "Hapus dari album",
"remove_from_favorites": "Hapus dari favorit", "remove_from_favorites": "Hapus dari favorit",
"remove_from_shared_link": "Hapus dari tautan terbagi", "remove_from_shared_link": "Hapus dari tautan terbagi",
"remove_memory": "Hapus kenangan",
"remove_photo_from_memory": "Hapus foto dari kenangan ini",
"remove_url": "Hapus URL", "remove_url": "Hapus URL",
"remove_user": "Keluarkan pengguna", "remove_user": "Keluarkan pengguna",
"removed_api_key": "Kunci API Dihapus: {name}", "removed_api_key": "Kunci API Dihapus: {name}",
"removed_from_archive": "Dihapus dari arsip", "removed_from_archive": "Dihapus dari arsip",
"removed_from_favorites": "Dihapus dari favorit", "removed_from_favorites": "Dihapus dari favorit",
"removed_from_favorites_count": "{count, plural, other {Menghapus #}} dari favorit", "removed_from_favorites_count": "{count, plural, other {Menghapus #}} dari favorit",
"removed_memory": "Memori dihapus",
"removed_photo_from_memory": "Foto dihapus dari memori",
"removed_tagged_assets": "Hapus tag dari {count, plural, one {# aset} other {# aset}}", "removed_tagged_assets": "Hapus tag dari {count, plural, one {# aset} other {# aset}}",
"rename": "Ubah nama", "rename": "Ubah nama",
"repair": "Perbaiki", "repair": "Perbaiki",
@@ -1084,6 +1097,7 @@
"repository": "Repositori", "repository": "Repositori",
"require_password": "Memerlukan kata sandi", "require_password": "Memerlukan kata sandi",
"require_user_to_change_password_on_first_login": "Memerlukan pengguna untuk mengubah kata sandi pada log masuk pertama", "require_user_to_change_password_on_first_login": "Memerlukan pengguna untuk mengubah kata sandi pada log masuk pertama",
"rescan": "Pindai ulang",
"reset": "Atur ulang", "reset": "Atur ulang",
"reset_password": "Atur ulang kata sandi", "reset_password": "Atur ulang kata sandi",
"reset_people_visibility": "Atur ulang keterlihatan orang", "reset_people_visibility": "Atur ulang keterlihatan orang",
@@ -1127,6 +1141,7 @@
"search_options": "Pilihan pencarian", "search_options": "Pilihan pencarian",
"search_people": "Cari orang", "search_people": "Cari orang",
"search_places": "Cari tempat", "search_places": "Cari tempat",
"search_rating": "Cari berdasarkan penilaian...",
"search_settings": "Pengaturan pencarian", "search_settings": "Pengaturan pencarian",
"search_state": "Cari negara bagian...", "search_state": "Cari negara bagian...",
"search_tags": "Cari tag...", "search_tags": "Cari tag...",
@@ -1136,6 +1151,7 @@
"searching_locales": "Mencari lokal...", "searching_locales": "Mencari lokal...",
"second": "Detik", "second": "Detik",
"see_all_people": "Lihat semua orang", "see_all_people": "Lihat semua orang",
"select": "Pilih",
"select_album_cover": "Pilih kover album", "select_album_cover": "Pilih kover album",
"select_all": "Pilih semua", "select_all": "Pilih semua",
"select_all_duplicates": "Pilih semua duplikat", "select_all_duplicates": "Pilih semua duplikat",
@@ -1250,6 +1266,7 @@
"tag_created": "Tag yang di buat: {tag}", "tag_created": "Tag yang di buat: {tag}",
"tag_feature_description": "Menjelajahi foto dan video yang dikelompokkan berdasarkan topik tag logis", "tag_feature_description": "Menjelajahi foto dan video yang dikelompokkan berdasarkan topik tag logis",
"tag_not_found_question": "Tidak dapat menemukan tag? <link>Buat tag baru.</link>", "tag_not_found_question": "Tidak dapat menemukan tag? <link>Buat tag baru.</link>",
"tag_people": "Tandai Orang",
"tag_updated": "Tag yang diperbarui: {tag}", "tag_updated": "Tag yang diperbarui: {tag}",
"tagged_assets": "Ditandai {count, plural, one {# aset} other {# aset}}", "tagged_assets": "Ditandai {count, plural, one {# aset} other {# aset}}",
"tags": "Tag", "tags": "Tag",
@@ -1290,6 +1307,7 @@
"unlink_motion_video": "Membatalkan tautan video gerak", "unlink_motion_video": "Membatalkan tautan video gerak",
"unlink_oauth": "Putuskan OAuth", "unlink_oauth": "Putuskan OAuth",
"unlinked_oauth_account": "Akun OAuth terputus", "unlinked_oauth_account": "Akun OAuth terputus",
"unmute_memories": "Aktifkan Kenangan",
"unnamed_album": "Album Tanpa Nama", "unnamed_album": "Album Tanpa Nama",
"unnamed_album_delete_confirmation": "Apakah kamu yakin akan menghapus album ini?", "unnamed_album_delete_confirmation": "Apakah kamu yakin akan menghapus album ini?",
"unnamed_share": "Pembagian Tanpa Nama", "unnamed_share": "Pembagian Tanpa Nama",
@@ -1343,6 +1361,7 @@
"view_all": "Tampilkan Semua", "view_all": "Tampilkan Semua",
"view_all_users": "Tampilkan semua pengguna", "view_all_users": "Tampilkan semua pengguna",
"view_in_timeline": "Lihat di timeline", "view_in_timeline": "Lihat di timeline",
"view_link": "Tampilkan tautan",
"view_links": "Tampilkan tautan", "view_links": "Tampilkan tautan",
"view_name": "Tampilkan", "view_name": "Tampilkan",
"view_next_asset": "Tampilkan aset berikutnya", "view_next_asset": "Tampilkan aset berikutnya",

View File

@@ -41,6 +41,7 @@
"backup_settings": "Impostazioni di backup", "backup_settings": "Impostazioni di backup",
"backup_settings_description": "Gestisci le impostazioni dei backup", "backup_settings_description": "Gestisci le impostazioni dei backup",
"check_all": "Controlla Tutto", "check_all": "Controlla Tutto",
"cleanup": "Pulisci",
"cleared_jobs": "Cancellati i processi per: {job}", "cleared_jobs": "Cancellati i processi per: {job}",
"config_set_by_file": "La configurazione è attualmente impostata da un file di configurazione", "config_set_by_file": "La configurazione è attualmente impostata da un file di configurazione",
"confirm_delete_library": "Sei sicuro di voler cancellare la libreria {library}?", "confirm_delete_library": "Sei sicuro di voler cancellare la libreria {library}?",
@@ -65,6 +66,11 @@
"forcing_refresh_library_files": "Forzando l'aggiornamento completo della libreria", "forcing_refresh_library_files": "Forzando l'aggiornamento completo della libreria",
"image_format": "Formato", "image_format": "Formato",
"image_format_description": "WebP produce file più piccoli rispetto a JPEG, ma l'encoding è più lento.", "image_format_description": "WebP produce file più piccoli rispetto a JPEG, ma l'encoding è più lento.",
"image_fullsize_description": "Le immagini con dimensioni reali senza metadati sono utilizzate durante lo zoom",
"image_fullsize_enabled": "Abilita la generazione delle immagini con dimensioni reali",
"image_fullsize_enabled_description": "Genera immagini con dimensioni reali per i formati non web-friendly. Quando \"Preferisci l'anteprima integrata\" è abilitata, le anteprime integrate saranno usate senza conversione. Non riguarda le immagini web-friendly come il JPEG.",
"image_fullsize_quality_description": "Qualità delle immagini con dimensioni reali da 1 a 100. Più è alto il valore più la qualità sarà alta come anche la grandezza dei file.",
"image_fullsize_title": "Impostazioni Immagini con dimensioni reali",
"image_prefer_embedded_preview": "Preferisci l'anteprima integrata", "image_prefer_embedded_preview": "Preferisci l'anteprima integrata",
"image_prefer_embedded_preview_setting_description": "Usa l'anteprima integrata nelle foto RAW come input per l'elaborazione delle immagini, se disponibile. Questo permette un miglioramento dei colori per alcune immagini, ma la qualità delle anteprime dipende dalla macchina fotografica. Inoltre le immagini potrebbero presentare artefatti di compressione.", "image_prefer_embedded_preview_setting_description": "Usa l'anteprima integrata nelle foto RAW come input per l'elaborazione delle immagini, se disponibile. Questo permette un miglioramento dei colori per alcune immagini, ma la qualità delle anteprime dipende dalla macchina fotografica. Inoltre le immagini potrebbero presentare artefatti di compressione.",
"image_prefer_wide_gamut": "Preferisci gamut più ampio", "image_prefer_wide_gamut": "Preferisci gamut più ampio",
@@ -96,7 +102,7 @@
"library_scanning_enable_description": "Attiva la scansione periodica della libreria", "library_scanning_enable_description": "Attiva la scansione periodica della libreria",
"library_settings": "Libreria Esterna", "library_settings": "Libreria Esterna",
"library_settings_description": "Gestisci le impostazioni della libreria esterna", "library_settings_description": "Gestisci le impostazioni della libreria esterna",
"library_tasks_description": "Esegui processi della libreria", "library_tasks_description": "Scansiona le librerie esterne per i nuovi aggiornamenti",
"library_watching_enable_description": "Osserva le librerie esterne per cambiamenti", "library_watching_enable_description": "Osserva le librerie esterne per cambiamenti",
"library_watching_settings": "Osserva librerie (SPERIMENTALE)", "library_watching_settings": "Osserva librerie (SPERIMENTALE)",
"library_watching_settings_description": "Osserva automaticamente i cambiamenti dei file", "library_watching_settings_description": "Osserva automaticamente i cambiamenti dei file",
@@ -131,7 +137,7 @@
"machine_learning_smart_search_description": "Cerca immagini semanticamente utilizzato gli embedding CLIP", "machine_learning_smart_search_description": "Cerca immagini semanticamente utilizzato gli embedding CLIP",
"machine_learning_smart_search_enabled": "Attiva ricerca intelligente", "machine_learning_smart_search_enabled": "Attiva ricerca intelligente",
"machine_learning_smart_search_enabled_description": "Se disabilitato le immagini non saranno codificate per la ricerca intelligente.", "machine_learning_smart_search_enabled_description": "Se disabilitato le immagini non saranno codificate per la ricerca intelligente.",
"machine_learning_url_description": "URL del server machine learning. Se sono stati forniti più di un URL, verrà testato un server alla volta finché uno non risponderà, in ordine dal primo all'ultimo.", "machine_learning_url_description": "URL del server machine learning. Se sono stati forniti più di un URL, verrà testato un server alla volta finché uno non risponderà, in ordine dal primo all'ultimo. I server che non rispondono saranno temporaneamente ignorati finché non torneranno online.",
"manage_concurrency": "Gestisci Concorrenza", "manage_concurrency": "Gestisci Concorrenza",
"manage_log_settings": "Gestisci le impostazioni dei log", "manage_log_settings": "Gestisci le impostazioni dei log",
"map_dark_style": "Tema scuro", "map_dark_style": "Tema scuro",
@@ -147,6 +153,8 @@
"map_settings": "Impostazioni Mappa e Posizione", "map_settings": "Impostazioni Mappa e Posizione",
"map_settings_description": "Gestisci impostazioni mappa", "map_settings_description": "Gestisci impostazioni mappa",
"map_style_description": "URL per un tema della mappa style.json", "map_style_description": "URL per un tema della mappa style.json",
"memory_cleanup_job": "pulizia memoria",
"memory_generate_job": "Generazione della memoria",
"metadata_extraction_job": "Estrazione Metadata", "metadata_extraction_job": "Estrazione Metadata",
"metadata_extraction_job_description": "Estrai informazioni dai metadati di ciascun asset, ad esempio coordinate GPS, volti e risoluzione", "metadata_extraction_job_description": "Estrai informazioni dai metadati di ciascun asset, ad esempio coordinate GPS, volti e risoluzione",
"metadata_faces_import_setting": "Abilita l'importazione dei volti", "metadata_faces_import_setting": "Abilita l'importazione dei volti",
@@ -299,7 +307,7 @@
"transcoding_max_b_frames": "B-frames Massimi", "transcoding_max_b_frames": "B-frames Massimi",
"transcoding_max_b_frames_description": "Valori più alti migliorano l'efficienza di compressione, ma rallentano l'encoding. Potrebbero non essere compatibili con l'accelerazione hardware su dispositivi più vecchi. 0 disabilita i B-frames, mentre -1 imposta questo valore automaticamente.", "transcoding_max_b_frames_description": "Valori più alti migliorano l'efficienza di compressione, ma rallentano l'encoding. Potrebbero non essere compatibili con l'accelerazione hardware su dispositivi più vecchi. 0 disabilita i B-frames, mentre -1 imposta questo valore automaticamente.",
"transcoding_max_bitrate": "Bitrate massimo", "transcoding_max_bitrate": "Bitrate massimo",
"transcoding_max_bitrate_description": "Impostare un bitrate massimo può rendere le dimensioni dei file più prevedibili a un costo minore per la qualità. A 720p, i valori tipici sono 2600k per VP9 o HEVC, o 4500k per H.264. Disabilitato se impostato su 0.", "transcoding_max_bitrate_description": "Impostare un bitrate massimo può rendere le dimensioni dei file più prevedibili a un costo minore per la qualità. A 720p, i valori tipici sono 2600 kbit/s per VP9 o HEVC, o 4500 kbit/s per H.264. Disabilitato se impostato su 0.",
"transcoding_max_keyframe_interval": "Intervallo massimo dei keyframe", "transcoding_max_keyframe_interval": "Intervallo massimo dei keyframe",
"transcoding_max_keyframe_interval_description": "Imposta la distanza massima tra i keyframe. Valori più bassi peggiorano l'efficienza di compressione, però migliorano i tempi di ricerca e possono migliorare la qualità nelle scene con movimenti rapidi. 0 imposta questo valore automaticamente.", "transcoding_max_keyframe_interval_description": "Imposta la distanza massima tra i keyframe. Valori più bassi peggiorano l'efficienza di compressione, però migliorano i tempi di ricerca e possono migliorare la qualità nelle scene con movimenti rapidi. 0 imposta questo valore automaticamente.",
"transcoding_optimal_description": "Video con risoluzione più alta rispetto alla risoluzione desiderata o in formato non accettato", "transcoding_optimal_description": "Video con risoluzione più alta rispetto alla risoluzione desiderata o in formato non accettato",
@@ -391,6 +399,7 @@
"allow_edits": "Permetti Modifiche", "allow_edits": "Permetti Modifiche",
"allow_public_user_to_download": "Permetti agli utenti pubblici di scaricare", "allow_public_user_to_download": "Permetti agli utenti pubblici di scaricare",
"allow_public_user_to_upload": "Permetti agli utenti pubblici di caricare", "allow_public_user_to_upload": "Permetti agli utenti pubblici di caricare",
"alt_text_qr_code": "Immagine QR",
"anti_clockwise": "Senso anti-orario", "anti_clockwise": "Senso anti-orario",
"api_key": "Chiave API", "api_key": "Chiave API",
"api_key_description": "Il valore verrà mostrato solo una volta. Assicurati di copiarlo prima di chiudere la finestra.", "api_key_description": "Il valore verrà mostrato solo una volta. Assicurati di copiarlo prima di chiudere la finestra.",
@@ -406,7 +415,7 @@
"are_these_the_same_person": "Sono la stessa persona?", "are_these_the_same_person": "Sono la stessa persona?",
"are_you_sure_to_do_this": "Sei sicuro di voler procedere?", "are_you_sure_to_do_this": "Sei sicuro di voler procedere?",
"asset_added_to_album": "Aggiunto all'album", "asset_added_to_album": "Aggiunto all'album",
"asset_adding_to_album": "In aggiunta all'album...", "asset_adding_to_album": "Aggiungendo all'album",
"asset_description_updated": "La descrizione del media è stata aggiornata", "asset_description_updated": "La descrizione del media è stata aggiornata",
"asset_filename_is_offline": "Il media {filename} è offline", "asset_filename_is_offline": "Il media {filename} è offline",
"asset_has_unassigned_faces": "Il media ha dei volti non categorizzati", "asset_has_unassigned_faces": "Il media ha dei volti non categorizzati",
@@ -480,11 +489,12 @@
"comments_and_likes": "Commenti & mi piace", "comments_and_likes": "Commenti & mi piace",
"comments_are_disabled": "I commenti sono disabilitati", "comments_are_disabled": "I commenti sono disabilitati",
"confirm": "Conferma", "confirm": "Conferma",
"confirm_admin_password": "Conferma password amministratore", "confirm_admin_password": "Conferma password dell'amministratore",
"confirm_delete_face": "Sei sicuro di voler cancellare il volto di {name} dall'asset?",
"confirm_delete_shared_link": "Sei sicuro di voler eliminare questo link condiviso?", "confirm_delete_shared_link": "Sei sicuro di voler eliminare questo link condiviso?",
"confirm_keep_this_delete_others": "Tutti gli altri asset nello stack saranno eliminati, eccetto questo asset. Vuoi continuare?", "confirm_keep_this_delete_others": "Tutti gli altri asset nello stack saranno eliminati, eccetto questo asset. Sei sicuro di voler continuare?",
"confirm_password": "Conferma password", "confirm_password": "Conferma password",
"contain": "Adatta", "contain": "Adatta alla finestra",
"context": "Contesto", "context": "Contesto",
"continue": "Continua", "continue": "Continua",
"copied_image_to_clipboard": "Immagine copiata negli appunti.", "copied_image_to_clipboard": "Immagine copiata negli appunti.",
@@ -497,8 +507,8 @@
"copy_password": "Copia password", "copy_password": "Copia password",
"copy_to_clipboard": "Copia negli appunti", "copy_to_clipboard": "Copia negli appunti",
"country": "Nazione", "country": "Nazione",
"cover": "Riempi", "cover": "Riempi la finestra",
"covers": "Miniature", "covers": "Copre",
"create": "Crea", "create": "Crea",
"create_album": "Crea album", "create_album": "Crea album",
"create_library": "Crea libreria", "create_library": "Crea libreria",
@@ -509,21 +519,21 @@
"create_new_person_hint": "Assegna gli asset selezionati a una nuova persona", "create_new_person_hint": "Assegna gli asset selezionati a una nuova persona",
"create_new_user": "Crea nuovo utente", "create_new_user": "Crea nuovo utente",
"create_tag": "Crea tag", "create_tag": "Crea tag",
"create_tag_description": "Crea un nuova tag. Per i tag annidati, si prega di inserire il percorso completo del tag tra cui slash in avanti.", "create_tag_description": "Crea un nuovo tag. Per i tag annidati, si prega di inserire il percorso completo del tag tra cui barre oblique.",
"create_user": "Crea utente", "create_user": "Crea utente",
"created": "Creato", "created": "Creato",
"current_device": "Dispositivo corrente", "current_device": "Dispositivo attuale",
"custom_locale": "Localizzazione personalizzata", "custom_locale": "Localizzazione personalizzata",
"custom_locale_description": "Formatta data e numeri in base alla lingua e al paese", "custom_locale_description": "Formatta data e numeri in base alla lingua e al paese",
"dark": "Scuro", "dark": "Scuro",
"date_after": "Data dopo", "date_after": "Data dopo",
"date_and_time": "Data e tempo", "date_and_time": "Data e ora",
"date_before": "Data prima", "date_before": "Data prima",
"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",
"deduplicate_all": "De-duplica Tutti", "deduplicate_all": "Duplica Tutti",
"deduplication_criteria_1": "Dimensione immagine in byte", "deduplication_criteria_1": "Dimensione immagine in bytes",
"deduplication_criteria_2": "Numero di dati EXIF", "deduplication_criteria_2": "Numero di dati EXIF",
"deduplication_info": "Informazioni di deduplicazione", "deduplication_info": "Informazioni di deduplicazione",
"deduplication_info_description": "Per preselezionare automaticamente gli asset e rimuovere i duplicati in massa, verifichiamo:", "deduplication_info_description": "Per preselezionare automaticamente gli asset e rimuovere i duplicati in massa, verifichiamo:",
@@ -533,6 +543,7 @@
"delete_album": "Elimina album", "delete_album": "Elimina album",
"delete_api_key_prompt": "Sei sicuro di voler eliminare questa chiave API?", "delete_api_key_prompt": "Sei sicuro di voler eliminare questa chiave API?",
"delete_duplicates_confirmation": "Sei sicuro di voler eliminare questi duplicati per sempre?", "delete_duplicates_confirmation": "Sei sicuro di voler eliminare questi duplicati per sempre?",
"delete_face": "cancella faccia",
"delete_key": "Elimina chiave", "delete_key": "Elimina chiave",
"delete_library": "Elimina libreria", "delete_library": "Elimina libreria",
"delete_link": "Elimina link", "delete_link": "Elimina link",
@@ -600,6 +611,7 @@
"enabled": "Abilitato", "enabled": "Abilitato",
"end_date": "Data Fine", "end_date": "Data Fine",
"error": "Errore", "error": "Errore",
"error_delete_face": "Errore nel cancellare la faccia dalla foto",
"error_loading_image": "Errore nel caricamento dell'immagine", "error_loading_image": "Errore nel caricamento dell'immagine",
"error_title": "Errore - Qualcosa è andato storto", "error_title": "Errore - Qualcosa è andato storto",
"errors": { "errors": {
@@ -769,7 +781,7 @@
"group_country": "Raggruppa per paese", "group_country": "Raggruppa per paese",
"group_no": "Nessun raggruppamento", "group_no": "Nessun raggruppamento",
"group_owner": "Raggruppa in base al proprietario", "group_owner": "Raggruppa in base al proprietario",
"group_places_by": "Raggruppa posti per", "group_places_by": "Raggruppa posti per...",
"group_year": "Raggruppa per anno", "group_year": "Raggruppa per anno",
"has_quota": "Ha limite", "has_quota": "Ha limite",
"hi_user": "Ciao {name} ({email})", "hi_user": "Ciao {name} ({email})",
@@ -852,6 +864,7 @@
"loop_videos": "Riproduci video in loop", "loop_videos": "Riproduci video in loop",
"loop_videos_description": "Abilita per riprodurre automaticamente un video in loop nella vista dettagli.", "loop_videos_description": "Abilita per riprodurre automaticamente un video in loop nella vista dettagli.",
"main_branch_warning": "Stai usando una versione di sviluppo. Consigliamo vivamente di utilizzare una versione di rilascio!", "main_branch_warning": "Stai usando una versione di sviluppo. Consigliamo vivamente di utilizzare una versione di rilascio!",
"main_menu": "Menu Principale",
"make": "Produttore", "make": "Produttore",
"manage_shared_links": "Gestisci link condivisi", "manage_shared_links": "Gestisci link condivisi",
"manage_sharing_with_partners": "Gestisci la condivisione con i compagni", "manage_sharing_with_partners": "Gestisci la condivisione con i compagni",
@@ -879,11 +892,12 @@
"merged_people_count": "{count, plural, one {Unita # persona} other {Unite # persone}}", "merged_people_count": "{count, plural, one {Unita # persona} other {Unite # persone}}",
"minimize": "Minimizza", "minimize": "Minimizza",
"minute": "Minuto", "minute": "Minuto",
"missing": "Mancante", "missing": "Mancanti",
"model": "Modello", "model": "Modello",
"month": "Mese", "month": "Mese",
"more": "Di più", "more": "Di più",
"moved_to_trash": "Spostato nel cestino", "moved_to_trash": "Spostato nel cestino",
"mute_memories": "Silenzia ricordi",
"my_albums": "I miei album", "my_albums": "I miei album",
"name": "Nome", "name": "Nome",
"name_or_nickname": "Nome o soprannome", "name_or_nickname": "Nome o soprannome",
@@ -979,6 +993,7 @@
"permanently_deleted_asset": "Asset eliminato definitivamente", "permanently_deleted_asset": "Asset eliminato definitivamente",
"permanently_deleted_assets_count": "Cancellati {count, plural, one {# asset} other {# assets}} definitivamente", "permanently_deleted_assets_count": "Cancellati {count, plural, one {# asset} other {# assets}} definitivamente",
"person": "Persona", "person": "Persona",
"person_birthdate": "Nato il {date}",
"person_hidden": "{name}{hidden, select, true { (nascosto)} other {}}", "person_hidden": "{name}{hidden, select, true { (nascosto)} other {}}",
"photo_shared_all_users": "Sembra che tu abbia condiviso le foto con tutti gli utenti, oppure che non ci siano utenti con i quali condividerle.", "photo_shared_all_users": "Sembra che tu abbia condiviso le foto con tutti gli utenti, oppure che non ci siano utenti con i quali condividerle.",
"photos": "Foto", "photos": "Foto",
@@ -988,8 +1003,8 @@
"pick_a_location": "Scegli una posizione", "pick_a_location": "Scegli una posizione",
"place": "Posizione", "place": "Posizione",
"places": "Luoghi", "places": "Luoghi",
"places_count": "{count, plural, one {{count, number} Luogo} altro {{count, number} Luoghi}}", "places_count": "{count, plural, one {{count, number} Luogo} other {{count, number} Places}}",
"play": "Avvia", "play": "Riproduci",
"play_memories": "Avvia ricordi", "play_memories": "Avvia ricordi",
"play_motion_photo": "Avvia Foto in movimento", "play_motion_photo": "Avvia Foto in movimento",
"play_or_pause_video": "Avvia o metti in pausa il video", "play_or_pause_video": "Avvia o metti in pausa il video",
@@ -1070,12 +1085,16 @@
"remove_from_album": "Rimuovere dall'album", "remove_from_album": "Rimuovere dall'album",
"remove_from_favorites": "Rimuovi dai preferiti", "remove_from_favorites": "Rimuovi dai preferiti",
"remove_from_shared_link": "Rimuovi dal link condiviso", "remove_from_shared_link": "Rimuovi dal link condiviso",
"remove_memory": "Rimuovi ricordo",
"remove_photo_from_memory": "Rimuovi foto da questo ricordo",
"remove_url": "Rimuovi URL", "remove_url": "Rimuovi URL",
"remove_user": "Rimuovi utente", "remove_user": "Rimuovi utente",
"removed_api_key": "Rimossa chiave API: {name}", "removed_api_key": "Rimossa chiave API: {name}",
"removed_from_archive": "Rimosso dall'archivio", "removed_from_archive": "Rimosso dall'archivio",
"removed_from_favorites": "Rimosso dai preferiti", "removed_from_favorites": "Rimosso dai preferiti",
"removed_from_favorites_count": "{count, plural, one {Rimosso } other {Rimossi #}} dai preferiti", "removed_from_favorites_count": "{count, plural, one {Rimosso } other {Rimossi #}} dai preferiti",
"removed_memory": "Memoria rimossa",
"removed_photo_from_memory": "Foto rimossa dalla memoria",
"removed_tagged_assets": "Rimossa etichetta {count, plural, one {# dall'asset} other {# dagli asset}}", "removed_tagged_assets": "Rimossa etichetta {count, plural, one {# dall'asset} other {# dagli asset}}",
"rename": "Rinomina", "rename": "Rinomina",
"repair": "Ripara", "repair": "Ripara",
@@ -1084,6 +1103,7 @@
"repository": "Repository", "repository": "Repository",
"require_password": "Richiedi password", "require_password": "Richiedi password",
"require_user_to_change_password_on_first_login": "Richiedi all'utente di cambiare password al primo accesso", "require_user_to_change_password_on_first_login": "Richiedi all'utente di cambiare password al primo accesso",
"rescan": "Scansiona nuovamente",
"reset": "Ripristina", "reset": "Ripristina",
"reset_password": "Ripristina password", "reset_password": "Ripristina password",
"reset_people_visibility": "Ripristina visibilità persone", "reset_people_visibility": "Ripristina visibilità persone",
@@ -1127,6 +1147,7 @@
"search_options": "Opzioni Ricerca", "search_options": "Opzioni Ricerca",
"search_people": "Cerca persone", "search_people": "Cerca persone",
"search_places": "Cerca luoghi", "search_places": "Cerca luoghi",
"search_rating": "Cerca per valutazione...",
"search_settings": "Cerca Impostazioni", "search_settings": "Cerca Impostazioni",
"search_state": "Cerca stato...", "search_state": "Cerca stato...",
"search_tags": "Cerca tag...", "search_tags": "Cerca tag...",
@@ -1136,6 +1157,7 @@
"searching_locales": "Cerca localizzazioni...", "searching_locales": "Cerca localizzazioni...",
"second": "Secondo", "second": "Secondo",
"see_all_people": "Vedi tutte le persone", "see_all_people": "Vedi tutte le persone",
"select": "Seleziona",
"select_album_cover": "Seleziona copertina album", "select_album_cover": "Seleziona copertina album",
"select_all": "Seleziona tutto", "select_all": "Seleziona tutto",
"select_all_duplicates": "Seleziona tutti i duplicati", "select_all_duplicates": "Seleziona tutti i duplicati",
@@ -1226,7 +1248,7 @@
"stack_selected_photos": "Impila foto selezionate", "stack_selected_photos": "Impila foto selezionate",
"stacked_assets_count": "{count, plural, one {Raggruppato # asset} other {Raggruppati # asset}}", "stacked_assets_count": "{count, plural, one {Raggruppato # asset} other {Raggruppati # asset}}",
"stacktrace": "Traccia dell'errore", "stacktrace": "Traccia dell'errore",
"start": "Inizio", "start": "Avvia",
"start_date": "Data di inizio", "start_date": "Data di inizio",
"state": "Provincia", "state": "Provincia",
"status": "Stato", "status": "Stato",
@@ -1250,6 +1272,7 @@
"tag_created": "Tag creata: {tag}", "tag_created": "Tag creata: {tag}",
"tag_feature_description": "Navigazione foto e video raggruppati per argomenti tag logici", "tag_feature_description": "Navigazione foto e video raggruppati per argomenti tag logici",
"tag_not_found_question": "Non riesci a trovare un tag? <link>Creane uno nuovo.</link>", "tag_not_found_question": "Non riesci a trovare un tag? <link>Creane uno nuovo.</link>",
"tag_people": "Tagga persone",
"tag_updated": "Tag {tag} aggiornata", "tag_updated": "Tag {tag} aggiornata",
"tagged_assets": "{count, plural, one {# asset etichettato} other {# asset etichettati}}", "tagged_assets": "{count, plural, one {# asset etichettato} other {# asset etichettati}}",
"tags": "Tag", "tags": "Tag",
@@ -1290,6 +1313,7 @@
"unlink_motion_video": "Scollega video in movimento", "unlink_motion_video": "Scollega video in movimento",
"unlink_oauth": "Scollega OAuth", "unlink_oauth": "Scollega OAuth",
"unlinked_oauth_account": "Scollega account OAuth", "unlinked_oauth_account": "Scollega account OAuth",
"unmute_memories": "Disattiva l'audio dei ricordi",
"unnamed_album": "Album senza nome", "unnamed_album": "Album senza nome",
"unnamed_album_delete_confirmation": "Sei sicuro di voler eliminare questo album?", "unnamed_album_delete_confirmation": "Sei sicuro di voler eliminare questo album?",
"unnamed_share": "Condivisione senza nome", "unnamed_share": "Condivisione senza nome",
@@ -1330,7 +1354,7 @@
"variables": "Variabili", "variables": "Variabili",
"version": "Versione", "version": "Versione",
"version_announcement_closing": "Il tuo amico, Alex", "version_announcement_closing": "Il tuo amico, Alex",
"version_announcement_message": "Ehilà! È stata rilasciata una nuova versione di Immich. Leggi le <link>note di rilascio</link> e assicurati che i tuoi file <code>docker-compose.yml</code>/<code>.env</code> siano aggiornati per evitare problemi e incongruenze, soprattutto se utilizzi WatchTower o altri strumenti per aggiornare Immich in automatico.", "version_announcement_message": "Ehilà! È stata rilasciata una nuova versione di Immich. Leggi le <link>release notes</link> e assicurati che i tuoi file di configurazione siano aggiornati per evitare problemi e incongruenze, soprattutto se utilizzi WatchTower o altri strumenti per aggiornare Immich in automatico.",
"version_history": "Storico delle Versioni", "version_history": "Storico delle Versioni",
"version_history_item": "Versione installata {version} il {date}", "version_history_item": "Versione installata {version} il {date}",
"video": "Video", "video": "Video",
@@ -1343,6 +1367,7 @@
"view_all": "Vedi tutto", "view_all": "Vedi tutto",
"view_all_users": "Visualizza tutti gli utenti", "view_all_users": "Visualizza tutti gli utenti",
"view_in_timeline": "Visualizza in timeline", "view_in_timeline": "Visualizza in timeline",
"view_link": "Visualizza link",
"view_links": "Visualizza i link", "view_links": "Visualizza i link",
"view_name": "Visualizza", "view_name": "Visualizza",
"view_next_asset": "Visualizza risorsa successiva", "view_next_asset": "Visualizza risorsa successiva",

View File

@@ -7,7 +7,7 @@
"actions": "アクション", "actions": "アクション",
"active": "アクティブ", "active": "アクティブ",
"activity": "アクティビティ", "activity": "アクティビティ",
"activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}されました", "activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}になりました",
"add": "追加", "add": "追加",
"add_a_description": "説明を追加", "add_a_description": "説明を追加",
"add_a_location": "場所を追加", "add_a_location": "場所を追加",
@@ -20,20 +20,28 @@
"add_partner": "パートナーを追加", "add_partner": "パートナーを追加",
"add_path": "パスを追加", "add_path": "パスを追加",
"add_photos": "写真を追加", "add_photos": "写真を追加",
"add_to": "追加先...", "add_to": "追加先",
"add_to_album": "アルバムに追加", "add_to_album": "アルバムに追加",
"add_to_shared_album": "共有アルバムに追加", "add_to_shared_album": "共有アルバムに追加",
"add_url": "URLを追加",
"added_to_archive": "アーカイブに追加済", "added_to_archive": "アーカイブに追加済",
"added_to_favorites": "お気に入りに追加済", "added_to_favorites": "お気に入りに追加済",
"added_to_favorites_count": "{count, number} 枚の画像をお気に入りに追加済", "added_to_favorites_count": "{count, number} 枚の画像をお気に入りに追加済",
"admin": { "admin": {
"add_exclusion_pattern_description": "除外パターンを追加します。ワイルドカード「*」「**」「?」を使用できます。すべてのディレクトリで「Raw」と名前が付いたファイルを無視するには、「**/Raw/**」を使用します。また、「.tif」で終わるファイルをすべて無視するには、「**/*.tif」を使用します。さらに、絶対パスを無視するには「/path/to/ignore/**」を使用します。", "add_exclusion_pattern_description": "除外パターンを追加します。ワイルドカード「*」「**」「?」を使用できます。すべてのディレクトリで「Raw」と名前が付いたファイルを無視するには、「**/Raw/**」を使用します。また、「.tif」で終わるファイルをすべて無視するには、「**/*.tif」を使用します。さらに、絶対パスを無視するには「/path/to/ignore/**」を使用します。",
"asset_offline_description": "この外部ライブラリのアセットはディスク上に見つからなくなってゴミ箱に移動されました。ファイルがライブラリの中で移動された場合はタイムラインで新しい対応するアセットを確認してください。このアセットを復元するには以下のファイルパスがImmichからアクセスできるか確認してライブラリをスキャンしてください。",
"authentication_settings": "認証設定", "authentication_settings": "認証設定",
"authentication_settings_description": "認証設定の管理パスワード、OAuth、その他", "authentication_settings_description": "認証設定の管理パスワード、OAuth、その他",
"authentication_settings_disable_all": "本当に全てのログイン方法を無効にしますか? ログインは完全に無効になります。", "authentication_settings_disable_all": "本当に全てのログイン方法を無効にしますか? ログインは完全に無効になります。",
"authentication_settings_reenable": "再び有効にするには、<link>サーバーコマンド</link>を使用してください。", "authentication_settings_reenable": "再び有効にするには、<link>サーバーコマンド</link>を使用してください。",
"background_task_job": "バックグラウンドタスク", "background_task_job": "バックグラウンドタスク",
"backup_database": "データベースのバックアップ",
"backup_database_enable_description": "データベースのバックアップを有効にする",
"backup_keep_last_amount": "過去のバックアップの保持数",
"backup_settings": "バックアップ設定",
"backup_settings_description": "データベースのバックアップ設定の管理",
"check_all": "すべてを選択", "check_all": "すべてを選択",
"cleanup": "クリーンアップ",
"cleared_jobs": "{job}のジョブをクリアしました", "cleared_jobs": "{job}のジョブをクリアしました",
"config_set_by_file": "設定は現在 Config File で設定されている", "config_set_by_file": "設定は現在 Config File で設定されている",
"confirm_delete_library": "本当に {library} を削除しますか?", "confirm_delete_library": "本当に {library} を削除しますか?",
@@ -41,6 +49,10 @@
"confirm_email_below": "確認のため、以下に \"{email}\" と入力してください", "confirm_email_below": "確認のため、以下に \"{email}\" と入力してください",
"confirm_reprocess_all_faces": "本当にすべての顔を再処理しますか? これにより名前が付けられた人物も消去されます。", "confirm_reprocess_all_faces": "本当にすべての顔を再処理しますか? これにより名前が付けられた人物も消去されます。",
"confirm_user_password_reset": "本当に {user} のパスワードをリセットしますか?", "confirm_user_password_reset": "本当に {user} のパスワードをリセットしますか?",
"create_job": "ジョブの作成",
"cron_expression": "Cron式",
"cron_expression_description": "cronのフォーマットを使ってスキャン間隔を設定します。詳しくは<link>Crontab Guru</link>などを参照してください",
"cron_expression_presets": "Cron式のプリセット",
"disable_login": "ログインを無効にする", "disable_login": "ログインを無効にする",
"duplicate_detection_job_description": "機械学習を用いて類似画像の検出を行います。(スマートサーチに依存)", "duplicate_detection_job_description": "機械学習を用いて類似画像の検出を行います。(スマートサーチに依存)",
"exclusion_pattern_description": "除外パターンを使用すると、ライブラリをスキャンする際にファイルやフォルダを無視することができます。RAWファイルなど、インポートしたくないファイルを含むフォルダがある場合に便利です。", "exclusion_pattern_description": "除外パターンを使用すると、ライブラリをスキャンする際にファイルやフォルダを無視することができます。RAWファイルなど、インポートしたくないファイルを含むフォルダがある場合に便利です。",
@@ -52,15 +64,28 @@
"failed_job_command": "ジョブ {job}のコマンド {command}が失敗しました", "failed_job_command": "ジョブ {job}のコマンド {command}が失敗しました",
"force_delete_user_warning": "警告:この操作を行うと、ユーザーとすべてのアセットが直ちに削除されます。これは元に戻せず、ファイルも復元できません。", "force_delete_user_warning": "警告:この操作を行うと、ユーザーとすべてのアセットが直ちに削除されます。これは元に戻せず、ファイルも復元できません。",
"forcing_refresh_library_files": "すべてのライブラリファイルを強制更新", "forcing_refresh_library_files": "すべてのライブラリファイルを強制更新",
"image_format": "フォーマット",
"image_format_description": "WebPはJPEGよりもファイルサイズが小さいですが、エンコードに時間がかかります。", "image_format_description": "WebPはJPEGよりもファイルサイズが小さいですが、エンコードに時間がかかります。",
"image_fullsize_enabled": "原寸大画像生成を有効にする",
"image_fullsize_quality_description": "1から100まで原寸大画像の質です。高いほうがいいがファイルが大きくなります。",
"image_fullsize_title": "原寸大画像設定",
"image_prefer_embedded_preview": "埋め込みプレビューを優先", "image_prefer_embedded_preview": "埋め込みプレビューを優先",
"image_prefer_embedded_preview_setting_description": "RAW写真の埋め込みプレビューが利用可能な場合に画像処理の入力として使用します。これにより、いくつかの画像でより正確な色を得ることができますが、プレビューの品質はカメラによって異なり、画像により多くの圧縮アーティファクトが含まれる場合があります。", "image_prefer_embedded_preview_setting_description": "RAW写真の埋め込みプレビューが利用可能な場合に画像処理の入力として使用します。これにより、いくつかの画像でより正確な色を得ることができますが、プレビューの品質はカメラによって異なり、画像により多くの圧縮アーティファクトが含まれる場合があります。",
"image_prefer_wide_gamut": "広色域に対応させる", "image_prefer_wide_gamut": "広色域に対応させる",
"image_prefer_wide_gamut_setting_description": "サムネイルにはDisplay P3を使用します。これにより、広色域の画像の鮮やかさをよりよく保つことができますが、古いデバイスや古いブラウザバージョンでは画像が異なって見える場合があります。sRGBの画像は、色の変化を避けるためにsRGBのままにします。", "image_prefer_wide_gamut_setting_description": "サムネイルにはDisplay P3を使用します。これにより、広色域の画像の鮮やかさをよりよく保つことができますが、古いデバイスや古いブラウザバージョンでは画像が異なって見える場合があります。sRGBの画像は、色の変化を避けるためにsRGBのままにします。",
"image_preview_description": "単一のアセットを表示する時や機械学習に使われるメタデータを取り除いた中サイズの画像",
"image_preview_quality_description": "プレビューの画質は1〜100で設定できます。値が高いほど品質は良くなりますがファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。低い値を設定すると機械学習の品質に影響を与えるおそれがあります。",
"image_preview_title": "プレビュー設定",
"image_quality": "品質", "image_quality": "品質",
"image_resolution": "解像度",
"image_resolution_description": "解像度を上げるとより精細に保存できますが、エンコードに時間がかかりファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。",
"image_settings": "画像設定", "image_settings": "画像設定",
"image_settings_description": "生成される画像の品質と解像度の設定", "image_settings_description": "生成される画像の品質と解像度の設定",
"image_thumbnail_description": "メインのタイムラインのような写真グループで表示する際に使われるメタデータを取り除いた小さなサムネイル",
"image_thumbnail_quality_description": "サムネイルの画質を1〜100の間で設定できます。値が大きいほど良い品質ですがファイルサイズが大きくなりアプリの応答性が低下します。",
"image_thumbnail_title": "サムネイル設定",
"job_concurrency": "{job} の同時実行数", "job_concurrency": "{job} の同時実行数",
"job_created": "ジョブを作成しました",
"job_not_concurrency_safe": "このジョブは安全に同時実行できません。", "job_not_concurrency_safe": "このジョブは安全に同時実行できません。",
"job_settings": "ジョブ設定", "job_settings": "ジョブ設定",
"job_settings_description": "ジョブの同時実行を管理します", "job_settings_description": "ジョブの同時実行を管理します",
@@ -75,7 +100,7 @@
"library_scanning_enable_description": "ライブラリ定期スキャンの有効化", "library_scanning_enable_description": "ライブラリ定期スキャンの有効化",
"library_settings": "外部ライブラリ", "library_settings": "外部ライブラリ",
"library_settings_description": "外部ライブラリ設定を管理します", "library_settings_description": "外部ライブラリ設定を管理します",
"library_tasks_description": "ライブラリのタスクを実行する", "library_tasks_description": "アセットが追加または変更された外部ライブラリをスキャンする",
"library_watching_enable_description": "外部ライブラリのファイル変更を監視", "library_watching_enable_description": "外部ライブラリのファイル変更を監視",
"library_watching_settings": "ライブラリ監視(実験的)", "library_watching_settings": "ライブラリ監視(実験的)",
"library_watching_settings_description": "変更されたファイルを自動的に監視", "library_watching_settings_description": "変更されたファイルを自動的に監視",
@@ -110,7 +135,7 @@
"machine_learning_smart_search_description": "CLIP埋め込みを使用して画像を意味的に検索します", "machine_learning_smart_search_description": "CLIP埋め込みを使用して画像を意味的に検索します",
"machine_learning_smart_search_enabled": "スマートサーチを有効にします", "machine_learning_smart_search_enabled": "スマートサーチを有効にします",
"machine_learning_smart_search_enabled_description": "無効にすると、画像はスマートサーチ用にエンコードされません。", "machine_learning_smart_search_enabled_description": "無効にすると、画像はスマートサーチ用にエンコードされません。",
"machine_learning_url_description": "機械学習サーバーのURL", "machine_learning_url_description": "機械学習サーバーのURL。複数のURLが設定された場合は1つずつサーバーが正常に応答するまで接続を試みます。応答のないサーバーはオンラインになるまで一時的に無視されます。",
"manage_concurrency": "同時実行数の管理", "manage_concurrency": "同時実行数の管理",
"manage_log_settings": "ログ設定を管理します", "manage_log_settings": "ログ設定を管理します",
"map_dark_style": "ダークモード", "map_dark_style": "ダークモード",
@@ -126,8 +151,14 @@
"map_settings": "地図", "map_settings": "地図",
"map_settings_description": "地図設定", "map_settings_description": "地図設定",
"map_style_description": "マップテーマstyle.jsonの参照先URL", "map_style_description": "マップテーマstyle.jsonの参照先URL",
"memory_cleanup_job": "メモリーのクリーンアップ",
"memory_generate_job": "メモリーの生成",
"metadata_extraction_job": "メタデータの展開", "metadata_extraction_job": "メタデータの展開",
"metadata_extraction_job_description": "GPSや解像度などのメタデータを各アセットから抽出", "metadata_extraction_job_description": "GPSや解像度などのメタデータを各アセットから抽出",
"metadata_faces_import_setting": "顔のインポートを有効にする",
"metadata_faces_import_setting_description": "画像のEXIFデータとサイドカーファイルから顔をインポート",
"metadata_settings": "メタデータ設定",
"metadata_settings_description": "メタデータの設定を管理します",
"migration_job": "マイグレーション", "migration_job": "マイグレーション",
"migration_job_description": "アセットおよび顔のサムネイルを最新のフォルダ構造に移行します", "migration_job_description": "アセットおよび顔のサムネイルを最新のフォルダ構造に移行します",
"no_paths_added": "パスが追加されていません", "no_paths_added": "パスが追加されていません",
@@ -182,6 +213,7 @@
"password_settings": "パスワード ログイン", "password_settings": "パスワード ログイン",
"password_settings_description": "パスワード ログイン設定を管理します", "password_settings_description": "パスワード ログイン設定を管理します",
"paths_validated_successfully": "すべてのパスが正常に検証されました", "paths_validated_successfully": "すべてのパスが正常に検証されました",
"person_cleanup_job": "人物のクリーンアップ",
"quota_size_gib": "割り当て容量 (GiB)", "quota_size_gib": "割り当て容量 (GiB)",
"refreshing_all_libraries": "すべてのライブラリを更新", "refreshing_all_libraries": "すべてのライブラリを更新",
"registration": "管理者登録", "registration": "管理者登録",
@@ -192,9 +224,13 @@
"require_password_change_on_login": "初回ログイン時にパスワード変更を要求する", "require_password_change_on_login": "初回ログイン時にパスワード変更を要求する",
"reset_settings_to_default": "設定をデフォルトにリセットします", "reset_settings_to_default": "設定をデフォルトにリセットします",
"reset_settings_to_recent_saved": "前回の設定値に戻す", "reset_settings_to_recent_saved": "前回の設定値に戻す",
"scanning_library": "ライブラリのスキャン",
"search_jobs": "ジョブを検索…",
"send_welcome_email": "ウェルカム メール を送信します", "send_welcome_email": "ウェルカム メール を送信します",
"server_external_domain_settings": "外部ドメイン", "server_external_domain_settings": "外部ドメイン",
"server_external_domain_settings_description": "公開共有リンク用のドメイン( http(s):// を含める)", "server_external_domain_settings_description": "公開共有リンク用のドメイン( http(s):// を含める)",
"server_public_users": "公開ユーザー",
"server_public_users_description": "共有アルバムにユーザーを追加するとすべてのユーザー (名前とメールアドレス) がリスト化されます。無効にするとユーザーリストは管理者のみ利用可能になります。",
"server_settings": "サーバー設定", "server_settings": "サーバー設定",
"server_settings_description": "サーバー設定を管理します", "server_settings_description": "サーバー設定を管理します",
"server_welcome_message": "ウェルカム メッセージ", "server_welcome_message": "ウェルカム メッセージ",
@@ -210,7 +246,7 @@
"storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)", "storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)",
"storage_template_migration": "ストレージ テンプレート の移行", "storage_template_migration": "ストレージ テンプレート の移行",
"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>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください", "storage_template_more_details": "この機能の詳細については、<template-link>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください",
"storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。", "storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。",
@@ -219,6 +255,17 @@
"storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します", "storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します",
"storage_template_user_label": "<code>{label}</code>はユーザーのストレージラベルです", "storage_template_user_label": "<code>{label}</code>はユーザーのストレージラベルです",
"system_settings": "システム設定", "system_settings": "システム設定",
"tag_cleanup_job": "タグのクリーンアップ",
"template_email_available_tags": "テンプレートで次の変数を使えます: {tags}",
"template_email_if_empty": "テンプレートが空の場合はデフォルトのメールが使われます。",
"template_email_invite_album": "アルバム招待のテンプレート",
"template_email_preview": "プレビュー",
"template_email_settings": "メールテンプレート",
"template_email_settings_description": "通知のメールテンプレートのカスタムを管理します",
"template_email_update_album": "アルバム更新のテンプレート",
"template_email_welcome": "ウェルカムメールのテンプレート",
"template_settings": "通知テンプレート",
"template_settings_description": "通知のためのカスタムテンプレートを管理します。",
"theme_custom_css_settings": "カスタムCSS", "theme_custom_css_settings": "カスタムCSS",
"theme_custom_css_settings_description": "CSS を使って Immich のデザインをカスタマイズできます。", "theme_custom_css_settings_description": "CSS を使って Immich のデザインをカスタマイズできます。",
"theme_settings": "テーマ設定", "theme_settings": "テーマ設定",
@@ -248,6 +295,8 @@
"transcoding_constant_rate_factor": "CRF値 (-crf)", "transcoding_constant_rate_factor": "CRF値 (-crf)",
"transcoding_constant_rate_factor_description": "出力動画の品質レベル。H.264の場合は23、HEVCの場合は28、VP9の場合は31、AV1の場合は35が一般的な値です。値が低いほど品質が良くなりますが、ファイルサイズが大きくなります。", "transcoding_constant_rate_factor_description": "出力動画の品質レベル。H.264の場合は23、HEVCの場合は28、VP9の場合は31、AV1の場合は35が一般的な値です。値が低いほど品質が良くなりますが、ファイルサイズが大きくなります。",
"transcoding_disabled_description": "動画をトランスコードしない設定にしますが、これにより一部のクライアントで再生ができなくなる可能性があります", "transcoding_disabled_description": "動画をトランスコードしない設定にしますが、これにより一部のクライアントで再生ができなくなる可能性があります",
"transcoding_encoding_options": "エンコードオプション",
"transcoding_encoding_options_description": "エンコードされた動画のコーデック、解像度、画質、その他オプションの設定します",
"transcoding_hardware_acceleration": "ハードウェアアクセラレーション", "transcoding_hardware_acceleration": "ハードウェアアクセラレーション",
"transcoding_hardware_acceleration_description": "より高速ですが、同じビットレートではより低品質になります(実験的)", "transcoding_hardware_acceleration_description": "より高速ですが、同じビットレートではより低品質になります(実験的)",
"transcoding_hardware_decoding": "ハードウェアデコード", "transcoding_hardware_decoding": "ハードウェアデコード",
@@ -256,10 +305,12 @@
"transcoding_max_b_frames": "最大Bフレーム", "transcoding_max_b_frames": "最大Bフレーム",
"transcoding_max_b_frames_description": "値を高くすると圧縮効率が向上しますが、エンコード速度が遅くなります。古いデバイスのハードウェアアクセラレーションでは対応していない場合があります。\"0\" はBフレームを無効にし、\"-1\" はこの値を自動的に設定します。", "transcoding_max_b_frames_description": "値を高くすると圧縮効率が向上しますが、エンコード速度が遅くなります。古いデバイスのハードウェアアクセラレーションでは対応していない場合があります。\"0\" はBフレームを無効にし、\"-1\" はこの値を自動的に設定します。",
"transcoding_max_bitrate": "最大ビットレート", "transcoding_max_bitrate": "最大ビットレート",
"transcoding_max_bitrate_description": "最大ビットレートを設定すると、品質にわずかな影響を与えながらも、ファイルサイズを予測しやすくなります。720pの場合、一般的な値は VP9 や HEVC で \"2600k\"、H.264 で \"4500k\" です。\"0\" に設定すると無効になります。", "transcoding_max_bitrate_description": "最大ビットレートを設定すると、品質にわずかな影響を与えながらも、ファイルサイズを予測しやすくなります。720pの場合、一般的な値は VP9 や HEVC で \"2600 kbit/s\"、H.264 で \"4500 kbit/s\" です。\"0\" に設定すると無効になります。",
"transcoding_max_keyframe_interval": "最大キーフレーム間隔", "transcoding_max_keyframe_interval": "最大キーフレーム間隔",
"transcoding_max_keyframe_interval_description": "キーフレーム間の最大フレーム間隔を設定します。値を低くすると圧縮効率が悪化しますが、シーク時間が改善され、動きの速いシーンの品質が向上する場合があります。\"0\" に設定すると、この値が自動的に設定されます。", "transcoding_max_keyframe_interval_description": "キーフレーム間の最大フレーム間隔を設定します。値を低くすると圧縮効率が悪化しますが、シーク時間が改善され、動きの速いシーンの品質が向上する場合があります。\"0\" に設定すると、この値が自動的に設定されます。",
"transcoding_optimal_description": "設定解像度を超える動画、または容認されていない形式の動画", "transcoding_optimal_description": "設定解像度を超える動画、または容認されていない形式の動画",
"transcoding_policy": "トランスコードポリシー",
"transcoding_policy_description": "動画がいつトランスコードされるかを設定します",
"transcoding_preferred_hardware_device": "推奨ハードウェアデバイス", "transcoding_preferred_hardware_device": "推奨ハードウェアデバイス",
"transcoding_preferred_hardware_device_description": "VAAPI と QSV のみに適用されます。 ハードウェアトランスコードに使用されるdriードを設定します。", "transcoding_preferred_hardware_device_description": "VAAPI と QSV のみに適用されます。 ハードウェアトランスコードに使用されるdriードを設定します。",
"transcoding_preset_preset": "プリセット (-preset)", "transcoding_preset_preset": "プリセット (-preset)",
@@ -268,7 +319,7 @@
"transcoding_reference_frames_description": "特定のフレームを圧縮するときに参照するフレームの数。より高い値は圧縮効率を改善しますが、エンコードが遅くなります。\"0\" に設定すると、この値が自動的に設定されます。", "transcoding_reference_frames_description": "特定のフレームを圧縮するときに参照するフレームの数。より高い値は圧縮効率を改善しますが、エンコードが遅くなります。\"0\" に設定すると、この値が自動的に設定されます。",
"transcoding_required_description": "許容されていない動画形式のみ", "transcoding_required_description": "許容されていない動画形式のみ",
"transcoding_settings": "動画トランスコード設定", "transcoding_settings": "動画トランスコード設定",
"transcoding_settings_description": "動画ファイルの解像度とエンコード情報を管理します", "transcoding_settings_description": "トランスコードする動画とその処理方法を管理します",
"transcoding_target_resolution": "解像度", "transcoding_target_resolution": "解像度",
"transcoding_target_resolution_description": "解像度を高くすると細かなディテールを保持できますが、エンコードに時間がかかり、ファイルサイズが大きくなり、アプリの応答性が低下する可能性があります。", "transcoding_target_resolution_description": "解像度を高くすると細かなディテールを保持できますが、エンコードに時間がかかり、ファイルサイズが大きくなり、アプリの応答性が低下する可能性があります。",
"transcoding_temporal_aq": "適応的量子化(Temporal AQ)", "transcoding_temporal_aq": "適応的量子化(Temporal AQ)",
@@ -290,6 +341,7 @@
"trash_settings_description": "ごみ箱の設定を管理します", "trash_settings_description": "ごみ箱の設定を管理します",
"untracked_files": "追跡されていないファイル", "untracked_files": "追跡されていないファイル",
"untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります", "untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります",
"user_cleanup_job": "ユーザーのクリーンアップ",
"user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。", "user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。",
"user_delete_delay_settings": "遅延削除", "user_delete_delay_settings": "遅延削除",
"user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。", "user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。",
@@ -345,6 +397,7 @@
"allow_edits": "編集を許可", "allow_edits": "編集を許可",
"allow_public_user_to_download": "一般ユーザーによるダウンロードを許可", "allow_public_user_to_download": "一般ユーザーによるダウンロードを許可",
"allow_public_user_to_upload": "一般ユーザーによるアップロードを許可", "allow_public_user_to_upload": "一般ユーザーによるアップロードを許可",
"alt_text_qr_code": "QRコード画像",
"anti_clockwise": "反時計回り", "anti_clockwise": "反時計回り",
"api_key": "APIキー", "api_key": "APIキー",
"api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。", "api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。",
@@ -368,8 +421,9 @@
"asset_offline": "アセットはオフラインです", "asset_offline": "アセットはオフラインです",
"asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。", "asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。",
"asset_skipped": "スキップ済", "asset_skipped": "スキップ済",
"asset_skipped_in_trash": "ゴミ箱の中",
"asset_uploaded": "アップロード済", "asset_uploaded": "アップロード済",
"asset_uploading": "アップロード中...", "asset_uploading": "アップロード中",
"assets": "アセット", "assets": "アセット",
"assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました", "assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました",
"assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました", "assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました",
@@ -378,7 +432,7 @@
"assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました", "assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました", "assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"assets_removed_count": "{count, plural, one {#個} other {#個}}のアセットを削除しました", "assets_removed_count": "{count, plural, one {#個} other {#個}}のアセットを削除しました",
"assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません!", "assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません! オフラインのアセットはこの方法では復元できません。",
"assets_restored_count": "{count, plural, one {#個} other {#個}}のアセットを復元しました", "assets_restored_count": "{count, plural, one {#個} other {#個}}のアセットを復元しました",
"assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました", "assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です", "assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です",
@@ -389,6 +443,7 @@
"birthdate_saved": "生年月日が正常に保存されました", "birthdate_saved": "生年月日が正常に保存されました",
"birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。", "birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。",
"blurred_background": "ぼやけた背景", "blurred_background": "ぼやけた背景",
"bugs_and_feature_requests": "バグと機能のリクエスト",
"build": "ビルド", "build": "ビルド",
"build_image": "ビルドイメージ", "build_image": "ビルドイメージ",
"bulk_delete_duplicates_confirmation": "本当に {count, plural, one {#個} other {#個}}の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!", "bulk_delete_duplicates_confirmation": "本当に {count, plural, one {#個} other {#個}}の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!",
@@ -433,7 +488,9 @@
"comments_are_disabled": "コメントは無効化されています", "comments_are_disabled": "コメントは無効化されています",
"confirm": "確認", "confirm": "確認",
"confirm_admin_password": "管理者パスワードを確認", "confirm_admin_password": "管理者パスワードを確認",
"confirm_delete_face": "本当に『{name}』の顔をアセットから削除しますか?",
"confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?", "confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?",
"confirm_keep_this_delete_others": "このアセット以外のアセットがスタックから削除されます。本当に削除しますか?",
"confirm_password": "確認", "confirm_password": "確認",
"contain": "収める", "contain": "収める",
"context": "状況", "context": "状況",
@@ -474,25 +531,33 @@
"date_range": "日付", "date_range": "日付",
"day": "ライトモード", "day": "ライトモード",
"deduplicate_all": "全て重複排除", "deduplicate_all": "全て重複排除",
"deduplication_criteria_1": "バイト単位の画像サイズ",
"deduplication_criteria_2": "EXIFデータ数",
"deduplication_info": "重複排除情報",
"deduplication_info_description": "アセットを自動的に選択して重複を一括で削除するには次のようにします:",
"default_locale": "デフォルトのロケール", "default_locale": "デフォルトのロケール",
"default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします", "default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします",
"delete": "削除", "delete": "削除",
"delete_album": "アルバムを削除", "delete_album": "アルバムを削除",
"delete_api_key_prompt": "本当にこのAPI キーを削除しますか?", "delete_api_key_prompt": "本当にこのAPI キーを削除しますか?",
"delete_duplicates_confirmation": "本当にこれらの重複を完全に削除しますか?", "delete_duplicates_confirmation": "本当にこれらの重複を完全に削除しますか?",
"delete_face": "顔の削除",
"delete_key": "キーを削除", "delete_key": "キーを削除",
"delete_library": "ライブラリを削除", "delete_library": "ライブラリを削除",
"delete_link": "リンクを削除", "delete_link": "リンクを削除",
"delete_others": "ほかを削除",
"delete_shared_link": "共有リンクを消す", "delete_shared_link": "共有リンクを消す",
"delete_tag": "タグを削除する", "delete_tag": "タグを削除する",
"delete_tag_confirmation_prompt": "本当に{tagName}タグを削除しますか?", "delete_tag_confirmation_prompt": "本当に{tagName}タグを削除しますか?",
"delete_user": "ユーザーを削除", "delete_user": "ユーザーを削除",
"deleted_shared_link": "共有リンクを削除", "deleted_shared_link": "共有リンクを削除",
"deletes_missing_assets": "ディスクからなくなったアセットを削除する",
"description": "概要欄", "description": "概要欄",
"details": "詳細", "details": "詳細",
"direction": "方向", "direction": "方向",
"disabled": "無効", "disabled": "無効",
"disallow_edits": "編集を許可しない", "disallow_edits": "編集を許可しない",
"discord": "Discord",
"discover": "探索", "discover": "探索",
"dismiss_all_errors": "全てのエラーを無視", "dismiss_all_errors": "全てのエラーを無視",
"dismiss_error": "エラーを無視", "dismiss_error": "エラーを無視",
@@ -501,6 +566,7 @@
"display_original_photos": "オリジナルの写真を表示", "display_original_photos": "オリジナルの写真を表示",
"display_original_photos_setting_description": "オリジナルのアセットが Web 互換である場合は、アセットを表示するときにサムネイルではなく元の写真を優先して表示します。これにより写真の表示速度が遅くなる可能性があります。", "display_original_photos_setting_description": "オリジナルのアセットが Web 互換である場合は、アセットを表示するときにサムネイルではなく元の写真を優先して表示します。これにより写真の表示速度が遅くなる可能性があります。",
"do_not_show_again": "このメッセージを再び表示しない", "do_not_show_again": "このメッセージを再び表示しない",
"documentation": "ドキュメント",
"done": "完了", "done": "完了",
"download": "ダウンロード", "download": "ダウンロード",
"download_include_embedded_motion_videos": "埋め込まれた動画", "download_include_embedded_motion_videos": "埋め込まれた動画",
@@ -543,6 +609,7 @@
"enabled": "有効", "enabled": "有効",
"end_date": "終了日", "end_date": "終了日",
"error": "エラー", "error": "エラー",
"error_delete_face": "アセットから顔の削除ができませんでした",
"error_loading_image": "画像の読み込みエラー", "error_loading_image": "画像の読み込みエラー",
"error_title": "エラー - 問題が発生しました", "error_title": "エラー - 問題が発生しました",
"errors": { "errors": {
@@ -570,6 +637,7 @@
"failed_to_create_shared_link": "共有リンクを作成できませんでした", "failed_to_create_shared_link": "共有リンクを作成できませんでした",
"failed_to_edit_shared_link": "共有リンクを編集できませんでした", "failed_to_edit_shared_link": "共有リンクを編集できませんでした",
"failed_to_get_people": "人物を取得できませんでした", "failed_to_get_people": "人物を取得できませんでした",
"failed_to_keep_this_delete_others": "ほかのアセットを削除できませんでした",
"failed_to_load_asset": "アセットを読み込めませんでした", "failed_to_load_asset": "アセットを読み込めませんでした",
"failed_to_load_assets": "アセットを読み込めませんでした", "failed_to_load_assets": "アセットを読み込めませんでした",
"failed_to_load_people": "人物を読み込めませんでした", "failed_to_load_people": "人物を読み込めませんでした",
@@ -621,6 +689,7 @@
"unable_to_get_comments_number": "コメント数を取得できません", "unable_to_get_comments_number": "コメント数を取得できません",
"unable_to_get_shared_link": "共有リンクの取得に失敗しました", "unable_to_get_shared_link": "共有リンクの取得に失敗しました",
"unable_to_hide_person": "人物を非表示にできません", "unable_to_hide_person": "人物を非表示にできません",
"unable_to_link_motion_video": "モーションビデオをリンクできません",
"unable_to_link_oauth_account": "OAuth アカウントをリンクできません", "unable_to_link_oauth_account": "OAuth アカウントをリンクできません",
"unable_to_load_album": "アルバムを読み込めません", "unable_to_load_album": "アルバムを読み込めません",
"unable_to_load_asset_activity": "アセットのアクティビティを読み込めません", "unable_to_load_asset_activity": "アセットのアクティビティを読み込めません",
@@ -659,6 +728,7 @@
"unable_to_submit_job": "ジョブを送信できません", "unable_to_submit_job": "ジョブを送信できません",
"unable_to_trash_asset": "アセットをゴミ箱に移動できません", "unable_to_trash_asset": "アセットをゴミ箱に移動できません",
"unable_to_unlink_account": "アカウントのリンクを解除できません", "unable_to_unlink_account": "アカウントのリンクを解除できません",
"unable_to_unlink_motion_video": "モーションビデオのリンクを解除できません",
"unable_to_update_album_cover": "アルバムカバーを更新できません", "unable_to_update_album_cover": "アルバムカバーを更新できません",
"unable_to_update_album_info": "アルバム情報を更新できません", "unable_to_update_album_info": "アルバム情報を更新できません",
"unable_to_update_library": "ライブラリを更新できません", "unable_to_update_library": "ライブラリを更新できません",
@@ -682,6 +752,7 @@
"external": "外部", "external": "外部",
"external_libraries": "外部ライブラリ", "external_libraries": "外部ライブラリ",
"face_unassigned": "未割り当て", "face_unassigned": "未割り当て",
"failed_to_load_assets": "アセットのロードに失敗しました",
"favorite": "お気に入り", "favorite": "お気に入り",
"favorite_or_unfavorite_photo": "写真をお気に入りまたはお気に入り解除", "favorite_or_unfavorite_photo": "写真をお気に入りまたはお気に入り解除",
"favorites": "お気に入り", "favorites": "お気に入り",
@@ -702,10 +773,13 @@
"get_help": "助けを求める", "get_help": "助けを求める",
"getting_started": "はじめる", "getting_started": "はじめる",
"go_back": "戻る", "go_back": "戻る",
"go_to_folder": "フォルダへ",
"go_to_search": "検索へ", "go_to_search": "検索へ",
"group_albums_by": "これでアルバムをグループ化…", "group_albums_by": "これでアルバムをグループ化…",
"group_country": "国でグループ化",
"group_no": "グループ化なし", "group_no": "グループ化なし",
"group_owner": "所有者でグループ化", "group_owner": "所有者でグループ化",
"group_places_by": "グループ分け...",
"group_year": "年でグループ化", "group_year": "年でグループ化",
"has_quota": "クォータ有り", "has_quota": "クォータ有り",
"hi_user": "こんにちは、{name}( {email})さん", "hi_user": "こんにちは、{name}( {email})さん",
@@ -738,6 +812,7 @@
"include_shared_albums": "共有アルバムを含める", "include_shared_albums": "共有アルバムを含める",
"include_shared_partner_assets": "パートナーがシェアしたアセットを含める", "include_shared_partner_assets": "パートナーがシェアしたアセットを含める",
"individual_share": "1枚の共有", "individual_share": "1枚の共有",
"individual_shares": "個人の共有",
"info": "情報", "info": "情報",
"interval": { "interval": {
"day_at_onepm": "毎日午後1時", "day_at_onepm": "毎日午後1時",
@@ -751,6 +826,8 @@
"jobs": "ジョブ", "jobs": "ジョブ",
"keep": "保持", "keep": "保持",
"keep_all": "全て保持", "keep_all": "全て保持",
"keep_this_delete_others": "これを残してほかを削除する",
"kept_this_deleted_others": "このアセットを残して{count, plural, other {#件のアセット}}を削除する",
"keyboard_shortcuts": "キーボードショートカット", "keyboard_shortcuts": "キーボードショートカット",
"language": "言語", "language": "言語",
"language_setting_description": "優先言語を選択してください", "language_setting_description": "優先言語を選択してください",
@@ -758,12 +835,14 @@
"latest_version": "最新バージョン", "latest_version": "最新バージョン",
"latitude": "緯度", "latitude": "緯度",
"leave": "標高", "leave": "標高",
"lens_model": "レンズモデル",
"let_others_respond": "他のユーザーの返信を許可する", "let_others_respond": "他のユーザーの返信を許可する",
"level": "レベル", "level": "レベル",
"library": "ライブラリ", "library": "ライブラリ",
"library_options": "ライブラリ設定", "library_options": "ライブラリ設定",
"light": "ライトモード", "light": "ライトモード",
"like_deleted": "いいねが削除されました", "like_deleted": "いいねが削除されました",
"link_motion_video": "モーションビデオのリンク",
"link_options": "リンクのオプション", "link_options": "リンクのオプション",
"link_to_oauth": "OAuthへリンクする", "link_to_oauth": "OAuthへリンクする",
"linked_oauth_account": "リンクされたOAuthアカウント", "linked_oauth_account": "リンクされたOAuthアカウント",
@@ -782,6 +861,8 @@
"look": "見た目", "look": "見た目",
"loop_videos": "動画をループ", "loop_videos": "動画をループ",
"loop_videos_description": "有効にすると詳細表示で自動的に動画がループします。", "loop_videos_description": "有効にすると詳細表示で自動的に動画がループします。",
"main_branch_warning": "開発版を使っているようです。リリース版の使用を強く推奨します!",
"main_menu": "メインメニュー",
"make": "メーカー", "make": "メーカー",
"manage_shared_links": "共有済みのリンクを管理", "manage_shared_links": "共有済みのリンクを管理",
"manage_sharing_with_partners": "パートナーとの共有を管理します", "manage_sharing_with_partners": "パートナーとの共有を管理します",
@@ -814,6 +895,7 @@
"month": "月", "month": "月",
"more": "もっと表示", "more": "もっと表示",
"moved_to_trash": "ゴミ箱に移動しました", "moved_to_trash": "ゴミ箱に移動しました",
"mute_memories": "メモリーのミュート",
"my_albums": "私のアルバム", "my_albums": "私のアルバム",
"name": "名前", "name": "名前",
"name_or_nickname": "名前またはニックネーム", "name_or_nickname": "名前またはニックネーム",
@@ -843,7 +925,7 @@
"no_results": "結果がありません", "no_results": "結果がありません",
"no_results_description": "同義語やより一般的なキーワードを試してください", "no_results_description": "同義語やより一般的なキーワードを試してください",
"no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう", "no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう",
"not_in_any_album": "どのアルバムにも入っていません", "not_in_any_album": "どのアルバムにも入っていない",
"note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください", "note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください",
"note_unlimited_quota": "注: 容量を無制限にするには0を入力してください", "note_unlimited_quota": "注: 容量を無制限にするには0を入力してください",
"notes": "注意", "notes": "注意",
@@ -851,6 +933,7 @@
"notifications": "通知", "notifications": "通知",
"notifications_setting_description": "通知を管理します", "notifications_setting_description": "通知を管理します",
"oauth": "OAuth", "oauth": "OAuth",
"official_immich_resources": "公式Immichリソース",
"offline": "オフライン", "offline": "オフライン",
"offline_paths": "オフラインのパス", "offline_paths": "オフラインのパス",
"offline_paths_description": "これらの結果は、外部ライブラリの一部ではないファイルを手動で削除したことが原因である可能性があります。", "offline_paths_description": "これらの結果は、外部ライブラリの一部ではないファイルを手動で削除したことが原因である可能性があります。",
@@ -908,6 +991,7 @@
"permanently_deleted_asset": "アセットを完全に削除しました", "permanently_deleted_asset": "アセットを完全に削除しました",
"permanently_deleted_assets_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました", "permanently_deleted_assets_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"person": "人物", "person": "人物",
"person_birthdate": "{date}生まれ",
"person_hidden": "{name}{hidden, select, true { (非表示)} other {}}", "person_hidden": "{name}{hidden, select, true { (非表示)} other {}}",
"photo_shared_all_users": "写真をすべてのユーザーと共有したか、共有するユーザーがいないようです。", "photo_shared_all_users": "写真をすべてのユーザーと共有したか、共有するユーザーがいないようです。",
"photos": "写真", "photos": "写真",
@@ -917,6 +1001,7 @@
"pick_a_location": "場所を選択", "pick_a_location": "場所を選択",
"place": "場所", "place": "場所",
"places": "撮影場所", "places": "撮影場所",
"places_count": "{count, plural, other {{count, number}箇所}}",
"play": "再生", "play": "再生",
"play_memories": "メモリーを再生", "play_memories": "メモリーを再生",
"play_motion_photo": "モーションビデオを再生", "play_motion_photo": "モーションビデオを再生",
@@ -976,14 +1061,17 @@
"reassigned_assets_to_new_person": "{count, plural, one {#個} other {#個}}のアセットを新しい人物に割り当てました", "reassigned_assets_to_new_person": "{count, plural, one {#個} other {#個}}のアセットを新しい人物に割り当てました",
"reassing_hint": "選択されたアセットを既存の人物に割り当て", "reassing_hint": "選択されたアセットを既存の人物に割り当て",
"recent": "最近", "recent": "最近",
"recent-albums": "最近のアルバム",
"recent_searches": "最近の検索", "recent_searches": "最近の検索",
"refresh": "更新", "refresh": "更新",
"refresh_encoded_videos": "エンコードされた動画を更新", "refresh_encoded_videos": "エンコードされた動画を更新",
"refresh_faces": "顔認識を更新",
"refresh_metadata": "メタデータを更新", "refresh_metadata": "メタデータを更新",
"refresh_thumbnails": "サムネイルを更新", "refresh_thumbnails": "サムネイルを更新",
"refreshed": "更新済", "refreshed": "更新済",
"refreshes_every_file": "すべてのファイルを更新", "refreshes_every_file": "すべてのファイルを更新",
"refreshing_encoded_video": "エンコードされた動画を更新中", "refreshing_encoded_video": "エンコードされた動画を更新中",
"refreshing_faces": "顔認識を更新中",
"refreshing_metadata": "メタデータを更新中", "refreshing_metadata": "メタデータを更新中",
"regenerating_thumbnails": "サムネイルを再生成中", "regenerating_thumbnails": "サムネイルを再生成中",
"remove": "削除", "remove": "削除",
@@ -995,11 +1083,16 @@
"remove_from_album": "アルバムから削除", "remove_from_album": "アルバムから削除",
"remove_from_favorites": "お気に入りから削除", "remove_from_favorites": "お気に入りから削除",
"remove_from_shared_link": "共有リンクから削除", "remove_from_shared_link": "共有リンクから削除",
"remove_memory": "メモリーの削除",
"remove_photo_from_memory": "メモリーから写真を削除",
"remove_url": "URLの削除",
"remove_user": "ユーザーを削除", "remove_user": "ユーザーを削除",
"removed_api_key": "削除されたAPI キー: {name}", "removed_api_key": "削除されたAPI キー: {name}",
"removed_from_archive": "アーカイブから削除されました", "removed_from_archive": "アーカイブから削除されました",
"removed_from_favorites": "お気に入りから削除しました", "removed_from_favorites": "お気に入りから削除しました",
"removed_from_favorites_count": "{count, plural, other {#項目}}お気に入りから削除しました", "removed_from_favorites_count": "{count, plural, other {#項目}}お気に入りから削除しました",
"removed_memory": "削除されたメモリー",
"removed_photo_from_memory": "メモリーから削除された写真",
"removed_tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}からタグを削除しました", "removed_tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}からタグを削除しました",
"rename": "リネーム", "rename": "リネーム",
"repair": "修復", "repair": "修復",
@@ -1008,6 +1101,7 @@
"repository": "リポジトリ", "repository": "リポジトリ",
"require_password": "パスワードを要求", "require_password": "パスワードを要求",
"require_user_to_change_password_on_first_login": "ユーザーに初回ログイン時にパスワードの変更を要求する", "require_user_to_change_password_on_first_login": "ユーザーに初回ログイン時にパスワードの変更を要求する",
"rescan": "再スキャン",
"reset": "リセット", "reset": "リセット",
"reset_password": "パスワードをリセット", "reset_password": "パスワードをリセット",
"reset_people_visibility": "人物の非表示設定をリセット", "reset_people_visibility": "人物の非表示設定をリセット",
@@ -1030,22 +1124,29 @@
"saved_settings": "設定を保存しました", "saved_settings": "設定を保存しました",
"say_something": "何か書き込みましょう", "say_something": "何か書き込みましょう",
"scan_all_libraries": "全てのライブラリをスキャン", "scan_all_libraries": "全てのライブラリをスキャン",
"scan_library": "スキャン",
"scan_settings": "スキャン設定", "scan_settings": "スキャン設定",
"scanning_for_album": "アルバムをスキャン中…", "scanning_for_album": "アルバムをスキャン中…",
"search": "検索", "search": "検索",
"search_albums": "アルバムを検索", "search_albums": "アルバムを検索",
"search_by_context": "状況で検索", "search_by_context": "状況で検索",
"search_by_description": "概要で検索",
"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_camera_make": "カメラメーカーを検索…", "search_camera_make": "カメラメーカーを検索…",
"search_camera_model": "カメラのモデルを検索…", "search_camera_model": "カメラのモデルを検索…",
"search_city": "市町村を検索…", "search_city": "市町村を検索…",
"search_country": "国を検索…", "search_country": "国を検索…",
"search_for": "検索",
"search_for_existing_person": "既存の人物を検索", "search_for_existing_person": "既存の人物を検索",
"search_no_people": "人物がいません", "search_no_people": "人物がいません",
"search_no_people_named": "「{name}」という名前の人物がいません", "search_no_people_named": "「{name}」という名前の人物がいません",
"search_options": "検索オプション",
"search_people": "人物を検索", "search_people": "人物を検索",
"search_places": "場所を検索", "search_places": "場所を検索",
"search_rating": "レートで検索...",
"search_settings": "検索設定",
"search_state": "都道府県を検索…", "search_state": "都道府県を検索…",
"search_tags": "タグを検索...", "search_tags": "タグを検索...",
"search_timezone": "タイムゾーンを検索…", "search_timezone": "タイムゾーンを検索…",
@@ -1054,6 +1155,7 @@
"searching_locales": "ロケールを検索…", "searching_locales": "ロケールを検索…",
"second": "秒", "second": "秒",
"see_all_people": "全ての人物を見る", "see_all_people": "全ての人物を見る",
"select": "選択",
"select_album_cover": "アルバムカバーを選択", "select_album_cover": "アルバムカバーを選択",
"select_all": "全て選択", "select_all": "全て選択",
"select_all_duplicates": "全ての重複を選択", "select_all_duplicates": "全ての重複を選択",
@@ -1076,6 +1178,7 @@
"server_version": "サーバーバージョン", "server_version": "サーバーバージョン",
"set": "設定", "set": "設定",
"set_as_album_cover": "アルバムカバーとして設定", "set_as_album_cover": "アルバムカバーとして設定",
"set_as_featured_photo": "人物写真に設定",
"set_as_profile_picture": "プロフィール画像として設定", "set_as_profile_picture": "プロフィール画像として設定",
"set_date_of_birth": "生年月日を設定", "set_date_of_birth": "生年月日を設定",
"set_profile_picture": "プロフィール画像を設定", "set_profile_picture": "プロフィール画像を設定",
@@ -1090,6 +1193,7 @@
"shared_from_partner": "{partner} による写真", "shared_from_partner": "{partner} による写真",
"shared_link_options": "共有リンクのオプション", "shared_link_options": "共有リンクのオプション",
"shared_links": "共有リンク", "shared_links": "共有リンク",
"shared_links_description": "写真や動画をリンクで共有",
"shared_photos_and_videos_count": "{assetCount, plural, other {#個の共有された写真と動画}}", "shared_photos_and_videos_count": "{assetCount, plural, other {#個の共有された写真と動画}}",
"shared_with_partner": "{partner} と共有しました", "shared_with_partner": "{partner} と共有しました",
"sharing": "共有", "sharing": "共有",
@@ -1112,6 +1216,8 @@
"show_person_options": "人物設定を表示", "show_person_options": "人物設定を表示",
"show_progress_bar": "プログレスバーを表示", "show_progress_bar": "プログレスバーを表示",
"show_search_options": "検索オプションを表示", "show_search_options": "検索オプションを表示",
"show_shared_links": "共有リンクを表示",
"show_slideshow_transition": "スライドショーのトランジションを表示",
"show_supporter_badge": "サポーターバッジ", "show_supporter_badge": "サポーターバッジ",
"show_supporter_badge_description": "サポーターバッジを表示", "show_supporter_badge_description": "サポーターバッジを表示",
"shuffle": "ランダム", "shuffle": "ランダム",
@@ -1121,6 +1227,8 @@
"sign_up": "登録", "sign_up": "登録",
"size": "サイズ", "size": "サイズ",
"skip_to_content": "コンテンツへスキップ", "skip_to_content": "コンテンツへスキップ",
"skip_to_folders": "フォルダへスキップ",
"skip_to_tags": "タグへスキップ",
"slideshow": "スライドショー", "slideshow": "スライドショー",
"slideshow_settings": "スライドショー設定", "slideshow_settings": "スライドショー設定",
"sort_albums_by": "この順序でアルバムをソート…", "sort_albums_by": "この順序でアルバムをソート…",
@@ -1128,6 +1236,7 @@
"sort_items": "アイテムの数", "sort_items": "アイテムの数",
"sort_modified": "変更日", "sort_modified": "変更日",
"sort_oldest": "古い写真", "sort_oldest": "古い写真",
"sort_people_by_similarity": "似ている順に人物を並び替える",
"sort_recent": "最新の写真", "sort_recent": "最新の写真",
"sort_title": "タイトル", "sort_title": "タイトル",
"source": "ソース", "source": "ソース",
@@ -1151,12 +1260,17 @@
"submit": "送信", "submit": "送信",
"suggestions": "ユーザーリスト", "suggestions": "ユーザーリスト",
"sunrise_on_the_beach": "海岸の日の出", "sunrise_on_the_beach": "海岸の日の出",
"support": "サポート",
"support_and_feedback": "サポートとフィードバック",
"support_third_party_description": "Immichのインストールはサードパーティーによってパッケージ化されています。遭遇した問題はそのパッケージに起因している可能性があるので以下のリンクを使って最初にそのパッケージに問題を提起してください。",
"swap_merge_direction": "統合する方向を入れ替え", "swap_merge_direction": "統合する方向を入れ替え",
"sync": "同期", "sync": "同期",
"tag": "タグ付けする", "tag": "タグ付けする",
"tag_assets": "アセットにタグ付けする", "tag_assets": "アセットにタグ付けする",
"tag_created": "タグ: {tag} を作成しました", "tag_created": "タグ: {tag} を作成しました",
"tag_feature_description": "意味を持たせたタグトでグループ化して写真と動画を閲覧する",
"tag_not_found_question": "タグが見つかりませんか? <link>こちら</link>からタグを作成できます", "tag_not_found_question": "タグが見つかりませんか? <link>こちら</link>からタグを作成できます",
"tag_people": "人物タグ",
"tag_updated": "タグ: {tag} を更新しました", "tag_updated": "タグ: {tag} を更新しました",
"tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}をタグ付けしました", "tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}をタグ付けしました",
"tags": "タグ", "tags": "タグ",
@@ -1165,15 +1279,19 @@
"theme_selection": "テーマ選択", "theme_selection": "テーマ選択",
"theme_selection_description": "ブラウザのシステム設定に基づいてテーマを明色または暗色に自動的に設定します", "theme_selection_description": "ブラウザのシステム設定に基づいてテーマを明色または暗色に自動的に設定します",
"they_will_be_merged_together": "これらは一緒に統合されます", "they_will_be_merged_together": "これらは一緒に統合されます",
"third_party_resources": "サードパーティーリソース",
"time_based_memories": "時間によるメモリー", "time_based_memories": "時間によるメモリー",
"timeline": "タイムライン",
"timezone": "タイムゾーン", "timezone": "タイムゾーン",
"to_archive": "アーカイブ", "to_archive": "アーカイブ",
"to_change_password": "パスワードを変更", "to_change_password": "パスワードを変更",
"to_favorite": "お気に入り", "to_favorite": "お気に入り",
"to_login": "ログイン", "to_login": "ログイン",
"to_parent": "上位の階層へ",
"to_trash": "ゴミ箱", "to_trash": "ゴミ箱",
"toggle_settings": "設定をトグル", "toggle_settings": "設定をトグル",
"toggle_theme": "ダークテーマを切り替え", "toggle_theme": "ダークテーマを切り替え",
"total": "合計",
"total_usage": "総使用量", "total_usage": "総使用量",
"trash": "ゴミ箱", "trash": "ゴミ箱",
"trash_all": "全て削除", "trash_all": "全て削除",
@@ -1187,10 +1305,13 @@
"unfavorite": "お気に入りから外す", "unfavorite": "お気に入りから外す",
"unhide_person": "人物の非表示を解除", "unhide_person": "人物の非表示を解除",
"unknown": "不明", "unknown": "不明",
"unknown_country": "不明な国",
"unknown_year": "不明な年", "unknown_year": "不明な年",
"unlimited": "無制限", "unlimited": "無制限",
"unlink_motion_video": "モーションビデオのリンクを解除",
"unlink_oauth": "OAuthのリンクを解除", "unlink_oauth": "OAuthのリンクを解除",
"unlinked_oauth_account": "リンクが解除されたOAuthアカウント", "unlinked_oauth_account": "リンクが解除されたOAuthアカウント",
"unmute_memories": "メモリーのミュートを解除",
"unnamed_album": "無名のアルバム", "unnamed_album": "無名のアルバム",
"unnamed_album_delete_confirmation": "本当にこのアルバムを削除しますか?", "unnamed_album_delete_confirmation": "本当にこのアルバムを削除しますか?",
"unnamed_share": "無名の共有", "unnamed_share": "無名の共有",
@@ -1231,7 +1352,9 @@
"variables": "変数", "variables": "変数",
"version": "バージョン", "version": "バージョン",
"version_announcement_closing": "あなたの友人、Alex", "version_announcement_closing": "あなたの友人、Alex",
"version_announcement_message": "こんにちは、親愛なる皆様へ。アプリの新しいバージョンがありますので、構成の不整合を防ぐために<link>リリースノート</link>にアクセスし、<code>docker-compose.yml</code>、及び<code>.cnv</code>の設定が最新か確認してください。特に自動的にアプリの更新を制御するWatchTowerやその他システムを利用している場合に当てはまります。", "version_announcement_message": "こんにちは! 新しいバージョンのImmichがリリースされました。特にWatchTowerやImmichインスタンスを自動的に更新する仕組みを設けている場合は<link>リリースノート</link>をよく読んで設定が最新のものになっているか確認してください。",
"version_history": "バージョン履歴",
"version_history_item": "{date}に{version}をインストール",
"video": "動画", "video": "動画",
"video_hover_setting": "ホバー時にサムネイルで動画を再生", "video_hover_setting": "ホバー時にサムネイルで動画を再生",
"video_hover_setting_description": "マウスが項目の上にあるときに動画のサムネイルを再生します。無効時でも再生アイコンにカーソルを合わせると再生を開始できます。", "video_hover_setting_description": "マウスが項目の上にあるときに動画のサムネイルを再生します。無効時でも再生アイコンにカーソルを合わせると再生を開始できます。",
@@ -1242,7 +1365,9 @@
"view_all": "すべて見る", "view_all": "すべて見る",
"view_all_users": "全てのユーザーを確認する", "view_all_users": "全てのユーザーを確認する",
"view_in_timeline": "タイムラインで見る", "view_in_timeline": "タイムラインで見る",
"view_link": "リンクを見る",
"view_links": "リンクを確認する", "view_links": "リンクを確認する",
"view_name": "分類",
"view_next_asset": "次のアセットを見る", "view_next_asset": "次のアセットを見る",
"view_previous_asset": "前のアセットを見る", "view_previous_asset": "前のアセットを見る",
"view_stack": "ビュースタック", "view_stack": "ビュースタック",
@@ -1251,7 +1376,7 @@
"warning": "警告", "warning": "警告",
"week": "週", "week": "週",
"welcome": "ようこそ", "welcome": "ようこそ",
"welcome_to_immich": "immichにようこそ", "welcome_to_immich": "Immichにようこそ",
"year": "年", "year": "年",
"years_ago": "{years, plural, one {#年} other {#年}}前", "years_ago": "{years, plural, one {#年} other {#年}}前",
"yes": "はい", "yes": "はい",

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